diff --git a/bigbluebutton-html5/Gruntfile.js b/bigbluebutton-html5/Gruntfile.js index 4ba47feb5e..969d6bc1ff 100755 --- a/bigbluebutton-html5/Gruntfile.js +++ b/bigbluebutton-html5/Gruntfile.js @@ -41,7 +41,7 @@ module.exports = function (grunt) { shell: { start_meteor: { - command: 'HOME=/usr/share/meteor JASMINE_SERVER_UNIT=0 JASMINE_SERVER_INTEGRATION=0 JASMINE_CLIENT_INTEGRATION=0 JASMINE_BROWSER=PhantomJS JASMINE_MIRROR_PORT=3000 ROOT_URL=http://127.0.0.1/html5client meteor', + command: 'JASMINE_SERVER_UNIT=0 JASMINE_SERVER_INTEGRATION=0 JASMINE_CLIENT_INTEGRATION=0 JASMINE_BROWSER=PhantomJS JASMINE_MIRROR_PORT=3000 ROOT_URL=http://127.0.0.1/html5client meteor', }, }, diff --git a/bigbluebutton-html5/imports/ui/shared/Svg.jsx b/bigbluebutton-html5/imports/ui/shared/Svg.jsx new file mode 100755 index 0000000000..c394d993df --- /dev/null +++ b/bigbluebutton-html5/imports/ui/shared/Svg.jsx @@ -0,0 +1,29 @@ +import React, { Component, PropTypes } from 'react'; + +// import SVGDOMPropertyConfig from 'react/lib/SVGDOMPropertyConfig.js'; + +export default class Svg extends Component { + render() { + return ( + + {this.props.children} + + ); + } +} + +Svg.propTypes = { + children: function (props, propName, componentName) { + var error; + var prop = props[propName]; + React.Children.forEach(prop, function (child) { + if (child.type !== 'Shape') { + error = new Error( + '`' + componentName + '` only accepts children of type `Shape`.' + ); + } + }); + + return error; + }, +}; diff --git a/bigbluebutton-html5/imports/ui/whiteboard/SlideService.js b/bigbluebutton-html5/imports/ui/whiteboard/SlideService.js new file mode 100755 index 0000000000..deea7e7f51 --- /dev/null +++ b/bigbluebutton-html5/imports/ui/whiteboard/SlideService.js @@ -0,0 +1,22 @@ +let getCurrentSlide = () => { + let currentPresentation, currentSlide, presentationId, shapes, ref; + currentPresentation = Meteor.Presentations.findOne({ + 'presentation.current': true, + }); + presentationId = currentPresentation != null ? (ref = currentPresentation.presentation) != null ? ref.id : void 0 : void 0; + currentSlide = Meteor.Slides.findOne({ + presentationId: presentationId, + 'slide.current': true, + }); + if (currentSlide != null) { + currentSlide.shapes = Meteor.Shapes.find({ + whiteboardId: currentSlide.slide.id, + }).fetch(); + } + + return currentSlide; +}; + +export default { + getCurrentSlide, +}; diff --git a/bigbluebutton-html5/imports/ui/whiteboard/Whiteboard.jsx b/bigbluebutton-html5/imports/ui/whiteboard/Whiteboard.jsx index 0627e3b15d..99d8031aad 100755 --- a/bigbluebutton-html5/imports/ui/whiteboard/Whiteboard.jsx +++ b/bigbluebutton-html5/imports/ui/whiteboard/Whiteboard.jsx @@ -5,6 +5,7 @@ import { EmojiContainer } from './EmojiContainer.jsx'; import { Polling } from './Polling.jsx'; import { Button } from '../shared/Button.jsx'; import { WhiteboardControls } from './WhiteboardControls.jsx'; +import WhiteboardPaper from './whiteboard_marks/WhiteboardPaper.jsx'; export let Whiteboard = React.createClass({ mixins: [ReactMeteorData], @@ -101,22 +102,22 @@ export let Whiteboard = React.createClass({ render() { return ( -
-
- - +
+
+ + {this.data.is_mobile ?
-
+ : null } +
+
{this.data.is_presenter ? - : null } + : null } {this.data.poll_started ? - : null } -
+ : null } +
); }, diff --git a/bigbluebutton-html5/imports/ui/whiteboard/whiteboard_marks/EllipseDrawComponent.jsx b/bigbluebutton-html5/imports/ui/whiteboard/whiteboard_marks/EllipseDrawComponent.jsx new file mode 100755 index 0000000000..acb25f5918 --- /dev/null +++ b/bigbluebutton-html5/imports/ui/whiteboard/whiteboard_marks/EllipseDrawComponent.jsx @@ -0,0 +1,14 @@ +import React, { PropTypes } from 'react'; + +export default class EllipseDrawComponent extends React.Component { + constructor(props) { + super(props); + } + + render() { + return ( + + ); + } +} + diff --git a/bigbluebutton-html5/imports/ui/whiteboard/whiteboard_marks/LineDrawComponent.jsx b/bigbluebutton-html5/imports/ui/whiteboard/whiteboard_marks/LineDrawComponent.jsx new file mode 100755 index 0000000000..142e7b577d --- /dev/null +++ b/bigbluebutton-html5/imports/ui/whiteboard/whiteboard_marks/LineDrawComponent.jsx @@ -0,0 +1,15 @@ +import React, { PropTypes } from 'react'; + +export default class LineDrawComponent extends React.Component { + constructor(props) { + super(props); + } + + render() { + return ( + //stroke and stroke-width might be inside of the style + + ); + } +} + diff --git a/bigbluebutton-html5/imports/ui/whiteboard/whiteboard_marks/PollDrawComponent.jsx b/bigbluebutton-html5/imports/ui/whiteboard/whiteboard_marks/PollDrawComponent.jsx new file mode 100755 index 0000000000..bdef3dbacf --- /dev/null +++ b/bigbluebutton-html5/imports/ui/whiteboard/whiteboard_marks/PollDrawComponent.jsx @@ -0,0 +1,14 @@ +import React, { PropTypes } from 'react'; + +export default class PollDrawComponent extends React.Component { + constructor(props) { + super(props); + } + + render() { + return ( + + ); + } +} + diff --git a/bigbluebutton-html5/imports/ui/whiteboard/whiteboard_marks/RectangleDrawComponent.jsx b/bigbluebutton-html5/imports/ui/whiteboard/whiteboard_marks/RectangleDrawComponent.jsx new file mode 100755 index 0000000000..bd2dff94a9 --- /dev/null +++ b/bigbluebutton-html5/imports/ui/whiteboard/whiteboard_marks/RectangleDrawComponent.jsx @@ -0,0 +1,13 @@ +import React, { PropTypes } from 'react'; + +export default class RectangleDrawComponent extends React.Component { + constructor(props) { + super(props); + } + + render() { + return ( + + ); + } +} diff --git a/bigbluebutton-html5/imports/ui/whiteboard/whiteboard_marks/TextDrawComponent.jsx b/bigbluebutton-html5/imports/ui/whiteboard/whiteboard_marks/TextDrawComponent.jsx new file mode 100755 index 0000000000..cef1fbe89e --- /dev/null +++ b/bigbluebutton-html5/imports/ui/whiteboard/whiteboard_marks/TextDrawComponent.jsx @@ -0,0 +1,15 @@ +import React, { PropTypes } from 'react'; + +export default class TextDrawComponent extends React.Component { + constructor(props) { + super(props); + } + + render() { + return ( + + + + ); + } +} diff --git a/bigbluebutton-html5/imports/ui/whiteboard/whiteboard_marks/TriangleDrawComponent.jsx b/bigbluebutton-html5/imports/ui/whiteboard/whiteboard_marks/TriangleDrawComponent.jsx new file mode 100755 index 0000000000..580ec7c034 --- /dev/null +++ b/bigbluebutton-html5/imports/ui/whiteboard/whiteboard_marks/TriangleDrawComponent.jsx @@ -0,0 +1,15 @@ +import React, { PropTypes } from 'react'; + +export default class TriangleDrawComponent extends React.Component { + constructor(props) { + super(props); + } + + render() { + return ( + + ); + } +} + + diff --git a/bigbluebutton-html5/imports/ui/whiteboard/whiteboard_marks/WhiteboardPaper.jsx b/bigbluebutton-html5/imports/ui/whiteboard/whiteboard_marks/WhiteboardPaper.jsx new file mode 100755 index 0000000000..e5e9c96c38 --- /dev/null +++ b/bigbluebutton-html5/imports/ui/whiteboard/whiteboard_marks/WhiteboardPaper.jsx @@ -0,0 +1,84 @@ +import React, { PropTypes } from 'react'; +import Svg from '../../shared/Svg.jsx'; + +export default class WhiteboardPaper extends React.Component { + constructor(props) { + super(props); + //var Component = allComponents['Svg']; + } + + render() { + var allComponents = { 'Svg': Svg }; + var test = 'Svg'; + var Component = allComponents[test]; + return ( +
+
+ + + +
+
+ ); + } +} + +WhiteboardPaper.defaultProps = { + svgProps: { + width:'1134', + height:'850.5', + preserveAspectRatio: 'xMinYMin slice', + viewBox:'0 0 1134 850.5', + }, + svgStyle: { + overflow: 'hidden', + position: 'relative', + }, +}; + +/* + + + + +*/ + + /* getDefaultProps: function() { + return { + id: 'whiteboard-paper', + version: '1.1', + xmlns: 'http://www.w3.org/2000/svg', + width:'1134', + height:'850.5', + style: 'overflow: hidden; position: relative;', + preserveAspectRatio: 'xMinYMin slice', + viewBox:'0 0 1134 850.5' + }; + }, +*/ + +/* + +SvgContainer.propTypes = { + children: function (props, propName, componentName) { + var error; + var prop = props[propName]; + + React.Children.forEach(prop, function (child) { + if (child.type !== 'Shape') { + error = new Error( + '`' + componentName + '` only accepts children of type `Shape`.' + ); + } + }); + return error; + } + },, +}; +*/ diff --git a/bigbluebutton-html5/imports/ui/whiteboard/whiteboard_marks/WhiteboardShapeModel.jsx b/bigbluebutton-html5/imports/ui/whiteboard/whiteboard_marks/WhiteboardShapeModel.jsx new file mode 100755 index 0000000000..02e7b22a59 --- /dev/null +++ b/bigbluebutton-html5/imports/ui/whiteboard/whiteboard_marks/WhiteboardShapeModel.jsx @@ -0,0 +1,25 @@ +import React, { PropTypes } from 'react'; + +export default class WhiteboardShapeModel extends React.Component { + constructor(props) { + super(props); + } + + render() { + return ( +
+
+ ); + } +} + +WhiteboardPaper.defaultProps = { + shapes: { + 'ellipse': Ellipse, + 'line': Line, + 'poll': Poll, + 'rectangle': Rectangle, + 'text': Text, + 'triangle': Triangle, + }, +};