code: function Form( formSelector, data, options ) {
      const $form = $( formSelector );
  
      this.$nonRepeats = {};
      this.$all = {};
      this.options = typeof options !== 'object' ? {} : options;
      if ( typeof this.options.clearIrrelevantImmediately === 'undefined' ) {
          this.options.clearIrrelevantImmediately = true;
      }
      this.view = {
          $: $form,
          html: $form[ 0 ],
          $clone: $form.clone()
      };
      this.model = new FormModel( data );
      this.repeatsPresent = !!this.view.html.querySelector( '.or-repeat' );
      this.widgetsInitialized = false;
      this.pageNavigationBlocked = false;
      this.initialized = false;
  }
docs: Class: Form
  
  Most methods are prototype method to facilitate customizations outside of enketo-core.
  
  @param {string} formSelector  jquery selector for the form
  @param {{modelStr: string, ?instanceStr: string, ?submitted: boolean, ?external: <{id: string, xmlStr: string }> }} data data object containing XML model, (partial) XML instance-to-load, external data and flag about whether instance-to-load has already been submitted before.
  @param { {?webMapId: string}} options form options
  
  @constructor