| Index: chrome/browser/resources/file_manager/js/image_editor/gallery.js
|
| ===================================================================
|
| --- chrome/browser/resources/file_manager/js/image_editor/gallery.js (revision 112662)
|
| +++ chrome/browser/resources/file_manager/js/image_editor/gallery.js (working copy)
|
| @@ -501,24 +501,9 @@
|
| this.arrowRight_.
|
| addEventListener('click', this.selectNext.bind(this, 1, null));
|
|
|
| - this.fadeLeft_ = this.document_.createElement('div');
|
| - this.fadeLeft_.className = 'fade left';
|
| - this.container_.appendChild(this.fadeLeft_);
|
| -
|
| - this.bars_ = [];
|
| - for (var i = 0; i < 2; i++) {
|
| - var bar = this.document_.createElement('div');
|
| - bar.className = 'ribbon';
|
| - this.container_.appendChild(bar);
|
| - this.bars_.push(bar);
|
| - }
|
| - this.activeBarIndex_ = 0;
|
| - ImageUtil.setAttribute(this.bars_[0], 'inactive', false);
|
| - ImageUtil.setAttribute(this.bars_[1], 'inactive', true);
|
| -
|
| - this.fadeRight_ = this.document_.createElement('div');
|
| - this.fadeRight_.className = 'fade right';
|
| - this.container_.appendChild(this.fadeRight_);
|
| + this.bar_ = this.document_.createElement('div');
|
| + this.bar_.className = 'ribbon';
|
| + this.container_.appendChild(this.bar_);
|
| }
|
|
|
| Ribbon.PAGING_SINGLE_ITEM_DELAY = 20;
|
| @@ -529,11 +514,7 @@
|
| };
|
|
|
| Ribbon.prototype.clear = function() {
|
| - this.bars_[0].textContent = '';
|
| - this.bars_[1].textContent = '';
|
| - this.activeBarIndex_ = 0;
|
| - ImageUtil.setAttribute(this.bars_[0], 'inactive', false);
|
| - ImageUtil.setAttribute(this.bars_[1], 'inactive', true);
|
| + this.bar_.textContent = '';
|
| this.items_ = [];
|
| this.selectedIndex_ = -1;
|
| this.firstVisibleIndex_ = 0;
|
| @@ -639,89 +620,96 @@
|
| });
|
| };
|
|
|
| -Ribbon.prototype.updateControls_ = function() {
|
| - ImageUtil.setAttribute(this.fadeLeft_, 'active', this.firstVisibleIndex_ > 0);
|
| - ImageUtil.setAttribute(this.fadeRight_, 'active',
|
| - this.lastVisibleIndex_ + 1 < this.items_.length);
|
| -};
|
| +Ribbon.ITEMS_COUNT = 5;
|
|
|
| Ribbon.prototype.redraw = function() {
|
| - // The thumbnails are square.
|
| - var itemWidth = this.bars_[0].parentNode.clientHeight;
|
| - var width = this.bars_[0].parentNode.clientWidth;
|
| + // TODO(dgozman): use margin instead of 2 here.
|
| + var itemWidth = this.bar_.clientHeight - 2;
|
| + var fullItems = Ribbon.ITEMS_COUNT;
|
| + fullItems = Math.min(fullItems, this.items_.length);
|
| + var right = Math.floor((fullItems - 1) / 2);
|
|
|
| - var fullItems = Math.floor(width / itemWidth);
|
| -
|
| var fullWidth = fullItems * itemWidth;
|
| + this.bar_.style.width = fullWidth + 'px';
|
|
|
| - this.bars_[0].style.width = fullWidth + 'px';
|
| - this.bars_[1].style.width = fullWidth + 'px';
|
| + var lastIndex = this.selectedIndex_ + right;
|
| + lastIndex = Math.max(lastIndex, fullItems - 1);
|
| + lastIndex = Math.min(lastIndex, this.items_.length - 1);
|
| + var firstIndex = lastIndex - fullItems + 1;
|
|
|
| - // Position the shadows over the first and the last visible thumbnails.
|
| - this.fadeLeft_.style.left = 0;
|
| - this.fadeRight_.style.right = (width - fullWidth) + 'px';
|
| -
|
| - fullItems = Math.min(fullItems, this.items_.length);
|
| - var firstIndex = this.firstVisibleIndex_;
|
| - var lastIndex = firstIndex + fullItems - 1;
|
| -
|
| - if (this.selectedIndex_ <= firstIndex && firstIndex > 0) {
|
| - firstIndex = Math.max(0, this.selectedIndex_ - (fullItems >> 1));
|
| - lastIndex = firstIndex + fullItems - 1;
|
| - }
|
| -
|
| - if (this.selectedIndex_ >= lastIndex && lastIndex < this.items_.length - 1) {
|
| - lastIndex = Math.min(this.items_.length - 1,
|
| - this.selectedIndex_ + (fullItems >> 1));
|
| - firstIndex = lastIndex - fullItems + 1;
|
| - }
|
| -
|
| - this.updateControls_();
|
| -
|
| if (this.firstVisibleIndex_ == firstIndex &&
|
| this.lastVisibleIndex_ == lastIndex) {
|
| return;
|
| }
|
|
|
| - var activeBar = this.bars_[this.activeBarIndex_];
|
| - var children = activeBar.childNodes;
|
| - var totalDuration = children.length * Ribbon.PAGING_SINGLE_ITEM_DELAY +
|
| - Ribbon.PAGING_ANIMATION_DURATION;
|
| + if (this.lastVisibleIndex_ == -1) {
|
| + this.firstVisibleIndex_ = firstIndex;
|
| + this.lastVisibleIndex_ = lastIndex;
|
| + }
|
|
|
| - var direction = 1;
|
| - var delay = 0;
|
| - if (firstIndex < this.firstVisibleIndex_) {
|
| - direction = -1;
|
| - delay = (children.length - 1) * Ribbon.PAGING_SINGLE_ITEM_DELAY;
|
| + this.bar_.textContent = '';
|
| + var startIndex = Math.min(firstIndex, this.firstVisibleIndex_);
|
| + var toRemove = [];
|
| + for (var index = startIndex + 1;
|
| + index <= Math.max(lastIndex, this.lastVisibleIndex_);
|
| + ++index) {
|
| + var box = this.items_[index].getBox(0);
|
| + box.style.marginLeft = '0';
|
| + this.bar_.appendChild(box);
|
| + if (index < firstIndex || index > lastIndex) {
|
| + toRemove.push(index);
|
| + }
|
| }
|
| - for (var index = 0; index < children.length; ++index) {
|
| - setTimeout(
|
| - ImageUtil.setAttribute.bind(null, children[index], 'inactive', true),
|
| - delay);
|
| - delay += direction * Ribbon.PAGING_SINGLE_ITEM_DELAY;
|
| +
|
| + var margin = itemWidth * Math.abs(firstIndex - this.firstVisibleIndex_);
|
| + var startBox = this.items_[startIndex].getBox(0);
|
| + if (startIndex == firstIndex) {
|
| + startBox.style.marginLeft = -margin + 'px';
|
| + if (this.bar_.firstChild)
|
| + this.bar_.insertBefore(startBox, this.bar_.firstChild);
|
| + else
|
| + this.bar_.appendChild(startBox);
|
| + setTimeout(function() {
|
| + startBox.style.marginLeft = '0';
|
| + }, 0);
|
| + } else {
|
| + toRemove.push(startBox);
|
| + startBox.style.marginLeft = '0';
|
| + if (this.bar_.firstChild)
|
| + this.bar_.insertBefore(startBox, this.bar_.firstChild);
|
| + else
|
| + this.bar_.appendChild(startBox);
|
| + setTimeout(function() {
|
| + startBox.style.marginLeft = -margin + 'px';
|
| + }, 0);
|
| }
|
|
|
| - // Place inactive bar below active after animation is finished.
|
| - setTimeout(
|
| - ImageUtil.setAttribute.bind(null, activeBar, 'inactive', true),
|
| - totalDuration);
|
| + if (firstIndex > 0 && this.selectedIndex_ != firstIndex) {
|
| + this.bar_.classList.add('fade-left');
|
| + } else {
|
| + this.bar_.classList.remove('fade-left');
|
| + }
|
|
|
| + if (lastIndex < this.items_.length - 1 && this.selectedIndex_ != lastIndex) {
|
| + this.bar_.classList.add('fade-right');
|
| + } else {
|
| + this.bar_.classList.remove('fade-right');
|
| + }
|
| +
|
| this.firstVisibleIndex_ = firstIndex;
|
| this.lastVisibleIndex_ = lastIndex;
|
|
|
| - this.activeBarIndex_ = 1 - this.activeBarIndex_;
|
| - activeBar = this.bars_[this.activeBarIndex_];
|
| - activeBar.textContent = '';
|
| - for (var index = firstIndex; index <= lastIndex; ++index) {
|
| - var box = this.items_[index].getBox(this.activeBarIndex_);
|
| - ImageUtil.setAttribute(box, 'inactive', false);
|
| - activeBar.appendChild(box);
|
| - }
|
| -
|
| - // Place active bar above inactive after animation is finished.
|
| - setTimeout(
|
| - ImageUtil.setAttribute.bind(null, activeBar, 'inactive', false),
|
| - totalDuration);
|
| + var self = this;
|
| + setTimeout(function() {
|
| + for (var i = 0; i < toRemove.length; i++) {
|
| + var index = toRemove[i];
|
| + if (i < this.firstVisibleIndex_ || i > this.lastVisibleIndex_) {
|
| + var box = this.items_[index].getBox(0);
|
| + if (box.parentNode == this.bar_)
|
| + this.bar_.removeChild(box);
|
| + }
|
| + }
|
| + }, 200);
|
| };
|
|
|
| Ribbon.prototype.getNextSelectedIndex_ = function(direction) {
|
| @@ -765,34 +753,24 @@
|
| this.index_ = index;
|
| this.url_ = url;
|
|
|
| - this.boxes_ = [];
|
| - this.wrappers_ = [];
|
| - this.imgs_ = [];
|
| + this.box_ = document.createElement('div');
|
| + this.box_.className = 'ribbon-image';
|
| + this.box_.addEventListener('click', selectClosure);
|
|
|
| - for (var i = 0; i < 2; i++) {
|
| - var box = document.createElement('div');
|
| - box.className = 'ribbon-image';
|
| - box.addEventListener('click', selectClosure);
|
| + this.wrapper_ = document.createElement('div');
|
| + this.wrapper_.className = 'image-wrapper';
|
| + this.box_.appendChild(this.wrapper_);
|
|
|
| - var wrapper = document.createElement('div');
|
| - wrapper.className = 'image-wrapper';
|
| - box.appendChild(wrapper);
|
| + this.img_ = document.createElement('img');
|
| + this.wrapper_.appendChild(this.img_);
|
|
|
| - var img = document.createElement('img');
|
| - wrapper.appendChild(img);
|
| -
|
| - this.boxes_.push(box);
|
| - this.wrappers_.push(wrapper);
|
| - this.imgs_.push(img);
|
| - }
|
| -
|
| this.original_ = true;
|
| this.copyName_ = null;
|
| };
|
|
|
| Ribbon.Item.prototype.getIndex = function () { return this.index_ };
|
|
|
| -Ribbon.Item.prototype.getBox = function (index) { return this.boxes_[index] };
|
| +Ribbon.Item.prototype.getBox = function () { return this.box_ };
|
|
|
| Ribbon.Item.prototype.isOriginal = function () { return this.original_ };
|
|
|
| @@ -802,13 +780,11 @@
|
| Ribbon.Item.prototype.getCopyName = function () { return this.copyName_ };
|
|
|
| Ribbon.Item.prototype.isSelected = function() {
|
| - return this.boxes_[0].hasAttribute('selected');
|
| + return this.box_.hasAttribute('selected');
|
| };
|
|
|
| Ribbon.Item.prototype.select = function(on) {
|
| - for (var i = 0; i < 2; i++) {
|
| - ImageUtil.setAttribute(this.boxes_[i], 'selected', on);
|
| - }
|
| + ImageUtil.setAttribute(this.box_, 'selected', on);
|
| };
|
|
|
| Ribbon.Item.prototype.updateThumbnail = function(canvas) {
|
| @@ -1019,34 +995,31 @@
|
| 'scaleY(' + transform.scaleY + ') ' +
|
| 'rotate(' + transform.rotate90 * 90 + 'deg)') :
|
| '';
|
| + this.wrapper_.style.webkitTransform = webkitTransform;
|
|
|
| - for (var i = 0; i < 2; i++) {
|
| - this.wrappers_[i].style.webkitTransform = webkitTransform;
|
| + var img = this.img_;
|
|
|
| - var img = this.imgs_[i];
|
| -
|
| - if (metadata.width && metadata.height) {
|
| - var aspect = metadata.width / metadata.height;
|
| - if (transform && transform.rotate90) {
|
| - aspect = 1 / aspect;
|
| - }
|
| - resizeToFill(img, aspect);
|
| - } else {
|
| - // No metadata available, loading the thumbnail first,
|
| - // then adjust the size.
|
| - img.style.maxWidth = '100%';
|
| - img.style.maxHeight = '100%';
|
| -
|
| - function onLoad(image) {
|
| - image.style.maxWidth = '';
|
| - image.style.maxHeight = '';
|
| - resizeToFill(image, image.width / image.height);
|
| - }
|
| - img.onload = onLoad.bind(null, img);
|
| + if (metadata.width && metadata.height) {
|
| + var aspect = metadata.width / metadata.height;
|
| + if (transform && transform.rotate90) {
|
| + aspect = 1 / aspect;
|
| }
|
| + resizeToFill(img, aspect);
|
| + } else {
|
| + // No metadata available, loading the thumbnail first,
|
| + // then adjust the size.
|
| + img.style.maxWidth = '100%';
|
| + img.style.maxHeight = '100%';
|
|
|
| - img.setAttribute('src', url);
|
| + function onLoad(image) {
|
| + image.style.maxWidth = '';
|
| + image.style.maxHeight = '';
|
| + resizeToFill(image, image.width / image.height);
|
| + }
|
| + img.onload = onLoad.bind(null, img);
|
| }
|
| +
|
| + img.setAttribute('src', url);
|
| };
|
|
|
| function ShareMode(editor, container, toolbar, shareActions,
|
|
|