lib/compiler.js
function(walk) {
    var ctl = this.createCtl('sortableGroup');
    ctl.items = [];
    // Tweak selector to use the generated id
    this.selector.id = ctl.id;
    // Also append `sortableGroup` class
    if (!Array.isArray(this.selector.classes))
      this.selector.classes = [];
    this.selector.classes.push('sortableGroup');
    // Emit root element
    this.out.push('<fieldset');
    this.emitSelector();
    this.out.push('>');
    // Emit each item
    var startIdx = walk.position;
    while(walk.hasCurrent()) {
      walk.scrollToEol().skipWhitespaces();
      if (walk.at('^ ')) {
        this.emitSortableItem(ctl, new SubWalker(walk, startIdx, walk.position));
        startIdx = walk.position;
      }
    }
    // Emit the last one
    this.emitSortableItem(ctl, new SubWalker(walk, startIdx, walk.position));
    this.out.push('</fieldset>');
  }
function(walk) {
    var ctl = this.createCtl('sortableGroup');
    ctl.items = [];
    // Tweak selector to use the generated id
    this.selector.id = ctl.id;
    // Also append `sortableGroup` class
    if (!Array.isArray(this.selector.classes))
      this.selector.classes = [];
    this.selector.classes.push('sortableGroup');
    // Emit root element
    this.out.push('<fieldset');
    this.emitSelector();
    this.out.push('>');
    // Emit each item
    var startIdx = walk.position;
    while(walk.hasCurrent()) {
      walk.scrollToEol().skipWhitespaces();
      if (walk.at('^ ')) {
        this.emitSortableItem(ctl, new SubWalker(walk, startIdx, walk.position));
        startIdx = walk.position;
      }
    }
    // Emit the last one
    this.emitSortableItem(ctl, new SubWalker(walk, startIdx, walk.position));
    this.out.push('</fieldset>');
  }
Emits a sortable group, e.g.

```
<fieldset id="{ctl.id}" class="sortableGroup">
<div id="item-{item.id}" class="item">
<input id="{item.id}"
type="hidden"
name="{ctl.id}"
value="{item.id}"/>
<label>{item.label}</label>
</div>
...
</fieldset>
```