nutella_framework 0.7.3 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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));