nutella_framework 0.7.3 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (506) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +1 -1
  3. data/VERSION +1 -1
  4. data/framework_components/order.json +1 -6
  5. data/nutella_framework.gemspec +7 -507
  6. metadata +5 -505
  7. data/framework_components/beacon-cloud-bot/README.md +0 -27
  8. data/framework_components/beacon-cloud-bot/beacon_cloud_bot.rb +0 -150
  9. data/framework_components/beacon-cloud-bot/beacons.json +0 -1
  10. data/framework_components/beacon-cloud-bot/startup +0 -5
  11. data/framework_components/logging_bot/logging_bot.rb +0 -42
  12. data/framework_components/logging_bot/startup +0 -5
  13. data/framework_components/logging_bot/utils.rb +0 -8
  14. data/framework_components/monitoring-bot/.gitignore +0 -34
  15. data/framework_components/monitoring-bot/README.md +0 -1
  16. data/framework_components/monitoring-bot/monitoring-bot.rb +0 -472
  17. data/framework_components/monitoring-bot/nutella.json +0 -6
  18. data/framework_components/monitoring-bot/startup +0 -6
  19. data/framework_components/monitoring-interface/.gitignore +0 -2
  20. data/framework_components/monitoring-interface/README.md +0 -1
  21. data/framework_components/monitoring-interface/bower.json +0 -29
  22. data/framework_components/monitoring-interface/bower_components/bower-mqttws/.bower.json +0 -23
  23. data/framework_components/monitoring-interface/bower_components/bower-mqttws/bower.json +0 -14
  24. data/framework_components/monitoring-interface/bower_components/bower-mqttws/mqttws31.js +0 -2081
  25. data/framework_components/monitoring-interface/bower_components/bower-mqttws/readme.md +0 -4
  26. data/framework_components/monitoring-interface/bower_components/nutella_lib/.bower.json +0 -37
  27. data/framework_components/monitoring-interface/bower_components/nutella_lib/LICENSE +0 -21
  28. data/framework_components/monitoring-interface/bower_components/nutella_lib/README.md +0 -15
  29. data/framework_components/monitoring-interface/bower_components/nutella_lib/bower.json +0 -28
  30. data/framework_components/monitoring-interface/bower_components/nutella_lib/examples/browser/mqtt_client_hello_world.html +0 -23
  31. data/framework_components/monitoring-interface/bower_components/nutella_lib/examples/browser/nutella_hello_world.html +0 -52
  32. data/framework_components/monitoring-interface/bower_components/nutella_lib/examples/node/mqtt_client_hello_world.js +0 -14
  33. data/framework_components/monitoring-interface/bower_components/nutella_lib/examples/node/nutella_hello_world.js +0 -38
  34. data/framework_components/monitoring-interface/bower_components/nutella_lib/nutella_lib.js +0 -789
  35. data/framework_components/monitoring-interface/bower_components/nutella_lib/package.json +0 -30
  36. data/framework_components/monitoring-interface/css/Monitoring Interface.html +0 -215
  37. data/framework_components/monitoring-interface/css/Monitoring Interface_files/animations.js +0 -27
  38. data/framework_components/monitoring-interface/css/Monitoring Interface_files/application-view-controller.js +0 -232
  39. data/framework_components/monitoring-interface/css/Monitoring Interface_files/applications-model.js +0 -61
  40. data/framework_components/monitoring-interface/css/Monitoring Interface_files/bootstrap.min.js +0 -7
  41. data/framework_components/monitoring-interface/css/Monitoring Interface_files/cursor.css +0 -7
  42. data/framework_components/monitoring-interface/css/Monitoring Interface_files/d3.v3.min.js +0 -5
  43. data/framework_components/monitoring-interface/css/Monitoring Interface_files/graphics.js +0 -156
  44. data/framework_components/monitoring-interface/css/Monitoring Interface_files/grid-layout.js +0 -103
  45. data/framework_components/monitoring-interface/css/Monitoring Interface_files/highlight.min.js +0 -2
  46. data/framework_components/monitoring-interface/css/Monitoring Interface_files/instance-view-controller.js +0 -104
  47. data/framework_components/monitoring-interface/css/Monitoring Interface_files/jquery-1.10.0.min.js +0 -6
  48. data/framework_components/monitoring-interface/css/Monitoring Interface_files/notification-center.js +0 -63
  49. data/framework_components/monitoring-interface/css/Monitoring Interface_files/notifications.js +0 -14
  50. data/framework_components/monitoring-interface/css/Monitoring Interface_files/page.css +0 -33
  51. data/framework_components/monitoring-interface/css/Monitoring Interface_files/radial-layout.js +0 -175
  52. data/framework_components/monitoring-interface/css/Monitoring Interface_files/tab-table.js +0 -8
  53. data/framework_components/monitoring-interface/css/Monitoring Interface_files/ui-application.css +0 -0
  54. data/framework_components/monitoring-interface/css/Monitoring Interface_files/ui-application.js +0 -320
  55. data/framework_components/monitoring-interface/css/Monitoring Interface_files/ui-connection-view.css +0 -10
  56. data/framework_components/monitoring-interface/css/Monitoring Interface_files/ui-connection-view.js +0 -426
  57. data/framework_components/monitoring-interface/css/Monitoring Interface_files/ui-element.js +0 -205
  58. data/framework_components/monitoring-interface/css/Monitoring Interface_files/ui-notification.js +0 -94
  59. data/framework_components/monitoring-interface/css/Monitoring Interface_files/ui-tab.js +0 -229
  60. data/framework_components/monitoring-interface/css/Monitoring Interface_files/underscore-min.js +0 -5
  61. data/framework_components/monitoring-interface/css/Monitoring Interface_files/view-controller.js +0 -68
  62. data/framework_components/monitoring-interface/css/Monitoring Interface_files/window-view-controller.js +0 -169
  63. data/framework_components/monitoring-interface/css/alerts.css +0 -3
  64. data/framework_components/monitoring-interface/css/bootstrap.min.css +0 -5
  65. data/framework_components/monitoring-interface/css/cursor.css +0 -7
  66. data/framework_components/monitoring-interface/css/highlight.default.min.css +0 -1
  67. data/framework_components/monitoring-interface/css/page.css +0 -41
  68. data/framework_components/monitoring-interface/css/ui-application.css +0 -0
  69. data/framework_components/monitoring-interface/css/ui-connection-view.css +0 -10
  70. data/framework_components/monitoring-interface/css/ui-legend-view.css +0 -7
  71. data/framework_components/monitoring-interface/data/alert.json +0 -8
  72. data/framework_components/monitoring-interface/data/data.json +0 -2118
  73. data/framework_components/monitoring-interface/data/data2.json +0 -814
  74. data/framework_components/monitoring-interface/data/data3.json +0 -823
  75. data/framework_components/monitoring-interface/data/data4.json +0 -848
  76. data/framework_components/monitoring-interface/data/message.json +0 -999
  77. data/framework_components/monitoring-interface/gulpfile.js +0 -29
  78. data/framework_components/monitoring-interface/img/arrow_white.svg +0 -120
  79. data/framework_components/monitoring-interface/img/arrow_white_right.svg +0 -104
  80. data/framework_components/monitoring-interface/img/back.svg +0 -164
  81. data/framework_components/monitoring-interface/img/cross_red_border_white.svg +0 -143
  82. data/framework_components/monitoring-interface/img/cross_red_border_white_mouseover.svg +0 -143
  83. data/framework_components/monitoring-interface/img/email.svg +0 -89
  84. data/framework_components/monitoring-interface/img/email_highlighted.svg +0 -89
  85. data/framework_components/monitoring-interface/index.html +0 -144
  86. data/framework_components/monitoring-interface/js/d3/layout/grid-layout.js +0 -103
  87. data/framework_components/monitoring-interface/js/d3/layout/radial-layout.js +0 -184
  88. data/framework_components/monitoring-interface/js/d3/plugin/graphics.js +0 -156
  89. data/framework_components/monitoring-interface/js/d3/plugin/tab-table.js +0 -8
  90. data/framework_components/monitoring-interface/js/d3/ui/animations.js +0 -27
  91. data/framework_components/monitoring-interface/js/d3/ui/ui-application.js +0 -471
  92. data/framework_components/monitoring-interface/js/d3/ui/ui-connection-view.js +0 -861
  93. data/framework_components/monitoring-interface/js/d3/ui/ui-element.js +0 -245
  94. data/framework_components/monitoring-interface/js/d3/ui/ui-legend.js +0 -174
  95. data/framework_components/monitoring-interface/js/d3/ui/ui-notification.js +0 -90
  96. data/framework_components/monitoring-interface/js/d3/ui/ui-tab.js +0 -309
  97. data/framework_components/monitoring-interface/js/lib/JSXTransformer-0.12.2.js +0 -15199
  98. data/framework_components/monitoring-interface/js/lib/bootstrap.min.js +0 -7
  99. data/framework_components/monitoring-interface/js/lib/d3.v3.min.js +0 -5
  100. data/framework_components/monitoring-interface/js/lib/highlight.min.js +0 -2
  101. data/framework_components/monitoring-interface/js/lib/jquery-1.10.0.min.js +0 -6
  102. data/framework_components/monitoring-interface/js/lib/nutella_lib.js +0 -5121
  103. data/framework_components/monitoring-interface/js/lib/react-with-addons-0.12.2.js +0 -19822
  104. data/framework_components/monitoring-interface/js/lib/underscore-min.js +0 -5
  105. data/framework_components/monitoring-interface/js/model/alerts-model.js +0 -74
  106. data/framework_components/monitoring-interface/js/model/applications-model.js +0 -78
  107. data/framework_components/monitoring-interface/js/model/messages-model.js +0 -112
  108. data/framework_components/monitoring-interface/js/notification/notification-center.js +0 -63
  109. data/framework_components/monitoring-interface/js/notification/notifications.js +0 -21
  110. data/framework_components/monitoring-interface/js/react/dist/ui-alerts.js +0 -178
  111. data/framework_components/monitoring-interface/js/react/dist/ui-message-send.js +0 -389
  112. data/framework_components/monitoring-interface/js/react/dist/ui-messages.js +0 -103
  113. data/framework_components/monitoring-interface/js/react/src/ui-alerts.js +0 -178
  114. data/framework_components/monitoring-interface/js/react/src/ui-message-send.js +0 -389
  115. data/framework_components/monitoring-interface/js/react/src/ui-messages.js +0 -103
  116. data/framework_components/monitoring-interface/js/view-controller/application-view-controller.js +0 -259
  117. data/framework_components/monitoring-interface/js/view-controller/instance-view-controller.js +0 -112
  118. data/framework_components/monitoring-interface/js/view-controller/view-controller.js +0 -74
  119. data/framework_components/monitoring-interface/js/view-controller/window-view-controller.js +0 -169
  120. data/framework_components/monitoring-interface/nutella.json +0 -6
  121. data/framework_components/room-places-beacon-cloud-interface/LICENSE +0 -21
  122. data/framework_components/room-places-beacon-cloud-interface/Readme.md +0 -0
  123. data/framework_components/room-places-beacon-cloud-interface/bower.json +0 -29
  124. data/framework_components/room-places-beacon-cloud-interface/bower_components/bower-mqttws/.bower.json +0 -23
  125. data/framework_components/room-places-beacon-cloud-interface/bower_components/bower-mqttws/bower.json +0 -14
  126. data/framework_components/room-places-beacon-cloud-interface/bower_components/bower-mqttws/mqttws31.js +0 -2081
  127. data/framework_components/room-places-beacon-cloud-interface/bower_components/bower-mqttws/readme.md +0 -4
  128. data/framework_components/room-places-beacon-cloud-interface/bower_components/nutella_lib/.bower.json +0 -37
  129. data/framework_components/room-places-beacon-cloud-interface/bower_components/nutella_lib/LICENSE +0 -21
  130. data/framework_components/room-places-beacon-cloud-interface/bower_components/nutella_lib/README.md +0 -15
  131. data/framework_components/room-places-beacon-cloud-interface/bower_components/nutella_lib/bower.json +0 -28
  132. data/framework_components/room-places-beacon-cloud-interface/bower_components/nutella_lib/examples/browser/mqtt_client_hello_world.html +0 -23
  133. data/framework_components/room-places-beacon-cloud-interface/bower_components/nutella_lib/examples/browser/nutella_hello_world.html +0 -52
  134. data/framework_components/room-places-beacon-cloud-interface/bower_components/nutella_lib/examples/node/mqtt_client_hello_world.js +0 -14
  135. data/framework_components/room-places-beacon-cloud-interface/bower_components/nutella_lib/examples/node/nutella_hello_world.js +0 -38
  136. data/framework_components/room-places-beacon-cloud-interface/bower_components/nutella_lib/nutella_lib.js +0 -789
  137. data/framework_components/room-places-beacon-cloud-interface/bower_components/nutella_lib/package.json +0 -30
  138. data/framework_components/room-places-beacon-cloud-interface/bower_components/nutella_lib/simple-js-mqtt-client.js +0 -428
  139. data/framework_components/room-places-beacon-cloud-interface/css/animation.css +0 -17
  140. data/framework_components/room-places-beacon-cloud-interface/css/cursor.css +0 -16
  141. data/framework_components/room-places-beacon-cloud-interface/css/page_layout.css +0 -73
  142. data/framework_components/room-places-beacon-cloud-interface/index.html +0 -157
  143. data/framework_components/room-places-beacon-cloud-interface/js/lib/nutella_lib.js +0 -5121
  144. data/framework_components/room-places-beacon-cloud-interface/js/react/beacon-add.js +0 -102
  145. data/framework_components/room-places-beacon-cloud-interface/js/react/beacon-table.js +0 -73
  146. data/framework_components/room-places-beacon-cloud-interface/js/react/beacon.js +0 -97
  147. data/framework_components/room-places-beacon-cloud-interface/nutella.json +0 -6
  148. data/framework_components/room-places-bot/.gitignore +0 -4
  149. data/framework_components/room-places-bot/Gemfile +0 -3
  150. data/framework_components/room-places-bot/README.md +0 -66
  151. data/framework_components/room-places-bot/nutella.json +0 -6
  152. data/framework_components/room-places-bot/room_places_bot.rb +0 -766
  153. data/framework_components/room-places-bot/startup +0 -6
  154. data/framework_components/room-places-bot/virtual_beacons.rb +0 -124
  155. data/framework_components/room-places-interface/.gitignore +0 -3
  156. data/framework_components/room-places-interface/LICENSE +0 -21
  157. data/framework_components/room-places-interface/Readme.md +0 -0
  158. data/framework_components/room-places-interface/bower.json +0 -29
  159. data/framework_components/room-places-interface/bower_components/bower-mqttws/.bower.json +0 -23
  160. data/framework_components/room-places-interface/bower_components/bower-mqttws/bower.json +0 -14
  161. data/framework_components/room-places-interface/bower_components/bower-mqttws/mqttws31.js +0 -2081
  162. data/framework_components/room-places-interface/bower_components/bower-mqttws/readme.md +0 -4
  163. data/framework_components/room-places-interface/bower_components/nutella_lib/.bower.json +0 -37
  164. data/framework_components/room-places-interface/bower_components/nutella_lib/LICENSE +0 -21
  165. data/framework_components/room-places-interface/bower_components/nutella_lib/README.md +0 -15
  166. data/framework_components/room-places-interface/bower_components/nutella_lib/bower.json +0 -28
  167. data/framework_components/room-places-interface/bower_components/nutella_lib/examples/browser/mqtt_client_hello_world.html +0 -23
  168. data/framework_components/room-places-interface/bower_components/nutella_lib/examples/browser/nutella_hello_world.html +0 -52
  169. data/framework_components/room-places-interface/bower_components/nutella_lib/examples/node/mqtt_client_hello_world.js +0 -14
  170. data/framework_components/room-places-interface/bower_components/nutella_lib/examples/node/nutella_hello_world.js +0 -38
  171. data/framework_components/room-places-interface/bower_components/nutella_lib/nutella_lib.js +0 -789
  172. data/framework_components/room-places-interface/bower_components/nutella_lib/package.json +0 -30
  173. data/framework_components/room-places-interface/css/animation.css +0 -22
  174. data/framework_components/room-places-interface/css/bootstrap.min.css +0 -5
  175. data/framework_components/room-places-interface/css/cursor.css +0 -22
  176. data/framework_components/room-places-interface/css/font-awesome/css/font-awesome.css +0 -1801
  177. data/framework_components/room-places-interface/css/font-awesome/css/font-awesome.min.css +0 -4
  178. data/framework_components/room-places-interface/css/font-awesome/fonts/FontAwesome.otf +0 -0
  179. data/framework_components/room-places-interface/css/font-awesome/fonts/fontawesome-webfont.eot +0 -0
  180. data/framework_components/room-places-interface/css/font-awesome/fonts/fontawesome-webfont.svg +0 -565
  181. data/framework_components/room-places-interface/css/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
  182. data/framework_components/room-places-interface/css/font-awesome/fonts/fontawesome-webfont.woff +0 -0
  183. data/framework_components/room-places-interface/css/font-awesome/fonts/fontawesome-webfont.woff2 +0 -0
  184. data/framework_components/room-places-interface/css/font-awesome/less/animated.less +0 -34
  185. data/framework_components/room-places-interface/css/font-awesome/less/bordered-pulled.less +0 -16
  186. data/framework_components/room-places-interface/css/font-awesome/less/core.less +0 -13
  187. data/framework_components/room-places-interface/css/font-awesome/less/fixed-width.less +0 -6
  188. data/framework_components/room-places-interface/css/font-awesome/less/font-awesome.less +0 -17
  189. data/framework_components/room-places-interface/css/font-awesome/less/icons.less +0 -596
  190. data/framework_components/room-places-interface/css/font-awesome/less/larger.less +0 -13
  191. data/framework_components/room-places-interface/css/font-awesome/less/list.less +0 -19
  192. data/framework_components/room-places-interface/css/font-awesome/less/mixins.less +0 -27
  193. data/framework_components/room-places-interface/css/font-awesome/less/path.less +0 -15
  194. data/framework_components/room-places-interface/css/font-awesome/less/rotated-flipped.less +0 -20
  195. data/framework_components/room-places-interface/css/font-awesome/less/stacked.less +0 -20
  196. data/framework_components/room-places-interface/css/font-awesome/less/variables.less +0 -606
  197. data/framework_components/room-places-interface/css/font-awesome/scss/_animated.scss +0 -34
  198. data/framework_components/room-places-interface/css/font-awesome/scss/_bordered-pulled.scss +0 -16
  199. data/framework_components/room-places-interface/css/font-awesome/scss/_core.scss +0 -13
  200. data/framework_components/room-places-interface/css/font-awesome/scss/_fixed-width.scss +0 -6
  201. data/framework_components/room-places-interface/css/font-awesome/scss/_icons.scss +0 -596
  202. data/framework_components/room-places-interface/css/font-awesome/scss/_larger.scss +0 -13
  203. data/framework_components/room-places-interface/css/font-awesome/scss/_list.scss +0 -19
  204. data/framework_components/room-places-interface/css/font-awesome/scss/_mixins.scss +0 -27
  205. data/framework_components/room-places-interface/css/font-awesome/scss/_path.scss +0 -15
  206. data/framework_components/room-places-interface/css/font-awesome/scss/_rotated-flipped.scss +0 -20
  207. data/framework_components/room-places-interface/css/font-awesome/scss/_stacked.scss +0 -20
  208. data/framework_components/room-places-interface/css/font-awesome/scss/_variables.scss +0 -606
  209. data/framework_components/room-places-interface/css/font-awesome/scss/font-awesome.scss +0 -17
  210. data/framework_components/room-places-interface/css/icomoon.css +0 -57
  211. data/framework_components/room-places-interface/css/page_layout.css +0 -82
  212. data/framework_components/room-places-interface/fonts/glyphicons-halflings-regular.eot +0 -0
  213. data/framework_components/room-places-interface/fonts/glyphicons-halflings-regular.svg +0 -288
  214. data/framework_components/room-places-interface/fonts/glyphicons-halflings-regular.ttf +0 -0
  215. data/framework_components/room-places-interface/fonts/glyphicons-halflings-regular.woff +0 -0
  216. data/framework_components/room-places-interface/fonts/glyphicons-halflings-regular.woff2 +0 -0
  217. data/framework_components/room-places-interface/fonts/icomoon.eot +0 -0
  218. data/framework_components/room-places-interface/fonts/icomoon.svg +0 -17
  219. data/framework_components/room-places-interface/fonts/icomoon.ttf +0 -0
  220. data/framework_components/room-places-interface/fonts/icomoon.woff +0 -0
  221. data/framework_components/room-places-interface/gulpfile.js +0 -24
  222. data/framework_components/room-places-interface/index.html +0 -73
  223. data/framework_components/room-places-interface/index2.html +0 -1753
  224. data/framework_components/room-places-interface/js/component.js +0 -438
  225. data/framework_components/room-places-interface/js/lib/JSXTransformer-0.12.2.js +0 -15199
  226. data/framework_components/room-places-interface/js/lib/bootstrap.min.js +0 -7
  227. data/framework_components/room-places-interface/js/lib/d3.v3.min.js +0 -5
  228. data/framework_components/room-places-interface/js/lib/jquery-1.10.0.min.js +0 -6
  229. data/framework_components/room-places-interface/js/lib/nutella_lib.js +0 -4145
  230. data/framework_components/room-places-interface/js/lib/react-with-addons-0.12.2.js +0 -19822
  231. data/framework_components/room-places-interface/js/lib/underscore.js +0 -6
  232. data/framework_components/room-places-interface/js/map.js +0 -1593
  233. data/framework_components/room-places-interface/js/position.js +0 -6
  234. data/framework_components/room-places-interface/js/react/dist/beacon.js +0 -30
  235. data/framework_components/room-places-interface/js/react/dist/discrete.js +0 -282
  236. data/framework_components/room-places-interface/js/react/dist/interactive-label.js +0 -54
  237. data/framework_components/room-places-interface/js/react/dist/resource-add.js +0 -203
  238. data/framework_components/room-places-interface/js/react/dist/resource-table.js +0 -227
  239. data/framework_components/room-places-interface/js/react/dist/resource.js +0 -433
  240. data/framework_components/room-places-interface/js/react/src/beacon.js +0 -30
  241. data/framework_components/room-places-interface/js/react/src/discrete.js +0 -282
  242. data/framework_components/room-places-interface/js/react/src/interactive-label.js +0 -54
  243. data/framework_components/room-places-interface/js/react/src/resource-add.js +0 -203
  244. data/framework_components/room-places-interface/js/react/src/resource-table.js +0 -227
  245. data/framework_components/room-places-interface/js/react/src/resource.js +0 -433
  246. data/framework_components/room-places-interface/js/room.js +0 -65
  247. data/framework_components/room-places-interface/nutella.json +0 -6
  248. data/framework_components/roomcast-bot/data/default/channels.json +0 -1
  249. data/framework_components/roomcast-bot/data/default/configs.json +0 -1
  250. data/framework_components/roomcast-bot/roomcast_bot.rb +0 -284
  251. data/framework_components/roomcast-bot/startup +0 -6
  252. data/framework_components/roomcast-channel-creator/.gitignore +0 -2
  253. data/framework_components/roomcast-channel-creator/README.md +0 -9
  254. data/framework_components/roomcast-channel-creator/dist/app.js +0 -44376
  255. data/framework_components/roomcast-channel-creator/dist/css/font-awesome.min.css +0 -4
  256. data/framework_components/roomcast-channel-creator/dist/css/ionicons.min.css +0 -11
  257. data/framework_components/roomcast-channel-creator/dist/fonts/FontAwesome.otf +0 -0
  258. data/framework_components/roomcast-channel-creator/dist/fonts/fontawesome-webfont.eot +0 -0
  259. data/framework_components/roomcast-channel-creator/dist/fonts/fontawesome-webfont.svg +0 -565
  260. data/framework_components/roomcast-channel-creator/dist/fonts/fontawesome-webfont.ttf +0 -0
  261. data/framework_components/roomcast-channel-creator/dist/fonts/fontawesome-webfont.woff +0 -0
  262. data/framework_components/roomcast-channel-creator/dist/fonts/fontawesome-webfont.woff2 +0 -0
  263. data/framework_components/roomcast-channel-creator/dist/fonts/ionicons.eot +0 -0
  264. data/framework_components/roomcast-channel-creator/dist/fonts/ionicons.svg +0 -2230
  265. data/framework_components/roomcast-channel-creator/dist/fonts/ionicons.ttf +0 -0
  266. data/framework_components/roomcast-channel-creator/dist/fonts/ionicons.woff +0 -0
  267. data/framework_components/roomcast-channel-creator/dist/main.css +0 -3310
  268. data/framework_components/roomcast-channel-creator/dist/nutella_lib.js +0 -5128
  269. data/framework_components/roomcast-channel-creator/gulp/config.js +0 -51
  270. data/framework_components/roomcast-channel-creator/gulp/tasks/browserify.js +0 -77
  271. data/framework_components/roomcast-channel-creator/gulp/tasks/build.js +0 -3
  272. data/framework_components/roomcast-channel-creator/gulp/tasks/css.js +0 -7
  273. data/framework_components/roomcast-channel-creator/gulp/tasks/default.js +0 -3
  274. data/framework_components/roomcast-channel-creator/gulp/tasks/fonts.js +0 -7
  275. data/framework_components/roomcast-channel-creator/gulp/tasks/less.js +0 -16
  276. data/framework_components/roomcast-channel-creator/gulp/tasks/mui-fonts.js +0 -7
  277. data/framework_components/roomcast-channel-creator/gulp/tasks/nutella.js +0 -7
  278. data/framework_components/roomcast-channel-creator/gulp/tasks/setWatch.js +0 -5
  279. data/framework_components/roomcast-channel-creator/gulp/tasks/svgs.js +0 -7
  280. data/framework_components/roomcast-channel-creator/gulp/tasks/watch.js +0 -12
  281. data/framework_components/roomcast-channel-creator/gulp/util/bundleLogger.js +0 -21
  282. data/framework_components/roomcast-channel-creator/gulp/util/handleErrors.js +0 -15
  283. data/framework_components/roomcast-channel-creator/gulpfile.js +0 -16
  284. data/framework_components/roomcast-channel-creator/index.html +0 -40
  285. data/framework_components/roomcast-channel-creator/nutella.json +0 -6
  286. data/framework_components/roomcast-channel-creator/package.json +0 -38
  287. data/framework_components/roomcast-channel-creator/roomcast-default.png +0 -0
  288. data/framework_components/roomcast-channel-creator/src/app/app.js +0 -28
  289. data/framework_components/roomcast-channel-creator/src/app/components/AnimationMixin.js +0 -44
  290. data/framework_components/roomcast-channel-creator/src/app/components/CataloguePage.js +0 -148
  291. data/framework_components/roomcast-channel-creator/src/app/components/Channel.js +0 -406
  292. data/framework_components/roomcast-channel-creator/src/app/components/ColorCell.js +0 -28
  293. data/framework_components/roomcast-channel-creator/src/app/components/ColorPicker.js +0 -53
  294. data/framework_components/roomcast-channel-creator/src/app/components/DetailPage.js +0 -66
  295. data/framework_components/roomcast-channel-creator/src/app/components/NutellaMixin.js +0 -40
  296. data/framework_components/roomcast-channel-creator/src/app/components/PageSliderMixin.js +0 -68
  297. data/framework_components/roomcast-channel-creator/src/app/components/Router.js +0 -52
  298. data/framework_components/roomcast-channel-creator/src/app/components/TopBar.js +0 -86
  299. data/framework_components/roomcast-channel-creator/src/app/components/UploadingScreen.js +0 -74
  300. data/framework_components/roomcast-channel-creator/src/app/components/main.js +0 -342
  301. data/framework_components/roomcast-channel-creator/src/css/font-awesome.min.css +0 -4
  302. data/framework_components/roomcast-channel-creator/src/css/ionicons.min.css +0 -11
  303. data/framework_components/roomcast-channel-creator/src/fonts/FontAwesome.otf +0 -0
  304. data/framework_components/roomcast-channel-creator/src/fonts/fontawesome-webfont.eot +0 -0
  305. data/framework_components/roomcast-channel-creator/src/fonts/fontawesome-webfont.svg +0 -565
  306. data/framework_components/roomcast-channel-creator/src/fonts/fontawesome-webfont.ttf +0 -0
  307. data/framework_components/roomcast-channel-creator/src/fonts/fontawesome-webfont.woff +0 -0
  308. data/framework_components/roomcast-channel-creator/src/fonts/fontawesome-webfont.woff2 +0 -0
  309. data/framework_components/roomcast-channel-creator/src/fonts/ionicons.eot +0 -0
  310. data/framework_components/roomcast-channel-creator/src/fonts/ionicons.svg +0 -2230
  311. data/framework_components/roomcast-channel-creator/src/fonts/ionicons.ttf +0 -0
  312. data/framework_components/roomcast-channel-creator/src/fonts/ionicons.woff +0 -0
  313. data/framework_components/roomcast-channel-creator/src/less/main.less +0 -506
  314. data/framework_components/roomcast-channel-creator/src/less/my_overrides.less +0 -14
  315. data/framework_components/roomcast-channel-creator/upload.svg +0 -216
  316. data/framework_components/roomcast-main-app/.gitignore +0 -2
  317. data/framework_components/roomcast-main-app/README.md +0 -9
  318. data/framework_components/roomcast-main-app/dist/LICENSE +0 -21
  319. data/framework_components/roomcast-main-app/dist/app.js +0 -54373
  320. data/framework_components/roomcast-main-app/dist/assets/Logo.png +0 -0
  321. data/framework_components/roomcast-main-app/dist/assets/Logo_alpha.png +0 -0
  322. data/framework_components/roomcast-main-app/dist/assets/Logo_grid.svg +0 -216
  323. data/framework_components/roomcast-main-app/dist/css/ionicons.min.css +0 -11
  324. data/framework_components/roomcast-main-app/dist/fonts/ionicons.eot +0 -0
  325. data/framework_components/roomcast-main-app/dist/fonts/ionicons.svg +0 -2230
  326. data/framework_components/roomcast-main-app/dist/fonts/ionicons.ttf +0 -0
  327. data/framework_components/roomcast-main-app/dist/fonts/ionicons.woff +0 -0
  328. data/framework_components/roomcast-main-app/dist/main.css +0 -3234
  329. data/framework_components/roomcast-main-app/gulp/config.js +0 -47
  330. data/framework_components/roomcast-main-app/gulp/tasks/browserify.js +0 -77
  331. data/framework_components/roomcast-main-app/gulp/tasks/build.js +0 -3
  332. data/framework_components/roomcast-main-app/gulp/tasks/css.js +0 -7
  333. data/framework_components/roomcast-main-app/gulp/tasks/default.js +0 -3
  334. data/framework_components/roomcast-main-app/gulp/tasks/fonts.js +0 -7
  335. data/framework_components/roomcast-main-app/gulp/tasks/less.js +0 -16
  336. data/framework_components/roomcast-main-app/gulp/tasks/markup.js +0 -7
  337. data/framework_components/roomcast-main-app/gulp/tasks/setWatch.js +0 -5
  338. data/framework_components/roomcast-main-app/gulp/tasks/svgs.js +0 -7
  339. data/framework_components/roomcast-main-app/gulp/tasks/watch.js +0 -12
  340. data/framework_components/roomcast-main-app/gulp/util/bundleLogger.js +0 -21
  341. data/framework_components/roomcast-main-app/gulp/util/handleErrors.js +0 -15
  342. data/framework_components/roomcast-main-app/gulpfile.js +0 -16
  343. data/framework_components/roomcast-main-app/index.html +0 -37
  344. data/framework_components/roomcast-main-app/nutella.json +0 -6
  345. data/framework_components/roomcast-main-app/package.json +0 -47
  346. data/framework_components/roomcast-main-app/roomcast-default.png +0 -0
  347. data/framework_components/roomcast-main-app/src/app/app.js +0 -15
  348. data/framework_components/roomcast-main-app/src/app/components/NutellaMixin.js +0 -56
  349. data/framework_components/roomcast-main-app/src/app/components/app/Channel.js +0 -68
  350. data/framework_components/roomcast-main-app/src/app/components/app/Player.js +0 -139
  351. data/framework_components/roomcast-main-app/src/app/components/app/iOSMixin.js +0 -22
  352. data/framework_components/roomcast-main-app/src/app/components/app/main.js +0 -567
  353. data/framework_components/roomcast-main-app/src/app/components/app/material-ui/menu-item.jsx +0 -79
  354. data/framework_components/roomcast-main-app/src/app/components/app/material-ui/menu.jsx +0 -177
  355. data/framework_components/roomcast-main-app/src/app/components/app/material-ui/overlay.jsx +0 -21
  356. data/framework_components/roomcast-main-app/src/app/components/app/material-ui/right-nav.jsx +0 -108
  357. data/framework_components/roomcast-main-app/src/app/components/identity-selector/IdentitiesGrid.js +0 -95
  358. data/framework_components/roomcast-main-app/src/app/components/identity-selector/IdentityCard.js +0 -103
  359. data/framework_components/roomcast-main-app/src/app/components/identity-selector/iOSMixin.js +0 -19
  360. data/framework_components/roomcast-main-app/src/app/components/identity-selector/main.js +0 -109
  361. data/framework_components/roomcast-main-app/src/app/components/login/AppIdPage.js +0 -97
  362. data/framework_components/roomcast-main-app/src/app/components/login/BrokerPage.js +0 -139
  363. data/framework_components/roomcast-main-app/src/app/components/login/IdentitiesGrid.js +0 -93
  364. data/framework_components/roomcast-main-app/src/app/components/login/IdentityCard.js +0 -99
  365. data/framework_components/roomcast-main-app/src/app/components/login/RunIdPage.js +0 -78
  366. data/framework_components/roomcast-main-app/src/app/components/login/iOSMixin.js +0 -23
  367. data/framework_components/roomcast-main-app/src/app/components/login/main.js +0 -125
  368. data/framework_components/roomcast-main-app/src/app/components/main.js +0 -64
  369. data/framework_components/roomcast-main-app/src/less/main.less +0 -365
  370. data/framework_components/roomcast-main-app/src/less/my_overrides.less +0 -53
  371. data/framework_components/roomcast-main-app/src/less/right-nav.less +0 -31
  372. data/framework_components/roomcast-package-creator/.gitignore +0 -2
  373. data/framework_components/roomcast-package-creator/README.md +0 -9
  374. data/framework_components/roomcast-package-creator/dist/app.js +0 -51196
  375. data/framework_components/roomcast-package-creator/dist/css/font-awesome.min.css +0 -4
  376. data/framework_components/roomcast-package-creator/dist/css/ionicons.min.css +0 -11
  377. data/framework_components/roomcast-package-creator/dist/fonts/FontAwesome.otf +0 -0
  378. data/framework_components/roomcast-package-creator/dist/fonts/fontawesome-webfont.eot +0 -0
  379. data/framework_components/roomcast-package-creator/dist/fonts/fontawesome-webfont.svg +0 -565
  380. data/framework_components/roomcast-package-creator/dist/fonts/fontawesome-webfont.ttf +0 -0
  381. data/framework_components/roomcast-package-creator/dist/fonts/fontawesome-webfont.woff +0 -0
  382. data/framework_components/roomcast-package-creator/dist/fonts/fontawesome-webfont.woff2 +0 -0
  383. data/framework_components/roomcast-package-creator/dist/fonts/ionicons.eot +0 -0
  384. data/framework_components/roomcast-package-creator/dist/fonts/ionicons.svg +0 -2230
  385. data/framework_components/roomcast-package-creator/dist/fonts/ionicons.ttf +0 -0
  386. data/framework_components/roomcast-package-creator/dist/fonts/ionicons.woff +0 -0
  387. data/framework_components/roomcast-package-creator/dist/fonts/material-ui-icons.eot +0 -0
  388. data/framework_components/roomcast-package-creator/dist/fonts/material-ui-icons.svg +0 -14
  389. data/framework_components/roomcast-package-creator/dist/fonts/material-ui-icons.ttf +0 -0
  390. data/framework_components/roomcast-package-creator/dist/fonts/material-ui-icons.woff +0 -0
  391. data/framework_components/roomcast-package-creator/dist/main.css +0 -5682
  392. data/framework_components/roomcast-package-creator/dist/nutella_lib.js +0 -5128
  393. data/framework_components/roomcast-package-creator/gulp/config.js +0 -51
  394. data/framework_components/roomcast-package-creator/gulp/tasks/browserify.js +0 -77
  395. data/framework_components/roomcast-package-creator/gulp/tasks/build.js +0 -3
  396. data/framework_components/roomcast-package-creator/gulp/tasks/css.js +0 -7
  397. data/framework_components/roomcast-package-creator/gulp/tasks/default.js +0 -3
  398. data/framework_components/roomcast-package-creator/gulp/tasks/fonts.js +0 -7
  399. data/framework_components/roomcast-package-creator/gulp/tasks/less.js +0 -16
  400. data/framework_components/roomcast-package-creator/gulp/tasks/mui-fonts.js +0 -7
  401. data/framework_components/roomcast-package-creator/gulp/tasks/nutella.js +0 -7
  402. data/framework_components/roomcast-package-creator/gulp/tasks/setWatch.js +0 -5
  403. data/framework_components/roomcast-package-creator/gulp/tasks/svgs.js +0 -7
  404. data/framework_components/roomcast-package-creator/gulp/tasks/watch.js +0 -12
  405. data/framework_components/roomcast-package-creator/gulp/util/bundleLogger.js +0 -21
  406. data/framework_components/roomcast-package-creator/gulp/util/handleErrors.js +0 -15
  407. data/framework_components/roomcast-package-creator/gulpfile.js +0 -16
  408. data/framework_components/roomcast-package-creator/index.html +0 -38
  409. data/framework_components/roomcast-package-creator/nutella.json +0 -6
  410. data/framework_components/roomcast-package-creator/package.json +0 -39
  411. data/framework_components/roomcast-package-creator/roomcast-default.png +0 -0
  412. data/framework_components/roomcast-package-creator/src/app/app.js +0 -30
  413. data/framework_components/roomcast-package-creator/src/app/components/ButtonInteractionsMixin.js +0 -45
  414. data/framework_components/roomcast-package-creator/src/app/components/ChannelCard.js +0 -100
  415. data/framework_components/roomcast-package-creator/src/app/components/ChannelItem.js +0 -71
  416. data/framework_components/roomcast-package-creator/src/app/components/ChannelsCatalogue.js +0 -51
  417. data/framework_components/roomcast-package-creator/src/app/components/ChannelsPanel.js +0 -127
  418. data/framework_components/roomcast-package-creator/src/app/components/ConfigField.js +0 -50
  419. data/framework_components/roomcast-package-creator/src/app/components/ConfigurationsPanel.js +0 -112
  420. data/framework_components/roomcast-package-creator/src/app/components/ContextButton.js +0 -37
  421. data/framework_components/roomcast-package-creator/src/app/components/GlobalButton.js +0 -28
  422. data/framework_components/roomcast-package-creator/src/app/components/NutellaMixin.js +0 -58
  423. data/framework_components/roomcast-package-creator/src/app/components/PoolHeader.js +0 -67
  424. data/framework_components/roomcast-package-creator/src/app/components/PoolRow.js +0 -160
  425. data/framework_components/roomcast-package-creator/src/app/components/ResourceFamilyPool.js +0 -168
  426. data/framework_components/roomcast-package-creator/src/app/components/ResourcesPanel.js +0 -76
  427. data/framework_components/roomcast-package-creator/src/app/components/main.js +0 -239
  428. data/framework_components/roomcast-package-creator/src/app/components/material-ui/dialog_.jsx +0 -66
  429. data/framework_components/roomcast-package-creator/src/app/components/material-ui/drop-down-menu.jsx +0 -159
  430. data/framework_components/roomcast-package-creator/src/app/components/material-ui/enhanced-textarea.jsx +0 -113
  431. data/framework_components/roomcast-package-creator/src/app/components/material-ui/floating-action-button_.jsx +0 -73
  432. data/framework_components/roomcast-package-creator/src/app/components/material-ui/menu-item.jsx +0 -100
  433. data/framework_components/roomcast-package-creator/src/app/components/material-ui/menu.jsx +0 -211
  434. data/framework_components/roomcast-package-creator/src/app/components/material-ui/overlay.jsx +0 -21
  435. data/framework_components/roomcast-package-creator/src/app/components/material-ui/raised-button_.jsx +0 -72
  436. data/framework_components/roomcast-package-creator/src/app/components/material-ui/right-nav.jsx +0 -108
  437. data/framework_components/roomcast-package-creator/src/app/components/material-ui/ripple.jsx +0 -52
  438. data/framework_components/roomcast-package-creator/src/app/components/material-ui/svg-icons/drop-down-arrow.jsx +0 -17
  439. data/framework_components/roomcast-package-creator/src/app/components/material-ui/svg-icons/navigation-chevron-left.jsx +0 -16
  440. data/framework_components/roomcast-package-creator/src/app/components/material-ui/svg-icons/navigation-chevron-right.jsx +0 -17
  441. data/framework_components/roomcast-package-creator/src/app/components/material-ui/svg-icons/navigation-menu.jsx +0 -16
  442. data/framework_components/roomcast-package-creator/src/app/components/material-ui/svg-icons/svg-icon.jsx +0 -23
  443. data/framework_components/roomcast-package-creator/src/app/components/material-ui/svg-icons/toggle-check-box-checked.jsx +0 -16
  444. data/framework_components/roomcast-package-creator/src/app/components/material-ui/svg-icons/toggle-check-box-outline-blank.jsx +0 -16
  445. data/framework_components/roomcast-package-creator/src/app/components/material-ui/svg-icons/toggle-radio-button-off.jsx +0 -16
  446. data/framework_components/roomcast-package-creator/src/app/components/material-ui/svg-icons/toggle-radio-button-on.jsx +0 -16
  447. data/framework_components/roomcast-package-creator/src/app/components/material-ui/text-field.jsx +0 -215
  448. data/framework_components/roomcast-package-creator/src/app/components/material-ui/utils/css-event.js +0 -52
  449. data/framework_components/roomcast-package-creator/src/app/components/material-ui/utils/date-time.js +0 -132
  450. data/framework_components/roomcast-package-creator/src/app/components/material-ui/utils/dom.js +0 -71
  451. data/framework_components/roomcast-package-creator/src/app/components/material-ui/utils/events.js +0 -34
  452. data/framework_components/roomcast-package-creator/src/app/components/material-ui/utils/key-code.js +0 -10
  453. data/framework_components/roomcast-package-creator/src/app/components/material-ui/utils/key-line.js +0 -13
  454. data/framework_components/roomcast-package-creator/src/app/components/material-ui/utils/unique-id.js +0 -7
  455. data/framework_components/roomcast-package-creator/src/css/font-awesome.min.css +0 -4
  456. data/framework_components/roomcast-package-creator/src/css/ionicons.min.css +0 -11
  457. data/framework_components/roomcast-package-creator/src/fonts/FontAwesome.otf +0 -0
  458. data/framework_components/roomcast-package-creator/src/fonts/fontawesome-webfont.eot +0 -0
  459. data/framework_components/roomcast-package-creator/src/fonts/fontawesome-webfont.svg +0 -565
  460. data/framework_components/roomcast-package-creator/src/fonts/fontawesome-webfont.ttf +0 -0
  461. data/framework_components/roomcast-package-creator/src/fonts/fontawesome-webfont.woff +0 -0
  462. data/framework_components/roomcast-package-creator/src/fonts/fontawesome-webfont.woff2 +0 -0
  463. data/framework_components/roomcast-package-creator/src/fonts/ionicons.eot +0 -0
  464. data/framework_components/roomcast-package-creator/src/fonts/ionicons.svg +0 -2230
  465. data/framework_components/roomcast-package-creator/src/fonts/ionicons.ttf +0 -0
  466. data/framework_components/roomcast-package-creator/src/fonts/ionicons.woff +0 -0
  467. data/framework_components/roomcast-package-creator/src/less/drop-down-icon.less +0 -43
  468. data/framework_components/roomcast-package-creator/src/less/drop-down-menu.less +0 -77
  469. data/framework_components/roomcast-package-creator/src/less/enhanced-textarea.less +0 -16
  470. data/framework_components/roomcast-package-creator/src/less/main.less +0 -514
  471. data/framework_components/roomcast-package-creator/src/less/menu-item.less +0 -71
  472. data/framework_components/roomcast-package-creator/src/less/menu.less +0 -50
  473. data/framework_components/roomcast-package-creator/src/less/my_overrides.less +0 -15
  474. data/framework_components/roomcast-package-creator/src/less/svg-icon.less +0 -11
  475. data/framework_components/roomcast-package-creator/src/less/text-field.less +0 -168
  476. data/framework_components/roomcast-teacher-controls/.gitignore +0 -2
  477. data/framework_components/roomcast-teacher-controls/README.md +0 -9
  478. data/framework_components/roomcast-teacher-controls/dist/app.js +0 -43614
  479. data/framework_components/roomcast-teacher-controls/dist/main.css +0 -3043
  480. data/framework_components/roomcast-teacher-controls/dist/nutella_lib.js +0 -5128
  481. data/framework_components/roomcast-teacher-controls/gulp/config.js +0 -51
  482. data/framework_components/roomcast-teacher-controls/gulp/tasks/browserify.js +0 -77
  483. data/framework_components/roomcast-teacher-controls/gulp/tasks/build.js +0 -3
  484. data/framework_components/roomcast-teacher-controls/gulp/tasks/css.js +0 -7
  485. data/framework_components/roomcast-teacher-controls/gulp/tasks/default.js +0 -3
  486. data/framework_components/roomcast-teacher-controls/gulp/tasks/fonts.js +0 -7
  487. data/framework_components/roomcast-teacher-controls/gulp/tasks/less.js +0 -16
  488. data/framework_components/roomcast-teacher-controls/gulp/tasks/mui-fonts.js +0 -7
  489. data/framework_components/roomcast-teacher-controls/gulp/tasks/nutella.js +0 -7
  490. data/framework_components/roomcast-teacher-controls/gulp/tasks/setWatch.js +0 -5
  491. data/framework_components/roomcast-teacher-controls/gulp/tasks/svgs.js +0 -7
  492. data/framework_components/roomcast-teacher-controls/gulp/tasks/watch.js +0 -12
  493. data/framework_components/roomcast-teacher-controls/gulp/util/bundleLogger.js +0 -21
  494. data/framework_components/roomcast-teacher-controls/gulp/util/handleErrors.js +0 -15
  495. data/framework_components/roomcast-teacher-controls/gulpfile.js +0 -16
  496. data/framework_components/roomcast-teacher-controls/index.html +0 -37
  497. data/framework_components/roomcast-teacher-controls/nutella.json +0 -6
  498. data/framework_components/roomcast-teacher-controls/package.json +0 -38
  499. data/framework_components/roomcast-teacher-controls/src/app/app.js +0 -28
  500. data/framework_components/roomcast-teacher-controls/src/app/components/ActivitiesGrid.js +0 -87
  501. data/framework_components/roomcast-teacher-controls/src/app/components/ActivityCard.js +0 -183
  502. data/framework_components/roomcast-teacher-controls/src/app/components/Footer.js +0 -37
  503. data/framework_components/roomcast-teacher-controls/src/app/components/NutellaMixin.js +0 -58
  504. data/framework_components/roomcast-teacher-controls/src/app/components/main.js +0 -125
  505. data/framework_components/roomcast-teacher-controls/src/less/main.less +0 -196
  506. data/framework_components/roomcast-teacher-controls/src/less/my_overrides.less +0 -14
