Skip to content

Commit

Permalink
add environment state to localstorage
Browse files Browse the repository at this point in the history
  • Loading branch information
dmca-glasgow committed Jun 29, 2022
1 parent baa5f7f commit 6adb2a6
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 20 deletions.
34 changes: 22 additions & 12 deletions compiler/src/mdast/environment.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import startCase from 'lodash/startCase.js';
import { ContainerDirective, LeafDirective } from 'mdast-util-directive';
import { Node } from 'unist';
import { ContainerDirective } from 'mdast-util-directive';
import { toHast } from 'mdast-util-to-hast';
import { Node, Parent } from 'unist';
import { visit } from 'unist-util-visit';

const platforms = ['mac', 'windows', 'linux'];
Expand All @@ -11,15 +12,10 @@ export function environment() {
// const defaultProgram = programs[0];

return async (tree: Node) => {
visit(tree, 'leafDirective', (node: LeafDirective) => {
if (node.name === 'environment') {
node.data = createEnvironmentConfig();
}
// console.log('leaf', node);
});

visit(tree, 'containerDirective', (node: ContainerDirective) => {
if (platforms.includes(node.name)) {
if (node.name === 'environment') {
node.data = createEnvironmentConfig(node);
} else if (platforms.includes(node.name)) {
node.data = {
hProperties: {
className: ['platform', node.name],
Expand All @@ -32,19 +28,33 @@ export function environment() {
},
};
}
// console.log('container', node);
});
};
}

function createEnvironmentConfig() {
function createEnvironmentConfig(node: Parent) {
const hName = 'div';

const hProperties = {
id: 'environment',
className: 'boxout',
};

const hChildren = [
{
type: 'element',
tagName: 'span',
properties: {
className: ['type'],
},
children: [
{
type: 'text',
value: 'Environment',
},
],
},
...node.children.map((node) => toHast(node as any)),
{
type: 'element',
tagName: 'div',
Expand Down
15 changes: 12 additions & 3 deletions template/src/environment/platform.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
import { saveState } from '../util';
import { state } from './state';

document.documentElement.classList.add(state.platform);
const current = `platform-${state.platform}`;

document.documentElement.classList.add(current);

document.querySelectorAll('#platforms input').forEach((elem) => {
const input = elem as HTMLInputElement;
input.checked = input.value === state.platform;
});

document.querySelectorAll('#platforms label').forEach((elem) => {
elem.addEventListener('click', setPlatform);
Expand All @@ -12,11 +19,13 @@ function setPlatform(e: Event) {
const platform = target.getAttribute('data-platform') as string;
const newClass = `platform-${platform}`;

console.log({ platform, newClass });

if (document.documentElement.classList.contains(newClass)) {
return;
}

document.documentElement.classList.replace(state.platform, newClass);
state.platform = newClass;
document.documentElement.classList.replace(current, newClass);
state.platform = platform;
saveState('environment', state);
}
13 changes: 10 additions & 3 deletions template/src/environment/program.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
import { saveState } from '../util';
import { state } from './state';

document.documentElement.classList.add(state.program);
const current = `program-${state.program}`;

document.documentElement.classList.add(current);

document.querySelectorAll('#programs input').forEach((elem) => {
const input = elem as HTMLInputElement;
input.checked = input.value === state.program;
});

document.querySelectorAll('#programs label').forEach((elem) => {
elem.addEventListener('click', setProgram);
Expand All @@ -16,7 +23,7 @@ function setProgram(e: Event) {
return;
}

document.documentElement.classList.replace(state.program, newClass);
state.program = newClass;
document.documentElement.classList.replace(current, newClass);
state.program = program;
saveState('environment', state);
}
4 changes: 2 additions & 2 deletions template/src/environment/state.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ export type State = {
};

export const defaultState: State = Object.freeze({
platform: 'platform-mac',
program: 'program-cli',
platform: 'mac',
program: 'cli',
});

export const state = getSavedState('environment', defaultState);
4 changes: 4 additions & 0 deletions template/src/styles/environment.scss
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
#environment label span {
padding: 0 1em 0 0.25em;
}

.platform {
display: none;
}
Expand Down

0 comments on commit 6adb2a6

Please sign in to comment.