solid-panes 3.7.2-38e0315e → 3.7.2-7d210cc9

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 (354) hide show
  1. package/Documentation/VisualLanguage.html +538 -0
  2. package/Documentation/conventions.md +333 -0
  3. package/coverage/clover.xml +152 -0
  4. package/coverage/coverage-final.json +6 -0
  5. package/coverage/lcov-report/base.css +224 -0
  6. package/coverage/lcov-report/block-navigation.js +87 -0
  7. package/coverage/lcov-report/favicon.png +0 -0
  8. package/coverage/lcov-report/index.html +131 -0
  9. package/coverage/lcov-report/outline/index.html +161 -0
  10. package/coverage/lcov-report/outline/outlineIcons.js.html +565 -0
  11. package/coverage/lcov-report/outline/propertyViews.ts.html +196 -0
  12. package/coverage/lcov-report/outline/viewAsImage.ts.html +121 -0
  13. package/coverage/lcov-report/outline/viewAsMbox.ts.html +127 -0
  14. package/coverage/lcov-report/prettify.css +1 -0
  15. package/coverage/lcov-report/prettify.js +2 -0
  16. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  17. package/coverage/lcov-report/sorter.js +210 -0
  18. package/coverage/lcov-report/trustedApplications/index.html +116 -0
  19. package/coverage/lcov-report/trustedApplications/trustedApplications.utils.ts.html +238 -0
  20. package/coverage/lcov.info +204 -0
  21. package/dev/index.html +28 -0
  22. package/dev/loader.ts +91 -0
  23. package/dev/pane/index.ts +10 -0
  24. package/doc/images/panes-for-classes.epgz +0 -0
  25. package/doc/images/panes-for-classes.svg +609 -0
  26. package/eslint.config.mjs +34 -0
  27. package/jest.config.js +27 -0
  28. package/jest.setup.ts +4 -0
  29. package/lib/RDFXMLPane.js +59 -0
  30. package/lib/RDFXMLPane.js.map +1 -0
  31. package/lib/argument/argumentPane.js +62 -0
  32. package/lib/argument/argumentPane.js.map +1 -0
  33. package/lib/attach/attachPane.js +404 -0
  34. package/lib/attach/attachPane.js.map +1 -0
  35. package/lib/audio/audioPane.js +183 -0
  36. package/lib/audio/audioPane.js.map +1 -0
  37. package/lib/classInstancePane.js +93 -0
  38. package/lib/classInstancePane.js.map +1 -0
  39. package/lib/dashboard/basicPreferences.js +229 -0
  40. package/lib/dashboard/basicPreferences.js.map +1 -0
  41. package/lib/dashboard/dashboardPane.js +73 -0
  42. package/lib/dashboard/dashboardPane.js.map +1 -0
  43. package/lib/dashboard/homepage.js +86 -0
  44. package/lib/dashboard/homepage.js.map +1 -0
  45. package/lib/dataContentPane.js +259 -0
  46. package/lib/dataContentPane.js.map +1 -0
  47. package/lib/defaultPane.js +76 -0
  48. package/lib/defaultPane.js.map +1 -0
  49. package/lib/dokieli/dokieliPane.js +173 -0
  50. package/lib/dokieli/dokieliPane.js.map +1 -0
  51. package/lib/dokieli/new.js +9 -0
  52. package/lib/dokieli/new.js.map +1 -0
  53. package/lib/form/pane.js +186 -0
  54. package/lib/form/pane.js.map +1 -0
  55. package/lib/global.d.js +2 -0
  56. package/lib/global.d.js.map +1 -0
  57. package/lib/home/homePane.js +91 -0
  58. package/lib/home/homePane.js.map +1 -0
  59. package/lib/humanReadablePane.js +138 -0
  60. package/lib/humanReadablePane.js.map +1 -0
  61. package/lib/imagePane.js +71 -0
  62. package/lib/imagePane.js.map +1 -0
  63. package/lib/index.js +112 -0
  64. package/lib/index.js.map +1 -0
  65. package/lib/internal/internalPane.js +184 -0
  66. package/lib/internal/internalPane.js.map +1 -0
  67. package/lib/mainPage/footer.js +22 -0
  68. package/lib/mainPage/footer.js.map +1 -0
  69. package/lib/mainPage/header.js +152 -0
  70. package/lib/mainPage/header.js.map +1 -0
  71. package/{dist → lib}/mainPage/index.d.ts.map +1 -1
  72. package/lib/mainPage/index.js +42 -0
  73. package/lib/mainPage/index.js.map +1 -0
  74. package/lib/microblogPane/microblogPane.js +1032 -0
  75. package/lib/microblogPane/microblogPane.js.map +1 -0
  76. package/lib/n3Pane.js +57 -0
  77. package/lib/n3Pane.js.map +1 -0
  78. package/lib/outline/context.js +19 -0
  79. package/lib/outline/context.js.map +1 -0
  80. package/lib/outline/manager.js +2264 -0
  81. package/lib/outline/manager.js.map +1 -0
  82. package/lib/outline/manager.test.d.ts +2 -0
  83. package/lib/outline/manager.test.d.ts.map +1 -0
  84. package/lib/outline/manager.test.js +210 -0
  85. package/lib/outline/manager.test.js.map +1 -0
  86. package/lib/outline/outlineIcons.js +128 -0
  87. package/lib/outline/outlineIcons.js.map +1 -0
  88. package/lib/outline/propertyViews.js +44 -0
  89. package/lib/outline/propertyViews.js.map +1 -0
  90. package/lib/outline/propertyViews.test.d.ts +2 -0
  91. package/lib/outline/propertyViews.test.d.ts.map +1 -0
  92. package/lib/outline/propertyViews.test.js +27 -0
  93. package/lib/outline/propertyViews.test.js.map +1 -0
  94. package/lib/outline/queryByExample.js +286 -0
  95. package/lib/outline/queryByExample.js.map +1 -0
  96. package/lib/outline/userInput.js +1817 -0
  97. package/lib/outline/userInput.js.map +1 -0
  98. package/lib/outline/viewAsImage.js +17 -0
  99. package/lib/outline/viewAsImage.js.map +1 -0
  100. package/{dist → lib}/outline/viewAsMbox.js +14 -4
  101. package/lib/outline/viewAsMbox.js.map +1 -0
  102. package/lib/pad/padPane.js +417 -0
  103. package/lib/pad/padPane.js.map +1 -0
  104. package/lib/playlist/playlistPane.js +125 -0
  105. package/lib/playlist/playlistPane.js.map +1 -0
  106. package/lib/registerPanes.js +146 -0
  107. package/lib/registerPanes.js.map +1 -0
  108. package/lib/schedule/formsForSchedule.js +8 -0
  109. package/lib/schedule/formsForSchedule.js.map +1 -0
  110. package/lib/schedule/schedulePane.js +895 -0
  111. package/lib/schedule/schedulePane.js.map +1 -0
  112. package/lib/sharing/sharingPane.js +49 -0
  113. package/lib/sharing/sharingPane.js.map +1 -0
  114. package/lib/slideshow/slideshowPane.js +84 -0
  115. package/lib/slideshow/slideshowPane.js.map +1 -0
  116. package/lib/socialPane.js +431 -0
  117. package/lib/socialPane.js.map +1 -0
  118. package/lib/tabbed/tabbedPane.js +72 -0
  119. package/lib/tabbed/tabbedPane.js.map +1 -0
  120. package/lib/tableViewPane.js +58 -0
  121. package/lib/tableViewPane.js.map +1 -0
  122. package/lib/test-import-export/common.js +12 -0
  123. package/lib/test-import-export/common.js.map +1 -0
  124. package/lib/test-import-export/edit-importer.js +25 -0
  125. package/lib/test-import-export/edit-importer.js.map +1 -0
  126. package/lib/test-import-export/testImportExport.js +2 -0
  127. package/lib/test-import-export/testImportExport.js.map +1 -0
  128. package/lib/transaction/pane.js +479 -0
  129. package/lib/transaction/pane.js.map +1 -0
  130. package/lib/transaction/period.js +325 -0
  131. package/lib/transaction/period.js.map +1 -0
  132. package/lib/trip/tripPane.js +176 -0
  133. package/lib/trip/tripPane.js.map +1 -0
  134. package/lib/trustedApplications/trustedApplications.dom.js +177 -0
  135. package/lib/trustedApplications/trustedApplications.dom.js.map +1 -0
  136. package/lib/trustedApplications/trustedApplications.test.d.ts +2 -0
  137. package/lib/trustedApplications/trustedApplications.test.d.ts.map +1 -0
  138. package/lib/trustedApplications/trustedApplications.test.js +64 -0
  139. package/lib/trustedApplications/trustedApplications.test.js.map +1 -0
  140. package/lib/trustedApplications/trustedApplications.utils.js +34 -0
  141. package/lib/trustedApplications/trustedApplications.utils.js.map +1 -0
  142. package/lib/trustedApplications/trustedApplications.view.js +87 -0
  143. package/lib/trustedApplications/trustedApplications.view.js.map +1 -0
  144. package/lib/types.js +6 -0
  145. package/lib/types.js.map +1 -0
  146. package/lib/ui/pane.js +148 -0
  147. package/lib/ui/pane.js.map +1 -0
  148. package/lib/versionInfo.d.ts +32 -0
  149. package/lib/versionInfo.d.ts.map +1 -0
  150. package/lib/versionInfo.js +37 -0
  151. package/lib/versionInfo.js.map +1 -0
  152. package/lib/video/videoPane.js +44 -0
  153. package/lib/video/videoPane.js.map +1 -0
  154. package/package.json +14 -25
  155. package/src/RDFXMLPane.js +60 -0
  156. package/src/argument/argumentPane.js +65 -0
  157. package/src/argument/argument_icon_v04.jpg +0 -0
  158. package/src/argument/icon_argument.png +0 -0
  159. package/src/argument/transparentyingyang.png +0 -0
  160. package/src/attach/attachPane.js +508 -0
  161. package/src/attach/tbl-paperclip-128.png +0 -0
  162. package/src/attach/tbl-paperclip-22.png +0 -0
  163. package/src/attach/tbl-paperclip-22a.png +0 -0
  164. package/src/audio/audioPane.js +197 -0
  165. package/src/chatPreferencesForm.ttl +12 -0
  166. package/src/classInstancePane.js +110 -0
  167. package/src/dashboard/basicPreferences.ts +201 -0
  168. package/src/dashboard/dashboardPane.ts +83 -0
  169. package/src/dashboard/homepage.ts +72 -0
  170. package/src/dashboard/languages/codes.html +8611 -0
  171. package/src/dashboard/languages/codes.xml +3563 -0
  172. package/src/dashboard/languages/codes2.txt +170 -0
  173. package/src/dashboard/languages/foo +70 -0
  174. package/src/dashboard/languages/foo.ttl +0 -0
  175. package/src/dashboard/languages/get-language-names.sh +12 -0
  176. package/src/dashboard/ontologyData.ttl +35 -0
  177. package/src/dashboard/preferencesFormText.ttl +18 -0
  178. package/src/dataContentPane.js +290 -0
  179. package/src/defaultPane.js +102 -0
  180. package/src/dokieli/Makefile +6 -0
  181. package/src/dokieli/dokieliPane.js +190 -0
  182. package/src/dokieli/new.html +30 -0
  183. package/src/dokieli/new.js +22 -0
  184. package/src/form/form-22.png +0 -0
  185. package/src/form/form-b-22.png +0 -0
  186. package/src/form/form.graffle +0 -0
  187. package/src/form/form.png +0 -0
  188. package/src/form/pane.js +217 -0
  189. package/src/form/psuedocode-notes.txt +57 -0
  190. package/src/global.d.ts +4 -0
  191. package/src/home/homePane.ts +72 -0
  192. package/src/humanReadablePane.js +150 -0
  193. package/src/imagePane.js +75 -0
  194. package/src/index.ts +71 -0
  195. package/src/internal/internalPane.ts +263 -0
  196. package/src/mainPage/footer.ts +19 -0
  197. package/src/mainPage/header.ts +79 -0
  198. package/src/mainPage/index.ts +20 -0
  199. package/src/meeting/Makefile +3 -0
  200. package/src/meeting/test/meeting1/Actions/actions.ttl +14 -0
  201. package/src/meeting/test/meeting1/Actions/config.ttl +16 -0
  202. package/src/meeting/test/meeting1/Actions/state.ttl +30 -0
  203. package/src/meeting/test/meeting1/Schedule/details.ttl +34 -0
  204. package/src/meeting/test/meeting1/Schedule/details.ttl.acl +20 -0
  205. package/src/meeting/test/meeting1/Schedule/forms.ttl +75 -0
  206. package/src/meeting/test/meeting1/Schedule/forms.ttl.acl +20 -0
  207. package/src/meeting/test/meeting1/Schedule/index.html +72 -0
  208. package/src/meeting/test/meeting1/Schedule/index.html.acl +20 -0
  209. package/src/meeting/test/meeting1/Schedule/results.ttl +15 -0
  210. package/src/meeting/test/meeting1/Schedule/results.ttl.acl +20 -0
  211. package/src/meeting/test/meeting1/SharedNotes/pad.ttl +23 -0
  212. package/src/meeting/test/meeting1/chat/chat.ttl +1 -0
  213. package/src/meeting/test/meeting1/details.ttl +35 -0
  214. package/src/meeting/test/meeting1/pad/pad.ttl +16 -0
  215. package/src/microblogPane/mbStyle.css +267 -0
  216. package/src/microblogPane/microblogPane.js +1412 -0
  217. package/src/n3Pane.js +56 -0
  218. package/src/outline/context.ts +21 -0
  219. package/src/outline/manager.js +2384 -0
  220. package/src/outline/manager.test.ts +189 -0
  221. package/src/outline/outlineIcons.js +160 -0
  222. package/src/outline/propertyViews.test.ts +36 -0
  223. package/src/outline/propertyViews.ts +37 -0
  224. package/src/outline/queryByExample.js +296 -0
  225. package/src/outline/userInput.js +2373 -0
  226. package/src/outline/viewAsImage.ts +12 -0
  227. package/src/outline/viewAsMbox.ts +14 -0
  228. package/src/pad/images/ColourOff.ai +873 -1
  229. package/src/pad/images/ColourOff.png +0 -0
  230. package/src/pad/images/ColourOn.ai +934 -2
  231. package/src/pad/images/ColourOn.png +0 -0
  232. package/src/pad/padPane.ts +559 -0
  233. package/src/playlist/playlistPane.js +161 -0
  234. package/src/registerPanes.js +147 -0
  235. package/src/schedule/Makefile +6 -0
  236. package/src/schedule/formsForSchedule.js +117 -0
  237. package/src/schedule/formsForSchedule.ttl +115 -0
  238. package/src/schedule/schedulePane.js +1201 -0
  239. package/src/sharing/sharingPane.ts +49 -0
  240. package/src/slideshow/slideshowPane.js +80 -0
  241. package/src/socialPane.js +523 -0
  242. package/src/style/tabbedtab.css +1347 -0
  243. package/src/tabbed/tabbedPane.ts +60 -0
  244. package/src/tableViewPane.js +51 -0
  245. package/src/test-import-export/common.js +6 -0
  246. package/src/test-import-export/edit-importer.js +20 -0
  247. package/src/test-import-export/testImportExport.js +0 -0
  248. package/src/transaction/068010-3d-transparent-glass-icon-alphanumeric-dollar-sign.png +0 -0
  249. package/src/transaction/075988-3d-transparent-glass-icon-business-currency-british-pound-sc35.png +0 -0
  250. package/src/transaction/22-pixel-068010-3d-transparent-glass-icon-alphanumeric-dollar-sign.png +0 -0
  251. package/src/transaction/pane.js +629 -0
  252. package/src/transaction/period.js +374 -0
  253. package/src/transaction/thumbs_075987-3d-transparent-glass-icon-business-creditcard2.png +0 -0
  254. package/src/transaction/thumbs_075989-3d-transparent-glass-icon-business-currency-cent-sc35.png +0 -0
  255. package/src/trip/tripPane.js +176 -0
  256. package/src/trustedApplications/__snapshots__/trustedApplications.test.ts.snap +176 -0
  257. package/src/trustedApplications/trustedApplications.dom.ts +276 -0
  258. package/src/trustedApplications/trustedApplications.test.ts +82 -0
  259. package/src/trustedApplications/trustedApplications.utils.ts +51 -0
  260. package/src/trustedApplications/trustedApplications.view.ts +80 -0
  261. package/src/types.ts +34 -0
  262. package/src/ui/22-builder.png +0 -0
  263. package/src/ui/builder.graffle +0 -0
  264. package/src/ui/builder.png +0 -0
  265. package/src/ui/builder2.png +0 -0
  266. package/src/ui/pane.js +226 -0
  267. package/src/versionInfo.ts +30 -0
  268. package/src/video/videoPane.js +44 -0
  269. package/timestamp.sh +13 -0
  270. package/travis/bumpversion.js +29 -0
  271. package/tsconfig.json +78 -0
  272. package/typings/raw-loader.d.ts +4 -0
  273. package/typings/solid-namespace/index.d.ts +9 -0
  274. package/webpack.config.js +41 -0
  275. package/dist/dashboard/basicPreferences.js +0 -155
  276. package/dist/dashboard/basicPreferences.js.map +0 -1
  277. package/dist/dashboard/dashboardPane.js +0 -63
  278. package/dist/dashboard/dashboardPane.js.map +0 -1
  279. package/dist/dashboard/homepage.js +0 -63
  280. package/dist/dashboard/homepage.js.map +0 -1
  281. package/dist/home/homePane.js +0 -68
  282. package/dist/home/homePane.js.map +0 -1
  283. package/dist/index.js +0 -48
  284. package/dist/index.js.map +0 -1
  285. package/dist/internal/internalPane.js +0 -195
  286. package/dist/internal/internalPane.js.map +0 -1
  287. package/dist/mainPage/footer.js +0 -16
  288. package/dist/mainPage/footer.js.map +0 -1
  289. package/dist/mainPage/header.js +0 -84
  290. package/dist/mainPage/header.js.map +0 -1
  291. package/dist/mainPage/index.js +0 -30
  292. package/dist/mainPage/index.js.map +0 -1
  293. package/dist/outline/context.js +0 -13
  294. package/dist/outline/context.js.map +0 -1
  295. package/dist/outline/propertyViews.js +0 -33
  296. package/dist/outline/propertyViews.js.map +0 -1
  297. package/dist/outline/viewAsImage.js +0 -7
  298. package/dist/outline/viewAsImage.js.map +0 -1
  299. package/dist/outline/viewAsMbox.js.map +0 -1
  300. package/dist/pad/padPane.js +0 -420
  301. package/dist/pad/padPane.js.map +0 -1
  302. package/dist/sharing/sharingPane.js +0 -45
  303. package/dist/sharing/sharingPane.js.map +0 -1
  304. package/dist/tabbed/tabbedPane.js +0 -55
  305. package/dist/tabbed/tabbedPane.js.map +0 -1
  306. package/dist/trustedApplications/trustedApplications.dom.js +0 -158
  307. package/dist/trustedApplications/trustedApplications.dom.js.map +0 -1
  308. package/dist/trustedApplications/trustedApplications.utils.js +0 -24
  309. package/dist/trustedApplications/trustedApplications.utils.js.map +0 -1
  310. package/dist/trustedApplications/trustedApplications.view.js +0 -62
  311. package/dist/trustedApplications/trustedApplications.view.js.map +0 -1
  312. package/dist/types.js +0 -2
  313. package/dist/types.js.map +0 -1
  314. package/dist/versionInfo.js +0 -31
  315. package/dist/versionInfo.js.map +0 -1
  316. /package/{dist → lib}/dashboard/basicPreferences.d.ts +0 -0
  317. /package/{dist → lib}/dashboard/basicPreferences.d.ts.map +0 -0
  318. /package/{dist → lib}/dashboard/dashboardPane.d.ts +0 -0
  319. /package/{dist → lib}/dashboard/dashboardPane.d.ts.map +0 -0
  320. /package/{dist → lib}/dashboard/homepage.d.ts +0 -0
  321. /package/{dist → lib}/dashboard/homepage.d.ts.map +0 -0
  322. /package/{dist → lib}/home/homePane.d.ts +0 -0
  323. /package/{dist → lib}/home/homePane.d.ts.map +0 -0
  324. /package/{dist → lib}/index.d.ts +0 -0
  325. /package/{dist → lib}/index.d.ts.map +0 -0
  326. /package/{dist → lib}/internal/internalPane.d.ts +0 -0
  327. /package/{dist → lib}/internal/internalPane.d.ts.map +0 -0
  328. /package/{dist → lib}/mainPage/footer.d.ts +0 -0
  329. /package/{dist → lib}/mainPage/footer.d.ts.map +0 -0
  330. /package/{dist → lib}/mainPage/header.d.ts +0 -0
  331. /package/{dist → lib}/mainPage/header.d.ts.map +0 -0
  332. /package/{dist → lib}/mainPage/index.d.ts +0 -0
  333. /package/{dist → lib}/outline/context.d.ts +0 -0
  334. /package/{dist → lib}/outline/context.d.ts.map +0 -0
  335. /package/{dist → lib}/outline/propertyViews.d.ts +0 -0
  336. /package/{dist → lib}/outline/propertyViews.d.ts.map +0 -0
  337. /package/{dist → lib}/outline/viewAsImage.d.ts +0 -0
  338. /package/{dist → lib}/outline/viewAsImage.d.ts.map +0 -0
  339. /package/{dist → lib}/outline/viewAsMbox.d.ts +0 -0
  340. /package/{dist → lib}/outline/viewAsMbox.d.ts.map +0 -0
  341. /package/{dist → lib}/pad/padPane.d.ts +0 -0
  342. /package/{dist → lib}/pad/padPane.d.ts.map +0 -0
  343. /package/{dist → lib}/sharing/sharingPane.d.ts +0 -0
  344. /package/{dist → lib}/sharing/sharingPane.d.ts.map +0 -0
  345. /package/{dist → lib}/tabbed/tabbedPane.d.ts +0 -0
  346. /package/{dist → lib}/tabbed/tabbedPane.d.ts.map +0 -0
  347. /package/{dist → lib}/trustedApplications/trustedApplications.dom.d.ts +0 -0
  348. /package/{dist → lib}/trustedApplications/trustedApplications.dom.d.ts.map +0 -0
  349. /package/{dist → lib}/trustedApplications/trustedApplications.utils.d.ts +0 -0
  350. /package/{dist → lib}/trustedApplications/trustedApplications.utils.d.ts.map +0 -0
  351. /package/{dist → lib}/trustedApplications/trustedApplications.view.d.ts +0 -0
  352. /package/{dist → lib}/trustedApplications/trustedApplications.view.d.ts.map +0 -0
  353. /package/{dist → lib}/types.d.ts +0 -0
  354. /package/{dist → lib}/types.d.ts.map +0 -0
