Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(768)

Unified Diff: third_party/WebKit/Source/devtools/front_end/ui/ViewportControl.js

Issue 2592433003: [DevTools] Replace ViewportControl with ListControl. (Closed)
Patch Set: tests Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/devtools/front_end/ui/ViewportControl.js
diff --git a/third_party/WebKit/Source/devtools/front_end/ui/ViewportControl.js b/third_party/WebKit/Source/devtools/front_end/ui/ViewportControl.js
deleted file mode 100644
index dbd36008c8a08dd7baf1be0f7679ec221d521a0e..0000000000000000000000000000000000000000
--- a/third_party/WebKit/Source/devtools/front_end/ui/ViewportControl.js
+++ /dev/null
@@ -1,169 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-/**
- * @unrestricted
- */
-UI.ViewportControl = class {
- /**
- * @param {!UI.ViewportControl.Provider} provider
- */
- constructor(provider) {
- this.element = createElement('div');
- this.element.style.overflow = 'auto';
- this._innerElement = this.element.createChild('div');
- this._innerElement.style.height = '0px';
- this._innerElement.style.position = 'relative';
- this._innerElement.style.overflow = 'hidden';
-
- this._provider = provider;
- this.element.addEventListener('scroll', this._update.bind(this), false);
- this._itemCount = 0;
- this._indexSymbol = Symbol('UI.ViewportControl._indexSymbol');
- }
-
- refresh() {
- this._itemCount = this._provider.itemCount();
- this._innerElement.removeChildren();
-
- var height = 0;
- this._cumulativeHeights = new Int32Array(this._itemCount);
- for (var i = 0; i < this._itemCount; ++i) {
- height += this._provider.fastItemHeight(i);
- this._cumulativeHeights[i] = height;
- }
- this._innerElement.style.height = height + 'px';
-
- this._update();
- }
-
- _update() {
- if (!this._cumulativeHeights) {
- this.refresh();
- return;
- }
-
- var visibleHeight = this._visibleHeight();
- var visibleFrom = this.element.scrollTop;
- var activeHeight = visibleHeight * 2;
- var firstActiveIndex = Math.max(
- Array.prototype.lowerBound.call(this._cumulativeHeights, visibleFrom + 1 - (activeHeight - visibleHeight) / 2),
- 0);
- var lastActiveIndex = Math.min(
- Array.prototype.lowerBound.call(
- this._cumulativeHeights, visibleFrom + visibleHeight + (activeHeight - visibleHeight) / 2),
- this._itemCount - 1);
-
- var children = this._innerElement.children;
- for (var i = children.length - 1; i >= 0; --i) {
- var element = children[i];
- if (element[this._indexSymbol] < firstActiveIndex || element[this._indexSymbol] > lastActiveIndex)
- element.remove();
- }
-
- for (var i = firstActiveIndex; i <= lastActiveIndex; ++i)
- this._insertElement(i);
- }
-
- /**
- * @param {number} index
- */
- _insertElement(index) {
- var element = this._provider.itemElement(index);
- if (!element || element.parentElement === this._innerElement)
- return;
-
- element.style.position = 'absolute';
- element.style.top = (this._cumulativeHeights[index - 1] || 0) + 'px';
- element.style.left = '0';
- element.style.right = '0';
- element[this._indexSymbol] = index;
- this._innerElement.appendChild(element);
- }
-
- /**
- * @return {number}
- */
- firstVisibleIndex() {
- return Math.max(Array.prototype.lowerBound.call(this._cumulativeHeights, this.element.scrollTop + 1), 0);
- }
-
- /**
- * @return {number}
- */
- lastVisibleIndex() {
- return Math.min(
- Array.prototype.lowerBound.call(this._cumulativeHeights, this.element.scrollTop + this._visibleHeight()),
- this._itemCount);
- }
-
- /**
- * @param {number} index
- * @param {boolean=} makeLast
- */
- scrollItemIntoView(index, makeLast) {
- var firstVisibleIndex = this.firstVisibleIndex();
- var lastVisibleIndex = this.lastVisibleIndex();
- if (index > firstVisibleIndex && index < lastVisibleIndex)
- return;
- if (makeLast)
- this.forceScrollItemToBeLast(index);
- else if (index <= firstVisibleIndex)
- this.forceScrollItemToBeFirst(index);
- else if (index >= lastVisibleIndex)
- this.forceScrollItemToBeLast(index);
- }
-
- /**
- * @param {number} index
- */
- forceScrollItemToBeFirst(index) {
- this.element.scrollTop = index > 0 ? this._cumulativeHeights[index - 1] : 0;
- this._update();
- }
-
- /**
- * @param {number} index
- */
- forceScrollItemToBeLast(index) {
- this.element.scrollTop = this._cumulativeHeights[index] - this._visibleHeight();
- this._update();
- }
-
- /**
- * @return {number}
- */
- _visibleHeight() {
- return this.element.offsetHeight;
- }
-};
-
-/**
- * @interface
- */
-UI.ViewportControl.Provider = function() {};
-
-UI.ViewportControl.Provider.prototype = {
- /**
- * @param {number} index
- * @return {number}
- */
- fastItemHeight(index) {
- return 0;
- },
-
- /**
- * @return {number}
- */
- itemCount() {
- return 0;
- },
-
- /**
- * @param {number} index
- * @return {?Element}
- */
- itemElement(index) {
- return null;
- }
-};

Powered by Google App Engine
This is Rietveld 408576698