/training/app/_attachments/script/album-page.js

https://github.com/rogerwilliams/couchApps · JavaScript · 106 lines · 86 code · 9 blank · 11 comment · 10 complexity · e3b85c189d8f85199c4178fff9e488f3 MD5 · raw file

  1. var AlbumPageController = function() {
  2. /* RIPPED FROM jquerymobile-1.0a2.js */
  3. function getOffsetTop(ele)
  4. {
  5. var top = 0;
  6. if (ele)
  7. {
  8. var op = ele.offsetParent, body = document.body;
  9. top = ele.offsetTop;
  10. while (ele && ele != body)
  11. {
  12. top += ele.scrollTop || 0;
  13. if (ele == op)
  14. {
  15. top += op.offsetTop;
  16. op = ele.offsetParent;
  17. }
  18. ele = ele.parentNode;
  19. }
  20. }
  21. return top;
  22. }
  23. function setTop(el){
  24. var fromTop = $(window).scrollTop(),
  25. thisTop = getOffsetTop(el[0]), // el.offset().top returns the wrong value on iPad iOS 3.2.1, call our workaround instead.
  26. thisCSStop = el.css('top') == 'auto' ? 0 : parseFloat(el.css('top')),
  27. screenHeight = window.innerHeight,
  28. thisHeight = el.outerHeight(),
  29. useRelative = el.parents('.ui-page:not(.ui-page-fullscreen)').length,
  30. relval;
  31. if( el.is('.ui-header-fixed') ){
  32. relval = fromTop - thisTop + thisCSStop;
  33. if( relval < thisTop){ relval = 0; }
  34. return el.css('top', ( useRelative ) ? relval : fromTop);
  35. }
  36. else{
  37. //relval = -1 * (thisTop - (fromTop + screenHeight) + thisCSStop + thisHeight);
  38. //if( relval > thisTop ){ relval = 0; }
  39. relval = fromTop + screenHeight - thisHeight - (thisTop - thisCSStop);
  40. return el.css('top', ( useRelative ) ? relval : fromTop + screenHeight - thisHeight );
  41. }
  42. }
  43. /* END RIPPED FROM jquerymobile-1.0a2.js */
  44. function handleView()
  45. {
  46. setTop( $("#falseFooter") );
  47. $("#editButton").live( "click", handleEdit );
  48. $("#deleteButton").live( "click", handleDelete );
  49. // Watch for bound hide of page to clear from cache.
  50. var docId = $("#albumcontent").data("identity");
  51. var albumPage = $(document.getElementById("_show/album/" + docId));
  52. albumPage.bind( "pagehide", handlePageViewHide );
  53. }
  54. function handleEdit( event )
  55. {
  56. // Prevent default link event.
  57. event.preventDefault();
  58. // Access document id from data-identity.
  59. var docId = $("#albumcontent").data("identity");
  60. // Change page.
  61. $.mobile.changePage( "_show/album-edit/" + docId, "slide", false, true );
  62. return false;
  63. }
  64. function handleDelete( event )
  65. {
  66. // Prevent default link event.
  67. event.preventDefault();
  68. // Access document id from data-identity.
  69. var docId = $("#albumcontent").data("identity");
  70. // Change page.
  71. $.mobile.changePage( "_show/album-delete/" + docId, "slideup", false, false );
  72. return false;
  73. }
  74. function handlePageViewHide()
  75. {
  76. $("#editButton").die( "click", handleEdit );
  77. $("#deleteButton").die( "click", handleDelete );
  78. var docId = $("#albumcontent").data("identity");
  79. var albumPageCache = $(document.getElementById("_show/album/" + docId));
  80. albumPageCache.unbind( "pagehide", handlePageViewHide );
  81. albumPageCache.empty();
  82. albumPageCache.remove();
  83. }
  84. return {
  85. initialize : function() {
  86. $("div[data-role='page']").live( "pageshow", function() {
  87. $("div[data-role='page']").die( "pageshow" );
  88. handleView();
  89. });
  90. }
  91. };
  92. }();
  93. function handlePageViewReady()
  94. {
  95. AlbumPageController.initialize();
  96. }
  97. $().ready( handlePageViewReady );