[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

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

   1  /**
   2   * @provides javelin-behavior-maniphest-batch-selector
   3   * @requires javelin-behavior
   4   *           javelin-dom
   5   *           javelin-stratcom
   6   *           javelin-util
   7   */
   8  
   9  JX.behavior('maniphest-batch-selector', function(config) {
  10  
  11    var selected = {};
  12  
  13    // Test if a task node is selected.
  14  
  15    var get_id = function(task) {
  16      return JX.Stratcom.getData(task).taskID;
  17    };
  18  
  19    var is_selected = function(task) {
  20      return (get_id(task) in selected);
  21    };
  22  
  23    // Change the selected state of a task.
  24  
  25    var change = function(task, to) {
  26      if (to === undefined) {
  27        to = !is_selected(task);
  28      }
  29  
  30      if (to) {
  31        selected[get_id(task)] = true;
  32      } else {
  33        delete selected[get_id(task)];
  34      }
  35  
  36      JX.DOM.alterClass(
  37        task,
  38        'phui-object-item-selected',
  39        is_selected(task));
  40  
  41      update();
  42    };
  43  
  44    var redraw = function (task) {
  45      var selected = is_selected(task);
  46      change(task, selected);
  47    };
  48    JX.Stratcom.listen(
  49      'subpriority-changed',
  50      null,
  51      function (e) {
  52        e.kill();
  53        var data = e.getData();
  54        redraw(data.task);
  55      });
  56  
  57    // Change all tasks to some state (used by "select all" / "clear selection"
  58    // buttons).
  59  
  60    var changeall = function(to) {
  61      var inputs = JX.DOM.scry(document.body, 'li', 'maniphest-task');
  62      for (var ii = 0; ii < inputs.length; ii++) {
  63        change(inputs[ii], to);
  64      }
  65    };
  66  
  67    // Clear any document text selection after toggling a task via shift click,
  68    // since errant clicks tend to start selecting various ranges otherwise.
  69  
  70    var clear_selection = function() {
  71      if (window.getSelection) {
  72        if (window.getSelection().empty) {
  73          window.getSelection().empty();
  74        } else if (window.getSelection().removeAllRanges) {
  75          window.getSelection().removeAllRanges();
  76        }
  77      } else if (document.selection) {
  78        document.selection.empty();
  79      }
  80    };
  81  
  82    // Update the status text showing how many tasks are selected, and the button
  83    // state.
  84  
  85    var update = function() {
  86      var count = JX.keys(selected).length;
  87      var status;
  88      if (count === 0) {
  89        status = 'Shift-Click to Select Tasks';
  90      } else if (status == 1) {
  91        status = '1 Selected Task';
  92      } else {
  93        status = count + ' Selected Tasks';
  94      }
  95      JX.DOM.setContent(JX.$(config.status), status);
  96  
  97      var submit = JX.$(config.submit);
  98      var disable = (count === 0);
  99      submit.disabled = disable;
 100      JX.DOM.alterClass(submit, 'disabled', disable);
 101    };
 102  
 103    // When he user shift-clicks the task, update the rest of the application
 104    // state.
 105  
 106    JX.Stratcom.listen(
 107      'click',
 108      'maniphest-task',
 109      function(e) {
 110        var raw = e.getRawEvent();
 111        if (!raw.shiftKey) {
 112          return;
 113        }
 114  
 115        if (raw.ctrlKey || raw.altKey || raw.metaKey || e.isRightButton()) {
 116          return;
 117        }
 118  
 119        if (JX.Stratcom.pass(e)) {
 120          return;
 121        }
 122  
 123        e.kill();
 124        change(e.getNode('maniphest-task'));
 125  
 126        clear_selection();
 127      });
 128  
 129  
 130    // When the user clicks "Select All", select all tasks.
 131  
 132    JX.DOM.listen(
 133      JX.$(config.selectNone),
 134      'click',
 135      null,
 136      function(e) {
 137        changeall(false);
 138        e.kill();
 139      });
 140  
 141  
 142    // When the user clicks "Clear Selection", clear the selection.
 143  
 144    JX.DOM.listen(
 145      JX.$(config.selectAll),
 146      'click',
 147      null,
 148      function(e) {
 149        changeall(true);
 150        e.kill();
 151      });
 152  
 153    // When the user submits the form, dump selected state into it.
 154  
 155    JX.DOM.listen(
 156      JX.$(config.formID),
 157      'submit',
 158      null,
 159      function() {
 160        var inputs = [];
 161        for (var k in selected) {
 162          inputs.push(
 163            JX.$N('input', {type: 'hidden', name: 'batch[]', value: k}));
 164        }
 165        JX.DOM.setContent(JX.$(config.idContainer), inputs);
 166      });
 167  
 168    update();
 169  
 170  });


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