{"version":3,"file":"literallycanvas_amd.min.js","sources":["../src/literallycanvas_amd.js"],"sourcesContent":["/* jshint ignore:start */\ndefine(['jquery', 'core/log', 'filter_poodll/utils_amd', 'filter_poodll/uploader', 'filter_poodll/react_amd', 'filter_poodll/literallycanvas'], function ($, log, utils, uploader, React, LC) {\n\n    \"use strict\"; // jshint ;_;\n\n    log.debug('Filter PoodLL: literallycanvas.js initialising');\n\n    return {\n\n        instanceprops: [],\n\n\n        // handle literallycanvas whiteboard saves for Moodle\n        loadliterallycanvas: function (opts) {\n\n            //pick up opts from html\n            var theid = '#amdopts_' + opts['recorderid'];\n            var optscontrol = $(theid).get(0);\n            if (optscontrol) {\n                opts = JSON.parse(optscontrol.value);\n                this.config = opts;\n                $(theid).remove();\n            }\n\n            //init the whiteboard\t(diff logic if have a background image)\n            var element = '#' + opts['recorderid'] + '_literally';\n            var lc_element = $(element)[0];\n\n            //zoom feature\n            var zoomMax = 4;\n            var zoomMin = 0.2;\n\n            if (opts['whiteboardnozoom'] > 0) {\n                zoomMax = 1;\n                zoomMin = 1;\n            }\n\n            if (opts['backgroundimage']) {\n                //simple using opts['backgroundimage'] as src would be better than using a buffer image, but LC won't show it.\n                var backimagebuffer = $('#' + opts['recorderid'] + '_separate-background-image')[0];\n                var backgroundimage = new Image();\n                backgroundimage.src = backimagebuffer.src;\n                backgroundimage.crossOrigin = \"Anonymous\";\n                var backgroundshape = LC.createShape('Image', {x: 0, y: 0, image: backgroundimage, scale: 1});\n\n\n                var lc = LC.init(lc_element, {\n                    imageURLPrefix: opts['imageurlprefix'],\n                    backgroundColor: opts['backgroundcolor'],\n                    backgroundShapes: [backgroundshape],\n                    recorderid: opts['recorderid'],\n                    zoomMax: zoomMax,\n                    zoomMin: zoomMin\n\n                });\n            } else {\n                var lc = LC.init(lc_element, {\n                    imageURLPrefix: opts['imageurlprefix'],\n                    backgroundColor: opts['backgroundcolor'],\n                    recorderid: opts['recorderid'],\n                    zoomMax: zoomMax,\n                    zoomMin: zoomMin\n                });\n            }\n\n            //store our lc reference\n            opts.lc = lc;\n\n            //restore previous drawing if any\n            var vectordata = opts['vectordata'];\n            if (vectordata) {\n                //don't restore drawingboardjs vector if its there, goes to error\n                if (vectordata.indexOf('{\"shapes\"') == 0 || vectordata.indexOf('{\"colors\"') == 0) {\n                    lc.loadSnapshot(JSON.parse(vectordata));\n                }\n            }\n\n            //init the uploader\n            opts.uploader = uploader.clone();\n            opts.uploader.init(element, opts);\n\n            //save opts under recorder id key. This is important to support multi on one page\n            //\"this\" is a singleton\n            this.instanceprops[opts['recorderid']] = opts;\n\n\n            //register the draw and save events that we need to handle\n            this.registerEvents(opts['recorderid']);\n\n        },\n\n        registerEvents: function (recid) {\n\n            var mfp = this;\n            var opts = this.instanceprops[recid];\n\n\n            //handle autosave\n            if (opts['autosave']) {\n                //if user has drawn, commence countdown to save\n                opts.lc.on('drawingChange', function () {\n                    var m = $('#' + recid + '_messages')[0];\n                    var savebutton = $('#' + recid + '_btn_upload_whiteboard')[0];\n                    if (m) {\n                        if (savebutton) {\n                            savebutton.disabled = false;\n                        }\n                        m.innerHTML = '';\n                        var th = utils.timeouthandles[recid];\n                        if (th) {\n                            clearTimeout(th);\n                        }\n                        utils.timeouthandles[recid] = setTimeout(\n                            function () {\n                                utils.WhiteboardUploadHandler(recid, opts.lc, opts, opts.uploader);\n                            },\n                            opts['autosave']);\n                    }\n                });\n\n                //if no autosave\n            } else {\n                //lc.on('drawingChange',(function(mfp){return function(){mfp.setUnsavedWarning;}})(this));\n                //if user has drawn, alert to unsaved state\n                opts.lc.on('drawingChange', function () {\n                    var m = $('#' + recid + '_messages');\n                    if (m) {\n                        m.innerHTML = 'File has not been saved.';\n                    }\n                });\n            }//end of handling autosave\n\n            //set up the upload/save button\n            var uploadbuttonstring = '#' + recid + '_btn_upload_whiteboard';\n            var uploadbutton = $(uploadbuttonstring);\n            if (uploadbutton) {\n                if (opts['autosave']) {\n                    uploadbutton.click(function () {\n                        utils.WhiteboardUploadHandler(recid, opts.lc, opts, opts.uploader);\n                    });\n                } else {\n                    uploadbutton.click(\n                        function () {\n                            var cvs = utils.getCvs(recid, opts.lc, opts);\n                            utils.pokeVectorData(recid, opts.lc, opts);\n                            opts.uploader.uploadFile(cvs.toDataURL(), 'image/png');\n                        });\n                }\n            }\n        },\n\n    }\n});"],"names":["define","$","log","utils","uploader","React","LC","debug","instanceprops","loadliterallycanvas","opts","theid","optscontrol","get","JSON","parse","value","config","remove","element","lc_element","zoomMax","zoomMin","backimagebuffer","backgroundimage","Image","src","crossOrigin","backgroundshape","createShape","x","y","image","scale","lc","init","imageURLPrefix","backgroundColor","backgroundShapes","recorderid","vectordata","indexOf","loadSnapshot","clone","registerEvents","recid","this","on","m","savebutton","disabled","innerHTML","th","timeouthandles","clearTimeout","setTimeout","WhiteboardUploadHandler","uploadbutton","click","cvs","getCvs","pokeVectorData","uploadFile","toDataURL"],"mappings":"AACAA,2CAAO,CAAC,SAAU,WAAY,0BAA2B,yBAA0B,0BAA2B,kCAAkC,SAAUC,EAAGC,IAAKC,MAAOC,SAAUC,MAAOC,WAItLJ,IAAIK,MAAM,kDAEH,CAEHC,cAAe,GAIfC,oBAAqB,SAAUC,UAGvBC,MAAQ,YAAcD,KAAI,WAC1BE,YAAcX,EAAEU,OAAOE,IAAI,GAC3BD,cACAF,KAAOI,KAAKC,MAAMH,YAAYI,YACzBC,OAASP,KACdT,EAAEU,OAAOO,cAITC,QAAU,IAAMT,KAAI,WAAiB,aACrCU,WAAanB,EAAEkB,SAAS,GAGxBE,QAAU,EACVC,QAAU,MAEVZ,KAAI,iBAAuB,IAC3BW,QAAU,EACVC,QAAU,GAGVZ,KAAI,gBAAqB,KAErBa,gBAAkBtB,EAAE,IAAMS,KAAI,WAAiB,8BAA8B,GAC7Ec,gBAAkB,IAAIC,MAC1BD,gBAAgBE,IAAMH,gBAAgBG,IACtCF,gBAAgBG,YAAc,gBAC1BC,gBAAkBtB,GAAGuB,YAAY,QAAS,CAACC,EAAG,EAAGC,EAAG,EAAGC,MAAOR,gBAAiBS,MAAO,IAGtFC,GAAK5B,GAAG6B,KAAKf,WAAY,CACzBgB,eAAgB1B,KAAI,eACpB2B,gBAAiB3B,KAAI,gBACrB4B,iBAAkB,CAACV,iBACnBW,WAAY7B,KAAI,WAChBW,QAASA,QACTC,QAASA,eAITY,GAAK5B,GAAG6B,KAAKf,WAAY,CACzBgB,eAAgB1B,KAAI,eACpB2B,gBAAiB3B,KAAI,gBACrB6B,WAAY7B,KAAI,WAChBW,QAASA,QACTC,QAASA,UAKjBZ,KAAKwB,GAAKA,OAGNM,WAAa9B,KAAI,WACjB8B,aAEuC,GAAnCA,WAAWC,QAAQ,cAAwD,GAAnCD,WAAWC,QAAQ,cAC3DP,GAAGQ,aAAa5B,KAAKC,MAAMyB,cAKnC9B,KAAKN,SAAWA,SAASuC,QACzBjC,KAAKN,SAAS+B,KAAKhB,QAAST,WAIvBF,cAAcE,KAAI,YAAkBA,UAIpCkC,eAAelC,KAAI,aAI5BkC,eAAgB,SAAUC,WAGlBnC,KAAOoC,KAAKtC,cAAcqC,OAI1BnC,KAAI,SAEJA,KAAKwB,GAAGa,GAAG,iBAAiB,eACpBC,EAAI/C,EAAE,IAAM4C,MAAQ,aAAa,GACjCI,WAAahD,EAAE,IAAM4C,MAAQ,0BAA0B,MACvDG,EAAG,CACCC,aACAA,WAAWC,UAAW,GAE1BF,EAAEG,UAAY,OACVC,GAAKjD,MAAMkD,eAAeR,OAC1BO,IACAE,aAAaF,IAEjBjD,MAAMkD,eAAeR,OAASU,YAC1B,WACIpD,MAAMqD,wBAAwBX,MAAOnC,KAAKwB,GAAIxB,KAAMA,KAAKN,YAE7DM,KAAI,cAQhBA,KAAKwB,GAAGa,GAAG,iBAAiB,eACpBC,EAAI/C,EAAE,IAAM4C,MAAQ,aACpBG,IACAA,EAAEG,UAAY,mCAOtBM,aAAexD,EADM,IAAM4C,MAAQ,0BAEnCY,eACI/C,KAAI,SACJ+C,aAAaC,OAAM,WACfvD,MAAMqD,wBAAwBX,MAAOnC,KAAKwB,GAAIxB,KAAMA,KAAKN,aAG7DqD,aAAaC,OACT,eACQC,IAAMxD,MAAMyD,OAAOf,MAAOnC,KAAKwB,GAAIxB,MACvCP,MAAM0D,eAAehB,MAAOnC,KAAKwB,GAAIxB,MACrCA,KAAKN,SAAS0D,WAAWH,IAAII,YAAa"}