Giter Club home page Giter Club logo

pluto's Introduction

CircleCI

Development

Development requires Deps and CLI tooling installed.

Run dev mode using make dev.

Tests

Run Clojure tests using clojure -A:test-clj (or continuously via clojure -A:test-clj -w src) Run ClojureScript tests using clojure -A:test-cljs

pluto's People

Contributors

alwx avatar cammellos avatar flexsurfer avatar jakubgs avatar janherich avatar jeluard avatar morelazers avatar tpscrpt avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pluto's Issues

Settings and reusable data

Extensions might require static data reused across components. Furthermore those data might act as default but could be exposed and made modifiable by end users (via some panel in the extensions screen)

Define the reference syntax

References point to extensions elements. Make sure the syntax is unambiguous regarding:

  • local vars usage (as introduced by let blocks)
  • current extensions elements
  • current platform elements
  • elements defined in remote extensions

Implement permission mechanism

Permissions are associated to queries and events and hooks and defined host side.

Permissions are collected, aggregated and available as part of parse result map (similar to how errors are accumulated).

Define a meta API

Provides access to host capacities (query, events, hooks, ..)
Enforce meta element definition.

Implement realtime playground

Changes made to a playground are update live in a target host.

Potential scenario:

  • initiate a session, a QR code is generated encapsulated connection details to playground (websockets?)
  • host connects to the playground
  • each change is pushed to host

Introduce default hook protocol

Context :host element should provide a :default-hook (with default implementation based on re-frame) that will be used for any hooks ne specifically providing a custom :hook.

Allow to use host queries/events

A host can define what query/events can be reused by a host via capacities.
Each query/events has some associated permissions requirements that will be aggregated and made available to host at parse time (similar to how errors are handled).

A view can then use those query/events.

Setup documentation infrastructure

Setup basic documentation infrastructure based on https://docusaurus.io/. Documentation will be written in markdown, stored in the repo and the final website automatically updated and published in this repo on each commit.

Manifesto and Specs docs should be migrated there.

Theme style syntax

Implement a syntax allowing to propagate styling/properties to nested view components

Use case: status might introduce visualization for privacy (a chat could switch from private to public). Or some UI might be read-only while others read-write. Those share similarities to theming but differ in an important way: it is not globally set but can be specified at lower scope, multiple times and with different values.

Resources:

Allow extensions to provide custom code

An API allows to register custom queries and events in JavaScript.

How this code will be isolated, what data it access and how changes are propagated will be defined.

Improve event arguments validation

Events get called with data injected from event caller. Extra data should be considered while validating the event arguments correctness.

e.g. this example is valid as on-change will inject the required value property needed by store/put

[input {:on-change [store/put {:key "input"}]}]

List available bricks

Playground should provide a sumple way for developers to list available components, events and queries.

Improve let symbol replacement logic

Let blocks replace symbols with their associated values using a dumb logic.

Make sure this logic only replaces symbols that should be replaced (e.g. not view components, blocks symbols, ..).

Also make sure that nested let blocks properly works (shadowing, niling symbols defined in nested blocks, ..)

Validate destructuring syntax

Structure of the destructuring pattern should match the shape of destructured data (either static map, query or properties).

It might be necessary to introduce meta data for query return value and properties.

Define the extension hook API

Each platform provides a list of hooks and associated meta data they support.
They get back the parsed info and data they can actually use.

Investigate FSM usage

Allow to define local events

Local events can be defined the same way views can. Only let blocks and string interpolation will be supported.

events/my-event
(let [{param :param} properties]
  [alert "Hey look at ${param}"])

Syntax Errors are difficult to resolve and present a UX challenge

Syntax errors are currently very difficult to resolve. Syntax errors will be the most common experience when people use the pluto and thus these will need to be addressed at some point.

I currently see two solutions to the current situation:

  • translating the errors to a concise meaningful message
  • providing location info (position in file) of where the error originated

Position info while more difficult to implement can provide more information to a user even if that position information is attached to a cryptic error message.

Position info can be gathered if the edn is read with tools.analyzer on the client.

Extra metadata

Consider adding extra metadata (like localization) tha could be leveraged by hosts.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.