[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/webroot/rsrc/js/application/maniphest/ -> behavior-batch-editor.js (source)

   1  /**
   2   * @provides javelin-behavior-maniphest-batch-editor
   3   * @requires javelin-behavior
   4   *           javelin-dom
   5   *           javelin-util
   6   *           phabricator-prefab
   7   *           multirow-row-manager
   8   *           javelin-json
   9   */
  10  
  11  JX.behavior('maniphest-batch-editor', function(config) {
  12  
  13    var root = JX.$(config.root);
  14    var editor_table = JX.DOM.find(root, 'table', 'maniphest-batch-actions');
  15    var manager = new JX.MultirowRowManager(editor_table);
  16    var action_rows = [];
  17  
  18    addRow({});
  19  
  20    function renderRow() {
  21  
  22      var action_select = JX.Prefab.renderSelect(
  23        {
  24          'add_project': 'Add Projects',
  25          'remove_project' : 'Remove Projects',
  26          'priority': 'Change Priority',
  27          'status': 'Change Status',
  28          'add_comment': 'Comment',
  29          'assign': 'Assign',
  30          'add_ccs' : 'Add CCs',
  31          'remove_ccs' : 'Remove CCs'
  32        });
  33  
  34      var proj_tokenizer = build_tokenizer(config.sources.project);
  35      var owner_tokenizer = build_tokenizer(config.sources.owner);
  36      var cc_tokenizer = build_tokenizer(config.sources.cc);
  37  
  38      var priority_select = JX.Prefab.renderSelect(config.priorityMap);
  39      var status_select = JX.Prefab.renderSelect(config.statusMap);
  40      var comment_input = JX.$N('input', {style: {width: '100%'}});
  41  
  42      var cell = JX.$N('td', {className: 'batch-editor-input'});
  43      var vfunc = null;
  44  
  45      function update() {
  46        switch (action_select.value) {
  47          case 'add_project':
  48          case 'remove_project':
  49            JX.DOM.setContent(cell, proj_tokenizer.template);
  50            vfunc = function() {
  51              return JX.keys(proj_tokenizer.object.getTokens());
  52            };
  53            break;
  54          case 'add_ccs':
  55          case 'remove_ccs':
  56            JX.DOM.setContent(cell, cc_tokenizer.template);
  57            vfunc = function() {
  58              return JX.keys(cc_tokenizer.object.getTokens());
  59            };
  60            break;
  61          case 'assign':
  62            JX.DOM.setContent(cell, owner_tokenizer.template);
  63            vfunc = function() {
  64              return JX.keys(owner_tokenizer.object.getTokens());
  65            };
  66            break;
  67          case 'add_comment':
  68            JX.DOM.setContent(cell, comment_input);
  69            vfunc = function() {
  70              return comment_input.value;
  71            };
  72            break;
  73          case 'priority':
  74            JX.DOM.setContent(cell, priority_select);
  75            vfunc = function() { return priority_select.value; };
  76            break;
  77          case 'status':
  78            JX.DOM.setContent(cell, status_select);
  79            vfunc = function() { return status_select.value; };
  80            break;
  81        }
  82      }
  83  
  84      JX.DOM.listen(action_select, 'change', null, update);
  85      update();
  86  
  87      return {
  88        nodes : [JX.$N('td', {}, action_select), cell],
  89        dataCallback : function() {
  90          return {
  91            action: action_select.value,
  92            value: vfunc()
  93          };
  94        }
  95      };
  96    }
  97  
  98    function onaddaction(e) {
  99      e.kill();
 100      addRow({});
 101    }
 102  
 103    function addRow(info) {
 104      var data = renderRow(info);
 105      var row = manager.addRow(data.nodes);
 106      var id = manager.getRowID(row);
 107  
 108      action_rows[id] = data.dataCallback;
 109    }
 110  
 111    function onsubmit() {
 112      var input = JX.$(config.input);
 113  
 114      var actions = [];
 115      for (var k in action_rows) {
 116        actions.push(action_rows[k]());
 117      }
 118  
 119      input.value = JX.JSON.stringify(actions);
 120    }
 121  
 122    JX.DOM.listen(
 123      root,
 124      'click',
 125      'add-action',
 126      onaddaction);
 127  
 128    JX.DOM.listen(
 129      root,
 130      'submit',
 131      null,
 132      onsubmit);
 133  
 134    manager.listen(
 135      'row-removed',
 136      function(row_id) {
 137        delete action_rows[row_id];
 138      });
 139  
 140    function build_tokenizer(tconfig) {
 141      var template = JX.$N('div', JX.$H(config.tokenizerTemplate)).firstChild;
 142      template.id = '';
 143  
 144      var build_config = JX.copy({}, tconfig);
 145      build_config.root = template;
 146  
 147      var built = JX.Prefab.buildTokenizer(build_config);
 148      built.tokenizer.start();
 149  
 150      return {
 151        object: built.tokenizer,
 152        template: template
 153      };
 154    }
 155  
 156  });


Generated: Sun Nov 30 09:20:46 2014 Cross-referenced by PHPXref 0.7.1