Skip to content

Commit

Permalink
More stories
Browse files Browse the repository at this point in the history
  • Loading branch information
adrianfish committed Jun 9, 2020
1 parent ba2592f commit 11ca6ac
Show file tree
Hide file tree
Showing 10 changed files with 241 additions and 37 deletions.
3 changes: 2 additions & 1 deletion .storybook/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ module.exports = {
stories: ['../stories/**/*.stories.js'],
addons: [
'@storybook/addon-knobs/register',
'@storybook/addon-actions/register'
'@storybook/addon-actions/register',
'@storybook/addon-cssresources/register'
],
};
15 changes: 15 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"devDependencies": {
"@babel/core": "^7.10.2",
"@storybook/addon-actions": "^5.3.19",
"@storybook/addon-cssresources": "^5.3.19",
"@storybook/addon-knobs": "^5.3.19",
"@storybook/web-components": "^5.3.19",
"babel-loader": "^8.1.0"
Expand Down
80 changes: 72 additions & 8 deletions src/sakai-course-card.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,78 @@ export class SakaiCourseCard extends LitElement {
display: block;
width: var(--sakai-course-card-width, 240px);
}
.course-block { border: black 1px solid; border-bottom: 0; border-radius: 5px 5px 0px 0px; padding: 5px; background-color: lightgray; }
body {
}
.course-block {
border: 1px solid;
border-color: var(--sakai-course-card-border-color, red);
border-bottom: 0;
border-radius: var(--sakai-course-card-border-radius, 4px) var(--sakai-course-card-border-radius, 4px) 0px 0px;
padding: var(--sakai-course-card-padding, 13px);
background-color: var(--sakai-course-card-background-color, darkgray);
}
.top-bar { display: flex; justify-content: space-between;}
.title-block { flex: 2 }
.title-block span { margin-left: 8px; font-size: var(--sakai-course-card-title-font-size, 20px) }
.title-block {
flex: 2;
color: var(--sakai-course-card-title-color, white);
font-family: var(--sakai-course-card-font-family, arial);
}
.title-block span {
margin-left: 8px;
font-size: var(--sakai-course-card-title-font-size, 18px);
}
.code-block {
color: var(--sakai-course-card-code-color, white);
font-size: var(--sakai-course-card-code-font-size, 14px);
font-family: var(--sakai-course-card-font-family, arial);
}
.disclose-block { flex: 1; text-align: right; }
.tool-alerts-block { align-items: center; justify-content: left; display: flex; height: 30px; border: black 1px solid; border-radius: 0px 0px 5px 5px; border-top: 0; }
.tool-alerts-block {
display: flex;
align-items: center;
justify-content: left;
height: var(--sakai-course-card-tool-alerts-height, 40px);
padding: var(--sakai-course-card-tool-alerts-padding, 5px);
border: 1px solid;
border-color: var(--sakai-course-card-border-color, red);
border-radius: 0px 0px var(--sakai-course-card-border-radius, 4px) var(--sakai-course-card-border-radius, 4px);
border-top: 0;
background-color: var(--sakai-course-card-tool-alerts-background-color, white);
color: var(--sakai-course-card-tool-alerts-color, black);
}
sakai-icon { margin: 0 5px 0 5px; }
.tool-alerts-block div { flex: 0; margin-left: 5px; margin-right: 5px; }
.favourite { color: var(--sakai-icon-favourite-color, yellow) }
#arrow, #arrow::before {
position: absolute;
width: 10px;
height: 10px;
z-index: -1;
margin-top: 1px;
}
#arrow::before {
content: '';
transform: rotate(45deg);
background: white;
}
#tooltip[data-popper-placement^='top'] > #arrow {
bottom: -4px;
}
#tooltip[data-popper-placement^='bottom'] > #arrow {
top: -4px;
}
#tooltip[data-popper-placement^='left'] > #arrow {
right: -4px;
}
#tooltip[data-popper-placement^='right'] > #arrow {
left: -4px;
}
`;
}

Expand Down Expand Up @@ -52,30 +117,29 @@ export class SakaiCourseCard extends LitElement {
if (!this.alerts.includes(e.target.value)) {
this.alerts.push(e.target.value);
this.alerts = [ ...this.alerts ];
console.log(this.alerts);
}
} else {
if (this.alerts.includes(e.target.value)) {
this.alerts.splice(this.alerts.indexOf(e.target.value), 1);
this.alerts = [ ...this.alerts ];
console.log(this.alerts);
}
}

return false;
}

render() {
//<div id="arrow" data-popper-arrow></div>

return html`
<div class="course-block">
<div class="top-bar">
<div class="title-block">
<sakai-icon type="favourite"></sakai-icon>
<sakai-icon class="favourite" type="favourite" size="small"></sakai-icon>
<span>${this.courseTitle}</span>
</div>
<sakai-options-menu>
<div slot="content">
<div slot="content" id="tooltip">
<div>Select tools to display:</div>
${Object.keys(this.toolnameMap).map(k => html`
<div><input type="checkbox" value="${k}" .checked=${this.alerts.includes(k)} @click=${this._toolClicked} />${this.toolnameMap[k]}</div>
Expand Down
22 changes: 18 additions & 4 deletions src/sakai-icon.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,28 @@ export class SakaiIcon extends LitElement {
static get styles() {

return css`
.sakai-small-icon { width: var(--sakai-standard-icon-width, 14px); height: var(--sakai-standard-icon-height, 14px) }
.sakai-standard-icon { width: var(--sakai-standard-icon-width, 24px); height: var(--sakai-standard-icon-height, 24px) }
.sakai-small-icon { width: var(--sakai-small-icon-width, 14px); height: var(--sakai-small-icon-height, 15px) }
.sakai-medium-icon { width: var(--sakai-medium-icon-width, 24px); height: var(--sakai-medium-icon-height, 24px) }
.sakai-large-icon { width: var(--sakai-large-icon-width, 32px); height: var(--sakai-large-icon-height, 32px) }
.alert {
background-color: var(--sakai-icon-alert-color, red);
width: var(--sakai-icon-alert-width, 4px);
height: var(--sakai-icon-alert-width, 4px);
position: absolute;
margin-top: -18px;
margin-left: 15px;
-webkit-border-radius: calc(var(--sakai-icon-alert-width, 4px) / 2);
-moz-border-radius: calc(var(--sakai-icon-alert-width, 4px) / 2);
border-radius: calc(var(--sakai-icon-alert-width, 4px) / 2);
}
`;
}

static get properties() {

return {
hasAlerts: { attribute: "has-alerts", type: Boolean },
type: String,
size: String,
};
Expand All @@ -23,11 +37,11 @@ export class SakaiIcon extends LitElement {
constructor() {

super();
this.size = "standard";
this.size = "medium";
}

render() {
return html`${icon(SakaiIcon.lookups.get(this.type), {classes: `sakai-${this.size}-icon`}).node}`;
return html`${icon(SakaiIcon.lookups.get(this.type), {classes: `sakai-${this.size}-icon`}).node}${this.hasAlerts ? html`<div class="alert"></div>` : ""}`;
}
}

Expand Down
20 changes: 16 additions & 4 deletions src/sakai-options-menu.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@ export class SakaiOptionsMenu extends LitElement {
border-width: var(--sakai-options-menu-border-width, 1px);
border-style: var(--sakai-options-menu-border-style, solid);
border-color: var(--sakai-options-menu-border-color, black);
font-family: var(--sakai-options-menu-font-family, arial, sans-serif);
padding: 5px;
}
#invoker {
color: var(--sakai-options-menu-invoker-color, white);
font-size: var(--sakai-options-menu-invoker-size, 24px);
}
`;
}
Expand All @@ -29,18 +35,24 @@ export class SakaiOptionsMenu extends LitElement {

super();
this.placement = "right";
this.invoker = `sakai-options-invoker-${Math.floor(Math.random() * Math.floor(1000))}`;
}

firstUpdated(changed) {

this.content = this.shadowRoot.querySelector('slot[name="content"]').assignedNodes()[0];
this.content.addEventListener("keydown", (e) => this._handleEscape(e));

this.invoker = this.shadowRoot.querySelector(`#${this.invoker}`);
this.invoker = this.shadowRoot.querySelector("#invoker");
this.invoker.addEventListener("keydown", (e) => this._handleEscape(e));

createPopper(this.invoker, this.content, { placement: this.placement });
createPopper(this.invoker, this.content,
{
placement: this.placement,
modifiers: [
{ name: 'offset', options: { offset: [0, 8] }},
]
}
);
}

_handleEscape(e) {
Expand All @@ -65,7 +77,7 @@ export class SakaiOptionsMenu extends LitElement {
render() {

return html`
<a href="javascript:;" @click=${this._toggle} id="${this.invoker}"><sakai-icon type="menu" size="small" /></a>
<a id="invoker" href="javascript:;" @click=${this._toggle}><sakai-icon type="menu" size="small" /></a>
<slot name="content"></slot>
`;
}
Expand Down
20 changes: 0 additions & 20 deletions stories/index.stories.js

This file was deleted.

61 changes: 61 additions & 0 deletions stories/sakai-course-card.stories.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import { html } from 'lit-html';
import { withKnobs, text, boolean, number } from "@storybook/addon-knobs";
import { withCssResources } from '@storybook/addon-cssresources';

import '../src/sakai-course-card.js';

export default {
title: 'Sakai Course Card',
decorators: [withCssResources, withKnobs],
parameters: {
cssresources: [
{
id: `smalltheme`,
code: `
<style>
body {
--sakai-course-card-font-face: arial;
--sakai-course-card-width: 180px;
--sakai-course-card-title-font-size: 12px;
--sakai-course-card-code-font-size: 10px;
--sakai-course-card-background-color: red;
--sakai-course-card-title-color: green;
--sakai-options-menu-invoker-color: white;
--sakai-icon-favourite-color: green;
--sakai-course-card-tool-alerts-height: 20px;
--sakai-course-card-border-color: black;
}
</style>`,
picked: false,
},
{
id: `bigtheme`,
code: `
<style>
body {
--sakai-course-card-font-face: arial;
--sakai-course-card-width: 480px;
--sakai-course-card-title-font-size: 40px;
--sakai-course-card-code-font-size: 30px;
--sakai-course-card-background-color: blue;
--sakai-course-card-title-color: white;
--sakai-course-card-border-radius: 10px;
--sakai-options-menu-invoker-color: green;
--sakai-icon-alert-color: green;
--sakai-icon-favourite-color: red;
--sakai-course-card-tool-alerts-height: 40px;
--sakai-course-card-border-color: black;
}
</style>`,
picked: false,
}
],
},
};

export const BasicDisplay = () => {

return html`
<sakai-course-card course-title="${text('course-title', 'Physical Ocean')}" course-code="${text('course-code', 'Evolutionary Biology')}" />
`;
};
35 changes: 35 additions & 0 deletions stories/sakai-icon.stories.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import { html } from 'lit-html';
import { withKnobs, text, boolean, number, select } from "@storybook/addon-knobs";

import '../src/sakai-icon.js';

export default {
title: 'Sakai Icon',
decorators: [withKnobs]
};

let sizes = ["small", "medium", "large"];

export const Alerts = () => html`
<sakai-icon type="alert" size="${select('size', sizes, 'small')}" />
`;

export const Assignments = () => html`
<sakai-icon type="assignments" size="${select('size', sizes, 'small')}" ?has-alerts="${boolean('has-alerts', false)}"/>
`;

export const Favourite = () => html`
<sakai-icon type="favourite" size="${select('size', sizes, 'medium')}" />
`;

export const Gradebook = () => html`
<sakai-icon type="gradebook" size="${select('size', sizes, 'small')}" />
`;

export const Forums = () => html`
<sakai-icon type="forums" size="${select('size', sizes, 'small')}" />
`;

export const Menu = () => html`
<sakai-icon type="menu" size="${select('size', sizes, 'small')}" />
`;
21 changes: 21 additions & 0 deletions stories/sakai-options-menu.stories.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { html } from 'lit-html';
import { withKnobs, text, boolean, number } from "@storybook/addon-knobs";

import '../src/sakai-options-menu.js';

export default {
title: 'Sakai Options Menu',
decorators: [withKnobs]
};

export const BasicDisplay = () => html`
<sakai-options-menu placement="${text('placement', 'right')}">
<div slot="content">
<div>Select some fruit options!</div>
<div><input type="checkbox" />Bananas</div>
<div><input type="checkbox" />Apples</div>
<div><input type="checkbox" />Orange</div>
</div>
</sakai-options-menu>
`;

0 comments on commit 11ca6ac

Please sign in to comment.