| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282 |
- /*!
- * ui-grid - v4.4.6 - 2018-04-06
- * Copyright (c) 2018 ; License: MIT
- */
- (function () {
- 'use strict';
- /**
- * @ngdoc overview
- * @name ui.grid.pinning
- * @description
- *
- * # ui.grid.pinning
- *
- * <div class="alert alert-success" role="alert"><strong>Stable</strong> This feature is stable. There should no longer be breaking api changes without a deprecation warning.</div>
- *
- * This module provides column pinning to the end user via menu options in the column header
- *
- * <div doc-module-components="ui.grid.pinning"></div>
- */
- var module = angular.module('ui.grid.pinning', ['ui.grid']);
- module.constant('uiGridPinningConstants', {
- container: {
- LEFT: 'left',
- RIGHT: 'right',
- NONE: ''
- }
- });
- module.service('uiGridPinningService', ['gridUtil', 'GridRenderContainer', 'i18nService', 'uiGridPinningConstants', function (gridUtil, GridRenderContainer, i18nService, uiGridPinningConstants) {
- var service = {
- initializeGrid: function (grid) {
- service.defaultGridOptions(grid.options);
- // Register a column builder to add new menu items for pinning left and right
- grid.registerColumnBuilder(service.pinningColumnBuilder);
- /**
- * @ngdoc object
- * @name ui.grid.pinning.api:PublicApi
- *
- * @description Public Api for pinning feature
- */
- var publicApi = {
- events: {
- pinning: {
- /**
- * @ngdoc event
- * @name columnPin
- * @eventOf ui.grid.pinning.api:PublicApi
- * @description raised when column pin state has changed
- * <pre>
- * gridApi.pinning.on.columnPinned(scope, function(colDef){})
- * </pre>
- * @param {object} colDef the column that was changed
- * @param {string} container the render container the column is in ('left', 'right', '')
- */
- columnPinned: function(colDef, container) {
- }
- }
- },
- methods: {
- pinning: {
- /**
- * @ngdoc function
- * @name pinColumn
- * @methodOf ui.grid.pinning.api:PublicApi
- * @description pin column left, right, or none
- * <pre>
- * gridApi.pinning.pinColumn(col, uiGridPinningConstants.container.LEFT)
- * </pre>
- * @param {gridColumn} col the column being pinned
- * @param {string} container one of the recognised types
- * from uiGridPinningConstants
- */
- pinColumn: function(col, container) {
- service.pinColumn(grid, col, container);
- }
- }
- }
- };
- grid.api.registerEventsFromObject(publicApi.events);
- grid.api.registerMethodsFromObject(publicApi.methods);
- },
- defaultGridOptions: function (gridOptions) {
- //default option to true unless it was explicitly set to false
- /**
- * @ngdoc object
- * @name ui.grid.pinning.api:GridOptions
- *
- * @description GridOptions for pinning feature, these are available to be
- * set using the ui-grid {@link ui.grid.class:GridOptions gridOptions}
- */
- /**
- * @ngdoc object
- * @name enablePinning
- * @propertyOf ui.grid.pinning.api:GridOptions
- * @description Enable pinning for the entire grid.
- * <br/>Defaults to true
- */
- gridOptions.enablePinning = gridOptions.enablePinning !== false;
- /**
- * @ngdoc object
- * @name hidePinLeft
- * @propertyOf ui.grid.pinning.api:GridOptions
- * @description Hide Pin Left for the entire grid.
- * <br/>Defaults to false
- */
- gridOptions.hidePinLeft = gridOptions.enablePinning && gridOptions.hidePinLeft;
- /**
- * @ngdoc object
- * @name hidePinRight
- * @propertyOf ui.grid.pinning.api:GridOptions
- * @description Hide Pin Right pinning for the entire grid.
- * <br/>Defaults to false
- */
- gridOptions.hidePinRight = gridOptions.enablePinning && gridOptions.hidePinRight;
- },
- pinningColumnBuilder: function (colDef, col, gridOptions) {
- //default to true unless gridOptions or colDef is explicitly false
- /**
- * @ngdoc object
- * @name ui.grid.pinning.api:ColumnDef
- *
- * @description ColumnDef for pinning feature, these are available to be
- * set using the ui-grid {@link ui.grid.class:GridOptions.columnDef gridOptions.columnDefs}
- */
- /**
- * @ngdoc object
- * @name enablePinning
- * @propertyOf ui.grid.pinning.api:ColumnDef
- * @description Enable pinning for the individual column.
- * <br/>Defaults to true
- */
- colDef.enablePinning = colDef.enablePinning === undefined ? gridOptions.enablePinning : colDef.enablePinning;
- /**
- * @ngdoc object
- * @name hidePinLeft
- * @propertyOf ui.grid.pinning.api:ColumnDef
- * @description Hide Pin Left for the individual column.
- * <br/>Defaults to false
- */
- colDef.hidePinLeft = colDef.hidePinLeft === undefined ? gridOptions.hidePinLeft : colDef.hidePinLeft;
- /**
- * @ngdoc object
- * @name hidePinRight
- * @propertyOf ui.grid.pinning.api:ColumnDef
- * @description Hide Pin Right for the individual column.
- * <br/>Defaults to false
- */
- colDef.hidePinRight = colDef.hidePinRight === undefined ? gridOptions.hidePinRight : colDef.hidePinRight;
- /**
- * @ngdoc object
- * @name pinnedLeft
- * @propertyOf ui.grid.pinning.api:ColumnDef
- * @description Column is pinned left when grid is rendered
- * <br/>Defaults to false
- */
- /**
- * @ngdoc object
- * @name pinnedRight
- * @propertyOf ui.grid.pinning.api:ColumnDef
- * @description Column is pinned right when grid is rendered
- * <br/>Defaults to false
- */
- if (colDef.pinnedLeft) {
- col.renderContainer = 'left';
- col.grid.createLeftContainer();
- }
- else if (colDef.pinnedRight) {
- col.renderContainer = 'right';
- col.grid.createRightContainer();
- }
- if (!colDef.enablePinning) {
- return;
- }
- var pinColumnLeftAction = {
- name: 'ui.grid.pinning.pinLeft',
- title: i18nService.get().pinning.pinLeft,
- icon: 'ui-grid-icon-left-open',
- shown: function () {
- return typeof(this.context.col.renderContainer) === 'undefined' || !this.context.col.renderContainer || this.context.col.renderContainer !== 'left';
- },
- action: function () {
- service.pinColumn(this.context.col.grid, this.context.col, uiGridPinningConstants.container.LEFT);
- }
- };
- var pinColumnRightAction = {
- name: 'ui.grid.pinning.pinRight',
- title: i18nService.get().pinning.pinRight,
- icon: 'ui-grid-icon-right-open',
- shown: function () {
- return typeof(this.context.col.renderContainer) === 'undefined' || !this.context.col.renderContainer || this.context.col.renderContainer !== 'right';
- },
- action: function () {
- service.pinColumn(this.context.col.grid, this.context.col, uiGridPinningConstants.container.RIGHT);
- }
- };
- var removePinAction = {
- name: 'ui.grid.pinning.unpin',
- title: i18nService.get().pinning.unpin,
- icon: 'ui-grid-icon-cancel',
- shown: function () {
- return typeof(this.context.col.renderContainer) !== 'undefined' && this.context.col.renderContainer !== null && this.context.col.renderContainer !== 'body';
- },
- action: function () {
- service.pinColumn(this.context.col.grid, this.context.col, uiGridPinningConstants.container.NONE);
- }
- };
- //// Skip from menu if hidePinLeft or hidePinRight is true
- if (!colDef.hidePinLeft && !gridUtil.arrayContainsObjectWithProperty(col.menuItems, 'name', 'ui.grid.pinning.pinLeft')) {
- col.menuItems.push(pinColumnLeftAction);
- }
- if (!colDef.hidePinRight && !gridUtil.arrayContainsObjectWithProperty(col.menuItems, 'name', 'ui.grid.pinning.pinRight')) {
- col.menuItems.push(pinColumnRightAction);
- }
- if (!gridUtil.arrayContainsObjectWithProperty(col.menuItems, 'name', 'ui.grid.pinning.unpin')) {
- col.menuItems.push(removePinAction);
- }
- },
- pinColumn: function(grid, col, container) {
- if (container === uiGridPinningConstants.container.NONE) {
- col.renderContainer = null;
- col.colDef.pinnedLeft = col.colDef.pinnedRight = false;
- }
- else {
- col.renderContainer = container;
- if (container === uiGridPinningConstants.container.LEFT) {
- grid.createLeftContainer();
- }
- else if (container === uiGridPinningConstants.container.RIGHT) {
- grid.createRightContainer();
- }
- }
- grid.refresh()
- .then(function() {
- grid.api.pinning.raise.columnPinned( col.colDef, container );
- });
- }
- };
- return service;
- }]);
- module.directive('uiGridPinning', ['gridUtil', 'uiGridPinningService',
- function (gridUtil, uiGridPinningService) {
- return {
- require: 'uiGrid',
- scope: false,
- compile: function () {
- return {
- pre: function ($scope, $elm, $attrs, uiGridCtrl) {
- uiGridPinningService.initializeGrid(uiGridCtrl.grid);
- },
- post: function ($scope, $elm, $attrs, uiGridCtrl) {
- }
- };
- }
- };
- }]);
- })();
|