123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- var Custom = () => {
- var defaults = {
- theme: '',
- color: 'auto',
- _colors: ['auto', 'light', 'dark'],
- error: '',
- }
- var state = Object.assign({}, defaults)
- chrome.runtime.sendMessage({message: 'custom.get'}, (res) => {
- Object.assign(state, res)
- m.redraw()
- })
- var events = {
- file: (e) => {
- document.querySelector('input[type=file]').click()
- },
- theme: (e) => {
- var file = e.target.files[0]
- if (file) {
- var minified
- var reader = new FileReader()
- reader.readAsText(file, 'UTF-8')
- reader.onload = (e) => {
- minified = csso.minify(e.target.result).css
- chrome.runtime.sendMessage({
- message: 'custom.set',
- custom: {
- theme: minified,
- color: state.color,
- },
- }, (res) => {
- if (res?.error) {
- state.error = res.error
- }
- else {
- state.theme = minified
- state.error = ''
- }
- m.redraw()
- })
- }
- }
- },
- remove: (e) => {
- state.theme = ''
- state.error = ''
- chrome.runtime.sendMessage({
- message: 'custom.set',
- custom: {
- theme: state.theme,
- color: state.color,
- },
- })
- m.redraw()
- },
- color: (e) => {
- state.color = state._colors[e.target.selectedIndex]
- chrome.runtime.sendMessage({
- message: 'custom.set',
- custom: {
- theme: state.theme,
- color: state.color,
- },
- })
- }
- }
- var oncreate = {
- ripple: (vnode) => {
- mdc.ripple.MDCRipple.attachTo(vnode.dom)
- }
- }
- var onupdate = {}
- var render = () => [
- m('.bs-callout m-custom',
- state.error &&
- m('.row',
- m('.col-12',
- m('span.m-label.m-error', state.error)
- )
- ),
- m('.row',
- m('.col-xxl-6.col-xl-6.col-lg-6.col-md-6.col-sm-12',
- m('span.m-label',
- 'Custom Theme'
- )
- ),
- m('.col-xxl-6.col-xl-6.col-lg-6.col-md-6.col-sm-12',
- m('input', {
- type: 'file',
- accept: '.css',
- onchange: events.theme,
- oncancel: events.theme,
- }),
- m('button.mdc-button mdc-button--raised m-button', {
- oncreate: oncreate.ripple,
- onclick: events.file
- },
- !state.theme ? 'Add' : 'Update'
- ),
- state.theme &&
- m('button.mdc-button mdc-button--raised m-button', {
- oncreate: oncreate.ripple,
- onclick: events.remove
- },
- 'Remove'
- ),
- ),
- ),
- state.theme &&
- m('.row',
- m('.col-xxl-6.col-xl-6.col-lg-6.col-md-6.col-sm-12',
- m('span.m-label',
- 'Color Scheme'
- )
- ),
- m('.col-xxl-6.col-xl-6.col-lg-6.col-md-6.col-sm-12',
- m('select.mdc-elevation--z2 m-select', {
- onchange: events.color
- },
- state._colors.map((color) =>
- m('option', {
- selected: state.color === color,
- }, color)
- )
- )
- ),
- ),
- )
- ]
- return {state, render}
- }
|