@@ -1,4 +0,0 @@
1
- bower-mqttws
2
- ============
3
-
4
- Bower package for http://git.eclipse.org/c/paho/org.eclipse.paho.mqtt.javascript.git/tree/src/mqttws31.js
@@ -1,37 +0,0 @@
1
- {
2
- "name": "nutella_lib",
3
- "main": "nutella_lib.js",
4
- "version": "0.3.0",
5
- "authors": [
6
- "Alessandro Gnoli <tebemis@gmail.com>"
7
- ],
8
- "description": "Nutella library for JavaScript",
9
- "moduleType": [
10
- "node"
11
- ],
12
- "keywords": [
13
- "nutella",
14
- "framework"
15
- ],
16
- "license": "MIT",
17
- "homepage": "https://github.com/nutella-framework/nutella_lib.js",
18
- "ignore": [
19
- "**/.*",
20
- "node_modules",
21
- "bower_components",
22
- "test",
23
- "tests"
24
- ],
25
- "dependencies": {
26
- "bower-mqttws": "=1.0.0"
27
- },
28
- "_release": "0.3.0",
29
- "_resolution": {
30
- "type": "version",
31
- "tag": "v0.3.0",
32
- "commit": "f4e4c045b460b31835f122a8422c78ba4b2a32d8"
33
- },
34
- "_source": "git://github.com/nutella-framework/nutella_lib.js.git",
35
- "_target": "~0.3.0",
36
- "_originalSource": "nutella_lib"
37
- }
@@ -1,21 +0,0 @@
1
- The MIT License (MIT)
2
-
3
- Copyright (c) 2014 by The Board of Trustees of the University of Illinois at Chicago
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
@@ -1,15 +0,0 @@
1
- [![Build Status](https://travis-ci.org/nutella-framework/nutella_lib.js.svg?branch=master)](https://travis-ci.org/nutella-framework/nutella_lib.js)
2
-
3
- # nutella library for node.js and the browser
4
-
5
- ## Installation
6
- On node.js do
7
- ```
8
- npm install nutella_lib
9
- ```
10
-
11
- On the browser using Bower do
12
- ```
13
- bower install nutella_lib
14
- ```
15
- Make sure to include all the dependencies, see examples folder.
@@ -1,28 +0,0 @@
1
- {
2
- "name": "nutella_lib",
3
- "main": "nutella_lib.js",
4
- "version": "0.3.0",
5
- "authors": [
6
- "Alessandro Gnoli <tebemis@gmail.com>"
7
- ],
8
- "description": "Nutella library for JavaScript",
9
- "moduleType": [
10
- "node"
11
- ],
12
- "keywords": [
13
- "nutella",
14
- "framework"
15
- ],
16
- "license": "MIT",
17
- "homepage": "https://github.com/nutella-framework/nutella_lib.js",
18
- "ignore": [
19
- "**/.*",
20
- "node_modules",
21
- "bower_components",
22
- "test",
23
- "tests"
24
- ],
25
- "dependencies": {
26
- "bower-mqttws": "=1.0.0"
27
- }
28
- }
@@ -1,23 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head lang="en">
4
- <meta charset="UTF-8">
5
- <title>Simple MQTT client hello</title>
6
- </head>
7
- <body>
8
-
9
- <script src="bower_components/bower-mqttws/mqttws31.js"></script>
10
- <script src="../../simple-js-mqtt-client.js"></script>
11
- <script>
12
- var client = MQTT.connect('ltg.evl.uic.edu');
13
- client.subscribe('demo1', function(message){
14
- console.log("First subscription: " + message);
15
- });
16
- var sscb = function(message){
17
- console.log("Second subscription: " + message);
18
- client.unsubscribe('demo1', sscb);
19
- };
20
- client.subscribe('demo1', sscb);
21
- </script>
22
- </body>
23
- </html>
@@ -1,52 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head lang="en">
4
- <meta charset="UTF-8">
5
- <title>Nutella hello world</title>
6
- </head>
7
- <body>
8
-
9
- <script src="bower_components/bower-mqttws/mqttws31.js"></script>
10
- <script src="../../nutella_lib.js"></script>
11
- <script>
12
-
13
- // // Initialize nutella
14
- // var nutella = NUTELLA.init('my_run_id', 'ltg.evl.uic.edu', 'demo_browser_interface');
15
-
16
- // // Subscribe to a channel
17
- // nutella.net.subscribe("demo1", function(message, c_id, r_id) {
18
- // console.log('Received "' + JSON.stringify(message) + '" from ' + c_id + '/' + r_id);
19
- // nutella.net.unsubscribe('demo1');
20
- // });
21
-
22
- // // Wildcard subscribe
23
- // nutella.net.subscribe("demo2/#", function(message, channel, c_id, r_id) {
24
- // console.log('Received "' + JSON.stringify(message) + '" on channel ' + channel + ' from ' + c_id + '/' + r_id);
25
- // });
26
-
27
- // // Publish some stuff
28
- // nutella.net.publish('demo1');
29
- // nutella.net.publish('demo1', 'just a string');
30
- // nutella.net.publish('demo1', {a: 'proper', key: 'value'});
31
- // nutella.setResourceId('a_particular_resource');
32
- // nutella.net.publish('demo1');
33
- // nutella.net.publish('demo1', 'just a string');
34
- // nutella.net.publish('demo1', {a: 'proper', key: 'value'});
35
-
36
- // // Handle requests
37
- // nutella.net.handle_requests('demo1', function(message, component_id, resource_id) {
38
- // return 'this is the returned value';
39
- // });
40
- //
41
- // // Perform a couple requests
42
- // nutella.net.request('demo1', function(response) {
43
- // console.log("This is the response to empty request (GET)");
44
- // });
45
- //
46
- // nutella.net.request('demo1', 'my_request', function(response) {
47
- // console.log("This is the response to non-empty request");
48
- // });
49
-
50
- </script>
51
- </body>
52
- </html>
@@ -1,14 +0,0 @@
1
- var mqtt = require('../../simple-js-mqtt-client');
2
-
3
- var client = mqtt.connect('ltg.evl.uic.edu');
4
-
5
- client.subscribe('demo1', function(message) {
6
- console.log("First subscription: " + message);
7
- });
8
-
9
- var sscb = function(message){
10
- console.log("Second subscription: " + message);
11
- client.publish('demo2', "I'm gonna die")
12
- client.unsubscribe('demo1', sscb);
13
- };
14
- client.subscribe('demo1', sscb);
@@ -1,38 +0,0 @@
1
- var NUTELLA = require('../../nutella_lib.js')
2
-
3
- // Initialize nutella
4
- //var nutella = NUTELLA.init('my_run_id', 'ltg.evl.uic.edu', 'demo_browser_interface');
5
-
6
- // // Subscribe to a channel
7
- // nutella.net.subscribe("demo1", function(message, c_id, r_id) {
8
- // console.log('Received "' + JSON.stringify(message) + '" from ' + c_id + '/' + r_id);
9
- // nutella.net.unsubscribe('demo1');
10
- // });
11
-
12
- // // Wildcard subscribe
13
- // nutella.net.subscribe("demo2/#", function(message, channel, c_id, r_id) {
14
- // console.log('Received "' + JSON.stringify(message) + '" on channel ' + channel + ' from ' + c_id + '/' + r_id);
15
- // });
16
-
17
- // // Publish some stuff
18
- // nutella.net.publish('demo1');
19
- // nutella.net.publish('demo1', 'just a string');
20
- // nutella.net.publish('demo1', {a: 'proper', key: 'value'});
21
- // nutella.setResourceId('a_particular_resource');
22
- // nutella.net.publish('demo1');
23
- // nutella.net.publish('demo1', 'just a string');
24
- // nutella.net.publish('demo1', {a: 'proper', key: 'value'});
25
-
26
- // Handle requests
27
- //nutella.net.handle_requests('demo1', function(message, component_id, resource_id) {
28
- // return 'this is the returned value';
29
- //});
30
- //
31
- //// Perform a couple requests
32
- //nutella.net.request('demo1', function(response) {
33
- // console.log("This is the response to empty request (GET)");
34
- //});
35
- //
36
- //nutella.net.request('demo1', 'my_request', function(response) {
37
- // console.log("This is the response to non-empty request");
38
- //});
@@ -1,789 +0,0 @@
1
- /******************
2
- * nutella_lib.js *
3
- ******************/
4
-
5
- (function() {
6
- "use strict";
7
-
8
- // Establish the root object, `window` in the browser, or `exports` on the server.
9
- var root = this;
10
-
11
- // Save the previous value of the `nutella` variable for noConflict().
12
- var previousNutella = root.NUTELLA;
13
-
14
- // Internal reference to this library (used below)
15
- var nutella = {};
16
-
17
- // Detect if we are in the browser or in node and
18
- // load the appropriate dependencies
19
- var isNode;
20
- var mqtt_lib;
21
- if (typeof window === 'undefined') {
22
- isNode = true; // Node
23
- mqtt_lib = require('mqtt');
24
- if( typeof mqtt_lib === 'undefined' )
25
- throw new Error('This MQTT client requires the mqtt library (https://www.npmjs.com/package/mqtt)');
26
- } else {
27
- isNode = false; // Browser
28
- mqtt_lib = root.Paho.MQTT;
29
- if( typeof mqtt_lib === 'undefined' )
30
- throw new Error('This MQTT client requires the mqtt-ws library (https://github.com/M2MConnections/mqtt-ws) a wrapper of Paho.js');
31
-
32
- }
33
-
34
-
35
-
36
- /**
37
- * Runs nutella.js in noConflict mode by
38
- * returning the NUTELLA variable to its previous owner.
39
- *
40
- * @return a reference to the nutella object defined by this library.
41
- */
42
- nutella.noConflict = function() {
43
- root.NUTELLA = previousNutella;
44
- return nutella;
45
- };
46
-
47
-
48
-
49
- /**
50
- * Parses URL parameters.
51
- * Note: this function is not defined if we are not in the browser.
52
- *
53
- * @return {Object} An object containing all the URL query parameters
54
- */
55
- if (!isNode) {
56
- nutella.parseURLParameters = function () {
57
- var str = location.search;
58
- var queries = str.replace(/^\?/, '').split('&');
59
- var searchObject = {};
60
- for( var i = 0; i < queries.length; i++ ) {
61
- var split = queries[i].split('=');
62
- searchObject[split[0]] = split[1];
63
- }
64
- return searchObject;
65
- }
66
- }
67
-
68
-
69
- /**
70
- * Creates a new instance of nutella
71
- * and initialize it
72
- * This is a factory method.
73
- *
74
- *
75
- * @param {string} run_id - the run_id this component is launched in
76
- * @param {string} broker_hostname - the hostname of the broker.
77
- * @param {string} component_id - the name of this component
78
- */
79
- nutella.init = function(run_id, broker_hostname, component_id) {
80
- if (run_id===undefined || broker_hostname===undefined || component_id=== undefined) {
81
- console.warn("Couldn't initialize nutella. Make sure you are setting all three the required parameters (runId, broker_hostname, componentId'");
82
- }
83
- return new NutellaInstance(run_id, broker_hostname, component_id);
84
- };
85
-
86
-
87
-
88
- /**
89
- * Defines a nutella instance.
90
- *
91
- * @param {string} run_id - the run_id this component is launched in
92
- * @param {string} broker_hostname - the hostname of the broker.
93
- * @param {string} component_id - the name of this component
94
- */
95
- var NutellaInstance = function (run_id, broker_hostname, component_id) {
96
-
97
- this.mqtt_client = new SimpleMQTTClient(broker_hostname);
98
- this.runId = run_id;
99
- this.componentId = component_id;
100
-
101
- // Initialized the various sub-modules
102
- this.net = new NetSubModule(this);
103
- this.persist = new PersistSubModule(this);
104
- // ... other sub-modules here
105
- };
106
-
107
-
108
-
109
- /**
110
- * Sets the resource id for this instance of nutella
111
- *
112
- * @param {string} resource_id - the resource_id associated to this instance of nutella
113
- */
114
- NutellaInstance.prototype.setResourceId = function(resource_id){
115
- this.resourceId = resource_id;
116
- };
117
-
118
-
119
-
120
-
121
- //
122
- // END OF: main nutella protocol module
123
- //
124
-
125
-
126
-
127
- // --------------------------------------------------------------------------------------------
128
- // net sub-module
129
- // --------------------------------------------------------------------------------------------
130
-
131
-
132
- var NetSubModule = function(main_nutella) {
133
- // Store a reference to the main module
134
- this.main_nutella = main_nutella;
135
-
136
- // Store the subscriptions and the relative callbacks
137
- this.subscriptions = [];
138
- this.callbacks = [];
139
- };
140
-
141
-
142
-
143
- /**
144
- * Subscribes to a channel or filter.
145
- *
146
- * @param channel
147
- * @param callback
148
- * @param done_callback
149
- */
150
- NetSubModule.prototype.subscribe = function(channel, callback, done_callback) {
151
- // Prevent multiple subscriptions to the same channel
152
- if (this.subscriptions.indexOf(channel)!==-1)
153
- throw new Error('You can`t subscribe twice to the same channel');
154
- // Pad the channel
155
- var runId = this.main_nutella.runId;
156
- var new_channel = runId + '/' + channel;
157
- // Define callbacks
158
- var mqtt_cb;
159
- if (isChannelWildcard(channel))
160
- mqtt_cb = function(mqtt_message, mqtt_channel) {
161
- // Ignore anything that is not JSON or
162
- // doesn't comply to the nutella protocol
163
- try {
164
- var f = extractFieldsFromMessage(mqtt_message);
165
- var clean_channel = mqtt_channel.replace(runId+'/', '');
166
- if (f.type==='publish')
167
- callback(f.payload, clean_channel, f.componentId, f.resourceId);
168
- } catch(err) {
169
- }
170
- };
171
- else
172
- mqtt_cb = function(mqtt_message) {
173
- // Ignore anything that is not JSON or
174
- // doesn't comply to the nutella protocol
175
- try {
176
- var f = extractFieldsFromMessage(mqtt_message);
177
- if (f.type==='publish')
178
- callback(f.payload, f.componentId, f.resourceId);
179
- } catch(err) {
180
- }
181
- };
182
- // Update subscriptions, callbacks and subscribe
183
- this.subscriptions.push(channel);
184
- this.callbacks.push(mqtt_cb);
185
- this.main_nutella.mqtt_client.subscribe(new_channel, mqtt_cb, done_callback);
186
- };
187
-
188
-
189
-
190
- /**
191
- * Unsubscribes from a channel
192
- *
193
- * @param channel
194
- * @param done_callback
195
- */
196
- NetSubModule.prototype.unsubscribe = function(channel, done_callback) {
197
- // Find index of subscription and retrieve relative callback
198
- var idx = this.subscriptions.indexOf(channel);
199
- var cbAtIdx = this.callbacks[idx];
200
- // Pad the channel
201
- var new_channel = this.main_nutella.runId + '/' + channel;
202
- // Unsubscribe
203
- this.subscriptions.splice(idx, 1);
204
- this.callbacks.splice(idx, 1);
205
- this.main_nutella.mqtt_client.unsubscribe(new_channel, cbAtIdx, done_callback);
206
- };
207
-
208
-
209
-
210
- /**
211
- * Publishes a message to a channel
212
- *
213
- * @param channel
214
- * @param message
215
- */
216
- NetSubModule.prototype.publish = function(channel, message) {
217
- // Pad the channel
218
- var new_channel = this.main_nutella.runId + '/' + channel;
219
- var m = prepareMessageForPublish(message, this.main_nutella.componentId, this.main_nutella.resourceId);
220
- this.main_nutella.mqtt_client.publish(new_channel, m);
221
- };
222
-
223
-
224
-
225
- /**
226
- * Sends a request.
227
- *
228
- * @param channel
229
- * @param message
230
- * @param callback
231
- * @param done_callback
232
- */
233
- NetSubModule.prototype.request = function(channel, message, callback, done_callback) {
234
- // Handle optional message parameter
235
- if (typeof message==='function') {
236
- if (callback!==undefined)
237
- done_callback = callback;
238
- callback = message;
239
- message = undefined;
240
- }
241
- // Pad channel
242
- var new_channel = this.main_nutella.runId + '/' + channel;
243
- // Prepare request
244
- var request_id = Math.floor((Math.random() * 100000) + 1).toString();
245
- var mqtt_request = prepareRequest(message, request_id, this.main_nutella.componentId, this.main_nutella.resourceId);
246
- // Prepare callback to handle response
247
- var mqtt_cb = function(mqtt_response) {
248
- // Ignore anything that is not JSON or
249
- // doesn't comply to the nutella protocol
250
- try {
251
- var f = extractFieldsFromMessage(mqtt_response);
252
- var response_id = extractIdFromMessage(mqtt_response);
253
- // Only handle responses that have proper id set
254
- if (f.type==='response' && response_id===request_id) {
255
- // Execute callback
256
- callback(f.payload);
257
- }
258
- } catch(err) {
259
- }
260
- };
261
- // Subscribe to response
262
- var mqtt_cli = this.main_nutella.mqtt_client;
263
- mqtt_cli.subscribe(new_channel, mqtt_cb, function() {
264
- // Once we are subscribed we publish the request
265
- mqtt_cli.publish(new_channel, mqtt_request);
266
- // Execute optional done callback
267
- if (done_callback!==undefined) done_callback();
268
- });
269
- };
270
-
271
-
272
-
273
- /**
274
- * Handles requests.
275
- *
276
- * @param channel
277
- * @param callback
278
- * @param done_callback
279
- */
280
- NetSubModule.prototype.handle_requests = function(channel, callback, done_callback) {
281
- // Pad the channel
282
- var new_channel = this.main_nutella.runId + '/' + channel;
283
- // Prepare callback
284
- var c_id = this.main_nutella.componentId;
285
- var r_id = this.main_nutella.resourceId;
286
- var mqtt_cli = this.main_nutella.mqtt_client;
287
- var mqtt_cb = function(mqtt_request) {
288
- // Ignore anything that is not JSON or
289
- // doesn't comply to the nutella protocol
290
- try {
291
- var f = extractFieldsFromMessage(mqtt_request);
292
- var id = extractIdFromMessage(mqtt_request);
293
- } catch(err) {
294
- return;
295
- }
296
- // Only handle requests that have proper id set
297
- if (f.type!=='request' || id===undefined) return;
298
- // Execute callback, assemble the response and publish
299
- var res_json = callback(f.payload, f.componentId, f.resourceId);
300
- var mqtt_response = prepareResponse(res_json, id, c_id, r_id);
301
- mqtt_cli.publish(new_channel, mqtt_response);
302
- };
303
- // Subscribe
304
- this.main_nutella.mqtt_client.subscribe(new_channel, mqtt_cb, done_callback);
305
- };
306
-
307
-
308
-
309
- //
310
- // Helper function
311
- // Extracts nutella parameters from a received message
312
- //
313
- function extractFieldsFromMessage(message) {
314
- var params = JSON.parse(message);
315
- var s = params.from.split('/');
316
- delete params.from;
317
- params.componentId = s[0];
318
- if (s.length===2)
319
- params.resourceId = s[1];
320
- return params;
321
- }
322
-
323
-
324
-
325
- //
326
- // Helper function
327
- // Extracts request id from a received message
328
- //
329
- function extractIdFromMessage(message) {
330
- var params = JSON.parse(message);
331
- return params.id;
332
- }
333
-
334
-
335
-
336
- //
337
- // Helper function
338
- // Pads a message with the nutella protocol fields
339
- //
340
- function prepareMessageForPublish(message, componentId, resourceId) {
341
- var from = resourceId===undefined ? componentId : (componentId + '/' + resourceId);
342
- if (message===undefined)
343
- return JSON.stringify({type: 'publish', from: from});
344
- return JSON.stringify({type: 'publish', from: from, payload: message});
345
- }
346
-
347
-
348
-
349
- //
350
- // Helper function
351
- // Pads a request with the nutella protocol fields
352
- //
353
- function prepareRequest(message, request_id, componentId, resourceId) {
354
- var from = resourceId===undefined ? componentId : (componentId + '/' + resourceId);
355
- if (message===undefined)
356
- return JSON.stringify({id: request_id, type: 'request', from: from});
357
- return JSON.stringify({id: request_id, type: 'request', from: from, payload: message});
358
- }
359
-
360
-
361
-
362
- //
363
- // Helper function
364
- // Pads a response with the nutella protocol fields
365
- //
366
- function prepareResponse(message, request_id, componentId, resourceId) {
367
- var from = resourceId===undefined ? componentId : (componentId + '/' + resourceId);
368
- if (message===undefined)
369
- return JSON.stringify({id: request_id, type: 'response', from: from});
370
- return JSON.stringify({id: request_id, type: 'response', from: from, payload: message});
371
- }
372
-
373
-
374
-
375
- // Helper function to test if a channel is wildcard or not.
376
- // Returns true if it is Returns true is.
377
- // See MQTT specification for wildcard channels
378
- // {http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718106 here
379
- //
380
- function isChannelWildcard(channel) {
381
- return channel.indexOf('#')!==-1 || channel.indexOf('+')!==-1;
382
- }
383
-
384
-
385
- //
386
- // END OF: net sub-module
387
- //
388
-
389
-
390
-
391
- // --------------------------------------------------------------------------------------------
392
- // persist sub-module
393
- // --------------------------------------------------------------------------------------------
394
-
395
-
396
- var PersistSubModule = function(main_nutella) {
397
- // Store a reference to the main module
398
- this.main_nutella = main_nutella;
399
- };
400
-
401
-
402
-
403
- PersistSubModule.prototype.persist = function () {
404
- console.log("This is just a test method for the persist sub-module");
405
- };
406
-
407
-
408
-
409
-
410
- //
411
- // END OF: persist sub-module
412
- //
413
-
414
-
415
-
416
-
417
- // --------------------------------------------------------------------------------------------
418
- // Simple MQTT client
419
- // --------------------------------------------------------------------------------------------
420
-
421
-
422
- /**
423
- * Defines a Simple MQTT client.
424
- *
425
- * @param {string} host - the hostname of the broker.
426
- * @param {string} [clientId] - the unique name of this client. If no ID is provided a random one is generated
427
- */
428
- var SimpleMQTTClient = function (host, clientId) {
429
-
430
- // Initializes the object that stores subscriptions
431
- this.subscriptions = {};
432
- // Initializes the object that holds the internal client
433
- this.client = {};
434
- // Functions backlog
435
- this.backlog = [];
436
-
437
- // Handles the optional clientId parameter
438
- if (arguments.length === 1 || clientId === undefined) {
439
- clientId = generateRandomClientId();
440
- }
441
-
442
- // Connect
443
- if (isNode)
444
- this.client = connectNode(this.subscriptions, host, clientId);
445
- else
446
- this.client = connectBrowser(this.subscriptions, this.backlog, host, clientId);
447
- };
448
-
449
-
450
- //
451
- // Helper function that connects the MQTT client in node
452
- //
453
- function connectNode (subscriptions, host, clientId) {
454
- // Create client
455
- var url = "tcp://" + host + ":1883";
456
- var client = mqtt_lib.connect(url, {clientId : clientId});
457
- // Register incoming message callback
458
- client.on('message', function(channel, message) {
459
- // Executes the appropriate channel callback
460
- var cbs = findCallbacks(subscriptions, channel);
461
- if (cbs!==undefined) {
462
- if (Object.keys(subscriptions).indexOf(channel)!==-1)
463
- cbs.forEach(function(cb) {
464
- cb(message);
465
- });
466
- else
467
- cbs.forEach(function(cb) {
468
- cb(message, channel);
469
- });
470
-
471
- }
472
- });
473
- return client;
474
- }
475
-
476
-
477
- //
478
- // Helper function that connects the MQTT client in the browser
479
- //
480
- function connectBrowser (subscriptions, backlog, host, clientId) {
481
- // Create client
482
- var client = new mqtt_lib.Client(host, Number(1884), clientId);
483
- // Register callback for connection lost
484
- client.onConnectionLost = function() {
485
- // TODO try to reconnect
486
- };
487
- // Register callback for received message
488
- client.onMessageArrived = function (message) {
489
- // Executes the appropriate channel callback
490
- var cbs = findCallbacks(subscriptions, message.destinationName);
491
- if (cbs!==undefined) {
492
- if (Object.keys(subscriptions).indexOf(message.destinationName)!==-1)
493
- cbs.forEach(function(cb) {
494
- cb(message.payloadString);
495
- });
496
- else
497
- cbs.forEach(function(cb) {
498
- cb(message.payloadString, message.destinationName);
499
- });
500
- }
501
- };
502
- // Connect
503
- client.connect({onSuccess: function() {
504
- // Execute the backlog of operations performed while the client wasn't connected
505
- backlog.forEach(function(e) {
506
- e.op.apply(this, e.params);
507
- });
508
- }});
509
- return client;
510
- }
511
-
512
-
513
-
514
- /**
515
- * Disconnects from the MQTT client.
516
- */
517
- SimpleMQTTClient.prototype.disconnect = function () {
518
- if (isNode)
519
- this.client.end();
520
- else
521
- this.client.disconnect();
522
- this.subscriptions = {};
523
- };
524
-
525
-
526
-
527
- /**
528
- * Subscribes to a channel and registers a callback.
529
- *
530
- * @param {string} channel - the channel we are subscribing to.
531
- * @param {callback} callback - A function that is executed every time a message is received on that channel.
532
- * @param {callback} [done_callback] - A function that is executed once the subscribe operation has completed successfully.
533
- */
534
- SimpleMQTTClient.prototype.subscribe = function (channel, callback, done_callback) {
535
- // Subscribe
536
- if( isNode )
537
- subscribeNode(this.client, this.subscriptions, channel, callback, done_callback);
538
- else
539
- subscribeBrowser(this.client, this.subscriptions, this.backlog, channel, callback, done_callback);
540
- };
541
-
542
-
543
- //
544
- // Helper function that subscribes to a channel in node
545
- //
546
- function subscribeNode (client, subscriptions, channel, callback, done_callback) {
547
- if (subscriptions[channel]===undefined) {
548
- subscriptions[channel] = [callback];
549
- client.subscribe(channel, {qos: 0}, function() {
550
- // If there is a done_callback defined, execute it
551
- if (done_callback!==undefined) done_callback();
552
- });
553
- } else {
554
- subscriptions[channel].push(callback);
555
- }
556
- }
557
-
558
-
559
- //
560
- // Helper function that subscribes to a channel in the browser
561
- //
562
- function subscribeBrowser (client, subscriptions, backlog, channel, callback, done_callback) {
563
- if ( addToBacklog(client, backlog, subscribeBrowser, [client, subscriptions, backlog, channel, callback, done_callback]) ) return;
564
- if (subscriptions[channel]===undefined) {
565
- subscriptions[channel] = [callback];
566
- client.subscribe(channel, {qos: 0, onSuccess: function() {
567
- // If there is a done_callback defined, execute it
568
- if (done_callback!==undefined) done_callback();
569
- }});
570
- } else {
571
- subscriptions[channel].push(callback);
572
- // If there is a done_callback defined, execute it
573
- if (done_callback!==undefined) done_callback();
574
- }
575
- }
576
-
577
-
578
-
579
- /**
580
- * Unsubscribe from a channel.
581
- *
582
- * @param {string} channel - the channel we are un-subscribing from.
583
- * @param {function} callback - the callback we are trying to de-register
584
- * @param {callback} [done_callback] - A function that is executed once the unsubscribe operation has completed successfully.
585
- */
586
- SimpleMQTTClient.prototype.unsubscribe = function (channel, callback, done_callback) {
587
- if( isNode )
588
- unsubscribeNode(this.client, this.subscriptions, channel, callback, done_callback);
589
- else
590
- unsubscribeBrowser(this.client, this.subscriptions, this.backlog, channel, callback, done_callback);
591
- };
592
-
593
-
594
- //
595
- // Helper function that unsubscribes from a channel in node
596
- //
597
- var unsubscribeNode = function(client, subscriptions, channel, callback, done_callback) {
598
- if (subscriptions[channel]===undefined)
599
- return;
600
- subscriptions[channel].splice(subscriptions[channel].indexOf(callback), 1);
601
- if (subscriptions[channel].length===0) {
602
- delete subscriptions[channel];
603
- client.unsubscribe(channel, function() {
604
- // If there is a done_callback defined, execute it
605
- if (done_callback!==undefined) done_callback();
606
- });
607
- }
608
- };
609
-
610
-
611
- //
612
- // Helper function that unsubscribes from a channel in the browser
613
- //
614
- var unsubscribeBrowser = function(client, subscriptions, backlog, channel, callback, done_callback) {
615
- if ( addToBacklog(client, backlog, unsubscribeBrowser, [client, subscriptions, backlog, channel, callback, done_callback]) ) return;
616
- if (subscriptions[channel]===undefined)
617
- return;
618
- subscriptions[channel].splice(subscriptions[channel].indexOf(callback), 1);
619
- if (subscriptions[channel].length===0) {
620
- delete subscriptions[channel];
621
- client.unsubscribe(channel, {onSuccess : function() {
622
- // If there is a done_callback defined, execute it
623
- if (done_callback!==undefined) done_callback();
624
- }});
625
- }
626
- };
627
-
628
-
629
- /**
630
- * Lists all the channels we are currently subscribed to.
631
- *
632
- * @returns {Array} a lists of all the channels we are currently subscribed to.
633
- */
634
- SimpleMQTTClient.prototype.getSubscriptions = function () {
635
- return Object.keys(this.subscriptions);
636
- };
637
-
638
-
639
- /**
640
- * Publishes a message to a channel.
641
- *
642
- * @param {string} channel - the channel we are publishing to.
643
- * @param {string} message - the message we are publishing.
644
- */
645
- SimpleMQTTClient.prototype.publish = function (channel, message) {
646
- if (isNode)
647
- publishNode(this.client, channel, message);
648
- else
649
- publishBrowser(this.client, this.backlog, channel, message)
650
- };
651
-
652
-
653
- //
654
- // Helper function that publishes to a channel in node
655
- //
656
- var publishNode = function (client, channel, message) {
657
- client.publish(channel, message);
658
- };
659
-
660
-
661
- //
662
- // Helper function that publishes to a channel in the browser
663
- //
664
- var publishBrowser = function (client, backlog, channel, message) {
665
- if ( addToBacklog(client, backlog, publishBrowser, [client, backlog, channel, message]) ) return;
666
- message = new mqtt_lib.Message(message);
667
- message.destinationName = channel;
668
- client.send(message);
669
- };
670
-
671
-
672
- //
673
- // Helper functions for Simple MQTT client
674
- //
675
-
676
-
677
- //
678
- // Helper function that generates a random client ID
679
- //
680
- function generateRandomClientId () {
681
- var length = 22;
682
- var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
683
- var result = '';
684
- for (var i = length; i > 0; --i) {
685
- result += chars[Math.round(Math.random() * (chars.length - 1))];
686
- }
687
- return result;
688
- };
689
-
690
-
691
- //
692
- // Helper function that selects the right callback when a message is received
693
- //
694
- function findCallbacks (subscriptions, channel) {
695
- // First try to see if a callback for the exact channel exists
696
- if(Object.keys(subscriptions).indexOf(channel)!==-1)
697
- return subscriptions[channel];
698
- // If it doesn't then let's try to see if the channel matches a wildcard callback
699
- var pattern = matchesWildcard(subscriptions, channel);
700
- if (pattern!== undefined) {
701
- return subscriptions[pattern];
702
- }
703
- // If there's no exact match or wildcard we have to return undefined
704
- return undefined;
705
- };
706
-
707
-
708
- //
709
- // Helper function that tries to match a channel with each subscription
710
- // it returns undefined if no match is found
711
- //
712
- function matchesWildcard (subscriptions, channel) {
713
- var i;
714
- var subs = Object.keys(subscriptions);
715
- for (i=0; i < subs.length; i++) {
716
- if (matchesFilter(subs[i], channel)) {
717
- return subs[i];
718
- }
719
- }
720
- return undefined;
721
- };
722
-
723
-
724
- //
725
- // Helper function that checks a certain channel and see if it matches a wildcard pattern
726
- // Returns true if the channel matches a pattern (including the exact pattern)
727
- //
728
- function matchesFilter (pattern, channel) {
729
- // If multi-level wildcard is the only character in pattern, then any string will match
730
- if (pattern==="#") {
731
- return true;
732
- }
733
- // Handle all other multi-level wildcards
734
- // FROM SPEC: The number sign (‘#’ U+0023) is a wildcard character that matches any number of levels within a topic. The multi-level wildcard represents the parent and any number of child levels. The multi-level wildcard character MUST be specified either on its own or following a topic level separator. In either case it MUST be the last character specified in the Topic Filter
735
- var p_wo_wildcard = pattern.substring(0, pattern.length-2);
736
- var str_wo_details = channel.substring(0, pattern.length-2);
737
- if (pattern.slice(-1)=='#' && p_wo_wildcard==str_wo_details) {
738
- return true;
739
- }
740
- // TODO Handle single-level wildcards (+)
741
- // FROM SPEC: The single-level wildcard can be used at any level in the Topic Filter, including first and last levels. Where it is used it MUST occupy an entire level of the filter [MQTT-4.7.1-3]. It can be used at more than one level in the Topic Filter and can be used in conjunction with the multilevel wildcard.
742
- // http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718107
743
- return false;
744
- };
745
-
746
-
747
- //
748
- // Helper method that queues operations into the backlog.
749
- // This method is used to make `connect` "synchronous" by
750
- // queueing up operations on the client until it is connected.
751
- //
752
- // @param {string} method - the method that needs to be added to the backlog
753
- // @param {Array} parameters - parameters to the method being added to the backlog
754
- // @returns {boolean} true if the method was successfully added, false otherwise
755
- //
756
- function addToBacklog (client, backlog, method, parameters) {
757
- if (!client.isConnected() ) {
758
- backlog.push({
759
- op : method,
760
- params : parameters
761
- });
762
- return true;
763
- }
764
- return false;
765
- };
766
-
767
-
768
-
769
-
770
- //
771
- // End of methods definition for SimpleMQTTClient
772
- //
773
-
774
-
775
- // Export the nutella object
776
- // For node.js, also with backwards-compatibility for the old `require()` API.
777
- // If we're in the browser, add `NUTELLA` as a global object.
778
- if (typeof exports !== 'undefined') {
779
- if (typeof module !== 'undefined' && module.exports) {
780
- exports = module.exports = nutella;
781
- }
782
- exports.NUTELLA = nutella;
783
- } else {
784
- root.NUTELLA = nutella;
785
- }
786
-
787
-
788
-
789
- }.call(this));