link.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /**
  2. * @fileOverview
  3. *
  4. * 插入和管理超链接
  5. *
  6. * @author: techird
  7. * @copyright: Baidu FEX, 2014
  8. */
  9. KityMinder.registerUI('ribbon/idea/link', function(minder) {
  10. var R_URL = /(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/;
  11. var $attachment = minder.getUI('ribbon/idea/attachment');
  12. var $linkButtonMenu = new FUI.ButtonMenu({
  13. id: 'link-button-menu',
  14. text: minder.getLang('ui.link'),
  15. layout: 'bottom',
  16. buttons: [{}, {
  17. label: minder.getLang('ui.link')
  18. }],
  19. menu: {
  20. items: [minder.getLang('ui.removelink')]
  21. }
  22. }).appendTo($attachment);
  23. $linkButtonMenu.bindCommandState(minder, 'hyperlink');
  24. var $linkDialog = new FUI.Dialog({
  25. width: 600,
  26. height: 200,
  27. prompt: true,
  28. caption: minder.getLang('ui.link')
  29. }).appendTo(document.getElementById('content-wrapper'));
  30. var $dialogBody = $($linkDialog.getBodyElement());
  31. $dialogBody.html([
  32. '<p><label>连接地址:</label><input type="url" class="link-href fui-widget fui-selectable" /></p>',
  33. '<p><label>提示文本:</label><input type="text" class="link-title fui-widget fui-selectable" /></p>'
  34. ].join(''));
  35. var $href = $dialogBody.find('.link-href');
  36. var $title = $dialogBody.find('.link-title');
  37. var $ok = $linkDialog.getButton(0);
  38. var $errorMsg = $('<span class="validate-error"></span>');
  39. function error(value) {
  40. if (value) {
  41. $href.addClass('validate-error');
  42. $errorMsg.text('地址格式错误');
  43. $ok.disable();
  44. } else {
  45. $href.removeClass('validate-error');
  46. $errorMsg.text('');
  47. $ok.enable();
  48. }
  49. }
  50. $href.after($errorMsg);
  51. $href.on('input', function() {
  52. var url = $href.val();
  53. error(!R_URL.test(url));
  54. });
  55. $linkButtonMenu.on('buttonclick', function() {
  56. $linkDialog.open();
  57. $href[0].focus();
  58. });
  59. $linkButtonMenu.on('select', function() {
  60. minder.execCommand('unhyperlink');
  61. });
  62. $linkDialog.on('ok', function() {
  63. minder.execCommand('hyperlink', $href.val(), $title.val() || '');
  64. });
  65. $linkDialog.on('open', function() {
  66. var value = minder.queryCommandValue('hyperlink');
  67. $href.val(value.url);
  68. $title.val(value.title);
  69. error(false);
  70. });
  71. $(minder.getPaper().getNode()).delegate('a', 'click', function(e) {
  72. var $a = $(e.target).closest('a');
  73. var href = $a.prop('href').baseVal;
  74. if (window.confirm(minder.getLang('ui.redirect', href))) {
  75. window.open(href, '_blank');
  76. }
  77. e.preventDefault();
  78. });
  79. return $linkButtonMenu;
  80. });