diff --git a/ivette/.eslintrc.js b/ivette/.eslintrc.js index 7d1798cfb90ad18e1d1702b6662b11d21b9a2b1d..caf5fc6d1f5b4272de33915d69a7754bea163bdd 100644 --- a/ivette/.eslintrc.js +++ b/ivette/.eslintrc.js @@ -39,8 +39,8 @@ module.exports = { "no-underscore-dangle": "off", // Allow return statements even if not strictly needed "no-useless-return": "off", - // Just warn about shadowing concerning variables - "no-shadow": "warn", + // Disable warn about shadowing concerning variables + "no-shadow": "off", "lines-between-class-members": [ "error", "always", { "exceptAfterSingleLine": true } ], @@ -65,4 +65,4 @@ module.exports = { // Allow console errors and warnings "no-console": ["error", { allow: ["warn", "error"] }], } -}; \ No newline at end of file +}; diff --git a/ivette/Makefile b/ivette/Makefile index 4de47987040331f9a27fe4808f179ddbc38def77..f35ed4b14a9fd664f70659c4628074f76c7446b7 100644 --- a/ivette/Makefile +++ b/ivette/Makefile @@ -16,11 +16,11 @@ app: dome-app dev: dome-dev dist: dome-dist -typecheck: +typecheck: dome-templ @echo "[Ivette] running ts typechecker" yarn run typecheck -lint: +lint: dome-templ @echo "[Ivette] running ts linter" yarn run lint diff --git a/ivette/README.md b/ivette/README.md index 584760847f04c0e603effac7e839ddb88ee4f095..1c38042881e4dbf21e7724a716159cec0a8ae78b 100644 --- a/ivette/README.md +++ b/ivette/README.md @@ -16,6 +16,15 @@ and `web-mode` for `*.tsx` files. VS-Code is also known to work out of the box. +## Coding Guidelines + +- per-directory `style.css` for CSS; +- caml-cased file names for typescript modules; +- indentation based on 2 spaces, no tabs; +- caml-case identifiers for exported members; +- no `export default` for libs, individual exports only; +- prefer use of `import * as AbcDef from '<path>/AbcDef'`; + ## Mirroring to Dome/Electron The content of ./src/dome shall be kept in sync with diff --git a/ivette/src/dome/src/main/dome.js b/ivette/src/dome/src/main/dome.js index 104e7cc24c68ab525e6f5cc0c368abcfc25e5311..6aa043b842e613d3ab64a75a8981b3d3d777c734 100644 --- a/ivette/src/dome/src/main/dome.js +++ b/ivette/src/dome/src/main/dome.js @@ -9,22 +9,17 @@ @example // src/main/index.js: - import Dome from 'dome' ; + import * as Dome from 'dome' ; Dome.start(); */ -import { - app, - ipcMain, - BrowserWindow -} from 'electron' ; - import _ from 'lodash' ; import fs from 'fs' ; import path from 'path' ; -import Menubar from './menubar.js' ; -import System from 'dome/system' ; +import { app, ipcMain, BrowserWindow } from 'electron' ; import installExtension , { REACT_DEVELOPER_TOOLS } from 'dome/devtools' ; +import * as Menubar from './menubar.js' ; +import SYS, * as System from 'dome/system' ; // -------------------------------------------------------------------------- // --- System Helpers @@ -205,8 +200,8 @@ function createBrowserWindow( config, isMain=true ) { const argv = isMain - ? System.WINDOW_APPLICATION_ARGV - : System.WINDOW_PREFERENCES_ARGV ; + ? SYS.WINDOW_APPLICATION_ARGV + : SYS.WINDOW_PREFERENCES_ARGV ; const options = _.merge( { @@ -490,17 +485,3 @@ ipcMain.on( 'dome.ipc.menu.addmenuitem' , addMenuItem ); ipcMain.on( 'dome.ipc.menu.setmenuitem' , setMenuItem ); // -------------------------------------------------------------------------- -// --- Export Default -// -------------------------------------------------------------------------- - -export default { - platform, - DEVEL, - setName, - start, - addMenu, - addMenuItem, - setMenuItem -} ; - -// -------------------------------------------------------------------------- diff --git a/ivette/src/dome/src/main/menubar.js b/ivette/src/dome/src/main/menubar.js index d1aa40fddb6217bb84af427e8c48c5f23f588c6e..8435e522ff4fa418c7ebdc04f361cde493890b83 100644 --- a/ivette/src/dome/src/main/menubar.js +++ b/ivette/src/dome/src/main/menubar.js @@ -3,7 +3,7 @@ // -------------------------------------------------------------------------- import { app, BrowserWindow, Menu, MenuItem, shell } from 'electron' ; -import System from 'dome/system' ; +import * as System from 'dome/system' ; // -------------------------------------------------------------------------- // --- Special Callbacks @@ -374,6 +374,7 @@ function registerCustomItems( menu ) { }); } +// Initialize the menubar machinery export function install() { updateRequired = true; updateTriggered = false; @@ -393,14 +394,3 @@ function reset() { } // -------------------------------------------------------------------------- -// --- Export Default -// -------------------------------------------------------------------------- - -export default { - install, - addMenu, - addMenuItem, - setMenuItem -}; - -// -------------------------------------------------------------------------- diff --git a/ivette/src/dome/src/misc/events.js b/ivette/src/dome/src/misc/layout.js similarity index 86% rename from ivette/src/dome/src/misc/events.js rename to ivette/src/dome/src/misc/layout.js index 16c0b380da32541801b4d3873c351045ef3128ad..a7294351edbfdf0d03db5876af06e12187fb4960 100644 --- a/ivette/src/dome/src/misc/events.js +++ b/ivette/src/dome/src/misc/layout.js @@ -3,7 +3,6 @@ // -------------------------------------------------------------------------- import React from 'react' ; -import Props from 'prop-types' ; const SIZED = { display: 'block', @@ -70,12 +69,3 @@ export class Layout extends React.Component { } // -------------------------------------------------------------------------- -// --- Props & Defaults -// -------------------------------------------------------------------------- - -Layout.propTypes = { onResize: Props.func }; -Layout.defaultProps = { }; - -export default { Layout }; - -// -------------------------------------------------------------------------- diff --git a/ivette/src/dome/src/misc/register.js b/ivette/src/dome/src/misc/register.js index 17d3be008b3d659a052fb754d9578d4599cdc2ff..ceeba36f4e8ce074d0503f212f2f50095af4189e 100644 --- a/ivette/src/dome/src/misc/register.js +++ b/ivette/src/dome/src/misc/register.js @@ -2,8 +2,8 @@ // --- Dome Classes // -------------------------------------------------------------------------- -import React from 'react' ; import _ from 'lodash' ; +import React from 'react' ; // -------------------------------------------------------------------------- // --- Register a Dome Class @@ -94,7 +94,3 @@ export function dispatch(children,filter) } // -------------------------------------------------------------------------- - -export default { register , classOf , dispatch }; - -// -------------------------------------------------------------------------- diff --git a/ivette/src/dome/src/misc/system.js b/ivette/src/dome/src/misc/system.js index 0e609adc0f9d521e6fa7b34472dc1c6b4d0f3286..f246c2c372fd2145d9a2cc9b35ef7e9f2c06edd1 100644 --- a/ivette/src/dome/src/misc/system.js +++ b/ivette/src/dome/src/misc/system.js @@ -103,12 +103,12 @@ export function doExit() { // --- Command Line Arguments // -------------------------------------------------------------------------- -var command_wdir = undefined ; -var command_argv = undefined ; +var COMMAND_WDIR = undefined ; +var COMMAND_ARGV = undefined ; -function setCommand(argv,wdir) { - command_argv = argv ; - command_wdir = wdir ; +function SET_COMMAND(argv,wdir) { + COMMAND_ARGV = argv ; + COMMAND_WDIR = wdir ; } // -------------------------------------------------------------------------- @@ -141,7 +141,7 @@ export function getDownloads() { return appProxy.getPath('downloads'); } See also [Dome.onCommand](dome_.html#.onCommand) event handler. */ -export function getWorkingDir() { return command_wdir; } +export function getWorkingDir() { return COMMAND_WDIR; } /** @summary Returns the current process ID. @@ -160,7 +160,7 @@ export function getPID() { return process.pid; } See also [Dome.onCommand](dome_.html#.onCommand) event handler. */ -export function getArguments() { return command_argv; } +export function getArguments() { return COMMAND_ARGV; } /** @summary Returns static assets. @param {string} [...path] - a sequecne of path segments @@ -629,30 +629,11 @@ const WINDOW_APPLICATION_ARGV = '--dome-application-window' ; const WINDOW_PREFERENCES_ARGV = '--dome-preferences-window' ; // -------------------------------------------------------------------------- -// --- Export Default +// --- Only used for inter-module initialisation // -------------------------------------------------------------------------- export default { - platform, - DEVEL, - atExit, - atExitForEach, - doExit, - getHome, - getDesktop, - getDocuments, - getDownloads, - getWorkingDir, - getArguments, - getStatic, - getPID, - join, resolve, dirname, basename, extname, - fileStat, - isFile, readFile, writeFile, copyFile, - isDirectory, readDir, mkDir, rmDir, - rename, remove, exists, - spawn, - setCommand, + SET_COMMAND, WINDOW_APPLICATION_ARGV, WINDOW_PREFERENCES_ARGV }; diff --git a/ivette/src/dome/src/renderer/controls/buttons.js b/ivette/src/dome/src/renderer/controls/buttons.js index de0d4d2aecac192fd979a394cd6ddd998826bfe6..bd4957cbfabe77fcb7f3a87a23224ecc8955728e 100644 --- a/ivette/src/dome/src/renderer/controls/buttons.js +++ b/ivette/src/dome/src/renderer/controls/buttons.js @@ -535,14 +535,3 @@ export const Field = (props) => { }; // -------------------------------------------------------------------------- -// --- Exports -// -------------------------------------------------------------------------- - -export default { - LCD, LED, - Button, CircButton, IconButton, - Switch, Checkbox, Radio, RadioGroup, - Select -}; - -// -------------------------------------------------------------------------- diff --git a/ivette/src/dome/src/renderer/controls/icons.js b/ivette/src/dome/src/renderer/controls/icons.js index 7e87642803991afe49a777cf52dfb5d35fefb08d..d5ad8e7a626395b9e0b29730001a0d73e672e852 100644 --- a/ivette/src/dome/src/renderer/controls/icons.js +++ b/ivette/src/dome/src/renderer/controls/icons.js @@ -126,7 +126,6 @@ export function Badge( { value, title, onClick } ) - `section`: section of the Icons (optional) - `viewBox`: svg view-box property (optional, `"0 0 24 24"` by default) */ - export function register(icon) { const { name , ...deficon } = icon ; if (!name) console.error(`[Dome] Icon has no name (skipped).`); @@ -140,7 +139,6 @@ export function register(icon) { @description See [register](#.register) for properties of the icon objects. */ - export function forEach(job) { for( var name in Icons ) { job( Object.assign( { name } , Icons[name] )); @@ -148,7 +146,3 @@ export function forEach(job) { } // -------------------------------------------------------------------------- - -export default { Icon , Badge, SVG, register , forEach } ; - -// -------------------------------------------------------------------------- diff --git a/ivette/src/dome/src/renderer/controls/labels.js b/ivette/src/dome/src/renderer/controls/labels.js index 22b5d5f542fd302cb737eba35063484b372c973b..8045b597086c205e1abb2942506934a227c2766b 100644 --- a/ivette/src/dome/src/renderer/controls/labels.js +++ b/ivette/src/dome/src/renderer/controls/labels.js @@ -5,8 +5,8 @@ /** @module dome/controls/labels */ import React from 'react' ; -import labels from './labels.css' ; import { Icon } from './icons' ; +import './labels.css' ; // -------------------------------------------------------------------------- // --- Generic Label diff --git a/ivette/src/dome/src/renderer/data.js b/ivette/src/dome/src/renderer/data.js index 1d44762618f425bfe365361c40f9be9155aedea2..8265985149388b4d948586f91a4f286e8e703b43 100644 --- a/ivette/src/dome/src/renderer/data.js +++ b/ivette/src/dome/src/renderer/data.js @@ -89,10 +89,9 @@ As an example of use, the introductory example can be implemented as follows: import _ from 'lodash' ; import React from 'react'; -import Dome from 'dome' ; +import * as Dome from 'dome' ; import EventEmitter from 'events' ; - // -------------------------------------------------------------------------- // --- Libraries // -------------------------------------------------------------------------- @@ -396,14 +395,3 @@ export const Fragment = ({lib:localLib, order, enabled=true, disabled=false, chi }; // -------------------------------------------------------------------------- -// --- Exports -// -------------------------------------------------------------------------- - -export default { - Library, - createLibrary, useLibrary, - useCurrentLibrary, useLocalLibrary, - Item, Component, Node, Fragment -}; - -// -------------------------------------------------------------------------- diff --git a/ivette/src/dome/src/renderer/dialogs.js b/ivette/src/dome/src/renderer/dialogs.js index 92f5416323cb2bc9d8c3ebd7219db61ca5519da4..f76515e4587052f0d75d360aff2456cb7eff1335 100644 --- a/ivette/src/dome/src/renderer/dialogs.js +++ b/ivette/src/dome/src/renderer/dialogs.js @@ -4,8 +4,9 @@ Various kind of (modal) dialogs attached to the main application window. */ +import filepath from 'path' ; import { remote } from 'electron' ; -import System from 'dome/system' ; +import * as System from 'dome/system' ; // -------------------------------------------------------------------------- // --- Message Box @@ -106,7 +107,6 @@ export function showMessageBox( options ) // --- openFile dialog // -------------------------------------------------------------------------- -import filepath from 'path' ; const defaultPath = (path) => filepath.extname(path) ? filepath.dirname(path) : path ; /** @@ -304,15 +304,3 @@ export function showOpenDir( options ) } // -------------------------------------------------------------------------- -// --- Export -// -------------------------------------------------------------------------- - -export default { - showMessageBox, - showOpenFile, - showOpenFiles, - showSaveFile, - showOpenDir -} ; - -// -------------------------------------------------------------------------- diff --git a/ivette/src/dome/src/renderer/dnd.js b/ivette/src/dome/src/renderer/dnd.js index ffb3688128997c0fb09067c2dca3c2ad62e76b2a..74aa1755bbab4081c6c4c5d1574b3f4f4cf5cf8f 100644 --- a/ivette/src/dome/src/renderer/dnd.js +++ b/ivette/src/dome/src/renderer/dnd.js @@ -106,9 +106,9 @@ updates from all participants merged in. */ +import _ from 'lodash' ; import React from 'react' ; import Draggable, { DraggableCore } from 'react-draggable'; -import _ from 'lodash' ; const HOLD_TIME = 100 ; /* time in ms */ const HOLD_FIRE = 6 ; /* number of HOLD_TIME before « hold » */ @@ -849,11 +849,3 @@ export class DropTarget extends React.Component } // -------------------------------------------------------------------------- -// --- Export -// -------------------------------------------------------------------------- - -export default { - DnD, DragSource, DropTarget, dispatchEvent -} ; - -// -------------------------------------------------------------------------- diff --git a/ivette/src/dome/src/renderer/dome.js b/ivette/src/dome/src/renderer/dome.js index 322257c62587ae45744e4eee0f47106d935aeaef..b5bb2dff23486099c2b6ecd4cc9f60a2158f477a 100644 --- a/ivette/src/dome/src/renderer/dome.js +++ b/ivette/src/dome/src/renderer/dome.js @@ -8,7 +8,6 @@ and its interaction with the main process. @example // File 'src/renderer/index.js': - import Dome from 'dome'; import Application from './Application.js' ; Dome.setContent( Application ); */ @@ -18,7 +17,8 @@ import React from 'react'; import ReactDOM from 'react-dom'; import { AppContainer } from 'react-hot-loader' ; import { remote , ipcRenderer } from 'electron'; -import System from 'dome/system' ; +import { EventEmitter } from 'events' ; +import SYS , * as System from 'dome/system' ; import './dome.css' ; // -------------------------------------------------------------------------- @@ -58,8 +58,6 @@ export const platform = System.platform ; // --- Application Emitter // -------------------------------------------------------------------------- -import { EventEmitter } from 'events' ; - /** @summary Application Emitter. @description Can be used as a basic _Flux_ dispatcher. */ @@ -137,7 +135,7 @@ export function onCommand(job) { emitter.on('dome.command',job); } ipcRenderer.on('dome.ipc.reload',() => emitter.emit('dome.reload')); ipcRenderer.on('dome.ipc.command', (_event,argv,wdir) => { - System.setCommand(argv,wdir); + SYS.SET_COMMAND(argv,wdir); emitter.emit('dome.command',argv,wdir); }); @@ -151,12 +149,12 @@ ipcRenderer.on('dome.ipc.command', (_event,argv,wdir) => { export function isApplicationWindow() { - return process.argv.includes( System.WINDOW_APPLICATION_ARGV ); + return process.argv.includes( SYS.WINDOW_APPLICATION_ARGV ); } export function isPreferencesWindow() { - return process.argv.includes( System.WINDOW_PREFERENCES_ARGV ); + return process.argv.includes( SYS.WINDOW_PREFERENCES_ARGV ); } // -------------------------------------------------------------------------- @@ -1030,32 +1028,3 @@ export function useClock(period,initStart) } // -------------------------------------------------------------------------- -// --- Export -// -------------------------------------------------------------------------- - -export default { - platform, - DEVEL, - setTitle, - setModified, - isApplicationWindow, setApplicationWindow, - isPreferencesWindow, setPreferencesWindow, - isFocused, - emitter, emit, on, off, - addMenu, - addMenuItem, - setMenuItem, - popupMenu, - setWindowSetting, getWindowSetting, - setGlobalSetting, getGlobalSetting, - update, onUpdate, onReload, onCommand, - State, Render, - useForceUpdate, - useUpdate, useEvent, useEmitter, - useCommand, useClock, - useState, useSwitch, - useHistory, - useGlobalSetting -} ; - -// -------------------------------------------------------------------------- diff --git a/ivette/src/dome/src/renderer/layout/boxes.js b/ivette/src/dome/src/renderer/layout/boxes.js index 5719f246a0f2498fb8b3469f920e7aa265d2d918..1d9962523660cabbe561234cb1337e23dbe617d0 100644 --- a/ivette/src/dome/src/renderer/layout/boxes.js +++ b/ivette/src/dome/src/renderer/layout/boxes.js @@ -40,7 +40,7 @@ natively, place it inside a `<Scroll/>` sub-container. */ import React from 'react'; -import Dome from 'dome'; +import * as Dome from 'dome'; import { Title } from 'dome/controls/labels' ; import './boxes.css' ; @@ -184,8 +184,3 @@ export const Folder = }; // -------------------------------------------------------------------------- - -export default { Hpack, Vpack, Hbox, Vbox, Hfill, Vfill, - Space, Filler, Scroll, Grid, Folder }; - -// -------------------------------------------------------------------------- diff --git a/ivette/src/dome/src/renderer/layout/dispatch.js b/ivette/src/dome/src/renderer/layout/dispatch.js index c1953f8c53a29a28a83374cfebbf854e0333837b..3ab66aeeb6f6afd544249cf6a02d2db25d3f2dc3 100644 --- a/ivette/src/dome/src/renderer/layout/dispatch.js +++ b/ivette/src/dome/src/renderer/layout/dispatch.js @@ -17,7 +17,7 @@ This can be also used to display some item among many in one unique place. import _ from 'lodash' ; import React from 'react'; -import Dome from 'dome' ; +import * as Dome from 'dome' ; // -------------------------------------------------------------------------- // --- Global Dispatcher @@ -110,7 +110,3 @@ export function Render({ id, children=null }) } // -------------------------------------------------------------------------- - -export default { Item, Render }; - -// -------------------------------------------------------------------------- diff --git a/ivette/src/dome/src/renderer/layout/forms.js b/ivette/src/dome/src/renderer/layout/forms.js index 81b2edf4b41bc4bf94d06c745306148cbc29c6b4..d054f84db577e35d98943177f92dee7bea5b698b 100644 --- a/ivette/src/dome/src/renderer/layout/forms.js +++ b/ivette/src/dome/src/renderer/layout/forms.js @@ -4,11 +4,11 @@ /** @module dome/layout/forms */ +import _ from 'lodash' ; import React from 'react' ; -import Dome from 'dome' ; +import * as Dome from 'dome' ; import { SVG } from 'dome/controls/icons' ; import { Checkbox, Radio, Select as Selector } from 'dome/controls/buttons' ; -import _ from 'lodash' ; import './forms.css' ; // -------------------------------------------------------------------------- @@ -1100,29 +1100,3 @@ export const FieldRadio = ({ label, title, value, ...props }) => { }; // -------------------------------------------------------------------------- -// --- Exports -// -------------------------------------------------------------------------- - -export default { - Select, - Form, - Block, - Field, - Section, - FieldText, - FieldCode, - FieldTextArea, - FieldCodeArea, - FieldNumber, - FieldSpinner, - FieldSlider, - FieldDate, - FieldTime, - FieldColor, - FieldSelect, - FieldList, - FieldCheckbox, - FieldRadio -}; - -// -------------------------------------------------------------------------- diff --git a/ivette/src/dome/src/renderer/layout/frames.js b/ivette/src/dome/src/renderer/layout/frames.js index d16aa614cf787a5b170f2a9e9ee4b4bf258ae7bb..68fb995879dda8923570ad4afda19d96e5ce1488 100644 --- a/ivette/src/dome/src/renderer/layout/frames.js +++ b/ivette/src/dome/src/renderer/layout/frames.js @@ -5,7 +5,7 @@ /** @module dome/layout/frames */ import React from 'react' ; -import Dome from 'dome' ; +import * as Dome from 'dome' ; import { dispatch } from 'dome/misc/register' ; import { Vfill } from 'dome/layout/boxes' ; import { SideBar } from 'dome/layout/sidebars' ; @@ -205,7 +205,3 @@ export class Frame extends React.Component } // -------------------------------------------------------------------------- - -export default { Frame }; - -// -------------------------------------------------------------------------- diff --git a/ivette/src/dome/src/renderer/layout/grids.js b/ivette/src/dome/src/renderer/layout/grids.js index facd9df969474ab9e63c0988154b818321c1f091..6843f5d0bceee0e84baf7707034f2544541235b2 100644 --- a/ivette/src/dome/src/renderer/layout/grids.js +++ b/ivette/src/dome/src/renderer/layout/grids.js @@ -4,12 +4,13 @@ /** @module dome/layout/grids */ +import _ from 'lodash' ; import React from 'react' ; -import Dome from 'dome' ; import { dispatchEvent, DnD, DragSource, DropTarget } from 'dome/dnd' ; import { AutoSizer } from 'react-virtualized' ; import { DraggableCore } from 'react-draggable' ; -import _ from 'lodash' ; + +import * as Dome from 'dome' ; import './grids.css' ; // -------------------------------------------------------------------------- @@ -1329,16 +1330,3 @@ export class GridLayout extends React.Component } // -------------------------------------------------------------------------- -// --- Defaults -// -------------------------------------------------------------------------- - -export default { - GridLayout, - GridLayoutCore, - GridItem, GridBox, GridHbox, GridVbox, - iterShape, getShapeItem, removeShapeItem, - stringOfShape, - makeChildrenShape -} ; - -// -------------------------------------------------------------------------- diff --git a/ivette/src/dome/src/renderer/layout/pages.js b/ivette/src/dome/src/renderer/layout/pages.js index 9cfa0c6e11c9f02523e3faadcbada26744fef739..a630356d953c8650310ac466f555d7358fac305c 100644 --- a/ivette/src/dome/src/renderer/layout/pages.js +++ b/ivette/src/dome/src/renderer/layout/pages.js @@ -71,9 +71,3 @@ export const Note = ({style,children}) => ( ); // -------------------------------------------------------------------------- -// Export Default -// -------------------------------------------------------------------------- - -export default { Page, Note }; - -// -------------------------------------------------------------------------- diff --git a/ivette/src/dome/src/renderer/layout/sidebars.js b/ivette/src/dome/src/renderer/layout/sidebars.js index 29f9c4428a9a5788e68d9a2e6e69afc79292ae4f..862ddd785ab5dc63547ee449a81773b1c2f21319 100644 --- a/ivette/src/dome/src/renderer/layout/sidebars.js +++ b/ivette/src/dome/src/renderer/layout/sidebars.js @@ -5,7 +5,7 @@ /** @module dome/layout/sidebars */ import React from 'react' ; -import Dome from 'dome' ; +import * as Dome from 'dome' ; import { Badge } from 'dome/controls/icons' ; import { Label } from 'dome/controls/labels' ; import './sidebars.css' ; @@ -208,6 +208,4 @@ register( SideBar, 'DOME_SIDEBAR' ); register( Section, 'DOME_SIDEBAR_ITEM' ); register( Item, 'DOME_SIDEBAR_ITEM' ); -export default { SideBar, Section, Item } ; - // -------------------------------------------------------------------------- diff --git a/ivette/src/dome/src/renderer/layout/splitters.js b/ivette/src/dome/src/renderer/layout/splitters.js index fd3d17c956f7e50190bdc5fa8c6b819f811f46a7..6f947ee2d10b9b168ae543c5ae2b9e44cfab87ad 100644 --- a/ivette/src/dome/src/renderer/layout/splitters.js +++ b/ivette/src/dome/src/renderer/layout/splitters.js @@ -4,12 +4,11 @@ /** @module dome/layout/splitters */ -import React from 'react' ; -import Props from 'prop-types' ; -import Dome from 'dome' ; -import { Layout } from 'dome/misc/events' ; -import './splitters.css' ; import _ from 'lodash' ; +import * as React from 'react' ; +import * as Dome from 'dome' ; +import { Layout } from 'dome/misc/layout' ; +import './splitters.css' ; // -------------------------------------------------------------------------- // --- Splitter Layout @@ -132,7 +131,6 @@ const LR = { the left and bottom sides of the views are likely to be cropped. */ - export class Splitter extends React.Component { // -------------------------------------------------------------------------- @@ -368,22 +366,31 @@ export class Splitter extends React.Component { } // -------------------------------------------------------------------------- -// --- Props & Defaults +// --- Short Cuts // -------------------------------------------------------------------------- -Splitter.propTypes = { - dir: Props.oneOf(['HORIZONTAL','VERTICAL','LEFT','RIGHT','TOP','BOTTOM']), - settings: Props.string, - margin: Props.number -}; +/** @summary Splitter with `dir="HORIZONTAL"`. */ +export const HSplit = + ({ children, ...props }) => <Splitter dir="HORIZONTAL" {...props}>{children}</Splitter>; -Splitter.defaultProps = { - dir: 'HORIZONTAL', - margin: 32 -}; +/** @summary Splitter with `dir="VERTICAL"`. */ +export const VSplit = + ({ children, ...props }) => <Splitter dir="VERTICAL" {...props}>{children}</Splitter>; -// -------------------------------------------------------------------------- +/** @summary Splitter with `dir="TOP"`. */ +export const TSplit = + ({ children, ...props }) => <Splitter dir="TOP" {...props}>{children}</Splitter>; + +/** @summary Splitter with `dir="BOTTOM"`. */ +export const BSplit = + ({ children, ...props }) => <Splitter dir="BOTTOM" {...props}>{children}</Splitter>; + +/** @summary Splitter with `dir="LEFT"`. */ +export const LSplit = + ({ children, ...props }) => <Splitter dir="LEFT" {...props}>{children}</Splitter>; -export default { Splitter }; +/** @summary Splitter with `dir="RIGHT"`. */ +export const RSplit = + ({ children, ...props }) => <Splitter dir="RIGHT" {...props}>{children}</Splitter>; // -------------------------------------------------------------------------- diff --git a/ivette/src/dome/src/renderer/layout/tabs.js b/ivette/src/dome/src/renderer/layout/tabs.js index 19987a0948c9d522ae7220b72689802227213077..61489e0bde419a6985e5ffeefc27d8a182e792e5 100644 --- a/ivette/src/dome/src/renderer/layout/tabs.js +++ b/ivette/src/dome/src/renderer/layout/tabs.js @@ -118,6 +118,4 @@ import { register } from 'dome/misc/register' ; register(TabsBar, 'DOME_TABSBAR'); register(Tab, 'DOME_TABSBAR_ITEM'); -export default { Tab , TabsBar , TabsPane } ; - // -------------------------------------------------------------------------- diff --git a/ivette/src/dome/src/renderer/layout/toolbars.js b/ivette/src/dome/src/renderer/layout/toolbars.js index 890f15daf962a2bea2130b1b65f26a8e990e225c..721c5ea3dc838188225c4231c690c36f55d8f7e5 100644 --- a/ivette/src/dome/src/renderer/layout/toolbars.js +++ b/ivette/src/dome/src/renderer/layout/toolbars.js @@ -185,6 +185,4 @@ register( Separator , 'DOME_TOOLBAR_ITEM' ); register( Filler , 'DOME_TOOLBAR_ITEM' ); register( Button , 'DOME_TOOLBAR_ITEM' ); -export default { ToolBar , Space , Inset, Separator, Filler, Button, ButtonGroup, Select }; - // -------------------------------------------------------------------------- diff --git a/ivette/src/dome/src/renderer/table/arrays.js b/ivette/src/dome/src/renderer/table/arrays.js index cfd5ef18555a49c16ca4041311030b3b923bd4c4..92836415961c8022b850dd73db74f5202d6ed558 100644 --- a/ivette/src/dome/src/renderer/table/arrays.js +++ b/ivette/src/dome/src/renderer/table/arrays.js @@ -520,9 +520,3 @@ export function useArrayModel( items ) } // -------------------------------------------------------------------------- -// --- Exports -// -------------------------------------------------------------------------- - -export default { compareWith , ComparisonRing , UnsortedModel, ArrayModel } ; - -// -------------------------------------------------------------------------- diff --git a/ivette/src/dome/src/renderer/table/models.js b/ivette/src/dome/src/renderer/table/models.js index 161a240c418c66a6fb04f4605ce9e42fd096f848..1f95258200b6502eae2527b8cf92deb16352d461 100644 --- a/ivette/src/dome/src/renderer/table/models.js +++ b/ivette/src/dome/src/renderer/table/models.js @@ -249,7 +249,3 @@ export class Model { } // -------------------------------------------------------------------------- - -export default { Model , ASC , DESC } ; - -// -------------------------------------------------------------------------- diff --git a/ivette/src/dome/src/renderer/table/views.js b/ivette/src/dome/src/renderer/table/views.js index 3ef8219c57d02a62403ac006f334486788102b51..d0a4bc112cedc9f1b385f8d71e444bc16638321d 100644 --- a/ivette/src/dome/src/renderer/table/views.js +++ b/ivette/src/dome/src/renderer/table/views.js @@ -4,8 +4,9 @@ /** @module dome/table/views */ +import _ from 'lodash' ; import React from 'react' ; -import Dome from 'dome' ; +import * as Dome from 'dome' ; import { DraggableCore } from 'react-draggable'; import { SVG } from 'dome/controls/icons' ; import { @@ -14,7 +15,6 @@ import { Table as VTable, Column as VColumn } from 'react-virtualized' ; -import _ from 'lodash' ; import './tables.css' ; // -------------------------------------------------------------------------- @@ -176,7 +176,8 @@ const computeWidth = (elt) => { */ export const Column = (props) => null; // Fake component only used to store props. -// Virtualized column is rendered with function below: +// Virtualized column is rendered with function vColumn (see below) + const vColumn = ({ headerRef, columnResize,hasFill,lastElt, @@ -666,7 +667,3 @@ export class Table extends React.Component { } // -------------------------------------------------------------------------- - -export default { Table, Column, DefineColumn }; - -// -------------------------------------------------------------------------- diff --git a/ivette/src/dome/src/renderer/text/buffers.js b/ivette/src/dome/src/renderer/text/buffers.js index 4711a6a063b6e31bc7372f842fea2525a189381d..6bd46b845cacb47218a5e55bacb73df57db889b0 100644 --- a/ivette/src/dome/src/renderer/text/buffers.js +++ b/ivette/src/dome/src/renderer/text/buffers.js @@ -452,7 +452,3 @@ is blocked. } // -------------------------------------------------------------------------- - -export default { RichTextBuffer }; - -// -------------------------------------------------------------------------- diff --git a/ivette/src/dome/src/renderer/text/editors.js b/ivette/src/dome/src/renderer/text/editors.js index 2caad57cbe7af675ca1aa391f456b3c85f637be2..b54e4e829fdea10c882a21d90ebd19a0bcde5a42 100644 --- a/ivette/src/dome/src/renderer/text/editors.js +++ b/ivette/src/dome/src/renderer/text/editors.js @@ -4,12 +4,12 @@ /** @module dome/text/editors */ +import _ from 'lodash' ; import React from 'react' ; -import Dome from 'dome' ; +import * as Dome from 'dome' ; import CodeMirror from 'codemirror/lib/codemirror.js' ; import 'codemirror/lib/codemirror.css' ; import './editors.css' ; -import _ from 'lodash' ; const CSS_HOVERED = 'dome-xText-hover' ; const CSS_SELECTED = 'dome-xText-select' ; @@ -388,7 +388,3 @@ export class Text extends React.Component { } // -------------------------------------------------------------------------- - -export default { Text }; - -// -------------------------------------------------------------------------- diff --git a/ivette/src/dome/template/Application.js b/ivette/src/dome/template/Application.js index f7720a2a81fa1ff5a15b2e0f58f28cf95140f1c0..c98deea8572112ba3444adeba90303d3e5d365dc 100644 --- a/ivette/src/dome/template/Application.js +++ b/ivette/src/dome/template/Application.js @@ -12,7 +12,7 @@ */ import React from 'react' ; -import Dome from 'dome' ; +import * as Dome from 'dome' ; import 'dome/misc/exports' ; export default (() => ( diff --git a/ivette/src/dome/template/main.js b/ivette/src/dome/template/main.js index d102caa8c34b4a2c33a0166f86e23fbea55f6bf2..ea647d69a24c5b2d00ec0b70c1024724e2a2c328 100644 --- a/ivette/src/dome/template/main.js +++ b/ivette/src/dome/template/main.js @@ -14,4 +14,4 @@ before or after the call to `Dome.start()`. */ -import Dome from 'dome' ; +import * as Dome from 'dome' ; diff --git a/ivette/src/dome/template/renderer.js b/ivette/src/dome/template/renderer.js index 1544ac9e11373febc48161e9672b71456c6819f6..2452a96d7a597f939c6d9bd97305974ff9039d78 100644 --- a/ivette/src/dome/template/renderer.js +++ b/ivette/src/dome/template/renderer.js @@ -18,7 +18,12 @@ // Enable live-editing in React: import 'react-hot-loader/patch' ; import React from 'react' ; -import Dome from 'dome' ; +import { + setApplicationWindow, + setPreferencesWindow, + isApplicationWindow, + isPreferencesWindow, +} from 'dome' ; // You can change the name of the main components, // provided you define the makefile variable @@ -29,13 +34,13 @@ import Application from './Application' ; import Preferences from './Preferences' ; // Define the application main components for each window: -Dome.setApplicationWindow(Application); -Dome.setPreferencesWindow(Preferences); +setApplicationWindow(Application); +setPreferencesWindow(Preferences); // Mark the main application reloadable and enable live updates: -module.hot && Dome.isApplicationWindow() && - module.hot.accept('./Application',() => Dome.setApplicationWindow(Application)); -module.hot && Dome.isPreferencesWindow() && - module.hot.accept('./Preferences',() => Dome.setPreferencesWindow(Preferences)); +module.hot && isApplicationWindow() && + module.hot.accept('./Application',() => setApplicationWindow(Application)); +module.hot && isPreferencesWindow() && + module.hot.accept('./Preferences',() => setPreferencesWindow(Preferences)); // -------------------------------------------------------------------------- diff --git a/ivette/src/frama-c/LabViews.tsx b/ivette/src/frama-c/LabViews.tsx index ceee173cb8422ae016907641a9f70015f38004c2..a0225a87eb03ee695209ace0e7303fc825380587 100644 --- a/ivette/src/frama-c/LabViews.tsx +++ b/ivette/src/frama-c/LabViews.tsx @@ -6,12 +6,12 @@ import _ from 'lodash'; import React from 'react'; -import Dome from 'dome'; +import * as Dome from 'dome'; import { Catch } from 'dome/errors'; import { DnD, DragSource } from 'dome/dnd'; import { SideBar, Section, Item } from 'dome/layout/sidebars'; import { Splitter } from 'dome/layout/splitters'; -import Grids, { GridLayout, GridItem } from 'dome/layout/grids'; +import * as Grids from 'dome/layout/grids'; import { Hbox, Hfill, Vfill } from 'dome/layout/boxes'; import { IconButton, Field } from 'dome/controls/buttons'; import { Label } from 'dome/controls/labels'; @@ -311,7 +311,7 @@ const makeGridItem = (customize: any, onClose: any) => (comp: any) => { ); } return ( - <GridItem + <Grids.GridItem id={id} className={properties.className} handle={properties.handle} @@ -338,7 +338,7 @@ const makeGridItem = (customize: any, onClose: any) => (comp: any) => { <Catch title={id}>{children}</Catch> </TitleContext.Provider> </Vfill> - </GridItem> + </Grids.GridItem> ); }; @@ -648,7 +648,7 @@ export function LabView(props: any) { {children} </UseLibrary> <Splitter settings={settingSplit} unfold={customize} dir="RIGHT"> - <GridLayout + <Grids.GridLayout dnd={dnd} padding={2} className="labview-container" @@ -671,7 +671,3 @@ export function LabView(props: any) { } // -------------------------------------------------------------------------- - -export default { LabView, View, Group, Component, TitleBar }; - -// -------------------------------------------------------------------------- diff --git a/ivette/src/frama-c/server.ts b/ivette/src/frama-c/server.ts index 65d770957fdb2ef8bbf625394fb38b29aff1afc7..648f99fbc3cfa542593d251ab2946596a7eb27cd 100644 --- a/ivette/src/frama-c/server.ts +++ b/ivette/src/frama-c/server.ts @@ -9,10 +9,10 @@ import _ from 'lodash'; import React from 'react'; -import Dome from 'dome'; -import System from 'dome/system'; +import * as Dome from 'dome'; +import * as System from 'dome/system'; import { RichTextBuffer } from 'dome/text/buffers'; -import { Request } from 'zeromq'; +import { Request as ZmqRequest } from 'zeromq'; // -------------------------------------------------------------------------- // --- Events @@ -60,7 +60,7 @@ export const SHUTDOWN = 'frama-c.server.shutdown'; * @description * Event `frama-c.server.signal.<id>'` for signal `<id>`. */ -const SIGNAL = 'frama-c.server.signal.'; +export const SIGNAL = 'frama-c.server.signal.'; /** * @event @@ -71,14 +71,14 @@ const SIGNAL = 'frama-c.server.signal.'; * @description * Event `frama-c.server.activity.<id>'` for signal `<id>`. */ -const ACTIVITY = 'frama-c.server.activity.'; +export const ACTIVITY = 'frama-c.server.activity.'; // -------------------------------------------------------------------------- // --- Server Status // -------------------------------------------------------------------------- /** - * @typedef StatusCode + * @typedef Status * @summary Server Status Codes. * @description * - `OFF` Server off @@ -109,7 +109,7 @@ let queueCmd: any; // Queue of server commands to be sent let queueIds: any; // Waiting request ids to be sent let polling: any; // Timeout Polling timer let flushing: any; // Immediate Flushing timer -let config: ServerConfiguration; +let config: Configuration; let process: any; // Server process let socket: any; // ZMQ (REQ) socket let busy: boolean; // ZMQ socket is busy @@ -119,7 +119,7 @@ let killing: any; // killing timeout // --- Server Console // -------------------------------------------------------------------------- -const buffer = new RichTextBuffer({ maxlines: 200 }); +export const buffer = new RichTextBuffer({ maxlines: 200 }); // -------------------------------------------------------------------------- // --- Server Status @@ -131,7 +131,7 @@ const buffer = new RichTextBuffer({ maxlines: 200 }); * @description * See [STATUS](module-frama-c_server.html#~STATUS) code definitions. */ -function getStatus(): StatusCode { return status; } +export function getStatus(): StatusCode { return status; } /** * @summary Hook on current server (Custom React Hook). @@ -139,25 +139,25 @@ function getStatus(): StatusCode { return status; } * @description * See [STATUS](module-frama-c_server.html#~STATUS) code definitions. */ -function useStatus(): StatusCode { +export function useStatus(): StatusCode { Dome.useUpdate(STATUS); return status; } /** Return `FAILED` status message. */ -function getError() { return error; } +export function getError() { return error; } /** * @summary Frama-C Server is running and ready to handle requests. * @return {boolean} status is `RUNNING`. */ -function isRunning(): boolean { return status === StatusCode.RUNNING; } +export function isRunning(): boolean { return status === StatusCode.RUNNING; } /** * @summary Number of requests still pending. * @return {number} pending requests */ -function getPending(): number { +export function getPending(): number { return _.reduce(pending, (_, n) => n + 1, 0); } @@ -165,20 +165,20 @@ function getPending(): number { * @summary Register callback on READY event. * @param {function} callback - invoked when the server enters RUNNING status */ -function onReady(callback: any) { Dome.on(READY, callback); } +export function onReady(callback: any) { Dome.on(READY, callback); } /** * @summary Register callback on SHUTDOWN event. * @param {function} callback - invoked when the server enters SHUTDOWN status */ -function onShutdown(callback: any) { Dome.on(SHUTDOWN, callback); } +export function onShutdown(callback: any) { Dome.on(SHUTDOWN, callback); } /** * @summary Register callback on Signal ACTIVITY event. * @*param {string} id - the signal event to listen to * @*param {function} callback - invoked with `callback(signal,active)` */ -function onActivity(signal: string, callback: any) { +export function onActivity(signal: string, callback: any) { Dome.on(ACTIVITY + signal, callback); } @@ -211,7 +211,7 @@ function _status(newStatus: StatusCode, err?: string) { * If the server is being shutdown, it will reboot. * Otherwise, the Frama-C Server is spawned. */ -function start() { +export function start() { switch (status) { case StatusCode.OFF: case StatusCode.FAILED: @@ -243,7 +243,7 @@ function start() { * When the server is shutting down, restart is canceled. * Otherwise, this is a no-op. */ -function stop() { +export function stop() { switch (status) { case StatusCode.STARTED: _kill(); @@ -278,7 +278,7 @@ function stop() { * This function is automatically called when the `module` emits the `KILL` * signal. */ -function kill() { +export function kill() { switch (status) { case StatusCode.STARTED: case StatusCode.RUNNING: @@ -305,7 +305,7 @@ function kill() { * When running, try to gracefully shutdown the Server, * and finally schedule a reboot on exit. */ -function restart() { +export function restart() { switch (status) { case StatusCode.OFF: case StatusCode.FAILED: @@ -335,7 +335,7 @@ function restart() { * When not running, clear the console and reset any error flag. * Otherwised, do nothing. */ -function clear() { +export function clear() { switch (status) { case StatusCode.FAILED: _status(StatusCode.OFF); @@ -355,7 +355,7 @@ function clear() { // --- Server Configure // -------------------------------------------------------------------------- -export interface ServerConfiguration { +export interface Configuration { env?: any; // Process environment variables (default: `undefined`) cwd?: string; // Working directory (default: current) command?: string; // Server command (default: `frama-c`) @@ -369,9 +369,9 @@ export interface ServerConfiguration { /** * @summary Configure the Server. - * @param {ServerConfiguration} sc - Server Configuration + * @param {Configuration} sc - Server Configuration */ -function configure(sc: ServerConfiguration) { +export function configure(sc: Configuration) { config = sc || {}; } @@ -381,7 +381,7 @@ function configure(sc: ServerConfiguration) { * @description * See `configure()` method. */ -function getConfig(): ServerConfiguration { +export function getConfig(): Configuration { return config; } @@ -456,7 +456,7 @@ async function _launch() { _close(signal || status); }); // Connect to Server - socket = new Request(); + socket = new ZmqRequest(); busy = false; socket.connect(sockaddr); } @@ -601,7 +601,7 @@ function _signal(id: any) { * If the server is not yet listening to this signal, a `SIGON` command is * sent. */ -function onSignal(id: string, callback: any) { +export function onSignal(id: string, callback: any) { _signal(id).on(callback); } @@ -613,7 +613,7 @@ function onSignal(id: string, callback: any) { * When no more callbacks are listening to this signal for a while, * the server will be notified with a `SIGOFF` command. */ -function offSignal(id: string, callback: any) { +export function offSignal(id: string, callback: any) { _signal(id).off(callback); } @@ -622,7 +622,7 @@ function offSignal(id: string, callback: any) { * @param {string} id - the signal event to listen to * @param {function} callback - the callback to be called on signal */ -function useSignal(id: string, callback: any) { +export function useSignal(id: string, callback: any) { React.useEffect(() => { onSignal(id, callback); return () => { offSignal(id, callback); }; @@ -651,19 +651,19 @@ Dome.on(SHUTDOWN, () => { * - `SET` Used to write data into the server * - `EXEC` Used to make the server execute a task */ -enum RqKind { +export enum RqKind { GET = 'GET', SET = 'SET', EXEC = 'EXEC' } /** - * @typedef ServerRequest + * @typedef Request * @summary Server request. * @param {string} endpoint - the request identifier * @param {any} params - the request parameters */ -export interface ServerRequest { +export interface Request { endpoint: string; params: any; } @@ -672,28 +672,28 @@ export interface ServerRequest { * @summary Get data from the server. * @param sr - the server request description. */ -async function GET(sr: ServerRequest) { - return _create(RqKind.GET, sr.endpoint, sr.params); +export async function GET(sr: Request) { + return send(RqKind.GET, sr.endpoint, sr.params); } /** * @summary Set data into the server. * @param sr - the server request description. */ -async function SET(sr: ServerRequest) { - return _create(RqKind.SET, sr.endpoint, sr.params); +export async function SET(sr: Request) { + return send(RqKind.SET, sr.endpoint, sr.params); } /** * @summary Make the server execute a task. * @param sr - the server request description. */ -async function EXEC(sr: ServerRequest) { - return _create(RqKind.EXEC, sr.endpoint, sr.params); +export async function EXEC(sr: Request) { + return send(RqKind.EXEC, sr.endpoint, sr.params); } /** - * @summary Create request to send to the server. + * @summary Send a request to the server. * @param {RqKind} kind - the request kind * @param {string} rq - the request identifier * @param {object} params - request parameters @@ -702,7 +702,7 @@ async function EXEC(sr: ServerRequest) { * You may _kill_ the request before its normal termination by * invoking `kill()` on the returned promised. */ -function _create(kind: RqKind, rq: string, params: any) { +function send(kind: RqKind, rq: string, params: any) { if (!isRunning()) return Promise.reject(new Error('Server not running')); if (!rq) return Promise.reject(new Error('Undefined request')); const rid = `RQ.${rqid}`; @@ -848,36 +848,3 @@ function _receive(resp: any) { } // -------------------------------------------------------------------------- -// --- Exports -// -------------------------------------------------------------------------- - -export default { - configure, - getConfig, - getStatus, - useStatus, - buffer, - getError, - getPending, - isRunning, - start, - stop, - kill, - restart, - clear, - GET, - SET, - EXEC, - onReady, - onShutdown, - onActivity, - onSignal, - offSignal, - useSignal, - STATUS, - READY, - SHUTDOWN, - StatusCode, -}; - -// -------------------------------------------------------------------------- diff --git a/ivette/src/frama-c/states.ts b/ivette/src/frama-c/states.ts index 9c757e7fd7d4b3f3338f368f8e74643b7856f5a2..c00809c195bba44f12fa413fdeb2cffba8ac44b3 100644 --- a/ivette/src/frama-c/states.ts +++ b/ivette/src/frama-c/states.ts @@ -10,8 +10,8 @@ import _ from 'lodash'; import React from 'react'; -import Dome from 'dome'; -import Server, { ServerRequest } from './server'; +import * as Dome from 'dome'; +import * as Server from './server'; /** * @event @@ -41,7 +41,7 @@ let states: any = {}; const stateDefaults: any = {}; Server.onReady(async () => { - const sr: ServerRequest = { + const sr: Server.Request = { endpoint: 'kernel.project.getCurrent', params: {}, }; @@ -79,7 +79,7 @@ export function useProject() { */ export async function setProject(project: string) { if (Server.isRunning()) { - const sr: ServerRequest = { + const sr: Server.Request = { endpoint: 'kernel.project.setCurrent', params: project, }; @@ -170,7 +170,7 @@ export function useRequest(rq: string, params: any, options: any = {}) { } (async () => { try { - const sr: ServerRequest = { endpoint: rq, params }; + const sr: Server.Request = { endpoint: rq, params }; const v = await Server.GET(sr); setValue(v); } catch (err) { @@ -219,7 +219,11 @@ export function useRequest(rq: string, params: any, options: any = {}) { * by the provided key. * Items in the collection that do have the key are not indexed. */ -function useDictionary(rq: string, params: any = null, options: any = {}) { +export function useDictionary( + rq: string, + params: any = null, + options: any = {}, +) { const { offline = true, pending = true, @@ -282,14 +286,14 @@ class SyncState { async setValue(v: any) { this.insync = true; this.value = v; - const sr: ServerRequest = { endpoint: this.setRq, params: v }; + const sr: Server.Request = { endpoint: this.setRq, params: v }; await Server.SET(sr); Dome.emit(this.UPDATE); } async update() { this.insync = true; - const sr: ServerRequest = { endpoint: this.getRq, params: {} }; + const sr: Server.Request = { endpoint: this.getRq, params: {} }; const v = await Server.GET(sr); this.value = v; Dome.emit(this.UPDATE); @@ -327,7 +331,7 @@ Server.onShutdown(() => (syncStates = {})); * - sends a `<id>.set` request to update the value of the state; * - listens to `<id>.sig` signal to stay in sync with server updates. */ -function useSyncState(id: string) { +export function useSyncState(id: string) { const s = getSyncState(id); Dome.useUpdate(PROJECT, s.UPDATE); Server.useSignal(s.signal, s.update); @@ -343,7 +347,7 @@ function useSyncState(id: string) { * - sends a `<id>.get` request to obtain the current value of the state; * - listens to `<id>.sig` signal to stay in sync with server updates. */ -function useSyncValue(id: string) { +export function useSyncValue(id: string) { const s = getSyncState(id); Dome.useUpdate(s.update); Server.useSignal(s.signal, s.update); @@ -385,7 +389,7 @@ class SyncArray { async fetch() { this.insync = true; - const sr: ServerRequest = { endpoint: this.fetchRq, params: 50 }; + const sr: Server.Request = { endpoint: this.fetchRq, params: 50 }; const data = await Server.GET(sr); const { reload = false, removed = [], updated = [], pending = 0 } = data; let reloaded = false; @@ -410,7 +414,7 @@ class SyncArray { } async reload() { - const sr: ServerRequest = { endpoint: this.reloadRq, params: {} }; + const sr: Server.Request = { endpoint: this.reloadRq, params: {} }; await Server.SET(sr); this.index = {}; this.insync = false; @@ -488,21 +492,3 @@ export function useSelection() { } // -------------------------------------------------------------------------- - -export default { - useProject, - setProject, - setStateDefault, - useState, - useSyncState, - useSyncValue, - useSyncArray, - reloadArray, - useRequest, - useDictionary, - useSelection, - PROJECT, - STATE, -}; - -// -------------------------------------------------------------------------- diff --git a/ivette/src/frama-c/style.css b/ivette/src/frama-c/style.css index 1b6893fd996b7985af7b39b50199026d0f1ef621..f918358dc93d2336f9dc83ae63778c1913374f26 100644 --- a/ivette/src/frama-c/style.css +++ b/ivette/src/frama-c/style.css @@ -34,11 +34,12 @@ .labview-titlebar { background: #ccc ; + height: 24px ; } .labview-titlebar .dome-xLabel { - padding-top: 3px ; + padding-top: 4px ; } .labview-handle diff --git a/ivette/src/main/index.js b/ivette/src/main/index.js index 2624543a9daad843d4d432821eee867a08b836ae..ab5c926157df3d818edf6fe362980945beada6d8 100644 --- a/ivette/src/main/index.js +++ b/ivette/src/main/index.js @@ -14,6 +14,6 @@ before or after the call to `Dome.start()`. */ -import Dome from 'dome' ; +import * as Dome from 'dome' ; Dome.setName('Ivette'); Dome.start(); diff --git a/ivette/src/renderer/ASTview.tsx b/ivette/src/renderer/ASTview.tsx index 6cf68490ac3da07ef67dddd7944f4fb2b12e7c4a..d7b941609926144dd3ba8cf0cce9045310c54d23 100644 --- a/ivette/src/renderer/ASTview.tsx +++ b/ivette/src/renderer/ASTview.tsx @@ -3,8 +3,8 @@ // -------------------------------------------------------------------------- import React from 'react'; -import Server, { ServerRequest } from 'frama-c/server'; -import States from 'frama-c/states'; +import * as Server from 'frama-c/server'; +import * as States from 'frama-c/states'; import { Vfill } from 'dome/layout/boxes'; import { RichTextBuffer } from 'dome/text/buffers'; @@ -50,7 +50,7 @@ const ASTview = () => { if (theFunction) { buffer.log('// Loading', theFunction, '…'); (async () => { - const sr: ServerRequest = { + const sr: Server.Request = { endpoint: 'kernel.ast.printFunction', params: theFunction, }; diff --git a/ivette/src/renderer/Application.tsx b/ivette/src/renderer/Application.tsx index e93e3d07bf67ce5b2af512769f26031922e6deb0..bb69426246641b04171c62f47d972c25b2f5ce24 100644 --- a/ivette/src/renderer/Application.tsx +++ b/ivette/src/renderer/Application.tsx @@ -3,17 +3,17 @@ // -------------------------------------------------------------------------- import React from 'react'; -import Dome from 'dome'; +import * as Dome from 'dome'; import { Vfill } from 'dome/layout/boxes'; import { Splitter } from 'dome/layout/splitters'; -import Toolbar from 'dome/layout/toolbars'; -import Sidebar from 'dome/layout/sidebars'; +import * as Toolbar from 'dome/layout/toolbars'; +import * as Sidebar from 'dome/layout/sidebars'; import './style.css'; import { LabView, View, Group } from 'frama-c/LabViews'; import { GridItem } from 'dome/layout/grids'; -import Controller from './Controller'; +import * as Controller from './Controller'; import Properties from './Properties'; import ASTview from './ASTview'; diff --git a/ivette/src/renderer/Controller.tsx b/ivette/src/renderer/Controller.tsx index 0e46c90baef4e127529e2a1a3758ced1d6722583..a5ce00a483587b0c8f415d2621939b7cb80037f4 100644 --- a/ivette/src/renderer/Controller.tsx +++ b/ivette/src/renderer/Controller.tsx @@ -3,15 +3,14 @@ // -------------------------------------------------------------------------- import React from 'react'; -import Dome from 'dome'; +import * as Dome from 'dome'; import { Button as ToolButton, ButtonGroup, Space } from 'dome/layout/toolbars'; import { LED, IconButton } from 'dome/controls/buttons'; import { Label, Code } from 'dome/controls/labels'; import { RichTextBuffer } from 'dome/text/buffers'; import { Text } from 'dome/text/editors'; - -import Server, { StatusCode, ServerConfiguration } from 'frama-c/server'; +import * as Server from 'frama-c/server'; import { Component, TitleBar } from 'frama-c/LabViews'; import 'codemirror/theme/ambiance.css'; @@ -20,10 +19,10 @@ import 'codemirror/theme/ambiance.css'; // --- Configure Server // -------------------------------------------------------------------------- -let cmdConfig: ServerConfiguration; +let cmdConfig: Server.Configuration; const cmdLine = new RichTextBuffer(); -function dumpCmdLine(sc: ServerConfiguration): void { +function dumpCmdLine(sc: Server.Configuration): void { const { cwd, command, sockaddr, params } = sc; cmdLine.clear(); if (cwd) cmdLine.log('--cwd', cwd); @@ -99,11 +98,11 @@ export const Control = () => { { enabled: false, onClick: null }; switch (status) { - case StatusCode.OFF: - case StatusCode.FAILED: + case Server.StatusCode.OFF: + case Server.StatusCode.FAILED: play = { enabled: true, onClick: Server.start }; break; - case StatusCode.RUNNING: + case Server.StatusCode.RUNNING: stop = { enabled: true, onClick: Server.stop }; reload = { enabled: true, onClick: Server.restart }; break; @@ -255,25 +254,25 @@ export const Status = () => { let blink; let error; switch (s) { - case StatusCode.OFF: + case Server.StatusCode.OFF: led = 'inactive'; break; - case StatusCode.STARTED: + case Server.StatusCode.STARTED: led = 'active'; blink = true; break; - case StatusCode.RUNNING: + case Server.StatusCode.RUNNING: led = n > 0 ? 'positive' : 'active'; break; - case StatusCode.KILLING: + case Server.StatusCode.KILLING: led = 'negative'; blink = true; break; - case StatusCode.RESTART: + case Server.StatusCode.RESTART: led = 'warning'; blink = true; break; - case StatusCode.FAILED: + case Server.StatusCode.FAILED: led = 'negative'; blink = false; error = Server.getError(); @@ -301,14 +300,3 @@ export const Stats = () => { }; // -------------------------------------------------------------------------- -// --- Controller Exports -// -------------------------------------------------------------------------- - -export default { - Control, - Console, - Status, - Stats, -}; - -// -------------------------------------------------------------------------- diff --git a/ivette/src/renderer/Properties.tsx b/ivette/src/renderer/Properties.tsx index f8a7b51e758616366c239bbbcdf2a066f32aea30..c17bfe7f81d295327cbd6fd30da2ab7f6b5e5f3f 100644 --- a/ivette/src/renderer/Properties.tsx +++ b/ivette/src/renderer/Properties.tsx @@ -4,7 +4,7 @@ import _ from 'lodash'; import React from 'react'; -import States from 'frama-c/states'; +import * as States from 'frama-c/states'; import { Label, Code } from 'dome/controls/labels'; import { ArrayModel } from 'dome/table/arrays'; import { Table, DefineColumn } from 'dome/table/views'; diff --git a/ivette/src/renderer/index.js b/ivette/src/renderer/index.js index 1544ac9e11373febc48161e9672b71456c6819f6..2452a96d7a597f939c6d9bd97305974ff9039d78 100644 --- a/ivette/src/renderer/index.js +++ b/ivette/src/renderer/index.js @@ -18,7 +18,12 @@ // Enable live-editing in React: import 'react-hot-loader/patch' ; import React from 'react' ; -import Dome from 'dome' ; +import { + setApplicationWindow, + setPreferencesWindow, + isApplicationWindow, + isPreferencesWindow, +} from 'dome' ; // You can change the name of the main components, // provided you define the makefile variable @@ -29,13 +34,13 @@ import Application from './Application' ; import Preferences from './Preferences' ; // Define the application main components for each window: -Dome.setApplicationWindow(Application); -Dome.setPreferencesWindow(Preferences); +setApplicationWindow(Application); +setPreferencesWindow(Preferences); // Mark the main application reloadable and enable live updates: -module.hot && Dome.isApplicationWindow() && - module.hot.accept('./Application',() => Dome.setApplicationWindow(Application)); -module.hot && Dome.isPreferencesWindow() && - module.hot.accept('./Preferences',() => Dome.setPreferencesWindow(Preferences)); +module.hot && isApplicationWindow() && + module.hot.accept('./Application',() => setApplicationWindow(Application)); +module.hot && isPreferencesWindow() && + module.hot.accept('./Preferences',() => setPreferencesWindow(Preferences)); // --------------------------------------------------------------------------