Skip to content

reduce deps #61

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Feb 26, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 37 additions & 33 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,41 +3,45 @@ Pixel Editor

It edits pixels

http://www.danielx.net/pixel-editor/
[Live Demo](https://danielx.net/pixel-editor/)

Tools
=====

Pencil

Brush

Eraser

Eye Dropper

Paint Bucket

Ellipse

Solid Rectangle

Rectangle Outline

Line

Symmetry Modes
==============

Normal
Flip horizontally
Flip vertically
Quad

Hotkeys
=======
Embedding Instructions
======================

0-9 Select nth tool
The editor will send a `postMessage` to its parent window when "Save" is clicked.

One thing to note is that this is pointing to the latest version of
https://danielx.net/pixel-editor/ so it might break out from under you. You'd
probably want to host a stable version of the editor on your own service after
you get it working if you care about that kind of thing.

```html
<html>
<body>
</body>
<iframe src="https://danielx.net/pixel-editor/" width="100%" height="100%"></iframe>
<script>
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event) {
var origin = event.origin;

if (origin !== "https://danielx.net") {
return;
}

var data = event.data;
if (data.method === "save") {
var image = data.image; // HTML5 Blob object
var width = data.width;
var height = data.height;

// Post to your server, etc
console.log(data);
}
}
<\/script>
</html>
```

Developer Instructions
======================
Expand Down
17 changes: 14 additions & 3 deletions actions.coffee.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,35 @@
Actions
=======

require "./lib/mousetrap"

ByteArray = require "byte_array"
FileReading = require("./file_reading")
Hotkeys = require "hotkeys"
Modal = require("./modal")
Palette = require("./palette")

loader = require("./loader")()
saveAs = require "./lib/file_saver"

module.exports = Actions = (I={}, self=Core(I)) ->
self.include Hotkeys

self.extend
addAction: (action) ->
self.actions.push action

actions: Observable []

addHotkey: (key, method) ->
Mousetrap.bind key, (event) ->
event.preventDefault()

if typeof method is "function"
method
editor: self
else
self[method]()

return

Object.keys(Actions.defaults).forEach (hotkey) ->
{method, icon, name} = Actions.defaults[hotkey]

Expand Down
32 changes: 24 additions & 8 deletions drop.coffee.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,35 @@
Drop and Paste Events
=====================

require "jquery-utils"

Loader = require "./loader"

loader = Loader()

Drop = (I={}, self=Core(I)) ->
callback = ({dataURL}) ->
loader.load(dataURL)
.then self.insertImageData

$("html").dropImageReader callback
$(document).pasteImageReader callback
stopFn = (event) ->
event.stopPropagation()
event.preventDefault()
return false

html = document.documentElement
html.addEventListener "dragenter", stopFn
html.addEventListener "dragover", stopFn
html.addEventListener "dragleave", stopFn
html.addEventListener "drop", (event) ->
stopFn(event)
Array::forEach.call event.dataTransfer.files, (file) ->
url = URL.createObjectURL(file)
self.fromDataURL(url)

document.addEventListener "paste", (event) ->
Array::some.call event.clipboardData.items, (item) ->
if item.type.match /^image\//
file = item.getAsFile()
url = URL.createObjectURL(file)
self.fromDataURL(url)
return true
else
return false

module.exports = Drop

Expand Down
6 changes: 3 additions & 3 deletions editor.coffee.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ Editor

LITTLE_ENDIAN = require "./endianness"

require "cornerstone"

loader = require("./loader")()

{extend, defaults} = require "util"

TouchCanvas = require "touch-canvas"
GridGen = require "grid-gen"

Expand Down Expand Up @@ -448,7 +448,7 @@ Editor
x: x
y: y

$(previewCanvas.element()).on "mousemove", ({currentTarget, pageX, pageY}) ->
previewCanvas.element().addEventListener "mousemove", ({currentTarget, pageX, pageY}) ->
{left, top} = currentTarget.getBoundingClientRect()
{x, y} = Point(pageX - left, pageY - top).scale(1/pixelSize()).floor()

Expand Down
11 changes: 11 additions & 0 deletions lib/mousetrap.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 5 additions & 9 deletions loader.coffee.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
Loader
======

Loader = (I={}, self=Core(I)) ->
self.extend
load: (url) ->
deferred = Deferred()

Loader = ->
load: (url) ->
new Promise (resolve, reject) ->
canvas = document.createElement('canvas')
context = canvas.getContext('2d')
image = document.createElement("img")
Expand All @@ -19,13 +17,11 @@ Loader
context.drawImage(image, 0, 0)
imageData = context.getImageData(0, 0, width, height)

deferred.resolve imageData
resolve imageData

image.onerror = ->
deferred.reject "Error loading image data"
reject new Error "Error loading image data"

image.src = url

return deferred.promise()

module.exports = Loader
4 changes: 0 additions & 4 deletions main.coffee.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,6 @@ Editing pixels in your browser.
require("analytics").init("UA-3464282-15")

# Setup
require "cornerstone"

require "jquery-utils"

require "./lib/canvas-to-blob"

runtime = require("runtime")(PACKAGE)
Expand Down
2 changes: 0 additions & 2 deletions palette.coffee.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
Palette
=======

require "cornerstone"

Helpers
-------

Expand Down
10 changes: 7 additions & 3 deletions pixie.cson
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,18 @@ remoteDependencies: [
]
dependencies:
analytics: "distri/google-analytics:v0.1.0"
bindable: "distri/bindable:master"
byte_array: "distri/byte_array:v0.1.1"
cornerstone: "distri/cornerstone:v0.2.8"
core: "distri/core:master"
eval: "distri/eval:v0.1.0"
extensions: "distri/extensions:master"
"grid-gen": "distri/grid-gen:v0.2.0"
"hotkeys": "distri/hotkeys:v0.2.0"
"jquery-utils": "distri/jquery-utils:v0.2.0"
matrix: "distri/matrix:master"
observable: "distri/observable:master"
point: "distri/point:master"
postmaster: "distri/postmaster:v0.2.3"
runtime: "distri/runtime:v0.3.0"
size: "distri/size:master"
"touch-canvas": "distri/touch-canvas:v0.3.1"
"undo": "distri/undo:v0.2.0"
util: "distri/util:v0.1.0"
Expand Down
18 changes: 15 additions & 3 deletions test/editor.coffee
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@


#Editor = require "../editor"
Editor = require "../editor"
#
#describe "editor", ->
#it "should have eval", ->
Expand All @@ -18,3 +16,17 @@ describe "plugins", ->
content: "module.exports = 'the test'"

assert.equal result, "the test"

describe "Editor", ->
editor = Editor()

it "should exist", ->
assert editor

it "should be able to drawn upon", ->
p1 = x: 0, y: 0, identifier: 0
p2 = x: 5, y: 5, identifier: 0

editor.previewCanvas.trigger "touch", p1

editor.previewCanvas.trigger "move", p2
15 changes: 11 additions & 4 deletions util.coffee.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
Util
====

Deferred
--------
require "extensions"

Use jQuery deferred
global.Bindable = require "bindable"
global.Matrix = require "matrix"
global.Model = require "core"
global.Point = require "point"
global.Observable = require "observable"
global.Size = require "size"

global.Deferred = jQuery.Deferred
Matrix.Point = Point

Helpers
-------
Expand All @@ -30,6 +34,9 @@ Point Extensions
Point(@x * scalar.width, @y * scalar.height)
else
Point(@x * scalar, @y * scalar)

Point.prototype.floor = ->
Point @x.floor(), @y.floor()

Extra utilities that may be broken out into separate libraries.

Expand Down