Skip to content
This repository has been archived by the owner on Nov 3, 2021. It is now read-only.

Commit

Permalink
Merge pull request #24057 from Cwiiis/proto-grouping-2
Browse files Browse the repository at this point in the history
Bug 1067435 - Homescreen grouping. r=crdlc,kgrandon
  • Loading branch information
Cwiiis committed Sep 24, 2014
2 parents 03d7bca + 071efd0 commit 997fe51
Show file tree
Hide file tree
Showing 25 changed files with 992 additions and 217 deletions.
11 changes: 11 additions & 0 deletions apps/settings/elements/developer.html
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,17 @@ <h2 data-l10n-id="window-management">Window Management</h2>
</label>
</li>
</ul>
<header>
<h2 data-l10n-id="homescreen">Homescreen</h2>
</header>
<ul>
<li>
<label class="pack-checkbox">
<input type="checkbox" name="verticalhome.grouping.enabled">
<span data-l10n-id="verticalhome-grouping">App grouping</span>
</label>
</li>
</ul>
<header>
<h2 data-l10n-id="debug">Debug</h2>
</header>
Expand Down
1 change: 1 addition & 0 deletions apps/settings/locales/settings.en-US.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1174,6 +1174,7 @@ debug-gaia-enabled=Gaia debug traces
showScreenReaderSettings=Show screen reader settings
app-transition=App transition
app-suspending=App suspending
verticalhome-grouping=App grouping
verbose-app-permissions=Verbose app permissions
window-management=Window management

Expand Down
13 changes: 13 additions & 0 deletions apps/sharedtest/test/unit/elements/gaia_grid/gaia_grid_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ require('/shared/elements/gaia_grid/script.js');
require('/shared/elements/gaia_grid/js/items/grid_item.js');
require('/shared/elements/gaia_grid/js/items/divider.js');
require('/shared/elements/gaia_grid/js/items/placeholder.js');
require('/shared/elements/gaia_grid/js/items/group.js');

var mocksHelperForGrid = new MocksHelper([
'LazyLoader'
Expand Down Expand Up @@ -60,6 +61,16 @@ suite('GaiaGrid', function() {
assert.equal(grid.dragdrop, undefined);
assert.ok(grid.layout);
});

test('/w grouping', function() {
this.container.innerHTML = '<gaia-grid group></gaia-grid>';
var grid = this.container.firstElementChild._grid;
grid.render();
assert.equal(grid.dragdrop, undefined);
assert.equal(grid.zoom, undefined);
assert.ok(grid.layout);
assert.ok(document.querySelector('.divider.group'));
});
});

