exiteditor.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /**
  2. * Created by sungwon on 14. 5. 9.
  3. */
  4. TrexConfig.add(
  5. {canvas: {exitEditor:{
  6. desc:'에디터 영역 : 에디터 영역에서 빠져 나오시려면 Shift+ESC키를 누르세요',
  7. hotKey: {
  8. shiftKey: true,
  9. keyCode:27
  10. },
  11. nextElement: null
  12. }}}, null);
  13. Trex.module("exit Editor", function(editor, toolbar, sidebar, canvas, config) {
  14. var _wysiwygPanel = canvas.getPanel(Trex.Canvas.__WYSIWYG_MODE);
  15. var _elWysiwyg = _wysiwygPanel.el;
  16. var _config = config.canvas.exitEditor;
  17. function isSearchElement(searchElement){
  18. return !($tx.getStyle(searchElement,'display') == 'none'||
  19. $tx.getStyle(searchElement,'visibility') == 'hidden' ||
  20. searchElement.tagName.toLowerCase() === 'input' && searchElement.type == 'hidden'||
  21. searchElement.tagName.toLowerCase() === 'a' && (searchElement.href||'').trim() == ''||
  22. searchElement.offsetLeft <= 0);
  23. }
  24. function execHandler(e){
  25. try{
  26. if(_config.nextElement){
  27. _config.nextElement.focus();
  28. return;
  29. }
  30. var el = _elWysiwyg;
  31. var pattern = 'button,a,input,select,object';
  32. var searchElement = null;
  33. var els = null;
  34. do{
  35. var next = $tom.nextContent(el,'#element');
  36. if($tom.kindOf(next, pattern)){
  37. searchElement = next;
  38. }else {
  39. els = $tom.descendants(next, pattern);
  40. searchElement = els.find(isSearchElement);
  41. }
  42. if(searchElement){
  43. if(!isSearchElement(searchElement))
  44. searchElement = null;
  45. }
  46. el = next;
  47. }while(!searchElement&&el);
  48. if(searchElement)
  49. searchElement.focus();
  50. else
  51. canvas.getProcessor().blur();
  52. }catch(e){
  53. canvas.getProcessor().blur();
  54. }
  55. }
  56. _elWysiwyg.title = _config.desc;
  57. canvas.observeKey(_config.hotKey, function(ev){
  58. $tx.stop(ev);
  59. execHandler(ev);
  60. });
  61. });