note.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. Note = function(id, onCreate, onUpdateContent, onUpdatePosition) {
  2. this.id = id;
  3. this.onCreate = onCreate;
  4. this.onUpdateContent = onUpdateContent;
  5. this.onUpdatePosition = onUpdatePosition;
  6. this.init();
  7. };
  8. Note.prototype.init = function() {
  9. var self = this;
  10. this.draggingItem = null;
  11. this.editMode = false;
  12. var draggingItem = this.draggingItem;
  13. var editMode = this.editMode;
  14. $(document).delegate('.note-item', 'mousedown', function(event) {
  15. if (editMode) {
  16. return;
  17. }
  18. draggingItem = $(this);
  19. draggingItem.css('cursor', 'move');
  20. var position = draggingItem.position();
  21. draggingItem.data('noteOffsetX', event.clientX - position.left);
  22. draggingItem.data('noteOffsetY', event.clientY - position.top);
  23. });
  24. $(document).delegate('', 'mousemove', function(event) {
  25. if (editMode) {
  26. return;
  27. }
  28. if (draggingItem == null) {
  29. return;
  30. }
  31. draggingItem.css('position', 'absolute');
  32. draggingItem.css({
  33. left: event.clientX - draggingItem.data('noteOffsetX'),
  34. top: event.clientY - draggingItem.data('noteOffsetY')
  35. });
  36. });
  37. $(document).delegate('', 'mouseup', function(event) {
  38. if (editMode) {
  39. return;
  40. }
  41. if (draggingItem == null) {
  42. return;
  43. }
  44. if (self.onUpdatePosition) {
  45. var newId = draggingItem.data('id');
  46. var clientX = draggingItem.position().left;
  47. var clientY = draggingItem.position().top;
  48. self.onUpdatePosition(newId, clientX, clientY);
  49. }
  50. draggingItem.css('cursor', 'default');
  51. draggingItem = null;
  52. });
  53. $(document).delegate('.note-item', 'dblclick', function(event) {
  54. if (editMode) {
  55. return;
  56. }
  57. var panelBody = $(this).find('.panel-body');
  58. var notePre = panelBody.find('.note-pre');
  59. panelBody.append("<textarea class='note-textarea'>" + notePre.text() + "</textarea><button class='note-button'>保存</button>");
  60. $('.note-textarea').focus();
  61. editMode = true;
  62. });
  63. $(document).delegate('.note-item .panel-body .note-button', 'click', function(event) {
  64. var panelBody = $(this).parent('.panel-body');
  65. var notePre = panelBody.find('.note-pre');
  66. notePre.html($('.note-textarea').val());
  67. $('.note-textarea').remove();
  68. $(this).remove();
  69. editMode = false;
  70. if (self.onUpdateContent) {
  71. var newId = panelBody.parent('.note-item').data('id');
  72. var content = notePre.html();
  73. self.onUpdateContent(newId, content);
  74. }
  75. });
  76. };
  77. Note.prototype.addNewNote = function() {
  78. var sed = "_sed:" + new Date().getTime();
  79. $('#' + this.id).append('<div class="panel panel-default note-item note-yellow" style="width:150px;height:200px;" id="' + sed + '">'
  80. + '<div class="panel-body">'
  81. + '<pre class="note-pre">'
  82. + '</pre>'
  83. + '</div>'
  84. + '</div>'
  85. );
  86. var self = this;
  87. if (self.onCreate) {
  88. self.onCreate(function(newId) {
  89. $('#' + sed).data('id', newId);
  90. });
  91. }
  92. };