Author: solomax
Date: Fri Mar 31 18:17:02 2017
New Revision: 1789719

URL: http://svn.apache.org/viewvc?rev=1789719&view=rev
Log:
[OPENMEETINGS-551] presentation drop is implemented, other types broken

Modified:
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.html
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js
    openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.html
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.html?rev=1789719&r1=1789718&r2=1789719&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.html
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.html
 Fri Mar 31 18:17:02 2017
@@ -50,7 +50,9 @@
                </div>
                
                <div id="wb-area">
-                       <div class="canvases"></div>
+                       <div class="scroll-container">
+                               <div class="canvases"></div>
+                       </div>
                        <div class="tools ui-state-active vertical clear" 
style="position: absolute; top: 20px; right: 0px;">
                                <div class="bumper"></div>
                                <div wicket:message="title:72" 
class="ui-widget-header clickable om-icon big pointer"></div>

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java?rev=1789719&r1=1789718&r2=1789719&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
 Fri Mar 31 18:17:02 2017
@@ -302,6 +302,11 @@ public class WbPanel extends Panel {
                                file.put("_src", urlFor(ref, pp));
                                file.put("_poster", urlFor(new 
JpgRecordingResourceReference(), pp));
                                break;
+                       case Presentation:
+                               ref = new RoomResourceReference();
+                               file.put("_src", urlFor(ref, pp));
+                               file.put("deleted", !fi.exists());
+                               break;
                        default:
                                ref = new RoomResourceReference();
                                file.put("src", urlFor(ref, pp));

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js?rev=1789719&r1=1789718&r2=1789719&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js
 Fri Mar 31 18:17:02 2017
@@ -44,6 +44,7 @@ var Base = function() {
        var base = {};
        base.objectCreated = function(o, canvas) {
                o.uid = UUID.generate();
+               o.slide = canvas.slide;
                canvas.trigger("wb:object:created", o);
                return o.uid;
        }
@@ -481,7 +482,7 @@ var Clipart = function(wb, btn) {
 }
 var Wb = function() {
        const ACTIVE = 'active';
-       var wb = {id: -1}, a, t, s, canvases = [], mode, slide = 0;
+       var wb = {id: -1}, a, t, s, canvases = [], mode, slide = 0, resizable = 
true;
 
        function getBtn(m) {
                return t.find(".om-icon." + (m || mode));
@@ -624,9 +625,90 @@ var Wb = function() {
                        }
                });
        }
+       function _findObject(o) {
+               var _o = {};
+               canvases[o.slide].forEachObject(function(__o) {
+                       if (!!__o && o.uid === __o.uid) {
+                               _o = __o;
+                               return false;
+                       }
+               });
+               return _o;
+       }
+       function _removeHandler(o) {
+               var __o = _findObject(o);
+               if (!!__o) {
+                       canvases[o.slide].remove(__o);
+               }
+       }
+       function _modifyHandler(_o) {
+               _removeHandler(_o);
+               canvases[_o.slide].add(_o);
+       }
+       function _createHandler(_o) {
+               switch (_o.fileType) {
+                       case 'Video':
+                       case 'Recording':
+                       {
+                               var vid = $('<video>').hide().attr('id', 
'video-' + _o.uid).attr('poster', _o._poster + '&preview=true')
+                                       .attr("width", _o.width).attr("height", 
_o.height)
+                                       .append($('<source>').attr('type', 
'video/mp4').attr('src', _o._src))
+                               $('#wb-tab-' + canvas.wbId).append(vid);
+                               var vImg = new fabric.Image(vid[0], {
+                                       left: _o.left
+                                       , top: _o.top
+                               });
+                               canvases[_o.slide].add(vImg);
+                               //console.log(vImg.toJSON(['uid', 'fileId', 
'fileType']));
+                       }
+                               break;
+                       case 'Presentation':
+                       {
+                               if (resizable && !_o.deleted) {
+                                       resizable = false;
+                               }
+                               var count = _o.deleted ? 1 : _o.count;
+                               for (var i = 0; i < count; ++i) {
+                                       if (canvases.length < i + 1) {
+                                               addCanvas();
+                                       }
+                                       var canvas = canvases[i];
+                                       /*
+                                        * TODO block resizing
+                                       */
+                                       canvas.setBackgroundImage(_o._src + 
"&slide=" + i, canvas.renderAll.bind(canvas), {
+                                               /*backgroundImageOpacity: 0.5
+                                               , */backgroundImageStretch: 
false
+                                       }).setWidth(Math.max(canvas.width, 
_o.width)).setHeight(Math.max(canvas.height, _o.height));
+                               }
+                       }
+                               break;
+                       default:
+                               canvases[_o.slide].add(_o);
+                               break;
+               }
+       }
+       function _createObject(arr, handler) {
+               fabric.util.enlivenObjects(arr, function(objects) {
+                       wb.eachCanvas(function(canvas) {
+                               canvas.renderOnAddRemove = false;
+                       });
+
+                       for (var i = 0; i < objects.length; ++i) {
+                               var _o = objects[i];
+                               _o.loaded = true;
+                               handler(_o);
+                       }
+
+                       wb.eachCanvas(function(canvas) {
+                               canvas.renderOnAddRemove = true;
+                               canvas.renderAll();
+                       });
+               });
+       };
 
        function toOmJson(o) {
-               return o.toJSON(['uid', 'fileId', 'fileType', 'count']);
+               return o.toJSON(['uid', 'fileId', 'fileType', 'count', 
'slide']);
        }
        //events
        function wbObjCreatedHandler(o) {
@@ -651,6 +733,7 @@ var Wb = function() {
                switch(o.type) {
                        case 'i-text':
                                o.uid = UUID.generate();
+                               o.slide = this.slide;
                                wbObjCreatedHandler(o);
                                break;
                }
@@ -672,6 +755,7 @@ var Wb = function() {
        }
        function pathCreatedHandler(o) {
                o.path.uid = UUID.generate();
+               o.path.slide = this.slide;
                wbObjCreatedHandler(o.path);
        };
        /*TODO interactive text chage
@@ -684,11 +768,12 @@ var Wb = function() {
                console.log('Text Changed', obj);
        };*/
        function addCanvas() {
-               var c = $('<canvas></canvas>').attr('id', 'can-' + 
a.attr('id'));
+               var slide = canvases.length;
+               var c = $('<canvas></canvas>').attr('id', 'can-' + a.attr('id') 
+ '-slide-' + slide);
                a.find('.canvases').append(c);
                var canvas = new fabric.Canvas(c.attr('id'));
                canvas.wbId = wb.id;
-               canvas.slide = canvases.length;
+               canvas.slide = slide;
                //TODO create via WS canvas:cleared
                canvas.on({
                        'object:added': objAddedHandler
@@ -717,9 +802,58 @@ var Wb = function() {
                                , collision: "fit"
                        });
                }
-               wb.eachCanvas(function(canvas) {
-                       canvas.setWidth(w).setHeight(h);
-               });
+               if (resizable) {
+                       //TODO FIXME need to be checked
+                       wb.eachCanvas(function(canvas) {
+                               canvas.setWidth(w).setHeight(h);
+                       });
+               }
+       };
+       wb.load = function(arr) {
+               _createObject(arr, _createHandler);
+       };
+       wb.createObj = function(o) {
+               switch(o.type) {
+                       case 'pointer':
+                               APointer().create(canvases[o.slide], o);
+                               break;
+                       default:
+                               _createObject([o], _createHandler);
+                               /*
+                                * https://jsfiddle.net/l2aelba/kro7h6rv/2/
+                               if ('Video' === o.fileType || 'Recording' === 
o.fileType) {
+                                       fabric.util.requestAnimFrame(function 
render() {
+                                               canvas.renderAll();
+                                               
fabric.util.requestAnimFrame(render);
+                                       });
+                               }
+                               */
+                               break;
+               }
+       };
+       wb.modifyObj = function(o) { //TODO need to be unified
+               switch(o.type) {
+                       case 'pointer':
+                               
_modifyHandler(APointer().create(canvases[o.slide], o))
+                               break;
+                       default:
+                               var arr = [o];
+                               if (!!o.objects) {
+                                       arr = o.objects;
+                                       for (var i = 0; i < arr.length; ++i) {
+                                               var _o = arr[i];
+                                               _o.left += o.left;
+                                               _o.top += o.top;
+                                       }
+                               }
+                               _createObject(o.objects || [o], _modifyHandler);
+                               break;
+               }
+       };
+       wb.removeObj = function(arr) {
+               for (var i = 0; i < arr.length; ++i) {
+                       _removeHandler(arr[i]);
+               }
        };
        wb.getCanvas = function() {
                return canvases[slide];
@@ -752,20 +886,28 @@ var WbArea = (function() {
                        case 8:  // backspace
                        case 46: // delete
                                {
-                                       var wb = getActive();
-                                       var canvas = wb.data('getCanvas')();
+                                       var wb = getActive().data();
+                                       var canvas = wb.getCanvas();
                                        if (!!canvas) {
                                                var arr = [];
                                                if (canvas.getActiveGroup()) {
-                                                       
canvas.getActiveGroup().forEachObject(function(o){ arr.push(o.uid); });
+                                                       
canvas.getActiveGroup().forEachObject(function(o){
+                                                               arr.push({
+                                                                       uid: 
o.uid
+                                                                       , 
slide: o.slide
+                                                               });
+                                                       });
                                                } else {
                                                        var obj = 
canvas.getActiveObject();
                                                        if (!!obj) {
-                                                               
arr.push(obj.uid);
+                                                               arr.push({
+                                                                       uid: 
o.uid
+                                                                       , 
slide: o.slide
+                                                               });
                                                        }
                                                }
                                                wbAction('deleteObj', 
JSON.stringify({
-                                                       wbId: wb.data('id')()
+                                                       wbId: wb.id
                                                        , obj: arr
                                                }));
                                                return false;
@@ -774,64 +916,6 @@ var WbArea = (function() {
                                break;
                }
        }
-       function _removeHandler(canvas, _uid) {
-               var __o = _findObject(canvas, _uid);
-               if (!!__o) {
-                       canvas.remove(__o);
-               }
-       }
-       function _modifyHandler(canvas, _o) {
-               _removeHandler(canvas, _o.uid);
-               canvas.add(_o);
-       }
-       function _createHandler(canvas, _o) {
-               switch (_o.fileType) {
-                       case 'Video':
-                       case 'Recording':
-                       {
-                               var vid = $('<video>').hide().attr('id', 
'video-' + _o.uid).attr('poster', _o._poster + '&preview=true')
-                                       .attr("width", _o.width).attr("height", 
_o.height)
-                                       .append($('<source>').attr('type', 
'video/mp4').attr('src', _o._src))
-                               $('#wb-tab-' + canvas.wbId).append(vid);
-                               var vImg = new fabric.Image(vid[0], {
-                                       left: _o.left
-                                       , top: _o.top
-                               });
-                               canvas.add(vImg);
-                               //console.log(vImg.toJSON(['uid', 'fileId', 
'fileType']));
-                       }
-                               break;
-                       case 'Presentation':
-                       default:
-                               canvas.add(_o);
-                               break;
-               }
-       }
-       function _findObject(canvas, uid) {
-               var _o = {};
-               canvas.forEachObject(function(__o) {
-                       if (!!__o && uid === __o.uid) {
-                               _o = __o;
-                               return false;
-                       }
-               });
-               return _o;
-       }
-       function _createObject(canvas, arr, handler) {
-               fabric.util.enlivenObjects(arr, function(objects) {
-                       var origRenderOnAddRemove = canvas.renderOnAddRemove;
-                       canvas.renderOnAddRemove = false;
-
-                       for (var i = 0; i < objects.length; ++i) {
-                               var _o = objects[i];
-                               _o.loaded = true;
-                               handler(canvas, _o);
-                       }
-
-                       canvas.renderOnAddRemove = origRenderOnAddRemove;
-                       canvas.renderAll();
-               });
-       }
        function _activateTab(wbId) {
                container.find('.wb-tabbar li').each(function(idx) {
                        if (wbId == 1 * $(this).data('wb-id')) {
@@ -844,11 +928,11 @@ var WbArea = (function() {
        self.getWbTabId = function(id) {
                return "wb-tab-" + id;
        };
-       self.getCanvas = function(id) {
-               return $('#' + self.getWbTabId(id)).data('getCanvas')();
+       self.getWb = function(id) {
+               return $('#' + self.getWbTabId(id)).data();
        };
-       self.eachCanvas = function(id, func) {
-               return $('#' + self.getWbTabId(id)).data('eachCanvas')(func);
+       self.getCanvas = function(id) {
+               return self.getWb(id).getCanvas();
        };
        self.init = function() {
                container = $(".room.wb.area");
@@ -892,7 +976,9 @@ var WbArea = (function() {
                tabs.append(wb);
                refreshTabs();
        
-               wb.data(Wb()).data('init')(obj.id, tid);
+               var wbo = Wb();
+               wb.data(wbo);
+               wbo.init(obj.id, tid);
        }
        self.add = function(obj) {
                self.create(obj);
@@ -902,55 +988,16 @@ var WbArea = (function() {
                _activateTab(obj.id);
        }
        self.load = function(json) {
-               _createObject(self.getCanvas(json.wbId), json.obj, 
_createHandler);
+               self.getWb(json.wbId).load(json.obj);
        };
-       self.createObj = function(json) { //TODO need to be unified
-               var canvas = self.getCanvas(json.wbId);
-               var o = json.obj;
-               switch(o.type) {
-                       case 'pointer':
-                               APointer().create(canvas, o);
-                               break;
-                       default:
-                               _createObject(canvas, [o], _createHandler);
-                               /*
-                                * https://jsfiddle.net/l2aelba/kro7h6rv/2/
-                               if ('Video' === o.fileType || 'Recording' === 
o.fileType) {
-                                       fabric.util.requestAnimFrame(function 
render() {
-                                               canvas.renderAll();
-                                               
fabric.util.requestAnimFrame(render);
-                                       });
-                               }
-                               */
-                               break;
-               }
+       self.createObj = function(json) {
+               self.getWb(json.wbId).createObj(json.obj);
        };
-       self.modifyObj = function(json) { //TODO need to be unified
-               var canvas = self.getCanvas(json.wbId);
-               var o = json.obj;
-               switch(o.type) {
-                       case 'pointer':
-                               _modifyHandler(canvas, 
APointer().create(canvas, o))
-                               break;
-                       default:
-                               var arr = [o];
-                               if (!!o.objects) {
-                                       arr = o.objects;
-                                       for (var i = 0; i < arr.length; ++i) {
-                                               var _o = arr[i];
-                                               _o.left += o.left;
-                                               _o.top += o.top;
-                                       }
-                               }
-                               _createObject(canvas, o.objects || [o], 
_modifyHandler);
-                               break;
-               }
+       self.modifyObj = function(json) {
+               self.getWb(json.wbId).modifyObj(json.obj);
        };
        self.removeObj = function(json) {
-               var canvas = self.getCanvas(json.wbId);
-               for (var i = 0; i < json.obj.length; ++i) {
-                       _removeHandler(canvas, json.obj[i]);
-               }
+               self.getWb(json.wbId).removeObj(json.obj);
        };
        self.remove = function(obj) {
                var tabId = self.getWbTabId(obj.id);
@@ -970,8 +1017,9 @@ var WbArea = (function() {
                var wbah = hh - 5 - wbTabs.find("ul.ui-tabs-nav").height();
                tabPanels.height(wbah);
                tabPanels.each(function(idx) {
-                       $(this).data('resize')(w, wbah);
+                       $(this).data('resize')(w - 20, wbah);
                });
+               wbTabs.find(".ui-tabs-panel .scroll-container").height(wbah);
        }
        return self;
 })();

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css?rev=1789719&r1=1789718&r2=1789719&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css 
(original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css 
Fri Mar 31 18:17:02 2017
@@ -501,4 +501,12 @@
        height: 20px;
        padding: 0;
 }
-
+.wb-area .ui-tabs-panel .scroll-container {
+       overflow: auto;
+}
+.wb-area .ui-tabs-panel .scroll-container .canvas-container {
+       margin-top: 5px;
+       margin-left: 5px;
+       border: 1px solid #888888;
+       box-shadow: 5px 5px 5px #888888;
+}


Reply via email to