GithubHelp home page GithubHelp logo

kode-team / easylogic.studio Goto Github PK

View Code? Open in Web Editor NEW
491.0 14.0 54.0 179.45 MB

Fantastic Web Design Tool

Home Page: https://editor.easylogic.studio

License: MIT License

JavaScript 86.59% HTML 0.04% SCSS 13.24% TypeScript 0.13% Shell 0.01%

easylogic.studio's Introduction

EasyLogic Studio

EasyLogic Studio is built using CSS and SVG to reduce the gap between web design and code. The goal is to have the same point in time between the designer's design and the developer's output.

This project is sapa based.

Screen Shot

Features

Support Element

  • Artboard
  • Rect
  • Circle
  • Text
  • Image
  • SVG Path (with Rect, Circle)
  • SVG Spline
  • SVG Polygon
  • SVG Star
  • SVG TextPath

Style

  • Alignment
  • Position
  • Size (pixel based)
  • Layout (flex, grid, abolute)
  • Constraints (auto resizing)
  • Many styling tools
    • background (support resizing tool)
    • font & text style
    • gradient (multiple background images )
    • border & radius
    • filter
    • clip-path (support svg path )
    • box-shadows (multiple)
    • text-shadows (multiple)

Animation

  • Transition
  • Animation & Keyframes
  • Support cubic-bezier editor

Code & Share

  • Support code viewer
  • Support png & svg download

Drawing

  • Support mini path editor

Theming

  • dark
  • light

Development

git clone https://github.com/easylogic/editor.git
cd editor
npm install 
npm run dev 

build

npm run build 

Open Editor

please refer to src/index.html, src/index.js

  <body>
    <div id="app"></div>    
  </body>
import EasyLogic from "@easylogic/editor";

var app = new EasyLogic.createDesignEditor({
  container: document.getElementById('app'),
  data: {
    projects: [{
      itemType: 'project', 
      layers: [
        {itemType: 'rect', x: 0, y: 0, width: 100, height: 100, 'background-color': 'red'},
        {itemType: 'rect', x: 20, y: 20, width: 100, height: 100, 'background-color': 'green'},
        {itemType: 'rect', x: 40, y: 40, width: 100, height: 100, 'background-color': 'blue'}
      ]
    }],
  },
  plugins: [
    // define plugin 
    function (editor) {
      console.log(editor);
    }
  ]
});

Configs

You can set some useful configs.

var app = new EasyLogic.createDesignEditor({
  container: document.getElementById('app'),
  config: {
    "style.canvas.backgroud.color": "#FDC111"
    "show.ruler": false,
    "show.left.panel": false,
    "show.right.panel": false
  },
})

Plugins

please refer to MakeEditor

Thanks to

License : MIT

easylogic.studio's People

Contributors

doong-jo avatar easylogic avatar yeonjuan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  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

easylogic.studio's Issues

Support KeyMap Manager (Windows & Mac & Linux)

vscode-liked event system을 구축

editor.shortcuts.registerShortCut({
    key: 'cmd+c',  // 공통 키 설정 
    win: 'win+c',   // windows 일 때 동작 
    mac: 'cmd+c',  // mac os 일 때 동작 
    linux: 'ctrl+c',  // linux 일 때 동작 
    command: 'clipboard.copy',
    description: 'copy',
    args: { 'text' : 'test' },
    when:  'CanvasView'
});

행위가 너무 불편하다.

  • transform 도구가 중간에 있으니 작은 크기의 element 는 제어하기 힘들다. 그냥 빼자.
  • rotate 만 남겨두고 그냥 나머지 UI 는 따로 생각하자.
  • 3D Transform 은 화면 다른 곳에 따로 둬도 될 듯 하다.
  • Selection 을 하고 나서 , 실제로 또 다른 selection 을 할려면 엄청 애매하다.
  • 예를 들어 Artboard 를 선택하고 나서는 이후에 다른 객체를 선택하는 것이 불가능 하다.
  • Selection 을 모델을 바꿔야 할 듯 하다. 예를 들어 artboard 선택 이후 다른 객체를 선택할 수 있을려면 어떻게 해야할 까?
  • selection 을 순수하게 dom 모델로 바꿀까?
  • selection 에서 move 는 언제 이뤄질까?
  • selection 에서 가운데 영역(move) 에 이벤트를 주지 않으면 되지만 그렇게 되면 다른 동작은 어떻게 하지?
  • 확대/축소를 자연스럽게 해야하는데 브라우저 확대를 어떻게 막을 것인가?
  • 특정크기 이하는 selection 툴 넓이를 고장하자.
  • 확대/축소를 좀 더 편하게
  • 가운데 영역을 최초 클릭 할 때는 이동, 그 다음으로 클릭할 때는 selection 기능으로

