1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-30 10:42:41 +01:00
phorge-phorge/webroot/rsrc/js/application/projects/projects-resource-editor.js
epriestley 93d5d29541 Remove "Former" project members
Summary:
This is a needlessly confusing/complex feature that I originally wrote sort of
speculativley. I think we can better serve what little need may exist here with
project feeds.

I'm probably going to get rid of or deemphasize "role" too and just add "Join
Project" and "Leave Project" buttons.

Test Plan: Viewed project list, project profile. Edited project profile and
affiliation.

Reviewers: btrahan, jungejason, zeeg

Reviewed By: btrahan

CC: aran, btrahan

Maniphest Tasks: T681

Differential Revision: 1228
2011-12-16 17:46:02 -08:00

116 lines
2.8 KiB
JavaScript

/**
* @requires javelin-behavior
* phabricator-prefab
* multirow-row-manager
* javelin-tokenizer
* javelin-typeahead-preloaded-source
* javelin-typeahead
* javelin-dom
* javelin-json
* javelin-util
* @provides javelin-behavior-projects-resource-editor
* @javelin
*/
JX.behavior('projects-resource-editor', function(config) {
var root = JX.$(config.root);
var resources_table = JX.DOM.find(root, 'table', 'resources');
var manager = new JX.MultirowRowManager(resources_table);
var resource_rows = [];
for (var ii = 0; ii < config.state.length; ii++) {
addRow(config.state[ii]);
}
function renderRow(data) {
var template = JX.$N('div', JX.$H(config.tokenizerTemplate)).firstChild;
template.id = '';
var datasource = new JX.TypeaheadPreloadedSource(
config.tokenizerSource);
var typeahead = new JX.Typeahead(template);
typeahead.setDatasource(datasource);
var tokenizer = new JX.Tokenizer(template);
tokenizer.setTypeahead(typeahead);
tokenizer.setLimit(1);
tokenizer.start();
if (data.phid) {
tokenizer.addToken(data.phid, data.name);
}
var role = JX.$N('input', {type: 'text', value : data.role || ''});
var ownership = JX.Prefab.renderSelect(
{0 : 'Nonowner', 1 : 'Owner'},
data.owner || 0);
var as_object = function() {
var tokens = tokenizer.getTokens();
return {
phid : JX.keys(tokens)[0] || null,
role : role.value,
owner : ownership.value
};
}
var r = [];
r.push([null, JX.$N('label', {}, 'User:')]);
r.push(['user-tokenizer', template]);
r.push(['role-label', JX.$N('label', {}, 'Role:')]);
r.push(['role', role]);
r.push([null, ownership]);
for (var ii = 0; ii < r.length; ii++) {
r[ii] = JX.$N('td', {className : r[ii][0]}, r[ii][1]);
}
return {
nodes : r,
dataCallback : as_object
};
}
function onaddresource(e) {
e.kill();
addRow({});
}
function addRow(info) {
var data = renderRow(info);
var row = manager.addRow(data.nodes);
var id = manager.getRowID(row);
resource_rows[id] = data.dataCallback;
}
function onsubmit(e) {
var result = [];
for (var ii = 0; ii < resource_rows.length; ii++) {
if (resource_rows[ii]) {
var obj = resource_rows[ii]();
result.push(obj);
}
}
JX.$(config.input).value = JX.JSON.stringify(result);
}
JX.DOM.listen(
root,
'click',
'add-resource',
onaddresource);
JX.DOM.listen(
root,
'submit',
null,
onsubmit);
manager.listen(
'row-removed',
function(row_id) {
delete resource_rows[row_id];
});
});