@@ -0,0 +1,1032 @@
1
+ "use strict";
2
+
3
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _solidLogic = require("solid-logic");
9
+ var UI = _interopRequireWildcard(require("solid-ui"));
10
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
11
+ /*
12
+ Microblog pane
13
+ Charles McKenzie <charles2@mit.edu>
14
+ */
15
+ /* global alert */
16
+ var _default = exports["default"] = {
17
+ icon: UI.icons.originalIconBase + 'microblog/microblog.png',
18
+ name: 'microblogPane',
19
+ label: function label(subject) {
20
+ if (_solidLogic.store.whether(subject, UI.ns.rdf('type'), UI.ns.foaf('Person'))) {
21
+ return 'Microblog';
22
+ } else {
23
+ return null;
24
+ }
25
+ },
26
+ render: function render(s, doc) {
27
+ //* **********************************************
28
+ // NAMESPACES SECTION
29
+ //* **********************************************
30
+ var SIOC = UI.rdf.Namespace('http://rdfs.org/sioc/ns#');
31
+ var SIOCt = UI.rdf.Namespace('http://rdfs.org/sioc/types#');
32
+ var FOAF = UI.rdf.Namespace('http://xmlns.com/foaf/0.1/');
33
+ var terms = UI.rdf.Namespace('http://purl.org/dc/terms/');
34
+ var RDF = UI.ns.rdf;
35
+ var kb = _solidLogic.store;
36
+ var charCount = 140;
37
+ var sf = _solidLogic.store.fetcher;
38
+ //* **********************************************
39
+ // BACK END
40
+ //* **********************************************
41
+ var sparqlUpdater = kb.updater;
42
+ // ----------------------------------------------
43
+ // FOLLOW LIST
44
+ // store the URIs of followed users for
45
+ // dereferencing the @replies
46
+ // ----------------------------------------------
47
+ var FollowList = function FollowList(user) {
48
+ this.userlist = {};
49
+ this.uris = {};
50
+ var myFollows = kb.each(kb.sym(user), SIOC('follows'));
51
+ for (var mf in myFollows) {
52
+ this.add(kb.any(myFollows[mf], SIOC('id')), myFollows[mf].uri);
53
+ }
54
+ };
55
+ FollowList.prototype.add = function (user, uri) {
56
+ // add a user to the follows store
57
+ if (this.userlist[user]) {
58
+ if (!(uri in this.uris)) {
59
+ this.userlist[user].push(uri);
60
+ this.uris[uri] = '';
61
+ }
62
+ } else {
63
+ this.userlist[user] = [uri];
64
+ }
65
+ };
66
+ FollowList.prototype.selectUser = function (user) {
67
+ // check if a user is in the follows list.
68
+ if (this.userlist[user]) {
69
+ return [this.userlist[user].length === 1, this.userlist[user]];
70
+ } else {
71
+ // user does not follow any users with this nick
72
+ return [false, []];
73
+ }
74
+ };
75
+ // ----------------------------------------------
76
+ // FAVORITES
77
+ // controls the list of favorites.
78
+ // constructor expects a user as uri.
79
+ // ----------------------------------------------
80
+ var Favorites = function Favorites(user) {
81
+ this.favorites = {};
82
+ this.favoritesURI = '';
83
+ if (!user) {
84
+ // TODO is this even useful?
85
+ return;
86
+ }
87
+ this.user = user.split('#')[0];
88
+ var created = kb.each(kb.sym(user), SIOC('creator_of'));
89
+ for (var c in created) {
90
+ if (kb.whether(created[c], RDF('type'), SIOCt('FavouriteThings'))) {
91
+ this.favoritesURI = created[c];
92
+ var favs = kb.each(created[c], SIOC('container_of'));
93
+ for (var f in favs) {
94
+ this.favorites[favs[f]] = '';
95
+ }
96
+ break;
97
+ }
98
+ }
99
+ };
100
+ Favorites.prototype.favorited = function (post) {
101
+ /* Favorited- returns true if the post is a favorite
102
+ false otherwise */
103
+ return kb.sym(post) in this.favorites;
104
+ };
105
+ Favorites.prototype.add = function (post, callback) {
106
+ var batch = new UI.rdf.Statement(this.favoritesURI, SIOC('container_of'), kb.sym(post), kb.sym(this.user));
107
+ sparqlUpdater.insert_statement(batch, function (a, success, c) {
108
+ if (success) {
109
+ kb.add(batch.subject, batch.predicate, batch.object, batch.why);
110
+ }
111
+ callback(a, success, c);
112
+ });
113
+ };
114
+ Favorites.prototype.remove = function (post, callback) {
115
+ var batch = new UI.rdf.Statement(this.favoritesURI, SIOC('container_of'), kb.sym(post), kb.sym(this.user));
116
+ sparqlUpdater.delete_statement(batch, function (a, success, c) {
117
+ if (success) {
118
+ kb.add(batch.subject, batch.predicate, batch.object, batch.why);
119
+ }
120
+ callback(a, success, c);
121
+ });
122
+ };
123
+ // ----------------------------------------------
124
+ // MICROBLOG
125
+ // store the uri's of followed users for
126
+ // dereferencing the @replies.
127
+ // ----------------------------------------------
128
+ var Microblog = function Microblog(kb) {
129
+ this.kb = kb;
130
+
131
+ // attempt to fetch user account from local preferences if just
132
+ // in case the user's foaf was not writable. add it to the store
133
+ // this will probably need to change.
134
+ var theUser = _solidLogic.authn.currentUser();
135
+ if (theUser) {
136
+ var theAccount = UI.preferences.get('acct');
137
+ if (theAccount) {
138
+ theAccount = kb.sym(theAccount);
139
+ }
140
+ if (theUser && theAccount) {
141
+ kb.add(theUser, FOAF('holdsAccount'), theAccount, theUser.uri.split('#')[0]);
142
+ }
143
+ }
144
+ };
145
+ Microblog.prototype.getUser = function (uri) {
146
+ var User = {};
147
+ User.name = kb.any(uri, SIOC('name')) ? kb.any(uri, SIOC('name')) : '';
148
+ User.avatar = kb.any(uri, SIOC('avatar')) ? kb.any(uri, SIOC('avatar')) : '';
149
+ User.id = kb.any(uri, SIOC('id'));
150
+ User.sym = uri;
151
+ return User;
152
+ };
153
+ Microblog.prototype.getPost = function (uri) {
154
+ var Post = {};
155
+ // date ----------
156
+ var postLink = new Date(kb.anyValue(uri, terms('created')));
157
+ var h = postLink.getHours();
158
+ var a = h > 12 ? ' PM' : ' AM';
159
+ h = h > 12 ? h - 12 : h;
160
+ var m = postLink.getMinutes();
161
+ m = m < 10 ? '0' + m : m;
162
+ var mo = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
163
+ var da = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
164
+ var ds = da[postLink.getDay()] + ' ' + postLink.getDate() + ' ' + mo[postLink.getMonth()] + ' ' + postLink.getFullYear();
165
+ postLink = h + ':' + m + a + ' on ' + ds;
166
+ Post.date = postLink;
167
+ // ---------
168
+ Post.mentions = '';
169
+ Post.message = String(kb.any(uri, SIOC('content')));
170
+ Post.creator = kb.any(uri, SIOC('has_creator'));
171
+ Post.uri = '';
172
+ return Post;
173
+ };
174
+ Microblog.prototype.gen_random_uri = function (base) {
175
+ // generate random uri
176
+ var uriNonce = base + '#n' + Math.floor(Math.random() * 10e9);
177
+ return kb.sym(uriNonce);
178
+ };
179
+ Microblog.prototype.statusUpdate = function (statusMsg, callback, replyTo, meta) {
180
+ var myUserURI = this.getMyURI();
181
+ var myUser = kb.sym(myUserURI.split('#')[0]);
182
+ var newPost = this.gen_random_uri(myUser.uri);
183
+ var microlist = kb.each(kb.sym(myUserURI), SIOC('creator_of'));
184
+ var micro;
185
+ for (var microlistelement in microlist) {
186
+ if (kb.whether(microlist[microlistelement], RDF('type'), SIOCt('Microblog')) && !kb.whether(microlist[microlistelement], SIOC('topic'), kb.sym(this.getMyURI()))) {
187
+ micro = microlist[microlistelement];
188
+ break;
189
+ }
190
+ }
191
+
192
+ // generate new post
193
+ var batch = [new UI.rdf.Statement(newPost, RDF('type'), SIOCt('MicroblogPost'), myUser), new UI.rdf.Statement(newPost, SIOC('has_creator'), kb.sym(myUserURI), myUser), new UI.rdf.Statement(newPost, SIOC('content'), statusMsg, myUser), new UI.rdf.Statement(newPost, terms('created'), new Date(), myUser), new UI.rdf.Statement(micro, SIOC('container_of'), newPost, myUser)];
194
+
195
+ // message replies
196
+ if (replyTo) {
197
+ batch.push(new UI.rdf.Statement(newPost, SIOC('reply_of'), kb.sym(replyTo), myUser));
198
+ }
199
+
200
+ // @replies, #hashtags, !groupReplies
201
+ for (var r in meta.recipients) {
202
+ batch.push(new UI.rdf.Statement(newPost, SIOC('topic'), kb.sym(meta.recipients[r]), myUser));
203
+ batch.push(new UI.rdf.Statement(kb.any(), SIOC('container_of'), newPost, myUser));
204
+ var mblogs = kb.each(kb.sym(meta.recipients[r]), SIOC('creator_of'));
205
+ for (var mbl in mblogs) {
206
+ if (kb.whether(mblogs[mbl], SIOC('topic'), kb.sym(meta.recipients[r]))) {
207
+ var replyBatch = new UI.rdf.Statement(mblogs[mbl], SIOC('container_of'), newPost, kb.sym(meta.recipients[r].split('#')[0]));
208
+ sparqlUpdater.insert_statement(replyBatch);
209
+ }
210
+ }
211
+ }
212
+ sparqlUpdater.insert_statement(batch, function (a, b, c) {
213
+ callback(a, b, c, batch);
214
+ });
215
+ };
216
+ Microblog.prototype.getMyURI = function () {
217
+ var me = _solidLogic.authn.currentUser();
218
+ console.log(me);
219
+ var myMicroblog = kb.any(kb.sym(me), FOAF('holdsAccount'));
220
+ console.log('\n\n' + myMicroblog);
221
+ return myMicroblog ? myMicroblog.uri : false;
222
+ };
223
+ Microblog.prototype.generateNewMB = function (id, name, avatar, loc) {
224
+ var host = loc + '/' + id;
225
+ var rememberMicroblog = function rememberMicroblog() {
226
+ UI.preferences.set('acct', host + '#' + id);
227
+ };
228
+ var cbgenUserMB = function cbgenUserMB(a, success, c, d) {
229
+ if (success) {
230
+ alert('Microblog generated at ' + host + '#' + id + 'please add <b>' + host + '</b> to your foaf.');
231
+ // mbCancelNewMB() @@TBD
232
+ // assume the foaf is not writable and store the microblog to the
233
+ // preferences for later retrieval.
234
+ // this will probably need to change.
235
+ rememberMicroblog();
236
+ for (var triple in d) {
237
+ kb.add(d[triple].subject, d[triple].predicate, d[triple].object, d[triple].why);
238
+ }
239
+ }
240
+ };
241
+ var genUserMB = [
242
+ // user
243
+ new UI.rdf.Statement(kb.sym(host + '#' + id), RDF('type'), SIOC('User'), kb.sym(host)), new UI.rdf.Statement(kb.sym(host + '#' + id), SIOC('creator_of'), kb.sym(host + '#mb'), kb.sym(host)), new UI.rdf.Statement(kb.sym(host + '#' + id), SIOC('creator_of'), kb.sym(host + '#mbn'), kb.sym(host)), new UI.rdf.Statement(kb.sym(host + '#' + id), SIOC('creator_of'), kb.sym(host + '#fav'), kb.sym(host)), new UI.rdf.Statement(kb.sym(host + '#' + id), SIOC('name'), name, kb.sym(host)), new UI.rdf.Statement(kb.sym(host + '#' + id), SIOC('id'), id, kb.sym(host)), new UI.rdf.Statement(kb.sym(host + '#' + id), RDF('label'), id, kb.sym(host)), new UI.rdf.Statement(s, FOAF('holdsAccount'), kb.sym(host + '#' + id), kb.sym(host)),
244
+ // microblog
245
+ new UI.rdf.Statement(kb.sym(host + '#mb'), RDF('type'), SIOCt('Microblog'), kb.sym(host)), new UI.rdf.Statement(kb.sym(host + '#mb'), SIOC('has_creator'), kb.sym(host + '#' + id), kb.sym(host)),
246
+ // notification microblog
247
+ new UI.rdf.Statement(kb.sym(host + '#mbn'), RDF('type'), SIOCt('Microblog'), kb.sym(host)), new UI.rdf.Statement(kb.sym(host + '#mbn'), SIOC('topic'), kb.sym(host + '#' + id), kb.sym(host)), new UI.rdf.Statement(kb.sym(host + '#mbn'), SIOC('has_creator'), kb.sym(host + '#' + id), kb.sym(host)),
248
+ // favorites container
249
+ new UI.rdf.Statement(kb.sym(host + '#fav'), RDF('type'), SIOCt('FavouriteThings'), kb.sym(host)), new UI.rdf.Statement(kb.sym(host + '#fav'), SIOC('has_creator'), kb.sym(host + '#' + id), kb.sym(host))];
250
+ if (avatar) {
251
+ // avatar optional
252
+ genUserMB.push(new UI.rdf.Statement(kb.sym(host + '#' + id), SIOC('avatar'), kb.sym(avatar), kb.sym(host)));
253
+ }
254
+ sparqlUpdater.insert_statement(genUserMB, cbgenUserMB);
255
+ };
256
+ var mb = new Microblog(kb);
257
+ var myFavorites = new Favorites(mb.getMyURI());
258
+ var myFollowList = new FollowList(mb.getMyURI());
259
+
260
+ //* **********************************************
261
+ // FRONT END FUNCTIONALITY
262
+ //* **********************************************
263
+ // ----------------------------------------------
264
+ // PANE
265
+ // User Interface for the Microblog Pane
266
+ // ----------------------------------------------
267
+ var Pane = function Pane(s, doc, microblogPane) {
268
+ var TabManager = function TabManager(doc) {
269
+ this.tablist = {};
270
+ this.doc = doc;
271
+ this.tabView = doc.createElement('ul');
272
+ this.tabView.className = 'tabslist';
273
+ };
274
+ TabManager.prototype.create = function (id, caption, view, isDefault) {
275
+ var tab = this.doc.createElement('li');
276
+ tab.innerHTML = caption;
277
+ if (isDefault) {
278
+ tab.className = 'active';
279
+ }
280
+ tab.id = id;
281
+ var change = this.change;
282
+ var tablist = this.tablist;
283
+ tab.addEventListener('click', function (evt) {
284
+ change(evt.target.id, tablist, doc);
285
+ }, false);
286
+ this.tablist[id] = {
287
+ view: view.id,
288
+ tab: tab
289
+ };
290
+ this.tabView.appendChild(tab);
291
+ };
292
+ TabManager.prototype.getTabView = function () {
293
+ return this.tabView;
294
+ };
295
+ TabManager.prototype.change = function (id, tablist, doc) {
296
+ for (var tab in tablist) {
297
+ if (tab === id) {
298
+ tablist[id].tab.className = 'active';
299
+ doc.getElementById(tablist[id].view).className += ' active';
300
+ } else {
301
+ var view = doc.getElementById(tablist[tab].view);
302
+ view.className = view.className.replace(/\w*active\w*/, '');
303
+ tablist[tab].tab.className = tablist[id].tab.className.replace(/\w*active\w*/, '');
304
+ }
305
+ }
306
+ };
307
+ this.microblogPane = microblogPane;
308
+ var accounts = kb.each(s, FOAF('holdsAccount'));
309
+ var account;
310
+ for (var a in accounts) {
311
+ if (kb.whether(accounts[a], RDF('type'), SIOC('User')) && kb.whether(kb.any(accounts[a], SIOC('creator_of')), RDF('type'), SIOCt('Microblog'))) {
312
+ account = accounts[a];
313
+ break;
314
+ }
315
+ }
316
+ this.Ifollow = kb.whether(kb.sym(mb.getMyURI()), SIOC('follows'), account);
317
+ var resourceType = kb.any(s, RDF('type'));
318
+ if (resourceType.uri === SIOCt('Microblog').uri || resourceType.uri === SIOCt('MicroblogPost').uri) {
319
+ this.thisIsMe = kb.any(s, SIOC('has_creator')).uri === mb.getMyURI();
320
+ } else if (resourceType.uri === SIOC('User').uri) {
321
+ this.thisIsMe = s.uri === mb.getMyURI();
322
+ } else if (resourceType.uri === FOAF('Person').uri) {
323
+ var me = _solidLogic.authn.currentUser();
324
+ var meUri = me && me.uri;
325
+ this.thisIsMe = s.uri === meUri;
326
+ } else {
327
+ this.thisIsMe = false;
328
+ }
329
+ this.Tab = new TabManager(doc);
330
+ };
331
+ Pane.prototype.notify = function (messageString) {
332
+ var xmsg = doc.createElement('li');
333
+ xmsg.className = 'notify';
334
+ xmsg.innerHTML = messageString;
335
+ doc.getElementById('notify-container').appendChild(xmsg);
336
+ setTimeout(function () {
337
+ doc.getElementById('notify-container').removeChild(xmsg);
338
+ // delete xmsg;
339
+ }, 4000);
340
+ };
341
+ Pane.prototype.header = function (s, doc) {
342
+ var that = this;
343
+ function lsFollowUser() {
344
+ var myUser = kb.sym(mb.getMyURI());
345
+ // var Ifollow = that.Ifollow
346
+ var username = that.creator.name;
347
+ var mbconfirmFollow = function mbconfirmFollow(uri, success, _msg) {
348
+ if (success === true) {
349
+ if (!that.Ifollow) {
350
+ // prevent duplicate entries from being added to kb (because that was happening)
351
+ if (!kb.whether(followMe.subject, followMe.predicate, followMe.object, followMe.why)) {
352
+ kb.add(followMe.subject, followMe.predicate, followMe.object, followMe.why);
353
+ }
354
+ } else {
355
+ kb.removeMany(followMe.subject, followMe.predicate, followMe.object, followMe.why);
356
+ }
357
+ console.log(that.Ifollow);
358
+ that.Ifollow = !that.Ifollow;
359
+ xfollowButton.disabled = false;
360
+ console.log(that.Ifollow);
361
+ var followButtonLabel = that.Ifollow ? 'Unfollow ' : 'Follow ';
362
+ var doFollow = that.Ifollow ? 'now follow ' : 'no longer follow ';
363
+ xfollowButton.value = followButtonLabel + username;
364
+ that.notify('You ' + doFollow + username + '.');
365
+ }
366
+ };
367
+ var followMe = new UI.rdf.Statement(myUser, SIOC('follows'), that.creator.sym, myUser);
368
+ xfollowButton.disabled = true;
369
+ xfollowButton.value = 'Updating...';
370
+ if (!that.Ifollow) {
371
+ sparqlUpdater.insert_statement(followMe, mbconfirmFollow);
372
+ } else {
373
+ sparqlUpdater.delete_statement(followMe, mbconfirmFollow);
374
+ }
375
+ }
376
+ var notify = function notify(messageString) {
377
+ var xmsg = doc.createElement('li');
378
+ xmsg.className = 'notify';
379
+ xmsg.innerHTML = messageString;
380
+ doc.getElementById('notify-container').appendChild(xmsg);
381
+ setTimeout(function () {
382
+ doc.getElementById('notify-container').removeChild(xmsg);
383
+ // delete xmsg;
384
+ }, 4000);
385
+ };
386
+ var mbCancelNewMB = function mbCancelNewMB(_evt) {
387
+ xupdateContainer.removeChild(xupdateContainer.childNodes[xupdateContainer.childNodes.length - 1]);
388
+ xcreateNewMB.disabled = false;
389
+ };
390
+ var lsCreateNewMB = function lsCreateNewMB(_evt) {
391
+ // disable the create new microblog button.
392
+ // then prefills the information.
393
+ xcreateNewMB.disabled = true;
394
+ var xcmb = doc.createElement('div');
395
+ var xcmbName = doc.createElement('input');
396
+ if (kb.whether(s, FOAF('name'))) {
397
+ // handle use of FOAF:NAME
398
+ xcmbName.value = kb.any(s, FOAF('name'));
399
+ } else {
400
+ // handle use of family and given name
401
+ xcmbName.value = kb.any(s, FOAF('givenname')) ? kb.any(s, FOAF('givenname')) + ' ' : '';
402
+ xcmbName.value += kb.any(s, FOAF('family_name')) ? kb.any(s, FOAF('givenname')) : '';
403
+ xcmbName.value = kb.any(s, FOAF('givenname')) + ' ' + kb.any(s, FOAF('family_name'));
404
+ }
405
+ var xcmbId = doc.createElement('input');
406
+ xcmbId.value = kb.any(s, FOAF('nick')) ? kb.any(s, FOAF('nick')) : '';
407
+ var xcmbAvatar = doc.createElement('input');
408
+ if (kb.whether(s, FOAF('img'))) {
409
+ // handle use of img
410
+ xcmbAvatar.value = kb.any(s, FOAF('img')).uri;
411
+ } else {
412
+ // otherwise try depiction
413
+ xcmbAvatar.value = kb.any(s, FOAF('depiction')) ? kb.any(s, FOAF('depiction')).uri : '';
414
+ }
415
+ var workspace;
416
+ // = kb.any(s,WORKSPACE) //TODO - ADD URI FOR WORKSPACE DEFINITION
417
+ var xcmbWritable = doc.createElement('input');
418
+ xcmbWritable.value = workspace || 'http://dig.csail.mit.edu/2007/wiki/sandbox'; // @@@
419
+ xcmb.innerHTML = "\n <form class =\"createNewMB\" id=\"createNewMB\">\n <p id=\"xcmbname\"><span class=\"\">Name: </span></p>\n <p id=\"xcmbid\">Id: </p>\n <p id=\"xcmbavatar\">Avatar: </p>\n <p id=\"xcmbwritable\">Host my microblog at: </p>\n <input type=\"button\" id=\"mbCancel\" value=\"Cancel\" />\n <input type=\"submit\" id=\"mbCreate\" value=\"Create!\" />\n </form>\n ";
420
+ xupdateContainer.appendChild(xcmb);
421
+ doc.getElementById('xcmbname').appendChild(xcmbName);
422
+ doc.getElementById('xcmbid').appendChild(xcmbId);
423
+ doc.getElementById('xcmbavatar').appendChild(xcmbAvatar);
424
+ doc.getElementById('xcmbwritable').appendChild(xcmbWritable);
425
+ doc.getElementById('mbCancel').addEventListener('click', mbCancelNewMB, false);
426
+ doc.getElementById('createNewMB').addEventListener('submit', function () {
427
+ mb.generateNewMB(xcmbId.value, xcmbName.value, xcmbAvatar.value, xcmbWritable.value);
428
+ }, false);
429
+ xcmbName.focus();
430
+ };
431
+ var mbSubmitPost = function mbSubmitPost() {
432
+ var meta = {
433
+ recipients: []
434
+ };
435
+ // user has selected a microblog to post to
436
+ if (mb.getMyURI()) {
437
+ // let myUser = kb.sym(mb.getMyURI())
438
+ // submission callback
439
+ var cbconfirmSubmit = function cbconfirmSubmit(uri, success, responseText, d) {
440
+ if (success === true) {
441
+ for (var triple in d) {
442
+ kb.add(d[triple].subject, d[triple].predicate, d[triple].object, d[triple].why);
443
+ }
444
+ xupdateSubmit.disabled = false;
445
+ xupdateStatus.value = '';
446
+ mbLetterCount();
447
+ notify('Microblog Updated.');
448
+ if (that.thisIsMe) {
449
+ doc.getElementById('postNotificationList').insertBefore(that.generatePost(d[0].subject), doc.getElementById('postNotificationList').childNodes[0]);
450
+ }
451
+ } else {
452
+ notify('There was a problem submitting your post.');
453
+ }
454
+ };
455
+ var words = xupdateStatus.value.split(' ');
456
+ var mbUpdateWithReplies = function mbUpdateWithReplies() {
457
+ xupdateSubmit.disabled = true;
458
+ xupdateSubmit.value = 'Updating...';
459
+ mb.statusUpdate(xupdateStatus.value, cbconfirmSubmit, xinReplyToContainer.value, meta);
460
+ };
461
+ var _loop = function _loop() {
462
+ if (words[word].match(/@\w+/)) {
463
+ var atUser = words[word].replace(/\W/g, '');
464
+ var recipient = myFollowList.selectUser(atUser);
465
+ if (recipient[0] === true) {
466
+ meta.recipients.push(recipient[1][0]);
467
+ } else if (recipient[1].length > 1) {
468
+ // if multiple users allow the user to choose
469
+ var xrecipients = doc.createElement('select');
470
+ var xrecipientsSubmit = doc.createElement('input');
471
+ xrecipientsSubmit.type = 'button';
472
+ xrecipientsSubmit.value = 'Continue';
473
+ xrecipientsSubmit.addEventListener('click', function () {
474
+ meta.recipients.push(recipient[1][xrecipients.value]);
475
+ mbUpdateWithReplies();
476
+ xrecipients.parentNode.removeChild(xrecipientsSubmit);
477
+ xrecipients.parentNode.removeChild(xrecipients);
478
+ }, false);
479
+ var recipChoice = function recipChoice(recip, c) {
480
+ var name = kb.any(kb.sym(recip), SIOC('name'));
481
+ var choice = doc.createElement('option');
482
+ choice.value = c;
483
+ choice.innerHTML = name;
484
+ return choice;
485
+ };
486
+ for (var r in recipient[1]) {
487
+ xrecipients.appendChild(recipChoice(recipient[1][r], r));
488
+ }
489
+ xupdateContainer.appendChild(xrecipients);
490
+ xupdateContainer.appendChild(xrecipientsSubmit);
491
+ return {
492
+ v: void 0
493
+ };
494
+ } else {
495
+ // no users known or self reference.
496
+ if (String(kb.any(kb.sym(mb.getMyURI()), SIOC('id'))).toLowerCase() === atUser.toLowerCase()) {
497
+ meta.recipients.push(mb.getMyURI());
498
+ } else {
499
+ notify('You do not follow ' + atUser + '. Try following ' + atUser + ' before mentioning them.');
500
+ return {
501
+ v: void 0
502
+ };
503
+ }
504
+ }
505
+ }
506
+ /* else if(words[word].match(/\#\w+/)){
507
+ //hashtag
508
+ } else if(words[word].match(/\!\w+/)){
509
+ //usergroup
510
+ } */
511
+ },
512
+ _ret;
513
+ for (var word in words) {
514
+ _ret = _loop();
515
+ if (_ret) return _ret.v;
516
+ }
517
+ mbUpdateWithReplies();
518
+ } else {
519
+ notify('Please set your microblog first.');
520
+ }
521
+ };
522
+ var mbLetterCount = function mbLetterCount() {
523
+ xupdateStatusCounter.innerHTML = charCount - xupdateStatus.value.length;
524
+ xupdateStatusCounter.style.color = charCount - xupdateStatus.value.length < 0 ? '#c33' : '';
525
+ if (xupdateStatus.value.length === 0) {
526
+ xinReplyToContainer.value = '';
527
+ xupdateSubmit.value = 'Send';
528
+ }
529
+ };
530
+ // reply viewer
531
+ var xviewReply = doc.createElement('ul');
532
+ xviewReply.className = 'replyView';
533
+ xviewReply.addEventListener('click', function () {
534
+ xviewReply.className = 'replyView';
535
+ }, false);
536
+ this.xviewReply = xviewReply;
537
+ var headerContainer = doc.createElement('div');
538
+ headerContainer.className = 'header-container';
539
+
540
+ // ---create status update box---
541
+ var xnotify = doc.createElement('ul');
542
+ xnotify.id = 'notify-container';
543
+ xnotify.className = 'notify-container';
544
+ this.xnotify = xnotify;
545
+ var xupdateContainer = doc.createElement('form');
546
+ xupdateContainer.className = 'update-container';
547
+ xupdateContainer.innerHTML = '<h3>What are you up to?</h3>';
548
+ var xinReplyToContainer;
549
+ var xupdateStatus;
550
+ var xupdateStatusCounter;
551
+ var xupdateSubmit;
552
+ var xcreateNewMB;
553
+ if (mb.getMyURI()) {
554
+ xinReplyToContainer = doc.createElement('input');
555
+ xinReplyToContainer.id = 'xinReplyToContainer';
556
+ xinReplyToContainer.type = 'hidden';
557
+ xupdateStatus = doc.createElement('textarea');
558
+ xupdateStatus.id = 'xupdateStatus';
559
+ xupdateStatusCounter = doc.createElement('span');
560
+ xupdateStatusCounter.appendChild(doc.createTextNode(charCount));
561
+ xupdateStatus.cols = 30;
562
+ xupdateStatus.addEventListener('keyup', mbLetterCount, false);
563
+ xupdateStatus.addEventListener('focus', mbLetterCount, false);
564
+ xupdateSubmit = doc.createElement('input');
565
+ xupdateSubmit.id = 'xupdateSubmit';
566
+ xupdateSubmit.type = 'submit';
567
+ xupdateSubmit.value = 'Send';
568
+ xupdateContainer.appendChild(xinReplyToContainer);
569
+ xupdateContainer.appendChild(xupdateStatusCounter);
570
+ xupdateContainer.appendChild(xupdateStatus);
571
+ xupdateContainer.appendChild(xupdateSubmit);
572
+ xupdateContainer.addEventListener('submit', mbSubmitPost, false);
573
+ } else {
574
+ var xnewUser = doc.createTextNode("Hi, it looks like you don't have a microblog, " + ' would you like to create one? ');
575
+ xcreateNewMB = doc.createElement('input');
576
+ xcreateNewMB.type = 'button';
577
+ xcreateNewMB.value = 'Create a new Microblog';
578
+ xcreateNewMB.addEventListener('click', lsCreateNewMB, false);
579
+ xupdateContainer.appendChild(xnewUser);
580
+ xupdateContainer.appendChild(xcreateNewMB);
581
+ }
582
+ headerContainer.appendChild(xupdateContainer);
583
+ var subheaderContainer = doc.createElement('div');
584
+ subheaderContainer.className = 'subheader-container';
585
+
586
+ // user header
587
+ // this.creator
588
+ var creators = kb.each(s, FOAF('holdsAccount'));
589
+ var creator;
590
+ for (var c in creators) {
591
+ if (kb.whether(creators[c], RDF('type'), SIOC('User')) && kb.whether(kb.any(creators[c], SIOC('creator_of')), RDF('type'), SIOCt('Microblog'))) {
592
+ creator = creators[c];
593
+ // var mb = kb.sym(creator.uri.split("#")[0]);
594
+ // store.fetcher.refresh(mb);
595
+ break;
596
+ // TODO add support for more than one microblog in same foaf
597
+ }
598
+ }
599
+ var xfollowButton;
600
+ if (creator) {
601
+ this.creator = mb.getUser(creator);
602
+ // ---display avatar, if available ---
603
+ if (this.creator.avatar !== '') {
604
+ var avatar = doc.createElement('img');
605
+ avatar.src = this.creator.avatar.uri;
606
+ subheaderContainer.appendChild(avatar);
607
+ }
608
+ // ---generate name ---
609
+ var userName = doc.createElement('h1');
610
+ userName.className = 'fn';
611
+ userName.appendChild(doc.createTextNode(this.creator.name + ' (' + this.creator.id + ')'));
612
+ subheaderContainer.appendChild(userName);
613
+ // ---display follow button---
614
+ if (!this.thisIsMe && mb.getMyURI()) {
615
+ xfollowButton = doc.createElement('input');
616
+ xfollowButton.setAttribute('type', 'button');
617
+ var followButtonLabel = this.Ifollow ? 'Unfollow ' : 'Follow ';
618
+ xfollowButton.value = followButtonLabel + this.creator.name;
619
+ xfollowButton.addEventListener('click', lsFollowUser, false);
620
+ subheaderContainer.appendChild(xfollowButton);
621
+ }
622
+ // user header end
623
+ // header tabs
624
+ var xtabsList = this.Tab.getTabView();
625
+ headerContainer.appendChild(subheaderContainer);
626
+ headerContainer.appendChild(xtabsList);
627
+ }
628
+ return headerContainer;
629
+ };
630
+ Pane.prototype.generatePost = function (post, _me) {
631
+ /*
632
+ generatePost - Creates and formats microblog posts
633
+ post - symbol of the uri the post in question
634
+ */
635
+ var that = this;
636
+ var viewPost = function viewPost(uris) {
637
+ var xviewReply = that.xviewReply;
638
+ for (var i = 0; i < xviewReply.childNodes.length; i++) {
639
+ xviewReply.removeChild(xviewReply.childNodes[0]);
640
+ }
641
+ var xcloseContainer = doc.createElement('li');
642
+ xcloseContainer.className = 'closeContainer';
643
+ var xcloseButton = doc.createElement('span');
644
+ xcloseButton.innerHTML = '&#215;';
645
+ xcloseButton.className = 'closeButton';
646
+ xcloseContainer.appendChild(xcloseButton);
647
+ xviewReply.appendChild(xcloseContainer);
648
+ for (var uri in uris) {
649
+ xviewReply.appendChild(that.generatePost(kb.sym(uris[uri]), this.thisIsMe, 'view'));
650
+ }
651
+ xviewReply.className = 'replyView-active';
652
+ that.microblogPane.appendChild(xviewReply);
653
+ };
654
+ // container for post
655
+ var xpost = doc.createElement('li');
656
+ xpost.className = 'post';
657
+ xpost.setAttribute('id', String(post.uri).split('#')[1]);
658
+ var Post = mb.getPost(post);
659
+ // username text
660
+ // var uname = kb.any(kb.any(post, SIOC('has_creator')), SIOC('id'))
661
+ var uholdsaccount = kb.any(undefined, FOAF('holdsAccount'), kb.any(post, SIOC('has_creator')));
662
+ var xuname = doc.createElement('a');
663
+ xuname.href = uholdsaccount.uri;
664
+ xuname.className = 'userLink';
665
+ var xunameText = doc.createTextNode(mb.getUser(Post.creator).id);
666
+ xuname.appendChild(xunameText);
667
+ // user image
668
+ var xuavatar = doc.createElement('img');
669
+ xuavatar.src = mb.getUser(Post.creator).avatar.uri;
670
+ xuavatar.className = 'postAvatar';
671
+ // post content
672
+ var xpostContent = doc.createElement('blockquote');
673
+ var postText = Post.message;
674
+ // post date
675
+ var xpostLink = doc.createElement('a');
676
+ xpostLink.className = 'postLink';
677
+ xpostLink.addEventListener('click', function () {
678
+ viewPost([post.uri]);
679
+ }, false);
680
+ xpostLink.id = 'post_' + String(post.uri).split('#')[1];
681
+ xpostLink.setAttribute('content', post.uri);
682
+ xpostLink.setAttribute('property', 'permalink');
683
+ var postLink = doc.createTextNode(Post.date ? Post.date : 'post date unknown');
684
+ xpostLink.appendChild(postLink);
685
+
686
+ // LINK META DATA (MENTIONS, HASHTAGS, GROUPS)
687
+ var mentions = kb.each(post, SIOC('topic'));
688
+ var tags = {};
689
+ for (var mention in mentions) {
690
+ sf.lookUpThing(mentions[mention]);
691
+ var id = kb.any(mentions[mention], SIOC('id'));
692
+ tags['@' + id] = mentions[mention];
693
+ }
694
+ var postTags = postText.match(/(@|#|!)\w+/g);
695
+ var postFunction = function postFunction() {
696
+ var p = postTags.pop();
697
+ return tags[p] ? kb.any(undefined, FOAF('holdsAccount'), tags[p]).uri : p;
698
+ };
699
+ for (var t in tags) {
700
+ var person = t.replace(/@/, '');
701
+ var replacePerson = RegExp('(@|!|#)(' + person + ')');
702
+ postText = postText.replace(replacePerson, '$1<a href="' + postFunction() + '">$2</a>');
703
+ }
704
+ xpostContent.innerHTML = postText;
705
+
706
+ // in reply to logic
707
+ // This has the potential to support a post that replies to many messages.
708
+ var inReplyTo = kb.each(post, SIOC('reply_of'));
709
+ var xreplyTo = doc.createElement('span');
710
+ var theReply;
711
+ for (var reply in inReplyTo) {
712
+ theReply = String(inReplyTo[reply]).replace(/<|>/g, '');
713
+ var genReplyTo = function genReplyTo() {
714
+ var reply = doc.createElement('a');
715
+ reply.innerHTML = ', <b>in reply to</b>';
716
+ reply.addEventListener('click', function () {
717
+ viewPost([post.uri, theReply]);
718
+ return false;
719
+ }, false);
720
+ return reply;
721
+ };
722
+ xreplyTo.appendChild(genReplyTo());
723
+ }
724
+
725
+ // END LINK META DATA
726
+ // add the reply to and delete buttons to the interface
727
+ var mbReplyTo = function mbReplyTo() {
728
+ var id = mb.getUser(Post.creator).id;
729
+ var xupdateStatus = doc.getElementById('xupdateStatus');
730
+ var xinReplyToContainer = doc.getElementById('xinReplyToContainer');
731
+ var xupdateSubmit = doc.getElementById('xupdateSubmit');
732
+ xupdateStatus.value = '@' + id + ' ';
733
+ xupdateStatus.focus();
734
+ xinReplyToContainer.value = post.uri;
735
+ xupdateSubmit.value = 'Reply';
736
+ };
737
+ var xconfirmDeletionDialog;
738
+ var mbDeletePost = function mbDeletePost(evt) {
739
+ var lsconfirmNo = function lsconfirmNo() {
740
+ doc.getElementById('notify-container').removeChild(xconfirmDeletionDialog);
741
+ evt.target.disabled = false;
742
+ };
743
+ var lsconfirmYes = function lsconfirmYes() {
744
+ reallyDelete();
745
+ doc.getElementById('notify-container').removeChild(xconfirmDeletionDialog);
746
+ };
747
+ evt.target.disabled = true;
748
+ xconfirmDeletionDialog = doc.createElement('li');
749
+ xconfirmDeletionDialog.className = 'notify conf';
750
+ xconfirmDeletionDialog.innerHTML += '<p>Are you sure you want to delete this post?</p>';
751
+ xconfirmDeletionDialog.addEventListener('keyup', function (evt) {
752
+ if (evt.keyCode === 27) {
753
+ lsconfirmNo();
754
+ }
755
+ }, false);
756
+ var confirmyes = doc.createElement('input');
757
+ confirmyes.type = 'button';
758
+ confirmyes.className = 'confirm';
759
+ confirmyes.value = 'Delete';
760
+ confirmyes.addEventListener('click', lsconfirmYes, false);
761
+ var confirmno = doc.createElement('input');
762
+ confirmno.type = 'button';
763
+ confirmno.className = 'confirm';
764
+ confirmno.value = 'Cancel';
765
+ confirmno.addEventListener('click', lsconfirmNo, false);
766
+ xconfirmDeletionDialog.appendChild(confirmno);
767
+ xconfirmDeletionDialog.appendChild(confirmyes);
768
+ doc.getElementById('notify-container').appendChild(xconfirmDeletionDialog);
769
+ confirmno.focus();
770
+ var reallyDelete = function reallyDelete() {
771
+ // callback after deletion
772
+ var mbconfirmDeletePost = function mbconfirmDeletePost(a, success) {
773
+ if (success) {
774
+ that.notify('Post deleted.');
775
+ // update the ui to reflect model changes.
776
+ var deleteThisNode = evt.target.parentNode;
777
+ deleteThisNode.parentNode.removeChild(deleteThisNode);
778
+ kb.removeMany(deleteMe);
779
+ } else {
780
+ that.notify('Oops, there was a problem, please try again');
781
+ evt.target.disabled = true;
782
+ }
783
+ };
784
+ // delete references to post
785
+ var deleteContainerOf = function deleteContainerOf(a, success) {
786
+ if (success) {
787
+ var deleteContainer = kb.statementsMatching(undefined, SIOC('container_of'), kb.sym(doc.getElementById('post_' + evt.target.parentNode.id).getAttribute('content')));
788
+ sparqlUpdater.batch_delete_statement(deleteContainer, mbconfirmDeletePost);
789
+ } else {
790
+ that.notify('Oops, there was a problem, please try again');
791
+ evt.target.disabled = false;
792
+ }
793
+ };
794
+ // delete attributes of post
795
+ evt.target.disabled = true;
796
+ var deleteMe = kb.statementsMatching(kb.sym(doc.getElementById('post_' + evt.target.parentNode.id).getAttribute('content')));
797
+ sparqlUpdater.batch_delete_statement(deleteMe, deleteContainerOf);
798
+ };
799
+ };
800
+ var themaker;
801
+ var xreplyButton;
802
+ var xdeleteButton;
803
+ if (mb.getMyURI()) {
804
+ // If the microblog in question does not belong to the user,
805
+ // display the delete post and reply to post buttons.
806
+ themaker = kb.any(post, SIOC('has_creator'));
807
+ if (mb.getMyURI() !== themaker.uri) {
808
+ xreplyButton = doc.createElement('input');
809
+ xreplyButton.type = 'button';
810
+ xreplyButton.value = 'reply';
811
+ xreplyButton.className = 'reply';
812
+ xreplyButton.addEventListener('click', mbReplyTo, false);
813
+ } else {
814
+ xdeleteButton = doc.createElement('input');
815
+ xdeleteButton.type = 'button';
816
+ xdeleteButton.value = 'Delete';
817
+ xdeleteButton.className = 'reply';
818
+ xdeleteButton.addEventListener('click', mbDeletePost, false);
819
+ }
820
+ }
821
+ var mbFavorite = function mbFavorite(evt) {
822
+ var nid = evt.target.parentNode.id;
823
+ var favpost = doc.getElementById('post_' + nid).getAttribute('content');
824
+ xfavorite.className += ' ing';
825
+ var cbFavorite = function cbFavorite(a, success, _c, _d) {
826
+ if (success) {
827
+ xfavorite.className = xfavorite.className.split(' ')[1] === 'ed' ? 'favorit' : 'favorit ed';
828
+ }
829
+ };
830
+ if (!myFavorites.favorited(favpost)) {
831
+ myFavorites.add(favpost, cbFavorite);
832
+ } else {
833
+ myFavorites.remove(favpost, cbFavorite);
834
+ }
835
+ };
836
+ var xfavorite = doc.createElement('a');
837
+ xfavorite.innerHTML = '&#9733;';
838
+ xfavorite.addEventListener('click', mbFavorite, false);
839
+ if (myFavorites.favorited(post.uri)) {
840
+ xfavorite.className = 'favorit ed';
841
+ } else {
842
+ xfavorite.className = 'favorit';
843
+ }
844
+ // build
845
+ xpost.appendChild(xuavatar);
846
+ xpost.appendChild(xpostContent);
847
+ if (mb.getMyURI()) {
848
+ xpost.appendChild(xfavorite);
849
+ if (mb.getMyURI() !== themaker.uri) {
850
+ xpost.appendChild(xreplyButton);
851
+ } else {
852
+ xpost.appendChild(xdeleteButton);
853
+ }
854
+ }
855
+ xpost.appendChild(xuname);
856
+ xpost.appendChild(xpostLink);
857
+ if (inReplyTo !== '') {
858
+ xpost.appendChild(xreplyTo);
859
+ }
860
+ return xpost;
861
+ };
862
+ Pane.prototype.generatePostList = function (gmbPosts) {
863
+ /*
864
+ generatePostList - Generate the posts and
865
+ display their results on the interface.
866
+ */
867
+ var postList = doc.createElement('ul');
868
+ var postlist = {};
869
+ var datelist = [];
870
+ for (var post in gmbPosts) {
871
+ var postDate = kb.any(gmbPosts[post], terms('created'));
872
+ if (postDate) {
873
+ datelist.push(postDate);
874
+ postlist[postDate] = this.generatePost(gmbPosts[post], this.thisIsMe);
875
+ }
876
+ }
877
+ datelist.sort().reverse();
878
+ for (var d in datelist) {
879
+ postList.appendChild(postlist[datelist[d]]);
880
+ }
881
+ return postList;
882
+ };
883
+ Pane.prototype.followsView = function () {
884
+ var getFollowed = function getFollowed(user) {
885
+ var userid = kb.any(user, SIOC('id'));
886
+ var follow = doc.createElement('li');
887
+ follow.className = 'follow';
888
+ userid = userid || user.uri;
889
+ var fol = kb.any(undefined, FOAF('holdsAccount'), user);
890
+ fol = fol ? fol.uri : user.uri;
891
+ follow.innerHTML = '<a href="' + fol + '">' + userid + '</a>';
892
+ return follow;
893
+ };
894
+ var xfollows = doc.createElement('div');
895
+ xfollows.id = 'xfollows';
896
+ xfollows.className = 'followlist-container view-container';
897
+ if (this.creator && kb.whether(this.creator.sym, SIOC('follows'))) {
898
+ var creatorFollows = kb.each(this.creator.sym, SIOC('follows'));
899
+ var xfollowsList = doc.createElement('ul');
900
+ for (var thisPerson in creatorFollows) {
901
+ xfollowsList.appendChild(getFollowed(creatorFollows[thisPerson]));
902
+ }
903
+ xfollows.appendChild(xfollowsList);
904
+ }
905
+ this.Tab.create('tab-follows', 'Follows', xfollows, false);
906
+ return xfollows;
907
+ };
908
+ Pane.prototype.streamView = function (s, doc) {
909
+ var postContainer = doc.createElement('div');
910
+ postContainer.id = 'postContainer';
911
+ postContainer.className = 'post-container view-container active';
912
+ var mbPosts = [];
913
+ if (kb.whether(s, FOAF('name')) && kb.whether(s, FOAF('holdsAccount'))) {
914
+ sf.lookUpThing(kb.any(s, FOAF('holdsAccount')));
915
+ var follows = kb.each(kb.any(s, FOAF('holdsAccount')), SIOC('follows'));
916
+ for (var f in follows) {
917
+ sf.lookUpThing(follows[f]);
918
+ // look up people user follows
919
+ var smicroblogs = kb.each(follows[f], SIOC('creator_of'));
920
+ // get the follows microblogs
921
+ for (var smb in smicroblogs) {
922
+ sf.lookUpThing(smicroblogs[smb]);
923
+ if (kb.whether(smicroblogs[smb], SIOC('topic'), follows[f])) {
924
+ continue;
925
+ } else {
926
+ mbPosts = mbPosts.concat(kb.each(smicroblogs[smb], SIOC('container_of')));
927
+ }
928
+ }
929
+ }
930
+ }
931
+ if (mbPosts.length > 0) {
932
+ var postList = this.generatePostList(mbPosts);
933
+ // generate stream
934
+ postList.id = 'postList';
935
+ postList.className = 'postList';
936
+ postContainer.appendChild(postList);
937
+ }
938
+ this.Tab.create('tab-stream', 'By Follows', postContainer, true);
939
+ return postContainer;
940
+ };
941
+ Pane.prototype.notificationsView = function (s, doc) {
942
+ var postNotificationContainer = doc.createElement('div');
943
+ postNotificationContainer.id = 'postNotificationContainer';
944
+ postNotificationContainer.className = 'notification-container view-container';
945
+ var postMentionContainer = doc.createElement('div');
946
+ postMentionContainer.id = 'postMentionContainer';
947
+ postMentionContainer.className = 'mention-container view-container';
948
+ var mbnPosts = [];
949
+ var mbmPosts = [];
950
+ // get mbs that I am the creator of.
951
+ var theUser = kb.any(s, FOAF('holdsAccount'));
952
+ var user = kb.any(theUser, SIOC('id'));
953
+ var microblogs = kb.each(theUser, SIOC('creator_of'));
954
+ for (var mbm in microblogs) {
955
+ sf.lookUpThing(microblogs[mbm]);
956
+ if (kb.whether(microblogs[mbm], SIOC('topic'), theUser)) {
957
+ mbmPosts = mbmPosts.concat(kb.each(microblogs[mbm], SIOC('container_of')));
958
+ } else {
959
+ if (kb.whether(microblogs[mbm], RDF('type'), SIOCt('Microblog'))) {
960
+ mbnPosts = mbnPosts.concat(kb.each(microblogs[mbm], SIOC('container_of')));
961
+ }
962
+ }
963
+ }
964
+ var postNotificationList = this.generatePostList(mbnPosts);
965
+ postNotificationList.id = 'postNotificationList';
966
+ postNotificationList.className = 'postList';
967
+ postNotificationContainer.appendChild(postNotificationList);
968
+ var postMentionList = this.generatePostList(mbmPosts);
969
+ postMentionList.id = 'postMentionList';
970
+ postMentionList.className = 'postList';
971
+ postMentionContainer.appendChild(postMentionList);
972
+ this.postMentionContainer = postMentionContainer;
973
+ this.postNotificationContainer = postNotificationContainer;
974
+ this.Tab.create('tab-by-user', 'By ' + user, postNotificationContainer, false);
975
+ this.Tab.create('tab-at-user', '@' + user, postMentionContainer, false);
976
+ };
977
+ Pane.prototype.build = function () {
978
+ var microblogPane = this.microblogPane;
979
+ this.headerContainer = this.header(s, doc);
980
+ this.postContainer = this.streamView(s, doc);
981
+ this.notificationsView(s, doc);
982
+ this.xfollows = this.followsView();
983
+ microblogPane.className = 'ppane';
984
+ microblogPane.appendChild(this.xviewReply);
985
+ microblogPane.appendChild(this.xnotify);
986
+ microblogPane.appendChild(this.headerContainer);
987
+ if (this.xfollows !== undefined) {
988
+ microblogPane.appendChild(this.xfollows);
989
+ }
990
+ microblogPane.appendChild(this.postContainer);
991
+ microblogPane.appendChild(this.postNotificationContainer);
992
+ microblogPane.appendChild(this.postMentionContainer);
993
+ };
994
+ var microblogpane = doc.createElement('div');
995
+ // var getusersfollows = function(uri){
996
+ // var follows = new Object();
997
+ // var followsa = {follows:0, matches:0};
998
+ // var accounts = kb.each(s, FOAF("holdsAccount"));
999
+ // //get all of the accounts that a person holds
1000
+ // for (var acct in accounts){
1001
+ // var account = accounts[acct].uri;
1002
+ // var act = kb.each(kb.sym(account),SIOC("follows"));
1003
+ // for (var a in act){
1004
+ // var thisuri = act[a].uri.split("#")[0];
1005
+ // if (!follows[thisuri]){followsa.follows+=1;}
1006
+ // follows[thisuri] =true;
1007
+ // }
1008
+ // }
1009
+ //
1010
+ // var buildPaneUI = function(uri){
1011
+ // followsa.matches = (follows[uri]) ? followsa.matches+1: followsa.matches;
1012
+ // console.log(follows.toSource());
1013
+ // if(followsa.follows == followsa.matches ){
1014
+ var ppane = new Pane(s, doc, microblogpane);
1015
+ ppane.build();
1016
+ // return false;
1017
+ // }
1018
+ // else{
1019
+ // return true;
1020
+ // }
1021
+ // }
1022
+ // sf.addCallback('done',buildPaneUI);
1023
+ // sf.addCallback('fail',buildPaneUI);
1024
+ // //fetch each of the followers
1025
+ // for (var f in follows){
1026
+ // sf.refresh(kb.sym(f));
1027
+ // }
1028
+ // }(s);
1029
+ return microblogpane;
1030
+ }
1031
+ };
1032
+ //# sourceMappingURL=microblogPane.js.map