[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/webroot/rsrc/js/application/phame/ -> phame-post-preview.js (source)

   1  /**
   2   * @provides javelin-behavior-phame-post-preview
   3   * @requires javelin-behavior
   4   *           javelin-dom
   5   *           javelin-util
   6   *           phabricator-shaped-request
   7   */
   8  
   9  JX.behavior('phame-post-preview', function(config) {
  10  
  11    var body        = JX.$(config.body);
  12    var title       = JX.$(config.title);
  13    var phame_title = JX.$(config.phame_title);
  14    var sync_titles = true;
  15  
  16    var titleCallback = function() {
  17      if (!sync_titles) {
  18        return;
  19      }
  20      var title_string  = title.value;
  21      phame_title.value = normalizeSlug(title_string);
  22    };
  23  
  24    var phameTitleKeyupCallback = function () {
  25      // stop sync'ing once user edits phame_title directly
  26      sync_titles    = false;
  27      var normalized = normalizeSlug(phame_title.value, true);
  28      if (normalized == phame_title.value) {
  29        return;
  30      }
  31      var position = phame_title.value.length;
  32      if ('selectionStart' in phame_title) {
  33        position = phame_title.selectionStart;
  34      }
  35      phame_title.value = normalized;
  36      if ('setSelectionRange' in phame_title) {
  37        phame_title.focus();
  38        phame_title.setSelectionRange(position, position);
  39      }
  40    };
  41  
  42    var phameTitleBlurCallback = function () {
  43      phame_title.value = normalizeSlug(phame_title.value);
  44    };
  45  
  46    // This is a sort of implementation of PhabricatorSlug::normalize
  47    var normalizeSlug = function (slug, spare_trailing_underscore) {
  48      var s = slug.toLowerCase().replace(/[^a-z0-9/]+/g, '_').substr(0, 63);
  49      if (spare_trailing_underscore) {
  50        // do nothing
  51      } else {
  52        s = s.replace(/_$/g, '');
  53      }
  54      return s;
  55    };
  56  
  57    var callback = function(r) {
  58      JX.DOM.setContent(JX.$(config.preview), JX.$H(r));
  59    };
  60  
  61    var getdata = function() {
  62      return {
  63        body        : body.value,
  64        title       : title.value,
  65        phame_title : phame_title.value
  66      };
  67    };
  68  
  69    var request = new JX.PhabricatorShapedRequest(config.uri, callback, getdata);
  70    var trigger = JX.bind(request, request.trigger);
  71  
  72    JX.DOM.listen(body,        'keydown', null, trigger);
  73    JX.DOM.listen(title,       'keydown', null, trigger);
  74    JX.DOM.listen(title,       'keyup',   null, titleCallback);
  75    JX.DOM.listen(phame_title, 'keydown', null, trigger);
  76    JX.DOM.listen(phame_title, 'keyup',   null, phameTitleKeyupCallback);
  77    JX.DOM.listen(phame_title, 'blur',    null, phameTitleBlurCallback);
  78    request.start();
  79  
  80  });


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