File tree 11 files changed +59
-69
lines changed
11 files changed +59
-69
lines changed Original file line number Diff line number Diff line change 102
102
(.catch #(when on-error (rf/dispatch (conj on-error %)))))
103
103
(legacy-file-open! success-cb)))))
104
104
105
+ (rf/reg-fx
106
+ ::file-read-as
107
+ (fn [[^js/File file method events]]
108
+ (let [reader (js/FileReader. )]
109
+ (doseq
110
+ [[event {:keys [formatter on-fire]}] events]
111
+ (.addEventListener reader event
112
+ #(rf/dispatch (conj on-fire
113
+ (cond-> (.-result reader)
114
+ formatter
115
+ formatter)))))
116
+ (case method
117
+ :data-url (.readAsDataURL reader file)
118
+ :text (.readAsText reader file)))))
119
+
105
120
(rf/reg-fx
106
121
::download
107
122
(fn [{:keys [data title]}]
Original file line number Diff line number Diff line change 3
3
(:require
4
4
[clojure.string :as str]
5
5
[re-frame.core :as rf]
6
+ [renderer.app.effects :as-alias app.fx]
6
7
[renderer.app.events :as app.e]
7
8
[renderer.attribute.hierarchy :as hierarchy]
8
9
[renderer.attribute.views :as v]
9
10
[renderer.element.events :as-alias element.e]
11
+ [renderer.notification.events :as-alias notification.e]
10
12
[renderer.tool.events :as-alias tool.e]
11
13
[renderer.tool.handlers :as tool.h]
12
14
[renderer.tool.subs :as-alias tool.s]
42
44
::success
43
45
(fn [{:keys [db]} [_ file]]
44
46
{:db (tool.h/activate db :transform )
45
- ::update-href file}))
46
-
47
- (rf/reg-fx
48
- ::update-href
49
- (fn [^js/File file]
50
- (let [reader (js/FileReader. )]
51
- (.addEventListener
52
- reader
53
- " load"
54
- #(rf/dispatch [::element.e/set-attr :href (.-result reader)]))
55
- (.readAsDataURL reader file))))
47
+ ::app.fx/file-read-as [file
48
+ :data-url
49
+ {" load" {:on-fire [::element.e/set-attr :href ]}
50
+ " error" {:on-fire [::notification.e/exception ]}}]}))
Original file line number Diff line number Diff line change 13
13
[renderer.attribute.impl.core]
14
14
[renderer.dialog.events]
15
15
[renderer.dialog.subs]
16
- [renderer.document.effects]
17
16
[renderer.document.events :as document.e]
18
17
[renderer.document.subs]
19
18
[renderer.element.effects]
Load Diff This file was deleted.
Original file line number Diff line number Diff line change 11
11
[renderer.dialog.handlers :as dialog.h]
12
12
[renderer.dialog.views :as dialog.v]
13
13
[renderer.document.db :as db]
14
- [renderer.document.effects :as-alias fx]
15
14
[renderer.document.handlers :as h]
16
15
[renderer.element.handlers :as element.h]
17
16
[renderer.history.handlers :as history.h]
192
191
(rf/reg-event-fx
193
192
::file-read
194
193
(fn [_ [_ file]]
195
- {::fx/read file}))
194
+ {::app.fx/file-read-as [file
195
+ :text
196
+ {" load" {:formatter #(-> (edn/read-string %)
197
+ (assoc :title (.-name file)
198
+ :path (.-path file)))
199
+ :on-fire [::load ]}
200
+ " error" {:on-fire [::notification.e/exception ]}}]}))
196
201
197
202
(rf/reg-event-fx
198
203
::open-directory
Original file line number Diff line number Diff line change 48
48
:on-success [::e/traced ]}])))))))
49
49
50
50
(rf/reg-fx
51
- ::add -image
51
+ ::import -image
52
52
(fn [[^js/File file [x y]]]
53
53
(let [reader (js/FileReader. )]
54
54
(.addEventListener
Original file line number Diff line number Diff line change 3
3
[clojure.string :as str]
4
4
[re-frame.core :as rf]
5
5
[renderer.app.effects :as-alias app.fx]
6
+ [renderer.document.events :as-alias document.e]
6
7
[renderer.element.effects :as-alias fx]
7
8
[renderer.element.handlers :as h]
8
9
[renderer.history.handlers :as history.h]
263
264
(history.h/finalize (str " Create " (name (:tag el)))))))
264
265
265
266
(rf/reg-event-db
266
- ::import
267
+ ::import-svg
267
268
(fn [db [_ data]]
268
269
(-> (h/import-svg db data)
269
270
(history.h/finalize " Import svg" ))))
331
332
(history.h/finalize " Trace image" ))))
332
333
333
334
(rf/reg-event-fx
334
- ::add-image
335
- (fn [_ [_ file position]]
336
- {::fx/add-image [file position]}))
335
+ ::file-import-at
336
+ (fn [_ [_ position file]]
337
+ (when-let [file-type (.-type file)]
338
+ (cond
339
+ (= file-type " image/svg+xml" )
340
+ {::app.fx/file-read-as [file
341
+ :text
342
+ {" load" {:formatter #(hash-map :svg %
343
+ :label (.-name file)
344
+ :position position)
345
+ :on-fire [::import-svg ]}
346
+ " error" {:on-fire [::notification.e/exception ]}}]}
347
+
348
+ (contains? #{" image/jpeg" " image/png" " image/bmp" " image/gif" } file-type)
349
+ {::fx/import-image [file position]}
350
+
351
+ :else
352
+ (let [extension (last (str/split (.-name file) " ." ))]
353
+ (when (= extension " rps" )
354
+ {:dispatch [::document.e/file-read file]}))))))
Original file line number Diff line number Diff line change 1
1
(ns renderer.tool.effects
2
2
(:require
3
- [clojure.string :as str]
4
3
[re-frame.core :as rf]
5
- [renderer.document.events :as document.e]
6
4
[renderer.element.events :as-alias element.e]
7
5
[renderer.utils.dom :as dom]))
8
6
20
18
::drop
21
19
(fn [[position data-transfer]]
22
20
(doseq [item (.-items data-transfer)]
23
- (case (.-kind item)
24
- " string"
21
+ (when (= (.-kind item) " string" )
25
22
(let [[x y] position]
26
23
(.getAsString item #(rf/dispatch [::element.e/add {:type :element
27
24
:tag :text
28
25
:content %
29
26
:attrs {:x x
30
- :y y}}])))
31
- nil ))
27
+ :y y}}])))))
32
28
33
29
(doseq [file (.-files data-transfer)]
34
- (when-let [file-type (.-type file)]
35
- (cond
36
- (= file-type " image/svg+xml" )
37
- (let [reader (js/FileReader. )]
38
- (.addEventListener
39
- reader
40
- " load"
41
- #(rf/dispatch [::element.e/import {:svg (.-result reader)
42
- :label (.-name file)
43
- :position position}]))
44
- (.readAsText reader file))
45
-
46
- (contains? #{" image/jpeg" " image/png" " image/bmp" " image/gif" } file-type)
47
- (rf/dispatch [::element.e/add-image file position])
48
-
49
- :else
50
- (let [extension (last (str/split (.-name file) " ." ))]
51
- (when (= extension " rps" )
52
- (rf/dispatch [::document.e/file-read file]))))))))
30
+ (rf/dispatch [::element.e/file-import-at position file]))))
Original file line number Diff line number Diff line change 29
29
::success
30
30
(fn [{:keys [db]} [_ file]]
31
31
{:db (tool.h/activate db :transform )
32
- ::element.fx/add -image [file (or (:point (:nearest-neighbor db))
33
- (:adjusted-pointer-pos db))]}))
32
+ ::element.fx/import -image [file (or (:point (:nearest-neighbor db))
33
+ (:adjusted-pointer-pos db))]}))
Original file line number Diff line number Diff line change 7
7
[renderer.app.events :as app.e]
8
8
[renderer.app.subs]
9
9
[renderer.dialog.events]
10
- [renderer.document.effects]
11
10
[renderer.document.events]
12
11
[renderer.document.subs]
13
12
[renderer.element.effects]
Original file line number Diff line number Diff line change 352
352
(rf/dispatch [::app.e/initialize-db ])
353
353
(rf/dispatch [::document.e/init ])
354
354
(let [selected (rf/subscribe [::s/selected ])]
355
- (rf/dispatch [::e/import {:svg " <svg x=\" 100\" y=\" 100\" width=\" 200\" height=\" 200\" ></svg>"
356
- :label " filename.svg"
357
- :position [500 500 ]}])
355
+ (rf/dispatch [::e/import-svg {:svg " <svg x=\" 100\" y=\" 100\" width=\" 200\" height=\" 200\" ></svg>"
356
+ :label " filename.svg"
357
+ :position [500 500 ]}])
358
358
(is (= (-> @selected first :tag ) :svg ))
359
359
(is (= (-> @selected first :label ) " filename.svg" ))
360
360
(is (= (-> @selected first :attrs :x ) " 500" ))
You can’t perform that action at this time.
0 commit comments