[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
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 });
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Nov 30 09:20:46 2014 | Cross-referenced by PHPXref 0.7.1 |