mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-11 08:06:13 +01:00
e07077ae4e
Summary: the JS is fragile with respect to the tokenizer coming in from the people widget. make sure to always try to load this up. Note this generally needs to get cleaned up where the server should only send down the *exact* bits the client needs. This is all TODO as part of getting this on mobile perfectly. Also note this fragility exists still in that you can break conpherence by clicking quickly before the initial tokenizer load loads. For old bad data, at some point we weren't updating participation as well as we do today in the editor class. the result is with the migration and code change some conversation participants have bad "last seen message" counts. the simplest case is the test user talking to themselves -- threads before the editor code fixes / changes will have the entire thread as unread for these folks. The other buggy case I saw was where the "last reply" to a thread wasn't being count. These issues showed up for threads February and older which is old. Test Plan: edited conpherence meta data and no JS bugs. pontificated and no JS bugs. added a person and no JS bugs. Reviewers: chad, epriestley Reviewed By: epriestley CC: aran, Korvin Differential Revision: https://secure.phabricator.com/D5622
86 lines
2.3 KiB
JavaScript
86 lines
2.3 KiB
JavaScript
/**
|
|
* @provides javelin-behavior-conpherence-pontificate
|
|
* @requires javelin-behavior
|
|
* javelin-dom
|
|
* javelin-util
|
|
* javelin-workflow
|
|
* javelin-stratcom
|
|
*/
|
|
|
|
JX.behavior('conpherence-pontificate', function(config) {
|
|
var onsubmit = function(e) {
|
|
e.kill();
|
|
|
|
var form = e.getNode('tag:form');
|
|
|
|
var root = e.getNode('conpherence-layout');
|
|
var messages = JX.DOM.find(root, 'div', 'conpherence-messages');
|
|
var header = JX.DOM.find(root, 'div', 'conpherence-header');
|
|
var fileWidget = null;
|
|
try {
|
|
fileWidget = JX.DOM.find(root, 'div', 'widgets-files');
|
|
} catch (ex) {
|
|
// Ignore; maybe no files widget
|
|
}
|
|
var peopleWidget = null;
|
|
try {
|
|
peopleWidget = JX.DOM.find(root, 'div', 'widgets-people');
|
|
} catch (ex) {
|
|
// Ignore; maybe no peoples widget
|
|
}
|
|
|
|
JX.Workflow.newFromForm(form)
|
|
.setHandler(JX.bind(this, function(r) {
|
|
// add the new transactions, probably just our post but who knows
|
|
JX.DOM.appendContent(messages, JX.$H(r.transactions));
|
|
messages.scrollTop = messages.scrollHeight;
|
|
JX.DOM.setContent(header, JX.$H(r.header));
|
|
|
|
try {
|
|
var node = JX.$(r.conpherence_phid + '-nav-item');
|
|
JX.DOM.replace(
|
|
node,
|
|
JX.$H(r.nav_item));
|
|
JX.Stratcom.invoke(
|
|
'conpherence-selectthread',
|
|
null,
|
|
{ id : r.conpherence_phid + '-nav-item' }
|
|
);
|
|
} catch (ex) {
|
|
// Ignore; this view may not have a menu.
|
|
}
|
|
|
|
if (fileWidget) {
|
|
JX.DOM.setContent(
|
|
fileWidget,
|
|
JX.$H(r.file_widget)
|
|
);
|
|
}
|
|
|
|
if (peopleWidget) {
|
|
JX.DOM.setContent(
|
|
peopleWidget,
|
|
JX.$H(r.people_widget)
|
|
);
|
|
}
|
|
|
|
var inputs = JX.DOM.scry(form, 'input');
|
|
for (var ii = 0; ii < inputs.length; ii++) {
|
|
if (inputs[ii].name == 'latest_transaction_id') {
|
|
inputs[ii].value = r.latest_transaction_id;
|
|
break;
|
|
}
|
|
}
|
|
|
|
var textarea = JX.DOM.find(form, 'textarea');
|
|
textarea.value = '';
|
|
}))
|
|
.start();
|
|
};
|
|
|
|
JX.Stratcom.listen(
|
|
['submit', 'didSyntheticSubmit'],
|
|
'conpherence-pontificate',
|
|
onsubmit);
|
|
|
|
});
|