mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-05-19 02:15:36 +00:00
(js/css) Update generated files
This commit is contained in:
+263
-81
@@ -2,7 +2,7 @@
|
||||
* AngularJS Material Design
|
||||
* https://github.com/angular/material
|
||||
* @license MIT
|
||||
* v1.1.4-master-e1345ae
|
||||
* v1.1.4-master-75237c6
|
||||
*/
|
||||
(function( window, angular, undefined ){
|
||||
"use strict";
|
||||
@@ -2600,7 +2600,7 @@ attachToDocument.$inject = ["$mdGesture", "$$MdGestureHandler"];var HANDLERS = {
|
||||
* as well as other information abstracted from the DOM.
|
||||
*/
|
||||
|
||||
var pointer, lastPointer, forceSkipClickHijack = false;
|
||||
var pointer, lastPointer, forceSkipClickHijack = false, maxClickDistance = 6;
|
||||
|
||||
/**
|
||||
* The position of the most recent click if that click was on a label element.
|
||||
@@ -2615,7 +2615,7 @@ angular
|
||||
.module('material.core.gestures', [ ])
|
||||
.provider('$mdGesture', MdGestureProvider)
|
||||
.factory('$$MdGestureHandler', MdGestureHandler)
|
||||
.run( attachToDocument );
|
||||
.run(attachToDocument );
|
||||
|
||||
/**
|
||||
* @ngdoc service
|
||||
@@ -2626,6 +2626,7 @@ angular
|
||||
* In some scenarios on Mobile devices (without jQuery), the click events should NOT be hijacked.
|
||||
* `$mdGestureProvider` is used to configure the Gesture module to ignore or skip click hijacking on mobile
|
||||
* devices.
|
||||
* You can also change max click distance (6px by default) if you have issues on some touch screens.
|
||||
*
|
||||
* <hljs lang="js">
|
||||
* app.config(function($mdGestureProvider) {
|
||||
@@ -2634,6 +2635,9 @@ angular
|
||||
* // intercept click events during the capture phase.
|
||||
* $mdGestureProvider.skipClickHijack();
|
||||
*
|
||||
* // If hijcacking clicks, change default 6px click distance
|
||||
* $mdGestureProvider.setMaxClickDistance(12);
|
||||
*
|
||||
* });
|
||||
* </hljs>
|
||||
*
|
||||
@@ -2648,6 +2652,10 @@ MdGestureProvider.prototype = {
|
||||
return forceSkipClickHijack = true;
|
||||
},
|
||||
|
||||
setMaxClickDistance: function(clickDistance) {
|
||||
maxClickDistance = parseInt(clickDistance);
|
||||
},
|
||||
|
||||
/**
|
||||
* $get is used to build an instance of $mdGesture
|
||||
* @ngInject
|
||||
@@ -2678,7 +2686,6 @@ function MdGesture($$MdGestureHandler, $$rAF, $timeout) {
|
||||
};
|
||||
|
||||
if (self.isHijackingClicks) {
|
||||
var maxClickDistance = 6;
|
||||
self.handler('click', {
|
||||
options: {
|
||||
maxDistance: maxClickDistance
|
||||
@@ -10023,8 +10030,6 @@ function MdDialogDirective($$rAF, $mdTheming, $mdDialog) {
|
||||
* `three` into the controller, with the value 3. If `bindToController` is true, they will be
|
||||
* copied to the controller instead.
|
||||
* - `bindToController` - `bool`: bind the locals to the controller, instead of passing them in.
|
||||
* - `resolve` - `{object=}`: Similar to locals, except it takes promises as values, and the
|
||||
* dialog will not open until all of the promises resolve.
|
||||
* - `controllerAs` - `{string=}`: An alias to assign the controller to on the scope.
|
||||
* - `parent` - `{element=}`: The element to append the dialog to. Defaults to appending
|
||||
* to the root element of the application.
|
||||
@@ -10090,7 +10095,7 @@ function MdDialogProvider($$interimElementProvider) {
|
||||
})
|
||||
.addPreset('prompt', {
|
||||
methods: ['title', 'htmlContent', 'textContent', 'initialValue', 'content', 'placeholder', 'ariaLabel',
|
||||
'ok', 'cancel', 'theme', 'css'],
|
||||
'ok', 'cancel', 'theme', 'css', 'required'],
|
||||
options: advancedDialogOptions
|
||||
});
|
||||
|
||||
@@ -10108,7 +10113,7 @@ function MdDialogProvider($$interimElementProvider) {
|
||||
' </div>',
|
||||
' <md-input-container md-no-float ng-if="::dialog.$type == \'prompt\'" class="md-prompt-input-container">',
|
||||
' <input ng-keypress="dialog.keypress($event)" md-autofocus ng-model="dialog.result" ' +
|
||||
' placeholder="{{::dialog.placeholder}}">',
|
||||
' placeholder="{{::dialog.placeholder}}" ng-required="dialog.required">',
|
||||
' </md-input-container>',
|
||||
' </md-dialog-content>',
|
||||
' <md-dialog-actions>',
|
||||
@@ -10116,7 +10121,8 @@ function MdDialogProvider($$interimElementProvider) {
|
||||
' ng-click="dialog.abort()" class="md-primary md-cancel-button">',
|
||||
' {{ dialog.cancel }}',
|
||||
' </md-button>',
|
||||
' <md-button ng-click="dialog.hide()" class="md-primary md-confirm-button" md-autofocus="dialog.$type===\'alert\'">',
|
||||
' <md-button ng-click="dialog.hide()" class="md-primary md-confirm-button" md-autofocus="dialog.$type===\'alert\'"' +
|
||||
' ng-disabled="dialog.required && !dialog.result">',
|
||||
' {{ dialog.ok }}',
|
||||
' </md-button>',
|
||||
' </md-dialog-actions>',
|
||||
@@ -13933,7 +13939,7 @@ function mdListItemDirective($mdAria, $mdConstant, $mdUtil, $timeout) {
|
||||
function copyAttributes(source, destination, extraAttrs) {
|
||||
var copiedAttrs = $mdUtil.prefixer([
|
||||
'ng-if', 'ng-click', 'ng-dblclick', 'aria-label', 'ng-disabled', 'ui-sref',
|
||||
'href', 'ng-href', 'target', 'ng-attr-ui-sref', 'ui-sref-opts'
|
||||
'href', 'ng-href', 'rel', 'target', 'ng-attr-ui-sref', 'ui-sref-opts'
|
||||
]);
|
||||
|
||||
if (extraAttrs) {
|
||||
@@ -14843,6 +14849,7 @@ angular
|
||||
* }
|
||||
*
|
||||
* function PanelMenuCtrl(mdPanelRef) {
|
||||
* // The controller is provided with an import named 'mdPanelRef'
|
||||
* this.closeMenu = function() {
|
||||
* mdPanelRef && mdPanelRef.close();
|
||||
* };
|
||||
@@ -14915,7 +14922,7 @@ angular
|
||||
* clickOutsideToClose: true,
|
||||
* escapeToClose: true,
|
||||
* focusOnOpen: true
|
||||
* }
|
||||
* };
|
||||
*
|
||||
* $mdPanel.open(config)
|
||||
* .then(function(result) {
|
||||
@@ -14967,7 +14974,8 @@ angular
|
||||
* - `locals` - `{Object=}`: An object containing key/value pairs. The keys
|
||||
* will be used as names of values to inject into the controller. For
|
||||
* example, `locals: {three: 3}` would inject `three` into the controller,
|
||||
* with the value 3.
|
||||
* with the value 3. 'mdPanelRef' is a reserved key, and will always
|
||||
* be set to the created MdPanelRef instance.
|
||||
* - `resolve` - `{Object=}`: Similar to locals, except it takes promises as
|
||||
* values. The panel will not open until all of the promises resolve.
|
||||
* - `attachTo` - `{(string|!angular.JQLite|!Element)=}`: The element to
|
||||
@@ -16613,6 +16621,7 @@ MdPanelRef.prototype._createPanel = function() {
|
||||
// Handle click and touch events for the panel container.
|
||||
if (self.config['propagateContainerEvents']) {
|
||||
self.panelContainer.css('pointer-events', 'none');
|
||||
self.panelEl.css('pointer-events', 'all');
|
||||
}
|
||||
|
||||
// Panel may be outside the $rootElement, tell ngAnimate to animate
|
||||
@@ -19968,6 +19977,14 @@ function SelectProvider($$interimElementProvider) {
|
||||
* Interim-element onRemove logic....
|
||||
*/
|
||||
function onRemove(scope, element, opts) {
|
||||
var animationRunner = null;
|
||||
var destroyListener = scope.$on('$destroy', function() {
|
||||
// Listen for the case where the element was destroyed while there was an
|
||||
// ongoing close animation. If this happens, we need to end the animation
|
||||
// manually.
|
||||
animationRunner.end();
|
||||
});
|
||||
|
||||
opts = opts || { };
|
||||
opts.cleanupInteraction();
|
||||
opts.cleanupResizing();
|
||||
@@ -19975,8 +19992,7 @@ function SelectProvider($$interimElementProvider) {
|
||||
|
||||
// For navigation $destroy events, do a quick, non-animated removal,
|
||||
// but for normal closes (from clicks, etc) animate the removal
|
||||
|
||||
return (opts.$destroy === true) ? cleanElement() : animateRemoval().then( cleanElement );
|
||||
return (opts.$destroy === true) ? cleanElement() : animateRemoval().then(cleanElement);
|
||||
|
||||
/**
|
||||
* For normal closes (eg clicks), animate the removal.
|
||||
@@ -19984,17 +20000,20 @@ function SelectProvider($$interimElementProvider) {
|
||||
* skip the animations
|
||||
*/
|
||||
function animateRemoval() {
|
||||
return $animateCss(element, {addClass: 'md-leave'}).start();
|
||||
animationRunner = $animateCss(element, {addClass: 'md-leave'});
|
||||
return animationRunner.start();
|
||||
}
|
||||
|
||||
/**
|
||||
* Restore the element to a closed state
|
||||
*/
|
||||
function cleanElement() {
|
||||
destroyListener();
|
||||
|
||||
element.removeClass('md-active');
|
||||
element.attr('aria-hidden', 'true');
|
||||
element[0].style.display = 'none';
|
||||
element
|
||||
.removeClass('md-active')
|
||||
.attr('aria-hidden', 'true')
|
||||
.css('display', 'none');
|
||||
|
||||
announceClosed(opts);
|
||||
|
||||
@@ -22558,6 +22577,123 @@ angular.module('material.components.tabs', [
|
||||
(function(){
|
||||
"use strict";
|
||||
|
||||
angular
|
||||
.module('material.components.tabs')
|
||||
.service('MdTabsPaginationService', MdTabsPaginationService);
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @module material.components.tabs
|
||||
* @name MdTabsPaginationService
|
||||
* @description Provides many standalone functions to ease in pagination calculations.
|
||||
*
|
||||
* Most functions accept the elements and the current offset.
|
||||
*
|
||||
* The `elements` parameter is typically the value returned from the `getElements()` function of the
|
||||
* tabsController.
|
||||
*
|
||||
* The `offset` parameter is always positive regardless of LTR or RTL (we simply make the LTR one
|
||||
* negative when we apply our transform). This is typically the `ctrl.leftOffset` variable in the
|
||||
* tabsController.
|
||||
*
|
||||
* @returns MdTabsPaginationService
|
||||
* @constructor
|
||||
*/
|
||||
function MdTabsPaginationService() {
|
||||
return {
|
||||
decreasePageOffset: decreasePageOffset,
|
||||
increasePageOffset: increasePageOffset,
|
||||
getTabOffsets: getTabOffsets,
|
||||
getTotalTabsWidth: getTotalTabsWidth
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the offset for the next decreasing page.
|
||||
*
|
||||
* @param elements
|
||||
* @param currentOffset
|
||||
* @returns {number}
|
||||
*/
|
||||
function decreasePageOffset(elements, currentOffset) {
|
||||
var canvas = elements.canvas,
|
||||
tabOffsets = getTabOffsets(elements),
|
||||
i, firstVisibleTabOffset;
|
||||
|
||||
// Find the first fully visible tab in offset range
|
||||
for (i = 0; i < tabOffsets.length; i++) {
|
||||
if (tabOffsets[i] >= currentOffset) {
|
||||
firstVisibleTabOffset = tabOffsets[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Return (the first visible tab offset - the tabs container width) without going negative
|
||||
return Math.max(0, firstVisibleTabOffset - canvas.clientWidth);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the offset for the next increasing page.
|
||||
*
|
||||
* @param elements
|
||||
* @param currentOffset
|
||||
* @returns {number}
|
||||
*/
|
||||
function increasePageOffset(elements, currentOffset) {
|
||||
var canvas = elements.canvas,
|
||||
maxOffset = getTotalTabsWidth(elements) - canvas.clientWidth,
|
||||
tabOffsets = getTabOffsets(elements),
|
||||
i, firstHiddenTabOffset;
|
||||
|
||||
// Find the first partially (or fully) invisible tab
|
||||
for (i = 0; i < tabOffsets.length, tabOffsets[i] <= currentOffset + canvas.clientWidth; i++) {
|
||||
firstHiddenTabOffset = tabOffsets[i];
|
||||
}
|
||||
|
||||
// Return the offset of the first hidden tab, or the maximum offset (whichever is smaller)
|
||||
return Math.min(maxOffset, firstHiddenTabOffset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the offsets of all of the tabs based on their widths.
|
||||
*
|
||||
* @param elements
|
||||
* @returns {number[]}
|
||||
*/
|
||||
function getTabOffsets(elements) {
|
||||
var i, tab, currentOffset = 0, offsets = [];
|
||||
|
||||
for (i = 0; i < elements.tabs.length; i++) {
|
||||
tab = elements.tabs[i];
|
||||
offsets.push(currentOffset);
|
||||
currentOffset += tab.offsetWidth;
|
||||
}
|
||||
|
||||
return offsets;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sum the width of all tabs.
|
||||
*
|
||||
* @param elements
|
||||
* @returns {number}
|
||||
*/
|
||||
function getTotalTabsWidth(elements) {
|
||||
var sum = 0, i, tab;
|
||||
|
||||
for (i = 0; i < elements.tabs.length; i++) {
|
||||
tab = elements.tabs[i];
|
||||
sum += tab.offsetWidth;
|
||||
}
|
||||
|
||||
return sum;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
})();
|
||||
(function(){
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* @ngdoc module
|
||||
* @name material.components.toast
|
||||
@@ -26413,7 +26549,7 @@ function MdAutocomplete ($$mdSvgRegistry) {
|
||||
'type="button" ' +
|
||||
'aria-label="Clear Input" ' +
|
||||
'tabindex="-1" ' +
|
||||
'ng-if="clearButton && $mdAutocompleteCtrl.scope.searchText && !$mdAutocompleteCtrl.isDisabled" ' +
|
||||
'ng-if="clearButton && $mdAutocompleteCtrl.scope.searchText" ' +
|
||||
'ng-click="$mdAutocompleteCtrl.clear($event)">' +
|
||||
'<md-icon md-svg-src="' + $$mdSvgRegistry.mdClose + '"></md-icon>' +
|
||||
'</button>';
|
||||
@@ -27902,7 +28038,7 @@ MdChipsCtrl.prototype.contentIdFor = function(index) {
|
||||
*
|
||||
* <ul>Validation
|
||||
* <li>allow a validation callback</li>
|
||||
* <li>hilighting style for invalid chips</li>
|
||||
* <li>highlighting style for invalid chips</li>
|
||||
* </ul>
|
||||
*
|
||||
* <ul>Item mutation
|
||||
@@ -34823,7 +34959,7 @@ function MdTabScroll ($parse) {
|
||||
"use strict";
|
||||
|
||||
|
||||
MdTabsController.$inject = ["$scope", "$element", "$window", "$mdConstant", "$mdTabInkRipple", "$mdUtil", "$animateCss", "$attrs", "$compile", "$mdTheming", "$mdInteraction"];angular
|
||||
MdTabsController.$inject = ["$scope", "$element", "$window", "$mdConstant", "$mdTabInkRipple", "$mdUtil", "$animateCss", "$attrs", "$compile", "$mdTheming", "$mdInteraction", "MdTabsPaginationService"];angular
|
||||
.module('material.components.tabs')
|
||||
.controller('MdTabsController', MdTabsController);
|
||||
|
||||
@@ -34831,7 +34967,8 @@ MdTabsController.$inject = ["$scope", "$element", "$window", "$mdConstant", "$md
|
||||
* @ngInject
|
||||
*/
|
||||
function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipple, $mdUtil,
|
||||
$animateCss, $attrs, $compile, $mdTheming, $mdInteraction) {
|
||||
$animateCss, $attrs, $compile, $mdTheming, $mdInteraction,
|
||||
MdTabsPaginationService) {
|
||||
// define private properties
|
||||
var ctrl = this,
|
||||
locked = false,
|
||||
@@ -35014,9 +35151,16 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
|
||||
if (newWidth !== oldWidth) {
|
||||
var elements = getElements();
|
||||
|
||||
// Set the max width for the real tabs
|
||||
angular.forEach(elements.tabs, function(tab) {
|
||||
tab.style.maxWidth = newWidth + 'px';
|
||||
});
|
||||
|
||||
// Set the max width for the dummy tabs too
|
||||
angular.forEach(elements.dummies, function(tab) {
|
||||
tab.style.maxWidth = newWidth + 'px';
|
||||
});
|
||||
|
||||
$mdUtil.nextTick(ctrl.updateInkBarStyles);
|
||||
}
|
||||
}
|
||||
@@ -35046,7 +35190,10 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
|
||||
*/
|
||||
function handleOffsetChange (left) {
|
||||
var elements = getElements();
|
||||
var newValue = ctrl.shouldCenterTabs ? '' : '-' + left + 'px';
|
||||
var newValue = ((ctrl.shouldCenterTabs || isRtl() ? '' : '-') + left + 'px');
|
||||
|
||||
// Fix double-negative which can happen with RTL support
|
||||
newValue = newValue.replace('--', '');
|
||||
|
||||
angular.element(elements.paging).css($mdConstant.CSS.TRANSFORM, 'translate3d(' + newValue + ', 0, 0)');
|
||||
$scope.$broadcast('$mdTabsPaginationChanged');
|
||||
@@ -35132,6 +35279,13 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
|
||||
event.preventDefault();
|
||||
if (!locked) select(ctrl.focusIndex);
|
||||
break;
|
||||
case $mdConstant.KEY_CODE.TAB:
|
||||
// On tabbing out of the tablist, reset hasFocus to reset ng-focused and
|
||||
// its md-focused class if the focused tab is not the active tab.
|
||||
if (ctrl.focusIndex !== ctrl.selectedIndex) {
|
||||
ctrl.focusIndex = ctrl.selectedIndex;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35165,48 +35319,23 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
|
||||
* Slides the tabs over approximately one page forward.
|
||||
*/
|
||||
function nextPage () {
|
||||
var elements = getElements();
|
||||
var viewportWidth = elements.canvas.clientWidth,
|
||||
totalWidth = viewportWidth + ctrl.offsetLeft,
|
||||
i, tab;
|
||||
for (i = 0; i < elements.tabs.length; i++) {
|
||||
tab = elements.tabs[ i ];
|
||||
if (tab.offsetLeft + tab.offsetWidth > totalWidth) break;
|
||||
}
|
||||
if (!ctrl.canPageForward()) { return }
|
||||
|
||||
if (viewportWidth > tab.offsetWidth) {
|
||||
//Canvas width *greater* than tab width: usual positioning
|
||||
ctrl.offsetLeft = fixOffset(tab.offsetLeft);
|
||||
} else {
|
||||
/**
|
||||
* Canvas width *smaller* than tab width: positioning at the *end* of current tab to let
|
||||
* pagination "for loop" to proceed correctly on next tab when nextPage() is called again
|
||||
*/
|
||||
ctrl.offsetLeft = fixOffset(tab.offsetLeft + (tab.offsetWidth - viewportWidth + 1));
|
||||
}
|
||||
var newOffset = MdTabsPaginationService.increasePageOffset(getElements(), ctrl.offsetLeft);
|
||||
|
||||
ctrl.offsetLeft = fixOffset(newOffset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Slides the tabs over approximately one page backward.
|
||||
*/
|
||||
function previousPage () {
|
||||
var i, tab, elements = getElements();
|
||||
if (!ctrl.canPageBack()) { return }
|
||||
|
||||
for (i = 0; i < elements.tabs.length; i++) {
|
||||
tab = elements.tabs[ i ];
|
||||
if (tab.offsetLeft + tab.offsetWidth >= ctrl.offsetLeft) break;
|
||||
}
|
||||
var newOffset = MdTabsPaginationService.decreasePageOffset(getElements(), ctrl.offsetLeft);
|
||||
|
||||
if (elements.canvas.clientWidth > tab.offsetWidth) {
|
||||
//Canvas width *greater* than tab width: usual positioning
|
||||
ctrl.offsetLeft = fixOffset(tab.offsetLeft + tab.offsetWidth - elements.canvas.clientWidth);
|
||||
} else {
|
||||
/**
|
||||
* Canvas width *smaller* than tab width: positioning at the *beginning* of current tab to let
|
||||
* pagination "for loop" to break correctly on previous tab when previousPage() is called again
|
||||
*/
|
||||
ctrl.offsetLeft = fixOffset(tab.offsetLeft);
|
||||
}
|
||||
// Set the new offset
|
||||
ctrl.offsetLeft = fixOffset(newOffset);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -35215,6 +35344,7 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
|
||||
function handleWindowResize () {
|
||||
ctrl.lastSelectedIndex = ctrl.selectedIndex;
|
||||
ctrl.offsetLeft = fixOffset(ctrl.offsetLeft);
|
||||
|
||||
$mdUtil.nextTick(function () {
|
||||
ctrl.updateInkBarStyles();
|
||||
updatePagination();
|
||||
@@ -35311,6 +35441,8 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
|
||||
elements.canvas = elements.wrapper.querySelector('md-tabs-canvas');
|
||||
elements.paging = elements.canvas.querySelector('md-pagination-wrapper');
|
||||
elements.inkBar = elements.paging.querySelector('md-ink-bar');
|
||||
elements.nextButton = node.querySelector('md-next-button');
|
||||
elements.prevButton = node.querySelector('md-prev-button');
|
||||
|
||||
elements.contents = node.querySelectorAll('md-tabs-content-wrapper > md-tab-content');
|
||||
elements.tabs = elements.paging.querySelectorAll('md-tab-item');
|
||||
@@ -35324,6 +35456,7 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function canPageBack () {
|
||||
// This works for both LTR and RTL
|
||||
return ctrl.offsetLeft > 0;
|
||||
}
|
||||
|
||||
@@ -35334,6 +35467,11 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
|
||||
function canPageForward () {
|
||||
var elements = getElements();
|
||||
var lastTab = elements.tabs[ elements.tabs.length - 1 ];
|
||||
|
||||
if (isRtl()) {
|
||||
return ctrl.offsetLeft < elements.paging.offsetWidth - elements.canvas.offsetWidth;
|
||||
}
|
||||
|
||||
return lastTab && lastTab.offsetLeft + lastTab.offsetWidth > elements.canvas.clientWidth +
|
||||
ctrl.offsetLeft;
|
||||
}
|
||||
@@ -35381,7 +35519,7 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
|
||||
if (ctrl.noPagination || !loaded) return false;
|
||||
var canvasWidth = $element.prop('clientWidth');
|
||||
|
||||
angular.forEach(getElements().dummies, function (tab) {
|
||||
angular.forEach(getElements().tabs, function (tab) {
|
||||
canvasWidth -= tab.offsetWidth;
|
||||
});
|
||||
|
||||
@@ -35440,7 +35578,7 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
|
||||
* @returns {number}
|
||||
*/
|
||||
function calcPagingWidth () {
|
||||
return calcTabsWidth(getElements().dummies);
|
||||
return calcTabsWidth(getElements().tabs);
|
||||
}
|
||||
|
||||
function calcTabsWidth(tabs) {
|
||||
@@ -35458,7 +35596,28 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
|
||||
}
|
||||
|
||||
function getMaxTabWidth () {
|
||||
return $element.prop('clientWidth');
|
||||
var elements = getElements(),
|
||||
containerWidth = elements.canvas.clientWidth,
|
||||
|
||||
// See https://material.google.com/components/tabs.html#tabs-specs
|
||||
specMax = 264;
|
||||
|
||||
// Do the spec maximum, or the canvas width; whichever is *smaller* (tabs larger than the canvas
|
||||
// width can break the pagination) but not less than 0
|
||||
return Math.max(0, Math.min(containerWidth - 1, specMax));
|
||||
}
|
||||
|
||||
function getMinTabWidth() {
|
||||
var elements = getElements(),
|
||||
containerWidth = elements.canvas.clientWidth,
|
||||
xsBreakpoint = 600,
|
||||
|
||||
// See https://material.google.com/components/tabs.html#tabs-specs
|
||||
specMin = containerWidth > xsBreakpoint ? 160 : 72;
|
||||
|
||||
// Do the spec minimum, or the canvas width; whichever is *smaller* (tabs larger than the canvas
|
||||
// width can break the pagination) but not less than 0
|
||||
return Math.max(0, Math.min(containerWidth - 1, specMin));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -35492,12 +35651,12 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
|
||||
}
|
||||
|
||||
/**
|
||||
* This is used to forward focus to dummy elements. This method is necessary to avoid animation
|
||||
* issues when attempting to focus an item that is out of view.
|
||||
* This is used to forward focus to tab container elements. This method is necessary to avoid
|
||||
* animation issues when attempting to focus an item that is out of view.
|
||||
*/
|
||||
function redirectFocus () {
|
||||
ctrl.styleTabItemFocus = ($mdInteraction.getLastInteractionType() === 'keyboard');
|
||||
getElements().dummies[ ctrl.focusIndex ].focus();
|
||||
getElements().tabs[ ctrl.focusIndex ].focus();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -35511,9 +35670,25 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
|
||||
if (ctrl.shouldCenterTabs) return;
|
||||
var tab = elements.tabs[ index ],
|
||||
left = tab.offsetLeft,
|
||||
right = tab.offsetWidth + left;
|
||||
ctrl.offsetLeft = Math.max(ctrl.offsetLeft, fixOffset(right - elements.canvas.clientWidth + 32 * 2));
|
||||
ctrl.offsetLeft = Math.min(ctrl.offsetLeft, fixOffset(left));
|
||||
right = tab.offsetWidth + left,
|
||||
extraOffset = 32;
|
||||
|
||||
// If we are selecting the first tab (in LTR and RTL), always set the offset to 0
|
||||
if (index == 0) {
|
||||
ctrl.offsetLeft = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (isRtl()) {
|
||||
var tabWidthsBefore = calcTabsWidth(Array.prototype.slice.call(elements.tabs, 0, index));
|
||||
var tabWidthsIncluding = calcTabsWidth(Array.prototype.slice.call(elements.tabs, 0, index + 1));
|
||||
|
||||
ctrl.offsetLeft = Math.min(ctrl.offsetLeft, fixOffset(tabWidthsBefore));
|
||||
ctrl.offsetLeft = Math.max(ctrl.offsetLeft, fixOffset(tabWidthsIncluding - elements.canvas.clientWidth));
|
||||
} else {
|
||||
ctrl.offsetLeft = Math.max(ctrl.offsetLeft, fixOffset(right - elements.canvas.clientWidth + extraOffset));
|
||||
ctrl.offsetLeft = Math.min(ctrl.offsetLeft, fixOffset(left));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -35670,10 +35845,18 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
|
||||
var elements = getElements();
|
||||
|
||||
if (!elements.tabs.length || !ctrl.shouldPaginate) return 0;
|
||||
|
||||
var lastTab = elements.tabs[ elements.tabs.length - 1 ],
|
||||
totalWidth = lastTab.offsetLeft + lastTab.offsetWidth;
|
||||
value = Math.max(0, value);
|
||||
value = Math.min(totalWidth - elements.canvas.clientWidth, value);
|
||||
|
||||
if (isRtl()) {
|
||||
value = Math.min(elements.paging.offsetWidth - elements.canvas.clientWidth, value);
|
||||
value = Math.max(0, value);
|
||||
} else {
|
||||
value = Math.max(0, value);
|
||||
value = Math.min(totalWidth - elements.canvas.clientWidth, value);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
@@ -35699,6 +35882,10 @@ function MdTabsController ($scope, $element, $window, $mdConstant, $mdTabInkRipp
|
||||
angular.element(nodes).attr('aria-controls', ctrl.tabContentPrefix + tab.id);
|
||||
}
|
||||
}
|
||||
|
||||
function isRtl() {
|
||||
return ($mdUtil.bidi() == 'rtl');
|
||||
}
|
||||
}
|
||||
|
||||
})();
|
||||
@@ -35839,27 +36026,28 @@ function MdTabs ($$mdSvgRegistry) {
|
||||
'<md-icon md-svg-src="'+ $$mdSvgRegistry.mdTabsArrow +'"></md-icon> ' +
|
||||
'</md-next-button> ' +
|
||||
'<md-tabs-canvas ' +
|
||||
'tabindex="{{ $mdTabsCtrl.hasFocus ? -1 : 0 }}" ' +
|
||||
'aria-activedescendant="{{$mdTabsCtrl.getFocusedTabId()}}" ' +
|
||||
'ng-focus="$mdTabsCtrl.redirectFocus()" ' +
|
||||
'ng-class="{ ' +
|
||||
'\'md-paginated\': $mdTabsCtrl.shouldPaginate, ' +
|
||||
'\'md-center-tabs\': $mdTabsCtrl.shouldCenterTabs ' +
|
||||
'}" ' +
|
||||
'ng-keydown="$mdTabsCtrl.keydown($event)" ' +
|
||||
'role="tablist"> ' +
|
||||
'ng-keydown="$mdTabsCtrl.keydown($event)"> ' +
|
||||
'<md-pagination-wrapper ' +
|
||||
'ng-class="{ \'md-center-tabs\': $mdTabsCtrl.shouldCenterTabs }" ' +
|
||||
'md-tab-scroll="$mdTabsCtrl.scroll($event)"> ' +
|
||||
'md-tab-scroll="$mdTabsCtrl.scroll($event)" ' +
|
||||
'role="tablist"> ' +
|
||||
'<md-tab-item ' +
|
||||
'tabindex="-1" ' +
|
||||
'tabindex="{{ tab.isActive() ? 0 : -1 }}" ' +
|
||||
'class="md-tab" ' +
|
||||
'ng-repeat="tab in $mdTabsCtrl.tabs" ' +
|
||||
'role="tab" ' +
|
||||
'id="tab-item-{{::tab.id}}" ' +
|
||||
'md-tab-id="{{::tab.id}}"' +
|
||||
'aria-selected="{{tab.isActive()}}" ' +
|
||||
'aria-disabled="{{tab.scope.disabled || \'false\'}}" ' +
|
||||
'ng-click="$mdTabsCtrl.select(tab.getIndex())" ' +
|
||||
'ng-focus="$mdTabsCtrl.hasFocus = true" ' +
|
||||
'ng-blur="$mdTabsCtrl.hasFocus = false" ' +
|
||||
'ng-class="{ ' +
|
||||
'\'md-active\': tab.isActive(), ' +
|
||||
'\'md-focused\': tab.hasFocus(), ' +
|
||||
@@ -35872,16 +36060,10 @@ function MdTabs ($$mdSvgRegistry) {
|
||||
'md-scope="::tab.parent"></md-tab-item> ' +
|
||||
'<md-ink-bar></md-ink-bar> ' +
|
||||
'</md-pagination-wrapper> ' +
|
||||
'<md-tabs-dummy-wrapper class="md-visually-hidden md-dummy-wrapper"> ' +
|
||||
'<md-tabs-dummy-wrapper aria-hidden="true" class="md-visually-hidden md-dummy-wrapper"> ' +
|
||||
'<md-dummy-tab ' +
|
||||
'class="md-tab" ' +
|
||||
'tabindex="-1" ' +
|
||||
'id="tab-item-{{::tab.id}}" ' +
|
||||
'md-tab-id="{{::tab.id}}"' +
|
||||
'aria-selected="{{tab.isActive()}}" ' +
|
||||
'aria-disabled="{{tab.scope.disabled || \'false\'}}" ' +
|
||||
'ng-focus="$mdTabsCtrl.hasFocus = true" ' +
|
||||
'ng-blur="$mdTabsCtrl.hasFocus = false" ' +
|
||||
'ng-repeat="tab in $mdTabsCtrl.tabs" ' +
|
||||
'md-tabs-template="::tab.label" ' +
|
||||
'md-scope="::tab.parent"></md-dummy-tab> ' +
|
||||
@@ -36032,4 +36214,4 @@ angular.module("material.core").constant("$MD_THEME_CSS", "md-autocomplete.md-TH
|
||||
})();
|
||||
|
||||
|
||||
})(window, window.angular);;window.ngMaterial={version:{full: "1.1.4-master-e1345ae"}};
|
||||
})(window, window.angular);;window.ngMaterial={version:{full: "1.1.4-master-75237c6"}};
|
||||
Reference in New Issue
Block a user