suite('items', function() {
Expand All @@ -72,6 +83,8 @@ suite('GaiaGrid', function() {
id: 'http://mozilla.org',
url: 'http://mozilla.org'
},
setPosition: function() {},
setCoordinates: function() {},
render: function() {}
};

Expand Down
122 changes: 118 additions & 4 deletions apps/sharedtest/test/unit/elements/gaia_grid/grid_dragdrop_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ require('/shared/elements/gaia_grid/js/items/divider.js');
require('/shared/elements/gaia_grid/js/items/mozapp.js');
require('/shared/elements/gaia_grid/js/items/bookmark.js');
require('/shared/elements/gaia_grid/js/items/placeholder.js');
require('/shared/elements/gaia_grid/js/items/group.js');

var mocksHelperForDragDrop = new MocksHelper([
'LazyLoader'
Expand All @@ -36,14 +37,31 @@ suite('GaiaGrid > DragDrop', function() {
url: 'http://mozilla.org/2'
};

var stubPage3 = {
name: 'third',
id: 3,
icon: 'no',
url: 'http://mozilla.org/3'
};

var countDividers = function() {
var nDividers = 0;
for (var i = 0, iLen = grid.items.length; i < iLen; i++) {
if (grid.items[i].detail.type === 'divider') {
nDividers ++;
}
}
return nDividers;
};

mocksHelperForDragDrop.attachTestHelpers();

suiteSetup(function() {
document.body.innerHTML = '<div id="zoom"><div class="arrows">' +
'</div><div class="curtain"></div><div class="indicator"></div></div>';
this.container = document.createElement('div');

this.container.innerHTML = '<gaia-grid dragdrop></gaia-grid>';
this.container.innerHTML = '<gaia-grid dragdrop group></gaia-grid>';
document.body.appendChild(this.container);
grid = this.container.firstElementChild._grid;
dragdrop = this.container.firstElementChild._grid;
Expand Down Expand Up @@ -88,7 +106,7 @@ suite('GaiaGrid > DragDrop', function() {
});

test('cleanup if the touch gesture is canceled', function() {
var firstBookmark = document.querySelector('.icon');
var firstBookmark = grid.items[0].element;
firstBookmark.dispatchEvent(new CustomEvent('contextmenu',
{bubbles: true}));
assert.ok(grid.dragdrop.inEditMode);
Expand All @@ -110,10 +128,106 @@ suite('GaiaGrid > DragDrop', function() {
subject.icon = grid.items[0];

// The current positions are second -> first -> placeholder
// Simulate a drop past the placeholder (index 2).
subject.rearrange(2);
// Simulate a drop onto the second item (index 2).
subject.rearrange(grid.items[2]);

assert.equal(grid.items[0].name, 'first');
assert.equal(grid.items[1].name, 'second');
});

test('create new groups by dropping items at the end', function() {
var dividers = countDividers();
var subject = grid.dragdrop;

// The current positions are first, second, placeholder, divider,
subject.icon = grid.items[1];
subject.createNewDivider(grid.items[3]);

// After creating the new group, there should be one extra divider.
assert.equal(countDividers(), dividers + 1);
});

test('rearrange collapsed group before expanded group', function() {
var divider = grid.items[7];
assert.equal(divider.detail.type, 'divider');
assert.ok(divider.element.classList.contains('group'));

divider.collapse();
assert.equal(divider.detail.collapsed, true);

var subject = grid.dragdrop;
subject.icon = divider;
subject.rearrange(grid.items[0]);

assert.equal(grid.items[0].name, 'second');
assert.equal(grid.items[2].name, 'first');
});

test('rearrange collapsed group after expanded group', function() {
var divider = grid.items[1];
assert.equal(divider.detail.type, 'divider');

var subject = grid.dragdrop;
subject.icon = divider;
subject.createNewDivider(grid.items[grid.items.length - 1]);

assert.equal(grid.items[0].name, 'first');
assert.equal(grid.items[4].name, 'second');
});

test('rearrange collapsed group before collapsed group', function() {
var divider = grid.items[3];
assert.equal(divider.detail.type, 'divider');
divider.collapse();

divider = grid.items[3];
assert.equal(divider.detail.type, 'divider');

var subject = grid.dragdrop;
subject.icon = divider;
subject.rearrange(grid.items[0]);

assert.equal(grid.items[0].name, 'second');
assert.equal(grid.items[2].name, 'first');
});

test('rearrange collapsed group after collapsed group', function() {
var divider = grid.items[1];
assert.equal(divider.detail.type, 'divider');

var subject = grid.dragdrop;
subject.icon = divider;
subject.createNewDivider(grid.items[grid.items.length - 1]);

assert.equal(grid.items[0].name, 'first');
assert.equal(grid.items[2].name, 'second');
});

test('create new group between groups', function() {
var divider = grid.items[1];
assert.equal(divider.detail.type, 'divider');
divider.expand();

divider = grid.items[3];
assert.equal(divider.detail.type, 'divider');
divider.expand();

// Add a new item to test adding groups between groups
grid.add(new GaiaGrid.Bookmark(stubPage3), 0);
grid.render();

// Now simulate dragging the first icon over the first divider and check
// that a new divider is created, and that the new app is in it
var dividers = countDividers();

divider = grid.items[3];
assert.equal(divider.detail.type, 'divider');

var subject = grid.dragdrop;
subject.icon = grid.items[0];
subject.createNewDivider(divider);

assert.equal(countDividers(), dividers + 1);
assert.equal(grid.items[4].name, 'third');
});
});
2 changes: 2 additions & 0 deletions apps/verticalhome/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
<script defer src="shared/js/bookmarks_database.js"></script>
<script defer src="shared/js/collections_database.js"></script>
<script defer src="shared/js/lazy_loader.js"></script>
<script defer src="shared/js/settings_listener.js"></script>
<script defer src="shared/js/url_helper.js"></script>

<script defer src="js/sources/bookmark.js"></script>
Expand All @@ -55,6 +56,7 @@
<script defer src="shared/elements/gaia_grid/js/items/collection.js"></script>
<script defer src="shared/elements/gaia_grid/js/items/divider.js"></script>
<script defer src="shared/elements/gaia_grid/js/items/mozapp.js"></script>
<!-- <script defer src="shared/elements/gaia_grid/js/items/group.js"></script> -->
<script defer src="shared/elements/gaia_grid/js/items/placeholder.js"></script>

<!-- Gaia Components -->
Expand Down
26 changes: 24 additions & 2 deletions apps/verticalhome/js/app.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
'use strict';
/* global ItemStore, LazyLoader, Configurator */
/* global ItemStore, LazyLoader, Configurator, SettingsListener */

(function(exports) {

Expand All @@ -10,6 +10,29 @@
window.dispatchEvent(new CustomEvent('moz-chrome-dom-loaded'));
this.grid = document.getElementById('icons');

SettingsListener.observe('verticalhome.grouping.enabled', false,
(value) => {
var groupingEnabled = value;
if (typeof this.grouping !== 'undefined') {
if (groupingEnabled != this.grouping) {
window.location.reload();
return;
}
}

this.grouping = groupingEnabled;
if (groupingEnabled) {
document.body.classList.add('grouping');
LazyLoader.load(
['shared/elements/gaia_grid/js/items/group.js'],
() => {
this.init();
});
} else {
this.init();
}
});

this.grid.addEventListener('iconblobdecorated', this);
this.grid.addEventListener('gaiagrid-iconbloberror', this);
this.grid.addEventListener('cached-icons-rendered', this);
Expand Down Expand Up @@ -238,6 +261,5 @@
}
};
exports.app = new App();
exports.app.init();

}(window));
3 changes: 1 addition & 2 deletions apps/verticalhome/style/css/app.css
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,8 @@ gaia-grid {
display: none;
}

.divider:last-of-type {
.divider:not(.group):last-of-type {
visibility: hidden;
padding-bottom: 1.4rem;
}

.edit-mode .divider:last-of-type {
Expand Down
4 changes: 4 additions & 0 deletions apps/verticalhome/style/css/search.css
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
z-index: 5;
}

.grouping #search {
margin-bottom: 0;
}

#search-form {
pointer-events: none;
position: absolute;
Expand Down
3 changes: 3 additions & 0 deletions apps/verticalhome/test/marionette/lib/collection.js
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,9 @@ Collection.prototype = {
this.actions.longPress(element, 1).perform();
this.client.helper.waitForElement(
Collection.Selectors.cloudMenuPin).click();

// Wait for animation to finish
this.actions.wait(1).perform();
},

/**
Expand Down
4 changes: 4 additions & 0 deletions apps/verticalhome/test/marionette/lib/home2.js
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,10 @@ Home2.prototype = {
app.grid.moveTo(icon.detail.index, newPos);
app.grid.render();
}, [icon.getAttribute('data-identifier'), index]);

// Wait for the icon to animate into place
var actions = new Actions(this.client);
actions.wait(1).perform();
}
};

Expand Down
4 changes: 3 additions & 1 deletion apps/verticalhome/test/unit/app_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
/* global MocksHelper, loadBodyHTML */

require('/shared/test/unit/mocks/mock_lazy_loader.js');
require('/shared/test/unit/mocks/mock_settings_listener.js');
require('/shared/test/unit/load_body_html_helper.js');
require('/shared/elements/gaia_grid/js/grid_dragdrop.js');
require('/shared/elements/gaia_grid/js/grid_icon_renderer.js');
Expand All @@ -16,7 +17,8 @@ require('/test/unit/mock_item_store.js');

var mocksHelperForApp = new MocksHelper([
'LazyLoader',
'ItemStore'
'ItemStore',
'SettingsListener'
]).init();

suite('app.js > ', function() {
Expand Down
4 changes: 3 additions & 1 deletion apps/verticalhome/test/unit/contextmenu_ui_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,15 @@ require('/shared/elements/gaia_grid/js/items/placeholder.js');
require('/shared/elements/gaia_grid/script.js');
require('/test/unit/mock_item_store.js');
require('/shared/test/unit/mocks/mock_lazy_loader.js');
require('/shared/test/unit/mocks/mock_settings_listener.js');
require('/shared/test/unit/load_body_html_helper.js');
require('/js/wallpaper.js');
requireElements('verticalhome/elements/contextmenu.html');

var mocksHelperForContextMenuUI = new MocksHelper([
'LazyLoader',
'ItemStore'
'ItemStore',
'SettingsListener'
]).init();

suite('contextmenu_ui.js >', function() {
Expand Down
Binary file added shared/elements/gaia_grid/images/collapse_arrow.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added shared/elements/gaia_grid/images/move_gripper.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 997fe51

Please sign in to comment.