X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=js%2Fcrm.ajax.js;h=39f7c85ef9aa29d3c196f69d2c9094bd90aafcb3;hb=a2e8bd35b14a8237cd6e972a7ea731118b773ae5;hp=757ebef0633562eefce72b077e916af2d5b9f155;hpb=95c42d8be0834773e0b606a1c79471f4733060ab;p=civicrm-core.git diff --git a/js/crm.ajax.js b/js/crm.ajax.js index 757ebef063..39f7c85ef9 100644 --- a/js/crm.ajax.js +++ b/js/crm.ajax.js @@ -22,19 +22,28 @@ mode = CRM.config && CRM.config.isFrontend ? 'front' : 'back'; } query = query || ''; - var frag = path.split('?'); - var url = tplURL[mode].replace("civicrm-placeholder-url-path", frag[0]); + var url, frag, hash = ''; + if (path.indexOf('#') > -1) { + hash = '#' + path.split('#')[1]; + path = path.split('#')[0]; + } + frag = path.split('?'); + // Encode url path only if slashes in placeholder were also encoded + if (tplURL[mode].indexOf('civicrm/placeholder-url-path') >= 0) { + url = tplURL[mode].replace('civicrm/placeholder-url-path', frag[0]); + } else { + url = tplURL[mode].replace('civicrm%2Fplaceholder-url-path', encodeURIComponent(frag[0])); + } - if (!query) { + if (_.isEmpty(query)) { url = url.replace(/[?&]civicrm-placeholder-url-query=1/, ''); - } - else { - url = url.replace("civicrm-placeholder-url-query=1", typeof query === 'string' ? query : $.param(query)); + } else { + url = url.replace('civicrm-placeholder-url-query=1', typeof query === 'string' ? query : $.param(query)); } if (frag[1]) { url += (url.indexOf('?') < 0 ? '?' : '&') + frag[1]; } - return url; + return url + hash; }; $.fn.crmURL = function () { @@ -482,7 +491,7 @@ if (settings.openInline) { settings.autoClose = $el.crmSnippet('isOriginalUrl'); $(this).off('.openInline').on('click.openInline', settings.openInline, function(e) { - if ($(this).is(exclude + ', .crm-popup')) { + if ($(this).is(exclude + ', .crm-popup, [target=crm-popup]')) { return; } if ($(this).hasClass('open-inline-noreturn')) { @@ -502,6 +511,7 @@ var $el = $(this), label = $el.is('input') ? $el.attr('value') : $el.text(), identifier = $el.attr('name') || $el.attr('href'); + $el.attr('tabindex', '-1'); if (!identifier || identifier === '#' || $.inArray(identifier, added) < 0) { var $icon = $el.find('.icon, .crm-i'), button = {'data-identifier': identifier, text: label, click: function() { @@ -517,7 +527,7 @@ added.push(identifier); } // display:none causes the form to not submit when pressing "enter" - $el.parents(buttonContainers).css({height: 0, padding: 0, margin: 0, overflow: 'hidden'}); + $el.parents(buttonContainers).css({height: 0, padding: 0, margin: 0, overflow: 'hidden'}).attr('aria-hidden', 'true'); }); $el.dialog('option', 'buttons', buttons); } @@ -589,7 +599,7 @@ $(function($) { $('body') - .on('click', 'a.crm-popup', CRM.popup) + .on('click', 'a.crm-popup, a[target=crm-popup]', CRM.popup) // Close unsaved dialog messages .on('dialogopen', function(e) { $('.alert.unsaved-dialog .ui-notify-cross', '#crm-notification-container').click();