mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-10-18 01:38:12 +00:00
fix(ui): Change angular material to fix issues with Safari iOS 18+
This commit is contained in:
1 parent
0fadd4cb72
commit
07c75280bb
9 files changed
+49687
-93
No files matched your search
+182
@@ -0,0 +1,182 @@
|
||||
/**
|
||||
* AngularJS-Material-Mocks
|
||||
*
|
||||
* Developers interested in running their own custom unit tests WITH angular-material.js loaded...
|
||||
* must also include this *mocks* file. Similar to `angular-mocks.js`, `angular-material-mocks.js`
|
||||
* will override and disable specific AngularJS Material performance settings:
|
||||
*
|
||||
* - Disabled Theme CSS rule generations
|
||||
* - Forces $mdAria.expectWithText() to be synchronous
|
||||
* - Mocks $$rAF.throttle()
|
||||
* - Captures flush exceptions from $$rAF
|
||||
*/
|
||||
// eslint-disable-next-line no-shadow-restricted-names
|
||||
(function(window, angular, undefined) {
|
||||
|
||||
'use strict';
|
||||
|
||||
// Allow our code to know when they are running inside of a test so they can expose extra services
|
||||
// that should NOT be exposed to the public but that should be tested.
|
||||
//
|
||||
// As an example, see input.js which exposes some animation-related methods.
|
||||
window._mdMocksIncluded = true;
|
||||
|
||||
/**
|
||||
* @ngdoc module
|
||||
* @name ngMaterial-mock
|
||||
* @packageName angular-material-mocks
|
||||
*
|
||||
* @description
|
||||
* The `ngMaterial-mock` module provides support
|
||||
*/
|
||||
angular.module('ngMaterial-mock', ['ngMock', 'ngAnimateMock', 'material.core']).config([
|
||||
'$provide',
|
||||
function($provide) {
|
||||
$provide.factory('$material', [
|
||||
'$animate', '$timeout',
|
||||
function($animate, $timeout) {
|
||||
return {
|
||||
flushOutstandingAnimations: function() {
|
||||
// this code is placed in a try-catch statement
|
||||
// since 1.3 and 1.4 handle their animations differently
|
||||
// and there may be situations where follow-up animations
|
||||
// are run in one version and not the other
|
||||
try {
|
||||
$animate.flush();
|
||||
// eslint-disable-next-line no-empty
|
||||
} catch (e) {}
|
||||
},
|
||||
flushInterimElement: function() {
|
||||
this.flushOutstandingAnimations();
|
||||
$timeout.flush();
|
||||
this.flushOutstandingAnimations();
|
||||
$timeout.flush();
|
||||
this.flushOutstandingAnimations();
|
||||
$timeout.flush();
|
||||
}
|
||||
};
|
||||
}
|
||||
]);
|
||||
|
||||
/**
|
||||
* AngularJS Material dynamically generates Style tags
|
||||
* based on themes and palettes; for each ng-app.
|
||||
*
|
||||
* For testing, we want to disable generation and
|
||||
* <style> DOM injections. So we clear the huge THEME
|
||||
* styles while testing...
|
||||
*/
|
||||
$provide.constant('$MD_THEME_CSS', '/**/');
|
||||
|
||||
/**
|
||||
* Add throttle() and wrap .flush() to catch `no callbacks present`
|
||||
* errors
|
||||
*/
|
||||
$provide.decorator('$$rAF', function throttleInjector($delegate) {
|
||||
$delegate.throttle = function(cb) {
|
||||
return function() {
|
||||
cb.apply(this, arguments);
|
||||
};
|
||||
};
|
||||
|
||||
const ngFlush = $delegate.flush;
|
||||
$delegate.flush = function() {
|
||||
try {
|
||||
ngFlush();
|
||||
// eslint-disable-next-line no-empty
|
||||
} catch (e) {}
|
||||
};
|
||||
|
||||
return $delegate;
|
||||
});
|
||||
|
||||
/**
|
||||
* Capture $timeout.flush() errors: "No deferred tasks to be flushed"
|
||||
* errors
|
||||
*/
|
||||
$provide.decorator('$timeout', function throttleInjector($delegate) {
|
||||
const ngFlush = $delegate.flush;
|
||||
$delegate.flush = function() {
|
||||
const args = Array.prototype.slice.call(arguments);
|
||||
try {
|
||||
ngFlush.apply($delegate, args);
|
||||
// eslint-disable-next-line no-empty
|
||||
} catch (e) {}
|
||||
};
|
||||
|
||||
return $delegate;
|
||||
});
|
||||
}
|
||||
]);
|
||||
|
||||
/**
|
||||
* Stylesheet Mocks used by `animateCss.spec.js`
|
||||
*/
|
||||
window.createMockStyleSheet = function createMockStyleSheet(doc, wind) {
|
||||
doc = doc ? doc[0] : window.document;
|
||||
wind = wind || window;
|
||||
|
||||
const node = doc.createElement('style');
|
||||
const head = doc.getElementsByTagName('head')[0];
|
||||
head.appendChild(node);
|
||||
|
||||
const ss = doc.styleSheets[doc.styleSheets.length - 1];
|
||||
|
||||
return {
|
||||
addRule: function(selector, styles) {
|
||||
styles = addVendorPrefix(styles);
|
||||
|
||||
try {
|
||||
ss.insertRule(selector + '{ ' + styles + '}', 0);
|
||||
} catch (e) {
|
||||
try {
|
||||
ss.addRule(selector, styles);
|
||||
// eslint-disable-next-line no-empty
|
||||
} catch (e2) {}
|
||||
}
|
||||
},
|
||||
|
||||
destroy: function() {
|
||||
head.removeChild(node);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Decompose styles, attached specific vendor prefixes
|
||||
* and recompose...
|
||||
* e.g.
|
||||
* 'transition:0.5s linear all; font-size:100px;'
|
||||
* becomes
|
||||
* '-webkit-transition:0.5s linear all; transition:0.5s linear all; font-size:100px;'
|
||||
*/
|
||||
function addVendorPrefix(styles) {
|
||||
const cache = {};
|
||||
|
||||
// Decompose into cache registry
|
||||
styles.match(/([-A-Za-z]*)\w:\w*([A-Za-z0-9.\-\s]*)/gi).forEach(function(style) {
|
||||
const pair = style.split(':');
|
||||
const key = pair[0];
|
||||
|
||||
switch (key) {
|
||||
case 'transition':
|
||||
case 'transform':
|
||||
case 'animation':
|
||||
case 'transition-duration':
|
||||
case 'animation-duration':
|
||||
cache[key] = cache['-webkit-' + key] = pair[1];
|
||||
break;
|
||||
default:
|
||||
cache[key] = pair[1];
|
||||
}
|
||||
});
|
||||
|
||||
// Recompose full style object (as string)
|
||||
styles = '';
|
||||
angular.forEach(cache, function(value, key) {
|
||||
styles = styles + key + ':' + value + '; ';
|
||||
});
|
||||
|
||||
return styles;
|
||||
}
|
||||
};
|
||||
})(window, window.angular);
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,7 @@
|
||||
/*!
|
||||
* AngularJS Material Design
|
||||
* https://github.com/angular/material
|
||||
* @license MIT
|
||||
* v1.2.5
|
||||
*/
|
||||
!function(L,be,ge){"use strict";function e(e,t){if(t.has("$swipe")){e.warn("You are using the ngTouch module. \nAngularJS Material already has mobile click, tap, and swipe support... \nngTouch is not supported with AngularJS Material!")}}function t(e,t){e.decorator("$$rAF",["$delegate",n]),e.decorator("$q",["$delegate",o]),t.theme("default").primaryPalette("indigo").accentPalette("pink").warnPalette("deep-orange").backgroundPalette("grey")}function n(i){return i.throttle=function(e){var t,n,o,r;return function(){t=arguments,r=this,o=e,n||(n=!0,i(function(){o.apply(r,Array.prototype.slice.call(t)),n=!1}))}},i}function o(e){return e.resolve||(e.resolve=e.when),e}function r(i){return{restrict:"A",link:{pre:function(e,t,n){var o=n.mdAutoFocus||n.mdAutofocus||n.mdSidenavFocus;r(i(o)(e)),o&&e.$watch(o,r);function r(e){be.isUndefined(e)&&(e=!0),t.toggleClass("md-autofocus",!!e)}}}}}function i(e,d){function s(){return!0}e&&!be.isArray(e)&&(e=Array.prototype.slice.call(e)),d=!!d;var l=e||[];return{items:function(){return[].concat(l)},count:function(){return l.length},inRange:c,contains:t,indexOf:m,itemAt:function(e){return c(e)?l[e]:null},findBy:function(t,n){return l.filter(function(e){return e[t]===n})},add:function(e,t){if(!e)return-1;be.isNumber(t)||(t=l.length);return l.splice(t,0,e),m(e)},remove:function(e){t(e)&&l.splice(m(e),1)},first:u,last:p,next:be.bind(null,n,!1),previous:be.bind(null,n,!0),hasPrevious:function(e){return!!e&&c(m(e)-1)},hasNext:function(e){return!!e&&c(m(e)+1)}};function c(e){return l.length&&-1<e&&e<l.length}function m(e){return l.indexOf(e)}function t(e){return e&&-1<m(e)}function u(){return l.length?l[0]:null}function p(){return l.length?l[l.length-1]:null}function n(e,t,n,o){n=n||s;for(var r=m(t);;){if(!c(r))return null;var i=r+(e?-1:1),a=null;if(c(i)?a=l[i]:d&&(i=m(a=e?p():u())),null===a||i===o)return null;if(n(a))return a;be.isUndefined(o)&&(o=i),r=i}}}function a(a,t,o){var i={},d={},r={},n={};return e.getResponsiveAttribute=function(e,t){for(var n=0;n<a.MEDIA_PRIORITY.length;n++){var o=a.MEDIA_PRIORITY[n];if(d[i[o]].matches){var r=l(e,t+"-"+o);if(e[r])return e[r]}}return e[l(e,t)]},e.getQuery=function(e){return d[e]},e.watchResponsiveAttributes=function(e,o,r){var i=[];return e.forEach(function(e){var t=l(o,e);for(var n in be.isDefined(o[t])&&i.push(o.$observe(t,be.bind(void 0,r,null))),a.MEDIA)t=l(o,e+"-"+n),be.isDefined(o[t])&&i.push(o.$observe(t,be.bind(void 0,r,n)))}),function(){i.forEach(function(e){e()})}},e;function e(e){var t=i[e];be.isUndefined(t)&&(t=i[e]=function(e){return a.MEDIA[e]||("("!==e.charAt(0)?"("+e+")":e)}(e));var n=r[t];return be.isUndefined(n)&&(n=function(e){var t=d[e];t=t||(d[e]=o.matchMedia(e));return t.addListener(s),r[t.media]=!!t.matches}(t)),n}function s(e){t.$evalAsync(function(){r[e.media]=!!e.matches})}function l(e,t){return n[t]||(n[t]=e.$normalize(t))}}function d(e,t){var o=["data","x"];return e?t?n(e):r(e):{buildList:r,buildSelector:n,hasAttribute:function(e,t){if(!(e=i(e)))return!1;for(var n=r(t),o=0;o<n.length;o++)if(e.hasAttribute(n[o]))return!0;return!1},removeAttribute:function(t,e){if(!(t=i(t)))return;r(e).forEach(function(e){t.removeAttribute(e)})}};function r(n){return(n=be.isArray(n)?n:[n]).forEach(function(t){o.forEach(function(e){n.push(e+"-"+t)})}),n}function n(e){return r(e=be.isArray(e)?e:[e]).map(function(e){return"["+e+"]"}).join(",")}function i(e){if((e=e[0]||e).nodeType)return e}}function A(e){return e.replace(/-[a-z]/g,function(e){return e.charAt(1).toUpperCase()})}var w,_,k,x,N,s,l,c,m,u,p,h,f,b,g,E,v,$,M,y,C,T;function S(o,r,s,i){var a=this.showWarnings;return{expect:d,expectAsync:l,expectWithText:function(e,t){var n=c(e)||"";-1<n.indexOf(i.startSymbol())?l(e,t,function(){return c(e)}):d(e,t,n)},expectWithoutText:function(e,t){var n=c(e);-1<n.indexOf(i.startSymbol())||n||d(e,t,n)},getText:c,hasAriaLabel:m,parentHasAriaLabel:function e(t,n){n=n||1;var o=be.element(t)[0]||t;if(!o.parentNode)return!1;if(r(o.parentNode))return!0;n--;if(n)return e(o.parentNode,n);return!1;function r(e){if(!m(e))return!1;if(e.hasAttribute("role"))switch(e.getAttribute("role").toLowerCase()){case"command":case"definition":case"directory":case"grid":case"list":case"listitem":case"log":case"marquee":case"menu":case"menubar":case"note":case"presentation":case"separator":case"scrollbar":case"status":case"tablist":return!1}switch(e.tagName.toLowerCase()){case"abbr":case"acronym":case"address":case"applet":case"audio":case"b":case"bdi":case"bdo":case"big":case"blockquote":case"br":case"canvas":case"caption":case"center":case"cite":case"code":case"col":case"data":case"dd":case"del":case"dfn":case"dir":case"div":case"dl":case"em":case"embed":case"fieldset":case"figcaption":case"font":case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":case"hgroup":case"html":case"i":case"ins":case"isindex":case"kbd":case"keygen":case"label":case"legend":case"li":case"map":case"mark":case"menu":case"object":case"ol":case"output":case"pre":case"presentation":case"q":case"Line truncated
|
||||
+7556
File diff suppressed because it is too large.
Load diff
+1058
File diff suppressed because it is too large.
Load diff
Vendored
+1125
File diff suppressed because it is too large.
Load diff
+91
-91
@@ -1055,7 +1055,7 @@ var nextUniqueId = 0, isIos, isAndroid, isFirefox;
|
||||
// Support material-tools builds.
|
||||
if (window.navigator) {
|
||||
var userAgent = window.navigator.userAgent || window.navigator.vendor || window.opera;
|
||||
isIos = userAgent.match(/ipad|iphone|ipod/i);
|
||||
isIos = false;//userAgent.match(/ipad|iphone|ipod/i);
|
||||
isAndroid = userAgent.match(/android/i);
|
||||
isFirefox = userAgent.match(/(firefox|minefield)/i);
|
||||
}
|
||||
@@ -6135,95 +6135,95 @@ function InterimElementProvider() {
|
||||
(function(){
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* @ngdoc module
|
||||
* @name material.core.liveannouncer
|
||||
* @description
|
||||
* AngularJS Material Live Announcer to provide accessibility for Voice Readers.
|
||||
*/
|
||||
MdLiveAnnouncer.$inject = ["$timeout"];
|
||||
angular
|
||||
.module('material.core')
|
||||
.service('$mdLiveAnnouncer', MdLiveAnnouncer);
|
||||
|
||||
/**
|
||||
* @ngdoc service
|
||||
* @name $mdLiveAnnouncer
|
||||
* @module material.core.liveannouncer
|
||||
*
|
||||
* @description
|
||||
*
|
||||
* Service to announce messages to supported screenreaders.
|
||||
*
|
||||
* > The `$mdLiveAnnouncer` service is internally used for components to provide proper accessibility.
|
||||
*
|
||||
* <hljs lang="js">
|
||||
* module.controller('AppCtrl', function($mdLiveAnnouncer) {
|
||||
* // Basic announcement (Polite Mode)
|
||||
* $mdLiveAnnouncer.announce('Hey Google');
|
||||
*
|
||||
* // Custom announcement (Assertive Mode)
|
||||
* $mdLiveAnnouncer.announce('Hey Google', 'assertive');
|
||||
* });
|
||||
* </hljs>
|
||||
*
|
||||
*/
|
||||
function MdLiveAnnouncer($timeout) {
|
||||
/** @private @const @type {!angular.$timeout} */
|
||||
this._$timeout = $timeout;
|
||||
|
||||
/** @private @const @type {!HTMLElement} */
|
||||
this._liveElement = this._createLiveElement();
|
||||
|
||||
/** @private @const @type {!number} */
|
||||
this._announceTimeout = 100;
|
||||
}
|
||||
|
||||
/**
|
||||
* @ngdoc method
|
||||
* @name $mdLiveAnnouncer#announce
|
||||
* @description Announces messages to supported screenreaders.
|
||||
* @param {string} message Message to be announced to the screenreader
|
||||
* @param {'off'|'polite'|'assertive'} politeness The politeness of the announcer element.
|
||||
*/
|
||||
MdLiveAnnouncer.prototype.announce = function(message, politeness) {
|
||||
if (!politeness) {
|
||||
politeness = 'polite';
|
||||
}
|
||||
|
||||
var self = this;
|
||||
|
||||
self._liveElement.textContent = '';
|
||||
self._liveElement.setAttribute('aria-live', politeness);
|
||||
|
||||
// This 100ms timeout is necessary for some browser + screen-reader combinations:
|
||||
// - Both JAWS and NVDA over IE11 will not announce anything without a non-zero timeout.
|
||||
// - With Chrome and IE11 with NVDA or JAWS, a repeated (identical) message won't be read a
|
||||
// second time without clearing and then using a non-zero delay.
|
||||
// (using JAWS 17 at time of this writing).
|
||||
self._$timeout(function() {
|
||||
self._liveElement.textContent = message;
|
||||
}, self._announceTimeout, false);
|
||||
};
|
||||
|
||||
/**
|
||||
* Creates a live announcer element, which listens for DOM changes and announces them
|
||||
* to the screenreaders.
|
||||
* @returns {!HTMLElement}
|
||||
* @private
|
||||
*/
|
||||
MdLiveAnnouncer.prototype._createLiveElement = function() {
|
||||
var liveEl = document.createElement('div');
|
||||
|
||||
liveEl.classList.add('md-visually-hidden');
|
||||
liveEl.setAttribute('role', 'status');
|
||||
liveEl.setAttribute('aria-atomic', 'true');
|
||||
liveEl.setAttribute('aria-live', 'polite');
|
||||
|
||||
document.body.appendChild(liveEl);
|
||||
|
||||
return liveEl;
|
||||
};
|
||||
/**
|
||||
* @ngdoc module
|
||||
* @name material.core.liveannouncer
|
||||
* @description
|
||||
* AngularJS Material Live Announcer to provide accessibility for Voice Readers.
|
||||
*/
|
||||
MdLiveAnnouncer.$inject = ["$timeout"];
|
||||
angular
|
||||
.module('material.core')
|
||||
.service('$mdLiveAnnouncer', MdLiveAnnouncer);
|
||||
|
||||
/**
|
||||
* @ngdoc service
|
||||
* @name $mdLiveAnnouncer
|
||||
* @module material.core.liveannouncer
|
||||
*
|
||||
* @description
|
||||
*
|
||||
* Service to announce messages to supported screenreaders.
|
||||
*
|
||||
* > The `$mdLiveAnnouncer` service is internally used for components to provide proper accessibility.
|
||||
*
|
||||
* <hljs lang="js">
|
||||
* module.controller('AppCtrl', function($mdLiveAnnouncer) {
|
||||
* // Basic announcement (Polite Mode)
|
||||
* $mdLiveAnnouncer.announce('Hey Google');
|
||||
*
|
||||
* // Custom announcement (Assertive Mode)
|
||||
* $mdLiveAnnouncer.announce('Hey Google', 'assertive');
|
||||
* });
|
||||
* </hljs>
|
||||
*
|
||||
*/
|
||||
function MdLiveAnnouncer($timeout) {
|
||||
/** @private @const @type {!angular.$timeout} */
|
||||
this._$timeout = $timeout;
|
||||
|
||||
/** @private @const @type {!HTMLElement} */
|
||||
this._liveElement = this._createLiveElement();
|
||||
|
||||
/** @private @const @type {!number} */
|
||||
this._announceTimeout = 100;
|
||||
}
|
||||
|
||||
/**
|
||||
* @ngdoc method
|
||||
* @name $mdLiveAnnouncer#announce
|
||||
* @description Announces messages to supported screenreaders.
|
||||
* @param {string} message Message to be announced to the screenreader
|
||||
* @param {'off'|'polite'|'assertive'} politeness The politeness of the announcer element.
|
||||
*/
|
||||
MdLiveAnnouncer.prototype.announce = function(message, politeness) {
|
||||
if (!politeness) {
|
||||
politeness = 'polite';
|
||||
}
|
||||
|
||||
var self = this;
|
||||
|
||||
self._liveElement.textContent = '';
|
||||
self._liveElement.setAttribute('aria-live', politeness);
|
||||
|
||||
// This 100ms timeout is necessary for some browser + screen-reader combinations:
|
||||
// - Both JAWS and NVDA over IE11 will not announce anything without a non-zero timeout.
|
||||
// - With Chrome and IE11 with NVDA or JAWS, a repeated (identical) message won't be read a
|
||||
// second time without clearing and then using a non-zero delay.
|
||||
// (using JAWS 17 at time of this writing).
|
||||
self._$timeout(function() {
|
||||
self._liveElement.textContent = message;
|
||||
}, self._announceTimeout, false);
|
||||
};
|
||||
|
||||
/**
|
||||
* Creates a live announcer element, which listens for DOM changes and announces them
|
||||
* to the screenreaders.
|
||||
* @returns {!HTMLElement}
|
||||
* @private
|
||||
*/
|
||||
MdLiveAnnouncer.prototype._createLiveElement = function() {
|
||||
var liveEl = document.createElement('div');
|
||||
|
||||
liveEl.classList.add('md-visually-hidden');
|
||||
liveEl.setAttribute('role', 'status');
|
||||
liveEl.setAttribute('aria-atomic', 'true');
|
||||
liveEl.setAttribute('aria-live', 'polite');
|
||||
|
||||
document.body.appendChild(liveEl);
|
||||
|
||||
return liveEl;
|
||||
};
|
||||
|
||||
})();
|
||||
(function(){
|
||||
@@ -17364,7 +17364,7 @@ angular.module('material.components.datepicker', [
|
||||
var CALENDAR_PANE_WIDTH = 360;
|
||||
|
||||
/** Used for checking whether the current user agent is on iOS or Android. */
|
||||
var IS_MOBILE_REGEX = /ipad|iphone|ipod|android/i;
|
||||
var IS_MOBILE_REGEX = false;///ipad|iphone|ipod|android/i;
|
||||
|
||||
/**
|
||||
* Controller for md-datepicker.
|
||||
|
||||
Reference in new issue
Block a user