docs: function read (controller, args, links) {
      var record = args[controller.model.name]
      // get local copy of links
      links = _.cloneDeep(links)
      // subsitute any variables in links with values from record
      resolveLinkVariables(links, record)
      // if this is json response return raw data
      if (args.json) {
          return record
      }
      // javascript for page
      var js = []
      // create form to edit instance data
      if (controller.form) {
          var form = controller.form.newInstance({
              action: './'+record.id+'/update',
              mode: 'update',
              record: record,
              submit: {title: 'Update '+changeCase.titleCase(controller.model.name)},
              title: changeCase.titleCase(controller.model.name)+' Record',
          })
          // if form uses ckeditor add js
          if (form.ckeditor) {
              js.push({
                  crossorigin: 'anonymous',
                  //integrity: 'sha256-TTtB6JD2qVpmE4ydlMyYH52d7OSMq5FQh2f0ECHR0Bw=',
                  src: '//cdn.jsdelivr.net/ckeditor/4.3.1/ckeditor.js',
              })
          }
      }
      // related records
      var related = []
      // add related records
      _.each(_.keys(record.related).sort(), relatedName => {
          // get related model
          var relatedModel = controller.model.relation(relatedName).model
          // related records
          var relatedRecords = record.related[relatedName]
          // build actions for related records
          _.each(relatedRecords, relatedRecord => {
              buildActions(relatedModel.controller, relatedRecord, controller, record)
          })
          // get fields for displaying model from controller or build
          var fields = relatedModel.controller && relatedModel.controller.fields || buildFields(relatedModel)
          // add related record with data needed to render
          related.push({
              fields: fields,
              model: relatedModel,
              records: relatedRecords,
          })
      })
      // return form
      return {
          form: form,
          forms: args.forms,
          js: js,
          links: links,
          model: controller.model,
          record: record,
          related: related,
      }
  }