diff --git a/src/apps/model-server-query/index.html b/src/apps/model-server-query/index.html deleted file mode 100644 index 4a77ef8a04b5c276c2bf0012e3628bd11a49daa7..0000000000000000000000000000000000000000 --- a/src/apps/model-server-query/index.html +++ /dev/null @@ -1,12 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"> - <title>Mol* ModelServer Query Builder</title> - </head> - <body> - <div id="app"></div> - <script type="text/javascript" src="./index.js"></script> - </body> -</html> \ No newline at end of file diff --git a/src/apps/model-server-query/index.tsx b/src/apps/model-server-query/index.tsx deleted file mode 100644 index 0ed4cc3bb35bab56a4e58aa19b25e6e60dfc0c37..0000000000000000000000000000000000000000 --- a/src/apps/model-server-query/index.tsx +++ /dev/null @@ -1,134 +0,0 @@ -/** - * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info. - * - * @author David Sehnal <david.sehnal@gmail.com> - */ - -import * as React from 'react' -import * as ReactDOM from 'react-dom' -import * as Rx from 'rxjs' - -import { QueryDefinition, QueryList } from '../../servers/model/server/api' - -import './index.html' - -interface State { - query: Rx.BehaviorSubject<QueryDefinition>, - id: Rx.BehaviorSubject<string>, - params: Rx.BehaviorSubject<any>, - isBinary: Rx.BehaviorSubject<boolean>, - models: Rx.BehaviorSubject<number[]>, - url: Rx.Subject<string> -} - -class Root extends React.Component<{ state: State }, { }> { - render() { - return <div> - <div> - Query: <QuerySelect state={this.props.state} /> - </div> - <div> - ID: <input type='text' onChange={t => this.props.state.id.next(t.currentTarget.value)} /> - </div> - <div> - Params:<br/> - <QueryParams state={this.props.state} /> - </div> - <div> - Model numbers (empty for all): <ModelNums state={this.props.state} /> - </div> - <div> - <input type='checkbox' onChange={t => this.props.state.isBinary.next(!!t.currentTarget.checked)} /> Binary - </div> - <div> - Query string: - <QueryUrl state={this.props.state} /> - </div> - </div> - } -} - -class QuerySelect extends React.Component<{ state: State }> { - render() { - return <select onChange={s => this.props.state.query.next(QueryList[+s.currentTarget.value].definition)}> - { QueryList.map((q, i) => <option value={i} key={i} selected={i === 1}>{q.definition.niceName}</option>) } - </select> - } -} - -class QueryParams extends React.Component<{ state: State }, { prms: string }> { - state = { prms: '' }; - - parseParams(str: string) { - this.setState({ prms: str }); - try { - const params = JSON.parse(str); - this.props.state.params.next(params); - } catch { - this.props.state.params.next({}); - } - } - - componentDidMount() { - this.props.state.query.subscribe(q => this.setState({ prms: formatParams(q) })) - } - - render() { - return <textarea style={{height: '300px'}} value={this.state.prms} cols={80} onChange={t => this.parseParams(t.currentTarget.value)} />; - } -} - -class QueryUrl extends React.Component<{ state: State }, { queryString: string }> { - state = { queryString: '' }; - - componentDidMount() { - this.props.state.url.subscribe(url => this.setState({ queryString: url })) - } - - render() { - return <input type='text' value={this.state.queryString} style={{ width: '800px' }} /> - } -} - -class ModelNums extends React.Component<{ state: State }> { - render() { - return <input type='text' defaultValue='1' style={{ width: '300px' }} onChange={t => - this.props.state.models.next(t.currentTarget.value.split(',') - .map(v => v.trim()) - .filter(v => !!v) - .map(v => +v) - )} /> - } -} - -const state: State = { - query: new Rx.BehaviorSubject(QueryList[1].definition), - id: new Rx.BehaviorSubject('1cbs'), - params: new Rx.BehaviorSubject({ }), - isBinary: new Rx.BehaviorSubject<boolean>(false), - models: new Rx.BehaviorSubject<number[]>([]), - url: new Rx.Subject() -} - -function formatParams(def: QueryDefinition) { - const prms = Object.create(null); - for (const p of def.jsonParams) { - prms[p.name] = p.exampleValues ? p.exampleValues[0] : void 0; - } - return JSON.stringify(prms, void 0, 2); -} - -function formatUrl() { - const json = JSON.stringify({ - name: state.query.value.name, - id: state.id.value, - modelNums: state.models.value.length ? state.models.value : void 0, - binary: state.isBinary.value, - params: state.params.value - }); - state.url.next(encodeURIComponent(json)); -} - -Rx.merge(state.query, state.id, state.params, state.isBinary, state.models).subscribe(s => formatUrl()); - -ReactDOM.render(<Root state={state} />, document.getElementById('app')); diff --git a/webpack.config.js b/webpack.config.js index 9d616ffd4a3b19ce1143697173f15074c7d31921..349c8dd6e3831b434d6f4bf87a3895792df9912e 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -2,15 +2,12 @@ const common = require('./webpack.config.common.js'); const createApp = common.createApp; const createEntry = common.createEntry; const createBrowserTest = common.createBrowserTest; -const createNodeApp = common.createNodeApp; module.exports = [ createApp('viewer'), createApp('basic-wrapper'), createEntry('examples/proteopedia-wrapper/index', 'examples/proteopedia-wrapper', 'index'), createEntry('apps/demos/lighting/index', 'demos/lighting', 'index'), - createNodeApp('state-docs'), - createApp('model-server-query'), createBrowserTest('font-atlas'), createBrowserTest('marching-cubes'),