docs: function(options) {
  console.info("[tfw.grader] options=", options);
      var that = this;
  
      Widget.call(this);
      this.addClass("tfw-grader");
      this._options = options;
      if (options.header) {
          this.append(T('pre').text(options.header));
      }
      var area = T("textarea").attr({cols: 80, rows: 12});
      area.text(localStorage.getItem('grader#' + this.attr('id')) || '');
      this.append(area);
      if (options.footer) {
          this.append(T('pre').text(options.footer));
      }
      var btn = Widget.tag('button').text("Valider").Tap(function() {
          that.grade(area.element().value);
          localStorage.setItem('grader#' + this.attr('id'), area.element().value);
      });
      var ok = Widget.tag('div').addClass('ok');
      var error = Widget.tag('pre').addClass('error');
      this.append(btn, ok, error);
      this._btn = btn;
      this._ok = ok;
      this._error = error;
  
      area.element().addEventListener('keyup', function() {
          btn.removeAttr("disabled");
          error.text('');
          ok.text('').removeClass('show');
      });
  }