123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- /**
- * @class SimpleTasks.ux.ReminderColumn
- * @extends Ext.grid.column.Column
- * A grid column for selecting reminder times
- */
- Ext.define('SimpleTasks.ux.ReminderColumn', {
- extend: 'Ext.grid.column.Column',
- xtype: 'remindercolumn',
- config: {
- /**
- * @cfg {String} menuPosition
- * Positing to show the menu relative to the reminder icon.
- * Alignment position as used by Ext.Element.getAlignToXY
- * Defaults to 'tl-bl'
- */
- menuPosition: 'tl-bl'
- },
- tdCls: Ext.baseCSSPrefix + 'grid-cell-remindercolumn',
- constructor: function() {
- this.addEvents(
- /**
- * @event select
- * Fires when a reminder time is selected from the dropdown menu
- * @param {Ext.data.Model} record The underlying record of the row that was clicked to show the reminder menu
- * @param {String|Number} value The value that was selected
- */
- 'select'
- );
- this.callParent(arguments);
- },
- /**
- * initializes the dropdown menu
- * @private
- */
- initMenu: function() {
- var me = this,
- items = [];
- function createItem(text, value) {
- return {
- text: text,
- listeners: {
- click: Ext.bind(me.handleMenuItemClick, me, [value], true)
- }
- }
- }
- items.push(createItem('No Reminder'));
- items.push({xtype: 'menuseparator'});
- items.push(createItem('1 day before', 1));
- items.push(createItem('2 days before', 2));
- items.push(createItem('3 days before', 3));
- items.push(createItem('1 week before', 7));
- items.push(createItem('2 weeks before', 14));
- items.push(createItem('Set Default Time...', 'set'));
- me.menu = Ext.create('Ext.menu.Menu', {
- plain: true,
- items: items
- });
- },
- /**
- * Handles a click on a menu item
- * @private
- * @param {Ext.menu.Item} menuItem
- * @param {Ext.EventObject} e
- * @param {Object} options
- * @param {String|Number} value
- */
- handleMenuItemClick: function(menuItem, options, e, value) {
- this.fireEvent('select', this.record, value);
- },
- /**
- * Process and refire events routed from the GridView's processEvent method.
- * @private
- */
- processEvent: function(type, view, cell, rowIndex, colIndex, e) {
- var me = this,
- cssPrefix = Ext.baseCSSPrefix,
- target = Ext.get(e.getTarget());
- if (target.hasCls(cssPrefix + 'grid-reminder')) {
- if(type === 'click') {
- if(!me.menu) {
- me.initMenu();
- }
- me.record = view.store.getAt(rowIndex);
- me.menu.showBy(target, me.menuPosition);
- }
- } else {
- return me.callParent(arguments);
- }
- },
- /**
- * Renderer for the reminder column
- * @private
- * @param {Number} value
- * @param {Object} metaData
- * @param {SimpleTasks.model.Task} task
- * @param {Number} rowIndex
- * @param {Number} colIndex
- * @param {SimpleTasks.store.Tasks} store
- * @param {Ext.grid.View} view
- */
- renderer : function(value, metaData, task, rowIndex, colIndex, store, view){
- var cssPrefix = Ext.baseCSSPrefix,
- cls = [cssPrefix + 'grid-reminder'];
- if(task.get('done') || !task.get('due')) {
- // if the task is done or has no due date, a reminder cannot be set
- return '';
- }
- if (!value) {
- cls.push(cssPrefix + 'grid-reminder-empty');
- }
- return '<div class="' + cls.join(' ') + '"></div>';
- }
- });
|