From 5713c1454a4a4663e5ecc5ce2d07d02a4d77ba94 Mon Sep 17 00:00:00 2001 From: Achilles Rasquinha Date: Tue, 26 Sep 2017 00:48:58 +0530 Subject: [PATCH] [MAJOR] functional frappe.ui.Capture :dancer: --- frappe/public/build.json | 6 +- .../js/frappe/form/controls/text_editor.js | 8 +- frappe/public/js/frappe/ui/camera.js | 67 ------------- frappe/public/js/frappe/ui/capture.js | 94 +++++++++++++++++++ 4 files changed, 103 insertions(+), 72 deletions(-) delete mode 100644 frappe/public/js/frappe/ui/camera.js create mode 100644 frappe/public/js/frappe/ui/capture.js diff --git a/frappe/public/build.json b/frappe/public/build.json index 410f398ab2..b70d410f25 100755 --- a/frappe/public/build.json +++ b/frappe/public/build.json @@ -24,7 +24,7 @@ ], "js/control.min.js": [ - "public/js/frappe/ui/camera.js", + "public/js/frappe/ui/capture.js", "public/js/frappe/form/controls/base_control.js", "public/js/frappe/form/controls/base_input.js", @@ -67,7 +67,7 @@ "public/js/frappe/form/multi_select_dialog.js", "public/js/frappe/ui/dialog.js", - "public/js/frappe/ui/camera.js", + "public/js/frappe/ui/capture.js", "public/js/frappe/form/controls/base_control.js", "public/js/frappe/form/controls/base_input.js", @@ -179,7 +179,7 @@ "public/js/frappe/form/multi_select_dialog.js", "public/js/frappe/ui/dialog.js", - "public/js/frappe/ui/camera.js", + "public/js/frappe/ui/capture.js", "public/js/frappe/ui/app_icon.js", diff --git a/frappe/public/js/frappe/form/controls/text_editor.js b/frappe/public/js/frappe/form/controls/text_editor.js index 3a82a7af6d..5904ae8ec1 100644 --- a/frappe/public/js/frappe/form/controls/text_editor.js +++ b/frappe/public/js/frappe/form/controls/text_editor.js @@ -13,8 +13,12 @@ frappe.ui.form.ControlTextEditor = frappe.ui.form.ControlCode.extend({ contents: '', tooltip: 'Camera', click: () => { - const camera = new frappe.ui.Camera(); - camera.show(); + const capture = new frappe.ui.Capture(); + capture.open(); + + capture.click((data) => { + context.invoke('editor.insertImage', data); + }); } }); diff --git a/frappe/public/js/frappe/ui/camera.js b/frappe/public/js/frappe/ui/camera.js deleted file mode 100644 index 733471d86e..0000000000 --- a/frappe/public/js/frappe/ui/camera.js +++ /dev/null @@ -1,67 +0,0 @@ -frappe.ui.Camera = class -{ - constructor (options) - { - this.dialog = new frappe.ui.Dialog(); - - this.template = - ` -
- -
- ` - - this.show = this.show.bind(this); - this.hide = this.hide.bind(this); - this.on = this.on.bind(this); - this.attach = this.attach.bind(this); - - Webcam.set({ - width: 320, - height: 240, - flip_horiz: true, - }) - } - - show ( ) - { - this.attach((err) => { - if ( err ) - throw Error('Unable to attach webcamera.'); - - this.dialog.set_primary_action(__('Click'), () => { - this.click(); - }); - - this.dialog.show(); - }); - } - - hide ( ) - { - this.dialog.hide(); - } - - on (event, callback) - { - if ( event == 'attach' ) { - this.attach(callback); - } - } - - click (callback) - { - Webcam.snap((data) => { - console.log(data); - }); - } - - attach (callback) - { - $(this.dialog.body).append(this.template); - - Webcam.attach('#frappe-camera'); - - callback(); - } -}; \ No newline at end of file diff --git a/frappe/public/js/frappe/ui/capture.js b/frappe/public/js/frappe/ui/capture.js new file mode 100644 index 0000000000..9ce7b8431e --- /dev/null +++ b/frappe/public/js/frappe/ui/capture.js @@ -0,0 +1,94 @@ +frappe.ui.Capture = class +{ + constructor (options) + { + this.options = + { + width: 480, height: 320, flip_horiz: true + }; + + this.dialog = new frappe.ui.Dialog(); + this.template = + ` +
+
+
+
+
+ +
+
+
+ + + +
+
+ + +
+
+
+ `; + $(this.dialog.body).append(this.template); + + this.$btnBarSnap = $(this.dialog.body).find('#frappe-capture-btn-toolbar-snap'); + this.$btnBarKnap = $(this.dialog.body).find('#frappe-capture-btn-toolbar-knap'); + this.$btnBarKnap.hide(); + + Webcam.set(this.options); + } + + open ( ) + { + this.dialog.show(); + + Webcam.attach('#frappe-capture'); + } + + freeze ( ) + { + this.$btnBarSnap.hide(); + this.$btnBarKnap.show(); + + Webcam.freeze(); + } + + unfreeze ( ) + { + this.$btnBarSnap.show(); + this.$btnBarKnap.hide(); + + Webcam.unfreeze(); + } + + click (callback) + { + $(this.dialog.body).find('#frappe-capture-btn-snap').click(() => { + this.freeze(); + + $(this.dialog.body).find('#frappe-capture-btn-discard').click(() => { + this.unfreeze(); + }); + + $(this.dialog.body).find('#frappe-capture-btn-accept').click(() => { + Webcam.snap((data) => { + callback(data); + }); + + this.hide(); + }); + }); + } + + hide ( ) + { + Webcam.reset(); + + $(this.dialog.$wrapper).remove(); + } +}; \ No newline at end of file