123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- 'use strict';
- /**
- * Licensed Materials - Property of IBM
- * IBM Cognos Products: BI Cloud (C) Copyright IBM Corp. 2014, 2020
- * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
- */
- define(['../lib/@waca/core-client/js/core-client/ui/AccessibleView', '../nls/StringResources', 'jquery', 'doT', 'text!./templates/FocusView.template'], function (View, resources, $, dot, template) {
- //TODO: this logic should be moved to a dashboard-core feature where a content can have the focus
- // and may be setting the focus could be something like: dashboardAPI.getFeature('Focus').setFocus('contentId');
- var FocusView = View.extend({
- init: function init(options) {
- FocusView.inherited('init', this, arguments);
- this._content = options.content;
- this._owner = options.owner;
- this._widgetNode = options.data;
- this._dashboardState = options.dashboardState;
- this._iconsFeature = this._owner.dashboardApi.getFeature('Icons');
- },
- onKeyPress: function onKeyPress(event) {
- if (event.keyCode === 27) {
- // Cancel focus view on ESC key.
- this.cancel();
- }
- },
- onTapBackground: function onTapBackground() {
- // Tap outside card area - same as cancel on mobile devices.
- this.cancel();
- },
- _onClick: function _onClick() {
- this._owner.layoutAPI.offFocus();
- },
- render: function render() {
- var _this = this;
- var parentNode = this.containerElement || document.body;
- var focusViewContainerNode = document.createElement('div');
- focusViewContainerNode.classList.add('focusViewContainer');
- focusViewContainerNode.setAttribute('tabindex', '-1');
- var $container = $(parentNode[0].appendChild(focusViewContainerNode));
- $container.addClass('expandedView');
- this._$container = $container;
- var $card = $('<div class="card gigante widgetFocus" tabindex="-1">');
- $container.append($card);
- var pos = this._owner.getExpandStartingPosition ? this._owner.getExpandStartingPosition() : this._getCardPosition(this._widgetNode.rowDiv);
- var visExpandModeFeature = this._content.getFeature('VisExpandMode');
- if (visExpandModeFeature) {
- this._setFocusState(true);
- visExpandModeFeature.renderExpandedModeContent($card.get(0) /*contentContainer*/);
- var html = dot.template(template)({
- label: resources.get('evCollapse'),
- collapseIcon: this._iconsFeature.getIcon('minimize').id
- });
- var $collapseBtn = $(html);
- $collapseBtn.on('primaryaction', this._collapse.bind(this));
- $card.children().first().append($collapseBtn);
- }
- // setup animation
- var endpos = {
- 'left': 0,
- 'top': 0,
- 'height': '100%',
- 'width': '100%'
- };
- $card.css({
- 'min-height': 'inherit', //not sure why home page set min-height
- top: pos.top,
- left: pos.left
- }).height(pos.height).width(pos.width);
- this._returnPosition = pos;
- $container.show();
- var promise = new Promise(function (resolve) {
- $card.animate(endpos, 'fast', function () {
- if (this.postRenderAnimation) {
- this.postRenderAnimation({
- height: $card.height()
- });
- }
- resolve($container);
- var $popover = $('.popover');
- // close any popover that might have opened while the focus view is being launched.
- if ($popover.length) {
- $popover.popover('hide');
- }
- }.bind(this._owner));
- }.bind(this));
- $('body').on('tap.focusView', '.focusViewContainer.expandedView', this.onTapBackground.bind(this));
- $('body').on('keydown.pageView', this.onKeyPress.bind(this));
- $('body').on('click.widgetContent', '.widgetContent', this._onClick.bind(this));
- // handlers
- $container.on('touch', 'span.expand', function (event) {
- // 'this' points to the expand icon in the card
- event.preventDefault();
- event.stopImmediatePropagation();
- _this._collapse();
- }).on('tap', 'div.card', function (event) {
- // tap inside card should not end things
- event.preventDefault();
- event.stopImmediatePropagation();
- });
- return promise;
- },
- remove: function remove() {
- this._setFocusState(false);
- if (this._$container) {
- this._$container.remove();
- this._$container = null;
- }
- $('body').off('tap.focusView');
- $('body').off('keydown.pageView');
- $('body').off('click.widgetContent');
- return FocusView.inherited('remove', this, arguments);
- },
- _getCardPosition: function _getCardPosition(sourceDiv) {
- var sourceContainer = $(sourceDiv).parents('.cardscroll')[0];
- var scrollOffset = $(sourceContainer).scrollTop();
- var divPos = this._getPosition(sourceDiv);
- divPos.y -= scrollOffset; // adjust by vertical scroll amount
- return {
- top: divPos.y,
- left: divPos.x,
- height: $(sourceDiv).height(),
- width: $(sourceDiv).width()
- };
- },
- /**
- * restore
- * - the widget that was expanded
- * - set the focus to the launch point
- */
- _restoreUI: function _restoreUI() {
- if (this._owner.onRestore) {
- this._owner.onRestore();
- }
- if (this.getLaunchPoint()) {
- this.getLaunchPoint().focus();
- }
- },
- _collapse: function _collapse() {
- this._setFocusState(false);
- var $card = this._$container.find('div.card');
- $card.css({
- 'overflow': 'hidden'
- });
- var fRemove = this.remove.bind(this);
- $card.animate(this._returnPosition, 'fast', function () {
- this._$container.fadeOut('fast', fRemove);
- }.bind(this));
- this._restoreUI();
- },
- cancel: function cancel() {
- this._setFocusState(false);
- if (this._$container) {
- this._$container.fadeOut('fast', this.remove.bind(this));
- this._restoreUI();
- }
- },
- _getPosition: function _getPosition(element) {
- var xPosition = 0;
- var yPosition = 0;
- while (element) {
- xPosition += element.offsetLeft - element.scrollLeft + element.clientLeft;
- yPosition += element.offsetTop - element.scrollTop + element.clientTop;
- element = element.offsetParent;
- }
- return {
- x: xPosition,
- y: yPosition
- };
- },
- _setFocusState: function _setFocusState(isFocus) {
- if (this._dashboardState.getUiState().focus != isFocus) {
- this._dashboardState.updateUiState({
- stateChange: {
- focus: isFocus
- }
- });
- }
- }
- });
- return FocusView;
- });
- //# sourceMappingURL=FocusView.js.map
|