1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-24 15:52:41 +01:00

(stable) Promote 2016 Week 40

This commit is contained in:
epriestley 2016-10-01 06:02:32 -07:00
commit 8dbc3f1840
43 changed files with 1003 additions and 506 deletions

View file

@ -7,12 +7,12 @@
*/ */
return array( return array(
'names' => array( 'names' => array(
'conpherence.pkg.css' => '80a3fcb3', 'conpherence.pkg.css' => 'b1547973',
'conpherence.pkg.js' => '89b4837e', 'conpherence.pkg.js' => '11f3e07e',
'core.pkg.css' => 'f7b03076', 'core.pkg.css' => 'cfc3eabe',
'core.pkg.js' => '1d376fa9', 'core.pkg.js' => '975d6a27',
'darkconsole.pkg.js' => 'e7393ebb', 'darkconsole.pkg.js' => 'e7393ebb',
'differential.pkg.css' => '3fb7f532', 'differential.pkg.css' => 'e1d704ce',
'differential.pkg.js' => '634399e9', 'differential.pkg.js' => '634399e9',
'diffusion.pkg.css' => '91c5d3a6', 'diffusion.pkg.css' => '91c5d3a6',
'diffusion.pkg.js' => '84c8f8fd', 'diffusion.pkg.js' => '84c8f8fd',
@ -23,7 +23,7 @@ return array(
'rsrc/css/aphront/dialog-view.css' => '593d3f67', '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' => '84cc6640',
'rsrc/css/aphront/notification.css' => '3f6c89c9', 'rsrc/css/aphront/notification.css' => '3f6c89c9',
'rsrc/css/aphront/panel-view.css' => '8427b78d', 'rsrc/css/aphront/panel-view.css' => '8427b78d',
'rsrc/css/aphront/phabricator-nav-view.css' => 'b29426e9', 'rsrc/css/aphront/phabricator-nav-view.css' => 'b29426e9',
@ -38,7 +38,7 @@ return array(
'rsrc/css/application/base/notification-menu.css' => 'b3ab500d', 'rsrc/css/application/base/notification-menu.css' => 'b3ab500d',
'rsrc/css/application/base/phabricator-application-launch-view.css' => '95351601', 'rsrc/css/application/base/phabricator-application-launch-view.css' => '95351601',
'rsrc/css/application/base/phui-theme.css' => '027ba77e', 'rsrc/css/application/base/phui-theme.css' => '027ba77e',
'rsrc/css/application/base/standard-page-view.css' => '3026770e', 'rsrc/css/application/base/standard-page-view.css' => '79176f5a',
'rsrc/css/application/chatlog/chatlog.css' => 'd295b020', 'rsrc/css/application/chatlog/chatlog.css' => 'd295b020',
'rsrc/css/application/conduit/conduit-api.css' => '7bc725c4', 'rsrc/css/application/conduit/conduit-api.css' => '7bc725c4',
'rsrc/css/application/config/config-options.css' => '0ede4c9b', 'rsrc/css/application/config/config-options.css' => '0ede4c9b',
@ -46,10 +46,10 @@ return array(
'rsrc/css/application/config/config-template.css' => '8f18fa41', 'rsrc/css/application/config/config-template.css' => '8f18fa41',
'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' => 'af11a2a7',
'rsrc/css/application/conpherence/header-pane.css' => '517de9fe', 'rsrc/css/application/conpherence/header-pane.css' => '517de9fe',
'rsrc/css/application/conpherence/menu.css' => '78c7b811', 'rsrc/css/application/conpherence/menu.css' => '78c7b811',
'rsrc/css/application/conpherence/message-pane.css' => '8d13ac4d', 'rsrc/css/application/conpherence/message-pane.css' => '0d7dff02',
'rsrc/css/application/conpherence/notification.css' => '6cdcc253', 'rsrc/css/application/conpherence/notification.css' => '6cdcc253',
'rsrc/css/application/conpherence/participant-pane.css' => '7bba0b56', 'rsrc/css/application/conpherence/participant-pane.css' => '7bba0b56',
'rsrc/css/application/conpherence/transaction.css' => '46253e19', 'rsrc/css/application/conpherence/transaction.css' => '46253e19',
@ -138,7 +138,7 @@ return array(
'rsrc/css/phui/phui-document.css' => 'c32e8dec', 'rsrc/css/phui/phui-document.css' => 'c32e8dec',
'rsrc/css/phui/phui-feed-story.css' => 'aa49845d', 'rsrc/css/phui/phui-feed-story.css' => 'aa49845d',
'rsrc/css/phui/phui-fontkit.css' => '9cda225e', 'rsrc/css/phui/phui-fontkit.css' => '9cda225e',
'rsrc/css/phui/phui-form-view.css' => '76b4a46c', 'rsrc/css/phui/phui-form-view.css' => '9e22b190',
'rsrc/css/phui/phui-form.css' => 'aac1d51d', 'rsrc/css/phui/phui-form.css' => 'aac1d51d',
'rsrc/css/phui/phui-head-thing.css' => 'fd311e5f', 'rsrc/css/phui/phui-head-thing.css' => 'fd311e5f',
'rsrc/css/phui/phui-header-view.css' => '06385974', 'rsrc/css/phui/phui-header-view.css' => '06385974',
@ -164,7 +164,7 @@ return array(
'rsrc/css/phui/phui-timeline-view.css' => 'bc523970', 'rsrc/css/phui/phui-timeline-view.css' => 'bc523970',
'rsrc/css/phui/phui-two-column-view.css' => 'fcfbe347', 'rsrc/css/phui/phui-two-column-view.css' => 'fcfbe347',
'rsrc/css/phui/workboards/phui-workboard-color.css' => 'ac6fe6a7', 'rsrc/css/phui/workboards/phui-workboard-color.css' => 'ac6fe6a7',
'rsrc/css/phui/workboards/phui-workboard.css' => 'bda3ef58', 'rsrc/css/phui/workboards/phui-workboard.css' => 'e09eb53a',
'rsrc/css/phui/workboards/phui-workcard.css' => '0c62d7c5', 'rsrc/css/phui/workboards/phui-workcard.css' => '0c62d7c5',
'rsrc/css/phui/workboards/phui-workpanel.css' => '92197373', 'rsrc/css/phui/workboards/phui-workpanel.css' => '92197373',
'rsrc/css/sprite-login.css' => '6dbbbd97', 'rsrc/css/sprite-login.css' => '6dbbbd97',
@ -438,10 +438,10 @@ return array(
'rsrc/js/application/config/behavior-reorder-fields.js' => 'b6993408', 'rsrc/js/application/config/behavior-reorder-fields.js' => 'b6993408',
'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' => 'e287689f',
'rsrc/js/application/conpherence/behavior-menu.js' => '9eb55204', 'rsrc/js/application/conpherence/behavior-menu.js' => '9eb55204',
'rsrc/js/application/conpherence/behavior-participant-pane.js' => '8604caa8', 'rsrc/js/application/conpherence/behavior-participant-pane.js' => '8604caa8',
'rsrc/js/application/conpherence/behavior-pontificate.js' => '21ba5861', 'rsrc/js/application/conpherence/behavior-pontificate.js' => 'f2e58483',
'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' => '9bdbbab0', 'rsrc/js/application/conpherence/behavior-toggle-widget.js' => '9bdbbab0',
'rsrc/js/application/countdown/timer.js' => 'e4cc26b3', 'rsrc/js/application/countdown/timer.js' => 'e4cc26b3',
@ -495,7 +495,7 @@ return array(
'rsrc/js/application/policy/behavior-policy-rule-editor.js' => '5e9f347c', 'rsrc/js/application/policy/behavior-policy-rule-editor.js' => '5e9f347c',
'rsrc/js/application/projects/WorkboardBoard.js' => 'fe7cb52a', 'rsrc/js/application/projects/WorkboardBoard.js' => 'fe7cb52a',
'rsrc/js/application/projects/WorkboardCard.js' => 'c587b80f', 'rsrc/js/application/projects/WorkboardCard.js' => 'c587b80f',
'rsrc/js/application/projects/WorkboardColumn.js' => 'bae58312', 'rsrc/js/application/projects/WorkboardColumn.js' => '21df4ff5',
'rsrc/js/application/projects/WorkboardController.js' => '55baf5ed', 'rsrc/js/application/projects/WorkboardController.js' => '55baf5ed',
'rsrc/js/application/projects/behavior-project-boards.js' => '14a1faae', 'rsrc/js/application/projects/behavior-project-boards.js' => '14a1faae',
'rsrc/js/application/projects/behavior-project-create.js' => '065227cc', 'rsrc/js/application/projects/behavior-project-create.js' => '065227cc',
@ -605,7 +605,7 @@ return array(
'aphront-dark-console-css' => 'f54bf286', 'aphront-dark-console-css' => 'f54bf286',
'aphront-dialog-view-css' => '593d3f67', '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' => '84cc6640',
'aphront-panel-view-css' => '8427b78d', 'aphront-panel-view-css' => '8427b78d',
'aphront-table-view-css' => '3225137a', 'aphront-table-view-css' => '3225137a',
'aphront-tokenizer-control-css' => '056da01b', 'aphront-tokenizer-control-css' => '056da01b',
@ -618,10 +618,10 @@ return array(
'conduit-api-css' => '7bc725c4', 'conduit-api-css' => '7bc725c4',
'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' => 'af11a2a7',
'conpherence-header-pane-css' => '517de9fe', 'conpherence-header-pane-css' => '517de9fe',
'conpherence-menu-css' => '78c7b811', 'conpherence-menu-css' => '78c7b811',
'conpherence-message-pane-css' => '8d13ac4d', 'conpherence-message-pane-css' => '0d7dff02',
'conpherence-notification-css' => '6cdcc253', 'conpherence-notification-css' => '6cdcc253',
'conpherence-participant-pane-css' => '7bba0b56', 'conpherence-participant-pane-css' => '7bba0b56',
'conpherence-thread-manager' => '01774ab2', 'conpherence-thread-manager' => '01774ab2',
@ -670,7 +670,7 @@ return array(
'javelin-behavior-conpherence-drag-and-drop-photo' => 'cf86d16a', 'javelin-behavior-conpherence-drag-and-drop-photo' => 'cf86d16a',
'javelin-behavior-conpherence-menu' => '9eb55204', 'javelin-behavior-conpherence-menu' => '9eb55204',
'javelin-behavior-conpherence-participant-pane' => '8604caa8', 'javelin-behavior-conpherence-participant-pane' => '8604caa8',
'javelin-behavior-conpherence-pontificate' => '21ba5861', 'javelin-behavior-conpherence-pontificate' => 'f2e58483',
'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',
@ -699,7 +699,7 @@ return array(
'javelin-behavior-diffusion-pull-lastmodified' => 'f01586dc', 'javelin-behavior-diffusion-pull-lastmodified' => 'f01586dc',
'javelin-behavior-doorkeeper-tag' => 'e5822781', 'javelin-behavior-doorkeeper-tag' => 'e5822781',
'javelin-behavior-drydock-live-operation-status' => '901935ef', 'javelin-behavior-drydock-live-operation-status' => '901935ef',
'javelin-behavior-durable-column' => 'd3506890', 'javelin-behavior-durable-column' => 'e287689f',
'javelin-behavior-editengine-reorder-configs' => 'd7a74243', 'javelin-behavior-editengine-reorder-configs' => 'd7a74243',
'javelin-behavior-editengine-reorder-fields' => 'b59e1e96', 'javelin-behavior-editengine-reorder-fields' => 'b59e1e96',
'javelin-behavior-error-log' => '6882e80a', 'javelin-behavior-error-log' => '6882e80a',
@ -825,7 +825,7 @@ return array(
'javelin-websocket' => 'e292eaf4', 'javelin-websocket' => 'e292eaf4',
'javelin-workboard-board' => 'fe7cb52a', 'javelin-workboard-board' => 'fe7cb52a',
'javelin-workboard-card' => 'c587b80f', 'javelin-workboard-card' => 'c587b80f',
'javelin-workboard-column' => 'bae58312', 'javelin-workboard-column' => '21df4ff5',
'javelin-workboard-controller' => '55baf5ed', 'javelin-workboard-controller' => '55baf5ed',
'javelin-workflow' => '1e911d0f', 'javelin-workflow' => '1e911d0f',
'lightbox-attachment-css' => '7acac05d', 'lightbox-attachment-css' => '7acac05d',
@ -869,7 +869,7 @@ return array(
'phabricator-shaped-request' => '7cbe244b', 'phabricator-shaped-request' => '7cbe244b',
'phabricator-slowvote-css' => 'a94b7230', 'phabricator-slowvote-css' => 'a94b7230',
'phabricator-source-code-view-css' => 'cbeef983', 'phabricator-source-code-view-css' => 'cbeef983',
'phabricator-standard-page-view' => '3026770e', 'phabricator-standard-page-view' => '79176f5a',
'phabricator-textareautils' => '320810c8', 'phabricator-textareautils' => '320810c8',
'phabricator-title' => 'df5e11d2', 'phabricator-title' => 'df5e11d2',
'phabricator-tooltip' => '6323f942', 'phabricator-tooltip' => '6323f942',
@ -915,7 +915,7 @@ return array(
'phui-font-icon-base-css' => '870a7360', 'phui-font-icon-base-css' => '870a7360',
'phui-fontkit-css' => '9cda225e', 'phui-fontkit-css' => '9cda225e',
'phui-form-css' => 'aac1d51d', 'phui-form-css' => 'aac1d51d',
'phui-form-view-css' => '76b4a46c', 'phui-form-view-css' => '9e22b190',
'phui-head-thing-view-css' => 'fd311e5f', 'phui-head-thing-view-css' => 'fd311e5f',
'phui-header-view-css' => '06385974', 'phui-header-view-css' => '06385974',
'phui-hovercard' => '1bd28176', 'phui-hovercard' => '1bd28176',
@ -943,7 +943,7 @@ return array(
'phui-timeline-view-css' => 'bc523970', 'phui-timeline-view-css' => 'bc523970',
'phui-two-column-view-css' => 'fcfbe347', 'phui-two-column-view-css' => 'fcfbe347',
'phui-workboard-color-css' => 'ac6fe6a7', 'phui-workboard-color-css' => 'ac6fe6a7',
'phui-workboard-view-css' => 'bda3ef58', 'phui-workboard-view-css' => 'e09eb53a',
'phui-workcard-view-css' => '0c62d7c5', 'phui-workcard-view-css' => '0c62d7c5',
'phui-workpanel-view-css' => '92197373', 'phui-workpanel-view-css' => '92197373',
'phuix-action-list-view' => 'b5c256b8', 'phuix-action-list-view' => 'b5c256b8',
@ -1154,13 +1154,9 @@ return array(
'javelin-uri', 'javelin-uri',
'javelin-routable', 'javelin-routable',
), ),
'21ba5861' => array( '21df4ff5' => array(
'javelin-behavior', 'javelin-install',
'javelin-dom', 'javelin-workboard-card',
'javelin-util',
'javelin-workflow',
'javelin-stratcom',
'conpherence-thread-manager',
), ),
'2290aeef' => array( '2290aeef' => array(
'javelin-install', 'javelin-install',
@ -1922,10 +1918,6 @@ return array(
'javelin-uri', 'javelin-uri',
'phabricator-notification', 'phabricator-notification',
), ),
'bae58312' => array(
'javelin-install',
'javelin-workboard-card',
),
'bb1dd507' => array( 'bb1dd507' => array(
'javelin-behavior', 'javelin-behavior',
'javelin-stratcom', 'javelin-stratcom',
@ -2042,16 +2034,6 @@ return array(
'd254d646' => array( 'd254d646' => array(
'javelin-util', 'javelin-util',
), ),
'd3506890' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'javelin-behavior-device',
'javelin-scrollbar',
'javelin-quicksand',
'phabricator-keyboard-shortcut',
'conpherence-thread-manager',
),
'd4505101' => array( 'd4505101' => array(
'javelin-stratcom', 'javelin-stratcom',
'javelin-install', 'javelin-install',
@ -2127,6 +2109,16 @@ return array(
'javelin-stratcom', 'javelin-stratcom',
'javelin-dom', 'javelin-dom',
), ),
'e287689f' => array(
'javelin-behavior',
'javelin-dom',
'javelin-stratcom',
'javelin-behavior-device',
'javelin-scrollbar',
'javelin-quicksand',
'phabricator-keyboard-shortcut',
'conpherence-thread-manager',
),
'e292eaf4' => array( 'e292eaf4' => array(
'javelin-install', 'javelin-install',
), ),
@ -2208,6 +2200,14 @@ return array(
'f03e17be' => array( 'f03e17be' => array(
'phui-theme-css', 'phui-theme-css',
), ),
'f2e58483' => array(
'javelin-behavior',
'javelin-dom',
'javelin-util',
'javelin-workflow',
'javelin-stratcom',
'conpherence-thread-manager',
),
'f411b6ae' => array( 'f411b6ae' => array(
'javelin-behavior', 'javelin-behavior',
'javelin-stratcom', 'javelin-stratcom',
@ -2332,6 +2332,7 @@ return array(
'aphront-tokenizer-control-css', 'aphront-tokenizer-control-css',
'aphront-typeahead-control-css', 'aphront-typeahead-control-css',
'aphront-list-filter-view-css', 'aphront-list-filter-view-css',
'application-search-view-css',
'phabricator-remarkup-css', 'phabricator-remarkup-css',
'syntax-highlighting-css', 'syntax-highlighting-css',
'syntax-default-css', 'syntax-default-css',
@ -2344,7 +2345,6 @@ return array(
'phabricator-notification-menu-css', 'phabricator-notification-menu-css',
'lightbox-attachment-css', 'lightbox-attachment-css',
'phui-header-view-css', 'phui-header-view-css',
'phabricator-filetree-view-css',
'phabricator-nav-view-css', 'phabricator-nav-view-css',
'phui-basic-nav-view-css', 'phui-basic-nav-view-css',
'phui-crumbs-view-css', 'phui-crumbs-view-css',
@ -2479,6 +2479,7 @@ return array(
'phabricator-content-source-view-css', 'phabricator-content-source-view-css',
'inline-comment-summary-css', 'inline-comment-summary-css',
'phui-inline-comment-view-css', 'phui-inline-comment-view-css',
'phabricator-filetree-view-css',
), ),
'differential.pkg.js' => array( 'differential.pkg.js' => array(
'phabricator-drag-and-drop-file-upload', 'phabricator-drag-and-drop-file-upload',

View file

@ -98,6 +98,7 @@ return array(
'aphront-tokenizer-control-css', 'aphront-tokenizer-control-css',
'aphront-typeahead-control-css', 'aphront-typeahead-control-css',
'aphront-list-filter-view-css', 'aphront-list-filter-view-css',
'application-search-view-css',
'phabricator-remarkup-css', 'phabricator-remarkup-css',
'syntax-highlighting-css', 'syntax-highlighting-css',
@ -112,7 +113,6 @@ return array(
'phabricator-notification-menu-css', 'phabricator-notification-menu-css',
'lightbox-attachment-css', 'lightbox-attachment-css',
'phui-header-view-css', 'phui-header-view-css',
'phabricator-filetree-view-css',
'phabricator-nav-view-css', 'phabricator-nav-view-css',
'phui-basic-nav-view-css', 'phui-basic-nav-view-css',
'phui-crumbs-view-css', 'phui-crumbs-view-css',
@ -180,6 +180,7 @@ return array(
'phabricator-content-source-view-css', 'phabricator-content-source-view-css',
'inline-comment-summary-css', 'inline-comment-summary-css',
'phui-inline-comment-view-css', 'phui-inline-comment-view-css',
'phabricator-filetree-view-css',
), ),
'differential.pkg.js' => array( 'differential.pkg.js' => array(
'phabricator-drag-and-drop-file-upload', 'phabricator-drag-and-drop-file-upload',

View file

@ -0,0 +1,11 @@
<?php
$table = new PhabricatorPhurlURL();
foreach (new LiskMigrationIterator($table) as $url) {
PhabricatorSearchWorker::queueDocumentForIndexing(
$url->getPHID(),
array(
'force' => true,
));
}

View file

@ -0,0 +1,7 @@
CREATE TABLE {$NAMESPACE}_phurl.phurl_phurlname_ngrams (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
objectID INT UNSIGNED NOT NULL,
ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT},
KEY `key_object` (objectID),
KEY `key_ngram` (ngram, objectID)
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};

View file

@ -0,0 +1,15 @@
CREATE TABLE {$NAMESPACE}_token.token_token (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
phid VARBINARY(64) NOT NULL,
name VARCHAR(64) NOT NULL COLLATE {$COLLATE_TEXT},
flavor VARCHAR(128) NOT NULL COLLATE {$COLLATE_TEXT},
status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT},
builtinKey VARCHAR(32) COLLATE {$COLLATE_TEXT},
dateCreated INT UNSIGNED NOT NULL,
dateModified INT UNSIGNED NOT NULL,
creatorPHID VARBINARY(64) NOT NULL,
tokenImagePHID VARBINARY(64),
UNIQUE KEY `key_phid` (phid),
UNIQUE KEY `key_builtin` (builtinKey),
KEY `key_creator` (creatorPHID, dateModified)
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};

View file

@ -2213,6 +2213,7 @@ phutil_register_library_map(array(
'PhabricatorConfigValidationException' => 'applications/config/exception/PhabricatorConfigValidationException.php', 'PhabricatorConfigValidationException' => 'applications/config/exception/PhabricatorConfigValidationException.php',
'PhabricatorConfigVersionController' => 'applications/config/controller/PhabricatorConfigVersionController.php', 'PhabricatorConfigVersionController' => 'applications/config/controller/PhabricatorConfigVersionController.php',
'PhabricatorConpherenceApplication' => 'applications/conpherence/application/PhabricatorConpherenceApplication.php', 'PhabricatorConpherenceApplication' => 'applications/conpherence/application/PhabricatorConpherenceApplication.php',
'PhabricatorConpherenceColumnMinimizeSetting' => 'applications/settings/setting/PhabricatorConpherenceColumnMinimizeSetting.php',
'PhabricatorConpherenceColumnVisibleSetting' => 'applications/settings/setting/PhabricatorConpherenceColumnVisibleSetting.php', 'PhabricatorConpherenceColumnVisibleSetting' => 'applications/settings/setting/PhabricatorConpherenceColumnVisibleSetting.php',
'PhabricatorConpherenceNotificationsSetting' => 'applications/settings/setting/PhabricatorConpherenceNotificationsSetting.php', 'PhabricatorConpherenceNotificationsSetting' => 'applications/settings/setting/PhabricatorConpherenceNotificationsSetting.php',
'PhabricatorConpherencePreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorConpherencePreferencesSettingsPanel.php', 'PhabricatorConpherencePreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorConpherencePreferencesSettingsPanel.php',
@ -2688,6 +2689,7 @@ phutil_register_library_map(array(
'PhabricatorIconSetEditField' => 'applications/transactions/editfield/PhabricatorIconSetEditField.php', 'PhabricatorIconSetEditField' => 'applications/transactions/editfield/PhabricatorIconSetEditField.php',
'PhabricatorIconSetIcon' => 'applications/files/iconset/PhabricatorIconSetIcon.php', 'PhabricatorIconSetIcon' => 'applications/files/iconset/PhabricatorIconSetIcon.php',
'PhabricatorImageMacroRemarkupRule' => 'applications/macro/markup/PhabricatorImageMacroRemarkupRule.php', 'PhabricatorImageMacroRemarkupRule' => 'applications/macro/markup/PhabricatorImageMacroRemarkupRule.php',
'PhabricatorImageRemarkupRule' => 'applications/files/markup/PhabricatorImageRemarkupRule.php',
'PhabricatorImageTransformer' => 'applications/files/PhabricatorImageTransformer.php', 'PhabricatorImageTransformer' => 'applications/files/PhabricatorImageTransformer.php',
'PhabricatorImagemagickSetupCheck' => 'applications/config/check/PhabricatorImagemagickSetupCheck.php', 'PhabricatorImagemagickSetupCheck' => 'applications/config/check/PhabricatorImagemagickSetupCheck.php',
'PhabricatorInFlightErrorView' => 'applications/config/view/PhabricatorInFlightErrorView.php', 'PhabricatorInFlightErrorView' => 'applications/config/view/PhabricatorInFlightErrorView.php',
@ -3186,14 +3188,17 @@ phutil_register_library_map(array(
'PhabricatorPhurlURLAccessController' => 'applications/phurl/controller/PhabricatorPhurlURLAccessController.php', 'PhabricatorPhurlURLAccessController' => 'applications/phurl/controller/PhabricatorPhurlURLAccessController.php',
'PhabricatorPhurlURLCommentController' => 'applications/phurl/controller/PhabricatorPhurlURLCommentController.php', 'PhabricatorPhurlURLCommentController' => 'applications/phurl/controller/PhabricatorPhurlURLCommentController.php',
'PhabricatorPhurlURLCreateCapability' => 'applications/phurl/capability/PhabricatorPhurlURLCreateCapability.php', 'PhabricatorPhurlURLCreateCapability' => 'applications/phurl/capability/PhabricatorPhurlURLCreateCapability.php',
'PhabricatorPhurlURLEditConduitAPIMethod' => 'applications/phurl/conduit/PhabricatorPhurlURLEditConduitAPIMethod.php',
'PhabricatorPhurlURLEditController' => 'applications/phurl/controller/PhabricatorPhurlURLEditController.php', 'PhabricatorPhurlURLEditController' => 'applications/phurl/controller/PhabricatorPhurlURLEditController.php',
'PhabricatorPhurlURLEditEngine' => 'applications/phurl/editor/PhabricatorPhurlURLEditEngine.php', 'PhabricatorPhurlURLEditEngine' => 'applications/phurl/editor/PhabricatorPhurlURLEditEngine.php',
'PhabricatorPhurlURLEditor' => 'applications/phurl/editor/PhabricatorPhurlURLEditor.php', 'PhabricatorPhurlURLEditor' => 'applications/phurl/editor/PhabricatorPhurlURLEditor.php',
'PhabricatorPhurlURLListController' => 'applications/phurl/controller/PhabricatorPhurlURLListController.php', 'PhabricatorPhurlURLListController' => 'applications/phurl/controller/PhabricatorPhurlURLListController.php',
'PhabricatorPhurlURLMailReceiver' => 'applications/phurl/mail/PhabricatorPhurlURLMailReceiver.php', 'PhabricatorPhurlURLMailReceiver' => 'applications/phurl/mail/PhabricatorPhurlURLMailReceiver.php',
'PhabricatorPhurlURLNameNgrams' => 'applications/phurl/storage/PhabricatorPhurlURLNameNgrams.php',
'PhabricatorPhurlURLPHIDType' => 'applications/phurl/phid/PhabricatorPhurlURLPHIDType.php', 'PhabricatorPhurlURLPHIDType' => 'applications/phurl/phid/PhabricatorPhurlURLPHIDType.php',
'PhabricatorPhurlURLQuery' => 'applications/phurl/query/PhabricatorPhurlURLQuery.php', 'PhabricatorPhurlURLQuery' => 'applications/phurl/query/PhabricatorPhurlURLQuery.php',
'PhabricatorPhurlURLReplyHandler' => 'applications/phurl/mail/PhabricatorPhurlURLReplyHandler.php', 'PhabricatorPhurlURLReplyHandler' => 'applications/phurl/mail/PhabricatorPhurlURLReplyHandler.php',
'PhabricatorPhurlURLSearchConduitAPIMethod' => 'applications/phurl/conduit/PhabricatorPhurlURLSearchConduitAPIMethod.php',
'PhabricatorPhurlURLSearchEngine' => 'applications/phurl/query/PhabricatorPhurlURLSearchEngine.php', 'PhabricatorPhurlURLSearchEngine' => 'applications/phurl/query/PhabricatorPhurlURLSearchEngine.php',
'PhabricatorPhurlURLTransaction' => 'applications/phurl/storage/PhabricatorPhurlURLTransaction.php', 'PhabricatorPhurlURLTransaction' => 'applications/phurl/storage/PhabricatorPhurlURLTransaction.php',
'PhabricatorPhurlURLTransactionComment' => 'applications/phurl/storage/PhabricatorPhurlURLTransactionComment.php', 'PhabricatorPhurlURLTransactionComment' => 'applications/phurl/storage/PhabricatorPhurlURLTransactionComment.php',
@ -3776,6 +3781,7 @@ phutil_register_library_map(array(
'PhabricatorTokensApplication' => 'applications/tokens/application/PhabricatorTokensApplication.php', 'PhabricatorTokensApplication' => 'applications/tokens/application/PhabricatorTokensApplication.php',
'PhabricatorTokensCurtainExtension' => 'applications/tokens/engineextension/PhabricatorTokensCurtainExtension.php', 'PhabricatorTokensCurtainExtension' => 'applications/tokens/engineextension/PhabricatorTokensCurtainExtension.php',
'PhabricatorTokensSettingsPanel' => 'applications/settings/panel/PhabricatorTokensSettingsPanel.php', 'PhabricatorTokensSettingsPanel' => 'applications/settings/panel/PhabricatorTokensSettingsPanel.php',
'PhabricatorTokensToken' => 'applications/tokens/storage/PhabricatorTokensToken.php',
'PhabricatorTooltipUIExample' => 'applications/uiexample/examples/PhabricatorTooltipUIExample.php', 'PhabricatorTooltipUIExample' => 'applications/uiexample/examples/PhabricatorTooltipUIExample.php',
'PhabricatorTransactionChange' => 'applications/transactions/data/PhabricatorTransactionChange.php', 'PhabricatorTransactionChange' => 'applications/transactions/data/PhabricatorTransactionChange.php',
'PhabricatorTransactionRemarkupChange' => 'applications/transactions/data/PhabricatorTransactionRemarkupChange.php', 'PhabricatorTransactionRemarkupChange' => 'applications/transactions/data/PhabricatorTransactionRemarkupChange.php',
@ -4765,7 +4771,7 @@ phutil_register_library_map(array(
'ConpherenceFulltextQuery' => 'PhabricatorOffsetPagedQuery', 'ConpherenceFulltextQuery' => 'PhabricatorOffsetPagedQuery',
'ConpherenceImageData' => 'ConpherenceConstants', 'ConpherenceImageData' => 'ConpherenceConstants',
'ConpherenceIndex' => 'ConpherenceDAO', 'ConpherenceIndex' => 'ConpherenceDAO',
'ConpherenceLayoutView' => 'AphrontView', 'ConpherenceLayoutView' => 'AphrontTagView',
'ConpherenceListController' => 'ConpherenceController', 'ConpherenceListController' => 'ConpherenceController',
'ConpherenceMenuItemView' => 'AphrontTagView', 'ConpherenceMenuItemView' => 'AphrontTagView',
'ConpherenceNewRoomController' => 'ConpherenceController', 'ConpherenceNewRoomController' => 'ConpherenceController',
@ -6976,6 +6982,7 @@ phutil_register_library_map(array(
'PhabricatorConfigValidationException' => 'Exception', 'PhabricatorConfigValidationException' => 'Exception',
'PhabricatorConfigVersionController' => 'PhabricatorConfigController', 'PhabricatorConfigVersionController' => 'PhabricatorConfigController',
'PhabricatorConpherenceApplication' => 'PhabricatorApplication', 'PhabricatorConpherenceApplication' => 'PhabricatorApplication',
'PhabricatorConpherenceColumnMinimizeSetting' => 'PhabricatorInternalSetting',
'PhabricatorConpherenceColumnVisibleSetting' => 'PhabricatorInternalSetting', 'PhabricatorConpherenceColumnVisibleSetting' => 'PhabricatorInternalSetting',
'PhabricatorConpherenceNotificationsSetting' => 'PhabricatorSelectSetting', 'PhabricatorConpherenceNotificationsSetting' => 'PhabricatorSelectSetting',
'PhabricatorConpherencePreferencesSettingsPanel' => 'PhabricatorEditEngineSettingsPanel', 'PhabricatorConpherencePreferencesSettingsPanel' => 'PhabricatorEditEngineSettingsPanel',
@ -7523,6 +7530,7 @@ phutil_register_library_map(array(
'PhabricatorIconSetEditField' => 'PhabricatorEditField', 'PhabricatorIconSetEditField' => 'PhabricatorEditField',
'PhabricatorIconSetIcon' => 'Phobject', 'PhabricatorIconSetIcon' => 'Phobject',
'PhabricatorImageMacroRemarkupRule' => 'PhutilRemarkupRule', 'PhabricatorImageMacroRemarkupRule' => 'PhutilRemarkupRule',
'PhabricatorImageRemarkupRule' => 'PhutilRemarkupRule',
'PhabricatorImageTransformer' => 'Phobject', 'PhabricatorImageTransformer' => 'Phobject',
'PhabricatorImagemagickSetupCheck' => 'PhabricatorSetupCheck', 'PhabricatorImagemagickSetupCheck' => 'PhabricatorSetupCheck',
'PhabricatorInFlightErrorView' => 'AphrontView', 'PhabricatorInFlightErrorView' => 'AphrontView',
@ -8102,18 +8110,23 @@ phutil_register_library_map(array(
'PhabricatorMentionableInterface', 'PhabricatorMentionableInterface',
'PhabricatorFlaggableInterface', 'PhabricatorFlaggableInterface',
'PhabricatorSpacesInterface', 'PhabricatorSpacesInterface',
'PhabricatorConduitResultInterface',
'PhabricatorNgramsInterface',
), ),
'PhabricatorPhurlURLAccessController' => 'PhabricatorPhurlController', 'PhabricatorPhurlURLAccessController' => 'PhabricatorPhurlController',
'PhabricatorPhurlURLCommentController' => 'PhabricatorPhurlController', 'PhabricatorPhurlURLCommentController' => 'PhabricatorPhurlController',
'PhabricatorPhurlURLCreateCapability' => 'PhabricatorPolicyCapability', 'PhabricatorPhurlURLCreateCapability' => 'PhabricatorPolicyCapability',
'PhabricatorPhurlURLEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod',
'PhabricatorPhurlURLEditController' => 'PhabricatorPhurlController', 'PhabricatorPhurlURLEditController' => 'PhabricatorPhurlController',
'PhabricatorPhurlURLEditEngine' => 'PhabricatorEditEngine', 'PhabricatorPhurlURLEditEngine' => 'PhabricatorEditEngine',
'PhabricatorPhurlURLEditor' => 'PhabricatorApplicationTransactionEditor', 'PhabricatorPhurlURLEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorPhurlURLListController' => 'PhabricatorPhurlController', 'PhabricatorPhurlURLListController' => 'PhabricatorPhurlController',
'PhabricatorPhurlURLMailReceiver' => 'PhabricatorObjectMailReceiver', 'PhabricatorPhurlURLMailReceiver' => 'PhabricatorObjectMailReceiver',
'PhabricatorPhurlURLNameNgrams' => 'PhabricatorSearchNgrams',
'PhabricatorPhurlURLPHIDType' => 'PhabricatorPHIDType', 'PhabricatorPhurlURLPHIDType' => 'PhabricatorPHIDType',
'PhabricatorPhurlURLQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'PhabricatorPhurlURLQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorPhurlURLReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', 'PhabricatorPhurlURLReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'PhabricatorPhurlURLSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod',
'PhabricatorPhurlURLSearchEngine' => 'PhabricatorApplicationSearchEngine', 'PhabricatorPhurlURLSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorPhurlURLTransaction' => 'PhabricatorApplicationTransaction', 'PhabricatorPhurlURLTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorPhurlURLTransactionComment' => 'PhabricatorApplicationTransactionComment', 'PhabricatorPhurlURLTransactionComment' => 'PhabricatorApplicationTransactionComment',
@ -8814,6 +8827,13 @@ phutil_register_library_map(array(
'PhabricatorTokensApplication' => 'PhabricatorApplication', 'PhabricatorTokensApplication' => 'PhabricatorApplication',
'PhabricatorTokensCurtainExtension' => 'PHUICurtainExtension', 'PhabricatorTokensCurtainExtension' => 'PHUICurtainExtension',
'PhabricatorTokensSettingsPanel' => 'PhabricatorSettingsPanel', 'PhabricatorTokensSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorTokensToken' => array(
'PhabricatorTokenDAO',
'PhabricatorDestructibleInterface',
'PhabricatorSubscribableInterface',
'PhabricatorFlaggableInterface',
'PhabricatorConduitResultInterface',
),
'PhabricatorTooltipUIExample' => 'PhabricatorUIExample', 'PhabricatorTooltipUIExample' => 'PhabricatorUIExample',
'PhabricatorTransactionChange' => 'Phobject', 'PhabricatorTransactionChange' => 'Phobject',
'PhabricatorTransactionRemarkupChange' => 'PhabricatorTransactionChange', 'PhabricatorTransactionRemarkupChange' => 'PhabricatorTransactionChange',

View file

@ -21,11 +21,6 @@ final class PhabricatorConduitMethodQuery
return $this; return $this;
} }
public function withApplicationNames(array $application_names) {
$this->applicationNames = $application_names;
return $this;
}
public function withIsStable($is_stable) { public function withIsStable($is_stable) {
$this->isStable = $is_stable; $this->isStable = $is_stable;
return $this; return $this;
@ -86,17 +81,6 @@ final class PhabricatorConduitMethodQuery
} }
} }
if ($this->applicationNames) {
$map = array_fuse($this->applicationNames);
foreach ($methods as $key => $method) {
$needle = $method->getApplicationName();
$needle = phutil_utf8_strtolower($needle);
if (empty($map[$needle])) {
unset($methods[$key]);
}
}
}
if ($this->nameContains) { if ($this->nameContains) {
$needle = phutil_utf8_strtolower($this->nameContains); $needle = phutil_utf8_strtolower($this->nameContains);
foreach ($methods as $key => $method) { foreach ($methods as $key => $method) {

View file

@ -21,11 +21,6 @@ final class PhabricatorConduitSearchEngine
$saved->setParameter('isStable', $request->getStr('isStable')); $saved->setParameter('isStable', $request->getStr('isStable'));
$saved->setParameter('isUnstable', $request->getStr('isUnstable')); $saved->setParameter('isUnstable', $request->getStr('isUnstable'));
$saved->setParameter('isDeprecated', $request->getStr('isDeprecated')); $saved->setParameter('isDeprecated', $request->getStr('isDeprecated'));
$saved->setParameter(
'applicationNames',
$request->getStrList('applicationNames'));
$saved->setParameter('nameContains', $request->getStr('nameContains')); $saved->setParameter('nameContains', $request->getStr('nameContains'));
return $saved; return $saved;
@ -39,11 +34,6 @@ final class PhabricatorConduitSearchEngine
$query->withIsDeprecated($saved->getParameter('isDeprecated')); $query->withIsDeprecated($saved->getParameter('isDeprecated'));
$query->withIsInternal(false); $query->withIsInternal(false);
$names = $saved->getParameter('applicationNames', array());
if ($names) {
$query->withApplicationNames($names);
}
$contains = $saved->getParameter('nameContains'); $contains = $saved->getParameter('nameContains');
if (strlen($contains)) { if (strlen($contains)) {
$query->withNameContains($contains); $query->withNameContains($contains);
@ -63,18 +53,6 @@ final class PhabricatorConduitSearchEngine
->setName('nameContains') ->setName('nameContains')
->setValue($saved->getParameter('nameContains'))); ->setValue($saved->getParameter('nameContains')));
$names = $saved->getParameter('applicationNames', array());
$form
->appendChild(
id(new AphrontFormTextControl())
->setLabel(pht('Applications'))
->setName('applicationNames')
->setValue(implode(', ', $names))
->setCaption(
pht(
'Example: %s',
phutil_tag('tt', array(), 'differential, paste'))));
$is_stable = $saved->getParameter('isStable'); $is_stable = $saved->getParameter('isStable');
$is_unstable = $saved->getParameter('isUnstable'); $is_unstable = $saved->getParameter('isUnstable');
$is_deprecated = $saved->getParameter('isDeprecated'); $is_deprecated = $saved->getParameter('isDeprecated');

View file

@ -78,6 +78,7 @@ final class ConpherenceTransactionRenderer extends Phobject {
->setFullDisplay($full_display); ->setFullDisplay($full_display);
foreach ($transactions as $transaction) { foreach ($transactions as $transaction) {
$collapsed = false;
if ($previous_transaction) { if ($previous_transaction) {
$previous_day = phabricator_format_local_time( $previous_day = phabricator_format_local_time(
$previous_transaction->getDateCreated(), $previous_transaction->getDateCreated(),
@ -87,6 +88,22 @@ final class ConpherenceTransactionRenderer extends Phobject {
$transaction->getDateCreated(), $transaction->getDateCreated(),
$user, $user,
'Ymd'); 'Ymd');
// See if same user / time
$previous_author = $previous_transaction->getAuthorPHID();
$current_author = $transaction->getAuthorPHID();
$previous_time = $previous_transaction->getDateCreated();
$current_time = $transaction->getDateCreated();
$previous_type = $previous_transaction->getTransactionType();
$current_type = $transaction->getTransactionType();
if (($previous_author == $current_author) &&
($previous_type == $current_type)) {
// Group messages within the last x seconds
if (($current_time - $previous_time) < 120) {
$collapsed = true;
}
}
// date marker transaction time! // date marker transaction time!
if ($previous_day != $current_day) { if ($previous_day != $current_day) {
$date_marker_transaction->setDateCreated( $date_marker_transaction->setDateCreated(
@ -97,6 +114,9 @@ final class ConpherenceTransactionRenderer extends Phobject {
} }
$transaction_view = id(clone $transaction_view_template) $transaction_view = id(clone $transaction_view_template)
->setConpherenceTransaction($transaction); ->setConpherenceTransaction($transaction);
if ($collapsed) {
$transaction_view->addClass('conpherence-transaction-collapsed');
}
$rendered_transactions[] = $transaction_view->render(); $rendered_transactions[] = $transaction_view->render();
$previous_transaction = $transaction; $previous_transaction = $transaction;

View file

@ -66,6 +66,12 @@ abstract class ConpherenceController extends PhabricatorController {
$conpherence, $conpherence,
PhabricatorPolicyCapability::CAN_EDIT); PhabricatorPolicyCapability::CAN_EDIT);
$participating = $conpherence->getParticipantIfExists($viewer->getPHID());
$can_join = PhabricatorPolicyFilter::hasCapability(
$viewer,
$conpherence,
PhabricatorPolicyCapability::CAN_JOIN);
$header->addActionItem( $header->addActionItem(
id(new PHUIIconCircleView()) id(new PHUIIconCircleView())
->setHref( ->setHref(
@ -101,6 +107,38 @@ abstract class ConpherenceController extends PhabricatorController {
->setIcon('fa-group') ->setIcon('fa-group')
->setHref('#') ->setHref('#')
->addClass('conpherence-participant-toggle')); ->addClass('conpherence-participant-toggle'));
if ($can_join && !$participating) {
$action = ConpherenceUpdateActions::JOIN_ROOM;
$uri = $this->getApplicationURI('update/'.$conpherence->getID().'/');
$button = phutil_tag(
'button',
array(
'type' => 'SUBMIT',
'class' => 'button green mlr',
),
pht('Join Room'));
$hidden = phutil_tag(
'input',
array(
'type' => 'hidden',
'name' => 'action',
'value' => ConpherenceUpdateActions::JOIN_ROOM,
));
$form = phabricator_form(
$viewer,
array(
'method' => 'POST',
'action' => (string)$uri,
),
array(
$hidden,
$button,
));
$header->addActionItem($form);
}
} }
return $header; return $header;

View file

@ -118,6 +118,11 @@ final class ConpherenceViewController extends
return id(new AphrontAjaxResponse())->setContent($content); return id(new AphrontAjaxResponse())->setContent($content);
} }
$can_join = PhabricatorPolicyFilter::hasCapability(
$user,
$conpherence,
PhabricatorPolicyCapability::CAN_JOIN);
$layout = id(new ConpherenceLayoutView()) $layout = id(new ConpherenceLayoutView())
->setUser($user) ->setUser($user)
->setBaseURI($this->getApplicationURI()) ->setBaseURI($this->getApplicationURI())
@ -128,6 +133,12 @@ final class ConpherenceViewController extends
->setLatestTransactionID($data['latest_transaction_id']) ->setLatestTransactionID($data['latest_transaction_id'])
->setRole('thread'); ->setRole('thread');
$participating = $conpherence->getParticipantIfExists($user->getPHID());
if (!$user->isLoggedIn()) {
$layout->addClass('conpherence-no-pontificate');
}
return $this->newPage() return $this->newPage()
->setTitle($title) ->setTitle($title)
->setPageObjectPHIDs(array($conpherence->getPHID())) ->setPageObjectPHIDs(array($conpherence->getPHID()))
@ -149,30 +160,19 @@ final class ConpherenceViewController extends
$draft = PhabricatorDraft::newFromUserAndKey( $draft = PhabricatorDraft::newFromUserAndKey(
$user, $user,
$conpherence->getPHID()); $conpherence->getPHID());
if ($participating) {
$action = ConpherenceUpdateActions::MESSAGE;
$button_text = pht('Send');
} else if ($user->isLoggedIn()) {
$action = ConpherenceUpdateActions::JOIN_ROOM;
$button_text = pht('Join Room');
} else {
// user not logged in so give them a login button.
$login_href = id(new PhutilURI('/auth/start/'))
->setQueryParam('next', '/'.$conpherence->getMonogram());
return id(new PHUIFormLayoutView())
->addClass('login-to-participate')
->appendChild(
id(new PHUIButtonView())
->setTag('a')
->setText(pht('Login to Participate'))
->setHref((string)$login_href));
}
$update_uri = $this->getApplicationURI('update/'.$conpherence->getID().'/'); $update_uri = $this->getApplicationURI('update/'.$conpherence->getID().'/');
if ($user->isLoggedIn()) {
$this->initBehavior('conpherence-pontificate'); $this->initBehavior('conpherence-pontificate');
if ($participating) {
$action = ConpherenceUpdateActions::MESSAGE;
$status = new PhabricatorNotificationStatusView();
} else {
$action = ConpherenceUpdateActions::JOIN_ROOM;
$status = pht('Sending a message will also join the room.');
}
$form = $form = id(new AphrontFormView())
id(new AphrontFormView())
->setUser($user) ->setUser($user)
->setAction($update_uri) ->setAction($update_uri)
->addSigil('conpherence-pontificate') ->addSigil('conpherence-pontificate')
@ -182,13 +182,34 @@ final class ConpherenceViewController extends
id(new PhabricatorRemarkupControl()) id(new PhabricatorRemarkupControl())
->setUser($user) ->setUser($user)
->setName('text') ->setName('text')
->setValue($draft->getDraft())) ->setValue($draft->getDraft()));
->appendChild(
id(new AphrontFormSubmitControl())
->setValue($button_text))
->render();
return $form; $status_view = phutil_tag(
'div',
array(
'class' => 'conpherence-room-status',
'id' => 'conpherence-room-status',
),
$status);
$view = phutil_tag_div(
'pontificate-container', array($form, $status_view));
return $view;
} else {
// user not logged in so give them a login button.
$login_href = id(new PhutilURI('/auth/start/'))
->setQueryParam('next', '/'.$conpherence->getMonogram());
return id(new PHUIFormLayoutView())
->addClass('login-to-participate')
->appendInstructions(pht('Log in to join this room and participate.'))
->appendChild(
id(new PHUIButtonView())
->setTag('a')
->setText(pht('Login to Participate'))
->setHref((string)$login_href));
}
} }
private function getNeededTransactions( private function getNeededTransactions(

View file

@ -34,14 +34,8 @@ final class ConpherenceReplyHandler extends PhabricatorMailReplyHandler {
$user = $this->getActor(); $user = $this->getActor();
if (!$conpherence->getPHID()) { if (!$conpherence->getPHID()) {
$conpherence $conpherence
->attachParticipants(array()) ->attachParticipants(array());
->attachFilePHIDs(array());
} else { } else {
$edge_type = PhabricatorObjectHasFileEdgeType::EDGECONST;
$file_phids = PhabricatorEdgeQuery::loadDestinationPHIDs(
$conpherence->getPHID(),
$edge_type);
$conpherence->attachFilePHIDs($file_phids);
$participants = id(new ConpherenceParticipant()) $participants = id(new ConpherenceParticipant())
->loadAllWhere('conpherencePHID = %s', $conpherence->getPHID()); ->loadAllWhere('conpherencePHID = %s', $conpherence->getPHID());
$participants = mpull($participants, null, 'getParticipantPHID'); $participants = mpull($participants, null, 'getParticipantPHID');

View file

@ -7,6 +7,7 @@ final class ConpherenceDurableColumnView extends AphrontTagView {
private $selectedConpherence; private $selectedConpherence;
private $transactions; private $transactions;
private $visible; private $visible;
private $minimize;
private $initialLoad = false; private $initialLoad = false;
private $policyObjects; private $policyObjects;
private $quicksandConfig = array(); private $quicksandConfig = array();
@ -59,6 +60,15 @@ final class ConpherenceDurableColumnView extends AphrontTagView {
return $this->visible; return $this->visible;
} }
public function setMinimize($minimize) {
$this->minimize = $minimize;
return $this;
}
public function getMinimize() {
return $this->minimize;
}
public function setInitialLoad($bool) { public function setInitialLoad($bool) {
$this->initialLoad = $bool; $this->initialLoad = $bool;
return $this; return $this;
@ -109,12 +119,15 @@ final class ConpherenceDurableColumnView extends AphrontTagView {
protected function getTagContent() { protected function getTagContent() {
$column_key = PhabricatorConpherenceColumnVisibleSetting::SETTINGKEY; $column_key = PhabricatorConpherenceColumnVisibleSetting::SETTINGKEY;
$minimize_key = PhabricatorConpherenceColumnMinimizeSetting::SETTINGKEY;
Javelin::initBehavior( Javelin::initBehavior(
'durable-column', 'durable-column',
array( array(
'visible' => $this->getVisible(), 'visible' => $this->getVisible(),
'settingsURI' => '/settings/adjust/?key='.$column_key, 'minimize' => $this->getMinimize(),
'visibleURI' => '/settings/adjust/?key='.$column_key,
'minimizeURI' => '/settings/adjust/?key='.$minimize_key,
'quicksandConfig' => $this->getQuicksandConfig(), 'quicksandConfig' => $this->getQuicksandConfig(),
)); ));
@ -125,19 +138,13 @@ final class ConpherenceDurableColumnView extends AphrontTagView {
$classes = array(); $classes = array();
$classes[] = 'conpherence-durable-column-header'; $classes[] = 'conpherence-durable-column-header';
$classes[] = 'phabricator-main-menu-background'; $classes[] = 'grouped';
$loading_mask = phutil_tag(
'div',
array(
'class' => 'loading-mask',
),
'');
$header = phutil_tag( $header = phutil_tag(
'div', 'div',
array( array(
'class' => implode(' ', $classes), 'class' => implode(' ', $classes),
'data-sigil' => 'conpherence-minimize-window',
), ),
$this->buildHeader()); $this->buildHeader());
@ -175,23 +182,7 @@ final class ConpherenceDurableColumnView extends AphrontTagView {
$input = $this->buildTextInput(); $input = $this->buildTextInput();
$footer = phutil_tag(
'div',
array(
'class' => 'conpherence-durable-column-footer',
),
array(
$this->buildSendButton(),
phutil_tag(
'div',
array(
'class' => 'conpherence-durable-column-status',
),
$this->buildStatusText()),
));
return array( return array(
$loading_mask,
$header, $header,
javelin_tag( javelin_tag(
'div', 'div',
@ -203,7 +194,6 @@ final class ConpherenceDurableColumnView extends AphrontTagView {
$icon_bar, $icon_bar,
$content, $content,
$input, $input,
$footer,
)), )),
); );
} }
@ -253,7 +243,7 @@ final class ConpherenceDurableColumnView extends AphrontTagView {
'threadID' => $conpherence->getID(), 'threadID' => $conpherence->getID(),
'threadTitle' => hsprintf('%s', $thread_title), 'threadTitle' => hsprintf('%s', $thread_title),
'tip' => $data['title'], 'tip' => $data['title'],
'align' => 'S', 'align' => 'W',
), ),
), ),
phutil_tag( phutil_tag(
@ -263,26 +253,10 @@ final class ConpherenceDurableColumnView extends AphrontTagView {
), ),
'')); ''));
} }
$icons[] = $this->buildSearchButton();
return $icons; return $icons;
} }
private function buildSearchButton() {
return phutil_tag(
'div',
array(
'class' => 'conpherence-durable-column-search-button',
),
id(new PHUIButtonBarView())
->addButton(
id(new PHUIButtonView())
->setTag('a')
->setHref('/conpherence/search/')
->setColor(PHUIButtonView::GREY)
->setIcon('fa-search')));
}
private function buildHeader() { private function buildHeader() {
$conpherence = $this->getSelectedConpherence(); $conpherence = $this->getSelectedConpherence();
@ -324,18 +298,30 @@ final class ConpherenceDurableColumnView extends AphrontTagView {
'containerDivID' => 'conpherence-durable-column', 'containerDivID' => 'conpherence-durable-column',
)); ));
$item = id(new PHUIListItemView()) $bars = id(new PHUIListItemView())
->setName(pht('Room Actions')) ->setName(pht('Room Actions'))
->setIcon('fa-bars') ->setIcon('fa-gear')
->addClass('core-menu-item') ->addClass('core-menu-item')
->addClass('conpherence-settings-icon')
->addSigil('conpherence-settings-menu') ->addSigil('conpherence-settings-menu')
->setID($bubble_id) ->setID($bubble_id)
->setHref('#') ->setHref('#')
->setAural(pht('Room Actions')) ->setAural(pht('Room Actions'))
->setOrder(400);
$minimize = id(new PHUIListItemView())
->setName(pht('Minimize Window'))
->setIcon('fa-toggle-down')
->addClass('core-menu-item')
->addClass('conpherence-minimize-icon')
->addSigil('conpherence-minimize-window')
->setHref('#')
->setAural(pht('Minimize Window'))
->setOrder(300); ->setOrder(300);
$settings_button = id(new PHUIListView()) $settings_button = id(new PHUIListView())
->addMenuItem($item) ->addMenuItem($bars)
->addClass('phabricator-dark-menu') ->addMenuItem($minimize)
->addClass('phabricator-application-menu'); ->addClass('phabricator-application-menu');
$header = null; $header = null;
@ -354,7 +340,7 @@ final class ConpherenceDurableColumnView extends AphrontTagView {
phutil_tag( phutil_tag(
'div', 'div',
array( array(
'class' => 'conpherence-durable-column-header', 'class' => 'conpherence-durable-column-header-inner',
), ),
array( array(
javelin_tag( javelin_tag(
@ -401,7 +387,7 @@ final class ConpherenceDurableColumnView extends AphrontTagView {
} }
$actions[] = array( $actions[] = array(
'name' => pht('Hide Column'), 'name' => pht('Hide Window'),
'disabled' => false, 'disabled' => false,
'href' => '#', 'href' => '#',
'icon' => 'fa-times', 'icon' => 'fa-times',

View file

@ -1,6 +1,6 @@
<?php <?php
final class ConpherenceLayoutView extends AphrontView { final class ConpherenceLayoutView extends AphrontTagView {
private $thread; private $thread;
private $baseURI; private $baseURI;
@ -61,13 +61,27 @@ final class ConpherenceLayoutView extends AphrontView {
return (bool)$user->getUserSetting($widget_key, false); return (bool)$user->getUserSetting($widget_key, false);
} }
public function render() { protected function getTagAttributes() {
$classes = array();
if (!$this->getWidgetColumnVisible()) {
$classes[] = 'hide-widgets';
}
return array(
'id' => 'conpherence-main-layout',
'sigil' => 'conpherence-layout',
'class' => 'conpherence-layout '.
implode(' ', $classes).
' conpherence-role-'.$this->role,
);
}
protected function getTagContent() {
require_celerity_resource('conpherence-menu-css'); require_celerity_resource('conpherence-menu-css');
require_celerity_resource('conpherence-message-pane-css'); require_celerity_resource('conpherence-message-pane-css');
require_celerity_resource('conpherence-participant-pane-css'); require_celerity_resource('conpherence-participant-pane-css');
$layout_id = 'conpherence-main-layout';
$selected_id = null; $selected_id = null;
$selected_thread_id = null; $selected_thread_id = null;
$selected_thread_phid = null; $selected_thread_phid = null;
@ -87,7 +101,7 @@ final class ConpherenceLayoutView extends AphrontView {
$this->initBehavior('conpherence-menu', $this->initBehavior('conpherence-menu',
array( array(
'baseURI' => $this->baseURI, 'baseURI' => $this->baseURI,
'layoutID' => $layout_id, 'layoutID' => 'conpherence-main-layout',
'selectedID' => $selected_id, 'selectedID' => $selected_id,
'selectedThreadID' => $selected_thread_id, 'selectedThreadID' => $selected_thread_id,
'selectedThreadPHID' => $selected_thread_phid, 'selectedThreadPHID' => $selected_thread_phid,
@ -99,26 +113,9 @@ final class ConpherenceLayoutView extends AphrontView {
'hasWidgets' => false, 'hasWidgets' => false,
)); ));
$classes = array();
if (!$this->getUser()->isLoggedIn()) {
$classes[] = 'conpherence-logged-out';
}
if (!$this->getWidgetColumnVisible()) {
$classes[] = 'hide-widgets';
}
$this->initBehavior('conpherence-participant-pane'); $this->initBehavior('conpherence-participant-pane');
return javelin_tag( return
'div',
array(
'id' => $layout_id,
'sigil' => 'conpherence-layout',
'class' => 'conpherence-layout '.
implode(' ', $classes).
' conpherence-role-'.$this->role,
),
array( array(
javelin_tag( javelin_tag(
'div', 'div',
@ -202,7 +199,7 @@ final class ConpherenceLayoutView extends AphrontView {
nonempty($this->replyForm, '')), nonempty($this->replyForm, '')),
)), )),
)), )),
)); );
} }
private function buildNUXView() { private function buildNUXView() {

View file

@ -201,7 +201,6 @@ final class ConpherenceTransactionView extends AphrontView {
private function renderTransactionImage() { private function renderTransactionImage() {
$image = null; $image = null;
if ($this->getFullDisplay()) {
$transaction = $this->getConpherenceTransaction(); $transaction = $this->getConpherenceTransaction();
switch ($transaction->getTransactionType()) { switch ($transaction->getTransactionType()) {
case PhabricatorTransactions::TYPE_COMMENT: case PhabricatorTransactions::TYPE_COMMENT:
@ -216,7 +215,6 @@ final class ConpherenceTransactionView extends AphrontView {
)); ));
break; break;
} }
}
return $image; return $image;
} }

View file

@ -37,6 +37,7 @@ final class PhabricatorFilesApplication extends PhabricatorApplication {
public function getRemarkupRules() { public function getRemarkupRules() {
return array( return array(
new PhabricatorEmbedFileRemarkupRule(), new PhabricatorEmbedFileRemarkupRule(),
new PhabricatorImageRemarkupRule(),
); );
} }

View file

@ -99,7 +99,7 @@ final class PhabricatorFileImageProxyController
->setViewer(PhabricatorUser::getOmnipotentUser()) ->setViewer(PhabricatorUser::getOmnipotentUser())
->withPHIDs(array($request->getFilePHID())) ->withPHIDs(array($request->getFilePHID()))
->executeOne(); ->executeOne();
if (!file) { if (!$file) {
throw new Exception(pht( throw new Exception(pht(
'The underlying file does not exist, but the cached request was '. 'The underlying file does not exist, but the cached request was '.
'successful. This likely means the file record was manually deleted '. 'successful. This likely means the file record was manually deleted '.

View file

@ -285,6 +285,10 @@ final class PhabricatorFileInfoController extends PhabricatorFileController {
pht('Engine'), pht('Engine'),
$file->getStorageEngine()); $file->getStorageEngine());
$engine = $this->loadStorageEngine($file);
if ($engine && $engine->isChunkEngine()) {
$format_name = pht('Chunks');
} else {
$format_key = $file->getStorageFormat(); $format_key = $file->getStorageFormat();
$format = PhabricatorFileStorageFormat::getFormat($format_key); $format = PhabricatorFileStorageFormat::getFormat($format_key);
if ($format) { if ($format) {
@ -292,6 +296,7 @@ final class PhabricatorFileInfoController extends PhabricatorFileController {
} else { } else {
$format_name = pht('Unknown ("%s")', $format_key); $format_name = pht('Unknown ("%s")', $format_key);
} }
}
$storage_properties->addProperty(pht('Format'), $format_name); $storage_properties->addProperty(pht('Format'), $format_name);
$storage_properties->addProperty( $storage_properties->addProperty(
@ -369,13 +374,7 @@ final class PhabricatorFileInfoController extends PhabricatorFileController {
$box->addPropertyList($media); $box->addPropertyList($media);
} }
$engine = null; $engine = $this->loadStorageEngine($file);
try {
$engine = $file->instantiateStorageEngine();
} catch (Exception $ex) {
// Don't bother raising this anywhere for now.
}
if ($engine) { if ($engine) {
if ($engine->isChunkEngine()) { if ($engine->isChunkEngine()) {
$chunkinfo = new PHUIPropertyListView(); $chunkinfo = new PHUIPropertyListView();
@ -436,4 +435,17 @@ final class PhabricatorFileInfoController extends PhabricatorFileController {
} }
private function loadStorageEngine(PhabricatorFile $file) {
$engine = null;
try {
$engine = $file->instantiateStorageEngine();
} catch (Exception $ex) {
// Don't bother raising this anywhere for now.
}
return $engine;
}
} }

View file

@ -0,0 +1,75 @@
<?php
final class PhabricatorImageRemarkupRule extends PhutilRemarkupRule {
public function getPriority() {
return 200.0;
}
public function apply($text) {
return preg_replace_callback(
'@{(image|img) ((?:[^}\\\\]+|\\\\.)*)}@m',
array($this, 'markupImage'),
$text);
}
public function markupImage(array $matches) {
if (!$this->isFlatText($matches[0])) {
return $matches[0];
}
$args = array();
$defaults = array(
'uri' => null,
'alt' => null,
'href' => null,
'width' => null,
'height' => null,
);
$trimmed_match = trim($matches[2]);
if ($this->isURI($trimmed_match)) {
$args['uri'] = new PhutilURI($trimmed_match);
} else {
$parser = new PhutilSimpleOptions();
$keys = $parser->parse($trimmed_match);
$uri_key = '';
foreach (array('src', 'uri', 'url') as $key) {
if (array_key_exists($key, $keys)) {
$uri_key = $key;
}
}
if ($uri_key) {
$args['uri'] = new PhutilURI($keys[$uri_key]);
}
$args += $keys;
}
$args += $defaults;
if ($args['href'] && !PhabricatorEnv::isValidURIForLink($args['href'])) {
$args['href'] = null;
}
if ($args['uri']) {
$src_uri = id(new PhutilURI('/file/imageproxy/'))
->setQueryParam('uri', (string)$args['uri']);
$img = $this->newTag(
'img',
array(
'src' => $src_uri,
'alt' => $args['alt'],
'href' => $args['href'],
'width' => $args['width'],
'height' => $args['height'],
));
return $this->getEngine()->storeText($img);
} else {
return $matches[0];
}
}
private function isURI($uri_string) {
// Very simple check to make sure it starts with either http or https.
// If it does, we'll try to treat it like a valid URI
return preg_match('~^https?\:\/\/.*\z~i', $uri_string);
}
}

View file

@ -23,4 +23,13 @@ final class PhabricatorNotificationStatusView extends AphrontTagView {
); );
} }
protected function getTagContent() {
$have = PhabricatorEnv::getEnvConfig('notification.servers');
if ($have) {
return pht('Connecting...');
} else {
return pht('Notification server not enabled');
}
}
} }

View file

@ -293,6 +293,7 @@ final class PhabricatorPeopleProfileViewController
->setHeader($badge->getName()) ->setHeader($badge->getName())
->setSubhead($badge->getFlavor()) ->setSubhead($badge->getFlavor())
->setQuality($badge->getQuality()) ->setQuality($badge->getQuality())
->setHref($badge->getViewURI())
->addByLine($awarder_info); ->addByLine($awarder_info);
$flex->addItem($item); $flex->addItem($item);

View file

@ -33,7 +33,6 @@ final class PhabricatorUserLogView extends AphrontView {
$rows = array(); $rows = array();
foreach ($logs as $log) { foreach ($logs as $log) {
$ip = $log->getRemoteAddr(); $ip = $log->getRemoteAddr();
$session = substr($log->getSession(), 0, 6); $session = substr($log->getSession(), 0, 6);
@ -62,7 +61,7 @@ final class PhabricatorUserLogView extends AphrontView {
$log->getActorPHID() $log->getActorPHID()
? $handles[$log->getActorPHID()]->getName() ? $handles[$log->getActorPHID()]->getName()
: null, : null,
$handles[$log->getUserPHID()]->getName(), $username = $handles[$log->getUserPHID()]->renderLink(),
$ip, $ip,
$session, $session,
); );

View file

@ -0,0 +1,18 @@
<?php
final class PhabricatorPhurlURLEditConduitAPIMethod
extends PhabricatorEditEngineAPIMethod {
public function getAPIMethodName() {
return 'phurls.edit';
}
public function newEditEngine() {
return new PhabricatorPhurlURLEditEngine();
}
public function getMethodSummary() {
return pht(
'Apply transactions to create a new Phurl URL or edit an existing one.');
}
}

View file

@ -0,0 +1,18 @@
<?php
final class PhabricatorPhurlURLSearchConduitAPIMethod
extends PhabricatorSearchEngineAPIMethod {
public function getAPIMethodName() {
return 'phurls.search';
}
public function newSearchEngine() {
return new PhabricatorPhurlURLSearchEngine();
}
public function getMethodSummary() {
return pht('Read information about Phurl URLS.');
}
}

View file

@ -29,6 +29,12 @@ final class PhabricatorPhurlURLQuery
return $this; return $this;
} }
public function withNameNgrams($ngrams) {
return $this->withNgramsConstraint(
id(new PhabricatorPhurlURLNameNgrams()),
$ngrams);
}
public function withLongURLs(array $long_urls) { public function withLongURLs(array $long_urls) {
$this->longURLs = $long_urls; $this->longURLs = $long_urls;
return $this; return $this;

View file

@ -25,6 +25,19 @@ final class PhabricatorPhurlURLSearchEngine
->setLabel(pht('Created By')) ->setLabel(pht('Created By'))
->setKey('authorPHIDs') ->setKey('authorPHIDs')
->setDatasource(new PhabricatorPeopleUserFunctionDatasource()), ->setDatasource(new PhabricatorPeopleUserFunctionDatasource()),
id(new PhabricatorSearchTextField())
->setLabel(pht('Name Contains'))
->setKey('name')
->setDescription(pht('Search for Phurl URLs by name substring.')),
id(new PhabricatorSearchStringListField())
->setLabel(pht('Aliases'))
->setKey('aliases')
->setDescription(pht('Search for Phurl URLs by alias.')),
id(new PhabricatorSearchStringListField())
->setLabel(pht('Long URLs'))
->setKey('longurls')
->setDescription(
pht('Search for Phurl URLs by the non-shortened URL.')),
); );
} }
@ -35,6 +48,18 @@ final class PhabricatorPhurlURLSearchEngine
$query->withAuthorPHIDs($map['authorPHIDs']); $query->withAuthorPHIDs($map['authorPHIDs']);
} }
if ($map['name'] !== null) {
$query->withNameNgrams($map['name']);
}
if ($map['aliases']) {
$query->withAliases($map['aliases']);
}
if ($map['longurls']) {
$query->withLongURLs($map['longurls']);
}
return $query; return $query;
} }

View file

@ -9,7 +9,9 @@ final class PhabricatorPhurlURL extends PhabricatorPhurlDAO
PhabricatorDestructibleInterface, PhabricatorDestructibleInterface,
PhabricatorMentionableInterface, PhabricatorMentionableInterface,
PhabricatorFlaggableInterface, PhabricatorFlaggableInterface,
PhabricatorSpacesInterface { PhabricatorSpacesInterface,
PhabricatorConduitResultInterface,
PhabricatorNgramsInterface {
protected $name; protected $name;
protected $alias; protected $alias;
@ -103,12 +105,12 @@ final class PhabricatorPhurlURL extends PhabricatorPhurlDAO
} else { } else {
$path = '/u/'.$this->getID(); $path = '/u/'.$this->getID();
} }
$short_domain = PhabricatorEnv::getEnvConfig('phurl.short-uri'); $domain = PhabricatorEnv::getEnvConfig('phurl.short-uri');
if (!$short_domain) { if (!$domain) {
return $path; $domain = PhabricatorEnv::getEnvConfig('phabricator.base-uri');
} }
$uri = new PhutilURI($short_domain); $uri = new PhutilURI($domain);
$uri->setPath($path); $uri->setPath($path);
return (string)$uri; return (string)$uri;
} }
@ -202,4 +204,55 @@ final class PhabricatorPhurlURL extends PhabricatorPhurlDAO
public function getSpacePHID() { public function getSpacePHID() {
return $this->spacePHID; return $this->spacePHID;
} }
/* -( PhabricatorConduitResultInterface )---------------------------------- */
public function getFieldSpecificationsForConduit() {
return array(
id(new PhabricatorConduitSearchFieldSpecification())
->setKey('name')
->setType('string')
->setDescription(pht('URL name.')),
id(new PhabricatorConduitSearchFieldSpecification())
->setKey('alias')
->setType('string')
->setDescription(pht('The alias for the URL.')),
id(new PhabricatorConduitSearchFieldSpecification())
->setKey('longurl')
->setType('string')
->setDescription(pht('The pre-shortened URL.')),
id(new PhabricatorConduitSearchFieldSpecification())
->setKey('description')
->setType('string')
->setDescription(pht('A description of the URL.')),
);
}
public function getFieldValuesForConduit() {
return array(
'name' => $this->getName(),
'alias' => $this->getAlias(),
'description' => $this->getDescription(),
'urls' => array(
'long' => $this->getLongURL(),
'short' => $this->getRedirectURI(),
),
);
}
public function getConduitSearchAttachments() {
return array();
}
/* -( PhabricatorNgramInterface )------------------------------------------ */
public function newNgrams() {
return array(
id(new PhabricatorPhurlURLNameNgrams())
->setValue($this->getName()),
);
}
} }

View file

@ -0,0 +1,18 @@
<?php
final class PhabricatorPhurlURLNameNgrams
extends PhabricatorSearchNgrams {
public function getNgramKey() {
return 'phurlname';
}
public function getColumnName() {
return 'name';
}
public function getApplicationName() {
return 'phurl';
}
}

View file

@ -320,6 +320,7 @@ final class PhabricatorApplicationSearchController
$crumbs->addTextCrumb($title); $crumbs->addTextCrumb($title);
} }
$nav->addClass('application-search-view');
require_celerity_resource('application-search-view-css'); require_celerity_resource('application-search-view-css');
return $this->newPage() return $this->newPage()
@ -327,8 +328,7 @@ final class PhabricatorApplicationSearchController
->setTitle(pht('Query: %s', $title)) ->setTitle(pht('Query: %s', $title))
->setCrumbs($crumbs) ->setCrumbs($crumbs)
->setNavigation($nav) ->setNavigation($nav)
->appendChild($body) ->appendChild($body);
->addClass('application-search-view');
} }
private function processEditRequest() { private function processEditRequest() {
@ -419,6 +419,7 @@ final class PhabricatorApplicationSearchController
->setObjectList($list) ->setObjectList($list)
->addClass('application-search-results'); ->addClass('application-search-results');
$nav->addClass('application-search-view');
require_celerity_resource('application-search-view-css'); require_celerity_resource('application-search-view-css');
return $this->newPage() return $this->newPage()
@ -426,7 +427,6 @@ final class PhabricatorApplicationSearchController
->setTitle(pht('Saved Queries')) ->setTitle(pht('Saved Queries'))
->setCrumbs($crumbs) ->setCrumbs($crumbs)
->setNavigation($nav) ->setNavigation($nav)
->addClass('application-search-view')
->appendChild($box); ->appendChild($box);
} }

View file

@ -0,0 +1,12 @@
<?php
final class PhabricatorConpherenceColumnMinimizeSetting
extends PhabricatorInternalSetting {
const SETTINGKEY = 'conpherence-minimize-column';
public function getSettingName() {
return pht('Conpherence Column Minimize');
}
}

View file

@ -0,0 +1,157 @@
<?php
final class PhabricatorTokensToken extends PhabricatorTokenDAO
implements
PhabricatorDestructibleInterface,
PhabricatorSubscribableInterface,
PhabricatorFlaggableInterface,
PhabricatorConduitResultInterface {
protected $name;
protected $flavor;
protected $status;
protected $creatorPHID;
protected $tokenImagePHID;
protected $builtinKey;
const STATUS_ACTIVE = 'active';
const STATUS_ARCHIVED = 'archived';
protected function getConfiguration() {
return array(
self::CONFIG_AUX_PHID => true,
self::CONFIG_COLUMN_SCHEMA => array(
'name' => 'text64',
'flavor' => 'text128',
'status' => 'text32',
'tokenImagePHID' => 'phid?',
'builtinKey' => 'text32?',
),
self::CONFIG_KEY_SCHEMA => array(
'key_creator' => array(
'columns' => array('creatorPHID', 'dateModified'),
),
'key_builtin' => array(
'columns' => array('builtinKey'),
'unique' => true,
),
),
) + parent::getConfiguration();
}
public function getTableName() {
return 'token_token';
}
public function generatePHID() {
return PhabricatorPHID::generateNewPHID(
PhabricatorTokenTokenPHIDType::TYPECONST);
}
public static function initializeNewToken(PhabricatorUser $actor) {
$app = id(new PhabricatorApplicationQuery())
->setViewer($actor)
->withClasses(array('PhabricatorTokensApplication'))
->executeOne();
$token = id(new self())
->setCreatorPHID($actor->getPHID())
->setStatus(self::STATUS_ACTIVE)
->setTokenImagePHID('');
return $token;
}
public function isArchived() {
return ($this->getStatus() == self::STATUS_ARCHIVED);
}
public static function getStatusNameMap() {
return array(
self::STATUS_ACTIVE => pht('Active'),
self::STATUS_ARCHIVED => pht('Archived'),
);
}
public function getTokenImageURI() {
return $this->getTokenImageFile()->getBestURI();
}
public function attachTokenImageFile(PhabricatorFile $file) {
$this->tokenImageFile = $file;
return $this;
}
public function getTokenImageFile() {
return $this->assertAttached($this->tokenImageFile);
}
public function getViewURI() {
return '/tokens/view/'.$this->getID().'/';
}
/* -( PhabricatorDestructibleInterface )----------------------------------- */
public function destroyObjectPermanently(
PhabricatorDestructionEngine $engine) {
$this->openTransaction();
$tokens = id(new PhabricatorTokenGiven())
->loadAllWhere('tokenPHID = %s', $this->getPHID());
foreach ($tokens as $token) {
$token->delete();
}
if ($this->getTokenImagePHID()) {
id(new PhabricatorFile())
->loadOneWhere('filePHID = %s', $this->getTokenImagePHID())
->delete();
}
$this->delete();
$this->saveTransaction();
}
/* -( PhabricatorSubscribableInterface Implementation )-------------------- */
public function isAutomaticallySubscribed($phid) {
return false;
}
/* -( PhabricatorConduitResultInterface )---------------------------------- */
public function getFieldSpecificationsForConduit() {
return array(
id(new PhabricatorConduitSearchFieldSpecification())
->setKey('name')
->setType('string')
->setDescription(pht('The name of the token.')),
id(new PhabricatorConduitSearchFieldSpecification())
->setKey('flavor')
->setType('string')
->setDescription(pht('Token flavor.')),
id(new PhabricatorConduitSearchFieldSpecification())
->setKey('status')
->setType('string')
->setDescription(pht('Archived or active status.')),
);
}
public function getFieldValuesForConduit() {
return array(
'name' => $this->getName(),
'flavor' => $this->getFlavor(),
'status' => $this->getStatus(),
);
}
public function getConduitSearchAttachments() {
return array();
}
}

View file

@ -9,11 +9,11 @@ final class AphrontFormView extends AphrontView {
private $encType; private $encType;
private $workflow; private $workflow;
private $id; private $id;
private $shaded = false;
private $sigils = array(); private $sigils = array();
private $metadata; private $metadata;
private $controls = array(); private $controls = array();
private $fullWidth = false; private $fullWidth = false;
private $classes = array();
public function setMetadata($metadata) { public function setMetadata($metadata) {
$this->metadata = $metadata; $this->metadata = $metadata;
@ -44,11 +44,6 @@ final class AphrontFormView extends AphrontView {
return $this; return $this;
} }
public function setShaded($shaded) {
$this->shaded = $shaded;
return $this;
}
public function addHiddenInput($key, $value) { public function addHiddenInput($key, $value) {
$this->data[$key] = $value; $this->data[$key] = $value;
return $this; return $this;
@ -64,6 +59,11 @@ final class AphrontFormView extends AphrontView {
return $this; return $this;
} }
public function addClass($class) {
$this->classes[] = $class;
return $this;
}
public function setFullWidth($full_width) { public function setFullWidth($full_width) {
$this->fullWidth = $full_width; $this->fullWidth = $full_width;
return $this; return $this;
@ -149,7 +149,7 @@ final class AphrontFormView extends AphrontView {
return phabricator_form( return phabricator_form(
$this->getViewer(), $this->getViewer(),
array( array(
'class' => $this->shaded ? 'phui-form-shaded' : null, 'class' => implode(' ', $this->classes),
'action' => $this->action, 'action' => $this->action,
'method' => $this->method, 'method' => $this->method,
'enctype' => $this->encType, 'enctype' => $this->encType,

View file

@ -203,6 +203,10 @@ final class PhabricatorRemarkupControl extends AphrontFormTextAreaControl {
$classes[] = 'remarkup-assist-button'; $classes[] = 'remarkup-assist-button';
} }
if ($action == 'fa-cloud-upload') {
$classes[] = 'remarkup-assist-upload';
}
$href = idx($spec, 'href', '#'); $href = idx($spec, 'href', '#');
if ($href == '#') { if ($href == '#') {
$meta = array('action' => $action); $meta = array('action' => $action);

View file

@ -136,6 +136,11 @@ final class PhabricatorStandardPageView extends PhabricatorBarePageView
return (bool)$this->getUserPreference($column_key, false); return (bool)$this->getUserPreference($column_key, false);
} }
public function getDurableColumnMinimize() {
$column_key = PhabricatorConpherenceColumnMinimizeSetting::SETTINGKEY;
return (bool)$this->getUserPreference($column_key, false);
}
public function addQuicksandConfig(array $config) { public function addQuicksandConfig(array $config) {
$this->quicksandConfig = $config + $this->quicksandConfig; $this->quicksandConfig = $config + $this->quicksandConfig;
return $this; return $this;
@ -480,12 +485,17 @@ final class PhabricatorStandardPageView extends PhabricatorBarePageView
$durable_column = null; $durable_column = null;
if ($this->getShowDurableColumn()) { if ($this->getShowDurableColumn()) {
$is_visible = $this->getDurableColumnVisible(); $is_visible = $this->getDurableColumnVisible();
$is_minimize = $this->getDurableColumnMinimize();
$durable_column = id(new ConpherenceDurableColumnView()) $durable_column = id(new ConpherenceDurableColumnView())
->setSelectedConpherence(null) ->setSelectedConpherence(null)
->setUser($user) ->setUser($user)
->setQuicksandConfig($this->buildQuicksandConfig()) ->setQuicksandConfig($this->buildQuicksandConfig())
->setVisible($is_visible) ->setVisible($is_visible)
->setMinimize($is_minimize)
->setInitialLoad(true); ->setInitialLoad(true);
if ($is_minimize) {
$this->classes[] = 'minimize-column';
}
} }
Javelin::initBehavior('quicksand-blacklist', array( Javelin::initBehavior('quicksand-blacklist', array(

View file

@ -182,39 +182,3 @@
margin: 0 0 16px; margin: 0 0 16px;
} }
} }
/* Make Dashboards with Durable reasonably display on homepage narrow widths */
@media (max-width: 1300px) {
.device-desktop.with-durable-column .dashboard-view
.aphront-multi-column-inner {
display: block;
width: auto;
}
.device-desktop.with-durable-column .dashboard-view
.aphront-multi-column-column-outer {
display: block;
border: none;
}
.device-desktop.with-durable-column .dashboard-view
.aphront-multi-column-column.mlr {
margin: 0;
}
.device-desktop.with-durable-column .dashboard-view
.aphront-multi-column-fluid .aphront-multi-column-2-up
.aphront-multi-column-column-outer.half {
width: auto;
margin: 0 0 16px;
}
.device-desktop.with-durable-column .dashboard-view
.aphront-multi-column-fluid .aphront-multi-column-2-up
.aphront-multi-column-column-outer.thirds {
width: auto;
margin: 0 0 16px;
}
.device-desktop.with-durable-column .dashboard-view
.aphront-multi-column-fluid .aphront-multi-column-2-up
.aphront-multi-column-column-outer.third {
width: auto;
margin: 0 0 16px;
}
}

View file

@ -29,6 +29,10 @@ body.white-background {
color: {$greytext}; color: {$greytext};
} }
.with-durable-column .phabricator-standard-page-footer {
margin: 36px 16px 28px;
}
.device .phabricator-standard-page-footer { .device .phabricator-standard-page-footer {
margin: 24px 8px 16px; margin: 24px 8px 16px;
} }

View file

@ -2,63 +2,34 @@
* @provides conpherence-durable-column-view * @provides conpherence-durable-column-view
*/ */
.with-durable-column .phabricator-standard-page-body {
margin-right: 300px;
}
.with-durable-margin .phabricator-standard-page-body {
margin-right: 312px;
}
.with-durable-column .phabricator-main-menu {
padding-right: 304px;
}
.with-durable-margin .phabricator-main-menu {
padding-right: 316px;
}
.with-durable-column
.phabricator-global-upload-instructions {
font-size: 28px;
width: 50%;
}
.global-upload-mask { .global-upload-mask {
pointer-events: none; pointer-events: none;
} }
.with-durable-column .global-upload-mask {
right: 300px;
}
.with-durable-margin .global-upload-mask {
right: 312px;
}
.conpherence-durable-column { .conpherence-durable-column {
position: fixed; position: fixed;
top: 0;
bottom: 0; bottom: 0;
right: 0; right: 16px;
width: 300px; width: 400px;
height: 360px;
background: #fff; background: #fff;
border-top-right-radius: 3px;
border-top-left-radius: 3px;
box-shadow: 0px 1px 8px rgba(55,55,55, .3);
} }
.with-durable-margin .conpherence-durable-column { .device .conpherence-durable-column {
border-right: 12px solid {$lightgreybackground};
}
.conpherence-durable-column .loading-mask {
position: absolute;
top: 90px;
bottom: 0;
right: 1px;
width: 298px;
background: #fff;
display: none; display: none;
opacity: .6; }
z-index: 2;
.conpherence-durable-column .conpherence-transaction-image {
float: left;
border-radius: 3px;
height: 24px;
width: 24px;
background-size: 24px;
position: absolute;
top: 5px;
} }
.device-desktop .conpherence-durable-column.loading .loading-mask { .device-desktop .conpherence-durable-column.loading .loading-mask {
@ -69,129 +40,117 @@
z-index: 1; z-index: 1;
} }
.conpherence-durable-column-header .phabricator-application-menu { .conpherence-durable-column-header .phabricator-application-menu
display: block; .phui-list-item-name {
float: right;
padding-right: 4px;
width: 36px;
}
.conpherence-durable-column-header
.phabricator-application-menu .phui-list-item-view.core-menu-item {
display: block;
}
.conpherence-durable-column-header
.phabricator-application-menu .phui-list-item-name {
display: none; display: none;
} }
.conpherence-durable-column-header
.phabricator-application-menu .phui-list-item-view { .conpherence-durable-column-header .phabricator-application-menu
float: left; .phui-list-item-view {
position: relative; margin: 0;
width: 36px; width: 28px;
height: 36px; height: 34px;
margin-top: 4px; min-width: 28px;
} }
.conpherence-durable-column-header
.phabricator-application-menu .phui-list-item-href { .conpherence-durable-column-header .phabricator-application-menu
.phui-list-item-href {
background: transparent; background: transparent;
border: none; border: none;
padding: 0; padding: 0;
} }
.conpherence-durable-column-header
.phabricator-dark-menu .phui-list-item-type-link {
background: transparent;
}
.conpherence-durable-column-header
.phabricator-application-menu
.phui-list-item-view.core-menu-item {
display: block;
}
.conpherence-durable-column-header { .conpherence-durable-column-header {
border-left: 1px solid rgba({$alphablack},.1); border-top-right-radius: 3px;
border-right: 1px solid rgba({$alphablack},.1); border-top-left-radius: 3px;
background-color: #525867;
}
.conpherence-durable-column-header:hover {
cursor: pointer;
background-color: #5f6572;
}
.conpherence-durable-column-header .phabricator-application-menu {
margin-right: 8px;
}
.conpherence-durable-column-header
.phabricator-main-menu-dropdown.phui-list-sidenav {
top: 30px;
} }
.conpherence-durable-column-header-text { .conpherence-durable-column-header-text {
float: left; float: left;
padding: 13px 0 12px 12px; padding: 8px 0 8px 10px;
font-size: 15px; color: #fff;
color: {$hoverwhite}; width: 260px;
width: 230px;
text-overflow: ellipsis; text-overflow: ellipsis;
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
text-shadow: 1px 1px 0 rgba(0,0,0,.6);
}
.conpherence-durable-column-header .phabricator-application-menu
.phui-list-item-icon.phui-font-fa {
font-size: 15px;
margin: 0;
height: 15px;
width: 15px;
padding: 10px 8px 10px 8px;
} }
.conpherence-durable-column-header-text .phui-icon-view { .conpherence-durable-column-header-text .phui-icon-view {
color: {$hoverwhite}; color: #fff;
text-shadow: 1px 1px 0 rgba(0,0,0,.6);
} }
.conpherence-durable-column-icon-bar { .conpherence-durable-column-icon-bar {
height: 38px; width: 36px;
padding: 4px;
background-color: {$lightgreybackground}; background-color: {$lightgreybackground};
border-right: 1px solid {$thinblueborder};
position: absolute;
top: 0;
left: 0;
bottom: 0;
} }
.conpherence-durable-column-icon-bar .conpherence-durable-column-thread-icon { .conpherence-durable-column-icon-bar .conpherence-durable-column-thread-icon {
float: left; height: 28px;
width: 28px;
padding: 4px;
display: block; display: block;
height: 34px;
width: 34px;
border: 2px solid transparent;
border-radius: 3px;
margin: 0 4px 0 0;
}
.conpherence-durable-column-icon-bar .conpherence-durable-column-search-button {
margin: 4px 0px 0px 0px;
}
.conpherence-durable-column-icon-bar .phui-button-bar {
}
.conpherence-durable-column-icon-bar .phui-button-bar a.button.has-icon {
height: 21px;
}
.conpherence-durable-column-icon-bar .phui-button-bar .button .phui-icon-view {
top: 8px;
} }
.conpherence-durable-column-icon-bar .conpherence-durable-column-icon-bar
.conpherence-durable-column-thread-icon.selected { .conpherence-durable-column-thread-icon.selected {
border-color: {$sky}; background-color: rgba({$alphablue},.1);
} }
.conpherence-durable-column-icon-bar .conpherence-durable-column-icon-bar
.conpherence-durable-column-thread-icon span { .conpherence-durable-column-thread-icon span {
position: relative;
display: block; display: block;
width: 30px; width: 28px;
height: 30px; height: 28px;
top: 2px; border-radius: 3px;
left: 2px; background-size: 28px 28px;
background-size: 30px 30px;
} }
.conpherence-durable-column-body { .conpherence-durable-column-body {
position: absolute; position: absolute;
top: 44px; top: 34px;
bottom: 0; bottom: 0;
right: 0; right: 0;
left: 0; left: 0;
border-left: 1px solid {$lightblueborder};
}
.with-durable-margin .conpherence-durable-column-body {
border-right: 1px solid {$lightblueborder};
} }
.conpherence-durable-column-main { .conpherence-durable-column-main {
position: absolute; position: absolute;
top: 46px; top: 0;
bottom: 134px; bottom: 36px;
left: 0; left: 34px;
right: 0; right: 0;
overflow-x: hidden; overflow-x: hidden;
border-top: 1px solid {$thinblueborder};
} }
.conpherence-durable-column-transactions { .conpherence-durable-column-transactions {
@ -201,9 +160,9 @@
.conpherence-durable-column-transactions .conpherence-durable-column-transactions
.conpherence-transaction-view.conpherence-edited { .conpherence-transaction-view.conpherence-edited {
color: {$lightgreytext}; color: {$lightgreytext};
font-size: {$smallerfontsize};
margin: 0; margin: 0;
padding: 0; padding: 0;
font-style: italic;
} }
.conpherence-durable-column-transactions .conpherence-edited .conpherence-durable-column-transactions .conpherence-edited
@ -218,15 +177,14 @@
min-height: 0; min-height: 0;
} }
.conpherence-durable-column-transactions .conpherence-durable-column-transactions .conpherence-transaction-view
.conpherence-transaction-view
.conpherence-message { .conpherence-message {
word-wrap: break-word; word-wrap: break-word;
} }
.conpherence-durable-column-transactions .conpherence-transaction-detail { .conpherence-durable-column-transactions .conpherence-transaction-detail {
border: 0; border: 0;
margin: 0; margin: 0 0 0 32px;
} }
.conpherence-durable-column-transactions .conpherence-transaction-detail .conpherence-durable-column-transactions .conpherence-transaction-detail
@ -237,13 +195,13 @@
.conpherence-durable-column-transactions .conpherence-durable-column-transactions
.conpherence-transaction-view.date-marker { .conpherence-transaction-view.date-marker {
margin: 20px 0px 8px; margin: 12px 0 0;
} }
.conpherence-durable-column-transactions .conpherence-durable-column-transactions
.conpherence-transaction-view.date-marker .date { .conpherence-transaction-view.date-marker .date {
left: 0; left: 0;
font-size: {$smallerfontsize}; font-size: {$normalfontsize};
top: -14px; top: -14px;
padding: 0 6px 0 0; padding: 0 6px 0 0;
} }
@ -295,42 +253,78 @@ img {
position: absolute; position: absolute;
left: 0; left: 0;
right: 0; right: 0;
bottom: 34px; bottom: 0;
height: 100px; height: 36px;
margin: 0; margin: 0;
border-width: 1px 0; border-width: 1px 0 0 0;
border-style: solid; border-style: solid;
border-top-color: {$thinblueborder}; border-top-color: {$thinblueborder};
border-bottom-color: {$thinblueborder}; padding: 8px;
padding: 8px 12px;
width: 100%; width: 100%;
resize: none; resize: none;
} }
.conpherence-durable-column-textarea:focus { .conpherence-durable-column-textarea:focus {
outline: 0; outline: 0;
border-top-color: {$sky}; border-top-color: {$lightblueborder};
border-bottom-color: {$sky};
box-shadow: none; box-shadow: none;
} }
.conpherence-durable-column-footer {
position: absolute; /* Minimized Column */
height: 26px;
padding: 4px 8px 4px 12px; .minimize-column .conpherence-durable-column {
left: 0; height: 32px;
right: 0; width: 240px;
bottom: 0; box-shadow: none;
background-color: {$lightgreybackground};
} }
.conpherence-durable-column-footer button { .minimize-column .conpherence-durable-column .conpherence-durable-column-body {
float: right; display: none;
} }
.conpherence-durable-column-status { .minimize-column .conpherence-durable-column
vertical-align: middle; .conpherence-durable-column-header {
line-height: 24px; background-color: rgba({$alphablue},.15);
font-size: {$smallerfontsize}; }
color: {$lightbluetext};
.minimize-column .conpherence-durable-column
.conpherence-durable-column-header:hover {
background-color: rgba({$alphablue},.2);
}
.minimize-column .conpherence-durable-column
.conpherence-durable-column-header-text {
width: 100px;
color: {$darkbluetext};
text-shadow: none;
}
.minimize-column .conpherence-durable-column
.conpherence-durable-column-header-text .phui-icon-view {
color: {$darkbluetext};
text-shadow: none;
}
.minimize-column .conpherence-durable-column
.conpherence-durable-column-header .phabricator-application-menu
.phui-list-item-icon.phui-font-fa {
color: {$bluetext};
}
.minimize-column .conpherence-durable-column
.conpherence-durable-column-header .phabricator-application-menu
.phui-list-item-icon.phui-font-fa:hover {
color: {$darkbluetext};
}
.minimize-column .conpherence-durable-column
.conpherence-durable-column-header .phabricator-application-menu
.phui-list-item-icon.phui-font-fa:before {
content: "\f151";
}
.minimize-column .conpherence-durable-column .phabricator-application-menu
.conpherence-settings-icon {
display: none;
} }

View file

@ -58,16 +58,12 @@
left: 240px; left: 240px;
right: 240px; right: 240px;
top: 103px; top: 103px;
bottom: 148px; bottom: 122px;
overflow-x: hidden; overflow-x: hidden;
overflow-y: auto; overflow-y: auto;
-webkit-overflow-scrolling: touch; -webkit-overflow-scrolling: touch;
} }
.conpherence-logged-out .conpherence-message-pane .conpherence-messages {
bottom: 42px;
}
.conpherence-messages.jx-scrollbar-frame { .conpherence-messages.jx-scrollbar-frame {
overflow-y: hidden; overflow-y: hidden;
} }
@ -77,7 +73,7 @@
padding-top: 20px; padding-top: 20px;
} }
.conpherence-messages .jx-scrollbar-content .conpherence-edited:last-child { .conpherence-messages .conpherence-edited:last-child {
padding-bottom: 20px; padding-bottom: 20px;
} }
@ -93,19 +89,9 @@
box-shadow: none; box-shadow: none;
} }
.conpherence-message-pane .messages-loading-mask {
opacity: .6;
background: #fff;
display: none;
}
.loading .messages-loading-mask {
display: block;
}
.conpherence-message-pane .phui-form-view { .conpherence-message-pane .phui-form-view {
border-width: 0; border-width: 0;
height: 140px; height: 110px;
padding: 0 20px 12px; padding: 0 20px 12px;
position: fixed; position: fixed;
bottom: 0; bottom: 0;
@ -113,18 +99,44 @@
right: 241px; right: 241px;
} }
.conpherence-room-status {
font-size: {$smallerfontsize};
color: {$lightgreytext};
font-style: italic;
position: absolute;
bottom: 6px;
left: 24px;
}
.device .conpherence-room-status {
display: none;
}
.conpherence-no-pontificate .conpherence-message-pane .phui-form-view {
border-top: 1px solid {$thinblueborder};
text-align: center;
}
.conpherence-no-pontificate .conpherence-message-pane
.aphront-form-control-submit button,
.conpherence-no-pontificate .conpherence-message-pane
.aphront-form-control-submit a.button {
margin: 4px 0 0 0;
float: none;
}
.conpherence-no-pontificate .phui-form-view .aphront-form-instructions {
margin: 24px 0 16px;
width: 100%;
padding: 0;
color: {$bluetext};
font-size: {$biggestfontsize};
}
.device .conpherence-message-pane .phui-form-view { .device .conpherence-message-pane .phui-form-view {
padding: 8px 8px; padding: 8px 8px;
} }
.conpherence-message-pane .phui-form-view.login-to-participate {
height: 26px;
}
.conpherence-message-pane .login-to-participate a.button {
float: right;
}
.conpherence-message-pane .aphront-form-control-submit button, .conpherence-message-pane .aphront-form-control-submit button,
.conpherence-message-pane .aphront-form-control-submit a.button { .conpherence-message-pane .aphront-form-control-submit a.button {
margin-top: 6px; margin-top: 6px;
@ -152,13 +164,27 @@
border-bottom: none; border-bottom: none;
border-top-left-radius: 3px; border-top-left-radius: 3px;
border-top-right-radius: 3px; border-top-right-radius: 3px;
background-color: #f7f7f7; background-color: {$lightgreybackground};
} }
.device .conpherence-message-pane .remarkup-assist-bar { .device .conpherence-message-pane .remarkup-assist-bar {
position: absolute;
top: 12px;
left: 12px;
background: {$bluebackground};
border-radius: 3px;
border: none;
}
.device .remarkup-assist-button,
.device .remarkup-assist-separator {
display: none; display: none;
} }
.device .remarkup-assist-button.remarkup-assist-upload {
display: block;
}
.device .conpherence-message-pane .phui-form-view { .device .conpherence-message-pane .phui-form-view {
left: 0; left: 0;
right: 0; right: 0;
@ -313,7 +339,7 @@
} }
.conpherence-message-pane .remarkup-assist-textarea { .conpherence-message-pane .remarkup-assist-textarea {
height: 80px; height: 68px;
padding: 8px; padding: 8px;
border: 2px solid {$lightgreyborder}; border: 2px solid {$lightgreyborder};
border-top: 1px solid {$thinblueborder}; border-top: 1px solid {$thinblueborder};
@ -334,7 +360,7 @@
.device .conpherence-message-pane .remarkup-assist-textarea { .device .conpherence-message-pane .remarkup-assist-textarea {
margin: 0; margin: 0;
padding: 8px 68px 8px 8px; padding: 7px 8px 6px 30px;
width: 100%; width: 100%;
height: 34px; height: 34px;
resize: none; resize: none;
@ -364,3 +390,13 @@
max-height: 200px; max-height: 200px;
} }
.conpherence-transaction-collapsed .conpherence-transaction-image,
.conpherence-transaction-collapsed .conpherence-transaction-header {
display: none;
}
.conpherence-message-pane
.conpherence-transaction-collapsed.conpherence-transaction-view {
margin-top: 0;
margin-bottom: 0;
}

View file

@ -14,12 +14,6 @@
padding: 0; padding: 0;
} }
/* only used in transaction comments */
.phui-form-shaded .phui-form-view {
border-bottom: 1px solid #D4DAE0;
background: #F4F5F8;
}
.phui-form-view label.aphront-form-label { .phui-form-view label.aphront-form-label {
padding-top: 5px; padding-top: 5px;
width: 19%; width: 19%;

View file

@ -22,14 +22,6 @@
background-color: #fff; background-color: #fff;
} }
.device-desktop.with-durable-column .phui-workboard-view-shadow {
right: 300px;
}
.device-desktop.with-durable-margin .phui-workboard-view-shadow {
right: 312px;
}
.phui-workboard-view-shadow::-webkit-scrollbar { .phui-workboard-view-shadow::-webkit-scrollbar {
height: 8px; height: 8px;
width: 8px; width: 8px;

View file

@ -25,16 +25,13 @@ JX.behavior('durable-column', function(config, statics) {
} }
var userVisible = config.visible; var userVisible = config.visible;
var userMinimize = config.minimize;
var show = null; var show = null;
var loadThreadID = null; var loadThreadID = null;
var scrollbar = null; var scrollbar = null;
var margin = JX.Scrollbar.getScrollbarControlMargin(); var margin = JX.Scrollbar.getScrollbarControlMargin();
var columnWidth = (300 + margin);
// This is the smallest window size where we'll enable the column.
var minimumViewportWidth = (920 - margin);
var quick = JX.$('phabricator-standard-page-body'); var quick = JX.$('phabricator-standard-page-body');
function _getColumnNode() { function _getColumnNode() {
@ -46,17 +43,8 @@ JX.behavior('durable-column', function(config, statics) {
return JX.DOM.find(column, 'div', 'conpherence-durable-column-main'); return JX.DOM.find(column, 'div', 'conpherence-durable-column-main');
} }
function _isViewportWideEnoughForColumn() {
var viewport = JX.Vector.getViewport();
if (viewport.x < minimumViewportWidth) {
return false;
} else {
return true;
}
}
function _updateColumnVisibility() { function _updateColumnVisibility() {
var new_value = (userVisible && _isViewportWideEnoughForColumn()); var new_value = (userVisible);
if (new_value !== show) { if (new_value !== show) {
show = new_value; show = new_value;
_drawColumn(show); _drawColumn(show);
@ -67,20 +55,27 @@ JX.behavior('durable-column', function(config, statics) {
userVisible = !userVisible; userVisible = !userVisible;
_updateColumnVisibility(); _updateColumnVisibility();
new JX.Request(config.settingsURI) new JX.Request(config.visibleURI)
.setData({value: (show ? 1 : 0)}) .setData({value: (show ? 1 : 0)})
.send(); .send();
} }
function _minimizeColumn(e) {
e.kill();
userMinimize = !userMinimize;
JX.DOM.alterClass(document.body, 'minimize-column', userMinimize);
JX.Stratcom.invoke('resize');
new JX.Request(config.minimizeURI)
.setData({value: (userMinimize ? 1 : 0)})
.send();
}
function _drawColumn(visible) { function _drawColumn(visible) {
JX.DOM.alterClass( JX.DOM.alterClass(
document.body, document.body,
'with-durable-column', 'with-durable-column',
visible); visible);
JX.DOM.alterClass(
document.body,
'with-durable-margin',
visible && !!margin);
var column = _getColumnNode(); var column = _getColumnNode();
if (visible) { if (visible) {
@ -91,16 +86,6 @@ JX.behavior('durable-column', function(config, statics) {
} }
JX.Quicksand.setFrame(visible ? quick : null); JX.Quicksand.setFrame(visible ? quick : null);
// When we activate the column, adjust the tablet breakpoint so that we
// convert the left side of the screen to tablet mode on narrow displays.
var breakpoint;
if (visible) {
breakpoint = minimumViewportWidth + columnWidth;
} else {
breakpoint = minimumViewportWidth;
}
JX.Device.setTabletBreakpoint(breakpoint);
JX.Stratcom.invoke('resize'); JX.Stratcom.invoke('resize');
} }
@ -108,6 +93,11 @@ JX.behavior('durable-column', function(config, statics) {
.setHandler(_toggleColumn) .setHandler(_toggleColumn)
.register(); .register();
JX.Stratcom.listen(
'click',
'conpherence-minimize-window',
_minimizeColumn);
scrollbar = new JX.Scrollbar(_getColumnScrollNode()); scrollbar = new JX.Scrollbar(_getColumnScrollNode());
JX.Quicksand.setFrame(userVisible ? quick : null); JX.Quicksand.setFrame(userVisible ? quick : null);

View file

@ -10,7 +10,7 @@
JX.behavior('conpherence-pontificate', function() { JX.behavior('conpherence-pontificate', function() {
var onsubmit = function(e) { var _sendMessage = function(e) {
e.kill(); e.kill();
var form = e.getNode('tag:form'); var form = e.getNode('tag:form');
var threadManager = JX.ConpherenceThreadManager.getInstance(); var threadManager = JX.ConpherenceThreadManager.getInstance();
@ -20,6 +20,29 @@ JX.behavior('conpherence-pontificate', function() {
JX.Stratcom.listen( JX.Stratcom.listen(
['submit', 'didSyntheticSubmit'], ['submit', 'didSyntheticSubmit'],
'conpherence-pontificate', 'conpherence-pontificate',
onsubmit); _sendMessage);
// Send on enter if the shift key is not held.
JX.Stratcom.listen(
'keydown',
'conpherence-pontificate',
function(e) {
if (e.getSpecialKey() != 'return') {
return;
}
var raw = e.getRawEvent();
if (raw.shiftKey) {
// If the shift key is pressed, let the browser write a newline into
// the textarea.
return;
}
// From here on, interpret this as a "send" action, not a literal
// newline.
e.kill();
_sendMessage(e);
});
}); });

View file

@ -222,6 +222,7 @@ JX.install('WorkboardColumn', {
var points = {}; var points = {};
var count = 0; var count = 0;
var decimal_places = 0;
for (var phid in cards) { for (var phid in cards) {
var card = cards[phid]; var card = cards[phid];
@ -238,6 +239,15 @@ JX.install('WorkboardColumn', {
points[status] = 0; points[status] = 0;
} }
points[status] += card_points; points[status] += card_points;
// Count the number of decimal places in the point value with the
// most decimal digits. We'll use the same precision when rendering
// the point sum. This avoids rounding errors and makes the display
// a little more consistent.
var parts = card_points.toString().split('.');
if (parts[1]) {
decimal_places = Math.max(decimal_places, parts[1].length);
}
} }
count++; count++;
@ -247,6 +257,7 @@ JX.install('WorkboardColumn', {
for (var k in points) { for (var k in points) {
total_points += points[k]; total_points += points[k];
} }
total_points = total_points.toFixed(decimal_places);
var limit = this.getPointLimit(); var limit = this.getPointLimit();