Skip to content

Commit

Permalink
Initial add 🌋
Browse files Browse the repository at this point in the history
  • Loading branch information
andybons committed Oct 5, 2019
1 parent bd6743f commit da2466c
Show file tree
Hide file tree
Showing 9 changed files with 12,544 additions and 0 deletions.
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,8 @@

# Output of the go coverage tool, specifically when used with LiteIDE
*.out

# JavaScript things
node_modules
/build
/*.log
Binary file added assets/favicon.ico
Binary file not shown.
Binary file added assets/icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions data.js

Large diffs are not rendered by default.

144 changes: 144 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
import './style';
import { ISSUE_DATA } from './data.js';
import { Component } from 'preact';

const members = ['@andybons', '@bradfitz', '@ianlancetaylor', '@rsc', '@spf13', '@griesemer'];

export default class App extends Component {
state = {
attendees: new Set(),
filter: '',
selectedIssues: new Set(),
notes: {}, // issue number -> notes
};

handleAttendeeClick = e => {
const { checked, value } = e.target;
this.setState(({ attendees }) => {
if (checked) {
attendees.add(value);
} else {
attendees.delete(value);
}
return { attendees: attendees };
});
};

handleIssueClick = e => {
let { checked, value } = e.target;
value = +value; // coerce into number
this.setState(({ selectedIssues }) => {
if (checked) {
selectedIssues.add(value);
} else {
selectedIssues.delete(value);
}
return { selectedIssues: selectedIssues };
});
};

handleFilterInput = e => {
this.setState(prevState => {
return { filter: e.target.value.toLowerCase() };
});
};

handleTextareaInput = (issueNum, e) => {
this.setState(({ notes }) => {
notes[issueNum] = e.target.value;
return { notes: notes };
});
};

render({}, { attendees, filter, selectedIssues, notes }) {
return (
<app>
<header>
<h1>Go Proposal Minutes Generator</h1>
</header>
<main>
<div>
<h2>Input</h2>
<h3>Attendees</h3>
<ul>
{members.map(m => {
return (
<li key={m}>
<label>
<input type="checkbox" value={m} onClick={this.handleAttendeeClick} />
{m}
</label>
</li>
);
})}
</ul>
<h3>Issues</h3>
<label>
Filter: <input type="text" value={filter} onInput={this.handleFilterInput} />
</label>
<ul class="IssueList">
{ISSUE_DATA.filter(issue => {
if (filter.trim() === '') {
return true;
}
return issue.title.toLowerCase().includes(filter) || (issue.number + '').toLowerCase().includes(filter);
}).map(issue => {
return (
<li class="IssueList-item" key={issue.number}>
<label class="IssueList-itemLabel">
<input type="checkbox" value={issue.number} checked={selectedIssues.has(issue.number)} onClick={this.handleIssueClick} />
<a href={'https://golang.org/issue/' + issue.number} target="_blank" rel="noopener">
{issue.number}
</a>{' '}
{issue.title}
</label>
<div hidden={!selectedIssues.has(issue.number)}>
<textarea value={notes[issue.number]} onInput={this.handleTextareaInput.bind(this, issue.number)} />
</div>
</li>
);
})}
</ul>
</div>
<aside>
<h2>Output</h2>
<pre>
**{new Date().toISOString().substr(0, 10)} /{' '}
{Array.from(attendees)
.sort()
.join(', ')}
**{'\n\n'}
{ISSUE_DATA.filter(issue => {
return selectedIssues.has(issue.number);
})
.map(issue => {
issue.title = issue.title.replace(/proposal: /i, '');
return issue;
})
.sort((i1, i2) => {
if (i1.title < i2.title) {
return -1;
}
if (i1.title > i2.title) {
return 1;
}
return 0;
})
.map(issue => {
return (
`- #${issue.number} **${issue.title.replace('*', '\\*')}**\n` +
(notes[issue.number] || '')
.split('\n')
.filter(line => line.trim() != '')
.map(line => ` - ${line}`)
.join('\n') +
'\n'
);
})}
</pre>
</aside>
</main>
</app>
);
}
}
16 changes: 16 additions & 0 deletions manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"name": "propnotes",
"short_name": "propnotes",
"start_url": "/",
"display": "standalone",
"orientation": "portrait",
"background_color": "#fff",
"theme_color": "#673ab8",
"icons": [
{
"src": "/assets/icon.png",
"type": "image/png",
"sizes": "512x512"
}
]
}
Loading

0 comments on commit da2466c

Please sign in to comment.