Changeset 1446
- Timestamp:
- 2010-03-08 15:32:42 (2 years ago)
- Location:
- trunk
- Files:
-
- 7 edited
-
modules/kauri-forms/kauri-forms-framework/src/main/kauri/static-{build}.key/kauri.forms/basic-controls.js (modified) (2 diffs)
-
modules/kauri-forms/kauri-forms-framework/src/main/kauri/static-{build}.key/kauri.forms/collection.js (modified) (3 diffs)
-
modules/kauri-forms/kauri-forms-framework/src/main/kauri/static-{build}.key/kauri.forms/composite.js (modified) (2 diffs)
-
modules/kauri-forms/kauri-forms-framework/src/main/kauri/static-{build}.key/kauri.forms/control.js (modified) (21 diffs)
-
modules/kauri-forms/kauri-forms-framework/src/main/kauri/static-{build}.key/kauri.forms/form.js (modified) (2 diffs)
-
samples/kauri-forms-sample/src/main/kauri/pages/collection-control.html.xml (modified) (3 diffs)
-
samples/kauri-forms-sample/src/main/kauri/pages/collection-performance.html.xml (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/modules/kauri-forms/kauri-forms-framework/src/main/kauri/static-{build}.key/kauri.forms/basic-controls.js
r1438 r1446 38 38 $.extend(InputControl.prototype.templates, kf.Control.prototype.templates); 39 39 $.extend(InputControl.prototype.templates, { 40 input:"<input type='text' />"40 input:"<input type='text' kauri-role='input'/>" 41 41 }); 42 42 … … 56 56 } 57 57 if(! $input.is(selector)){ 58 $input.html(this.getTemplate('input')); 58 var $element = $(this.getTemplate('input')); 59 60 $input.each( function() { 61 $.each(this.attributes, function(i, attrib) { 62 var name = attrib.name; 63 var value = attrib.value; 64 if (!$element.attr(name)) { 65 $element.attr(name, value); 66 } 67 }); 68 }); 69 $input.before($element).remove(); 59 70 } 60 71 -
trunk/modules/kauri-forms/kauri-forms-framework/src/main/kauri/static-{build}.key/kauri.forms/collection.js
r1441 r1446 63 63 $.extend(CollectionControl.prototype.templates, { 64 64 layout: "<tr><td ><span kauri-role='label'/><span kauri-role='input'/><span kauri-role='messages'/><span kauri-role='delete'/></td></tr>", 65 container: "<table kauri-role='container'></table>" 65 container: "<table kauri-role='container'></table>", 66 input: "<table kauri-role='input'></table>" 66 67 }); 68 69 CollectionControl.prototype.groupChildrenInLayoutIndex = true; 67 70 68 71 CollectionControl.prototype.initElements = function( ) { … … 87 90 } 88 91 89 var container = this.getElement(kf.ControlElements.REV_ CONTAINER);92 var container = this.getElement(kf.ControlElements.REV_INPUT); 90 93 var layout = this.getElement(kf.ControlElements.REV_LAYOUT); 91 94 … … 271 274 } 272 275 273 this._childrenContainer.empty();276 // TODO check this._childrenContainer.empty(); 274 277 this._children = []; 275 278 } -
trunk/modules/kauri-forms/kauri-forms-framework/src/main/kauri/static-{build}.key/kauri.forms/composite.js
r1438 r1446 80 80 $.extend(CompositeControl.prototype.templates, kf.AbstractContainerControl.prototype.templates); 81 81 $.extend(CompositeControl.prototype.templates, { 82 container: "<dl kauri-role='container'></dl>", 83 layout: "<dt kauri-role='label'/><dd><span kauri-role='input'/><span kauri-role='messages'/></dd>" 82 input: "<dl kauri-role='input'></dl>", 83 layout: "<dt kauri-role='label'/><dd><span kauri-role='input'/><span kauri-role='messages'/></dd>", 84 "kauri-layout": "<dt kauri-role='label'/><dd><span kauri-role='input'/><span kauri-role='messages'/></dd>" 84 85 }); 85 86 … … 102 103 throw "[CompositeControl#createChildElements] No container to work with."; 103 104 } 104 var item = $(this.getTemplate('layout')).appendTo(container); 105 return item; 105 // TODO check why this has to happen? 106 //var item = $(this.getTemplate('layout')).appendTo(container); 107 //return item; 106 108 } 107 109 -
trunk/modules/kauri-forms/kauri-forms-framework/src/main/kauri/static-{build}.key/kauri.forms/control.js
r1441 r1446 39 39 this.elementIndex = {}; 40 40 41 // index of layout cursor elements 42 this.layoutIndex = {}; 43 41 44 } 42 45 … … 56 59 57 60 /** 61 * Html attribute name used for specifying the role 62 * @static 63 * @final 64 */ 65 ControlElements.ATTR_REV = "kauri-role"; 66 67 /** 68 * Html attribute name used for specifying the layout relation. 69 * @static 70 * @final 71 */ 72 ControlElements.ATTR_LAYOUT = "kauri-layout"; 73 74 /** 75 * Html attribute name used for specifying the layout cursor position 76 * @static 77 * @final 78 */ 79 ControlElements.ATTR_LAYOUT_CURSOR = "kauri-layout-cursor"; 80 81 /** 82 * Html attribute name used for specifying the layout clone id 83 * @static 84 * @final 85 */ 86 ControlElements.ATTR_LAYOUT_CLONE = "kauri-layout-clone"; 87 88 89 /** 90 * Html attribute name used for specifying the layout group which the element belongs to 91 * @static 92 * @final 93 */ 94 ControlElements.ATTR_LAYOUT_GROUP = "kauri-layout-group"; 95 96 97 /** 58 98 * Html attribute name used for specifying the relation. Rev is short for reverse index 59 99 * @static … … 61 101 */ 62 102 ControlElements.ATTR_REV = "kauri-role"; 103 63 104 64 105 /** … … 105 146 ControlElements.REV_MARK = "mark"; 106 147 107 /** 108 * Specifies that the element is a container for the control 148 149 /** 150 * TODO this one should be removed, it is remplaces by the kauri-layout attribute 109 151 * @static 110 152 * @final 111 153 */ 112 154 ControlElements.REV_CONTAINER = "container"; 113 114 /**115 * Specifies that the element should be used as a layout or template for child elements116 * @static117 * @final118 */119 155 ControlElements.REV_LAYOUT = "layout"; 156 120 157 121 158 /** … … 163 200 164 201 var rev = $this.attr(ControlElements.ATTR_REV); 165 166 202 store.addElementIndex(index, rev, $this); 167 203 … … 172 208 }; 173 209 174 var wrapIndexor = function($wrap){175 //var $first = $($eltArray[0]);176 index = "";177 var idref = $wrap.attr(ControlElements.ATTR_IDREF) || "";178 if (idref.length == 0 || idref.charAt(0) != '/')179 index = $wrap.parents("[" + ControlElements.ATTR_INDEX + "]:first").attr(ControlElements.ATTR_INDEX);180 if (idref) {181 index = $.concatPath(index, idref);182 183 }184 185 var rev = $wrap.attr(ControlElements.ATTR_REV);186 187 store.addElementIndex(index, rev, $wrap.children());188 189 //add type property if known190 // store.addTypeAndControl(index, $elt.attr(ControlElements.ATTR_TYPE), $this.attr(ControlElements.ATTR_CONTROL));191 192 $wrap.attr(ControlElements.ATTR_INDEX, index);193 };194 195 210 // find all kauri-idref and kauri-role marked elements and index them 196 var kauriSelector = "[" + ControlElements.ATTR_IDREF + "],[" + ControlElements.ATTR_REV + "]"; 197 198 211 var kauriSelector = "[" + ControlElements.ATTR_IDREF + "]"; 212 var layoutSelector = "[kauri-layout]"; 199 213 200 214 // begin by index space itself, 201 if (space.is(kauriSelector) )215 if (space.is(kauriSelector) ) 202 216 space.each(indexor); 203 217 // then go through matching children, but only once (even if they match multiple times) … … 205 219 // TODO should we do this this way or should be traverse the tree ourselves (performance?) 206 220 var $this = $(this); 207 var revParents = $this.parents("[" + ControlElements.ATTR_REV + "='" + ControlElements.REV_LAYOUT + "']"); 208 209 return ($this.attr(ControlElements.ATTR_IDREF)!=undefined || revParents == null || revParents.length==0); 210 }); 211 212 matching.each(indexor); 221 var revParents = $this.parents("[" + ControlElements.ATTR_LAYOUT + "]"); 222 223 return (revParents == null || revParents.length==0); 224 }); 225 $.unique($(kauriSelector, space)).each(indexor); 226 227 228 var matching = $($.unique($("[kauri-layout-cursor]", space))).filter(function(){ 229 var $this = $(this); 230 var revParents = $this.parents("[kauri-layout]"); 231 return (revParents == null || revParents.length==0); 232 }); 233 234 $.each(matching, function(pos, element){ 235 var $element = $(element); 236 store.addCursorIndex($element.attr("kauri-layout-cursor"), $element); 237 }); 238 239 240 if (space.is(layoutSelector)) 241 store.addLayoutIndex(space.attr("kauri-layout"), space); 242 243 var matchingLayout = $($.unique($(layoutSelector, space))).filter(function(){ 244 var $this = $(this); 245 var revParents = $this.parents("[kauri-layout]"); 246 return (revParents == null || revParents.length==0); 247 }); 248 249 $.each(matchingLayout, function(pos, element){ 250 var $element = $(element); 251 store.clearLayoutIndex($element.attr("kauri-layout")); 252 }); 253 254 $.each(matchingLayout, function(pos, element){ 255 var $element = $(element); 256 store.addLayoutIndex($element.attr("kauri-layout"), $element); 257 }); 258 213 259 } 214 260 … … 289 335 $elm = form.getElementIndex(index)[0]; 290 336 291 292 293 337 if ($elm) { 294 338 $elm.attr(ControlElements.ATTR_INDEX, index); … … 304 348 } 305 349 350 351 ControlElements.lookupLayout = function(control) { 352 353 var form = control.getForm(); 354 var index = control.getGroupId(); 355 356 var $elm = form.getLayoutIndex(index); 357 358 if ($elm) 359 control.setElement(ControlElements.ATTR_LAYOUT, $elm); 360 return $elm; 361 } 362 363 ControlElements.lookupLayoutCursor = function(control) { 364 var form = control.getForm(); 365 var index = control.getGroupId(); 366 367 var $elm = form.getCursorIndex(index); 368 369 if ($elm) 370 control.setElement(ControlElements.ATTR_LAYOUT_CURSOR, $elm); 371 return $elm; 372 } 373 374 306 375 /** 307 376 * Finds all elements associated to a certain control … … 367 436 return empty; 368 437 } 369 438 439 ControlElements.newLayoutElements = function() { 440 var empty = []; 441 empty.layout = {}; 442 empty.cursor = {}; 443 return empty; 444 } 445 370 446 371 447 /** … … 513 589 }); 514 590 } 515 591 592 /** 593 * Adds the specified element to the index. 594 * 595 * @param {string} 596 * index index position to add to. 597 * @param {string} 598 * [group] the group part we're adding a layout element to 599 * @param {$jquery} 600 * elm element to add 601 */ 602 ControlElements.prototype.addLayoutIndex = function(index, $element){ 603 var elms = this.layoutIndex[index] = this.layoutIndex[index] || ControlElements.newLayoutElements(); 604 var group = $element.attr("kauri-group"); 605 if(!group) 606 group="1"; // TODO 607 608 var layoutgroup = elms.layout[group] = elms.layout[group] || []; 609 layoutgroup.push($element); 610 } 611 612 ControlElements.prototype.clearLayoutIndex = function(index){ 613 this.layoutIndex[index] = ControlElements.newLayoutElements(); 614 } 615 616 617 /** 618 * Gets the specified layout JQuery wrapper element from the index. 619 * 620 * @param {string} 621 * [index] index to get. <code>undefined</code> will return the whole store. 622 * @param {group} 623 * [group] the group layout part to get from the index 624 */ 625 ControlElements.prototype.getLayoutIndex = function(index, group){ 626 627 if (index == undefined) 628 return this.layoutIndex; 629 630 var $elm; 631 //this.layoutIndex[index] = this.layoutIndex[index] || ControlElements.newLayoutElements(); 632 633 if(this.layoutIndex[index]) { 634 635 if(group == undefined) 636 return this.layoutIndex[index].layout; 637 else 638 return this.layoutIndex[index].layout[group]; 639 }else 640 return null; 641 } 642 643 /** 644 * Adds the specified element to the cursor index. 645 * 646 * @param {string} 647 * index index position to add to. 648 * @param {$jquery} 649 * elm element to add 650 */ 651 ControlElements.prototype.addCursorIndex = function(index, $element){ 652 var elms = this.layoutIndex[index] = this.layoutIndex[index] || ControlElements.newLayoutElements(); 653 elms.cursor = $element; 654 } 655 656 /** 657 * Gets the specified layout JQuery wrapper element from the cursor index. 658 * 659 * @param {string} 660 * [index] index to get. <code>undefined</code> will return the whole store. 661 */ 662 ControlElements.prototype.getCursorIndex = function(index){ 663 664 if (index == undefined) 665 return this.layoutIndex; 666 667 return (this.layoutIndex[index]) ? this.layoutIndex[index].cursor : null; 668 } 669 670 516 671 517 672 /** … … 605 760 }; 606 761 762 763 /** 764 * Holds the control-bound HTML templates per relation 765 * @private 766 */ 767 Control.prototype.groupInLayoutIndex = false; 768 769 607 770 /** 608 771 * Initializes element configurations … … 667 830 668 831 var $elements = this._elements[relation]; 832 833 if(relation == ControlElements.REV_MARK && !$elements) 834 $elements = this._elements["input"]; 835 669 836 return $elements; 670 837 } … … 870 1037 871 1038 var $input = this.getElement(); 872 $input.addClass("unfocused"); 873 $input.blur(function(){ 874 $(this).removeClass("focused").addClass("unfocused"); 875 }); 876 $input.focus(function(){ 877 $(this).addClass("focused").removeClass("unfocused"); 878 }); 1039 if($input) { 1040 $input.addClass("unfocused"); 1041 $input.blur(function(){ 1042 $(this).removeClass("focused").addClass("unfocused"); 1043 }); 1044 $input.focus(function(){ 1045 $(this).addClass("focused").removeClass("unfocused"); 1046 }); 1047 } 879 1048 880 1049 var $update = this.getUpdateElement(); … … 1325 1494 1326 1495 var mrkElm = this.getElement(ControlElements.REV_MARK); 1327 if (msg) 1328 mrkElm.removeClass("valid").addClass("invalid"); 1329 else 1330 mrkElm.removeClass("invalid").addClass("valid"); 1331 1496 1497 if(mrkElm){ 1498 if (msg) 1499 mrkElm.removeClass("valid").addClass("invalid"); 1500 else 1501 mrkElm.removeClass("invalid").addClass("valid"); 1502 } 1332 1503 } 1333 1504 … … 1364 1535 return $.concatPath(parentId, id); 1365 1536 } 1366 1537 1538 /** 1539 * Gets this controls absolute id. This means including all the ids of possible parent controls 1540 * @return absolute id or id-path 1541 * @type String 1542 */ 1543 Control.prototype.getGroupId = function(){ 1544 1545 var parent = this.getParent(); 1546 var parentId = ""; 1547 if (parent) 1548 parentId = parent.getGroupId(); 1549 1550 var id = (this.getParent() && this.getParent().groupChildrenInLayoutIndex) ? "#" : this.getId(); 1551 return $.concatPath(parentId, id); 1552 } 1553 1367 1554 1368 1555 // TODO support 'match-patterns' allowing to return arrays of controls on which some jqyery like each() can then execute … … 1454 1641 Control.prototype.enable = function(){ 1455 1642 for (var rel in this._elements) { 1456 var el = this. _elements[rel];1643 var el = this.getElement(rel); 1457 1644 if (el.is(":disabled")) { 1458 1645 el.removeAttr("disabled"); … … 1569 1756 input: "<div><span kauri-role='label'/><span kauri-role='input'/><span kauri-role='messages'/></div>", 1570 1757 layout: "<div><span kauri-role='label'/><span kauri-role='input'/><span kauri-role='messages'/></div>", 1758 "kauri-layout": "<div><span kauri-role='label'/><span kauri-role='input'/><span kauri-role='messages'/></div>", 1571 1759 container: "<div kauri-role='container'></div>" 1572 1760 }); … … 1768 1956 */ 1769 1957 AbstractContainerControl.prototype.initContainerElements = function(create){ 1770 1771 var container = ControlElements.lookup(this, ControlElements.REV_CONTAINER); 1772 var $container = $(container); 1773 if (!container) { 1774 var creator = this.getTemplate(ControlElements.REV_CONTAINER); 1775 if (creator) { 1776 $container = $(creator).appendTo($(this.getElement("input"))); 1777 this.setElement(ControlElements.REV_CONTAINER, $container); 1778 } 1779 } 1780 1781 if (!$container) { // default to complete input space 1782 this.setElement(ControlElements.REV_CONTAINER, this.getElement("input")); 1783 } 1784 1785 var layout = ControlElements.lookup(this, ControlElements.REV_LAYOUT); 1786 if (!layout) { 1787 var creator = this.getTemplate(ControlElements.REV_LAYOUT); 1788 if (creator) { 1789 $layout = $(creator).appendTo($container); 1790 this.setElement(ControlElements.REV_LAYOUT, $layout); 1791 } 1792 } 1793 1794 /* if (layout) { 1795 layout.hide(); 1796 }*/ 1958 var container = ControlElements.lookup(this, ControlElements.REV_INPUT); 1959 1960 1961 // check if there is a layout attached to this element 1962 // if not, switch the apply the input template from the control and append to the input container 1963 var id = this.getAbsoluteId(); 1964 if(!this.getForm().getLayoutIndex(id)){ 1965 var creator = this.getTemplate(ControlElements.REV_INPUT); 1966 if (creator) { 1967 var form = this.getForm(); 1968 var $input = $(creator); 1969 $container = $input.appendTo(container); 1970 this.setElement(ControlElements.REV_INPUT, $input); 1971 } 1972 } 1973 1974 var $container = $(container); 1975 if (!container) { 1976 1977 } 1978 1979 if (!$container) { // default to complete input space 1980 this.setElement(ControlElements.REV_INPUT, this.getElement("input")); 1981 } 1797 1982 } 1798 1983 … … 1800 1985 AbstractContainerControl.prototype.getUpdateElement = function(){ 1801 1986 }; 1987 1988 1802 1989 1803 1990 /** … … 1817 2004 */ 1818 2005 AbstractContainerControl.prototype._createChildElements = function(id, position) { 1819 1820 var newIndex = $.concatPath(this.getAbsoluteId(), id); 1821 var elements = this.getForm().getElementIndex(newIndex); 2006 var absoluteId = this.getAbsoluteId(); 2007 var newIndex = $.concatPath(absoluteId, id); 2008 var form = this.getForm(); 2009 var elements = form.getElementIndex(newIndex); 1822 2010 if (elements && (elements.length > 0 || elements.meta[ControlElements.REV_INPUT])) 1823 2011 return elements; // no need to create new elements 1824 var container = this.getElement(ControlElements.REV_CONTAINER); 1825 var layout = this.getElement(ControlElements.REV_LAYOUT); 1826 1827 var newElements 1828 if (!(container && layout)) { 1829 newElements = this.createChildElements(id, container, layout); 1830 } 1831 else { 1832 // there is a container and there is a layout 1833 var childAtPosition = null; 1834 if (position != undefined && (typeof position == "number")) { 1835 childAtPosition = container.children(":nth-child(" + (position + 1) + ")"); 1836 } 1837 var $layout = layout.clone(); 1838 1839 if (childAtPosition != null && childAtPosition.length == 1) { 1840 newElements = $layout.insertBefore(childAtPosition[0]).show(); 1841 } else { 1842 newElements = $layout.appendTo(container).show(); 1843 } 2012 2013 var newElements; 2014 var newElementsArray = []; 2015 2016 var form = this.getForm(); 2017 var groupId = this.getGroupId(); 2018 var containerId = this.getId(); 2019 var $layoutGroups = form.getLayoutIndex(groupId); 2020 2021 2022 var copyIdRef = function(idx, elt){ 2023 var $elt = $(elt); 2024 if($elt.attr(ControlElements.ATTR_IDREF)) 2025 $elt.attr(ControlElements.ATTR_IDREF, $elt.attr(ControlElements.ATTR_IDREF) + "/" +id); 2026 else 2027 $elt.attr(ControlElements.ATTR_IDREF, id); 2028 }; 2029 2030 2031 if(!$layoutGroups) { 2032 // get layout from template and where to put cursor?? default append to input element?? 2033 var container = this.getElement(ControlElements.REV_INPUT); 1844 2034 2035 var $layout = $(this.getTemplate("layout")); 1845 2036 1846 //newElements.attr(ControlElements.ATTR_REV, ControlElements.REV_ITEM); 1847 1848 if(true){ 1849 // hier item index berekenen en in elementindex steken 1850 // daarna gewoon de elemennten indexeren 1851 1852 var idref = id; 1853 if (idref.length == 0 || idref.charAt(0) != '/') 1854 index = newElements.parents("[" + ControlElements.ATTR_INDEX + "]:first").attr(ControlElements.ATTR_INDEX); 1855 if (idref) { 1856 index = $.concatPath(index, idref); 1857 } 1858 1859 this.getForm().addElementIndex(index, ControlElements.REV_ITEM, newElements); 1860 1861 /* 1862 var $wrap = $("<kauri-layout/>"); 1863 $wrap.append(newElements.clone()); 1864 1865 $wrap.attr(ControlElements.ATTR_REV, ControlElements.REV_ITEM); 1866 $wrap.attr(ControlElements.ATTR_IDREF, id); 1867 //newElements = $wrap; 1868 var form = this.getForm(); 1869 ControlElements.index($wrap, form, true); 1870 return newElements;*/ 1871 } 1872 1873 } 1874 1875 newElements.attr(ControlElements.ATTR_IDREF, id); 1876 var form = this.getForm(); 1877 ControlElements.index(newElements, form, true); // we force re-indexing cause layout-template elements will already be 1878 // indexed 1879 return newElements; 2037 $layout.each(copyIdRef); 2038 2039 $.each($("[kauri-role]", $layout), copyIdRef); 2040 2041 newElements = container.append($layout); 2042 ControlElements.index($layout, form, true); 2043 newElementsArray.push($layout); 2044 }else{ 2045 // clone each element in layout group 2046 $.each($layoutGroups, function(layoutGroupId, eltArray){ 2047 $.each(eltArray, function(eltId, elt){ 2048 var $elt = $(elt); 2049 var $layoutClone = $elt.clone(); 2050 $layoutClone.attr("kauri-layout-clone", absoluteId + "(" + groupId + ")"); 2051 // set the id of the newly created row before the idref 2052 if($layoutClone.attr(ControlElements.ATTR_IDREF)) 2053 $layoutClone.attr(ControlElements.ATTR_IDREF, $layoutClone.attr(ControlElements.ATTR_IDREF) + "/" +id); 2054 else 2055 $layoutClone.attr(ControlElements.ATTR_IDREF, id); 2056 $layoutClone.removeAttr( ControlElements.ATTR_LAYOUT ); 2057 // search for cursor and insert before cursor 2058 var cursorId = groupId + "(" + layoutGroupId + ")" ; 2059 var cursor = form.getCursorIndex(cursorId); 2060 // make sure the clone is visible 2061 2062 if(!cursor) 2063 cursor = $elt; 2064 $layoutClone.show(); 2065 newElements = $layoutClone.insertBefore(cursor); 2066 ControlElements.index(newElements, form, true); 2067 newElementsArray.push(newElements); 2068 }); 2069 }); 2070 } 2071 2072 2073 return newElementsArray; 1880 2074 } 1881 2075 -
trunk/modules/kauri-forms/kauri-forms-framework/src/main/kauri/static-{build}.key/kauri.forms/form.js
r1441 r1446 142 142 $.extend(this, new kf.ControlElements()); 143 143 144 // hide all layout and cursor elements 145 var $layoutElts = $("[" + kf.ControlElements.ATTR_LAYOUT + "], [" + kf.ControlElements.ATTR_LAYOUT_CURSOR + "]", space); 146 $.each($layoutElts, function(index, element){ 147 $(element).hide(); 148 } 149 ); 150 144 151 space.attr(kf.ControlElements.ATTR_INDEX, '/'); 145 152 kf.ControlElements.index(space, this); 153 154 146 155 147 156 this.setRootElement(space); … … 164 173 Form.prototype.getAbsoluteId = function() { 165 174 166 return "/" 175 return "/"; 167 176 }; 168 177 178 Form.prototype.getGroupId = function() { 179 180 return "/"; 181 }; 182 183 169 184 Form.prototype.setAllowInvalid = function(allow) { 170 185 -
trunk/samples/kauri-forms-sample/src/main/kauri/pages/collection-control.html.xml
r1439 r1446 86 86 <label kauri-role="label" kauri-idref="countries">Countries</label> 87 87 88 <table kauri-idref="countries" kauri-type="collection" >88 <table kauri-idref="countries" kauri-type="collection" kauri-item="country"> 89 89 <thead> 90 90 <tr> … … 99 99 100 100 <tbody kauri-role="container"> 101 <tr kauri-role="layout"> 102 <td> 101 <tr kauri-layout="country"> 102 103 <td > 103 104 <input kauri-idref="name" kauri-type="string"/> 104 105 </td> … … 114 115 <span class="action copyAction">copy</span> 115 116 </td> 117 116 118 </tr> 119 117 120 </tbody> 118 121 -
trunk/samples/kauri-forms-sample/src/main/kauri/pages/collection-performance.html.xml
r1439 r1446 87 87 </thead> 88 88 89 <tbody kauri-role="container">90 <tr kauri- role="layout">89 <tbody> 90 <tr kauri-layout="/performances"> 91 91 <td> 92 92 <input kauri-idref="task" kauri-type="string" size="10"/>
Note: See TracChangeset
for help on using the changeset viewer.