materio_personalnotes.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. // @codekit-prepend "gui.js"
  2. // @koala-prepend "gui.js"
  3. (function($) {
  4. MaterioPersonalNotes = function(){
  5. /**
  6. * init()
  7. */
  8. function init(){
  9. trace('MaterioPersonalNotes :: init');
  10. $(document)
  11. .bind('resultscompleted resultschanged previewloaded', onResultsUpdated);
  12. // .bind('init-scroller-pager', onInitScrollerPager)
  13. // .bind('load-scroller-pager', onLoadScrollerPager)
  14. // .bind('view-mode-changed', onViewModeChanged)
  15. // .bind('history-state-change', onHistoryStateChange);
  16. };
  17. function onResultsUpdated(event){
  18. trace('MaterioPersonalNotes :: onResultsUpdated', event);
  19. ajaxifyLinks(event.container);
  20. };
  21. function ajaxifyLinks(container){
  22. trace('MaterioPersonalNotes :: ajaxifyLinks', container);
  23. container = ((container != null) ? container : 'body');
  24. // trace('MaterioFlag :: typeof Drupal.flagLink', typeof Drupal.flagLink);
  25. // if (typeof Drupal.flagLink != 'undefined')
  26. // Drupal.flagLink(container);
  27. $('a.personal-note-link:not(.ajax-processed), ', container)
  28. .bind('click', onClickLink)
  29. .addClass('ajax-processed');
  30. // $('a.personal-note-edit:not(.ajax-processed)', container)
  31. // .bind('click', {'action':'edit'}, onClickLink)
  32. // .addClass('ajax-processed');
  33. };
  34. /**
  35. * onClickCreatLink(event)
  36. */
  37. function onClickLink(event){
  38. // trace('MaterioPersonalNotes :: onClickLink | '+action+' | event', event);
  39. event.preventDefault();
  40. var $link = $(event.currentTarget);
  41. var note_nid = $link.attr('note_nid');
  42. var action = note_nid ? 'edit' : 'create';
  43. var src_nid = $link.attr('src_nid');
  44. trace('MaterioPersonalNotes :: src_nid', src_nid);
  45. trace('MaterioPersonalNotes :: note_nid', note_nid);
  46. var url = Drupal.settings.basePath
  47. +Drupal.settings.pathPrefix
  48. +'materio_personalnotes/form/'+action
  49. +'/'+src_nid;
  50. if(action == 'edit'){
  51. url += '/'+note_nid;
  52. }
  53. $.getJSON(url, function(json){
  54. trace('MaterioPersonalNotes :: '+action+' : json', json);
  55. if(json.new_note_nid){
  56. updateNoteLink($link, json.new_note_nid);
  57. }
  58. showNoteForm(json);
  59. });
  60. return false;
  61. };
  62. function updateNoteLink($link, new_note_nid){
  63. trace('MaterioPersonalNotes :: updateNoteLink : new_note_nid', new_note_nid);
  64. $link.attr('note_nid', new_note_nid);
  65. $link.attr('href', Drupal.settings.pathPrefix+'node/'+new_note_nid+'/edit');
  66. };
  67. function showNoteForm(json){
  68. trace('MaterioPersonalNotes :: showNoteForm');
  69. // google analytics
  70. $.event.trigger({
  71. type:"record-stat",
  72. categorie:"PersonalNotes",
  73. action: 'show create form'
  74. });
  75. var $modal = $('<div id="modal" class="modal note-modal"/>').appendTo('body');
  76. $modal
  77. .css({
  78. position:'absolute',
  79. top:'40%', left:'50%',
  80. marginLeft:'-150px', width:'500px',
  81. zIndex:"99999"
  82. })
  83. .append($('<div class="close"></i><div>')
  84. .bind('click', function(){
  85. trace('close note');
  86. $(this).parents('#modal').remove();
  87. })
  88. );
  89. $modal
  90. .append(json.rendered_form)
  91. .find('textarea')
  92. .focus()
  93. .bind('change keyup paste', function(event){
  94. // trace('text changed', $(this).val());
  95. var note_nid = $(this).parents('form').find('input[name="note_nid"]').val();
  96. saveNote($(this).val(), note_nid);
  97. });
  98. $modal
  99. .find('input[type="submit"], .homepage-textfield').hide();
  100. // TODO: esc keypressed close the form
  101. };
  102. function saveNote(text, note_nid){
  103. trace(text, 'MaterioPersonalNotes :: saveNote : text');
  104. var url = Drupal.settings.basePath
  105. +Drupal.settings.pathPrefix
  106. +'materio_personalnotes/save'
  107. +'/'+note_nid;
  108. $.post(url, {'content':text}, function(data, status){
  109. trace('MaterioPersonalNotes :: save : status', status);
  110. });
  111. };
  112. init();
  113. };
  114. $(document).ready(function() {
  115. var materioflag = new MaterioPersonalNotes();
  116. });
  117. })(jQuery);