setConfig(...args) {

    if (args[0] == null) { // null or undefined

      return;
    }

    if (args.length === 1 && typeof args[0] === 'object') {

      for (let prop in args[0]) {
        this.setConfig(prop, args[0][prop]);
      }

    } else if (args.length === 2 && typeof args[0] === 'string') {

      const prop = utils.getWithoutPrefix(args[0], 'config.');
      let val = args[1];

      if (val === undefined) {

        return;
      }

      const config = this.getConfig();

      if (val === null) {

        $tm.logger('debug', 'Removing config', prop);
        delete config[`config.${prop}`];

      } else {

        if (prop === 'edge_type_namespace') {
          const match = val.match(/[^:]+/);
          val = (match ? match[0] : '');
        }

      }

      $tm.logger('log', 'Setting config', prop, val);
      config[`config.${prop}`] = val;

      // save
      $tw.wiki.addTiddler(new $tw.Tiddler(
        utils.getTiddler(this.configTRef),
        config
      ));

    } else { // not allowed

      throw new InvalidArgumentException(...args);

    }

  }
Enables the api user to modify the view's configuration.

In case two arguments are provided, the first is assumed to be the property
name and the second the value to be set.

In case a single object is provided as argument, it is treated as a key-value
collection and each property in this object is saved as config.

@param {*} args