mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-18 11:30:55 +01:00
Rebuild Conpherence
Summary: Minor rebuild / redesign of Conpherence. Most of this is new UX and tossing out things like widgets, device fallbacks. I expect some of the UI to get more polished after next pass, but most everything here is in place. - Removed "Widgets", now just a single Participants pane - Added "Topic" - New header - Settings, Edit are action icons - Removed a lot of JS - Simplified CSS as much as I could Test Plan: Desktop, Tablet, Mobile. Adding and removing people. Setting new topics, new rooms. {F1828662} {F1828669} Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Differential Revision: https://secure.phabricator.com/D16550
This commit is contained in:
parent
98a62c9e49
commit
c1c5fbce21
31 changed files with 582 additions and 931 deletions
|
@ -7,8 +7,8 @@
|
||||||
*/
|
*/
|
||||||
return array(
|
return array(
|
||||||
'names' => array(
|
'names' => array(
|
||||||
'conpherence.pkg.css' => 'fdc05791',
|
'conpherence.pkg.css' => '7bddd31a',
|
||||||
'core.pkg.css' => '1ca373de',
|
'core.pkg.css' => 'dc6d08e3',
|
||||||
'core.pkg.js' => '1d376fa9',
|
'core.pkg.js' => '1d376fa9',
|
||||||
'darkconsole.pkg.js' => 'e7393ebb',
|
'darkconsole.pkg.js' => 'e7393ebb',
|
||||||
'differential.pkg.css' => '3fb7f532',
|
'differential.pkg.css' => '3fb7f532',
|
||||||
|
@ -19,7 +19,7 @@ return array(
|
||||||
'maniphest.pkg.js' => '949a7498',
|
'maniphest.pkg.js' => '949a7498',
|
||||||
'rsrc/css/aphront/aphront-bars.css' => '231ac33c',
|
'rsrc/css/aphront/aphront-bars.css' => '231ac33c',
|
||||||
'rsrc/css/aphront/dark-console.css' => 'f54bf286',
|
'rsrc/css/aphront/dark-console.css' => 'f54bf286',
|
||||||
'rsrc/css/aphront/dialog-view.css' => '913c172e',
|
'rsrc/css/aphront/dialog-view.css' => '593d3f67',
|
||||||
'rsrc/css/aphront/lightbox-attachment.css' => '7acac05d',
|
'rsrc/css/aphront/lightbox-attachment.css' => '7acac05d',
|
||||||
'rsrc/css/aphront/list-filter-view.css' => '5d6f0526',
|
'rsrc/css/aphront/list-filter-view.css' => '5d6f0526',
|
||||||
'rsrc/css/aphront/multi-column.css' => 'fd18389d',
|
'rsrc/css/aphront/multi-column.css' => 'fd18389d',
|
||||||
|
@ -46,12 +46,13 @@ return array(
|
||||||
'rsrc/css/application/config/setup-issue.css' => 'f794cfc3',
|
'rsrc/css/application/config/setup-issue.css' => 'f794cfc3',
|
||||||
'rsrc/css/application/config/unhandled-exception.css' => '4c96257a',
|
'rsrc/css/application/config/unhandled-exception.css' => '4c96257a',
|
||||||
'rsrc/css/application/conpherence/durable-column.css' => '194ac487',
|
'rsrc/css/application/conpherence/durable-column.css' => '194ac487',
|
||||||
|
'rsrc/css/application/conpherence/header-pane.css' => 'bdba8a5b',
|
||||||
'rsrc/css/application/conpherence/menu.css' => '8344d122',
|
'rsrc/css/application/conpherence/menu.css' => '8344d122',
|
||||||
'rsrc/css/application/conpherence/message-pane.css' => 'ee0e27be',
|
'rsrc/css/application/conpherence/message-pane.css' => 'c075e8fe',
|
||||||
'rsrc/css/application/conpherence/notification.css' => '6cdcc253',
|
'rsrc/css/application/conpherence/notification.css' => '6cdcc253',
|
||||||
'rsrc/css/application/conpherence/transaction.css' => '2c71247c',
|
'rsrc/css/application/conpherence/transaction.css' => '46253e19',
|
||||||
'rsrc/css/application/conpherence/update.css' => 'faf6be09',
|
'rsrc/css/application/conpherence/update.css' => '53bc527a',
|
||||||
'rsrc/css/application/conpherence/widget-pane.css' => 'a131d5b6',
|
'rsrc/css/application/conpherence/widget-pane.css' => '827a21f1',
|
||||||
'rsrc/css/application/contentsource/content-source-view.css' => '4b8b05d4',
|
'rsrc/css/application/contentsource/content-source-view.css' => '4b8b05d4',
|
||||||
'rsrc/css/application/countdown/timer.css' => '16c52f5c',
|
'rsrc/css/application/countdown/timer.css' => '16c52f5c',
|
||||||
'rsrc/css/application/daemon/bulk-job.css' => 'df9c1d4a',
|
'rsrc/css/application/daemon/bulk-job.css' => 'df9c1d4a',
|
||||||
|
@ -108,7 +109,7 @@ return array(
|
||||||
'rsrc/css/core/core.css' => 'd0801452',
|
'rsrc/css/core/core.css' => 'd0801452',
|
||||||
'rsrc/css/core/remarkup.css' => 'cd912f2c',
|
'rsrc/css/core/remarkup.css' => 'cd912f2c',
|
||||||
'rsrc/css/core/syntax.css' => '769d3498',
|
'rsrc/css/core/syntax.css' => '769d3498',
|
||||||
'rsrc/css/core/z-index.css' => '2b01a823',
|
'rsrc/css/core/z-index.css' => 'a847e919',
|
||||||
'rsrc/css/diviner/diviner-shared.css' => 'aa3656aa',
|
'rsrc/css/diviner/diviner-shared.css' => 'aa3656aa',
|
||||||
'rsrc/css/font/font-aleo.css' => '8bdb2835',
|
'rsrc/css/font/font-aleo.css' => '8bdb2835',
|
||||||
'rsrc/css/font/font-awesome.css' => '2b7ebbcc',
|
'rsrc/css/font/font-awesome.css' => '2b7ebbcc',
|
||||||
|
@ -437,11 +438,11 @@ return array(
|
||||||
'rsrc/js/application/conpherence/ConpherenceThreadManager.js' => '01774ab2',
|
'rsrc/js/application/conpherence/ConpherenceThreadManager.js' => '01774ab2',
|
||||||
'rsrc/js/application/conpherence/behavior-drag-and-drop-photo.js' => 'cf86d16a',
|
'rsrc/js/application/conpherence/behavior-drag-and-drop-photo.js' => 'cf86d16a',
|
||||||
'rsrc/js/application/conpherence/behavior-durable-column.js' => 'd3506890',
|
'rsrc/js/application/conpherence/behavior-durable-column.js' => 'd3506890',
|
||||||
'rsrc/js/application/conpherence/behavior-menu.js' => '1d45c74d',
|
'rsrc/js/application/conpherence/behavior-menu.js' => '7a2f5952',
|
||||||
|
'rsrc/js/application/conpherence/behavior-participants-pane.js' => '08872fb7',
|
||||||
'rsrc/js/application/conpherence/behavior-pontificate.js' => '21ba5861',
|
'rsrc/js/application/conpherence/behavior-pontificate.js' => '21ba5861',
|
||||||
'rsrc/js/application/conpherence/behavior-quicksand-blacklist.js' => '7927a7d3',
|
'rsrc/js/application/conpherence/behavior-quicksand-blacklist.js' => '7927a7d3',
|
||||||
'rsrc/js/application/conpherence/behavior-toggle-widget.js' => 'b151bbbc',
|
'rsrc/js/application/conpherence/behavior-toggle-widget.js' => '9bdbbab0',
|
||||||
'rsrc/js/application/conpherence/behavior-widget-pane.js' => '65845387',
|
|
||||||
'rsrc/js/application/countdown/timer.js' => 'e4cc26b3',
|
'rsrc/js/application/countdown/timer.js' => 'e4cc26b3',
|
||||||
'rsrc/js/application/daemon/behavior-bulk-job-reload.js' => 'edf8a145',
|
'rsrc/js/application/daemon/behavior-bulk-job-reload.js' => 'edf8a145',
|
||||||
'rsrc/js/application/dashboard/behavior-dashboard-async-panel.js' => '469c0d9e',
|
'rsrc/js/application/dashboard/behavior-dashboard-async-panel.js' => '469c0d9e',
|
||||||
|
@ -601,7 +602,7 @@ return array(
|
||||||
'almanac-css' => 'dbb9b3af',
|
'almanac-css' => 'dbb9b3af',
|
||||||
'aphront-bars' => '231ac33c',
|
'aphront-bars' => '231ac33c',
|
||||||
'aphront-dark-console-css' => 'f54bf286',
|
'aphront-dark-console-css' => 'f54bf286',
|
||||||
'aphront-dialog-view-css' => '913c172e',
|
'aphront-dialog-view-css' => '593d3f67',
|
||||||
'aphront-list-filter-view-css' => '5d6f0526',
|
'aphront-list-filter-view-css' => '5d6f0526',
|
||||||
'aphront-multi-column-view-css' => 'fd18389d',
|
'aphront-multi-column-view-css' => 'fd18389d',
|
||||||
'aphront-panel-view-css' => '8427b78d',
|
'aphront-panel-view-css' => '8427b78d',
|
||||||
|
@ -617,13 +618,14 @@ return array(
|
||||||
'config-options-css' => '0ede4c9b',
|
'config-options-css' => '0ede4c9b',
|
||||||
'config-page-css' => '8798e14f',
|
'config-page-css' => '8798e14f',
|
||||||
'conpherence-durable-column-view' => '194ac487',
|
'conpherence-durable-column-view' => '194ac487',
|
||||||
|
'conpherence-header-pane-css' => 'bdba8a5b',
|
||||||
'conpherence-menu-css' => '8344d122',
|
'conpherence-menu-css' => '8344d122',
|
||||||
'conpherence-message-pane-css' => 'ee0e27be',
|
'conpherence-message-pane-css' => 'c075e8fe',
|
||||||
'conpherence-notification-css' => '6cdcc253',
|
'conpherence-notification-css' => '6cdcc253',
|
||||||
'conpherence-thread-manager' => '01774ab2',
|
'conpherence-thread-manager' => '01774ab2',
|
||||||
'conpherence-transaction-css' => '2c71247c',
|
'conpherence-transaction-css' => '46253e19',
|
||||||
'conpherence-update-css' => 'faf6be09',
|
'conpherence-update-css' => '53bc527a',
|
||||||
'conpherence-widget-pane-css' => 'a131d5b6',
|
'conpherence-widget-pane-css' => '827a21f1',
|
||||||
'd3' => 'a11a5ff2',
|
'd3' => 'a11a5ff2',
|
||||||
'differential-changeset-view-css' => '9ef7d354',
|
'differential-changeset-view-css' => '9ef7d354',
|
||||||
'differential-core-view-css' => '5b7b8ff4',
|
'differential-core-view-css' => '5b7b8ff4',
|
||||||
|
@ -665,9 +667,9 @@ return array(
|
||||||
'javelin-behavior-comment-actions' => '0300eae6',
|
'javelin-behavior-comment-actions' => '0300eae6',
|
||||||
'javelin-behavior-config-reorder-fields' => 'b6993408',
|
'javelin-behavior-config-reorder-fields' => 'b6993408',
|
||||||
'javelin-behavior-conpherence-drag-and-drop-photo' => 'cf86d16a',
|
'javelin-behavior-conpherence-drag-and-drop-photo' => 'cf86d16a',
|
||||||
'javelin-behavior-conpherence-menu' => '1d45c74d',
|
'javelin-behavior-conpherence-menu' => '7a2f5952',
|
||||||
|
'javelin-behavior-conpherence-participants-pane' => '08872fb7',
|
||||||
'javelin-behavior-conpherence-pontificate' => '21ba5861',
|
'javelin-behavior-conpherence-pontificate' => '21ba5861',
|
||||||
'javelin-behavior-conpherence-widget-pane' => '65845387',
|
|
||||||
'javelin-behavior-countdown-timer' => 'e4cc26b3',
|
'javelin-behavior-countdown-timer' => 'e4cc26b3',
|
||||||
'javelin-behavior-dark-console' => 'f411b6ae',
|
'javelin-behavior-dark-console' => 'f411b6ae',
|
||||||
'javelin-behavior-dashboard-async-panel' => '469c0d9e',
|
'javelin-behavior-dashboard-async-panel' => '469c0d9e',
|
||||||
|
@ -773,7 +775,7 @@ return array(
|
||||||
'javelin-behavior-test-payment-form' => 'fc91ab6c',
|
'javelin-behavior-test-payment-form' => 'fc91ab6c',
|
||||||
'javelin-behavior-time-typeahead' => '522431f7',
|
'javelin-behavior-time-typeahead' => '522431f7',
|
||||||
'javelin-behavior-toggle-class' => '92b9ec77',
|
'javelin-behavior-toggle-class' => '92b9ec77',
|
||||||
'javelin-behavior-toggle-widget' => 'b151bbbc',
|
'javelin-behavior-toggle-widget' => '9bdbbab0',
|
||||||
'javelin-behavior-typeahead-browse' => '635de1ec',
|
'javelin-behavior-typeahead-browse' => '635de1ec',
|
||||||
'javelin-behavior-typeahead-search' => '93d0c9e3',
|
'javelin-behavior-typeahead-search' => '93d0c9e3',
|
||||||
'javelin-behavior-view-placeholder' => '47830651',
|
'javelin-behavior-view-placeholder' => '47830651',
|
||||||
|
@ -881,7 +883,7 @@ return array(
|
||||||
'phabricator-uiexample-reactor-select' => 'a155550f',
|
'phabricator-uiexample-reactor-select' => 'a155550f',
|
||||||
'phabricator-uiexample-reactor-sendclass' => '1def2711',
|
'phabricator-uiexample-reactor-sendclass' => '1def2711',
|
||||||
'phabricator-uiexample-reactor-sendproperties' => 'b1f0ccee',
|
'phabricator-uiexample-reactor-sendproperties' => 'b1f0ccee',
|
||||||
'phabricator-zindex-css' => '2b01a823',
|
'phabricator-zindex-css' => 'a847e919',
|
||||||
'phame-css' => '8efb0729',
|
'phame-css' => '8efb0729',
|
||||||
'pholio-css' => 'ca89d380',
|
'pholio-css' => 'ca89d380',
|
||||||
'pholio-edit-css' => '07676f51',
|
'pholio-edit-css' => '07676f51',
|
||||||
|
@ -1057,6 +1059,15 @@ return array(
|
||||||
'javelin-stratcom',
|
'javelin-stratcom',
|
||||||
'javelin-vector',
|
'javelin-vector',
|
||||||
),
|
),
|
||||||
|
'08872fb7' => array(
|
||||||
|
'javelin-behavior',
|
||||||
|
'javelin-dom',
|
||||||
|
'javelin-stratcom',
|
||||||
|
'javelin-workflow',
|
||||||
|
'javelin-util',
|
||||||
|
'phabricator-notification',
|
||||||
|
'conpherence-thread-manager',
|
||||||
|
),
|
||||||
'0a0b10e9' => array(
|
'0a0b10e9' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-stratcom',
|
'javelin-stratcom',
|
||||||
|
@ -1135,20 +1146,6 @@ return array(
|
||||||
'javelin-request',
|
'javelin-request',
|
||||||
'javelin-uri',
|
'javelin-uri',
|
||||||
),
|
),
|
||||||
'1d45c74d' => array(
|
|
||||||
'javelin-behavior',
|
|
||||||
'javelin-dom',
|
|
||||||
'javelin-util',
|
|
||||||
'javelin-stratcom',
|
|
||||||
'javelin-workflow',
|
|
||||||
'javelin-behavior-device',
|
|
||||||
'javelin-history',
|
|
||||||
'javelin-vector',
|
|
||||||
'javelin-scrollbar',
|
|
||||||
'phabricator-title',
|
|
||||||
'phabricator-shaped-request',
|
|
||||||
'conpherence-thread-manager',
|
|
||||||
),
|
|
||||||
'1def2711' => array(
|
'1def2711' => array(
|
||||||
'javelin-install',
|
'javelin-install',
|
||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
|
@ -1484,19 +1481,6 @@ return array(
|
||||||
'javelin-request',
|
'javelin-request',
|
||||||
'javelin-workflow',
|
'javelin-workflow',
|
||||||
),
|
),
|
||||||
65845387 => array(
|
|
||||||
'javelin-behavior',
|
|
||||||
'javelin-dom',
|
|
||||||
'javelin-stratcom',
|
|
||||||
'javelin-workflow',
|
|
||||||
'javelin-util',
|
|
||||||
'phabricator-notification',
|
|
||||||
'javelin-behavior-device',
|
|
||||||
'phuix-dropdown-menu',
|
|
||||||
'phuix-action-list-view',
|
|
||||||
'phuix-action-view',
|
|
||||||
'conpherence-thread-manager',
|
|
||||||
),
|
|
||||||
'680ea2c8' => array(
|
'680ea2c8' => array(
|
||||||
'javelin-install',
|
'javelin-install',
|
||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
|
@ -1587,6 +1571,20 @@ return array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-quicksand',
|
'javelin-quicksand',
|
||||||
),
|
),
|
||||||
|
'7a2f5952' => array(
|
||||||
|
'javelin-behavior',
|
||||||
|
'javelin-dom',
|
||||||
|
'javelin-util',
|
||||||
|
'javelin-stratcom',
|
||||||
|
'javelin-workflow',
|
||||||
|
'javelin-behavior-device',
|
||||||
|
'javelin-history',
|
||||||
|
'javelin-vector',
|
||||||
|
'javelin-scrollbar',
|
||||||
|
'phabricator-title',
|
||||||
|
'phabricator-shaped-request',
|
||||||
|
'conpherence-thread-manager',
|
||||||
|
),
|
||||||
'7a68dda3' => array(
|
'7a68dda3' => array(
|
||||||
'owners-path-editor',
|
'owners-path-editor',
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
|
@ -1755,6 +1753,13 @@ return array(
|
||||||
'phabricator-phtize',
|
'phabricator-phtize',
|
||||||
'changeset-view-manager',
|
'changeset-view-manager',
|
||||||
),
|
),
|
||||||
|
'9bdbbab0' => array(
|
||||||
|
'javelin-behavior',
|
||||||
|
'javelin-dom',
|
||||||
|
'javelin-util',
|
||||||
|
'javelin-workflow',
|
||||||
|
'javelin-stratcom',
|
||||||
|
),
|
||||||
'9ef7d354' => array(
|
'9ef7d354' => array(
|
||||||
'phui-inline-comment-view-css',
|
'phui-inline-comment-view-css',
|
||||||
),
|
),
|
||||||
|
@ -1850,13 +1855,6 @@ return array(
|
||||||
'javelin-util',
|
'javelin-util',
|
||||||
'phabricator-shaped-request',
|
'phabricator-shaped-request',
|
||||||
),
|
),
|
||||||
'b151bbbc' => array(
|
|
||||||
'javelin-behavior',
|
|
||||||
'javelin-dom',
|
|
||||||
'javelin-util',
|
|
||||||
'javelin-workflow',
|
|
||||||
'javelin-stratcom',
|
|
||||||
),
|
|
||||||
'b1f0ccee' => array(
|
'b1f0ccee' => array(
|
||||||
'javelin-install',
|
'javelin-install',
|
||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
|
@ -2311,6 +2309,7 @@ return array(
|
||||||
'conpherence-transaction-css',
|
'conpherence-transaction-css',
|
||||||
'conpherence-update-css',
|
'conpherence-update-css',
|
||||||
'conpherence-widget-pane-css',
|
'conpherence-widget-pane-css',
|
||||||
|
'conpherence-header-pane-css',
|
||||||
),
|
),
|
||||||
'core.pkg.css' => array(
|
'core.pkg.css' => array(
|
||||||
'phabricator-core-css',
|
'phabricator-core-css',
|
||||||
|
|
|
@ -159,6 +159,7 @@ return array(
|
||||||
'conpherence-transaction-css',
|
'conpherence-transaction-css',
|
||||||
'conpherence-update-css',
|
'conpherence-update-css',
|
||||||
'conpherence-widget-pane-css',
|
'conpherence-widget-pane-css',
|
||||||
|
'conpherence-header-pane-css',
|
||||||
),
|
),
|
||||||
'differential.pkg.css' => array(
|
'differential.pkg.css' => array(
|
||||||
'differential-core-view-css',
|
'differential-core-view-css',
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
ALTER TABLE {$NAMESPACE}_conpherence.conpherence_thread
|
||||||
|
ADD topic VARCHAR(255) NOT NULL COLLATE {$COLLATE_TEXT};
|
|
@ -300,10 +300,11 @@ phutil_register_library_map(array(
|
||||||
'ConpherenceNewRoomController' => 'applications/conpherence/controller/ConpherenceNewRoomController.php',
|
'ConpherenceNewRoomController' => 'applications/conpherence/controller/ConpherenceNewRoomController.php',
|
||||||
'ConpherenceNotificationPanelController' => 'applications/conpherence/controller/ConpherenceNotificationPanelController.php',
|
'ConpherenceNotificationPanelController' => 'applications/conpherence/controller/ConpherenceNotificationPanelController.php',
|
||||||
'ConpherenceParticipant' => 'applications/conpherence/storage/ConpherenceParticipant.php',
|
'ConpherenceParticipant' => 'applications/conpherence/storage/ConpherenceParticipant.php',
|
||||||
|
'ConpherenceParticipantController' => 'applications/conpherence/controller/ConpherenceParticipantController.php',
|
||||||
'ConpherenceParticipantCountQuery' => 'applications/conpherence/query/ConpherenceParticipantCountQuery.php',
|
'ConpherenceParticipantCountQuery' => 'applications/conpherence/query/ConpherenceParticipantCountQuery.php',
|
||||||
'ConpherenceParticipantQuery' => 'applications/conpherence/query/ConpherenceParticipantQuery.php',
|
'ConpherenceParticipantQuery' => 'applications/conpherence/query/ConpherenceParticipantQuery.php',
|
||||||
|
'ConpherenceParticipantView' => 'applications/conpherence/view/ConpherenceParticipantView.php',
|
||||||
'ConpherenceParticipationStatus' => 'applications/conpherence/constants/ConpherenceParticipationStatus.php',
|
'ConpherenceParticipationStatus' => 'applications/conpherence/constants/ConpherenceParticipationStatus.php',
|
||||||
'ConpherencePeopleWidgetView' => 'applications/conpherence/view/ConpherencePeopleWidgetView.php',
|
|
||||||
'ConpherencePicCropControl' => 'applications/conpherence/view/ConpherencePicCropControl.php',
|
'ConpherencePicCropControl' => 'applications/conpherence/view/ConpherencePicCropControl.php',
|
||||||
'ConpherenceQueryThreadConduitAPIMethod' => 'applications/conpherence/conduit/ConpherenceQueryThreadConduitAPIMethod.php',
|
'ConpherenceQueryThreadConduitAPIMethod' => 'applications/conpherence/conduit/ConpherenceQueryThreadConduitAPIMethod.php',
|
||||||
'ConpherenceQueryTransactionConduitAPIMethod' => 'applications/conpherence/conduit/ConpherenceQueryTransactionConduitAPIMethod.php',
|
'ConpherenceQueryTransactionConduitAPIMethod' => 'applications/conpherence/conduit/ConpherenceQueryTransactionConduitAPIMethod.php',
|
||||||
|
@ -329,9 +330,6 @@ phutil_register_library_map(array(
|
||||||
'ConpherenceUpdateController' => 'applications/conpherence/controller/ConpherenceUpdateController.php',
|
'ConpherenceUpdateController' => 'applications/conpherence/controller/ConpherenceUpdateController.php',
|
||||||
'ConpherenceUpdateThreadConduitAPIMethod' => 'applications/conpherence/conduit/ConpherenceUpdateThreadConduitAPIMethod.php',
|
'ConpherenceUpdateThreadConduitAPIMethod' => 'applications/conpherence/conduit/ConpherenceUpdateThreadConduitAPIMethod.php',
|
||||||
'ConpherenceViewController' => 'applications/conpherence/controller/ConpherenceViewController.php',
|
'ConpherenceViewController' => 'applications/conpherence/controller/ConpherenceViewController.php',
|
||||||
'ConpherenceWidgetConfigConstants' => 'applications/conpherence/constants/ConpherenceWidgetConfigConstants.php',
|
|
||||||
'ConpherenceWidgetController' => 'applications/conpherence/controller/ConpherenceWidgetController.php',
|
|
||||||
'ConpherenceWidgetView' => 'applications/conpherence/view/ConpherenceWidgetView.php',
|
|
||||||
'DarkConsoleController' => 'applications/console/controller/DarkConsoleController.php',
|
'DarkConsoleController' => 'applications/console/controller/DarkConsoleController.php',
|
||||||
'DarkConsoleCore' => 'applications/console/core/DarkConsoleCore.php',
|
'DarkConsoleCore' => 'applications/console/core/DarkConsoleCore.php',
|
||||||
'DarkConsoleDataController' => 'applications/console/controller/DarkConsoleDataController.php',
|
'DarkConsoleDataController' => 'applications/console/controller/DarkConsoleDataController.php',
|
||||||
|
@ -4768,10 +4766,11 @@ phutil_register_library_map(array(
|
||||||
'ConpherenceNewRoomController' => 'ConpherenceController',
|
'ConpherenceNewRoomController' => 'ConpherenceController',
|
||||||
'ConpherenceNotificationPanelController' => 'ConpherenceController',
|
'ConpherenceNotificationPanelController' => 'ConpherenceController',
|
||||||
'ConpherenceParticipant' => 'ConpherenceDAO',
|
'ConpherenceParticipant' => 'ConpherenceDAO',
|
||||||
|
'ConpherenceParticipantController' => 'ConpherenceController',
|
||||||
'ConpherenceParticipantCountQuery' => 'PhabricatorOffsetPagedQuery',
|
'ConpherenceParticipantCountQuery' => 'PhabricatorOffsetPagedQuery',
|
||||||
'ConpherenceParticipantQuery' => 'PhabricatorOffsetPagedQuery',
|
'ConpherenceParticipantQuery' => 'PhabricatorOffsetPagedQuery',
|
||||||
|
'ConpherenceParticipantView' => 'AphrontView',
|
||||||
'ConpherenceParticipationStatus' => 'ConpherenceConstants',
|
'ConpherenceParticipationStatus' => 'ConpherenceConstants',
|
||||||
'ConpherencePeopleWidgetView' => 'ConpherenceWidgetView',
|
|
||||||
'ConpherencePicCropControl' => 'AphrontFormControl',
|
'ConpherencePicCropControl' => 'AphrontFormControl',
|
||||||
'ConpherenceQueryThreadConduitAPIMethod' => 'ConpherenceConduitAPIMethod',
|
'ConpherenceQueryThreadConduitAPIMethod' => 'ConpherenceConduitAPIMethod',
|
||||||
'ConpherenceQueryTransactionConduitAPIMethod' => 'ConpherenceConduitAPIMethod',
|
'ConpherenceQueryTransactionConduitAPIMethod' => 'ConpherenceConduitAPIMethod',
|
||||||
|
@ -4803,9 +4802,6 @@ phutil_register_library_map(array(
|
||||||
'ConpherenceUpdateController' => 'ConpherenceController',
|
'ConpherenceUpdateController' => 'ConpherenceController',
|
||||||
'ConpherenceUpdateThreadConduitAPIMethod' => 'ConpherenceConduitAPIMethod',
|
'ConpherenceUpdateThreadConduitAPIMethod' => 'ConpherenceConduitAPIMethod',
|
||||||
'ConpherenceViewController' => 'ConpherenceController',
|
'ConpherenceViewController' => 'ConpherenceController',
|
||||||
'ConpherenceWidgetConfigConstants' => 'ConpherenceConstants',
|
|
||||||
'ConpherenceWidgetController' => 'ConpherenceController',
|
|
||||||
'ConpherenceWidgetView' => 'AphrontView',
|
|
||||||
'DarkConsoleController' => 'PhabricatorController',
|
'DarkConsoleController' => 'PhabricatorController',
|
||||||
'DarkConsoleCore' => 'Phobject',
|
'DarkConsoleCore' => 'Phobject',
|
||||||
'DarkConsoleDataController' => 'PhabricatorController',
|
'DarkConsoleDataController' => 'PhabricatorController',
|
||||||
|
|
|
@ -42,7 +42,7 @@ final class PhabricatorConpherenceApplication extends PhabricatorApplication {
|
||||||
'search/(?:query/(?P<queryKey>[^/]+)/)?'
|
'search/(?:query/(?P<queryKey>[^/]+)/)?'
|
||||||
=> 'ConpherenceRoomListController',
|
=> 'ConpherenceRoomListController',
|
||||||
'panel/' => 'ConpherenceNotificationPanelController',
|
'panel/' => 'ConpherenceNotificationPanelController',
|
||||||
'widget/(?P<id>[1-9]\d*)/' => 'ConpherenceWidgetController',
|
'participant/(?P<id>[1-9]\d*)/' => 'ConpherenceParticipantController',
|
||||||
'update/(?P<id>[1-9]\d*)/' => 'ConpherenceUpdateController',
|
'update/(?P<id>[1-9]\d*)/' => 'ConpherenceUpdateController',
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
@ -13,8 +13,9 @@ final class ConpherenceCreateThreadConduitAPIMethod
|
||||||
|
|
||||||
protected function defineParamTypes() {
|
protected function defineParamTypes() {
|
||||||
return array(
|
return array(
|
||||||
'title' => 'optional string',
|
'title' => 'required string',
|
||||||
'message' => 'required string',
|
'topic' => 'optional string',
|
||||||
|
'message' => 'optional string',
|
||||||
'participantPHIDs' => 'required list<phids>',
|
'participantPHIDs' => 'required list<phids>',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -27,8 +28,8 @@ final class ConpherenceCreateThreadConduitAPIMethod
|
||||||
return array(
|
return array(
|
||||||
'ERR_EMPTY_PARTICIPANT_PHIDS' => pht(
|
'ERR_EMPTY_PARTICIPANT_PHIDS' => pht(
|
||||||
'You must specify participant phids.'),
|
'You must specify participant phids.'),
|
||||||
'ERR_EMPTY_MESSAGE' => pht(
|
'ERR_EMPTY_TITLE' => pht(
|
||||||
'You must specify a message.'),
|
'You must specify a title.'),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,19 +37,21 @@ final class ConpherenceCreateThreadConduitAPIMethod
|
||||||
$participant_phids = $request->getValue('participantPHIDs', array());
|
$participant_phids = $request->getValue('participantPHIDs', array());
|
||||||
$message = $request->getValue('message');
|
$message = $request->getValue('message');
|
||||||
$title = $request->getValue('title');
|
$title = $request->getValue('title');
|
||||||
|
$topic = $request->getValue('topic');
|
||||||
|
|
||||||
list($errors, $conpherence) = ConpherenceEditor::createThread(
|
list($errors, $conpherence) = ConpherenceEditor::createThread(
|
||||||
$request->getUser(),
|
$request->getUser(),
|
||||||
$participant_phids,
|
$participant_phids,
|
||||||
$title,
|
$title,
|
||||||
$message,
|
$message,
|
||||||
$request->newContentSource());
|
$request->newContentSource(),
|
||||||
|
$topic);
|
||||||
|
|
||||||
if ($errors) {
|
if ($errors) {
|
||||||
foreach ($errors as $error_code) {
|
foreach ($errors as $error_code) {
|
||||||
switch ($error_code) {
|
switch ($error_code) {
|
||||||
case ConpherenceEditor::ERROR_EMPTY_MESSAGE:
|
case ConpherenceEditor::ERROR_EMPTY_TITLE:
|
||||||
throw new ConduitException('ERR_EMPTY_MESSAGE');
|
throw new ConduitException('ERR_EMPTY_TITLE');
|
||||||
break;
|
break;
|
||||||
case ConpherenceEditor::ERROR_EMPTY_PARTICIPANTS:
|
case ConpherenceEditor::ERROR_EMPTY_PARTICIPANTS:
|
||||||
throw new ConduitException('ERR_EMPTY_PARTICIPANT_PHIDS');
|
throw new ConduitException('ERR_EMPTY_PARTICIPANT_PHIDS');
|
||||||
|
|
|
@ -1,42 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
final class ConpherenceWidgetConfigConstants extends ConpherenceConstants {
|
|
||||||
|
|
||||||
const UPDATE_URI = '/conpherence/update/';
|
|
||||||
|
|
||||||
public static function getWidgetPaneBehaviorConfig() {
|
|
||||||
return array(
|
|
||||||
'widgetBaseUpdateURI' => self::UPDATE_URI,
|
|
||||||
'widgetRegistry' => self::getWidgetRegistry(),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getWidgetRegistry() {
|
|
||||||
return array(
|
|
||||||
'conpherence-message-pane' => array(
|
|
||||||
'name' => pht('Thread'),
|
|
||||||
'icon' => 'fa-comment',
|
|
||||||
'deviceOnly' => true,
|
|
||||||
'hasCreate' => false,
|
|
||||||
),
|
|
||||||
'widgets-people' => array(
|
|
||||||
'name' => pht('Participants'),
|
|
||||||
'icon' => 'fa-users',
|
|
||||||
'deviceOnly' => false,
|
|
||||||
'hasCreate' => true,
|
|
||||||
'createData' => array(
|
|
||||||
'refreshFromResponse' => true,
|
|
||||||
'action' => ConpherenceUpdateActions::ADD_PERSON,
|
|
||||||
'customHref' => null,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'widgets-settings' => array(
|
|
||||||
'name' => pht('Notifications'),
|
|
||||||
'icon' => 'fa-wrench',
|
|
||||||
'deviceOnly' => false,
|
|
||||||
'hasCreate' => false,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -14,10 +14,17 @@ abstract class ConpherenceController extends PhabricatorController {
|
||||||
|
|
||||||
public function buildApplicationMenu() {
|
public function buildApplicationMenu() {
|
||||||
$nav = new PHUIListView();
|
$nav = new PHUIListView();
|
||||||
|
$conpherence = $this->conpherence;
|
||||||
|
|
||||||
$nav->newLink(
|
// Local Links
|
||||||
pht('New Room'),
|
if ($conpherence) {
|
||||||
$this->getApplicationURI('new/'));
|
$nav->addMenuItem(
|
||||||
|
id(new PHUIListItemView())
|
||||||
|
->setName(pht('Edit Room'))
|
||||||
|
->setType(PHUIListItemView::TYPE_LINK)
|
||||||
|
->setHref(
|
||||||
|
$this->getApplicationURI('update/'.$conpherence->getID()).'/')
|
||||||
|
->setWorkflow(true));
|
||||||
|
|
||||||
$nav->addMenuItem(
|
$nav->addMenuItem(
|
||||||
id(new PHUIListItemView())
|
id(new PHUIListItemView())
|
||||||
|
@ -26,69 +33,59 @@ abstract class ConpherenceController extends PhabricatorController {
|
||||||
->setHref('#')
|
->setHref('#')
|
||||||
->addSigil('conpherence-widget-adder')
|
->addSigil('conpherence-widget-adder')
|
||||||
->setMetadata(array('widget' => 'widgets-people')));
|
->setMetadata(array('widget' => 'widgets-people')));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Global Links
|
||||||
|
$nav->newLabel(pht('Conpherence'));
|
||||||
|
$nav->newLink(
|
||||||
|
pht('New Room'),
|
||||||
|
$this->getApplicationURI('new/'));
|
||||||
|
$nav->newLink(
|
||||||
|
pht('Search Rooms'),
|
||||||
|
$this->getApplicationURI('search/'));
|
||||||
|
|
||||||
return $nav;
|
return $nav;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function buildApplicationCrumbs() {
|
|
||||||
return $this->buildConpherenceApplicationCrumbs();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function buildConpherenceApplicationCrumbs($is_rooms = false) {
|
|
||||||
$crumbs = parent::buildApplicationCrumbs();
|
|
||||||
$crumbs->setBorder(true);
|
|
||||||
|
|
||||||
if (!$is_rooms) {
|
|
||||||
$crumbs
|
|
||||||
->addAction(
|
|
||||||
id(new PHUIListItemView())
|
|
||||||
->setName(pht('Room'))
|
|
||||||
->setHref('#')
|
|
||||||
->setIcon('fa-bars')
|
|
||||||
->setStyle('display: none;')
|
|
||||||
->addClass('device-widgets-selector')
|
|
||||||
->addSigil('device-widgets-selector'));
|
|
||||||
}
|
|
||||||
return $crumbs;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function buildHeaderPaneContent(
|
protected function buildHeaderPaneContent(
|
||||||
ConpherenceThread $conpherence,
|
ConpherenceThread $conpherence,
|
||||||
array $policy_objects) {
|
array $policy_objects) {
|
||||||
assert_instances_of($policy_objects, 'PhabricatorPolicy');
|
assert_instances_of($policy_objects, 'PhabricatorPolicy');
|
||||||
$viewer = $this->getViewer();
|
$viewer = $this->getViewer();
|
||||||
|
$header = null;
|
||||||
$crumbs = $this->buildApplicationCrumbs();
|
|
||||||
|
|
||||||
if ($conpherence->getID()) {
|
if ($conpherence->getID()) {
|
||||||
$data = $conpherence->getDisplayData($this->getViewer());
|
$data = $conpherence->getDisplayData($this->getViewer());
|
||||||
$crumbs->addCrumb(
|
$header = id(new PHUIHeaderView())
|
||||||
id(new PHUICrumbView())
|
->setHeader($data['title'])
|
||||||
->setName($data['title'])
|
->setSubheader($data['topic'])
|
||||||
->setHref('/'.$conpherence->getMonogram()));
|
->addClass((!$data['topic']) ? 'conpherence-no-topic' : null);
|
||||||
|
|
||||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||||
$viewer,
|
$viewer,
|
||||||
$conpherence,
|
$conpherence,
|
||||||
PhabricatorPolicyCapability::CAN_EDIT);
|
PhabricatorPolicyCapability::CAN_EDIT);
|
||||||
|
|
||||||
$crumbs
|
$header->addActionItem(
|
||||||
->addAction(
|
id(new PHUIIconCircleView())
|
||||||
id(new PHUIListItemView())
|
|
||||||
->setName(pht('Edit Room'))
|
|
||||||
->setHref(
|
->setHref(
|
||||||
$this->getApplicationURI('update/'.$conpherence->getID()).'/')
|
$this->getApplicationURI('update/'.$conpherence->getID()).'/')
|
||||||
->setIcon('fa-pencil')
|
->setIcon('fa-pencil')
|
||||||
->setDisabled(!$can_edit)
|
->addClass('hide-on-device')
|
||||||
|
->setWorkflow(true));
|
||||||
|
|
||||||
|
$header->addActionItem(
|
||||||
|
id(new PHUIIconCircleView())
|
||||||
|
->setHref(
|
||||||
|
$this->getApplicationURI('update/'.$conpherence->getID()).'/'.
|
||||||
|
'?action='.ConpherenceUpdateActions::NOTIFICATIONS)
|
||||||
|
->setIcon('fa-gear')
|
||||||
|
->addClass('hide-on-device')
|
||||||
->setWorkflow(true));
|
->setWorkflow(true));
|
||||||
|
|
||||||
$widget_key = PhabricatorConpherenceWidgetVisibleSetting::SETTINGKEY;
|
$widget_key = PhabricatorConpherenceWidgetVisibleSetting::SETTINGKEY;
|
||||||
$widget_view = (bool)$viewer->getUserSetting($widget_key, false);
|
$widget_view = (bool)$viewer->getUserSetting($widget_key, false);
|
||||||
|
|
||||||
$divider = id(new PHUIListItemView())
|
|
||||||
->setType(PHUIListItemView::TYPE_DIVIDER)
|
|
||||||
->addClass('conpherence-header-desktop-item');
|
|
||||||
$crumbs->addAction($divider);
|
|
||||||
|
|
||||||
Javelin::initBehavior(
|
Javelin::initBehavior(
|
||||||
'toggle-widget',
|
'toggle-widget',
|
||||||
array(
|
array(
|
||||||
|
@ -96,24 +93,15 @@ abstract class ConpherenceController extends PhabricatorController {
|
||||||
'settingsURI' => '/settings/adjust/?key='.$widget_key,
|
'settingsURI' => '/settings/adjust/?key='.$widget_key,
|
||||||
));
|
));
|
||||||
|
|
||||||
$crumbs->addAction(
|
$header->addActionItem(
|
||||||
id(new PHUIListItemView())
|
id(new PHUIIconCircleView())
|
||||||
->addSigil('conpherence-widget-toggle')
|
->addSigil('conpherence-widget-toggle')
|
||||||
->setIcon('fa-columns')
|
->setIcon('fa-group')
|
||||||
->addClass('conpherence-header-desktop-item'));
|
->setHref('#')
|
||||||
|
->addClass('conpherence-participant-toggle'));
|
||||||
}
|
}
|
||||||
|
|
||||||
return hsprintf(
|
return $header;
|
||||||
'%s',
|
|
||||||
array(
|
|
||||||
phutil_tag(
|
|
||||||
'div',
|
|
||||||
array(
|
|
||||||
'class' => 'header-loading-mask',
|
|
||||||
),
|
|
||||||
''),
|
|
||||||
$crumbs,
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,9 @@ final class ConpherenceNewRoomController extends ConpherenceController {
|
||||||
$xactions[] = id(new ConpherenceTransaction())
|
$xactions[] = id(new ConpherenceTransaction())
|
||||||
->setTransactionType(ConpherenceTransaction::TYPE_TITLE)
|
->setTransactionType(ConpherenceTransaction::TYPE_TITLE)
|
||||||
->setNewValue($request->getStr('title'));
|
->setNewValue($request->getStr('title'));
|
||||||
|
$xactions[] = id(new ConpherenceTransaction())
|
||||||
|
->setTransactionType(ConpherenceTransaction::TYPE_TOPIC)
|
||||||
|
->setNewValue($request->getStr('topic'));
|
||||||
$xactions[] = id(new ConpherenceTransaction())
|
$xactions[] = id(new ConpherenceTransaction())
|
||||||
->setTransactionType(PhabricatorTransactions::TYPE_VIEW_POLICY)
|
->setTransactionType(PhabricatorTransactions::TYPE_VIEW_POLICY)
|
||||||
->setNewValue($request->getStr('viewPolicy'));
|
->setNewValue($request->getStr('viewPolicy'));
|
||||||
|
@ -93,6 +96,11 @@ final class ConpherenceNewRoomController extends ConpherenceController {
|
||||||
->setLabel(pht('Name'))
|
->setLabel(pht('Name'))
|
||||||
->setName('title')
|
->setName('title')
|
||||||
->setValue($request->getStr('title')))
|
->setValue($request->getStr('title')))
|
||||||
|
->appendChild(
|
||||||
|
id(new AphrontFormTextControl())
|
||||||
|
->setLabel(pht('Topic'))
|
||||||
|
->setName('topic')
|
||||||
|
->setValue($request->getStr('topic')))
|
||||||
->appendChild(
|
->appendChild(
|
||||||
id(new AphrontFormTokenizerControl())
|
id(new AphrontFormTokenizerControl())
|
||||||
->setName('participants')
|
->setName('participants')
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
final class ConpherenceParticipantController extends ConpherenceController {
|
||||||
|
|
||||||
|
public function shouldAllowPublic() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handleRequest(AphrontRequest $request) {
|
||||||
|
$viewer = $request->getViewer();
|
||||||
|
|
||||||
|
$conpherence_id = $request->getURIData('id');
|
||||||
|
if (!$conpherence_id) {
|
||||||
|
return new Aphront404Response();
|
||||||
|
}
|
||||||
|
$conpherence = id(new ConpherenceThreadQuery())
|
||||||
|
->setViewer($viewer)
|
||||||
|
->withIDs(array($conpherence_id))
|
||||||
|
->needWidgetData(true)
|
||||||
|
->executeOne();
|
||||||
|
if (!$conpherence) {
|
||||||
|
return new Aphront404Response();
|
||||||
|
}
|
||||||
|
$this->setConpherence($conpherence);
|
||||||
|
$content = $this->renderParticipantPaneContent();
|
||||||
|
|
||||||
|
return id(new AphrontAjaxResponse())->setContent($content);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function renderParticipantPaneContent() {
|
||||||
|
$conpherence = $this->getConpherence();
|
||||||
|
|
||||||
|
$widgets = array();
|
||||||
|
$new_icon = id(new PHUIIconView())
|
||||||
|
->setIcon('fa-plus-square')
|
||||||
|
->setHref($this->getUpdateURI())
|
||||||
|
->setMetadata(array('widget' => null))
|
||||||
|
->addSigil('conpherence-widget-adder');
|
||||||
|
|
||||||
|
$content = id(new ConpherenceParticipantView())
|
||||||
|
->setUser($this->getViewer())
|
||||||
|
->setConpherence($this->getConpherence())
|
||||||
|
->setUpdateURI($this->getUpdateURI());
|
||||||
|
|
||||||
|
$widgets[] = phutil_tag(
|
||||||
|
'div',
|
||||||
|
array(
|
||||||
|
'class' => 'widgets-header',
|
||||||
|
),
|
||||||
|
id(new PHUIHeaderView())
|
||||||
|
->setHeader(pht('Participants'))
|
||||||
|
->addActionItem($new_icon));
|
||||||
|
|
||||||
|
$widgets[] = javelin_tag(
|
||||||
|
'div',
|
||||||
|
array(
|
||||||
|
'class' => 'widgets-body',
|
||||||
|
'id' => 'widgets-people',
|
||||||
|
'sigil' => 'widgets-people',
|
||||||
|
),
|
||||||
|
$content);
|
||||||
|
|
||||||
|
// without this implosion we get "," between each element in our widgets
|
||||||
|
// array
|
||||||
|
return array('widgets' => phutil_implode_html('', $widgets));
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getUpdateURI() {
|
||||||
|
$conpherence = $this->getConpherence();
|
||||||
|
return $this->getApplicationURI('update/'.$conpherence->getID().'/');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -18,10 +18,6 @@ final class ConpherenceRoomListController extends ConpherenceController {
|
||||||
return $this->delegateToController($controller);
|
return $this->delegateToController($controller);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function buildApplicationCrumbs() {
|
|
||||||
return $this->buildConpherenceApplicationCrumbs($is_rooms = true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function buildApplicationMenu() {
|
public function buildApplicationMenu() {
|
||||||
return $this->buildRoomsSideNavView(true)->getMenu();
|
return $this->buildRoomsSideNavView(true)->getMenu();
|
||||||
}
|
}
|
||||||
|
|
|
@ -107,7 +107,7 @@ final class ConpherenceUpdateController
|
||||||
break;
|
break;
|
||||||
case ConpherenceUpdateActions::REMOVE_PERSON:
|
case ConpherenceUpdateActions::REMOVE_PERSON:
|
||||||
if (!$request->isContinueRequest()) {
|
if (!$request->isContinueRequest()) {
|
||||||
// do nothing; we'll display a confirmation dialogue instead
|
// do nothing; we'll display a confirmation dialog instead
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$person_phid = $request->getStr('remove_person');
|
$person_phid = $request->getStr('remove_person');
|
||||||
|
@ -127,22 +127,16 @@ final class ConpherenceUpdateController
|
||||||
}
|
}
|
||||||
$participant->setSettings(array('notifications' => $notifications));
|
$participant->setSettings(array('notifications' => $notifications));
|
||||||
$participant->save();
|
$participant->save();
|
||||||
|
return id(new AphrontRedirectResponse())
|
||||||
|
->setURI('/'.$conpherence->getMonogram());
|
||||||
|
|
||||||
$label = PhabricatorConpherenceNotificationsSetting::getSettingLabel(
|
|
||||||
$notifications);
|
|
||||||
|
|
||||||
$result = pht(
|
|
||||||
'Updated notification settings to "%s".',
|
|
||||||
$label);
|
|
||||||
|
|
||||||
return id(new AphrontAjaxResponse())
|
|
||||||
->setContent($result);
|
|
||||||
break;
|
break;
|
||||||
case ConpherenceUpdateActions::METADATA:
|
case ConpherenceUpdateActions::METADATA:
|
||||||
$top = $request->getInt('image_y');
|
$top = $request->getInt('image_y');
|
||||||
$left = $request->getInt('image_x');
|
$left = $request->getInt('image_x');
|
||||||
$file_id = $request->getInt('file_id');
|
$file_id = $request->getInt('file_id');
|
||||||
$title = $request->getStr('title');
|
$title = $request->getStr('title');
|
||||||
|
$topic = $request->getStr('topic');
|
||||||
if ($file_id) {
|
if ($file_id) {
|
||||||
$orig_file = id(new PhabricatorFileQuery())
|
$orig_file = id(new PhabricatorFileQuery())
|
||||||
->setViewer($user)
|
->setViewer($user)
|
||||||
|
@ -190,9 +184,13 @@ final class ConpherenceUpdateController
|
||||||
->setNewValue($image_phid);
|
->setNewValue($image_phid);
|
||||||
}
|
}
|
||||||
$title = $request->getStr('title');
|
$title = $request->getStr('title');
|
||||||
|
$topic = $request->getStr('topic');
|
||||||
$xactions[] = id(new ConpherenceTransaction())
|
$xactions[] = id(new ConpherenceTransaction())
|
||||||
->setTransactionType(ConpherenceTransaction::TYPE_TITLE)
|
->setTransactionType(ConpherenceTransaction::TYPE_TITLE)
|
||||||
->setNewValue($title);
|
->setNewValue($title);
|
||||||
|
$xactions[] = id(new ConpherenceTransaction())
|
||||||
|
->setTransactionType(ConpherenceTransaction::TYPE_TOPIC)
|
||||||
|
->setNewValue($topic);
|
||||||
$xactions[] = id(new ConpherenceTransaction())
|
$xactions[] = id(new ConpherenceTransaction())
|
||||||
->setTransactionType(PhabricatorTransactions::TYPE_VIEW_POLICY)
|
->setTransactionType(PhabricatorTransactions::TYPE_VIEW_POLICY)
|
||||||
->setNewValue($request->getStr('viewPolicy'));
|
->setNewValue($request->getStr('viewPolicy'));
|
||||||
|
@ -269,29 +267,97 @@ final class ConpherenceUpdateController
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ($action) {
|
switch ($action) {
|
||||||
|
case ConpherenceUpdateActions::NOTIFICATIONS:
|
||||||
|
$dialog = $this->renderPreferencesDialog($conpherence);
|
||||||
|
break;
|
||||||
case ConpherenceUpdateActions::ADD_PERSON:
|
case ConpherenceUpdateActions::ADD_PERSON:
|
||||||
$dialogue = $this->renderAddPersonDialogue($conpherence);
|
$dialog = $this->renderAddPersonDialog($conpherence);
|
||||||
break;
|
break;
|
||||||
case ConpherenceUpdateActions::REMOVE_PERSON:
|
case ConpherenceUpdateActions::REMOVE_PERSON:
|
||||||
$dialogue = $this->renderRemovePersonDialogue($conpherence);
|
$dialog = $this->renderRemovePersonDialog($conpherence);
|
||||||
break;
|
break;
|
||||||
case ConpherenceUpdateActions::METADATA:
|
case ConpherenceUpdateActions::METADATA:
|
||||||
default:
|
default:
|
||||||
$dialogue = $this->renderMetadataDialogue($conpherence, $error_view);
|
$dialog = $this->renderMetadataDialog($conpherence, $error_view);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return id(new AphrontDialogResponse())
|
return
|
||||||
->setDialog($dialogue
|
$dialog
|
||||||
->setUser($user)
|
->setUser($user)
|
||||||
->setWidth(AphrontDialogView::WIDTH_FORM)
|
->setWidth(AphrontDialogView::WIDTH_FORM)
|
||||||
->setSubmitURI($this->getApplicationURI('update/'.$conpherence_id.'/'))
|
->setSubmitURI($this->getApplicationURI('update/'.$conpherence_id.'/'))
|
||||||
->addSubmitButton()
|
->addSubmitButton()
|
||||||
->addCancelButton($this->getApplicationURI($conpherence->getID().'/')));
|
->addCancelButton($this->getApplicationURI($conpherence->getID().'/'));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function renderAddPersonDialogue(
|
private function renderPreferencesDialog(
|
||||||
|
ConpherenceThread $conpherence) {
|
||||||
|
|
||||||
|
$request = $this->getRequest();
|
||||||
|
$user = $request->getUser();
|
||||||
|
|
||||||
|
$participant = $conpherence->getParticipantIfExists($user->getPHID());
|
||||||
|
if (!$participant) {
|
||||||
|
$can_join = PhabricatorPolicyFilter::hasCapability(
|
||||||
|
$user,
|
||||||
|
$conpherence,
|
||||||
|
PhabricatorPolicyCapability::CAN_JOIN);
|
||||||
|
if ($can_join) {
|
||||||
|
$text = pht(
|
||||||
|
'Notification settings are available after joining the room.');
|
||||||
|
} else if ($user->isLoggedIn()) {
|
||||||
|
$text = pht(
|
||||||
|
'Notification settings not applicable to rooms you can not join.');
|
||||||
|
} else {
|
||||||
|
$text = pht(
|
||||||
|
'Notification settings are available after logging in and joining '.
|
||||||
|
'the room.');
|
||||||
|
}
|
||||||
|
return id(new AphrontDialogView())
|
||||||
|
->setTitle(pht('Room Preferences'))
|
||||||
|
->appendParagraph($text);
|
||||||
|
}
|
||||||
|
|
||||||
|
$notification_key = PhabricatorConpherenceNotificationsSetting::SETTINGKEY;
|
||||||
|
$notification_default = $user->getUserSetting($notification_key);
|
||||||
|
|
||||||
|
$settings = $participant->getSettings();
|
||||||
|
$notifications = idx(
|
||||||
|
$settings,
|
||||||
|
'notifications',
|
||||||
|
$notification_default);
|
||||||
|
|
||||||
|
$form = id(new AphrontFormView())
|
||||||
|
->setUser($user)
|
||||||
|
->setFullWidth(true)
|
||||||
|
->appendControl(
|
||||||
|
id(new AphrontFormRadioButtonControl())
|
||||||
|
->addButton(
|
||||||
|
PhabricatorConpherenceNotificationsSetting::VALUE_CONPHERENCE_EMAIL,
|
||||||
|
PhabricatorConpherenceNotificationsSetting::getSettingLabel(
|
||||||
|
PhabricatorConpherenceNotificationsSetting::VALUE_CONPHERENCE_EMAIL),
|
||||||
|
'')
|
||||||
|
->addButton(
|
||||||
|
PhabricatorConpherenceNotificationsSetting::VALUE_CONPHERENCE_NOTIFY,
|
||||||
|
PhabricatorConpherenceNotificationsSetting::getSettingLabel(
|
||||||
|
PhabricatorConpherenceNotificationsSetting::VALUE_CONPHERENCE_NOTIFY),
|
||||||
|
'')
|
||||||
|
->setName('notifications')
|
||||||
|
->setValue($notifications));
|
||||||
|
|
||||||
|
return id(new AphrontDialogView())
|
||||||
|
->setTitle(pht('Room Preferences'))
|
||||||
|
->addHiddenInput('action', 'notifications')
|
||||||
|
->addHiddenInput(
|
||||||
|
'latest_transaction_id',
|
||||||
|
$request->getInt('latest_transaction_id'))
|
||||||
|
->appendForm($form);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private function renderAddPersonDialog(
|
||||||
ConpherenceThread $conpherence) {
|
ConpherenceThread $conpherence) {
|
||||||
|
|
||||||
$request = $this->getRequest();
|
$request = $this->getRequest();
|
||||||
|
@ -322,7 +388,7 @@ final class ConpherenceUpdateController
|
||||||
return $view;
|
return $view;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function renderRemovePersonDialogue(
|
private function renderRemovePersonDialog(
|
||||||
ConpherenceThread $conpherence) {
|
ConpherenceThread $conpherence) {
|
||||||
|
|
||||||
$request = $this->getRequest();
|
$request = $this->getRequest();
|
||||||
|
@ -405,7 +471,7 @@ final class ConpherenceUpdateController
|
||||||
return $dialog;
|
return $dialog;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function renderMetadataDialogue(
|
private function renderMetadataDialog(
|
||||||
ConpherenceThread $conpherence,
|
ConpherenceThread $conpherence,
|
||||||
$error_view) {
|
$error_view) {
|
||||||
|
|
||||||
|
@ -419,7 +485,12 @@ final class ConpherenceUpdateController
|
||||||
id(new AphrontFormTextControl())
|
id(new AphrontFormTextControl())
|
||||||
->setLabel(pht('Title'))
|
->setLabel(pht('Title'))
|
||||||
->setName('title')
|
->setName('title')
|
||||||
->setValue($conpherence->getTitle()));
|
->setValue($conpherence->getTitle()))
|
||||||
|
->appendChild(
|
||||||
|
id(new AphrontFormTextControl())
|
||||||
|
->setLabel(pht('Topic'))
|
||||||
|
->setName('topic')
|
||||||
|
->setValue($conpherence->getTopic()));
|
||||||
|
|
||||||
$nopic = $this->getRequest()->getExists('nopic');
|
$nopic = $this->getRequest()->getExists('nopic');
|
||||||
$image = $conpherence->getImage(ConpherenceImageData::SIZE_ORIG);
|
$image = $conpherence->getImage(ConpherenceImageData::SIZE_ORIG);
|
||||||
|
@ -548,11 +619,10 @@ final class ConpherenceUpdateController
|
||||||
$rendered_transactions = idx($data, 'transactions');
|
$rendered_transactions = idx($data, 'transactions');
|
||||||
$new_latest_transaction_id = idx($data, 'latest_transaction_id');
|
$new_latest_transaction_id = idx($data, 'latest_transaction_id');
|
||||||
|
|
||||||
$widget_uri = $this->getApplicationURI('update/'.$conpherence->getID().'/');
|
$update_uri = $this->getApplicationURI('update/'.$conpherence->getID().'/');
|
||||||
$nav_item = null;
|
$nav_item = null;
|
||||||
$header = null;
|
$header = null;
|
||||||
$people_widget = null;
|
$people_widget = null;
|
||||||
$file_widget = null;
|
|
||||||
if (!$minimal_display) {
|
if (!$minimal_display) {
|
||||||
switch ($action) {
|
switch ($action) {
|
||||||
case ConpherenceUpdateActions::METADATA:
|
case ConpherenceUpdateActions::METADATA:
|
||||||
|
@ -571,10 +641,10 @@ final class ConpherenceUpdateController
|
||||||
$nav_item = hsprintf('%s', $nav_item);
|
$nav_item = hsprintf('%s', $nav_item);
|
||||||
break;
|
break;
|
||||||
case ConpherenceUpdateActions::ADD_PERSON:
|
case ConpherenceUpdateActions::ADD_PERSON:
|
||||||
$people_widget = id(new ConpherencePeopleWidgetView())
|
$people_widget = id(new ConpherenceParticipantView())
|
||||||
->setUser($user)
|
->setUser($user)
|
||||||
->setConpherence($conpherence)
|
->setConpherence($conpherence)
|
||||||
->setUpdateURI($widget_uri);
|
->setUpdateURI($update_uri);
|
||||||
$people_widget = hsprintf('%s', $people_widget->render());
|
$people_widget = hsprintf('%s', $people_widget->render());
|
||||||
break;
|
break;
|
||||||
case ConpherenceUpdateActions::REMOVE_PERSON:
|
case ConpherenceUpdateActions::REMOVE_PERSON:
|
||||||
|
@ -595,7 +665,6 @@ final class ConpherenceUpdateController
|
||||||
'nav_item' => $nav_item,
|
'nav_item' => $nav_item,
|
||||||
'conpherence_phid' => $conpherence->getPHID(),
|
'conpherence_phid' => $conpherence->getPHID(),
|
||||||
'header' => $header,
|
'header' => $header,
|
||||||
'file_widget' => $file_widget,
|
|
||||||
'people_widget' => $people_widget,
|
'people_widget' => $people_widget,
|
||||||
'aphlictDropdownData' => array(
|
'aphlictDropdownData' => array(
|
||||||
$dropdown_query->getNotificationData(),
|
$dropdown_query->getNotificationData(),
|
||||||
|
|
|
@ -1,181 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
final class ConpherenceWidgetController extends ConpherenceController {
|
|
||||||
|
|
||||||
public function shouldAllowPublic() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function handleRequest(AphrontRequest $request) {
|
|
||||||
$request = $this->getRequest();
|
|
||||||
$user = $request->getUser();
|
|
||||||
|
|
||||||
$conpherence_id = $request->getURIData('id');
|
|
||||||
if (!$conpherence_id) {
|
|
||||||
return new Aphront404Response();
|
|
||||||
}
|
|
||||||
$conpherence = id(new ConpherenceThreadQuery())
|
|
||||||
->setViewer($user)
|
|
||||||
->withIDs(array($conpherence_id))
|
|
||||||
->needWidgetData(true)
|
|
||||||
->executeOne();
|
|
||||||
if (!$conpherence) {
|
|
||||||
return new Aphront404Response();
|
|
||||||
}
|
|
||||||
$this->setConpherence($conpherence);
|
|
||||||
|
|
||||||
switch ($request->getStr('widget')) {
|
|
||||||
case 'widgets-people':
|
|
||||||
$content = $this->renderPeopleWidgetPaneContent();
|
|
||||||
break;
|
|
||||||
case 'widgets-settings':
|
|
||||||
$content = $this->renderSettingsWidgetPaneContent();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
$widgets = $this->renderWidgetPaneContent();
|
|
||||||
$content = $widgets;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return id(new AphrontAjaxResponse())->setContent($content);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function renderWidgetPaneContent() {
|
|
||||||
$conpherence = $this->getConpherence();
|
|
||||||
|
|
||||||
$widgets = array();
|
|
||||||
$new_icon = id(new PHUIIconView())
|
|
||||||
->setIcon('fa-plus')
|
|
||||||
->setHref($this->getWidgetURI())
|
|
||||||
->setMetadata(array('widget' => null))
|
|
||||||
->addSigil('conpherence-widget-adder');
|
|
||||||
$header = javelin_tag(
|
|
||||||
'a',
|
|
||||||
array(
|
|
||||||
'href' => '#',
|
|
||||||
'sigil' => 'widgets-selector',
|
|
||||||
),
|
|
||||||
pht('Participants'));
|
|
||||||
|
|
||||||
$widgets[] = phutil_tag(
|
|
||||||
'div',
|
|
||||||
array(
|
|
||||||
'class' => 'widgets-header',
|
|
||||||
),
|
|
||||||
id(new PHUIHeaderView())
|
|
||||||
->setHeader($header)
|
|
||||||
->addActionItem($new_icon));
|
|
||||||
$user = $this->getRequest()->getUser();
|
|
||||||
// now the widget bodies
|
|
||||||
$widgets[] = javelin_tag(
|
|
||||||
'div',
|
|
||||||
array(
|
|
||||||
'class' => 'widgets-body',
|
|
||||||
'id' => 'widgets-people',
|
|
||||||
'sigil' => 'widgets-people',
|
|
||||||
),
|
|
||||||
$this->renderPeopleWidgetPaneContent());
|
|
||||||
$widgets[] = phutil_tag(
|
|
||||||
'div',
|
|
||||||
array(
|
|
||||||
'class' => 'widgets-body',
|
|
||||||
'id' => 'widgets-settings',
|
|
||||||
'style' => 'display: none',
|
|
||||||
),
|
|
||||||
$this->renderSettingsWidgetPaneContent());
|
|
||||||
|
|
||||||
// without this implosion we get "," between each element in our widgets
|
|
||||||
// array
|
|
||||||
return array('widgets' => phutil_implode_html('', $widgets));
|
|
||||||
}
|
|
||||||
|
|
||||||
private function renderPeopleWidgetPaneContent() {
|
|
||||||
return id(new ConpherencePeopleWidgetView())
|
|
||||||
->setUser($this->getViewer())
|
|
||||||
->setConpherence($this->getConpherence())
|
|
||||||
->setUpdateURI($this->getWidgetURI());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private function renderSettingsWidgetPaneContent() {
|
|
||||||
$viewer = $this->getViewer();
|
|
||||||
$conpherence = $this->getConpherence();
|
|
||||||
$participant = $conpherence->getParticipantIfExists($viewer->getPHID());
|
|
||||||
if (!$participant) {
|
|
||||||
$can_join = PhabricatorPolicyFilter::hasCapability(
|
|
||||||
$viewer,
|
|
||||||
$conpherence,
|
|
||||||
PhabricatorPolicyCapability::CAN_JOIN);
|
|
||||||
if ($can_join) {
|
|
||||||
$text = pht(
|
|
||||||
'Notification settings are available after joining the room.');
|
|
||||||
} else if ($viewer->isLoggedIn()) {
|
|
||||||
$text = pht(
|
|
||||||
'Notification settings not applicable to rooms you can not join.');
|
|
||||||
} else {
|
|
||||||
$text = pht(
|
|
||||||
'Notification settings are available after logging in and joining '.
|
|
||||||
'the room.');
|
|
||||||
}
|
|
||||||
return phutil_tag(
|
|
||||||
'div',
|
|
||||||
array(
|
|
||||||
'class' => 'no-settings',
|
|
||||||
),
|
|
||||||
$text);
|
|
||||||
}
|
|
||||||
$notification_key = PhabricatorConpherenceNotificationsSetting::SETTINGKEY;
|
|
||||||
$notification_default = $viewer->getUserSetting($notification_key);
|
|
||||||
|
|
||||||
$settings = $participant->getSettings();
|
|
||||||
$notifications = idx(
|
|
||||||
$settings,
|
|
||||||
'notifications',
|
|
||||||
$notification_default);
|
|
||||||
$options = id(new AphrontFormRadioButtonControl())
|
|
||||||
->addButton(
|
|
||||||
PhabricatorConpherenceNotificationsSetting::VALUE_CONPHERENCE_EMAIL,
|
|
||||||
PhabricatorConpherenceNotificationsSetting::getSettingLabel(
|
|
||||||
PhabricatorConpherenceNotificationsSetting::VALUE_CONPHERENCE_EMAIL),
|
|
||||||
'')
|
|
||||||
->addButton(
|
|
||||||
PhabricatorConpherenceNotificationsSetting::VALUE_CONPHERENCE_NOTIFY,
|
|
||||||
PhabricatorConpherenceNotificationsSetting::getSettingLabel(
|
|
||||||
PhabricatorConpherenceNotificationsSetting::VALUE_CONPHERENCE_NOTIFY),
|
|
||||||
'')
|
|
||||||
->setName('notifications')
|
|
||||||
->setValue($notifications);
|
|
||||||
|
|
||||||
$layout = array(
|
|
||||||
$options,
|
|
||||||
phutil_tag(
|
|
||||||
'input',
|
|
||||||
array(
|
|
||||||
'type' => 'hidden',
|
|
||||||
'name' => 'action',
|
|
||||||
'value' => 'notifications',
|
|
||||||
)),
|
|
||||||
phutil_tag(
|
|
||||||
'button',
|
|
||||||
array(
|
|
||||||
'type' => 'submit',
|
|
||||||
'class' => 'notifications-update',
|
|
||||||
),
|
|
||||||
pht('Save')),
|
|
||||||
);
|
|
||||||
|
|
||||||
return phabricator_form(
|
|
||||||
$viewer,
|
|
||||||
array(
|
|
||||||
'method' => 'POST',
|
|
||||||
'action' => $this->getWidgetURI(),
|
|
||||||
'sigil' => 'notifications-update',
|
|
||||||
),
|
|
||||||
$layout);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getWidgetURI() {
|
|
||||||
$conpherence = $this->getConpherence();
|
|
||||||
return $this->getApplicationURI('update/'.$conpherence->getID().'/');
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -18,7 +18,8 @@ final class ConpherenceEditor extends PhabricatorApplicationTransactionEditor {
|
||||||
array $participant_phids,
|
array $participant_phids,
|
||||||
$title,
|
$title,
|
||||||
$message,
|
$message,
|
||||||
PhabricatorContentSource $source) {
|
PhabricatorContentSource $source,
|
||||||
|
$topic) {
|
||||||
|
|
||||||
$conpherence = ConpherenceThread::initializeNewRoom($creator);
|
$conpherence = ConpherenceThread::initializeNewRoom($creator);
|
||||||
$files = array();
|
$files = array();
|
||||||
|
@ -59,6 +60,11 @@ final class ConpherenceEditor extends PhabricatorApplicationTransactionEditor {
|
||||||
->setTransactionType(ConpherenceTransaction::TYPE_TITLE)
|
->setTransactionType(ConpherenceTransaction::TYPE_TITLE)
|
||||||
->setNewValue($title);
|
->setNewValue($title);
|
||||||
}
|
}
|
||||||
|
if (strlen($topic)) {
|
||||||
|
$xactions[] = id(new ConpherenceTransaction())
|
||||||
|
->setTransactionType(ConpherenceTransaction::TYPE_TOPIC)
|
||||||
|
->setNewValue($topic);
|
||||||
|
}
|
||||||
|
|
||||||
$xactions[] = id(new ConpherenceTransaction())
|
$xactions[] = id(new ConpherenceTransaction())
|
||||||
->setTransactionType(PhabricatorTransactions::TYPE_COMMENT)
|
->setTransactionType(PhabricatorTransactions::TYPE_COMMENT)
|
||||||
|
@ -118,6 +124,7 @@ final class ConpherenceEditor extends PhabricatorApplicationTransactionEditor {
|
||||||
$types[] = PhabricatorTransactions::TYPE_COMMENT;
|
$types[] = PhabricatorTransactions::TYPE_COMMENT;
|
||||||
|
|
||||||
$types[] = ConpherenceTransaction::TYPE_TITLE;
|
$types[] = ConpherenceTransaction::TYPE_TITLE;
|
||||||
|
$types[] = ConpherenceTransaction::TYPE_TOPIC;
|
||||||
$types[] = ConpherenceTransaction::TYPE_PARTICIPANTS;
|
$types[] = ConpherenceTransaction::TYPE_PARTICIPANTS;
|
||||||
$types[] = ConpherenceTransaction::TYPE_FILES;
|
$types[] = ConpherenceTransaction::TYPE_FILES;
|
||||||
$types[] = ConpherenceTransaction::TYPE_PICTURE;
|
$types[] = ConpherenceTransaction::TYPE_PICTURE;
|
||||||
|
@ -136,6 +143,8 @@ final class ConpherenceEditor extends PhabricatorApplicationTransactionEditor {
|
||||||
switch ($xaction->getTransactionType()) {
|
switch ($xaction->getTransactionType()) {
|
||||||
case ConpherenceTransaction::TYPE_TITLE:
|
case ConpherenceTransaction::TYPE_TITLE:
|
||||||
return $object->getTitle();
|
return $object->getTitle();
|
||||||
|
case ConpherenceTransaction::TYPE_TOPIC:
|
||||||
|
return $object->getTopic();
|
||||||
case ConpherenceTransaction::TYPE_PICTURE:
|
case ConpherenceTransaction::TYPE_PICTURE:
|
||||||
return $object->getImagePHID(ConpherenceImageData::SIZE_ORIG);
|
return $object->getImagePHID(ConpherenceImageData::SIZE_ORIG);
|
||||||
case ConpherenceTransaction::TYPE_PICTURE_CROP:
|
case ConpherenceTransaction::TYPE_PICTURE_CROP:
|
||||||
|
@ -156,6 +165,7 @@ final class ConpherenceEditor extends PhabricatorApplicationTransactionEditor {
|
||||||
|
|
||||||
switch ($xaction->getTransactionType()) {
|
switch ($xaction->getTransactionType()) {
|
||||||
case ConpherenceTransaction::TYPE_TITLE:
|
case ConpherenceTransaction::TYPE_TITLE:
|
||||||
|
case ConpherenceTransaction::TYPE_TOPIC:
|
||||||
case ConpherenceTransaction::TYPE_PICTURE_CROP:
|
case ConpherenceTransaction::TYPE_PICTURE_CROP:
|
||||||
return $xaction->getNewValue();
|
return $xaction->getNewValue();
|
||||||
case ConpherenceTransaction::TYPE_PICTURE:
|
case ConpherenceTransaction::TYPE_PICTURE:
|
||||||
|
@ -250,6 +260,9 @@ final class ConpherenceEditor extends PhabricatorApplicationTransactionEditor {
|
||||||
case ConpherenceTransaction::TYPE_TITLE:
|
case ConpherenceTransaction::TYPE_TITLE:
|
||||||
$object->setTitle($xaction->getNewValue());
|
$object->setTitle($xaction->getNewValue());
|
||||||
break;
|
break;
|
||||||
|
case ConpherenceTransaction::TYPE_TOPIC:
|
||||||
|
$object->setTopic($xaction->getNewValue());
|
||||||
|
break;
|
||||||
case ConpherenceTransaction::TYPE_PICTURE:
|
case ConpherenceTransaction::TYPE_PICTURE:
|
||||||
$object->setImagePHID(
|
$object->setImagePHID(
|
||||||
$xaction->getNewValue(),
|
$xaction->getNewValue(),
|
||||||
|
@ -484,6 +497,7 @@ final class ConpherenceEditor extends PhabricatorApplicationTransactionEditor {
|
||||||
PhabricatorPolicyCapability::CAN_VIEW);
|
PhabricatorPolicyCapability::CAN_VIEW);
|
||||||
break;
|
break;
|
||||||
case ConpherenceTransaction::TYPE_TITLE:
|
case ConpherenceTransaction::TYPE_TITLE:
|
||||||
|
case ConpherenceTransaction::TYPE_TOPIC:
|
||||||
PhabricatorPolicyFilter::requireCapability(
|
PhabricatorPolicyFilter::requireCapability(
|
||||||
$this->requireActor(),
|
$this->requireActor(),
|
||||||
$object,
|
$object,
|
||||||
|
|
|
@ -8,6 +8,7 @@ final class ConpherenceThread extends ConpherenceDAO
|
||||||
PhabricatorDestructibleInterface {
|
PhabricatorDestructibleInterface {
|
||||||
|
|
||||||
protected $title;
|
protected $title;
|
||||||
|
protected $topic;
|
||||||
protected $imagePHIDs = array();
|
protected $imagePHIDs = array();
|
||||||
protected $messageCount;
|
protected $messageCount;
|
||||||
protected $recentParticipantPHIDs = array();
|
protected $recentParticipantPHIDs = array();
|
||||||
|
@ -29,6 +30,7 @@ final class ConpherenceThread extends ConpherenceDAO
|
||||||
return id(new ConpherenceThread())
|
return id(new ConpherenceThread())
|
||||||
->setMessageCount(0)
|
->setMessageCount(0)
|
||||||
->setTitle('')
|
->setTitle('')
|
||||||
|
->setTopic('')
|
||||||
->attachParticipants(array())
|
->attachParticipants(array())
|
||||||
->attachFilePHIDs(array())
|
->attachFilePHIDs(array())
|
||||||
->attachImages(array())
|
->attachImages(array())
|
||||||
|
@ -46,6 +48,7 @@ final class ConpherenceThread extends ConpherenceDAO
|
||||||
),
|
),
|
||||||
self::CONFIG_COLUMN_SCHEMA => array(
|
self::CONFIG_COLUMN_SCHEMA => array(
|
||||||
'title' => 'text255?',
|
'title' => 'text255?',
|
||||||
|
'topic' => 'text255',
|
||||||
'messageCount' => 'uint64',
|
'messageCount' => 'uint64',
|
||||||
'mailKey' => 'text20',
|
'mailKey' => 'text20',
|
||||||
'joinPolicy' => 'policy',
|
'joinPolicy' => 'policy',
|
||||||
|
@ -342,9 +345,11 @@ final class ConpherenceThread extends ConpherenceDAO
|
||||||
$unread_count = $this->getMessageCount() - $user_seen_count;
|
$unread_count = $this->getMessageCount() - $user_seen_count;
|
||||||
|
|
||||||
$title = $this->getDisplayTitle($viewer);
|
$title = $this->getDisplayTitle($viewer);
|
||||||
|
$topic = $this->getTopic();
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
'title' => $title,
|
'title' => $title,
|
||||||
|
'topic' => $topic,
|
||||||
'subtitle' => $subtitle,
|
'subtitle' => $subtitle,
|
||||||
'unread_count' => $unread_count,
|
'unread_count' => $unread_count,
|
||||||
'epoch' => $this->getDateModified(),
|
'epoch' => $this->getDateModified(),
|
||||||
|
|
|
@ -4,6 +4,7 @@ final class ConpherenceTransaction extends PhabricatorApplicationTransaction {
|
||||||
|
|
||||||
const TYPE_FILES = 'files';
|
const TYPE_FILES = 'files';
|
||||||
const TYPE_TITLE = 'title';
|
const TYPE_TITLE = 'title';
|
||||||
|
const TYPE_TOPIC = 'topic';
|
||||||
const TYPE_PARTICIPANTS = 'participants';
|
const TYPE_PARTICIPANTS = 'participants';
|
||||||
const TYPE_DATE_MARKER = 'date-marker';
|
const TYPE_DATE_MARKER = 'date-marker';
|
||||||
const TYPE_PICTURE = 'picture';
|
const TYPE_PICTURE = 'picture';
|
||||||
|
@ -39,6 +40,7 @@ final class ConpherenceTransaction extends PhabricatorApplicationTransaction {
|
||||||
case self::TYPE_PARTICIPANTS:
|
case self::TYPE_PARTICIPANTS:
|
||||||
return ($old === null);
|
return ($old === null);
|
||||||
case self::TYPE_TITLE:
|
case self::TYPE_TITLE:
|
||||||
|
case self::TYPE_TOPIC:
|
||||||
case self::TYPE_PICTURE:
|
case self::TYPE_PICTURE:
|
||||||
case self::TYPE_DATE_MARKER:
|
case self::TYPE_DATE_MARKER:
|
||||||
return false;
|
return false;
|
||||||
|
@ -59,6 +61,7 @@ final class ConpherenceTransaction extends PhabricatorApplicationTransaction {
|
||||||
|
|
||||||
switch ($this->getTransactionType()) {
|
switch ($this->getTransactionType()) {
|
||||||
case self::TYPE_TITLE:
|
case self::TYPE_TITLE:
|
||||||
|
case self::TYPE_TOPIC:
|
||||||
case PhabricatorTransactions::TYPE_VIEW_POLICY:
|
case PhabricatorTransactions::TYPE_VIEW_POLICY:
|
||||||
case PhabricatorTransactions::TYPE_EDIT_POLICY:
|
case PhabricatorTransactions::TYPE_EDIT_POLICY:
|
||||||
case PhabricatorTransactions::TYPE_JOIN_POLICY:
|
case PhabricatorTransactions::TYPE_JOIN_POLICY:
|
||||||
|
@ -147,6 +150,20 @@ final class ConpherenceTransaction extends PhabricatorApplicationTransaction {
|
||||||
}
|
}
|
||||||
return $title;
|
return $title;
|
||||||
break;
|
break;
|
||||||
|
case self::TYPE_TOPIC:
|
||||||
|
if ($new) {
|
||||||
|
$title = pht(
|
||||||
|
'%s set the topic of this room to "%s".',
|
||||||
|
$this->renderHandleLink($author_phid),
|
||||||
|
$new);
|
||||||
|
} else if ($old) {
|
||||||
|
$title = pht(
|
||||||
|
'%s deleted the room topic "%s"',
|
||||||
|
$this->renderHandleLink($author_phid),
|
||||||
|
$old);
|
||||||
|
}
|
||||||
|
return $title;
|
||||||
|
break;
|
||||||
case self::TYPE_PICTURE:
|
case self::TYPE_PICTURE:
|
||||||
return pht(
|
return pht(
|
||||||
'%s updated the room image.',
|
'%s updated the room image.',
|
||||||
|
|
|
@ -105,9 +105,7 @@ final class ConpherenceLayoutView extends AphrontView {
|
||||||
$classes[] = 'hide-widgets';
|
$classes[] = 'hide-widgets';
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->initBehavior(
|
$this->initBehavior('conpherence-participants-pane');
|
||||||
'conpherence-widget-pane',
|
|
||||||
ConpherenceWidgetConfigConstants::getWidgetPaneBehaviorConfig());
|
|
||||||
|
|
||||||
return javelin_tag(
|
return javelin_tag(
|
||||||
'div',
|
'div',
|
||||||
|
|
|
@ -1,6 +1,25 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
final class ConpherencePeopleWidgetView extends ConpherenceWidgetView {
|
final class ConpherenceParticipantView extends AphrontView {
|
||||||
|
|
||||||
|
private $conpherence;
|
||||||
|
private $updateURI;
|
||||||
|
|
||||||
|
public function setUpdateURI($update_uri) {
|
||||||
|
$this->updateURI = $update_uri;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
public function getUpdateURI() {
|
||||||
|
return $this->updateURI;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setConpherence(ConpherenceThread $conpherence) {
|
||||||
|
$this->conpherence = $conpherence;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
public function getConpherence() {
|
||||||
|
return $this->conpherence;
|
||||||
|
}
|
||||||
|
|
||||||
public function render() {
|
public function render() {
|
||||||
$conpherence = $this->getConpherence();
|
$conpherence = $this->getConpherence();
|
||||||
|
@ -14,6 +33,7 @@ final class ConpherencePeopleWidgetView extends ConpherenceWidgetView {
|
||||||
natcasesort($handle_list);
|
natcasesort($handle_list);
|
||||||
$handles = mpull($handles, null, 'getName');
|
$handles = mpull($handles, null, 'getName');
|
||||||
$handles = array_select_keys($handles, $handle_list);
|
$handles = array_select_keys($handles, $handle_list);
|
||||||
|
|
||||||
$head_handles = mpull($head_handles, null, 'getName');
|
$head_handles = mpull($head_handles, null, 'getName');
|
||||||
$handles = $head_handles + $handles;
|
$handles = $head_handles + $handles;
|
||||||
|
|
||||||
|
@ -28,7 +48,8 @@ final class ConpherencePeopleWidgetView extends ConpherenceWidgetView {
|
||||||
|
|
||||||
if (($user_phid == $viewer->getPHID()) || $can_edit) {
|
if (($user_phid == $viewer->getPHID()) || $can_edit) {
|
||||||
$icon = id(new PHUIIconView())
|
$icon = id(new PHUIIconView())
|
||||||
->setIcon('fa-times lightbluetext');
|
->setIcon('fa-times')
|
||||||
|
->addClass('lightbluetext');
|
||||||
$remove_html = javelin_tag(
|
$remove_html = javelin_tag(
|
||||||
'a',
|
'a',
|
||||||
array(
|
array(
|
|
@ -231,6 +231,7 @@ final class ConpherenceTransactionView extends AphrontView {
|
||||||
$content = $transaction->getTitle();
|
$content = $transaction->getTitle();
|
||||||
break;
|
break;
|
||||||
case ConpherenceTransaction::TYPE_TITLE:
|
case ConpherenceTransaction::TYPE_TITLE:
|
||||||
|
case ConpherenceTransaction::TYPE_TOPIC:
|
||||||
case ConpherenceTransaction::TYPE_PICTURE:
|
case ConpherenceTransaction::TYPE_PICTURE:
|
||||||
case ConpherenceTransaction::TYPE_PICTURE_CROP:
|
case ConpherenceTransaction::TYPE_PICTURE_CROP:
|
||||||
case ConpherenceTransaction::TYPE_PARTICIPANTS:
|
case ConpherenceTransaction::TYPE_PARTICIPANTS:
|
||||||
|
|
|
@ -1,24 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
abstract class ConpherenceWidgetView extends AphrontView {
|
|
||||||
|
|
||||||
private $conpherence;
|
|
||||||
private $updateURI;
|
|
||||||
|
|
||||||
public function setUpdateURI($update_uri) {
|
|
||||||
$this->updateURI = $update_uri;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
public function getUpdateURI() {
|
|
||||||
return $this->updateURI;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setConpherence(ConpherenceThread $conpherence) {
|
|
||||||
$this->conpherence = $conpherence;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
public function getConpherence() {
|
|
||||||
return $this->conpherence;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -46,6 +46,10 @@
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.device-phone .aphront-dialog-body {
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
.aphront-dialog-tail {
|
.aphront-dialog-tail {
|
||||||
border: none;
|
border: none;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
68
webroot/rsrc/css/application/conpherence/header-pane.css
Normal file
68
webroot/rsrc/css/application/conpherence/header-pane.css
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
/**
|
||||||
|
* @provides conpherence-header-pane-css
|
||||||
|
*/
|
||||||
|
|
||||||
|
.conpherence-header-pane {
|
||||||
|
}
|
||||||
|
|
||||||
|
.conpherence-header-pane .phui-header-shell {
|
||||||
|
padding: 8px 16px 10px;
|
||||||
|
min-height: 38px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.conpherence-header-pane .phui-header-header {
|
||||||
|
font-size: 16px;
|
||||||
|
font-family: 'Aleo', {$fontfamily};
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.conpherence-header-pane .phui-header-subheader {
|
||||||
|
color: {$lightgreyborder};
|
||||||
|
padding: 0;
|
||||||
|
font-size: 12px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.conpherence-header-pane .phui-header-shell.conpherence-no-topic {
|
||||||
|
padding: 15px 16px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.conpherence-header-pane .phui-header-action-list .phui-header-action-item
|
||||||
|
.phui-icon-view {
|
||||||
|
height: 18px;
|
||||||
|
width: 24px;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 23px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.device .hide-on-device {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.device-phone .conpherence-header-pane .phui-header-col3 {
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.conpherence-header-pane .conpherence-participant-toggle.phui-icon-circle {
|
||||||
|
text-decoration: none;
|
||||||
|
border-color: {$sky};
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.conpherence-header-pane .conpherence-participant-toggle.phui-icon-circle
|
||||||
|
.phui-icon-view {
|
||||||
|
color: {$sky};
|
||||||
|
}
|
||||||
|
|
||||||
|
.hide-widgets .conpherence-header-pane
|
||||||
|
.conpherence-participant-toggle.phui-icon-circle {
|
||||||
|
text-decoration: none;
|
||||||
|
border-color: {$lightblueborder};
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hide-widgets .conpherence-header-pane
|
||||||
|
.conpherence-participant-toggle.phui-icon-circle .phui-icon-view {
|
||||||
|
color: {$lightblueborder};
|
||||||
|
}
|
|
@ -9,7 +9,7 @@
|
||||||
position: fixed;
|
position: fixed;
|
||||||
left: 240px;
|
left: 240px;
|
||||||
right: 240px;
|
right: 240px;
|
||||||
top: 76px;
|
top: 102px;
|
||||||
bottom: 0px;
|
bottom: 0px;
|
||||||
min-width: 300px;
|
min-width: 300px;
|
||||||
width: auto;
|
width: auto;
|
||||||
|
@ -32,11 +32,6 @@
|
||||||
margin: 16px 0px 16px 0px;
|
margin: 16px 0px 16px 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.conpherence-layout .phui-crumbs-view {
|
|
||||||
padding: 0 0 0 8px;
|
|
||||||
background: #f7f7f7;
|
|
||||||
}
|
|
||||||
|
|
||||||
.conpherence-show-more-messages {
|
.conpherence-show-more-messages {
|
||||||
display: block;
|
display: block;
|
||||||
background: #e0e3ec;
|
background: #e0e3ec;
|
||||||
|
@ -54,7 +49,7 @@
|
||||||
position: fixed;
|
position: fixed;
|
||||||
left: 240px;
|
left: 240px;
|
||||||
right: 240px;
|
right: 240px;
|
||||||
top: 78px;
|
top: 103px;
|
||||||
bottom: 148px;
|
bottom: 148px;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
@ -103,13 +98,17 @@
|
||||||
.conpherence-message-pane .phui-form-view {
|
.conpherence-message-pane .phui-form-view {
|
||||||
border-width: 0;
|
border-width: 0;
|
||||||
height: 140px;
|
height: 140px;
|
||||||
padding: 0 8px 8px;
|
padding: 0 20px 12px;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
left: 240px;
|
left: 240px;
|
||||||
right: 241px;
|
right: 241px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.device .conpherence-message-pane .phui-form-view {
|
||||||
|
padding: 8px 8px;
|
||||||
|
}
|
||||||
|
|
||||||
.conpherence-message-pane .phui-form-view.login-to-participate {
|
.conpherence-message-pane .phui-form-view.login-to-participate {
|
||||||
height: 26px;
|
height: 26px;
|
||||||
}
|
}
|
||||||
|
@ -123,6 +122,11 @@
|
||||||
margin-top: 6px;
|
margin-top: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.device .conpherence-message-pane .aphront-form-control-submit button,
|
||||||
|
.device .conpherence-message-pane .aphront-form-control-submit a.button {
|
||||||
|
margin-top: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* When entering "Fullscreen Mode" in the remarkup control, we need to drop
|
* When entering "Fullscreen Mode" in the remarkup control, we need to drop
|
||||||
* all of the "position: fixed" on parent elements or Chrome doesn't put the
|
* all of the "position: fixed" on parent elements or Chrome doesn't put the
|
||||||
|
@ -162,7 +166,7 @@
|
||||||
|
|
||||||
.conpherence-message-pane .conpherence-transaction-view {
|
.conpherence-message-pane .conpherence-transaction-view {
|
||||||
padding: 2px 0px;
|
padding: 2px 0px;
|
||||||
margin: 4px 12px;
|
margin: 4px 20px;
|
||||||
background-size: 100%;
|
background-size: 100%;
|
||||||
min-height: auto;
|
min-height: auto;
|
||||||
}
|
}
|
||||||
|
@ -182,7 +186,9 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.device-phone .conpherence-message-pane .conpherence-transaction-image {
|
.device-phone .conpherence-message-pane .conpherence-transaction-image {
|
||||||
display: none;
|
height: 25px;
|
||||||
|
width: 25px;
|
||||||
|
background-size: 25px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.conpherence-message-pane .conpherence-comment.anchor-target,
|
.conpherence-message-pane .conpherence-comment.anchor-target,
|
||||||
|
@ -206,12 +212,12 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.device-phone .conpherence-message-pane .conpherence-transaction-detail {
|
.device-phone .conpherence-message-pane .conpherence-transaction-detail {
|
||||||
margin: 0;
|
margin-left: 32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.conpherence-message-pane .conpherence-transaction-view.date-marker {
|
.conpherence-message-pane .conpherence-transaction-view.date-marker {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 20px 12px 4px;
|
margin: 20px 20px 4px;
|
||||||
min-height: auto;
|
min-height: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -234,7 +240,6 @@
|
||||||
|
|
||||||
.device .conpherence-message-pane .conpherence-transaction-view.date-marker
|
.device .conpherence-message-pane .conpherence-transaction-view.date-marker
|
||||||
.date {
|
.date {
|
||||||
color: {$lightbluetext};
|
|
||||||
left: 4px;
|
left: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -351,10 +356,3 @@
|
||||||
max-height: 200px;
|
max-height: 200px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.device .conpherence-header-desktop-item {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.device .conpherence-header-pane .phui-crumb-action-divider {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
|
@ -17,14 +17,14 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.conpherence-transaction-view.date-marker {
|
.conpherence-transaction-view.date-marker {
|
||||||
border-top: 1px solid {$thinblueborder};
|
border-top: 1px solid {$sh-violetborder};
|
||||||
}
|
}
|
||||||
|
|
||||||
.conpherence-transaction-view.date-marker .date {
|
.conpherence-transaction-view.date-marker .date {
|
||||||
position: relative;
|
position: relative;
|
||||||
top: -11px;
|
top: -11px;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
color: #000;
|
color: {$sh-violettext};
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,10 +2,6 @@
|
||||||
* @provides conpherence-update-css
|
* @provides conpherence-update-css
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.phabricator-standard-page-body .aphront-dialog-view {
|
|
||||||
margin: 20px auto 0px auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.aphront-dialog-view .conpherence-dialogue-drag-photo {
|
.aphront-dialog-view .conpherence-dialogue-drag-photo {
|
||||||
border: 1px dashed #bfbfbf;
|
border: 1px dashed #bfbfbf;
|
||||||
padding: 10px 0px 10px 10px;
|
padding: 10px 0px 10px 10px;
|
||||||
|
|
|
@ -2,11 +2,10 @@
|
||||||
* @provides conpherence-widget-pane-css
|
* @provides conpherence-widget-pane-css
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.conpherence-widget-pane,
|
.conpherence-widget-pane {
|
||||||
.loading .widgets-loading-mask {
|
|
||||||
position: fixed;
|
position: fixed;
|
||||||
right: 0px;
|
right: 0px;
|
||||||
top: 79px;
|
top: 103px;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
width: 240px;
|
width: 240px;
|
||||||
border-width: 0 0 0 1px;
|
border-width: 0 0 0 1px;
|
||||||
|
@ -15,20 +14,9 @@
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
-webkit-overflow-scrolling: touch;
|
-webkit-overflow-scrolling: touch;
|
||||||
}
|
}
|
||||||
.device .conpherence-widget-pane,
|
|
||||||
.device .loading .widgets-loading-mask {
|
|
||||||
top: 44px;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.conpherence-widget-pane .widgets-loading-mask {
|
.device .conpherence-widget-pane {
|
||||||
opacity: .6;
|
background-color: {$page.background};
|
||||||
background: #fff;
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.loading .widgets-loading-mask {
|
|
||||||
display: block;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.conpherence-widget-pane .aphront-form-input {
|
.conpherence-widget-pane .aphront-form-input {
|
||||||
|
@ -48,84 +36,20 @@
|
||||||
font-size: {$biggerfontsize};
|
font-size: {$biggerfontsize};
|
||||||
}
|
}
|
||||||
|
|
||||||
.device .conpherence-widget-pane .widgets-header {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.conpherence-widget-pane .widgets-header .caret {
|
|
||||||
float: none;
|
|
||||||
height: 0px;
|
|
||||||
width: 0px;
|
|
||||||
margin: 10px 0 0 4px;
|
|
||||||
border-top-color: #000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.conpherence-widget-pane .widgets-header .phui-icon-view.disabled {
|
.conpherence-widget-pane .widgets-header .phui-icon-view.disabled {
|
||||||
color: {$lightgreytext};
|
color: {$lightgreytext};
|
||||||
}
|
}
|
||||||
|
|
||||||
.device-desktop .conpherence-layout .device-widgets-selector {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.conpherence-widget-pane .widgets-body {
|
.conpherence-widget-pane .widgets-body {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
top: 76px;
|
top: 144px;
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#widgets-settings {
|
|
||||||
padding: 3px 6px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.device-desktop .conpherence-widget-pane .widgets-body {
|
|
||||||
top: 115px;
|
|
||||||
width: 240px;
|
width: 240px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.conpherence-widget-pane .widget-icon {
|
|
||||||
display: block;
|
|
||||||
height: 14px;
|
|
||||||
width: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.conpherence-widget-pane .phabricator-remarkup-embed-layout-link {
|
|
||||||
padding-bottom: 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* people widget */
|
|
||||||
.conpherence-widget-pane .people-widget-header .add-people-widget {
|
|
||||||
padding: 10px 0 5px 0;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.conpherence-widget-pane .people-widget-header .add-people-widget
|
|
||||||
.aphront-form-control-tokenizer {
|
|
||||||
float: left;
|
|
||||||
width: 150px;
|
|
||||||
padding: 0px 0px 0px 10px
|
|
||||||
}
|
|
||||||
|
|
||||||
.device .conpherence-widget-pane .people-widget-header .add-people-widget
|
|
||||||
.aphront-form-control-tokenizer {
|
|
||||||
width: 70%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.conpherence-widget-pane .people-widget-header .add-people-widget
|
|
||||||
.people-add-button {
|
|
||||||
float: right;
|
|
||||||
margin: 2px 8px 0px 0px;
|
|
||||||
padding: 3px 16px 4px 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#widgets-people {
|
|
||||||
margin-top: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.conpherence-widget-pane .person-entry {
|
.conpherence-widget-pane .person-entry {
|
||||||
padding: 4px 8px;
|
padding: 4px 4px 4px 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.conpherence-widget-pane .person-entry:hover {
|
.conpherence-widget-pane .person-entry:hover {
|
||||||
|
@ -173,35 +97,17 @@
|
||||||
color: #000;
|
color: #000;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* settings widget */
|
|
||||||
.conpherence-widget-pane .title-update,
|
|
||||||
.conpherence-widget-pane .notifications-update {
|
|
||||||
margin: 3px 0px 0px 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.conpherence-widget-pane .no-settings {
|
|
||||||
width: 200px;
|
|
||||||
padding: 20px;
|
|
||||||
text-align: center;
|
|
||||||
color: {$greytext};
|
|
||||||
}
|
|
||||||
|
|
||||||
.device .conpherence-widget-pane .no-settings {
|
|
||||||
width: 60px;
|
|
||||||
margin: 0 auto 0 auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****** Hide Widgets **********************************************************/
|
/****** Hide Widgets **********************************************************/
|
||||||
|
|
||||||
.device-desktop .hide-widgets .conpherence-widget-pane {
|
.hide-widgets .conpherence-widget-pane {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.device-desktop .hide-widgets .conpherence-message-pane,
|
.hide-widgets .conpherence-message-pane,
|
||||||
.device-desktop .hide-widgets .loading .messages-loading-mask,
|
.hide-widgets .loading .messages-loading-mask,
|
||||||
.device-desktop .hide-widgets .loading .messages-loading-icon,
|
.hide-widgets .loading .messages-loading-icon,
|
||||||
.device-desktop .hide-widgets .conpherence-no-threads,
|
.hide-widgets .conpherence-no-threads,
|
||||||
.device-desktop .hide-widgets .conpherence-message-pane .conpherence-messages,
|
.hide-widgets .conpherence-message-pane .conpherence-messages,
|
||||||
.device-desktop .hide-widgets .conpherence-message-pane .phui-form-view {
|
.hide-widgets .conpherence-message-pane .phui-form-view {
|
||||||
right: 0;
|
right: 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -150,6 +150,10 @@ div.jx-typeahead-results {
|
||||||
z-index: 21;
|
z-index: 21;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.conpherence-widget-pane {
|
||||||
|
z-index: 25;
|
||||||
|
}
|
||||||
|
|
||||||
.phuix-dropdown-menu {
|
.phuix-dropdown-menu {
|
||||||
z-index: 32;
|
z-index: 32;
|
||||||
}
|
}
|
||||||
|
|
|
@ -241,7 +241,7 @@ JX.behavior('conpherence-menu', function(config) {
|
||||||
if (!data.widget) {
|
if (!data.widget) {
|
||||||
data.widget = getDefaultWidget();
|
data.widget = getDefaultWidget();
|
||||||
}
|
}
|
||||||
var widget_uri = config.baseURI + 'widget/' + data.threadID + '/';
|
var widget_uri = config.baseURI + 'participant/' + data.threadID + '/';
|
||||||
new JX.Workflow(widget_uri, {})
|
new JX.Workflow(widget_uri, {})
|
||||||
.setHandler(JX.bind(null, onWidgetResponse, data.threadID, data.widget))
|
.setHandler(JX.bind(null, onWidgetResponse, data.threadID, data.widget))
|
||||||
.start();
|
.start();
|
||||||
|
|
|
@ -0,0 +1,112 @@
|
||||||
|
/**
|
||||||
|
* @requires javelin-behavior
|
||||||
|
* javelin-dom
|
||||||
|
* javelin-stratcom
|
||||||
|
* javelin-workflow
|
||||||
|
* javelin-util
|
||||||
|
* phabricator-notification
|
||||||
|
* conpherence-thread-manager
|
||||||
|
* @provides javelin-behavior-conpherence-participants-pane
|
||||||
|
*/
|
||||||
|
|
||||||
|
JX.behavior('conpherence-participants-pane', function() {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generified adding new stuff to widgets technology!
|
||||||
|
*/
|
||||||
|
JX.Stratcom.listen(
|
||||||
|
['click'],
|
||||||
|
'conpherence-widget-adder',
|
||||||
|
function (e) {
|
||||||
|
e.kill();
|
||||||
|
|
||||||
|
var threadManager = JX.ConpherenceThreadManager.getInstance();
|
||||||
|
var href = threadManager._getUpdateURI();
|
||||||
|
var latest_transaction_id = threadManager.getLatestTransactionID();
|
||||||
|
var data = {
|
||||||
|
latest_transaction_id : latest_transaction_id,
|
||||||
|
action : 'add_person'
|
||||||
|
};
|
||||||
|
|
||||||
|
var workflow = new JX.Workflow(href, data)
|
||||||
|
.setHandler(function (r) {
|
||||||
|
var threadManager = JX.ConpherenceThreadManager.getInstance();
|
||||||
|
threadManager.setLatestTransactionID(r.latest_transaction_id);
|
||||||
|
var root = JX.DOM.find(document, 'div', 'conpherence-layout');
|
||||||
|
var messages = null;
|
||||||
|
try {
|
||||||
|
messages = JX.DOM.find(root, 'div', 'conpherence-messages');
|
||||||
|
} catch (ex) {
|
||||||
|
}
|
||||||
|
if (messages) {
|
||||||
|
JX.DOM.appendContent(messages, JX.$H(r.transactions));
|
||||||
|
JX.Stratcom.invoke('conpherence-redraw-thread', null, {});
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
var people_root = JX.DOM.find(root, 'div', 'widgets-people');
|
||||||
|
// update the people widget
|
||||||
|
JX.DOM.setContent(
|
||||||
|
people_root,
|
||||||
|
JX.$H(r.people_widget));
|
||||||
|
} catch (ex) {
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
threadManager.syncWorkflow(workflow, 'submit');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
JX.Stratcom.listen(
|
||||||
|
['touchstart', 'mousedown'],
|
||||||
|
'remove-person',
|
||||||
|
function (e) {
|
||||||
|
var threadManager = JX.ConpherenceThreadManager.getInstance();
|
||||||
|
var href = threadManager._getUpdateURI();
|
||||||
|
var data = e.getNodeData('remove-person');
|
||||||
|
|
||||||
|
// While the user is removing themselves, disable the notification
|
||||||
|
// update behavior. If we don't do this, the user can get an error
|
||||||
|
// when they remove themselves about permissions as the notification
|
||||||
|
// code tries to load what jist happened.
|
||||||
|
var loadedPhid = threadManager.getLoadedThreadPHID();
|
||||||
|
threadManager.setLoadedThreadPHID(null);
|
||||||
|
|
||||||
|
new JX.Workflow(href, data)
|
||||||
|
.setCloseHandler(function() {
|
||||||
|
threadManager.setLoadedThreadPHID(loadedPhid);
|
||||||
|
})
|
||||||
|
// we re-direct to conpherence home so the thread manager will
|
||||||
|
// fix itself there
|
||||||
|
.setHandler(function(r) {
|
||||||
|
JX.$U(r.href).go();
|
||||||
|
})
|
||||||
|
.start();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
/* settings widget */
|
||||||
|
var onsubmitSettings = function (e) {
|
||||||
|
e.kill();
|
||||||
|
var form = e.getNode('tag:form');
|
||||||
|
var button = JX.DOM.find(form, 'button');
|
||||||
|
JX.Workflow.newFromForm(form)
|
||||||
|
.setHandler(JX.bind(this, function (r) {
|
||||||
|
new JX.Notification()
|
||||||
|
.setDuration(6000)
|
||||||
|
.setContent(r)
|
||||||
|
.show();
|
||||||
|
button.disabled = '';
|
||||||
|
JX.DOM.alterClass(button, 'disabled', false);
|
||||||
|
}))
|
||||||
|
.start();
|
||||||
|
};
|
||||||
|
|
||||||
|
JX.Stratcom.listen(
|
||||||
|
['submit', 'didSyntheticSubmit'],
|
||||||
|
'notifications-update',
|
||||||
|
onsubmitSettings
|
||||||
|
);
|
||||||
|
|
||||||
|
});
|
|
@ -14,6 +14,7 @@ JX.behavior('toggle-widget', function(config) {
|
||||||
var node = JX.$('conpherence-main-layout');
|
var node = JX.$('conpherence-main-layout');
|
||||||
config.show = !config.show;
|
config.show = !config.show;
|
||||||
JX.DOM.alterClass(node, 'hide-widgets', !config.show);
|
JX.DOM.alterClass(node, 'hide-widgets', !config.show);
|
||||||
|
JX.Stratcom.invoke('resize');
|
||||||
|
|
||||||
new JX.Request(config.settingsURI)
|
new JX.Request(config.settingsURI)
|
||||||
.setData({value: (config.show ? 1 : 0)})
|
.setData({value: (config.show ? 1 : 0)})
|
||||||
|
|
|
@ -1,382 +0,0 @@
|
||||||
/**
|
|
||||||
* @requires javelin-behavior
|
|
||||||
* javelin-dom
|
|
||||||
* javelin-stratcom
|
|
||||||
* javelin-workflow
|
|
||||||
* javelin-util
|
|
||||||
* phabricator-notification
|
|
||||||
* javelin-behavior-device
|
|
||||||
* phuix-dropdown-menu
|
|
||||||
* phuix-action-list-view
|
|
||||||
* phuix-action-view
|
|
||||||
* conpherence-thread-manager
|
|
||||||
* @provides javelin-behavior-conpherence-widget-pane
|
|
||||||
*/
|
|
||||||
|
|
||||||
JX.behavior('conpherence-widget-pane', function(config) {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* There can be race conditions around loading the messages or the widgets
|
|
||||||
* first. Keep track of what widgets we've loaded with this variable.
|
|
||||||
*/
|
|
||||||
var _loadedWidgetsID = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* At any given time there can be only one selected widget. Keep track of
|
|
||||||
* which one it is by the user-facing name for ease of use with
|
|
||||||
* PhabricatorDropdownMenuItems.
|
|
||||||
*/
|
|
||||||
var _selectedWidgetName = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is potentially built each time the user switches conpherence threads
|
|
||||||
* or when the result JX.Device.getDevice() changes from desktop to some
|
|
||||||
* other value.
|
|
||||||
*/
|
|
||||||
var buildDeviceWidgetSelector = function (data) {
|
|
||||||
var device_header = _getDeviceWidgetHeader();
|
|
||||||
if (!device_header) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
JX.DOM.show(device_header);
|
|
||||||
var device_menu = new JX.PHUIXDropdownMenu(device_header);
|
|
||||||
data.deviceMenu = true;
|
|
||||||
_buildWidgetSelector(device_menu, data);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is potentially built each time the user switches conpherence threads
|
|
||||||
* or when the result JX.Device.getDevice() changes from mobile or tablet to
|
|
||||||
* desktop.
|
|
||||||
*/
|
|
||||||
var buildDesktopWidgetSelector = function (data) {
|
|
||||||
var root = JX.DOM.find(document, 'div', 'conpherence-layout');
|
|
||||||
var widget_pane = JX.DOM.find(root, 'div', 'conpherence-widget-pane');
|
|
||||||
var widget_header = JX.DOM.find(widget_pane, 'a', 'widgets-selector');
|
|
||||||
|
|
||||||
var menu = new JX.PHUIXDropdownMenu(widget_header);
|
|
||||||
menu
|
|
||||||
.setAlign('left')
|
|
||||||
.setOffsetY(4);
|
|
||||||
|
|
||||||
data.deviceMenu = false;
|
|
||||||
_buildWidgetSelector(menu, data);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Workhorse that actually builds the widget selector. Note some fancy bits
|
|
||||||
* where we listen for the "open" event and enable / disable widgets as
|
|
||||||
* appropos.
|
|
||||||
*/
|
|
||||||
var _buildWidgetSelector = function (menu, data) {
|
|
||||||
_loadedWidgetsID = data.threadID;
|
|
||||||
|
|
||||||
var list = new JX.PHUIXActionListView();
|
|
||||||
var map = {};
|
|
||||||
|
|
||||||
var widgets = config.widgetRegistry;
|
|
||||||
for (var widget in widgets) {
|
|
||||||
var widget_data = widgets[widget];
|
|
||||||
if (widget_data.deviceOnly && data.deviceMenu === false) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
var handler;
|
|
||||||
var href;
|
|
||||||
handler = JX.bind(null, function(widget, e) {
|
|
||||||
toggleWidget({widget: widget});
|
|
||||||
e.prevent();
|
|
||||||
menu.close();
|
|
||||||
}, widget);
|
|
||||||
var item = new JX.PHUIXActionView()
|
|
||||||
.setIcon(widget_data.icon || 'none')
|
|
||||||
.setName(widget_data.name)
|
|
||||||
.setHref(href)
|
|
||||||
.setHandler(handler);
|
|
||||||
map[widget_data.name] = item;
|
|
||||||
list.addItem(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
menu
|
|
||||||
.setWidth(200)
|
|
||||||
.setContent(list.getNode());
|
|
||||||
|
|
||||||
menu.listen('open', function() {
|
|
||||||
for (var k in map) {
|
|
||||||
map[k].setDisabled((k == _selectedWidgetName));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Since this is not always on the page, avoid having a repeat
|
|
||||||
* try / catch block and consolidate into this helper function.
|
|
||||||
*/
|
|
||||||
var _getDeviceWidgetHeader = function () {
|
|
||||||
var root = JX.DOM.find(document, 'div', 'conpherence-layout');
|
|
||||||
var device_header = null;
|
|
||||||
try {
|
|
||||||
device_header = JX.DOM.find(
|
|
||||||
root,
|
|
||||||
'a',
|
|
||||||
'device-widgets-selector');
|
|
||||||
} catch (ex) {
|
|
||||||
// is okay - no deviceWidgetHeader yet... but bail time
|
|
||||||
}
|
|
||||||
return device_header;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Responder to the 'conpherence-did-redraw-thread' event, this bad boy
|
|
||||||
* hides or shows the device widget selector as appropros.
|
|
||||||
*/
|
|
||||||
var _didRedrawThread = function (data) {
|
|
||||||
if (_loadedWidgetsID === null || _loadedWidgetsID != data.threadID) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var device = JX.Device.getDevice();
|
|
||||||
var device_selector = _getDeviceWidgetHeader();
|
|
||||||
if (device == 'desktop') {
|
|
||||||
JX.DOM.hide(device_selector);
|
|
||||||
} else {
|
|
||||||
JX.DOM.show(device_selector);
|
|
||||||
}
|
|
||||||
if (data.buildDeviceWidgetSelector) {
|
|
||||||
buildDeviceWidgetSelector(data);
|
|
||||||
}
|
|
||||||
toggleWidget(data);
|
|
||||||
};
|
|
||||||
JX.Stratcom.listen(
|
|
||||||
'conpherence-did-redraw-thread',
|
|
||||||
null,
|
|
||||||
function (e) {
|
|
||||||
_didRedrawThread(e.getData());
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Toggling a widget involves showing / hiding the appropriate widget
|
|
||||||
* bodies as well as updating the selectors to have the label on the
|
|
||||||
* newly selected widget.
|
|
||||||
*/
|
|
||||||
var toggleWidget = function (data) {
|
|
||||||
var widgets = config.widgetRegistry;
|
|
||||||
var widget_data = widgets[data.widget];
|
|
||||||
var device = JX.Device.getDevice();
|
|
||||||
var is_desktop = device == 'desktop';
|
|
||||||
|
|
||||||
if (widget_data.deviceOnly && is_desktop) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_selectedWidgetName = widget_data.name;
|
|
||||||
|
|
||||||
var device_header = _getDeviceWidgetHeader();
|
|
||||||
if (device_header) {
|
|
||||||
// this is fragile but adding a sigil to this element is awkward
|
|
||||||
var device_header_spans = JX.DOM.scry(device_header, 'span');
|
|
||||||
var device_header_span = device_header_spans[1];
|
|
||||||
JX.DOM.setContent(
|
|
||||||
device_header_span,
|
|
||||||
widget_data.name);
|
|
||||||
}
|
|
||||||
|
|
||||||
// don't update the non-device selector with device only widget stuff
|
|
||||||
if (!widget_data.deviceOnly) {
|
|
||||||
var root = JX.DOM.find(document, 'div', 'conpherence-layout');
|
|
||||||
var widget_pane = JX.DOM.find(root, 'div', 'conpherence-widget-pane');
|
|
||||||
var widget_header = JX.DOM.find(widget_pane, 'a', 'widgets-selector');
|
|
||||||
var adder = JX.DOM.find(widget_pane, 'a', 'conpherence-widget-adder');
|
|
||||||
var threadManager = JX.ConpherenceThreadManager.getInstance();
|
|
||||||
var disabled = !threadManager.getCanEditLoadedThread();
|
|
||||||
JX.DOM.setContent(
|
|
||||||
widget_header,
|
|
||||||
widget_data.name);
|
|
||||||
JX.DOM.appendContent(
|
|
||||||
widget_header,
|
|
||||||
JX.$N('span', { className : 'caret' }));
|
|
||||||
if (widget_data.hasCreate) {
|
|
||||||
JX.DOM.show(adder);
|
|
||||||
JX.DOM.alterClass(
|
|
||||||
adder,
|
|
||||||
'disabled',
|
|
||||||
disabled);
|
|
||||||
} else {
|
|
||||||
JX.DOM.hide(adder);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var widget in config.widgetRegistry) {
|
|
||||||
widget_data = widgets[widget];
|
|
||||||
if (widget_data.deviceOnly && is_desktop) {
|
|
||||||
// some one off code for conpherence messages which are device-only
|
|
||||||
// as a widget, but shown always on the desktop
|
|
||||||
if (widget == 'conpherence-message-pane') {
|
|
||||||
JX.$(widget).style.display = 'block';
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (widget == data.widget) {
|
|
||||||
JX.$(widget).style.display = 'block';
|
|
||||||
// some one off code for conpherence messages - fancier refresh tech
|
|
||||||
if (widget == 'conpherence-message-pane') {
|
|
||||||
JX.Stratcom.invoke('conpherence-redraw-thread', null, {});
|
|
||||||
JX.Stratcom.invoke('conpherence-update-page-data', null, {});
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
JX.$(widget).style.display = 'none';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
JX.Stratcom.listen(
|
|
||||||
'conpherence-update-widgets',
|
|
||||||
null,
|
|
||||||
function (e) {
|
|
||||||
var data = e.getData();
|
|
||||||
if (data.buildSelectors) {
|
|
||||||
buildDesktopWidgetSelector(data);
|
|
||||||
buildDeviceWidgetSelector(data);
|
|
||||||
}
|
|
||||||
if (data.toggleWidget) {
|
|
||||||
toggleWidget(data);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generified adding new stuff to widgets technology!
|
|
||||||
*/
|
|
||||||
JX.Stratcom.listen(
|
|
||||||
['click'],
|
|
||||||
'conpherence-widget-adder',
|
|
||||||
function (e) {
|
|
||||||
e.kill();
|
|
||||||
|
|
||||||
var widgets = config.widgetRegistry;
|
|
||||||
// the widget key might be in node data, but otherwise use the
|
|
||||||
// selected widget
|
|
||||||
var event_data = e.getNodeData('conpherence-widget-adder');
|
|
||||||
var widget_key = _selectedWidgetName;
|
|
||||||
if (event_data.widget) {
|
|
||||||
widget_key = widgets[event_data.widget].name;
|
|
||||||
}
|
|
||||||
|
|
||||||
var widget_to_update = null;
|
|
||||||
var create_data = null;
|
|
||||||
for (var widget in widgets) {
|
|
||||||
if (widgets[widget].name == widget_key) {
|
|
||||||
create_data = widgets[widget].createData;
|
|
||||||
widget_to_update = widget;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// this should be impossible, but hey
|
|
||||||
if (!widget_to_update) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var href = config.widgetBaseUpdateURI + _loadedWidgetsID + '/';
|
|
||||||
if (create_data.customHref) {
|
|
||||||
href = create_data.customHref;
|
|
||||||
}
|
|
||||||
|
|
||||||
var threadManager = JX.ConpherenceThreadManager.getInstance();
|
|
||||||
var latest_transaction_id = threadManager.getLatestTransactionID();
|
|
||||||
var data = {
|
|
||||||
latest_transaction_id : latest_transaction_id,
|
|
||||||
action : create_data.action
|
|
||||||
};
|
|
||||||
|
|
||||||
var workflow = new JX.Workflow(href, data)
|
|
||||||
.setHandler(function (r) {
|
|
||||||
var threadManager = JX.ConpherenceThreadManager.getInstance();
|
|
||||||
threadManager.setLatestTransactionID(r.latest_transaction_id);
|
|
||||||
var root = JX.DOM.find(document, 'div', 'conpherence-layout');
|
|
||||||
if (create_data.refreshFromResponse) {
|
|
||||||
var messages = null;
|
|
||||||
try {
|
|
||||||
messages = JX.DOM.find(root, 'div', 'conpherence-messages');
|
|
||||||
} catch (ex) {
|
|
||||||
}
|
|
||||||
if (messages) {
|
|
||||||
JX.DOM.appendContent(messages, JX.$H(r.transactions));
|
|
||||||
JX.Stratcom.invoke('conpherence-redraw-thread', null, {});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (r.people_widget) {
|
|
||||||
try {
|
|
||||||
var people_root = JX.DOM.find(root, 'div', 'widgets-people');
|
|
||||||
// update the people widget
|
|
||||||
JX.DOM.setContent(
|
|
||||||
people_root,
|
|
||||||
JX.$H(r.people_widget));
|
|
||||||
} catch (ex) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// otherwise let's redraw the widget somewhat lazily
|
|
||||||
} else {
|
|
||||||
JX.Stratcom.invoke(
|
|
||||||
'conpherence-reload-widget',
|
|
||||||
null,
|
|
||||||
{
|
|
||||||
threadID : _loadedWidgetsID,
|
|
||||||
widget : widget_to_update
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
threadManager.syncWorkflow(workflow, 'submit');
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
JX.Stratcom.listen(
|
|
||||||
['touchstart', 'mousedown'],
|
|
||||||
'remove-person',
|
|
||||||
function (e) {
|
|
||||||
var href = config.widgetBaseUpdateURI + _loadedWidgetsID + '/';
|
|
||||||
var data = e.getNodeData('remove-person');
|
|
||||||
|
|
||||||
// While the user is removing themselves, disable the notification
|
|
||||||
// update behavior. If we don't do this, the user can get an error
|
|
||||||
// when they remove themselves about permissions as the notification
|
|
||||||
// code tries to load what jist happened.
|
|
||||||
var threadManager = JX.ConpherenceThreadManager.getInstance();
|
|
||||||
var loadedPhid = threadManager.getLoadedThreadPHID();
|
|
||||||
threadManager.setLoadedThreadPHID(null);
|
|
||||||
|
|
||||||
new JX.Workflow(href, data)
|
|
||||||
.setCloseHandler(function() {
|
|
||||||
threadManager.setLoadedThreadPHID(loadedPhid);
|
|
||||||
})
|
|
||||||
// we re-direct to conpherence home so the thread manager will
|
|
||||||
// fix itself there
|
|
||||||
.setHandler(function(r) {
|
|
||||||
JX.$U(r.href).go();
|
|
||||||
})
|
|
||||||
.start();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
/* settings widget */
|
|
||||||
var onsubmitSettings = function (e) {
|
|
||||||
e.kill();
|
|
||||||
var form = e.getNode('tag:form');
|
|
||||||
var button = JX.DOM.find(form, 'button');
|
|
||||||
JX.Workflow.newFromForm(form)
|
|
||||||
.setHandler(JX.bind(this, function (r) {
|
|
||||||
new JX.Notification()
|
|
||||||
.setDuration(6000)
|
|
||||||
.setContent(r)
|
|
||||||
.show();
|
|
||||||
button.disabled = '';
|
|
||||||
JX.DOM.alterClass(button, 'disabled', false);
|
|
||||||
}))
|
|
||||||
.start();
|
|
||||||
};
|
|
||||||
|
|
||||||
JX.Stratcom.listen(
|
|
||||||
['submit', 'didSyntheticSubmit'],
|
|
||||||
'notifications-update',
|
|
||||||
onsubmitSettings
|
|
||||||
);
|
|
||||||
|
|
||||||
});
|
|
Loading…
Reference in a new issue