15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @constructor */ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function TaskManager() { } 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cr.addSingletonGetter(TaskManager); 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TaskManager.prototype = { 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Handle window close. 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @this 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onClose: function() { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!this.disabled_) { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.disabled_ = true; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) commands.disableTaskManager(); 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Handles selection changes. 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This is also called when data of tasks are refreshed, even if selection 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * has not been changed. 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @this 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onSelectionChange: function() { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var sm = this.selectionModel_; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var dm = this.dataModel_; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var selectedIndexes = sm.selectedIndexes; 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var isEndProcessEnabled = true; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (selectedIndexes.length == 0) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) isEndProcessEnabled = false; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < selectedIndexes.length; i++) { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var index = selectedIndexes[i]; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var task = dm.item(index); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (task['type'] == 'BROWSER') 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) isEndProcessEnabled = false; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (this.isEndProcessEnabled_ != isEndProcessEnabled) { 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (isEndProcessEnabled) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('kill-process').removeAttribute('disabled'); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('kill-process').setAttribute('disabled', 'true'); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.isEndProcessEnabled_ = isEndProcessEnabled; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Closes taskmanager dialog. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * After this function is called, onClose() will be called. 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @this 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) close: function() { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window.close(); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Sends commands to kill selected processes. 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @this 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) killSelectedProcesses: function() { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var selectedIndexes = this.selectionModel_.selectedIndexes; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var dm = this.dataModel_; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var uniqueIds = []; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < selectedIndexes.length; i++) { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var index = selectedIndexes[i]; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var task = dm.item(index); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uniqueIds.push(task['uniqueId'][0]); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) commands.killSelectedProcesses(uniqueIds); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Initializes taskmanager. 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @this 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) initialize: function(dialogDom, opt) { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!dialogDom) { 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) console.log('ERROR: dialogDom is not defined.'); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) measureTime.startInterval('Load.DOM'); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.opt_ = opt; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.initialized_ = true; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.elementsCache_ = {}; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.dialogDom_ = dialogDom; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.document_ = dialogDom.ownerDocument; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.localized_column_ = []; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < DEFAULT_COLUMNS.length; i++) { 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var columnLabelId = DEFAULT_COLUMNS[i][1]; 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.localized_column_[i] = loadTimeData.getString(columnLabelId); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.initElements_(); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.initColumnModel_(); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.selectionModel_ = new cr.ui.ListSelectionModel(); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.dataModel_ = new cr.ui.ArrayDataModel([]); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.selectionModel_.addEventListener('change', 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.onSelectionChange.bind(this)); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initializes compare functions for column sort. 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var dm = this.dataModel_; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // List of columns to sort by its numerical value as opposed to the 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // formatted value, e.g., 20480 vs. 20KB. 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var COLUMNS_SORTED_BY_VALUE = [ 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'cpuUsage', 'physicalMemory', 'sharedMemory', 'privateMemory', 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'networkUsage', 'webCoreImageCacheSize', 'webCoreScriptsCacheSize', 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'webCoreCSSCacheSize', 'fps', 'videoMemory', 'sqliteMemoryUsed', 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'goatsTeleported', 'v8MemoryAllocatedSize']; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < DEFAULT_COLUMNS.length; i++) { 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var columnId = DEFAULT_COLUMNS[i][0]; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var compareFunc = (function() { 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var columnIdToSort = columnId; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (COLUMNS_SORTED_BY_VALUE.indexOf(columnId) != -1) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) columnIdToSort += 'Value'; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return function(a, b) { 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var aValues = a[columnIdToSort]; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var bValues = b[columnIdToSort]; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var aValue = aValues && aValues[0] || 0; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var bvalue = bValues && bValues[0] || 0; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return dm.defaultValuesCompareFunction(aValue, bvalue); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) })(); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dm.setCompareFunction(columnId, compareFunc); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (isColumnEnabled(DEFAULT_SORT_COLUMN)) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dm.sort(DEFAULT_SORT_COLUMN, DEFAULT_SORT_DIRECTION); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.initTable_(); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) commands.enableTaskManager(); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Populate the static localized strings. 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i18nTemplate.process(this.document_, loadTimeData); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) measureTime.recordInterval('Load.DOM'); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) measureTime.recordInterval('Load.Total'); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadDelayedIncludes(this); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Initializes the visibilities and handlers of the elements. 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This method is called by initialize(). 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @this 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) initElements_: function() { 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // <if expr="pp_ifdef('chromeos')"> 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The 'close-window' element exists only on ChromeOS. 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This <if ... /if> section is removed while flattening HTML if chrome is 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // built as Desktop Chrome. 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!this.opt_['isShowCloseButton']) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('close-window').style.display = 'none'; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('close-window').addEventListener('click', this.close.bind(this)); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // </if> 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('kill-process').addEventListener('click', 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.killSelectedProcesses.bind(this)); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('about-memory-link').addEventListener('click', commands.openAboutMemory); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Additional initialization of taskmanager. This function is called when 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the loading of delayed scripts finished. 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @this 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delayedInitialize: function() { 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.initColumnMenu_(); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.initTableMenu_(); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var dm = this.dataModel_; 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < dm.length; i++) { 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var processId = dm.item(i)['processId'][0]; 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var j = 0; j < DEFAULT_COLUMNS.length; j++) { 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var columnId = DEFAULT_COLUMNS[j][0]; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var row = dm.item(i)[columnId]; 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!row) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var k = 0; k < row.length; k++) { 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var labelId = 'detail-' + columnId + '-pid' + processId + '-' + k; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var label = $(labelId); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize a context-menu, if the label exists and its context- 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // menu is not initialized yet. 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (label && !label.contextMenu) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cr.ui.contextMenuHandler.setContextMenu(label, 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.tableContextMenu_); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.isFinishedInitDelayed_ = true; 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var t = this.table_; 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) t.redraw(); 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) addEventListener('resize', t.redraw.bind(t)); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) initColumnModel_: function() { 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var tableColumns = new Array(); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < DEFAULT_COLUMNS.length; i++) { 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var column = DEFAULT_COLUMNS[i]; 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var columnId = column[0]; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!isColumnEnabled(columnId)) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tableColumns.push(new cr.ui.table.TableColumn(columnId, 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.localized_column_[i], 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) column[2])); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (var i = 0; i < tableColumns.length; i++) { 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tableColumns[i].renderFunction = this.renderColumn_.bind(this); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.columnModel_ = new cr.ui.table.TableColumnModel(tableColumns); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) initColumnMenu_: function() { 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.column_menu_commands_ = []; 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.commandsElement_ = this.document_.createElement('commands'); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.document_.body.appendChild(this.commandsElement_); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.columnSelectContextMenu_ = this.document_.createElement('menu'); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < DEFAULT_COLUMNS.length; i++) { 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var column = DEFAULT_COLUMNS[i]; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates command element to receive event. 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var command = this.document_.createElement('command'); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command.id = COMMAND_CONTEXTMENU_COLUMN_PREFIX + '-' + column[0]; 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cr.ui.Command.decorate(command); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.column_menu_commands_[command.id] = command; 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.commandsElement_.appendChild(command); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates menuitem element. 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var item = this.document_.createElement('menuitem'); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) item.command = command; 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command.menuitem = item; 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) item.textContent = this.localized_column_[i]; 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (isColumnEnabled(column[0])) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) item.setAttributeNode(this.document_.createAttribute('checked')); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.columnSelectContextMenu_.appendChild(item); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.document_.body.appendChild(this.columnSelectContextMenu_); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cr.ui.Menu.decorate(this.columnSelectContextMenu_); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cr.ui.contextMenuHandler.setContextMenu(this.table_.header, 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.columnSelectContextMenu_); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cr.ui.contextMenuHandler.setContextMenu(this.table_.list, 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.columnSelectContextMenu_); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.document_.addEventListener('command', this.onCommand_.bind(this)); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.document_.addEventListener('canExecute', 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.onCommandCanExecute_.bind(this)); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) initTableMenu_: function() { 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.table_menu_commands_ = []; 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.tableContextMenu_ = this.document_.createElement('menu'); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var addMenuItem = function(tm, commandId, string_id) { 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates command element to receive event. 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var command = tm.document_.createElement('command'); 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) command.id = COMMAND_CONTEXTMENU_TABLE_PREFIX + '-' + commandId; 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cr.ui.Command.decorate(command); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tm.table_menu_commands_[command.id] = command; 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tm.commandsElement_.appendChild(command); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates menuitem element. 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var item = tm.document_.createElement('menuitem'); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) item.command = command; 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command.menuitem = item; 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) item.textContent = loadTimeData.getString(string_id); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tm.tableContextMenu_.appendChild(item); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addMenuItem(this, 'inspect', 'inspect'); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addMenuItem(this, 'activate', 'activate'); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.document_.body.appendChild(this.tableContextMenu_); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cr.ui.Menu.decorate(this.tableContextMenu_); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) initTable_: function() { 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!this.dataModel_ || !this.selectionModel_ || !this.columnModel_) { 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) console.log('ERROR: some models are not defined.'); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.table_ = this.dialogDom_.querySelector('.detail-table'); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cr.ui.Table.decorate(this.table_); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.table_.dataModel = this.dataModel_; 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.table_.selectionModel = this.selectionModel_; 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.table_.columnModel = this.columnModel_; 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Expands height of row when a process has some tasks. 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.table_.fixedHeight = false; 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.table_.list.addEventListener('contextmenu', 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.onTableContextMenuOpened_.bind(this), 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets custom row render function. 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.table_.setRenderFunction(this.getRow_.bind(this)); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns a list item element of the list. This method trys to reuse the 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * cached element, or creates a new element. 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {cr.ui.ListItem} list item element which contains the given data. 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @this 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getRow_: function(data, table) { 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Trys to reuse the cached row; 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var listItemElement = this.renderRowFromCache_(data, table); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (listItemElement) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return listItemElement; 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initializes the cache. 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var pid = data['processId'][0]; 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.elementsCache_[pid] = { 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) listItem: null, 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cell: [], 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) icon: [], 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) columns: {} 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create new row. 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.renderRow_(data, table); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns a list item element with re-using the previous cached element, or 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * returns null if failed. 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {cr.ui.ListItem} cached un-used element to be reused. 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @this 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) renderRowFromCache_: function(data, table) { 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var pid = data['processId'][0]; 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Checks whether the cache exists or not. 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var cache = this.elementsCache_[pid]; 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!cache) 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return null; 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var listItemElement = cache.listItem; 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var cm = table.columnModel; 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Checks whether the number of columns has been changed or not. 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cache.cachedColumnSize != cm.size) 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return null; 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Checks whether the number of childlen tasks has been changed or not. 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cache.cachedChildSize != data['uniqueId'].length) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return null; 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Updates informations of the task if necessary. 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < cm.size; i++) { 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var columnId = cm.getId(i); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var columnData = data[columnId]; 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var oldColumnData = listItemElement.data[columnId]; 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var columnElements = cache.columns[columnId]; 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!columnData || !oldColumnData || !columnElements) 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return null; 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets new width of the cell. 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var cellElement = cache.cell[i]; 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cellElement.style.width = cm.getWidth(i) + '%'; 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var j = 0; j < columnData.length; j++) { 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the new text, if the text has been changed. 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (oldColumnData[j] != columnData[j]) { 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var textElement = columnElements[j]; 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) textElement.textContent = columnData[j]; 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Updates icon of the task if necessary. 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var oldIcons = listItemElement.data['icon']; 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var newIcons = data['icon']; 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (oldIcons && newIcons) { 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var j = 0; j < columnData.length; j++) { 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var oldIcon = oldIcons[j]; 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var newIcon = newIcons[j]; 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (oldIcon != newIcon) { 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var iconElement = cache.icon[j]; 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iconElement.src = newIcon; 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) listItemElement.data = data; 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Removes 'selected' and 'lead' attributes. 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) listItemElement.removeAttribute('selected'); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) listItemElement.removeAttribute('lead'); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return listItemElement; 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Create a new list item element. 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {cr.ui.ListItem} created new list item element. 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @this 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) renderRow_: function(data, table) { 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var pid = data['processId'][0]; 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var cm = table.columnModel; 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var listItem = new cr.ui.ListItem({label: ''}); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) listItem.className = 'table-row'; 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < cm.size; i++) { 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var cell = document.createElement('div'); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cell.style.width = cm.getWidth(i) + '%'; 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cell.className = 'table-row-cell'; 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cell.id = 'column-' + pid + '-' + cm.getId(i); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cell.appendChild( 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cm.getRenderFunction(i).call(null, data, cm.getId(i), table)); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) listItem.appendChild(cell); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stores the cell element to the dictionary. 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.elementsCache_[pid].cell[i] = cell; 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Specifies the height of the row. The height of each row is 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 'num_of_tasks * HEIGHT_OF_TASK' px. 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) listItem.style.height = (data['uniqueId'].length * HEIGHT_OF_TASK) + 'px'; 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) listItem.data = data; 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stores the list item element, the number of columns and the number of 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // childlen. 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.elementsCache_[pid].listItem = listItem; 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.elementsCache_[pid].cachedColumnSize = cm.size; 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.elementsCache_[pid].cachedChildSize = data['uniqueId'].length; 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return listItem; 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Create a new element of the cell. 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {HTMLDIVElement} created cell 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @this 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) renderColumn_: function(entry, columnId, table) { 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var container = this.document_.createElement('div'); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.className = 'detail-container-' + columnId; 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var pid = entry['processId'][0]; 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var cache = []; 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var cacheIcon = []; 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (entry && entry[columnId]) { 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.id = 'detail-container-' + columnId + '-pid' + entry.processId; 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < entry[columnId].length; i++) { 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var label = document.createElement('div'); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (columnId == 'title') { 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a page title element with icon. 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var image = this.document_.createElement('img'); 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) image.className = 'detail-title-image'; 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) image.src = entry['icon'][i]; 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) image.id = 'detail-title-icon-pid' + pid + '-' + i; 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) label.appendChild(image); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var text = this.document_.createElement('div'); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text.className = 'detail-title-text'; 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text.id = 'detail-title-text-pid' + pid + '-' + i; 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text.textContent = entry['title'][i]; 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) label.appendChild(text); 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Chech if the delayed scripts (included in includes.js) have been 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // loaded or not. If the delayed scripts ware not loaded yet, a 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // context menu could not be initialized. In such case, it will be 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // initialized at delayedInitialize() just after loading of delayed 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // scripts instead of here. 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.isFinishedInitDelayed_) 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cr.ui.contextMenuHandler.setContextMenu(label, 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.tableContextMenu_); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) label.addEventListener('dblclick', (function(uniqueId) { 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) commands.activatePage(uniqueId); 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }).bind(this, entry['uniqueId'][i])); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) label.data = entry; 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) label.index_in_group = i; 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cache[i] = text; 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cacheIcon[i] = image; 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) label.textContent = entry[columnId][i]; 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cache[i] = label; 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) label.id = 'detail-' + columnId + '-pid' + pid + '-' + i; 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) label.className = 'detail-' + columnId + ' pid' + pid; 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.appendChild(label); 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.elementsCache_[pid].columns[columnId] = cache; 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (columnId == 'title') 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.elementsCache_[pid].icon = cacheIcon; 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return container; 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Updates the task list with the supplied task. 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @this 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) processTaskChange: function(task) { 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var dm = this.dataModel_; 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var sm = this.selectionModel_; 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!dm || !sm) return; 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.table_.list.startBatchUpdates(); 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sm.beginChange(); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var type = task.type; 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var start = task.start; 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var length = task.length; 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var tasks = task.tasks; 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We have to store the selected pids and restore them after 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // splice(), because it might replace some items but the replaced 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // items would lose the selection. 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var oldSelectedIndexes = sm.selectedIndexes; 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create map of selected PIDs. 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var selectedPids = {}; 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < oldSelectedIndexes.length; i++) { 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var item = dm.item(oldSelectedIndexes[i]); 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (item) selectedPids[item['processId'][0]] = true; 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var args = tasks.slice(); 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) args.unshift(start, dm.length); 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dm.splice.apply(dm, args); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create new array of selected indexes from map of old PIDs. 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var newSelectedIndexes = []; 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < dm.length; i++) { 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (selectedPids[dm.item(i)['processId'][0]]) 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) newSelectedIndexes.push(i); 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sm.selectedIndexes = newSelectedIndexes; 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var pids = []; 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < dm.length; i++) { 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pids.push(dm.item(i)['processId'][0]); 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sweeps unused caches, which elements no longer exist on the list. 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var pid in this.elementsCache_) { 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (pids.indexOf(pid) == -1) 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete this.elementsCache_[pid]; 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sm.endChange(); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.table_.list.endBatchUpdates(); 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Respond to a command being executed. 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @this 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onCommand_: function(event) { 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var command = event.command; 5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var commandId = command.id.split('-', 2); 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var mainCommand = commandId[0]; 5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var subCommand = commandId[1]; 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (mainCommand == COMMAND_CONTEXTMENU_COLUMN_PREFIX) { 5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.onColumnContextMenu_(subCommand, command); 5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (mainCommand == COMMAND_CONTEXTMENU_TABLE_PREFIX) { 6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var targetUniqueId = this.currentContextMenuTarget_; 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!targetUniqueId) 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (subCommand == 'inspect') 6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) commands.inspect(targetUniqueId); 6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (subCommand == 'activate') 6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) commands.activatePage(targetUniqueId); 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.currentContextMenuTarget_ = undefined; 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onCommandCanExecute_: function(event) { 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event.canExecute = true; 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Store resourceIndex of target resource of context menu, because resource 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * will be replaced when it is refreshed. 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @this 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onTableContextMenuOpened_: function(e) { 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!this.isFinishedInitDelayed_) 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var mc = this.table_menu_commands_; 6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var inspectMenuitem = 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mc[COMMAND_CONTEXTMENU_TABLE_PREFIX + '-inspect'].menuitem; 6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var activateMenuitem = 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mc[COMMAND_CONTEXTMENU_TABLE_PREFIX + '-activate'].menuitem; 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disabled by default. 6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) inspectMenuitem.disabled = true; 6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) activateMenuitem.disabled = true; 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var target = e.target; 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (;; target = target.parentNode) { 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!target) return; 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var classes = target.classList; 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (classes && 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Array.prototype.indexOf.call(classes, 'detail-title') != -1) break; 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var indexInGroup = target.index_in_group; 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the uniqueId for current target page under the mouse corsor. 6482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.currentContextMenuTarget_ = target.data['uniqueId'][indexInGroup]; 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enables if the page can be inspected. 6512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (target.data['canInspect'][indexInGroup]) 6522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) inspectMenuitem.disabled = false; 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enables if the page can be activated. 6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (target.data['canActivate'][indexInGroup]) 6562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) activateMenuitem.disabled = false; 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onColumnContextMenu_: function(columnId, command) { 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var menuitem = command.menuitem; 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var checkedItemCount = 0; 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var checked = isColumnEnabled(columnId); 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Leaves a item visible when user tries making invisible but it is the 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // last one. 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var enabledColumns = getEnabledColumns(); 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var id in enabledColumns) { 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enabledColumns[id]) 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkedItemCount++; 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (checkedItemCount == 1 && checked) 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Toggles the visibility of the column. 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var newChecked = !checked; 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menuitem.checked = newChecked; 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setColumnEnabled(columnId, newChecked); 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.initColumnModel_(); 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.table_.columnModel = this.columnModel_; 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.table_.redraw(); 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |taskmanager| has been declared in preload.js. 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)taskmanager = TaskManager.getInstance(); 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function init() { 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var params = parseQueryParams(window.location); 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var opt = {}; 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opt['isShowCloseButton'] = params.showclose; 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) taskmanager.initialize(document.body, opt); 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)document.addEventListener('DOMContentLoaded', init); 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)document.addEventListener('Close', taskmanager.onClose.bind(taskmanager)); 697