Repository: openmeetings Updated Branches: refs/heads/master ed0a54860 -> 81fa4d9cc
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/81fa4d9c/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js index afe37ea..3f1c709 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js @@ -43,6 +43,175 @@ var UUID = (function() { } return self; })(); +var Player = (function() { + var player = {}; + player.create = function(canvas, _o) { + let vid = $('<video>').hide().attr('class', 'wb-video slide-' + canvas.slide).attr('id', 'wb-video-' + _o.uid) + .attr("width", _o.width).attr("height", _o.height) + .append($('<source>').attr('type', 'video/mp4').attr('src', _o._src)) + let mainColor = '#ff6600'; + $('#wb-tab-' + canvas.wbId).append(vid); + new fabric.Image.fromURL(_o._poster, function(poster) { + new fabric.Image(vid[0], {}, function (video) { + let rad = 20; + video.visible = false; + poster.width = _o.width; + poster.height = _o.height; + let opts = $.extend({ + left: 10 + , top: 10 + , subTargetCheck: true + , objectCaching: false + , omType: 'Video' + }, _o); + delete opts.type; + let group = new fabric.Group([video, poster], opts); + let paused = true; + let trg = new fabric.Triangle({ + left: group.left + 2.7 * rad + , top: group.top + group.height - 2.5 * rad + , visible: paused + , angle: 90 + , width: rad + , height: rad + , stroke: mainColor + , fill: mainColor + }); + let rectPause1 = new fabric.Rect({ + left: group.left + 1.6 * rad + , top: group.top + group.height - 2.5 * rad + , visible: !paused + , width: rad / 3 + , height: rad + , stroke: mainColor + , fill: mainColor + }); + let rectPause2 = new fabric.Rect({ + left: group.left + 2.1 * rad + , top: group.top + group.height - 2.5 * rad + , visible: !paused + , width: rad / 3 + , height: rad + , stroke: mainColor + , fill: mainColor + }); + let play = new fabric.Group([ + new fabric.Circle({ + left: group.left + rad + , top: group.top + group.height - 3 * rad + , radius: rad + , stroke: mainColor + , strokeWidth: 2 + , fill: null + }) + , trg, rectPause1, rectPause2] + , { + objectCaching: false + }); + let cProgress = new fabric.Rect({ + left: group.left + 3.5 * rad + , top: group.top + group.height - 1.5 * rad + , visible: !paused + , width: video.width - 5 * rad + , height: rad / 2 + , stroke: mainColor + , fill: null + , rx: 5 + , ry: 5 + }); + let progress = new fabric.Rect({ + left: group.left + 3.5 * rad + , top: group.top + group.height - 1.5 * rad + , visible: !paused + , width: 0 + , height: rad / 2 + , stroke: mainColor + , fill: mainColor + , rx: 5 + , ry: 5 + }); + let request; + let render = function () { + progress.set('width', (vid[0].currentTime * cProgress.width) / vid[0].duration); + canvas.renderAll(); + if (paused) { + cancelAnimationFrame(request); + } else { + request = fabric.util.requestAnimFrame(render); + } + }; + play.on({ + /* + * https://github.com/kangax/fabric.js/issues/4115 + * + 'mouseover': function() { + circle1.set({strokeWidth: 4}); + canvas.renderAll(); + } + , 'mouseout': function() { + circle1.set({ + left: pos.left + , top: pos.top + , strokeWidth: 2 + }); + canvas.renderAll(); + } + , */'mousedown': function () { + play.set({ + left: pos.left + 3 + , top: pos.top + 3 + }); + canvas.renderAll(); + } + , 'mouseup': function () { + play.set({ + left: pos.left + , top: pos.top + }); + if (paused) { + video.visible = true; + poster.visible = false; + progress.visible = true; + cProgress.visible = true; + video.getElement().play(); + fabric.util.requestAnimFrame(render); + } else { + vid[0].pause(); + } + paused = !paused; + trg.visible = paused; + rectPause1.visible = !paused; + rectPause2.visible = !paused; + canvas.renderAll(); + } + }); + + group.addWithUpdate(play); + group.addWithUpdate(progress); + group.addWithUpdate(cProgress); + group.selectable = canvas.selection; + + canvas.add(group); + canvas.renderAll(); + + let pos = {left: play.left, top: play.top}; + }); + }); + } + player.modify = function(g, _o) { + g.set({ + angle: _o.angle + , left: _o.left + , scaleX: _o.scaleX + , scaleY: _o.scaleY + , top: _o.top + , width: _o.width + , height: _o.height + }); + g.canvas.renderAll(); + } + return player; +})(); var Base = function() { var base = {}; base.objectCreated = function(o, canvas) { @@ -78,7 +247,7 @@ var Pointer = function(wb, s) { }; } var APointer = function(wb) { - var pointer = Base(wb); + var pointer = Base(); pointer.user = ''; pointer.create = function(canvas, o) { fabric.Image.fromURL('./css/images/pointer.png', function(img) { @@ -169,8 +338,8 @@ var APointer = function(wb) { }; return pointer; } -var ShapeBase = function(wb) { - var base = Base(wb); +var ShapeBase = function() { + var base = Base(); base.fill = {enabled: true, color: '#FFFF33'}; base.stroke = {enabled: true, color: '#FF6600', width: 5}; base.opacity = 1; @@ -198,7 +367,7 @@ var ShapeBase = function(wb) { return base; } var Text = function(wb, s) { - var text = ShapeBase(wb); + var text = ShapeBase(); text.obj = null; text.fill.color = '#000000'; text.stroke.width = 1; @@ -822,165 +991,7 @@ var Wb = function() { switch (_o.fileType) { case 'Video': case 'Recording': - { - let canvas = canvases[_o.slide]; - let vid = $('<video>').hide().attr('class', 'wb-video slide-' + canvas.slide).attr('id', 'wb-video-' + _o.uid) - .attr("width", _o.width).attr("height", _o.height) - .append($('<source>').attr('type', 'video/mp4').attr('src', _o._src)) - let mainColor = '#ff6600'; - $('#wb-tab-' + canvas.wbId).append(vid); - new fabric.Image.fromURL(_o._poster, function(poster) { - new fabric.Image(vid[0], {}, function (video) { - let rad = 20; - video.visible = false; - poster.width = video.width; - poster.height = video.height; - let group = new fabric.Group([video, poster], { - left: 10 - , top: 10 - , subTargetCheck: true - , width: video.width - , height: video.height - , objectCaching: false - , uid: _o.uid - , fileId: _o.fileId - , fileType: _o.fileType - , slide: canvas.slide - }); - let paused = true; - let trg = new fabric.Triangle({ - left: group.left + 2.7 * rad - , top: group.top + group.height - 2.5 * rad - , visible: paused - , angle: 90 - , width: rad - , height: rad - , stroke: mainColor - , fill: mainColor - }); - let rectPause1 = new fabric.Rect({ - left: group.left + 1.6 * rad - , top: group.top + group.height - 2.5 * rad - , visible: !paused - , width: rad / 3 - , height: rad - , stroke: mainColor - , fill: mainColor - }); - let rectPause2 = new fabric.Rect({ - left: group.left + 2.1 * rad - , top: group.top + group.height - 2.5 * rad - , visible: !paused - , width: rad / 3 - , height: rad - , stroke: mainColor - , fill: mainColor - }); - let play = new fabric.Group([ - new fabric.Circle({ - left: group.left + rad - , top: group.top + group.height - 3 * rad - , radius: rad - , stroke: mainColor - , strokeWidth: 2 - , fill: null - }) - , trg, rectPause1, rectPause2] - , { - objectCaching: false - }); - - let cProgress = new fabric.Rect({ - left: group.left + 3.5 * rad - , top: group.top + group.height - 1.5 * rad - , visible: !paused - , width: video.width - 5 * rad - , height: rad / 2 - , stroke: mainColor - , fill: null - , rx: 5 - , ry: 5 - }); - let progress = new fabric.Rect({ - left: group.left + 3.5 * rad - , top: group.top + group.height - 1.5 * rad - , visible: !paused - , width: 0 - , height: rad / 2 - , stroke: mainColor - , fill: mainColor - , rx: 5 - , ry: 5 - }); - let request; - let render = function () { - progress.set('width', (vid[0].currentTime * cProgress.width) / vid[0].duration); - canvas.renderAll(); - if (paused) { - cancelAnimationFrame(request); - } else { - request = fabric.util.requestAnimFrame(render); - } - }; - play.on({ - /* - * https://github.com/kangax/fabric.js/issues/4115 - * - 'mouseover': function() { - circle1.set({strokeWidth: 4}); - canvas.renderAll(); - } - , 'mouseout': function() { - circle1.set({ - left: pos.left - , top: pos.top - , strokeWidth: 2 - }); - canvas.renderAll(); - } - , */'mousedown': function () { - play.set({ - left: pos.left + 3 - , top: pos.top + 3 - }); - canvas.renderAll(); - } - , 'mouseup': function () { - play.set({ - left: pos.left - , top: pos.top - }); - if (paused) { - video.visible = true; - poster.visible = false; - progress.visible = true; - cProgress.visible = true; - video.getElement().play(); - fabric.util.requestAnimFrame(render); - } else { - vid[0].pause(); - } - paused = !paused; - trg.visible = paused; - rectPause1.visible = !paused; - rectPause2.visible = !paused; - canvas.renderAll(); - } - }); - - group.addWithUpdate(play); - group.addWithUpdate(progress); - group.addWithUpdate(cProgress); - group.selectable = canvas.selection; - - canvas.add(group); - canvas.renderAll(); - - let pos = {left: play.left, top: play.top}; - }); - }); - //console.log(vImg.toJSON(['uid', 'fileId', 'fileType'])); - } + //no-op break; case 'Presentation': { @@ -1034,7 +1045,13 @@ var Wb = function() { }; function toOmJson(o) { - return o.toJSON(extraProps); + let r = o.toJSON(extraProps); + if (o.omType === 'Video') { + r.type = 'video'; + delete r.objects; + return r; + } + return r; } //events function wbObjCreatedHandler(o) { @@ -1075,7 +1092,7 @@ var Wb = function() { o.includeDefaultValues = false; var items = []; - if ("group" === o.type && o.fileType !== 'Video' && o.fileType !== 'Recording') { + if ("group" === o.type && o.omType !== 'Video') { o.clone(function(_o) { // ungrouping _o.includeDefaultValues = false; @@ -1284,24 +1301,21 @@ var Wb = function() { _setSize(); } }; - wb.load = function(arr) { - _createObject(arr, _createHandler); - }; wb.setSlide = function(_sl) { slide = _sl; showCurrentSlide(); }; - wb.createObj = function(o) { - var arr = []; - if (!Array.isArray(o)) { - if ('pointer' === o.type) { - APointer().create(canvases[o.slide], o); - return; - } + wb.createObj = function(obj) { + let arr = [], _arr = Array.isArray(obj) ? obj : [obj]; + for (let i = 0; i < _arr.length; ++i) { + let o = _arr[i]; switch(o.type) { case 'pointer': APointer().create(canvases[o.slide], o); break; + case 'video': + Player.create(canvases[o.slide], o); + break; default: var __o = _findObject(o); if (!__o) { @@ -1309,21 +1323,35 @@ var Wb = function() { } break; } - } else { - arr = o; } if (arr.length > 0) { _createObject(arr, _createHandler); } }; - wb.modifyObj = function(o) { //TODO need to be unified - switch(o.type) { - case 'pointer': - _modifyHandler(APointer().create(canvases[o.slide], o)) - break; - default: - _createObject(o, _modifyHandler); - break; + wb.load = wb.createObj; + wb.modifyObj = function(obj) { //TODO need to be unified + let arr = [], _arr = Array.isArray(obj) ? obj : [obj]; + for (let i = 0; i < _arr.length; ++i) { + let o = _arr[i]; + switch(o.type) { + case 'pointer': + _modifyHandler(APointer().create(canvases[o.slide], o)) + break; + case 'video': + { + let g = _findObject(o); + if (!!g) { + Player.modify(g, o); + } + } + break; + default: + arr.push(o); + break; + } + } + if (arr.length > 0) { + _createObject(arr, _modifyHandler); } }; wb.removeObj = function(arr) {