diff --git a/admin_interface/static/admin/js/popup_response.js b/admin_interface/static/admin/js/popup_response.js index 1995d30..068a0bb 100644 --- a/admin_interface/static/admin/js/popup_response.js +++ b/admin_interface/static/admin/js/popup_response.js @@ -22,13 +22,23 @@ var initData = JSON.parse(document.getElementById('django-admin-popup-response-constants').dataset.popupResponse); switch(initData.action){ case 'change': - openerRef.dismissChangeRelatedObjectPopup(modalRef, initData.value, initData.obj, initData.new_value); + if( typeof(openerRef.dismissChangeRelatedObjectPopup) == 'function' ){ + openerRef.dismissChangeRelatedObjectPopup(modalRef, initData.value, initData.obj, initData.new_value); + } break; case 'delete': - openerRef.dismissDeleteRelatedObjectPopup(modalRef, initData.value); + if( typeof(openerRef.dismissDeleteRelatedObjectPopup) == 'function' ){ + openerRef.dismissDeleteRelatedObjectPopup(modalRef, initData.value); + } break; default: - openerRef.dismissAddRelatedObjectPopup(modalRef, initData.value, initData.obj); + if( typeof(openerRef.dismissAddRelatedObjectPopup) == 'function' ){ + openerRef.dismissAddRelatedObjectPopup(modalRef, initData.value, initData.obj); + } + else if( typeof(openerRef.dismissAddAnotherPopup) == 'function' ){ + // django 1.7 compatibility + openerRef.dismissAddAnotherPopup(modalRef, initData.value, initData.obj); + } break; } })(); diff --git a/admin_interface/static/admin_interface/related-modal/related-modal.js b/admin_interface/static/admin_interface/related-modal/related-modal.js index 93849b2..cad11cb 100644 --- a/admin_interface/static/admin_interface/related-modal/related-modal.js +++ b/admin_interface/static/admin_interface/related-modal/related-modal.js @@ -7,18 +7,23 @@ if(typeof django !== 'undefined' && typeof django.jQuery !== 'undefined' ) // create the function that will close the modal function dismissRelatedObjectModal() { - // close the popup + // close the popup as modal $.magnificPopup.close(); } // assign the function to a global variable window.dismissRelatedObjectModal = dismissRelatedObjectModal; - // listen click events on related links - // (:link prevents to listen click event if href is not defined) - $('a.related-widget-wrapper-link:link').click(function(e){ + function presentRelatedObjectModal(e) + { + var href = ($(this).attr('href') || ''); + if( href == '' ){ + return; + } + // open the popup as modal e.preventDefault(); + e.stopImmediatePropagation(); // remove focus from clicked link $(this).blur(); @@ -26,16 +31,23 @@ if(typeof django !== 'undefined' && typeof django.jQuery !== 'undefined' ) // use the clicked link id as iframe name // it will be available as window.name in the loaded iframe var iframeName = $(this).attr('id'); - //var iframeName = String(window.name + '____' + $(this).attr('id')); - //console.log('open modal with name: "' + iframeName + '"'); + // var iframeName = String(window.name + '____' + $(this).attr('id')); + // console.log('open modal with name: "' + iframeName + '"'); // browsers stop loading nested iframes having the same src url // create a random parameter and append it to the src url to prevent it var iframeSrcRandom = String(Math.round(Math.random() * 999999)); - var iframeSrc = $(this).attr('href') + '&_modal=' + iframeSrcRandom; + var iframeSrc = href; + + // fix for django 1.7 + if( iframeSrc.indexOf('_popup=1') == -1 ){ + iframeSrc += '&_popup=1'; + } + + iframeSrc += '&_modal=' + iframeSrcRandom; // build the iframe html - //var iframeHTML = ''; + // var iframeHTML = ''; var iframeHTML = ''; // create the iframe jquery element @@ -61,7 +73,16 @@ if(typeof django !== 'undefined' && typeof django.jQuery !== 'undefined' ) }); return false; - }); + } + + // listen click events on related links + + // django 1.7 compatibility + $('a.add-another').removeAttr('onclick'); + $('a.add-another').click( presentRelatedObjectModal ); + + // django 1.8 and above + $('a.related-widget-wrapper-link').click( presentRelatedObjectModal ); }); })(django.jQuery);