From 5a39c1e00a0bac30dc32eea763d059915a34ec56 Mon Sep 17 00:00:00 2001 From: Richard Kennard Date: Mon, 14 Apr 2014 16:00:27 +1000 Subject: [PATCH] Label override Change-Id: I3e47e1c53d26ea85151b85d9df553284accb4269 --- .../lib/metawidget/core/metawidget-layouts.js | 38 +++++++++++++----- .../util/ScenarioRunnerTestCase.java | 1 - .../test/js/metawidget-core-layout-tests.js | 40 ++++++++++++++++++- 3 files changed, 67 insertions(+), 12 deletions(-) diff --git a/modules/js/corejs/src/main/webapp/lib/metawidget/core/metawidget-layouts.js b/modules/js/corejs/src/main/webapp/lib/metawidget/core/metawidget-layouts.js index 72192b4104..fe769e1729 100644 --- a/modules/js/corejs/src/main/webapp/lib/metawidget/core/metawidget-layouts.js +++ b/modules/js/corejs/src/main/webapp/lib/metawidget/core/metawidget-layouts.js @@ -469,19 +469,22 @@ var metawidget = metawidget || {}; if ( elementName !== 'action' ) { - var label = metawidget.util.createElement( mw, 'label' ); + var labelString = this.getLabelString( attributes, mw ); - if ( widget.hasAttribute( 'id' ) ) { - label.setAttribute( 'for', widget.getAttribute( 'id' ) ); - } + if ( labelString !== '' ) { + var label = metawidget.util.createElement( mw, 'label' ); - if ( idPrefix !== undefined ) { - label.setAttribute( 'id', idPrefix + '-label' ); - } + if ( widget.hasAttribute( 'id' ) ) { + label.setAttribute( 'for', widget.getAttribute( 'id' ) ); + } - label.innerHTML = metawidget.util.getLabelString( attributes, mw ) + ':'; + if ( idPrefix !== undefined ) { + label.setAttribute( 'id', idPrefix + '-label' ); + } - th.appendChild( label ); + label.innerHTML = labelString; + th.appendChild( label ); + } } tr.appendChild( th ); @@ -501,6 +504,21 @@ var metawidget = metawidget || {}; tr.appendChild( td ); }; + + /** + * @returns the label string, or a blank string if no label. + */ + + this.getLabelString = function( attributes, mw ) { + + var labelString = metawidget.util.getLabelString( attributes, mw ); + + if ( labelString === '' ) { + return labelString; + } + + return labelString + ':'; + }; }; // @@ -590,7 +608,7 @@ var metawidget = metawidget || {}; decorator.layoutWidget = function( widget, elementName, attributes, container, mw ) { var section; - + // If our delegate is itself a NestedSectionLayoutDecorator, strip // the section diff --git a/modules/js/corejs/src/test/java/org/metawidget/util/ScenarioRunnerTestCase.java b/modules/js/corejs/src/test/java/org/metawidget/util/ScenarioRunnerTestCase.java index 4f4289172c..c3f756cbd6 100644 --- a/modules/js/corejs/src/test/java/org/metawidget/util/ScenarioRunnerTestCase.java +++ b/modules/js/corejs/src/test/java/org/metawidget/util/ScenarioRunnerTestCase.java @@ -56,7 +56,6 @@ protected final void runScenarioRunner( String url ) { new WebDriverWait( driver, TEST_TIMEOUT_IN_SECONDS ).until( new ExpectedCondition() { - @Override public Boolean apply( WebDriver theDriver ) { return applyExpectedCondition( theDriver ); diff --git a/modules/js/corejs/src/test/js/metawidget-core-layout-tests.js b/modules/js/corejs/src/test/js/metawidget-core-layout-tests.js index b54e0a3cbe..5d61da70fd 100644 --- a/modules/js/corejs/src/test/js/metawidget-core-layout-tests.js +++ b/modules/js/corejs/src/test/js/metawidget-core-layout-tests.js @@ -330,7 +330,7 @@ expect( container.childNodes.length ).toBe( 1 ); } ); - it( "allows label overrides", function() { + it( "supports label overrides", function() { var layout = new metawidget.layout.DivLayout(); layout.getLabelString = function() { @@ -937,6 +937,44 @@ expect( container.childNodes[0].childNodes.length ).toBe( 1 ); expect( container.childNodes.length ).toBe( 1 ); } ); + + it( "supports label overrides", function() { + + var layout = new metawidget.layout.TableLayout(); + layout.getLabelString = function() { + + return ""; + } + + var widget1 = simpleDocument.createElement( 'input' ); + widget1.setAttribute( 'id', 'widget1' ); + var container = simpleDocument.createElement( 'metawidget' ); + var mw = { + getElement: function() { + + return container; + } + } + + layout.startContainerLayout( container, mw ); + layout.layoutWidget( widget1, "property", { + name: "widget1" + }, container, mw ); + + expect( container.childNodes[0].toString() ).toBe( 'table' ); + expect( container.childNodes[0].childNodes[0].toString() ).toBe( 'tbody' ); + expect( container.childNodes[0].childNodes[0].childNodes[0].toString() ).toBe( 'tr id="table-widget1-row"' ); + expect( container.childNodes[0].childNodes[0].childNodes[0].childNodes[0].toString() ).toBe( 'th id="table-widget1-label-cell"' ); + expect( container.childNodes[0].childNodes[0].childNodes[0].childNodes[0].innerHTML ).toBeUndefined(); + expect( container.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes.length ).toBe( 0 ); + expect( container.childNodes[0].childNodes[0].childNodes[0].childNodes[1].toString() ).toBe( 'td id="table-widget1-cell"' ); + expect( container.childNodes[0].childNodes[0].childNodes[0].childNodes[1].childNodes[0] ).toBe( widget1 ); + expect( container.childNodes[0].childNodes[0].childNodes[0].childNodes[2].toString() ).toBe( 'td' ); + expect( container.childNodes[0].childNodes[0].childNodes[0].childNodes.length ).toBe( 3 ); + expect( container.childNodes[0].childNodes[0].childNodes.length ).toBe( 1 ); + expect( container.childNodes[0].childNodes.length ).toBe( 1 ); + expect( container.childNodes.length ).toBe( 1 ); + } ); } ); describe( "The HeadingTagLayoutDecorator", function() {