title.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. /**
  2. * @fileOverview
  3. *
  4. * 显示并更新脑图文件的标题
  5. *
  6. * @author: techird
  7. * @copyright: Baidu FEX, 2014
  8. */
  9. KityMinder.registerUI('topbar/title', function(minder) {
  10. var $title = $('<h1>').appendTo('#panel');
  11. var $doc = minder.getUI('doc');
  12. var finder = minder.getUI('widget/netdiskfinder');
  13. var notice = minder.getUI('widget/notice');
  14. var renameEnabled = false;
  15. var renameMode = false;
  16. $doc.on('docchange', update);
  17. $title.on('click', rename);
  18. function rename() {
  19. if (!renameEnabled || renameMode) return;
  20. var doc = $doc.current();
  21. var $input = $('<input>').width($title.find('.title-content').width());
  22. var oldFilename = doc.title;
  23. var oldPath = doc.path;
  24. $input.val(oldFilename);
  25. setTimeout(function() {
  26. $input[0].select();
  27. });
  28. $title.addClass('rename-mode');
  29. $title.empty();
  30. $title.append($input);
  31. renameMode = true;
  32. $input.on('keydown', function(e) {
  33. if (e.keyCode == 13) confirm();
  34. else if (e.keyCode == 27) {
  35. cancel();
  36. e.stopPropagation();
  37. }
  38. }).on('blur', cancel);
  39. function exit() {
  40. setTimeout(function() {
  41. renameMode = false;
  42. });
  43. }
  44. function cancel() {
  45. update();
  46. exit();
  47. }
  48. function confirm() {
  49. var newFilename = $input.val();
  50. var oldFilenameInfo = fio.file.anlysisPath(oldFilename);
  51. var newFilenameInfo = fio.file.anlysisPath(newFilename);
  52. if (!newFilenameInfo.name.length) return cancel();
  53. newFilename = newFilenameInfo.name + oldFilenameInfo.extension;
  54. var newPath = fio.file.anlysisPath(oldPath).parentPath + newFilename;
  55. if (newPath == oldPath) return cancel();
  56. $title.addClass('loading');
  57. fio.file.move({
  58. path: oldPath,
  59. newPath: newPath
  60. }).then(function() {
  61. doc.path = newPath;
  62. doc.title = newFilename;
  63. finder.fire('mv', oldPath, newPath);
  64. notice.info(minder.getLang('ui.rename_success', newFilename));
  65. })['catch'](function(e) {
  66. notice.error('err_rename', e);
  67. }).then(function() {
  68. $title.removeClass('loading');
  69. update();
  70. exit();
  71. });
  72. }
  73. }
  74. function enableRename(enabled) {
  75. renameEnabled = enabled;
  76. if (enabled) $title.addClass('rename-enabled');
  77. else $title.removeClass('rename-enabled');
  78. }
  79. function update() {
  80. var doc = $doc.current();
  81. function setTitle(title) {
  82. if (setTitle.lastValue == title) return;
  83. title = title || minder.getLang('ui.untitleddoc');
  84. $title.empty().append($('<span class="title-content"></span>').text(title));
  85. document.title = title ? title + ' - 百度脑图' : '百度脑图';
  86. setTitle.lastValue = title;
  87. }
  88. if (doc.saved) {
  89. setTitle(doc.title);
  90. } else {
  91. setTitle('* ' + doc.title);
  92. }
  93. enableRename(doc.source == 'netdisk' && doc.saved);
  94. }
  95. update();
  96. return {
  97. $title: $title,
  98. getTitle: function() {
  99. return $doc.current().title;
  100. }
  101. };
  102. });