Implement pattern path (as brush)

svg 로 만든 패턴을 path 에 입힌다.

  1. path 의 position: middle, top, bottom
  2. 패턴을 path 의 동선에 맞게 좌표를 재 조정 하기

Support comment pointer

  • 특정 지점에 comment 를 적을 수 있게 하자.
  • comment 모드를 따로 만들어서 정리하자.
  • 하나의 comment 는 여러명이서 이어서 채팅처럼 이야기 할 수 있다. ex) 제플린, Figma, Framer 등등
  • 유저 로그인을 꼭 만들어야할듯

Failed to compile :(

What a wonderful editor and library to build it!
Congrats Jinho (and your team I guess) :)

I was curious to build the master version on my Ubuntu 19.10 and at build time, I got:

npm WARN npm npm does not support Node.js v10.15.2
npm WARN npm You should probably upgrade to a newer version of node as we
npm WARN npm can't make any promises that npm will work with this version.
npm WARN npm Supported releases of Node.js are the latest release of 4, 6, 7, 8, 9.
npm WARN npm You can find the latest version at https://nodejs.org/

> @easylogic/[email protected] dev /media/Data/editor
> webpack-dev-server --config=webpack.dev.config.js --progress --open

10% building 1/1 modules 0 activeℹ 「wds」: Project is running at http://localhost:8081/
ℹ 「wds」: webpack output is served from /
ℹ 「wds」: Content not from webpack is served from /media/Data/editor
12% building 22/28 modules 6 active /media/Data/editor/node_modules/events/events.jsℹ 「wdm」: wait until bundle finished: /
✖ 「wdm」: Hash: f92d05deb5947faf1fdf
Version: webpack 4.43.0
Time: 32285ms
Built at: 05/29/2020 2:39:22 PM
                               Asset      Size  Chunks             Chunk Names
                        ./index.html  1.85 KiB          [emitted]  
3a8ca398e6a5c3b83f4de7c60843a9a0.png   4.7 KiB          [emitted]  
                          bundle.css   603 KiB    main  [emitted]  main
                             main.js  4.34 MiB    main  [emitted]  main
