ui: Misc amends for Safari and Firefox (#7907)

1. Ensure dropdown menus function correctly in Safari
2. Ensure default grey color for buttons is not used
3. Ensure IntersectionObservers are cleaned up properly in Safari
pull/7913/head
John Cowen 5 years ago committed by GitHub
parent 249af0a094
commit 6588218cca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -43,6 +43,11 @@ export default Component.extend({
}, },
actions: { actions: {
click: function(e) { click: function(e) {
// only preventDefault if the target isn't an external link
// TODO: this should be changed for an explicit close
if ((e.target.rel || '').indexOf('noopener') === -1) {
e.preventDefault();
}
this.input.checked = !this.input.checked; this.input.checked = !this.input.checked;
// manually dispatched mouse events have a detail = 0 // manually dispatched mouse events have a detail = 0
// real mouse events have the number of click counts // real mouse events have the number of click counts

@ -6,6 +6,8 @@ const toKeyValue = function(el) {
let value = ''; let value = '';
switch (el.type) { switch (el.type) {
case 'radio': case 'radio':
value = el.value === 'on' ? '' : el.value;
break;
case 'search': case 'search':
case 'text': case 'text':
value = el.value; value = el.value;

@ -31,6 +31,11 @@ export default Service.extend({
inViewportCallbacks = new WeakMap(); inViewportCallbacks = new WeakMap();
$_ = getComponentFactory(getOwner(this)); $_ = getComponentFactory(getOwner(this));
}, },
willDestroy: function() {
this._super(...arguments);
inViewportCallbacks = null;
$_ = null;
},
document: function() { document: function() {
return this.doc; return this.doc;
}, },
@ -93,7 +98,7 @@ export default Service.extend({
}, },
isInViewport: function($el, cb, threshold = 0) { isInViewport: function($el, cb, threshold = 0) {
inViewportCallbacks.set($el, cb); inViewportCallbacks.set($el, cb);
const observer = new IntersectionObserver( let observer = new IntersectionObserver(
(entries, observer) => { (entries, observer) => {
entries.map(item => { entries.map(item => {
const cb = inViewportCallbacks.get(item.target); const cb = inViewportCallbacks.get(item.target);
@ -109,6 +114,13 @@ export default Service.extend({
); );
observer.observe($el); // eslint-disable-line ember/no-observers observer.observe($el); // eslint-disable-line ember/no-observers
// observer.unobserve($el); // observer.unobserve($el);
return () => observer.disconnect(); // eslint-disable-line ember/no-observers return () => {
observer.unobserve($el); // eslint-disable-line ember/no-observers
if (inViewportCallbacks) {
inViewportCallbacks.delete($el);
}
observer.disconnect(); // eslint-disable-line ember/no-observers
observer = null;
};
}, },
}); });

@ -94,6 +94,7 @@
%internal-button { %internal-button {
color: $gray-900; color: $gray-900;
background-color: $white;
} }
%internal-button-dangerous { %internal-button-dangerous {
@extend %frame-red-300; @extend %frame-red-300;

@ -1,3 +1,9 @@
%popover-menu + label > *::after {
@extend %with-chevron-down-icon, %as-pseudo;
width: 16px;
height: 16px;
margin-left: 16px;
}
%more-popover-menu + label > *::after { %more-popover-menu + label > *::after {
@extend %with-more-horizontal-icon, %as-pseudo; @extend %with-more-horizontal-icon, %as-pseudo;
opacity: 0.7; opacity: 0.7;
@ -6,12 +12,7 @@
} }
%more-popover-menu + label > * { %more-popover-menu + label > * {
font-size: 0; font-size: 0;
} background-color: $transparent;
%popover-menu + label > *::after {
@extend %with-chevron-down-icon, %as-pseudo;
width: 16px;
height: 16px;
margin-left: 16px;
} }
%popover-menu + label > * { %popover-menu + label > * {
@extend %split-button, %sort-button; @extend %split-button, %sort-button;

Loading…
Cancel
Save