diff --git a/bbb-api-demo/src/main/webapp/demo_footer.jsp b/bbb-api-demo/src/main/webapp/demo_footer.jsp index d1280771e63cc0b823d322168dc03f0586d1de8a..385c56fad8063ac5d5628054b4ac900d48cc2333 100755 --- a/bbb-api-demo/src/main/webapp/demo_footer.jsp +++ b/bbb-api-demo/src/main/webapp/demo_footer.jsp @@ -1,2 +1,2 @@ <p/> -<small>These API demos use the <a href="http://code.google.com/p/bigbluebutton/wiki/081API">BigBlueButton API</a>. The source code for these demos is available <a href="https://github.com/bigbluebutton/bigbluebutton/tree/master/bbb-api-demo/src/main/webapp/"> here</a>.</small> +<small>These API demos use the <a href="http://docs.bigbluebutton.org/dev/api.html">BigBlueButton API</a>. The source code for these demos is available <a href="https://github.com/bigbluebutton/bigbluebutton/tree/master/bbb-api-demo/src/main/webapp/"> here</a>.</small> diff --git a/bbb-fsesl-client/src/main/java/org/freeswitch/esl/client/internal/debug/ChannelEventRunnable.java b/bbb-fsesl-client/src/main/java/org/freeswitch/esl/client/internal/debug/ChannelEventRunnable.java index 685772cad253d637f98f8e57cc467fedf2eb1226..048d735dc5f88a8d217d374d5b7febd357c529e1 100644 --- a/bbb-fsesl-client/src/main/java/org/freeswitch/esl/client/internal/debug/ChannelEventRunnable.java +++ b/bbb-fsesl-client/src/main/java/org/freeswitch/esl/client/internal/debug/ChannelEventRunnable.java @@ -32,7 +32,7 @@ import org.slf4j.LoggerFactory; * @author The Netty Project (netty-dev@lists.jboss.org) * @author Trustin Lee (tlee@redhat.com) * - * @version $Rev: 1685 $, $Date: 2009-08-28 16:15:49 +0900 (금, 28 8 2009) $ + * @version $Rev: 1685 $, $Date: 2009-08-28 16:15:49 +0900 $ * */ public class ChannelEventRunnable implements Runnable, EstimatableObjectWrapper { diff --git a/bbb-fsesl-client/src/main/java/org/freeswitch/esl/client/internal/debug/ExecutionHandler.java b/bbb-fsesl-client/src/main/java/org/freeswitch/esl/client/internal/debug/ExecutionHandler.java index 91bae346605829553ead80477e2b001460c9439d..5a24fa86128f55370f858c77b777be44f2968f1f 100644 --- a/bbb-fsesl-client/src/main/java/org/freeswitch/esl/client/internal/debug/ExecutionHandler.java +++ b/bbb-fsesl-client/src/main/java/org/freeswitch/esl/client/internal/debug/ExecutionHandler.java @@ -54,7 +54,7 @@ import org.jboss.netty.util.internal.ExecutorUtil; * @author The Netty Project (netty-dev@lists.jboss.org) * @author Trustin Lee (tlee@redhat.com) * - * @version $Rev: 1685 $, $Date: 2009-08-28 16:15:49 +0900 (금, 28 8 2009) $ + * @version $Rev: 1685 $, $Date: 2009-08-28 16:15:49 +0900 $ * * @apiviz.landmark * @apiviz.has java.util.concurrent.ThreadPoolExecutor diff --git a/bigbluebutton-client/locale/en_US/bbbResources.properties b/bigbluebutton-client/locale/en_US/bbbResources.properties index 45d834f68b25a3f9f8b40b72a29a129df3bbd2e9..60c604a87aba24e3742d8e717454e651cf62826a 100755 --- a/bigbluebutton-client/locale/en_US/bbbResources.properties +++ b/bigbluebutton-client/locale/en_US/bbbResources.properties @@ -174,13 +174,16 @@ bbb.users.usersGrid.mediaItemRenderer.micOff = Microphone off bbb.users.usersGrid.mediaItemRenderer.micOn = Microphone on bbb.users.usersGrid.mediaItemRenderer.noAudio = Not in audio conference bbb.users.emojiStatus.clear = Clear -bbb.users.emojiStatus.raiseHand = Raise hand -bbb.users.emojiStatus.happy = Happy -bbb.users.emojiStatus.smile = Smile -bbb.users.emojiStatus.sad = Sad -bbb.users.emojiStatus.confused = Confused -bbb.users.emojiStatus.neutral = Neutral -bbb.users.emojiStatus.away = Away +bbb.users.emojiStatus.clear.toolTip = Clear status +bbb.users.emojiStatus.close = Close +bbb.users.emojiStatus.close.toolTip = Close status popup +bbb.users.emojiStatus.raiseHand = Raise hand status +bbb.users.emojiStatus.happy = Happy status +bbb.users.emojiStatus.smile = Smile status +bbb.users.emojiStatus.sad = Sad status +bbb.users.emojiStatus.confused = Confused status +bbb.users.emojiStatus.neutral = Neutral status +bbb.users.emojiStatus.away = Away status bbb.presentation.title = Presentation bbb.presentation.titleWithPres = Presentation: {0} bbb.presentation.quickLink.label = Presentation Window diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/EmojiGrid.as b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/EmojiGrid.as old mode 100644 new mode 100755 index 2f91892df4afc640aa1e174608bedf0e9970227b..cf422927c6f314be061a989b990b003663d82d03 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/EmojiGrid.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/EmojiGrid.as @@ -46,10 +46,8 @@ package org.bigbluebutton.modules.users.views { this.verticalScrollPolicy = ScrollPolicy.OFF; width = 134; drawEmoji(); - if (UserManager.getInstance().getConference().myEmojiStatus != "none") { - addRemoveEmoji(); - this.setStyle("paddingBottom", 10); - } + addRemoveEmoji(); + this.setStyle("paddingBottom", 10); } private function drawEmoji():void { @@ -77,9 +75,16 @@ package org.bigbluebutton.modules.users.views { private function addRemoveEmoji():void { var button:Button = new Button(); button.id = "btnnone"; - button.height = 64; button.height = 24; - button.label = ResourceUtil.getInstance().getString('bbb.users.emojiStatus.clear'); + if (UserManager.getInstance().getConference().myEmojiStatus != "none") { + button.label = ResourceUtil.getInstance().getString('bbb.users.emojiStatus.clear'); + button.toolTip = ResourceUtil.getInstance().getString('bbb.users.emojiStatus.clear.toolTip'); + button.accessibilityName = ResourceUtil.getInstance().getString('bbb.users.emojiStatus.clear.toolTip'); + } else { + button.label = ResourceUtil.getInstance().getString('bbb.users.emojiStatus.close'); + button.toolTip = ResourceUtil.getInstance().getString('bbb.users.emojiStatus.close.toolTip'); + button.accessibilityName = ResourceUtil.getInstance().getString('bbb.users.emojiStatus.close.toolTip'); + } button.addEventListener(MouseEvent.CLICK, buttonMouseEventHandler); this.addChild(button); } diff --git a/bigbluebutton-html5/app/client/globals.js b/bigbluebutton-html5/app/client/globals.js index 7fbb37c967a4143b91013d10f81dafad0b6ed4ab..54e5c98fdd256355997c70cc23a7b6e06905249a 100755 --- a/bigbluebutton-html5/app/client/globals.js +++ b/bigbluebutton-html5/app/client/globals.js @@ -80,7 +80,7 @@ Handlebars.registerHelper("getCurrentMeeting", () => { Handlebars.registerHelper("getCurrentSlide", () => { let result; - result = BBB.getCurrentSlide("helper getCurrentSlide"); + result = BBB.getCurrentSlide(); // console.log "result=#{JSON.stringify result}" return result; }); @@ -96,7 +96,7 @@ Handlebars.registerHelper("getMeetingName", () => { Handlebars.registerHelper("getShapesForSlide", () => { let currentSlide, ref; - currentSlide = BBB.getCurrentSlide("helper getShapesForSlide"); + currentSlide = BBB.getCurrentSlide(); // try to reuse the lines above return Meteor.Shapes.find({ diff --git a/bigbluebutton-html5/app/client/lib/bbb_api_bridge.js b/bigbluebutton-html5/app/client/lib/bbb_api_bridge.js index 5198f62159bcab49f6986fc81fc2fceb27cfed14..53fce8cb9158c25b29e8a6dfae39981427b80161 100755 --- a/bigbluebutton-html5/app/client/lib/bbb_api_bridge.js +++ b/bigbluebutton-html5/app/client/lib/bbb_api_bridge.js @@ -152,7 +152,7 @@ this.BBB = (function() { return lockedMicForRoom && BBB.amILocked(); }; - BBB.getCurrentSlide = function(callingLocaton) { + BBB.getCurrentSlide = function() { let currentPresentation, currentSlide, presentationId, ref; currentPresentation = Meteor.Presentations.findOne({ "presentation.current": true @@ -162,7 +162,6 @@ this.BBB = (function() { "presentationId": presentationId, "slide.current": true }); - // console.log "trigger:#{callingLocaton} currentSlideId=#{currentSlide?._id}" return currentSlide; }; BBB.getMeetingName = function() { diff --git a/bigbluebutton-html5/app/client/main.js b/bigbluebutton-html5/app/client/main.js index 481acd0e614efcbaeb218ff85d0aaf28ad3e6189..ea419e1240ac777ea6d3762f131cdbc343e76304 100755 --- a/bigbluebutton-html5/app/client/main.js +++ b/bigbluebutton-html5/app/client/main.js @@ -5,7 +5,6 @@ loadLib = function(libname) { let retryMessageCallback, successCallback; successCallback = function() {}; retryMessageCallback = function(param) { - //return(Meteor.log.info("Failed to load library"), param); return console.log("Failed to load library", param); }; return Meteor.Loader.loadJs(`${window.location.origin}/client/lib/${libname}`, successCallback, 10000).fail(retryMessageCallback); diff --git a/bigbluebutton-html5/app/client/views/whiteboard/slide.js b/bigbluebutton-html5/app/client/views/whiteboard/slide.js index 7cae9337931691d20d2a8d9452deeb95c57f2578..c86f1793bd874e98ed2fde62d6eeba09401dc28d 100755 --- a/bigbluebutton-html5/app/client/views/whiteboard/slide.js +++ b/bigbluebutton-html5/app/client/views/whiteboard/slide.js @@ -5,7 +5,7 @@ Template.slide.rendered = function() { this.reactOnSlideChange = (_this => { return function() { let currentSlide, pic, ref; - currentSlide = BBB.getCurrentSlide("slide.rendered"); + currentSlide = BBB.getCurrentSlide(); pic = new Image(); pic.onload = function() { let ref; @@ -29,7 +29,6 @@ this.reactOnSlideChange = (_this => { })(this); this.createWhiteboardPaper = (_this => { - // console.log "CREATING WPM" return function(callback) { _this.whiteboardPaperModel = new Meteor.WhiteboardPaperModel('whiteboard-paper'); return callback(_this.whiteboardPaperModel); @@ -38,7 +37,7 @@ this.createWhiteboardPaper = (_this => { this.displaySlide = function(wpm) { let adjustedDimensions, currentSlide, ref; - currentSlide = BBB.getCurrentSlide("displaySlide"); + currentSlide = BBB.getCurrentSlide(); wpm.create(); adjustedDimensions = scaleSlide(getInSession('slideOriginalWidth'), getInSession('slideOriginalHeight')); wpm._displayPage( @@ -57,7 +56,7 @@ this.manuallyDisplayShapes = function() { }) != null) { return; } - currentSlide = BBB.getCurrentSlide("manuallyDisplayShapes"); + currentSlide = BBB.getCurrentSlide(); wpm = this.whiteboardPaperModel; shapes = Meteor.Shapes.find({ whiteboardId: currentSlide != null ? (ref = currentSlide.slide) != null ? ref.id : void 0 : void 0 diff --git a/bigbluebutton-html5/app/client/views/whiteboard/whiteboard.js b/bigbluebutton-html5/app/client/views/whiteboard/whiteboard.js index 3b3f33a2445938f5de082d384e3244fa23070b2d..43a539bf16b223d520a5e7e84284d191691f444b 100755 --- a/bigbluebutton-html5/app/client/views/whiteboard/whiteboard.js +++ b/bigbluebutton-html5/app/client/views/whiteboard/whiteboard.js @@ -10,35 +10,35 @@ this.scaleWhiteboard = function(callback) { if(callback) { callback(); } - return { - isPollStarted() { - if(BBB.isPollGoing(getInSession('userId'))) { - return true; - } else { - return false; - } - }, - hasNoPresentation() { - return Meteor.Presentations.findOne({ - 'presentation.current': true - }); - }, - forceSlideShow() { - return reactOnSlideChange(); - }, - clearSlide() { - let ref; - - //clear the slide - if(typeof whiteboardPaperModel !== "undefined" && whiteboardPaperModel !== null) { - whiteboardPaperModel.removeAllImagesFromPaper(); - } +}; - // hide the cursor - return typeof whiteboardPaperModel !== "undefined" && whiteboardPaperModel !== null ? (ref = whiteboardPaperModel.cursor) != null ? ref.remove() : void 0 : void 0; +Template.whiteboard.helpers({ + isPollStarted() { + if(BBB.isPollGoing(getInSession('userId'))) { + return true; + } else { + return false; } - }; -}; + }, + hasNoPresentation() { + return Meteor.Presentations.findOne({ + 'presentation.current': true + }); + }, + forceSlideShow() { + return reactOnSlideChange(); + }, + clearSlide() { + let ref; + //clear the slide + if(typeof whiteboardPaperModel !== "undefined" && whiteboardPaperModel !== null) { + whiteboardPaperModel.removeAllImagesFromPaper(); + } + //hide the cursor + return typeof whiteboardPaperModel !== "undefined" && whiteboardPaperModel !== null ? (ref = whiteboardPaperModel.cursor) != null ? ref.remove() : void 0 : void 0; + } +}); + Template.whiteboard.events({ 'click .whiteboardFullscreenButton'(event, template) { @@ -163,7 +163,6 @@ Template.whiteboardControls.helpers({ totalSlideNum = (ref1 = Meteor.Slides.find({ 'presentationId': currentPresentation != null ? currentPresentation.presentation.id : void 0 })) != null ? ref1.count() : void 0; - console.log('slide', currentSlideNum); if(currentSlideNum !== void 0) { return `${currentSlideNum}/${totalSlideNum}`; } else { diff --git a/bigbluebutton-html5/app/client/whiteboard_models/utils.js b/bigbluebutton-html5/app/client/whiteboard_models/utils.js index c3f742dc30a3271ea80ff353c053883c6ec816f8..e42a1e911609eefa9fe36043546866862444886e 100755 --- a/bigbluebutton-html5/app/client/whiteboard_models/utils.js +++ b/bigbluebutton-html5/app/client/whiteboard_models/utils.js @@ -43,7 +43,7 @@ this.formatThickness = function(thickness) { // applies zooming to the stroke thickness this.zoomStroke = function(thickness) { let currentSlide, ratio; - currentSlide = BBB.getCurrentSlide("zoomStroke"); + currentSlide = BBB.getCurrentSlide(); ratio = ((currentSlide != null ? currentSlide.slide.width_ratio : void 0) + (currentSlide != null ? currentSlide.slide.height_ratio : void 0)) / 2; return thickness * 100 / ratio; }; diff --git a/bigbluebutton-html5/app/client/whiteboard_models/whiteboard_ellipse.js b/bigbluebutton-html5/app/client/whiteboard_models/whiteboard_ellipse.js index 8803ad3fc9190e58061ed679a51d3ff252406bf7..ca7805c85c87d3a1f14e136258db4190d7248256 100755 --- a/bigbluebutton-html5/app/client/whiteboard_models/whiteboard_ellipse.js +++ b/bigbluebutton-html5/app/client/whiteboard_models/whiteboard_ellipse.js @@ -16,8 +16,6 @@ this.WhiteboardEllipseModel = (function() { // @param {string} colour the colour of the object // @param {number} thickness the thickness of the object's line(s) make(info) { - //console.log "Whiteboard - Making ellipse: " - //console.log info let color, thickness, x, y; if((info != null ? info.points : void 0) != null) { x = info.points[0]; @@ -39,7 +37,6 @@ this.WhiteboardEllipseModel = (function() { // @param {number} y2 the y value of the bottom right corner in percent of current slide size // @param {boolean} square (draw a circle or not update(info) { - //console.log info let circle, coords, r, ref, ref1, reversed, rx, ry, x1, x2, y1, y2; if((info != null ? info.points : void 0) != null) { x1 = info.points[0]; @@ -72,8 +69,6 @@ this.WhiteboardEllipseModel = (function() { y2: y2 }; - //console.log(coords) - rx = (x2 - x1) / 2; ry = (y2 - y1) / 2; r = { diff --git a/bigbluebutton-html5/app/client/whiteboard_models/whiteboard_paper.js b/bigbluebutton-html5/app/client/whiteboard_models/whiteboard_paper.js index 5e6185c7e53123dd4ed59639a0e40d86c7432aaf..27a84ea3ff8503498cffc9cf74670594e97aa9f4 100755 --- a/bigbluebutton-html5/app/client/whiteboard_models/whiteboard_paper.js +++ b/bigbluebutton-html5/app/client/whiteboard_models/whiteboard_paper.js @@ -209,9 +209,6 @@ Meteor.WhiteboardPaperModel = (function() { let base, base1, i, len, obj, tool, toolModel; data.thickness *= this.adjustedWidth / 1000; tool = null; - //TODO pay attention to this array, data in this array slows down the whiteboard - //console.log @current - //console.log @ this.current[shape] = this._createTool(shape); toolModel = this.current[shape]; tool = this.current[shape].make(data); @@ -287,8 +284,8 @@ Meteor.WhiteboardPaperModel = (function() { _updateZoomRatios() { let currentSlideDoc; - currentSlideDoc = BBB.getCurrentSlide("_updateZoomRatios"); - this.widthRatio = currentSlideDoc != null ? currentSlideDoc.slide.width_ratio : void 0; + currentSlideDoc = BBB.getCurrentSlide(); + this.widthRatio = (currentSlideDoc != null ? currentSlideDoc.slide.width_ratio : void 0) || 100; return this.heightRatio = currentSlideDoc != null ? currentSlideDoc.slide.height_ratio : void 0; } @@ -377,7 +374,7 @@ Meteor.WhiteboardPaperModel = (function() { if(url != null ? url.match(/http[s]?:/) : void 0) { return url; } else { - return console.log(`The url '${url}'' did not match the expected format of: http/s`); + return console.log(`The url '${url}' did not match the expected format of: http/s`); //globals.presentationServer + url } } @@ -390,7 +387,7 @@ Meteor.WhiteboardPaperModel = (function() { this._updateContainerDimensions(); boardWidth = this.containerWidth; boardHeight = this.containerHeight; - currentSlide = BBB.getCurrentSlide("_displayPage"); + currentSlide = BBB.getCurrentSlide(); currentPresentation = Meteor.Presentations.findOne({ "presentation.current": true }); diff --git a/bigbluebutton-html5/app/client/whiteboard_models/whiteboard_text.js b/bigbluebutton-html5/app/client/whiteboard_models/whiteboard_text.js index 99eb461ee96ae2f6f612397fe067a358490d6ed9..6dad76a3d71bde483d34eec1d1dcd48e906a31ce 100755 --- a/bigbluebutton-html5/app/client/whiteboard_models/whiteboard_text.js +++ b/bigbluebutton-html5/app/client/whiteboard_models/whiteboard_text.js @@ -14,7 +14,6 @@ this.WhiteboardTextModel = (function() { // Make a text on the whiteboard make(startingData) { - //console.log "making text:" + JSON.stringify startingData let calcFontSize, colour, fontSize, height, text, width, x, y; x = startingData.x; y = startingData.y; @@ -47,7 +46,6 @@ this.WhiteboardTextModel = (function() { // Update text shape drawn // @param {object} the object containing the shape info update(startingData) { - //console.log "updating text" + JSON.stringify startingData let calcFontSize, cell, colour, computedTextLength, cumulY, curNumChars, dashArray, dashFound, dy, fontSize, height, i, indexPos, line, maxWidth, myText, myTextNode, result, svgNS, tempText, tspanEl, word, words, x, y; x = startingData.x; y = startingData.y; diff --git a/bigbluebutton-html5/app/server/collection_methods/slides.js b/bigbluebutton-html5/app/server/collection_methods/slides.js index a5377982c835b983ec7769ddf9825d675cdeb67a..4fb130481ae31603cc67e122661388933e4ab9bf 100755 --- a/bigbluebutton-html5/app/server/collection_methods/slides.js +++ b/bigbluebutton-html5/app/server/collection_methods/slides.js @@ -13,11 +13,20 @@ this.displayThisSlide = function(meetingId, newSlideId, slideObject) { "slide.current": false } }); - // for the new slide: remove the version which came with presentation_shared_message from the Collection - // to avoid using old data (this message contains everything we need for the new slide) - removeSlideFromCollection(meetingId, newSlideId); - // add the new slide to the collection - return addSlideToCollection(meetingId, presentationId, slideObject); + + //change current to true for the new slide and update its ratios and offsets + Meteor.Slides.update({ + presentationId: presentationId, + "slide.id": newSlideId + }, { + $set: { + "slide.current": true, + "slide.height_ratio": slideObject.height_ratio, + "slide.width_ratio": slideObject.width_ratio, + "slide.x_offset": slideObject.x_offset, + "slide.y_offset": slideObject.y_offset + } + }); }; this.addSlideToCollection = function(meetingId, presentationId, slideObject) { @@ -48,23 +57,6 @@ this.addSlideToCollection = function(meetingId, presentationId, slideObject) { } }; -this.removeSlideFromCollection = function(meetingId, slideId) { - let id; - if((meetingId != null) && (slideId != null) && (Meteor.Slides.findOne({ - meetingId: meetingId, - "slide.id": slideId - }) != null)) { - id = Meteor.Slides.findOne({ - meetingId: meetingId, - "slide.id": slideId - }); - if(id != null) { - Meteor.Slides.remove(id._id); - return Meteor.log.info(`----removed slide[${slideId}] from ${meetingId}`); - } - } -}; - // called on server start and meeting end this.clearSlidesCollection = function(meetingId) { if(meetingId != null) { diff --git a/bigbluebutton-html5/app/server/server.js b/bigbluebutton-html5/app/server/server.js index c83eaf0d73b245f92b5703dc03b5f40b11abd312..38dad8fcfa89d30d3f7552e985188af2ad8b99ee 100755 --- a/bigbluebutton-html5/app/server/server.js +++ b/bigbluebutton-html5/app/server/server.js @@ -343,7 +343,6 @@ Meteor.startup(() => { "presentation.current": false } }); - //update(if already present) entirely the presentation with the fresh data removePresentationFromCollection(meetingId, presentationId); addPresentationToCollection(meetingId, message.payload.presentation); @@ -355,9 +354,6 @@ Meteor.startup(() => { (ref10 = message.payload.presentation) != null ? ref10.id : void 0, slide ); - if(slide.current) { - displayThisSlide(meetingId, slide.id, slide); - } } return callback(); @@ -483,17 +479,29 @@ Meteor.startup(() => { xOffset = (ref17 = message.payload.page) != null ? ref17.x_offset : void 0; yOffset = (ref18 = message.payload.page) != null ? ref18.y_offset : void 0; presentationId = slideId.split("/")[0]; - Meteor.Slides.update({ - presentationId: presentationId, - "slide.current": true - }, { - $set: { - "slide.height_ratio": heightRatio, - "slide.width_ratio": widthRatio, - "slide.x_offset": xOffset, - "slide.y_offset": yOffset - } - }); + + /*In the case when we don't resize, but switch a slide, this message + follows a 'presentation_page_changed' and all these properties are already set. */ + var currentSlide = Meteor.Slides.findOne({presentationId: presentationId, + "slide.current": true}); + if(currentSlide) { + currentSlide = currentSlide.slide; + } + if(currentSlide.height_ratio != heightRatio || currentSlide.width_ratio != widthRatio + || currentSlide.x_offset != xOffset || currentSlide.y_offset != yOffset) { + Meteor.Slides.update({ + presentationId: presentationId, + "slide.current": true + }, { + $set: { + "slide.height_ratio": heightRatio, + "slide.width_ratio": widthRatio, + "slide.x_offset": xOffset, + "slide.y_offset": yOffset + } + }); + } + return callback(); // for now not handling this serially #TODO