Entrypoint main = bundle.css main.js
[0] multi (webpack)-dev-server/client?http://localhost:8081 ./src/index.js 40 bytes {main} [built]
[./node_modules/strip-ansi/index.js] 161 bytes {main} [built]
[./node_modules/webpack-dev-server/client/index.js?http://localhost:8081] (webpack)-dev-server/client?http://localhost:8081 4.29 KiB {main} [built]
[./node_modules/webpack-dev-server/client/overlay.js] (webpack)-dev-server/client/overlay.js 3.51 KiB {main} [built]
[./node_modules/webpack-dev-server/client/socket.js] (webpack)-dev-server/client/socket.js 1.53 KiB {main} [built]
[./node_modules/webpack-dev-server/client/utils/createSocketUrl.js] (webpack)-dev-server/client/utils/createSocketUrl.js 2.91 KiB {main} [built]
[./node_modules/webpack-dev-server/client/utils/log.js] (webpack)-dev-server/client/utils/log.js 964 bytes {main} [built]
[./node_modules/webpack-dev-server/client/utils/reloadApp.js] (webpack)-dev-server/client/utils/reloadApp.js 1.59 KiB {main} [built]
[./node_modules/webpack-dev-server/client/utils/sendMessage.js] (webpack)-dev-server/client/utils/sendMessage.js 402 bytes {main} [built]
[./node_modules/webpack/hot sync ^\.\/log$] (webpack)/hot sync nonrecursive ^\.\/log$ 170 bytes {main} [built]
[./src/colorpicker/index.js] 1.31 KiB {main} [built]
[./src/csseditor/index.js] 1.91 KiB {main} [built]
[./src/index.js] 1.65 KiB {main} [built]
[./src/scss/index.scss] 39 bytes {main} [built]
[./src/util/index.js] 398 bytes {main} [built]
    + 691 hidden modules

ERROR in ./src/util/App.js
Module not found: Error: Can't resolve '../editor/Editor' in '/media/Data/editor/src/util'
 @ ./src/util/App.js 29:0-42 56:27-33
 @ ./src/util/index.js
 @ ./src/index.js

ERROR in ./src/csseditor/ui/control/LayerTab.js
Module not found: Error: Can't resolve './ComponentItems' in '/media/Data/editor/src/csseditor/ui/control'
 @ ./src/csseditor/ui/control/LayerTab.js 29:0-46 61:24-38
 @ ./src/csseditor/ui/control/ObjectList.js
 @ ./src/csseditor/editor/index.js
 @ ./src/csseditor/index.js
 @ ./src/index.js

ERROR in ./src/csseditor/ui/property/index.js
Module not found: Error: Can't resolve './KeyframeProperty' in '/media/Data/editor/src/csseditor/ui/property'
 @ ./src/csseditor/ui/property/index.js 17:0-50 96:20-36
 @ ./src/csseditor/ui/control/Inspector.js
 @ ./src/csseditor/editor/index.js
 @ ./src/csseditor/index.js
 @ ./src/index.js
Child html-webpack-plugin for "index.html":
     1 asset
    Entrypoint undefined = ./index.html
    [./node_modules/html-webpack-plugin/lib/loader.js!./src/index.html] 1.8 KiB {0} [built]
Child mini-css-extract-plugin node_modules/css-loader/dist/cjs.js!node_modules/postcss-loader/src/index.js!node_modules/sass-loader/dist/cjs.js??ref--6-3!src/scss/index.scss:
    Entrypoint mini-css-extract-plugin = *
    [./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/src/index.js!./node_modules/sass-loader/dist/cjs.js?!./src/scss/index.scss] ./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/src!./node_modules/sass-loader/dist/cjs.js??ref--6-3!./src/scss/index.scss 623 KiB {mini-css-extract-plugin} [built]
    [./node_modules/css-loader/dist/runtime/api.js] 2.35 KiB {mini-css-extract-plugin} [built]
    [./node_modules/css-loader/dist/runtime/url-escape.js] 460 bytes {mini-css-extract-plugin} [built]
    [./src/scss/images/icon128.png] 82 bytes {mini-css-extract-plugin} [built]
ℹ 「wdm」: Failed to compile.

localhost:8080 is used by a running container so 8081 is legit.
BTW, I noted it opens a browser page which calls scripts d-collect.jennifersoft.com and googletagmanager. Is it really needed to run it locally?

Thank you very much again for this wonderful project :)
Have a great day,
from France.

v1.0.0 manual

문서화 작업 시작

  • update README.md
  • 홈 개편 - 디자인은 어떻게 하나?
  • Getting Started
  • Tool Menu
  • Left Panel
  • Right Panel
  • Canvas View
  • Selection
  • Layers
  • Editors
  • Timeline
  • Export
  • Utilities

객체 추가시 변화량 최소화하기

현재는 객체를 추가 할 때 전체 렌더링을 다시 하게 되는데.

기본 원리는 이렇다.

  1. 특정 layer 를 추가 한다.
  2. element 전체를 다시 생성한다.
  3. style 전체를 다시 생성한다.
  4. selection 을 다시 생성한다.

이렇게 한 이유는 객체가 여러 시점에 동시에 하나 이상이 추가 될 수 있기 때문에 그랬는데.....

변화량을 최소화 하기 위해서

style 태그를 재 생성하지 않는 방식으로 가야겠다.

  1. reset 을 실행하면 timestamp 가 적용 되고
  2. style 태그는 그 timestamp 를 아이디로 가지고
  3. timestamp 가 변경이 없으면 style 은 수정하지 않는다.

element 는 그대로 새로고침 한다고 쳤을 때
여기는 diff 를 따라서 그리도록 해야할 듯 하다.

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.