nutella_framework 0.4.13 → 0.4.16
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/VERSION +1 -1
- data/framework_components/order.json +2 -1
- data/framework_components/roomcast-bot/data/default/channels-data.json +1 -0
- data/framework_components/roomcast-bot/data/default/channels.json +1 -0
- data/framework_components/roomcast-bot/data/default/configs.json +1 -0
- data/framework_components/roomcast-bot/data/default/mapping.json +1 -0
- data/framework_components/roomcast-bot/roomcast_bot.rb +178 -0
- data/framework_components/roomcast-bot/startup +5 -0
- data/framework_components/roomcast-channel-creator/.gitignore +2 -0
- data/framework_components/roomcast-channel-creator/README.md +9 -0
- data/framework_components/roomcast-channel-creator/dist/app.js +29607 -0
- data/framework_components/roomcast-channel-creator/dist/css/font-awesome.min.css +4 -0
- data/framework_components/roomcast-channel-creator/dist/css/ionicons.min.css +11 -0
- data/framework_components/roomcast-channel-creator/dist/fonts/FontAwesome.otf +0 -0
- data/framework_components/roomcast-channel-creator/dist/fonts/fontawesome-webfont.eot +0 -0
- data/framework_components/roomcast-channel-creator/dist/fonts/fontawesome-webfont.svg +565 -0
- data/framework_components/roomcast-channel-creator/dist/fonts/fontawesome-webfont.ttf +0 -0
- data/framework_components/roomcast-channel-creator/dist/fonts/fontawesome-webfont.woff +0 -0
- data/framework_components/roomcast-channel-creator/dist/fonts/fontawesome-webfont.woff2 +0 -0
- data/framework_components/roomcast-channel-creator/dist/fonts/ionicons.eot +0 -0
- data/framework_components/roomcast-channel-creator/dist/fonts/ionicons.svg +2230 -0
- data/framework_components/roomcast-channel-creator/dist/fonts/ionicons.ttf +0 -0
- data/framework_components/roomcast-channel-creator/dist/fonts/ionicons.woff +0 -0
- data/framework_components/roomcast-channel-creator/dist/main.css +3304 -0
- data/framework_components/roomcast-channel-creator/dist/nutella_lib.js +5068 -0
- data/framework_components/roomcast-channel-creator/gulp/config.js +51 -0
- data/framework_components/roomcast-channel-creator/gulp/tasks/browserify.js +77 -0
- data/framework_components/roomcast-channel-creator/gulp/tasks/build.js +3 -0
- data/framework_components/roomcast-channel-creator/gulp/tasks/css.js +7 -0
- data/framework_components/roomcast-channel-creator/gulp/tasks/default.js +3 -0
- data/framework_components/roomcast-channel-creator/gulp/tasks/fonts.js +7 -0
- data/framework_components/roomcast-channel-creator/gulp/tasks/less.js +16 -0
- data/framework_components/roomcast-channel-creator/gulp/tasks/mui-fonts.js +7 -0
- data/framework_components/roomcast-channel-creator/gulp/tasks/nutella.js +7 -0
- data/framework_components/roomcast-channel-creator/gulp/tasks/setWatch.js +5 -0
- data/framework_components/roomcast-channel-creator/gulp/tasks/svgs.js +7 -0
- data/framework_components/roomcast-channel-creator/gulp/tasks/watch.js +12 -0
- data/framework_components/roomcast-channel-creator/gulp/util/bundleLogger.js +21 -0
- data/framework_components/roomcast-channel-creator/gulp/util/handleErrors.js +15 -0
- data/framework_components/roomcast-channel-creator/gulpfile.js +16 -0
- data/framework_components/roomcast-channel-creator/index.html +52 -0
- data/framework_components/roomcast-channel-creator/nutella.json +6 -0
- data/framework_components/roomcast-channel-creator/package.json +37 -0
- data/framework_components/roomcast-channel-creator/src/app/app.js +22 -0
- data/framework_components/roomcast-channel-creator/src/app/components/AnimationMixin.js +44 -0
- data/framework_components/roomcast-channel-creator/src/app/components/CataloguePage.js +130 -0
- data/framework_components/roomcast-channel-creator/src/app/components/Channel.js +378 -0
- data/framework_components/roomcast-channel-creator/src/app/components/ColorCell.js +28 -0
- data/framework_components/roomcast-channel-creator/src/app/components/ColorPicker.js +53 -0
- data/framework_components/roomcast-channel-creator/src/app/components/DetailPage.js +66 -0
- data/framework_components/roomcast-channel-creator/src/app/components/NutellaMixin.js +40 -0
- data/framework_components/roomcast-channel-creator/src/app/components/PageSliderMixin.js +68 -0
- data/framework_components/roomcast-channel-creator/src/app/components/Router.js +52 -0
- data/framework_components/roomcast-channel-creator/src/app/components/TopBar.js +86 -0
- data/framework_components/roomcast-channel-creator/src/app/components/main.js +333 -0
- data/framework_components/roomcast-channel-creator/src/css/font-awesome.min.css +4 -0
- data/framework_components/roomcast-channel-creator/src/css/ionicons.min.css +11 -0
- data/framework_components/roomcast-channel-creator/src/fonts/FontAwesome.otf +0 -0
- data/framework_components/roomcast-channel-creator/src/fonts/fontawesome-webfont.eot +0 -0
- data/framework_components/roomcast-channel-creator/src/fonts/fontawesome-webfont.svg +565 -0
- data/framework_components/roomcast-channel-creator/src/fonts/fontawesome-webfont.ttf +0 -0
- data/framework_components/roomcast-channel-creator/src/fonts/fontawesome-webfont.woff +0 -0
- data/framework_components/roomcast-channel-creator/src/fonts/fontawesome-webfont.woff2 +0 -0
- data/framework_components/roomcast-channel-creator/src/fonts/ionicons.eot +0 -0
- data/framework_components/roomcast-channel-creator/src/fonts/ionicons.svg +2230 -0
- data/framework_components/roomcast-channel-creator/src/fonts/ionicons.ttf +0 -0
- data/framework_components/roomcast-channel-creator/src/fonts/ionicons.woff +0 -0
- data/framework_components/roomcast-channel-creator/src/less/main.less +500 -0
- data/framework_components/roomcast-channel-creator/src/less/my_overrides.less +14 -0
- data/framework_components/roomcast-package-creator/.gitignore +2 -0
- data/framework_components/roomcast-package-creator/README.md +9 -0
- data/framework_components/roomcast-package-creator/dist/app.js +36624 -0
- data/framework_components/roomcast-package-creator/dist/css/font-awesome.min.css +4 -0
- data/framework_components/roomcast-package-creator/dist/css/ionicons.min.css +11 -0
- data/framework_components/roomcast-package-creator/dist/fonts/FontAwesome.otf +0 -0
- data/framework_components/roomcast-package-creator/dist/fonts/fontawesome-webfont.eot +0 -0
- data/framework_components/roomcast-package-creator/dist/fonts/fontawesome-webfont.svg +565 -0
- data/framework_components/roomcast-package-creator/dist/fonts/fontawesome-webfont.ttf +0 -0
- data/framework_components/roomcast-package-creator/dist/fonts/fontawesome-webfont.woff +0 -0
- data/framework_components/roomcast-package-creator/dist/fonts/fontawesome-webfont.woff2 +0 -0
- data/framework_components/roomcast-package-creator/dist/fonts/ionicons.eot +0 -0
- data/framework_components/roomcast-package-creator/dist/fonts/ionicons.svg +2230 -0
- data/framework_components/roomcast-package-creator/dist/fonts/ionicons.ttf +0 -0
- data/framework_components/roomcast-package-creator/dist/fonts/ionicons.woff +0 -0
- data/framework_components/roomcast-package-creator/dist/fonts/material-ui-icons.eot +0 -0
- data/framework_components/roomcast-package-creator/dist/fonts/material-ui-icons.svg +14 -0
- data/framework_components/roomcast-package-creator/dist/fonts/material-ui-icons.ttf +0 -0
- data/framework_components/roomcast-package-creator/dist/fonts/material-ui-icons.woff +0 -0
- data/framework_components/roomcast-package-creator/dist/main.css +5932 -0
- data/framework_components/roomcast-package-creator/dist/nutella_lib.js +5068 -0
- data/framework_components/roomcast-package-creator/gulp/config.js +51 -0
- data/framework_components/roomcast-package-creator/gulp/tasks/browserify.js +77 -0
- data/framework_components/roomcast-package-creator/gulp/tasks/build.js +3 -0
- data/framework_components/roomcast-package-creator/gulp/tasks/css.js +7 -0
- data/framework_components/roomcast-package-creator/gulp/tasks/default.js +3 -0
- data/framework_components/roomcast-package-creator/gulp/tasks/fonts.js +7 -0
- data/framework_components/roomcast-package-creator/gulp/tasks/less.js +16 -0
- data/framework_components/roomcast-package-creator/gulp/tasks/mui-fonts.js +7 -0
- data/framework_components/roomcast-package-creator/gulp/tasks/nutella.js +7 -0
- data/framework_components/roomcast-package-creator/gulp/tasks/setWatch.js +5 -0
- data/framework_components/roomcast-package-creator/gulp/tasks/svgs.js +7 -0
- data/framework_components/roomcast-package-creator/gulp/tasks/watch.js +12 -0
- data/framework_components/roomcast-package-creator/gulp/util/bundleLogger.js +21 -0
- data/framework_components/roomcast-package-creator/gulp/util/handleErrors.js +15 -0
- data/framework_components/roomcast-package-creator/gulpfile.js +16 -0
- data/framework_components/roomcast-package-creator/index.html +51 -0
- data/framework_components/roomcast-package-creator/nutella.json +6 -0
- data/framework_components/roomcast-package-creator/package.json +38 -0
- data/framework_components/roomcast-package-creator/src/app/app.js +19 -0
- data/framework_components/roomcast-package-creator/src/app/components/ButtonInteractionsMixin.js +45 -0
- data/framework_components/roomcast-package-creator/src/app/components/ChannelCard.js +87 -0
- data/framework_components/roomcast-package-creator/src/app/components/ChannelItem.js +71 -0
- data/framework_components/roomcast-package-creator/src/app/components/ChannelsCatalogue.js +64 -0
- data/framework_components/roomcast-package-creator/src/app/components/ChannelsPanel.js +127 -0
- data/framework_components/roomcast-package-creator/src/app/components/ConfigField.js +50 -0
- data/framework_components/roomcast-package-creator/src/app/components/ConfigurationsPanel.js +114 -0
- data/framework_components/roomcast-package-creator/src/app/components/ContextButton.js +37 -0
- data/framework_components/roomcast-package-creator/src/app/components/GlobalButton.js +26 -0
- data/framework_components/roomcast-package-creator/src/app/components/NutellaMixin.js +23 -0
- data/framework_components/roomcast-package-creator/src/app/components/PoolHeader.js +67 -0
- data/framework_components/roomcast-package-creator/src/app/components/PoolRow.js +160 -0
- data/framework_components/roomcast-package-creator/src/app/components/ResourceFamilyPool.js +168 -0
- data/framework_components/roomcast-package-creator/src/app/components/ResourcesPanel.js +76 -0
- data/framework_components/roomcast-package-creator/src/app/components/main.js +222 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/dialog_.jsx +66 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/drop-down-menu.jsx +163 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/enhanced-textarea.jsx +113 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/floating-action-button_.jsx +73 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/menu-item.jsx +100 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/menu.jsx +209 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/overlay.jsx +21 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/raised-button_.jsx +72 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/right-nav.jsx +108 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/svg-icons/drop-down-arrow.jsx +17 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/svg-icons/navigation-chevron-left.jsx +16 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/svg-icons/navigation-chevron-right.jsx +17 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/svg-icons/navigation-menu.jsx +16 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/svg-icons/svg-icon.jsx +23 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/svg-icons/toggle-check-box-checked.jsx +16 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/svg-icons/toggle-check-box-outline-blank.jsx +16 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/svg-icons/toggle-radio-button-off.jsx +16 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/svg-icons/toggle-radio-button-on.jsx +16 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/text-field.jsx +215 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/utils/css-event.js +52 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/utils/date-time.js +132 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/utils/dom.js +71 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/utils/events.js +34 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/utils/key-code.js +10 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/utils/key-line.js +13 -0
- data/framework_components/roomcast-package-creator/src/app/components/material-ui/utils/unique-id.js +7 -0
- data/framework_components/roomcast-package-creator/src/css/font-awesome.min.css +4 -0
- data/framework_components/roomcast-package-creator/src/css/ionicons.min.css +11 -0
- data/framework_components/roomcast-package-creator/src/fonts/FontAwesome.otf +0 -0
- data/framework_components/roomcast-package-creator/src/fonts/fontawesome-webfont.eot +0 -0
- data/framework_components/roomcast-package-creator/src/fonts/fontawesome-webfont.svg +565 -0
- data/framework_components/roomcast-package-creator/src/fonts/fontawesome-webfont.ttf +0 -0
- data/framework_components/roomcast-package-creator/src/fonts/fontawesome-webfont.woff +0 -0
- data/framework_components/roomcast-package-creator/src/fonts/fontawesome-webfont.woff2 +0 -0
- data/framework_components/roomcast-package-creator/src/fonts/ionicons.eot +0 -0
- data/framework_components/roomcast-package-creator/src/fonts/ionicons.svg +2230 -0
- data/framework_components/roomcast-package-creator/src/fonts/ionicons.ttf +0 -0
- data/framework_components/roomcast-package-creator/src/fonts/ionicons.woff +0 -0
- data/framework_components/roomcast-package-creator/src/less/drop-down-icon.less +43 -0
- data/framework_components/roomcast-package-creator/src/less/drop-down-menu.less +77 -0
- data/framework_components/roomcast-package-creator/src/less/enhanced-textarea.less +16 -0
- data/framework_components/roomcast-package-creator/src/less/main.less +491 -0
- data/framework_components/roomcast-package-creator/src/less/menu-item.less +69 -0
- data/framework_components/roomcast-package-creator/src/less/menu.less +50 -0
- data/framework_components/roomcast-package-creator/src/less/my_overrides.less +15 -0
- data/framework_components/roomcast-package-creator/src/less/svg-icon.less +11 -0
- data/framework_components/roomcast-package-creator/src/less/text-field.less +168 -0
- data/lib/commands/checkup.rb +1 -1
- data/nutella_lib/framework_net.rb +0 -1
- metadata +173 -4
@@ -0,0 +1,378 @@
|
|
1
|
+
|
2
|
+
var React = require('react');
|
3
|
+
var Mui = require('material-ui');
|
4
|
+
var Paper = Mui.Paper;
|
5
|
+
var NutellaMixin = require('./NutellaMixin');
|
6
|
+
var AnimationMixin = require('./AnimationMixin');
|
7
|
+
var ColorPicker = require('./ColorPicker');
|
8
|
+
var TextField = Mui.TextField;
|
9
|
+
var RadioButtonGroup = Mui.RadioButtonGroup;
|
10
|
+
var RadioButton = Mui.RadioButton;
|
11
|
+
var FlatButton = Mui.FlatButton;
|
12
|
+
//var queue = require("queue-async");
|
13
|
+
|
14
|
+
/**
|
15
|
+
* @prop channelId
|
16
|
+
* @prop channel
|
17
|
+
* @prop selected
|
18
|
+
* @prop onselectedChannel
|
19
|
+
*/
|
20
|
+
var Channel = React.createClass({
|
21
|
+
|
22
|
+
mixins: [NutellaMixin, AnimationMixin],
|
23
|
+
|
24
|
+
componentDidMount: function() {
|
25
|
+
this.imageFile = null;
|
26
|
+
this.imageData_ = null;
|
27
|
+
},
|
28
|
+
|
29
|
+
/**
|
30
|
+
* State
|
31
|
+
* @returns selected: boolean
|
32
|
+
* side: 'front' or 'back'
|
33
|
+
*/
|
34
|
+
getInitialState: function () {
|
35
|
+
return {
|
36
|
+
selected: false,
|
37
|
+
flipped: false,
|
38
|
+
modifyField: null
|
39
|
+
}
|
40
|
+
},
|
41
|
+
|
42
|
+
setModifyField: function(field) {
|
43
|
+
this.setState({
|
44
|
+
modifyField: field
|
45
|
+
});
|
46
|
+
},
|
47
|
+
|
48
|
+
componentWillReceiveProps: function(nextProps) {
|
49
|
+
if(nextProps.selected) {
|
50
|
+
this.setState({
|
51
|
+
selected: true
|
52
|
+
});
|
53
|
+
} else {
|
54
|
+
this.setState({
|
55
|
+
selected: false
|
56
|
+
});
|
57
|
+
this.setModifyField(null);
|
58
|
+
}
|
59
|
+
|
60
|
+
},
|
61
|
+
|
62
|
+
handleSelectChannel: function() {
|
63
|
+
this.props.onSelectChannel(this.props.channelId);
|
64
|
+
},
|
65
|
+
|
66
|
+
handleModifyIcon: function() {
|
67
|
+
this.setModifyField('icon');
|
68
|
+
},
|
69
|
+
|
70
|
+
flipCard: function() {
|
71
|
+
var self = this;
|
72
|
+
this.setState({
|
73
|
+
flipped: true
|
74
|
+
});
|
75
|
+
function callbackFlip() {
|
76
|
+
self.addCSSClass(self.refs.cardFront.getDOMNode(), 'hidden-card');
|
77
|
+
self.removeCSSClass(self.refs.cardBack.getDOMNode(), 'hidden-card');
|
78
|
+
self.flipY(self.refs.card.getDOMNode(), 90, 180, false);
|
79
|
+
}
|
80
|
+
this.flipY(this.refs.card.getDOMNode(), 0, 90, false, callbackFlip);
|
81
|
+
},
|
82
|
+
|
83
|
+
flipCardBack: function() {
|
84
|
+
var self = this;
|
85
|
+
this.setState({
|
86
|
+
flipped: false
|
87
|
+
});
|
88
|
+
function callbackFlip() {
|
89
|
+
self.addCSSClass(self.refs.cardBack.getDOMNode(), 'hidden-card');
|
90
|
+
self.removeCSSClass(self.refs.cardFront.getDOMNode(), 'hidden-card');
|
91
|
+
self.flipY(self.refs.card.getDOMNode(), 90, 0, true);
|
92
|
+
}
|
93
|
+
this.flipY(this.refs.card.getDOMNode(), 180, 90, true, callbackFlip);
|
94
|
+
},
|
95
|
+
|
96
|
+
handleDeleteCard: function() {
|
97
|
+
this.props.onDeleteCard(this.props.channelId);
|
98
|
+
},
|
99
|
+
|
100
|
+
addCSSClass: function(node, class_) {
|
101
|
+
node.className += ' ' + class_;
|
102
|
+
},
|
103
|
+
|
104
|
+
removeCSSClass: function(node, class_) {
|
105
|
+
var regex = new RegExp("(?:^|\\s)" + class_ + "(?!\\S)", "g");
|
106
|
+
node.className = node.className.replace(regex, '');
|
107
|
+
},
|
108
|
+
|
109
|
+
handleSetName: function() {
|
110
|
+
var value = this.refs['textFieldName' + this.props.channelId].getValue();
|
111
|
+
this.props.onSetName(value);
|
112
|
+
},
|
113
|
+
|
114
|
+
handleSetDescription: function() {
|
115
|
+
var value = this.refs['textFieldDescription' + this.props.channelId].getValue();
|
116
|
+
this.props.onSetDescription(value);
|
117
|
+
},
|
118
|
+
|
119
|
+
handleSetType: function(e, value) {
|
120
|
+
this.props.onSetType(value);
|
121
|
+
},
|
122
|
+
|
123
|
+
handleSetUrl: function() {
|
124
|
+
var value = this.refs['textFieldUrl' + this.props.channelId].getValue();
|
125
|
+
this.props.onSetUrl(value);
|
126
|
+
},
|
127
|
+
|
128
|
+
validateInputName: function() {
|
129
|
+
var value = this.refs['textFieldName' + this.props.channelId].getValue();
|
130
|
+
if(value.length > 30) {
|
131
|
+
event.returnValue = false;
|
132
|
+
}
|
133
|
+
},
|
134
|
+
|
135
|
+
validateInputDescription: function() {
|
136
|
+
var value = this.refs['textFieldDescription' + this.props.channelId].getValue();
|
137
|
+
if(value.length > 50) {
|
138
|
+
event.returnValue = false;
|
139
|
+
}
|
140
|
+
},
|
141
|
+
|
142
|
+
handleUploadImage: function(e) {
|
143
|
+
var node = e.target;
|
144
|
+
if (node.files && node.files[0]) {
|
145
|
+
var reader = new FileReader();
|
146
|
+
reader.onload = this.handleLoadedImage;
|
147
|
+
reader.readAsDataURL(node.files[0]);
|
148
|
+
// Store file for later upload
|
149
|
+
this.imageFile_ = node.files[0];
|
150
|
+
}
|
151
|
+
},
|
152
|
+
|
153
|
+
handleLoadedImage: function(e) {
|
154
|
+
// Set as temporary screenshot
|
155
|
+
var imageData = e.target.result;
|
156
|
+
this.imageData_ = imageData;
|
157
|
+
this.refs['channel' + this.props.channelId].getDOMNode().style.backgroundImage = 'url(' + imageData + ')';
|
158
|
+
},
|
159
|
+
|
160
|
+
/**
|
161
|
+
* Called on every Channel every time Save Changes is pressed
|
162
|
+
*/
|
163
|
+
handleStoreImageOnServer: function() {
|
164
|
+
var self = this;
|
165
|
+
if(this.imageFile_) {
|
166
|
+
ReactMain.imagesQueue++;
|
167
|
+
nutella.net.bin.uploadFile(this.imageFile_, function(url) {
|
168
|
+
console.log('got url', url);
|
169
|
+
self.props.onSetScreenshot(self.props.channelId, url);
|
170
|
+
ReactMain.imagesQueue--;
|
171
|
+
if(ReactMain.imagesQueue === 0) {
|
172
|
+
self.props.onSaveCallback();
|
173
|
+
}
|
174
|
+
});
|
175
|
+
}
|
176
|
+
},
|
177
|
+
|
178
|
+
render: function() {
|
179
|
+
|
180
|
+
var colorPicker = null;
|
181
|
+
var onTouchTapIcon = this.handleModifyIcon;
|
182
|
+
|
183
|
+
var backgroundImage;
|
184
|
+
if(this.imageData_) {
|
185
|
+
backgroundImage = 'url(' + this.imageData_ + ')';
|
186
|
+
} else {
|
187
|
+
backgroundImage = 'url(' + this.props.channel.screenshot + ')';
|
188
|
+
}
|
189
|
+
var style = {
|
190
|
+
backgroundImage: backgroundImage,
|
191
|
+
backgroundSize: '100% 100%'
|
192
|
+
};
|
193
|
+
|
194
|
+
var iconStyle = {
|
195
|
+
backgroundColor: this.props.channel.icon
|
196
|
+
};
|
197
|
+
|
198
|
+
if(this.state.selected) {
|
199
|
+
if (this.state.modifyField === 'icon') {
|
200
|
+
colorPicker =
|
201
|
+
<ColorPicker ref='colorPicker'
|
202
|
+
onPickColor={this.props.onPickColor}/>;
|
203
|
+
onTouchTapIcon = null;
|
204
|
+
}
|
205
|
+
}
|
206
|
+
|
207
|
+
var urlPlaceholder;
|
208
|
+
switch(this.props.channel.type) {
|
209
|
+
case 'web':
|
210
|
+
urlPlaceholder = 'URL:';
|
211
|
+
break;
|
212
|
+
case 'iOS':
|
213
|
+
urlPlaceholder = 'Custom URL:';
|
214
|
+
break;
|
215
|
+
default:
|
216
|
+
urlPlaceholder = 'URL:';
|
217
|
+
}
|
218
|
+
|
219
|
+
var cardBack =
|
220
|
+
<div className='card-back hidden-card' ref='cardBack'>
|
221
|
+
|
222
|
+
<Paper className='channel'>
|
223
|
+
|
224
|
+
<div className='corner-icon flip-icon'> <i className="ion ion-android-settings" onTouchTap={this.flipCardBack} ></i> </div>
|
225
|
+
|
226
|
+
<div className='flex-centered' >
|
227
|
+
<div className='flex-content' >
|
228
|
+
|
229
|
+
<RadioButtonGroup
|
230
|
+
name="radio_buttons"
|
231
|
+
ref={'radioButtons' + this.props.channelId}
|
232
|
+
defaultSelected={this.props.channel.type}
|
233
|
+
onChange={this.handleSetType} >
|
234
|
+
<RadioButton
|
235
|
+
value="web"
|
236
|
+
label="Web channel"
|
237
|
+
defaultChecked={true} />
|
238
|
+
<RadioButton
|
239
|
+
value="iOS"
|
240
|
+
label="iOS app channel" />
|
241
|
+
</RadioButtonGroup>
|
242
|
+
|
243
|
+
<div className='url-div' >
|
244
|
+
|
245
|
+
<span> {urlPlaceholder} </span>
|
246
|
+
<TextField
|
247
|
+
ref={'textFieldUrl' + this.props.channelId}
|
248
|
+
hintText={''}
|
249
|
+
value={this.props.channel.url}
|
250
|
+
multiLine={true}
|
251
|
+
onChange={this.handleSetUrl} />
|
252
|
+
|
253
|
+
</div>
|
254
|
+
</div>
|
255
|
+
|
256
|
+
</div>
|
257
|
+
|
258
|
+
</Paper>
|
259
|
+
|
260
|
+
</div>;
|
261
|
+
|
262
|
+
var catalogueCard =
|
263
|
+
<div className='card-container hovering-layer catalogue-card-style' ref='cardContainer' >
|
264
|
+
|
265
|
+
<div className='card' ref='card'>
|
266
|
+
|
267
|
+
<div className='card-front' ref='cardFront'>
|
268
|
+
|
269
|
+
<div className='corner-icon delete-icon' > <i className="fa fa-times" ref='cornerIcon' onTouchTap={this.handleDeleteCard}></i> </div>
|
270
|
+
|
271
|
+
<Paper className='channel'
|
272
|
+
ref={'channel' + this.props.channelId}
|
273
|
+
style={style}
|
274
|
+
onTouchTap={this.handleSelectChannel} >
|
275
|
+
|
276
|
+
<div className='channel-div'>
|
277
|
+
|
278
|
+
<div className='channel-caption'>
|
279
|
+
|
280
|
+
<div className='icon-name-wrapper'>
|
281
|
+
|
282
|
+
<div className='channel-icon' ref='channelIcon' style={iconStyle} > </div>
|
283
|
+
|
284
|
+
<div className='name-wrapper'>
|
285
|
+
<p className='channel-name'> {this.props.channel.name} </p>
|
286
|
+
<p className='channel-description'> {this.props.channel.description} </p>
|
287
|
+
</div>
|
288
|
+
|
289
|
+
</div>
|
290
|
+
|
291
|
+
</div>
|
292
|
+
|
293
|
+
</div>
|
294
|
+
|
295
|
+
</Paper>
|
296
|
+
|
297
|
+
</div>
|
298
|
+
|
299
|
+
{cardBack}
|
300
|
+
|
301
|
+
</div>
|
302
|
+
|
303
|
+
</div>;
|
304
|
+
|
305
|
+
var detailCard =
|
306
|
+
<div className='card-container detail-card-style' ref='cardContainer' >
|
307
|
+
|
308
|
+
<div className='card' ref='card'>
|
309
|
+
|
310
|
+
<div className='card-front' ref='cardFront'>
|
311
|
+
|
312
|
+
{colorPicker}
|
313
|
+
|
314
|
+
|
315
|
+
|
316
|
+
<div className='corner-icon flip-icon' > <i className="ion ion-android-settings" ref='cornerIcon' onTouchTap={this.flipCard} ></i> </div>
|
317
|
+
|
318
|
+
<Paper className='channel'
|
319
|
+
ref={'channel' + this.props.channelId}
|
320
|
+
style={style} >
|
321
|
+
|
322
|
+
<div className='channel-div'>
|
323
|
+
|
324
|
+
<div className='channel-caption'>
|
325
|
+
|
326
|
+
<div className='upload-button-container' >
|
327
|
+
<FlatButton secondary={true}>
|
328
|
+
<span className="mui-flat-button-label upload-image-button">Upload screenshot</span>
|
329
|
+
<input type="file" id="imageButton" className="upload-image-input" onChange={this.handleUploadImage} ></input>
|
330
|
+
</FlatButton>
|
331
|
+
</div>
|
332
|
+
|
333
|
+
<div className='icon-name-wrapper'>
|
334
|
+
|
335
|
+
<div className='channel-icon modifiable' ref='channelIcon' style={iconStyle} onTouchTap={onTouchTapIcon} > </div>
|
336
|
+
|
337
|
+
<div className='name-wrapper-edit'>
|
338
|
+
|
339
|
+
<TextField
|
340
|
+
ref={'textFieldName' + this.props.channelId}
|
341
|
+
hintText={'Channel name'}
|
342
|
+
value={this.props.channel.name}
|
343
|
+
onChange={this.handleSetName}
|
344
|
+
onKeyPress={this.validateInputName} />
|
345
|
+
|
346
|
+
<TextField
|
347
|
+
ref={'textFieldDescription' + this.props.channelId}
|
348
|
+
hintText={'Channel description'}
|
349
|
+
value={this.props.channel.description}
|
350
|
+
onChange={this.handleSetDescription}
|
351
|
+
onKeyPress={this.validateInputDescription} />
|
352
|
+
|
353
|
+
</div>
|
354
|
+
|
355
|
+
</div>
|
356
|
+
|
357
|
+
</div>
|
358
|
+
|
359
|
+
</div>
|
360
|
+
|
361
|
+
</Paper>
|
362
|
+
|
363
|
+
</div>
|
364
|
+
|
365
|
+
{cardBack}
|
366
|
+
|
367
|
+
</div>
|
368
|
+
|
369
|
+
</div>;
|
370
|
+
|
371
|
+
return this.state.selected? detailCard : catalogueCard;
|
372
|
+
|
373
|
+
}
|
374
|
+
|
375
|
+
});
|
376
|
+
|
377
|
+
module.exports = Channel;
|
378
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
|
2
|
+
var React = require('react');
|
3
|
+
var Mui = require('material-ui');
|
4
|
+
var Paper = Mui.Paper;
|
5
|
+
|
6
|
+
var ColorCell = React.createClass({
|
7
|
+
|
8
|
+
handlePickColor: function() {
|
9
|
+
this.props.onPickColor(this.props.color);
|
10
|
+
},
|
11
|
+
|
12
|
+
render: function() {
|
13
|
+
|
14
|
+
var style = {
|
15
|
+
backgroundColor: this.props.color
|
16
|
+
};
|
17
|
+
|
18
|
+
return (
|
19
|
+
|
20
|
+
<div className='color-cell' style={style} onTouchTap={this.handlePickColor} > </div>
|
21
|
+
|
22
|
+
);
|
23
|
+
|
24
|
+
}
|
25
|
+
|
26
|
+
});
|
27
|
+
|
28
|
+
module.exports = ColorCell;
|
@@ -0,0 +1,53 @@
|
|
1
|
+
|
2
|
+
var React = require('react');
|
3
|
+
var Mui = require('material-ui');
|
4
|
+
var ColorCell = require('./ColorCell');
|
5
|
+
|
6
|
+
var ColorPicker = React.createClass({
|
7
|
+
|
8
|
+
componentWillMount: function() {
|
9
|
+
|
10
|
+
this.palette_ = [];
|
11
|
+
this.palette_.push(
|
12
|
+
'#f6e8c3',
|
13
|
+
'#c7eae5',
|
14
|
+
'#fde0ef',
|
15
|
+
'#e6f5d0',
|
16
|
+
'#e7d4e8',
|
17
|
+
'#fee0b6',
|
18
|
+
'#d1e5f0',
|
19
|
+
'#f46d43',
|
20
|
+
'#bdbdbd',
|
21
|
+
'#a8ddb5'
|
22
|
+
);
|
23
|
+
|
24
|
+
},
|
25
|
+
|
26
|
+
render: function() {
|
27
|
+
var self = this;
|
28
|
+
|
29
|
+
var colorsGrid = [];
|
30
|
+
this.palette_.forEach(function(c) {
|
31
|
+
colorsGrid.push(
|
32
|
+
<ColorCell color={c}
|
33
|
+
size={self.props.cellSize}
|
34
|
+
onPickColor={self.props.onPickColor}/>
|
35
|
+
);
|
36
|
+
});
|
37
|
+
|
38
|
+
return (
|
39
|
+
|
40
|
+
<div className='color-picker' >
|
41
|
+
|
42
|
+
{colorsGrid}
|
43
|
+
|
44
|
+
</div>
|
45
|
+
|
46
|
+
);
|
47
|
+
|
48
|
+
}
|
49
|
+
|
50
|
+
});
|
51
|
+
|
52
|
+
module.exports = ColorPicker;
|
53
|
+
|
@@ -0,0 +1,66 @@
|
|
1
|
+
|
2
|
+
var React = require('react');
|
3
|
+
var Channel = require('./Channel');
|
4
|
+
|
5
|
+
var DetailPage = React.createClass({
|
6
|
+
|
7
|
+
componentWillMount: function() {
|
8
|
+
this.updateDimensions();
|
9
|
+
},
|
10
|
+
|
11
|
+
componentDidMount: function() {
|
12
|
+
this.setState({
|
13
|
+
channel: this.props.channel
|
14
|
+
});
|
15
|
+
|
16
|
+
window.addEventListener("resize", this.updateDimensions);
|
17
|
+
|
18
|
+
},
|
19
|
+
|
20
|
+
componentWillUnmount: function() {
|
21
|
+
window.removeEventListener("resize", this.updateDimensions);
|
22
|
+
},
|
23
|
+
|
24
|
+
componentWillReceiveProps: function(nextProps) {
|
25
|
+
this.setState({
|
26
|
+
channel: nextProps.channel
|
27
|
+
});
|
28
|
+
},
|
29
|
+
|
30
|
+
getInitialState: function () {
|
31
|
+
return {
|
32
|
+
channel: this.props.channel,
|
33
|
+
windowSize: []
|
34
|
+
}
|
35
|
+
},
|
36
|
+
|
37
|
+
updateDimensions: function() {
|
38
|
+
this.setState({windowSize: [window.innerWidth, window.innerHeight]});
|
39
|
+
},
|
40
|
+
|
41
|
+
render: function() {
|
42
|
+
|
43
|
+
var channel =
|
44
|
+
<Channel
|
45
|
+
channel={this.state.channel}
|
46
|
+
selected={true} />;
|
47
|
+
|
48
|
+
var rightBarStyle = {
|
49
|
+
height: this.state.windowSize[1]
|
50
|
+
};
|
51
|
+
|
52
|
+
return (
|
53
|
+
|
54
|
+
<div className='detail-page' >
|
55
|
+
<div className="card-detail"> {channel} </div>
|
56
|
+
<div className="right-bar-detail" style={rightBarStyle} > </div>
|
57
|
+
</div>
|
58
|
+
|
59
|
+
);
|
60
|
+
|
61
|
+
}
|
62
|
+
|
63
|
+
});
|
64
|
+
|
65
|
+
module.exports = DetailPage;
|
66
|
+
|
@@ -0,0 +1,40 @@
|
|
1
|
+
|
2
|
+
var NutellaMixin = {
|
3
|
+
|
4
|
+
getChannelsForRid: function(message, rid) {
|
5
|
+
var myChannelsId = [];
|
6
|
+
var myChannels = [];
|
7
|
+
message.forEach(function(f) {
|
8
|
+
for (var i in f.items) {
|
9
|
+
var item = f.items[i];
|
10
|
+
if (item.name === 'iPad1') {
|
11
|
+
myChannelsId = item.channels;
|
12
|
+
break;
|
13
|
+
}
|
14
|
+
}
|
15
|
+
});
|
16
|
+
myChannelsId.forEach(function(id) {
|
17
|
+
myChannels.push(CHANNELS[id]);
|
18
|
+
});
|
19
|
+
},
|
20
|
+
|
21
|
+
getUrlForAsset: function(assetName, assetType) {
|
22
|
+
|
23
|
+
var broker = null;
|
24
|
+
if(query_parameters.broker) {
|
25
|
+
broker = query_parameters.broker;
|
26
|
+
} else {
|
27
|
+
broker = '52.1.142.215'; // TODO hardcoded broker
|
28
|
+
}
|
29
|
+
|
30
|
+
var runId = 'RoomQuake'; // TODO hardcoded runid
|
31
|
+
if(assetType == null) {
|
32
|
+
return 'http://' + broker + ':57880/roomcast/main-interface/assets/channels/' + '/' + assetName;
|
33
|
+
}
|
34
|
+
return 'http://' + broker + ':57880/roomcast/main-interface/assets/channels/' + runId + '/' + assetType + '/' + assetName;
|
35
|
+
|
36
|
+
}
|
37
|
+
|
38
|
+
};
|
39
|
+
|
40
|
+
module.exports = NutellaMixin;
|
@@ -0,0 +1,68 @@
|
|
1
|
+
|
2
|
+
var PageSliderMixin = {
|
3
|
+
|
4
|
+
getInitialState: function () {
|
5
|
+
return {
|
6
|
+
history: [],
|
7
|
+
pages: [],
|
8
|
+
animating: false
|
9
|
+
}
|
10
|
+
},
|
11
|
+
componentDidUpdate: function() {
|
12
|
+
var skippedCurrentFrame = false,
|
13
|
+
pageEl = this.getDOMNode().lastChild,
|
14
|
+
pages = this.state.pages,
|
15
|
+
l = pages.length,
|
16
|
+
transitionEndHandler = function() {
|
17
|
+
pageEl.removeEventListener('webkitTransitionEnd', transitionEndHandler);
|
18
|
+
pages.shift();
|
19
|
+
this.setState({pages: pages});
|
20
|
+
}.bind(this),
|
21
|
+
animate = function() {
|
22
|
+
if (!skippedCurrentFrame) {
|
23
|
+
skippedCurrentFrame = true;
|
24
|
+
requestAnimationFrame(animate.bind(this));
|
25
|
+
} else if (l > 0) {
|
26
|
+
pages[l - 1].props.position = "center transition";
|
27
|
+
this.setState({pages: pages, animating: false});
|
28
|
+
pageEl.addEventListener('webkitTransitionEnd', transitionEndHandler);
|
29
|
+
}
|
30
|
+
};
|
31
|
+
|
32
|
+
if (this.state.animating) {
|
33
|
+
requestAnimationFrame(animate.bind(this));
|
34
|
+
}
|
35
|
+
},
|
36
|
+
slidePage: function (page) {
|
37
|
+
var history = this.state.history,
|
38
|
+
pages = this.state.pages,
|
39
|
+
l = history.length,
|
40
|
+
hash = window.location.hash,
|
41
|
+
position = "center";
|
42
|
+
|
43
|
+
if (l === 0) {
|
44
|
+
history.push(hash);
|
45
|
+
} else if (hash === history[l - 2]) {
|
46
|
+
history.pop();
|
47
|
+
position = "left";
|
48
|
+
} else {
|
49
|
+
history.push(hash);
|
50
|
+
position = "right";
|
51
|
+
}
|
52
|
+
|
53
|
+
page.props.position = position;
|
54
|
+
pages.push(page);
|
55
|
+
|
56
|
+
this.setState({history: history, pages: pages, animating: position!=="center"});
|
57
|
+
|
58
|
+
},
|
59
|
+
render: function () {
|
60
|
+
return (
|
61
|
+
<div className="pageslider-container">
|
62
|
+
{this.state.pages}
|
63
|
+
</div>
|
64
|
+
);
|
65
|
+
}
|
66
|
+
};
|
67
|
+
|
68
|
+
module.exports = PageSliderMixin;
|
@@ -0,0 +1,52 @@
|
|
1
|
+
|
2
|
+
var Router = (function () {
|
3
|
+
|
4
|
+
"use strict";
|
5
|
+
|
6
|
+
var routes = [];
|
7
|
+
|
8
|
+
function addRoute(route, handler) {
|
9
|
+
|
10
|
+
routes.push({parts: route.split('/'), handler: handler});
|
11
|
+
}
|
12
|
+
|
13
|
+
function load(route) {
|
14
|
+
window.location.hash = route;
|
15
|
+
}
|
16
|
+
|
17
|
+
function start() {
|
18
|
+
|
19
|
+
var path = window.location.hash.substr(1),
|
20
|
+
parts = path.split('/'),
|
21
|
+
partsLength = parts.length;
|
22
|
+
|
23
|
+
for (var i = 0; i < routes.length; i++) {
|
24
|
+
var route = routes[i];
|
25
|
+
if (route.parts.length === partsLength) {
|
26
|
+
var params = [];
|
27
|
+
for (var j = 0; j < partsLength; j++) {
|
28
|
+
if (route.parts[j].substr(0, 1) === ':') {
|
29
|
+
params.push(parts[j]);
|
30
|
+
} else if (route.parts[j] !== parts[j]) {
|
31
|
+
break;
|
32
|
+
}
|
33
|
+
}
|
34
|
+
if (j === partsLength) {
|
35
|
+
route.handler.apply(undefined, params);
|
36
|
+
return;
|
37
|
+
}
|
38
|
+
}
|
39
|
+
}
|
40
|
+
}
|
41
|
+
|
42
|
+
window.onhashchange = start;
|
43
|
+
|
44
|
+
return {
|
45
|
+
addRoute: addRoute,
|
46
|
+
load: load,
|
47
|
+
start: start
|
48
|
+
};
|
49
|
+
|
50
|
+
}());
|
51
|
+
|
52
|
+
module.exports = Router;
|