+
{{#if isFullscreen}}
-
Index: test/test_charm_store.js
=== modified file 'test/test_charm_store.js'
--- test/test_charm_store.js 2013-06-11 18:29:43 +0000
+++ test/test_charm_store.js 2013-06-20 14:25:27 +0000
@@ -277,7 +277,7 @@
hostname = 'http://localhost';
api = new Y.juju.Charmworld2({
apiHost: hostname
- }),
+ });
ds = api.get('datasource');
ds.get('source').should.eql('http://localhost/api/2/');
Index: app/subapps/browser/views/charm.js
=== modified file 'app/subapps/browser/views/charm.js'
--- app/subapps/browser/views/charm.js 2013-06-13 16:13:29 +0000
+++ app/subapps/browser/views/charm.js 2013-06-20 14:49:33 +0000
@@ -59,6 +59,9 @@
},
'.nav .back': {
click: '_handleBack'
+ },
+ '.charm-token': {
+ click: '_handleCharmSelection'
}
},
@@ -260,6 +263,24 @@
},
/**
+ Navigate when selecting a charm token in the view.
+
+ @method _handleCharmSelection
+ @param {Event} ev the click event for the selected charm.
+
+ */
+ _handleCharmSelection: function(ev) {
+ ev.halt();
+ var charm = ev.currentTarget;
+ var charmID = charm.getData('charmid');
+ var change = {
+ charmID: charmID
+ };
+
+ this.fire('viewNavigate', {change: change});
+ },
+
+ /**
* Determine which intro copy to display depending on the number
* of interfaces.
*
@@ -355,6 +376,30 @@
},
/**
+ Load the related charm data into the model for use.
+
+ @method _loadRelatedCharms
+
+ */
+ _loadRelatedCharms: function(callback) {
+ this.get('store').related(
+ this.get('charm').get('id'), {
+ 'success': function(data) {
+ this.get('charm').buildRelatedCharms(
+ data.result.provides, data.result.requires);
+ if (callback) {
+ callback.call(this);
+ }
+ },
+ 'failure': function(data, request) {
+ console.log('Error loading related charm data.');
+ console.log(data);
+ }
+ },
+ this);
+ },
+
+ /**
* The readme file in a charm can be upper/lower/etc. This helps find a
* readme from the list of files in a charm.
*
@@ -453,23 +498,27 @@
},
/**
- * Clean up after ourselves.
- *
- * @method destructor
- *
+ Clean up after ourselves.
+
+ @method destructor
+
*/
destructor: function() {
if (this.tabview) {
this.tabview.destroy();
}
+
+ if (this.relatedCharmContainer) {
+ this.relatedCharmContainer.destroy();
+ }
},
/**
- * Generic YUI initializer. Make sure we track indicators for cleanup.
- *
- * @method initializer
- * @param {Object} cfg configuration object.
- * @return {undefined} Nothing.
+ Generic YUI initializer. Make sure we track indicators for cleanup.
+
+ @method initializer
+ @param {Object} cfg configuration object.
+ @return {undefined} Nothing.
*/
initializer: function(cfg) {
// Hold onto references of the indicators used so we can clean them all
@@ -478,6 +527,31 @@
},
/**
+ Render the related charms sidebar. It generates a charm container with
+ the tokens.
+
+ @method _renderRelatedCharms
+ @param {Object} charm the charm model we're rendering the related
+ charms for.
+
+ */
+ _renderRelatedCharms: function() {
+ var relatedCharms = this.get('charm').get('relatedCharms');
+ // If there are no overall related charms then just skip it all.
+ if (relatedCharms.overall) {
+ var relatedNode = this.get('container').one('.related-charms');
+ this.relatedCharmContainer = new widgets.browser.CharmContainer(
+ Y.merge({
+ name: 'Related Charms',
+ cutoff: 10,
+ children: relatedCharms.overall
+ }));
+ this.relatedCharmContainer.render(relatedNode);
+ this.hideIndicator(Y.one('.related-charms'));
+ }
+ },
+
+ /**
* Render the view of a single charm details page.
*
* @method _renderCharmView
@@ -532,6 +606,13 @@
this._noReadme(tplNode.one('#bws-readme'));
}
+ if (isFullscreen) {
+ if (!this.get('charm').get('relatedCharms')) {
+ this.showIndicator(Y.one('.related-charms'));
+ this._loadRelatedCharms(this._renderRelatedCharms);
+ }
+ }
+
if (this.get('activeTab')) {
this.get('container').one(
'.tabs a[href="' + this.get('activeTab') + '"]').get(
@@ -658,6 +739,7 @@
}, '0.1.0', {
requires: [
+ 'browser-charm-container',
'browser-overlay-indicator',
'browser-tabview',
'datatype-date',
Index: test/test_charm_token.js
=== modified file 'test/test_charm_token.js'
--- test/test_charm_token.js 2013-06-04 18:38:30 +0000
+++ test/test_charm_token.js 2013-06-19 17:20:44 +0000
@@ -56,7 +56,7 @@
};
var charm = new CharmToken(cfg);
charm.render(charm_container);
- var metadata = Y.one('.metadata');
+ var metadata = charm_container.one('.metadata');
assert.equal(
' 3 downloads, 1 commit ',
metadata.get('text').replace(/\s+/g, ' '));
@@ -96,7 +96,7 @@
var charm = new CharmToken(cfg);
charm.render(charm_container);
- var iconNode = Y.one('.category-icon');
+ var iconNode = charm_container.one('.category-icon');
assert.equal(iconNode.hasClass('charm-app-servers-64'), true);
});
@@ -114,7 +114,7 @@
var charm = new CharmToken(cfg);
charm.render(charm_container);
- var iconNode = Y.one('.category-icon');
+ var iconNode = charm_container.one('.category-icon');
assert.equal(iconNode.hasClass('charm-app-servers-96'), true);
});
Index: app/subapps/browser/views/editorial.js
=== modified file 'app/subapps/browser/views/editorial.js'
--- app/subapps/browser/views/editorial.js 2013-06-11 17:48:32 +0000
+++ app/subapps/browser/views/editorial.js 2013-06-18 13:08:42 +0000
@@ -241,7 +241,6 @@
}, '0.1.0', {
requires: [
'browser-charm-container',
- 'browser-charm-token',
'browser-search-widget',
'juju-charm-store',
'juju-models',
Index: test/test_model.js
=== modified file 'test/test_model.js'
--- test/test_model.js 2013-06-14 13:14:27 +0000
+++ test/test_model.js 2013-06-20 14:25:27 +0000
@@ -472,7 +472,7 @@
});
beforeEach(function() {
- conn = new (Y.namespace('juju-tests.utils')).SocketStub(),
+ conn = new (Y.namespace('juju-tests.utils')).SocketStub();
env = juju.newEnvironment({conn: conn});
env.connect();
conn.open();
@@ -616,14 +616,16 @@
describe('BrowserCharm test', function() {
- var data, instance, models, sampleData, Y;
+ var data, instance, models, relatedData, sampleData, utils, Y;
before(function(done) {
Y = YUI(GlobalConfig).use([
'io',
- 'juju-charm-models'
+ 'juju-charm-models',
+ 'juju-tests-utils'
], function(Y) {
models = Y.namespace('juju.models');
+ utils = Y.namespace('juju-tests.utils');
done();
});
});
@@ -631,9 +633,7 @@
before(function() {
sampleData = Y.io('data/browsercharm.json', {sync: true});
data = Y.JSON.parse(sampleData.responseText);
- });
-
- beforeEach(function() {
+ relatedData = utils.loadFixture('data/related.json', true).result;
});
afterEach(function() {
@@ -734,6 +734,43 @@
instance.get('failingProviders').should.eql(
['ec2', 'local', 'openstack', 'hp']);
});
+
+ // Testing a private method because if this test fails it'll provide a much
+ // nicer hint as to why something in a View or such doesn't work correctly.
+ // The api data that we get must be converted into what the
+ // CharmMode.getAttrs() would have sent out to the charm-token widget.
+ it('maps related data to the model-ish api', function() {
+ var providesData = relatedData.provides['mysql-oneway-replication'][0];
+ instance = new models.BrowserCharm(data.charm);
+ var converted = instance._convertRelatedData(providesData);
+ assert.equal(providesData.name, converted.name);
+ assert.equal(providesData.id, converted.id);
+ assert.equal(
+ providesData.commits_in_past_30_days,
+ converted.recent_commit_count);
+ assert.equal(
+ providesData.downloads_in_past_30_days,
+ converted.recent_download_count);
+ assert.equal(providesData.has_icon, converted.shouldShowIcon);
+ });
+
+ it('builds proper relatedCharms object', function() {
+ instance = new models.BrowserCharm(data.charm);
+ instance.buildRelatedCharms(relatedData.provides, relatedData.requires);
+ var relatedObject = instance.get('relatedCharms');
+
+ // The overall should have the default 5 max charms listed.
+ assert.equal(5, relatedObject.overall.length);
+ // The requires for mysql should be truncated to the max of 5 as well.
+ assert.equal(5, relatedObject.requires.mysql.length);
+ // There's only one key in the provides section.
+ assert.equal(1, Y.Object.keys(relatedObject.provides).length);
+
+ // None of the overall weights should be one.
+ relatedObject.overall.forEach(function(charm) {
+ assert.notEqual(1, charm.weight);
+ });
+ });
});
Index: lib/views/browser/content-sidebar.less
=== modified file 'lib/views/browser/content-sidebar.less'
--- lib/views/browser/content-sidebar.less 2013-05-30 13:01:47 +0000
+++ lib/views/browser/content-sidebar.less 2013-06-18 18:12:29 +0000
@@ -25,4 +25,20 @@
border: none;
}
}
+
+ .related-charms {
+ min-height: 100px;
+ background-color: inherit;
+ .yui3-charmtoken {
+ width: 100%;
+ border-bottom: 1px solid @bws-border;
+
+ .description {
+ display: none;
+ }
+ &.last {
+ border-bottom: none;
+ }
+ }
+ }
}
Index: test/data/related.json
=== added file 'test/data/related.json'
--- test/data/related.json 1970-01-01 00:00:00 +0000
+++ test/data/related.json 2013-06-19 14:02:25 +0000
@@ -0,0 +1,962 @@
+{
+ "result": {
+ "provides": {
+ "mysql-oneway-replication": [
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~clint-fewbar/precise/galera-0",
+ "is_approved": false,
+ "name": "galera",
+ "weight": 1.0
+ }
+ ]
+ },
+ "requires": {
+ "local-monitors": [
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 4,
+ "has_icon": false,
+ "id": "precise/nrpe-1",
+ "is_approved": true,
+ "name": "nrpe",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~clint-fewbar/precise/nrpe-5",
+ "is_approved": false,
+ "name": "nrpe",
+ "weight": 1.0
+ }
+ ],
+ "monitors": [
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 19,
+ "has_icon": false,
+ "id": "precise/nagios-4",
+ "is_approved": true,
+ "name": "nagios",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~clint-fewbar/precise/nagios-11",
+ "is_approved": false,
+ "name": "nagios",
+ "weight": 1.0
+ }
+ ],
+ "munin-node": [
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 9,
+ "has_icon": false,
+ "id": "precise/munin-3",
+ "is_approved": true,
+ "name": "munin",
+ "weight": 10.0
+ }
+ ],
+ "mysql": [
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 2,
+ "has_icon": false,
+ "id": "precise/hive-2",
+ "is_approved": true,
+ "name": "hive",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 2,
+ "has_icon": false,
+ "id": "precise/firefox-sync-2",
+ "is_approved": true,
+ "name": "firefox-sync",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "precise/roundcube-0",
+ "is_approved": true,
+ "name": "roundcube",
+ "weight": 10.0
+ },
+ {
+ "categories": [
+ "misc"
+ ],
+ "commits_in_past_30_days": 1,
+ "downloads_in_past_30_days": 42,
+ "has_icon": true,
+ "id": "precise/openstack-dashboard-9",
+ "is_approved": true,
+ "name": "openstack-dashboard",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "precise/limesurvey-4",
+ "is_approved": true,
+ "name": "limesurvey",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "precise/spip-0",
+ "is_approved": true,
+ "name": "spip",
+ "weight": 10.0
+ },
+ {
+ "categories": [
+ "application"
+ ],
+ "commits_in_past_30_days": 2,
+ "downloads_in_past_30_days": 2,
+ "has_icon": true,
+ "id": "precise/tt-rss-0",
+ "is_approved": true,
+ "name": "tt-rss",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 2,
+ "has_icon": false,
+ "id": "precise/rack-2",
+ "is_approved": true,
+ "name": "rack",
+ "weight": 10.0
+ },
+ {
+ "categories": [
+ "applications"
+ ],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 298,
+ "has_icon": true,
+ "id": "precise/wordpress-15",
+ "is_approved": true,
+ "name": "wordpress",
+ "weight": 10.0
+ },
+ {
+ "categories": [
+ "applications"
+ ],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 156,
+ "has_icon": true,
+ "id": "precise/mediawiki-8",
+ "is_approved": true,
+ "name": "mediawiki",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 7,
+ "has_icon": false,
+ "id": "precise/gitlab-2",
+ "is_approved": true,
+ "name": "gitlab",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 4,
+ "has_icon": false,
+ "id": "precise/joomla-1",
+ "is_approved": true,
+ "name": "joomla",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 6,
+ "has_icon": false,
+ "id": "precise/statusnet-4",
+ "is_approved": true,
+ "name": "statusnet",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 1,
+ "has_icon": false,
+ "id": "precise/thinkup-2",
+ "is_approved": true,
+ "name": "thinkup",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 17,
+ "has_icon": false,
+ "id": "precise/owncloud-6",
+ "is_approved": true,
+ "name": "owncloud",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 13,
+ "has_icon": false,
+ "id": "precise/rails-0",
+ "is_approved": true,
+ "name": "rails",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "precise/stackmobile-1",
+ "is_approved": true,
+ "name": "stackmobile",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 3,
+ "has_icon": false,
+ "id": "precise/tracks-1",
+ "is_approved": true,
+ "name": "tracks",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 4,
+ "has_icon": false,
+ "id": "precise/drupal6-0",
+ "is_approved": true,
+ "name": "drupal6",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 11,
+ "has_icon": false,
+ "id": "precise/etherpad-lite-4",
+ "is_approved": true,
+ "name": "etherpad-lite",
+ "weight": 10.0
+ },
+ {
+ "categories": [
+ "applications"
+ ],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 24,
+ "has_icon": false,
+ "id": "precise/appflower-1",
+ "is_approved": true,
+ "name": "appflower",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "precise/kusabax-0",
+ "is_approved": true,
+ "name": "kusabax",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~charmers/precise/drupal6-0",
+ "is_approved": false,
+ "name": "drupal6",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~chilicuil/precise/observiu-0",
+ "is_approved": false,
+ "name": "observiu",
+ "weight": 1.0
+ },
+ {
+ "categories": [
+ "applications"
+ ],
+ "commits_in_past_30_days": 3,
+ "downloads_in_past_30_days": 0,
+ "has_icon": true,
+ "id": "~james-falkner/precise/liferay-2",
+ "is_approved": false,
+ "name": "liferay",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~nathwill/precise/owncloud-17",
+ "is_approved": false,
+ "name": "owncloud",
+ "weight": 1.0
+ },
+ {
+ "categories": [
+ "misc"
+ ],
+ "commits_in_past_30_days": 2,
+ "downloads_in_past_30_days": 0,
+ "has_icon": true,
+ "id": "~nextrevision/precise/tt-rss-3",
+ "is_approved": false,
+ "name": "tt-rss",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~nskaggs/precise/vivo-11",
+ "is_approved": false,
+ "name": "vivo",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~utlemming/precise/fsync-4",
+ "is_approved": false,
+ "name": "fsync",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~shazzner/precise/kusabax-5",
+ "is_approved": false,
+ "name": "kusabax",
+ "weight": 1.0
+ },
+ {
+ "categories": [
+ "applications"
+ ],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~chilicuil/precise/observium-3",
+ "is_approved": false,
+ "name": "observium",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~clint-fewbar/precise/bacula-director-0",
+ "is_approved": false,
+ "name": "bacula-director",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~clint-fewbar/precise/bacula-3",
+ "is_approved": false,
+ "name": "bacula",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~helio-mota/precise/joomla-9",
+ "is_approved": false,
+ "name": "joomla",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~mark-mims/precise/mediawiki-0",
+ "is_approved": false,
+ "name": "mediawiki",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~mfisch/precise/tracks-4",
+ "is_approved": false,
+ "name": "tracks",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~pierre-amadio/precise/spip-8",
+ "is_approved": false,
+ "name": "spip",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~yolanda.robla/precise/openstack-dashboard-5",
+ "is_approved": false,
+ "name": "openstack-dashboard",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~tasdomas/precise/drupal-0",
+ "is_approved": false,
+ "name": "drupal",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~gandelman-a/precise/openstack-dashboard-3",
+ "is_approved": false,
+ "name": "openstack-dashboard",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~fenris/precise/symfony-0",
+ "is_approved": false,
+ "name": "symfony",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~imbrandon/precise/drupal6-1",
+ "is_approved": false,
+ "name": "drupal6",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~jmac/precise/wordpress-multi-0",
+ "is_approved": false,
+ "name": "wordpress-multi",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~openstack-ubuntu-testing/precise/openstack-dashboard-11",
+ "is_approved": false,
+ "name": "openstack-dashboard",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~pavel-pachkovskij/precise/rack-4",
+ "is_approved": false,
+ "name": "rack",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~clint-fewbar/precise/limesurvey-2",
+ "is_approved": false,
+ "name": "limesurvey",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~helio-mota/precise/gitlab-4",
+ "is_approved": false,
+ "name": "gitlab",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~hazmat/precise/drupal7-3",
+ "is_approved": false,
+ "name": "drupal7",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 1,
+ "has_icon": false,
+ "id": "~marcoceppi/precise/wordpress-17",
+ "is_approved": false,
+ "name": "wordpress",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~mark-mims/precise/rails-4",
+ "is_approved": false,
+ "name": "rails",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~mars/precise/reviewboard-1",
+ "is_approved": false,
+ "name": "reviewboard",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~robert-ayres/precise/hive-1",
+ "is_approved": false,
+ "name": "hive",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~shazzner/precise/phplist-2",
+ "is_approved": false,
+ "name": "phplist",
+ "weight": 1.0
+ }
+ ],
+ "mysql-oneway-replication": [
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~clint-fewbar/precise/galera-0",
+ "is_approved": false,
+ "name": "galera",
+ "weight": 1.0
+ }
+ ],
+ "mysql-root": [
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 8,
+ "has_icon": false,
+ "id": "precise/phpmyadmin-3",
+ "is_approved": true,
+ "name": "phpmyadmin",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~vtuson/precise/your-charms-name-0",
+ "is_approved": false,
+ "name": "your-charms-name",
+ "weight": 1.0
+ }
+ ],
+ "mysql-shared": [
+ {
+ "categories": [
+ "misc"
+ ],
+ "commits_in_past_30_days": 1,
+ "downloads_in_past_30_days": 65,
+ "has_icon": true,
+ "id": "precise/keystone-15",
+ "is_approved": true,
+ "name": "keystone",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 2,
+ "downloads_in_past_30_days": 42,
+ "has_icon": false,
+ "id": "precise/glance-17",
+ "is_approved": true,
+ "name": "glance",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 2,
+ "downloads_in_past_30_days": 52,
+ "has_icon": true,
+ "id": "precise/nova-compute-12",
+ "is_approved": true,
+ "name": "nova-compute",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 6,
+ "has_icon": false,
+ "id": "precise/solr-1",
+ "is_approved": true,
+ "name": "solr",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 8,
+ "has_icon": false,
+ "id": "precise/lamp-1",
+ "is_approved": true,
+ "name": "lamp",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 31,
+ "has_icon": true,
+ "id": "precise/nova-volume-6",
+ "is_approved": true,
+ "name": "nova-volume",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 1,
+ "downloads_in_past_30_days": 10,
+ "has_icon": true,
+ "id": "precise/cinder-8",
+ "is_approved": true,
+ "name": "cinder",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 2,
+ "downloads_in_past_30_days": 44,
+ "has_icon": false,
+ "id": "precise/nova-cloud-controller-13",
+ "is_approved": true,
+ "name": "nova-cloud-controller",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 1,
+ "downloads_in_past_30_days": 7,
+ "has_icon": true,
+ "id": "precise/quantum-gateway-4",
+ "is_approved": true,
+ "name": "quantum-gateway",
+ "weight": 10.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~openstack-ubuntu-testing/precise/keystone-20",
+ "is_approved": false,
+ "name": "keystone",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 1,
+ "has_icon": false,
+ "id": "~openstack-ubuntu-testing/precise/nova-volume-11",
+ "is_approved": false,
+ "name": "nova-volume",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~openstack-ubuntu-testing/precise/quantum-gateway-2",
+ "is_approved": false,
+ "name": "quantum-gateway",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~openstack-ubuntu-testing/precise/quantal-0",
+ "is_approved": false,
+ "name": "quantal",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 7,
+ "has_icon": false,
+ "id": "~robert-ayres/precise/tomcat-3",
+ "is_approved": false,
+ "name": "tomcat",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~vtuson/precise/lamp-3",
+ "is_approved": false,
+ "name": "lamp",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~gandelman-a/precise/nova-cloud-controller-2",
+ "is_approved": false,
+ "name": "nova-cloud-controller",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~gandelman-a/precise/keystone-1",
+ "is_approved": false,
+ "name": "keystone",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~gandelman-a/precise/nova-volume-2",
+ "is_approved": false,
+ "name": "nova-volume",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~gandelman-a/precise/glance-2",
+ "is_approved": false,
+ "name": "glance",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~gandelman-a/precise/cinder-9",
+ "is_approved": false,
+ "name": "cinder",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~gandelman-a/precise/nova-compute-3",
+ "is_approved": false,
+ "name": "nova-compute",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 3,
+ "downloads_in_past_30_days": 0,
+ "has_icon": true,
+ "id": "~hopem/precise/cinder-1",
+ "is_approved": false,
+ "name": "cinder",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~ivoks/precise/nova-cloud-controler-0",
+ "is_approved": false,
+ "name": "nova-cloud-controler",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~openstack-ubuntu-testing/precise/glance-13",
+ "is_approved": false,
+ "name": "glance",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 5,
+ "downloads_in_past_30_days": 0,
+ "has_icon": true,
+ "id": "~openstack-ubuntu-testing/precise/nova-compute-27",
+ "is_approved": false,
+ "name": "nova-compute",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~robert-ayres/precise/solr-4",
+ "is_approved": false,
+ "name": "solr",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 1,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~hopem/precise/glance-0",
+ "is_approved": false,
+ "name": "glance",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 4,
+ "downloads_in_past_30_days": 0,
+ "has_icon": true,
+ "id": "~openstack-ubuntu-testing/precise/cinder-9",
+ "is_approved": false,
+ "name": "cinder",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 1,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~openstack-ubuntu-testing/precise/nova-cloud-controller-27",
+ "is_approved": false,
+ "name": "nova-cloud-controller",
+ "weight": 1.0
+ },
+ {
+ "categories": [],
+ "commits_in_past_30_days": 0,
+ "downloads_in_past_30_days": 0,
+ "has_icon": false,
+ "id": "~smoser/precise/keystone-0",
+ "is_approved": false,
+ "name": "keystone",
+ "weight": 1.0
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
Index: test/test_resizing_textarea.js
=== modified file 'test/test_resizing_textarea.js'
--- test/test_resizing_textarea.js 2013-05-17 21:10:54 +0000
+++ test/test_resizing_textarea.js 2013-06-19 17:20:44 +0000
@@ -186,7 +186,7 @@
container.append(target);
container.append(target2);
- var targets = Y.all('.test_multiple');
+ var targets = container.all('.test_multiple');
targets.plug(Y.juju.plugins.ResizingTextarea, {
skip_animations: true,
@@ -200,10 +200,10 @@
});
// Now set the content in the first one and check it's unique.
- update_content(Y.one('.first'), test_text);
+ update_content(container.one('.first'), test_text);
- var first = Y.one('.first');
- var second = Y.one('.second');
+ var first = container.one('.first');
+ var second = container.one('.second');
var first_height = get_height(first);
assert.isTrue(first_height > 100,