[OPENMEETINGS-551] slide change is implemented
Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/6b542f39 Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/6b542f39 Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/6b542f39 Branch: refs/heads/master Commit: 6b542f39c72aad7cade469878d0a7e8dd50c3438 Parents: f5476aa Author: Maxim Solodovnik <[email protected]> Authored: Sat Apr 1 11:19:21 2017 +0000 Committer: Maxim Solodovnik <[email protected]> Committed: Sat Apr 1 11:19:21 2017 +0000 ---------------------------------------------------------------------- .../openmeetings/db/dto/room/Whiteboard.java | 9 +++ .../openmeetings/web/room/wb/WbPanel.java | 13 ++-- .../apache/openmeetings/web/room/wb/fabric.js | 1 + .../org/apache/openmeetings/web/room/wb/wb.js | 73 +++++++++++++------- 4 files changed, 68 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/openmeetings/blob/6b542f39/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/Whiteboard.java ---------------------------------------------------------------------- diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/Whiteboard.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/Whiteboard.java index 1b3acab..3f16125 100644 --- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/Whiteboard.java +++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/Whiteboard.java @@ -40,6 +40,7 @@ public class Whiteboard { private Boolean fullFit = true; private Map<String, JSONObject> roomItems = new ConcurrentHashMap<>(); private Date created = new Date(); + private int slide = 0; private int zIndex = 1; private String name; @@ -130,4 +131,12 @@ public class Whiteboard { public void setName(String name) { this.name = name; } + + public int getSlide() { + return slide; + } + + public void setSlide(int slide) { + this.slide = slide; + } } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/6b542f39/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java index a292000..2375130 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java @@ -83,6 +83,7 @@ public class WbPanel extends Panel { createWb , removeWb , activeWb + , setSlide , createObj , modifyObj , deleteObj @@ -135,6 +136,13 @@ public class WbPanel extends Panel { } } break; + case setSlide: + { + Whiteboard wb = getBean(WhiteboardCache.class).get(roomId).get(obj.getLong("wbId")); + wb.setSlide(obj.optInt("slide", 0)); + sendWbOthers(String.format("WbArea.%s", a.name()), obj); + } + break; case createObj: { Whiteboard wb = getBean(WhiteboardCache.class).get(roomId).get(obj.getLong("wbId")); @@ -362,11 +370,8 @@ public class WbPanel extends Panel { .put("top", UPLOAD_WB_TOP) .put("width", fi.getWidth() == null ? DEFAULT_WIDTH : fi.getWidth()) .put("height", fi.getHeight() == null ? DEFAULT_HEIGHT : fi.getHeight()) - //,"angle":32.86 - //,"crossOrigin":"" .put("uid", wuid) - //,"filters":[] - //,"resizeFilters":[] + .put("slide", wb.getSlide()) ; wb.put(wuid, file); final String ruid = wbs.getUid(); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/6b542f39/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/fabric.js ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/fabric.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/fabric.js index a07bc79..f875a24 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/fabric.js +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/fabric.js @@ -1,5 +1,6 @@ /* build: `node build.js modules=ALL exclude=json,gestures minifier=uglifyjs` */ /*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */ +/* version 1.7.8 */ /* Licensed MIT https://github.com/kangax/fabric.js/blob/master/LICENSE */ var fabric = fabric || { version: "1.7.8" }; if (typeof exports !== 'undefined') { http://git-wip-us.apache.org/repos/asf/openmeetings/blob/6b542f39/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 4952f58..57f6943 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 @@ -482,7 +482,9 @@ var Clipart = function(wb, btn) { } var Wb = function() { const ACTIVE = 'active'; - var wb = {id: -1}, a, t, s, canvases = [], mode, slide = 0, resizable = true; + const BUMPER = 100; + var wb = {id: -1}, a, t, s, canvases = [], mode, slide = 0, width = 0, height = 0 + , minWidth = 0, minHeight = 0; function getBtn(m) { return t.find(".om-icon." + (m || mode)); @@ -664,22 +666,18 @@ var Wb = function() { break; case 'Presentation': { - if (resizable && !_o.deleted) { - resizable = false; - } + minWidth = Math.max(minWidth, _o.width); + minHeight = Math.max(minHeight, _o.height); + width = Math.max(minWidth, width); + height = Math.max(minHeight, height); 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)); + canvas.setBackgroundImage(_o._src + "&slide=" + i, canvas.renderAll.bind(canvas), {}) + .setWidth(width).setHeight(height); } } break; @@ -792,6 +790,21 @@ var Wb = function() { t = a.find('.tools'), s = a.find(".wb-settings"); addCanvas(); internalInit(t); + a.find('.scroll-container').on('scroll', function(e) { + $(this).find('.canvas-container').each(function(idx) { + var h = $(this).height(), pos = $(this).position(); + if (slide != idx &&pos.top > BUMPER - h && pos.top < BUMPER) { + //TODO FIXME might be done without iterating + //console.log("Found:", idx); + slide = idx; + wbAction('setSlide', JSON.stringify({ + wbId: wb.id + , slide: idx + })); + return false; + } + }); + }); }; wb.resize = function(w, h) { if (t.position().left + t.width() > a.width()) { @@ -802,16 +815,19 @@ var Wb = function() { , collision: "fit" }); } - if (resizable) { - //TODO FIXME need to be checked - wb.eachCanvas(function(canvas) { - canvas.setWidth(w).setHeight(h); - }); - } + width = Math.max(minWidth, w); + height = Math.max(minHeight, h); + wb.eachCanvas(function(canvas) { + canvas.setWidth(width).setHeight(height); + }); }; wb.load = function(arr) { _createObject(arr, _createHandler); }; + wb.setSlide = function(_sl) { + slide = _sl; + a.find('.scroll-container .canvas-container')[slide].scrollIntoView(); + }; wb.createObj = function(o) { switch(o.type) { case 'pointer': @@ -925,6 +941,17 @@ var WbArea = (function() { } }); } + function _resizeWbs() { + var w = area.width(), hh = area.height(); + var wbTabs = area.find(".tabs.ui-tabs"); + var tabPanels = wbTabs.find(".ui-tabs-panel"); + var wbah = hh - 5 - wbTabs.find("ul.ui-tabs-nav").height(); + tabPanels.height(wbah); + tabPanels.each(function(idx) { + $(this).data().resize(w - 25, wbah - 20); + }); + wbTabs.find(".ui-tabs-panel .scroll-container").height(wbah); + } self.getWbTabId = function(id) { return "wb-tab-" + id; }; @@ -979,6 +1006,7 @@ var WbArea = (function() { var wbo = Wb(); wb.data(wbo); wbo.init(obj.id, tid); + _resizeWbs(); } self.add = function(obj) { self.create(obj); @@ -990,6 +1018,9 @@ var WbArea = (function() { self.load = function(json) { self.getWb(json.wbId).load(json.obj); }; + self.setSlide = function(json) { + self.getWb(json.wbId).setSlide(json.slide); + }; self.createObj = function(json) { self.getWb(json.wbId).createObj(json.obj); }; @@ -1013,13 +1044,7 @@ var WbArea = (function() { var wbTabs = area.find(".tabs.ui-tabs"); wbTabs.height(hh); - var tabPanels = wbTabs.find(".ui-tabs-panel"); - var wbah = hh - 5 - wbTabs.find("ul.ui-tabs-nav").height(); - tabPanels.height(wbah); - tabPanels.each(function(idx) { - $(this).data('resize')(w - 20, wbah); - }); - wbTabs.find(".ui-tabs-panel .scroll-container").height(wbah); + _resizeWbs(); } return self; })();
