setting.js 4.14 KB
/**
 * @typedef UrlParamsType
 * @property {number} dev
 * @property {number} db
 * @property {number} gh
 * @property {number} gl
 * @property {number} gapi
 * @property {boolean} isProxyMode
 * @property {string} proxyPrefix
 */

/**
 * @typedef HashParamsType
 * @property {string} configurationId
 * @property {string} organizationId
 * @property {string} mode
 * @property {string} platform
 * @property {string} publicId
 * @property {string} lang
 * @property {string} form
 */


/**
 * @typedef PROJECT_ENV
 * @property {'development' | 'production'} mode
 * @property {string} base
 * @property {boolean} enableOss
 * @property {string} ossAddress
 */

/**
 * @enum {string} 环境
 * @readonly
 */
var ENV_MODE_ENUM = {
  /**
   * 开发环境
   */
  DEVELOPMENT: 'development',

  /**
   * 生产环境
   */
  PRODUCTION: 'production',
}

window.ENV_MODE_ENUM = ENV_MODE_ENUM

Object.freeze(window.ENV_MODE_ENUM)

/**
 * @enum {string} 模式
 */
var MODE_ENUM = {
  /**
   * 设计模式
   */
  DESIGN: 'design',

  /**
   * 灯箱模式
   */
  LIGHTBOX: 'lightbox',

  /**
   * 分享模式
   */
  SHARE: 'share'
}

window.MODE_ENUM = MODE_ENUM

Object.freeze(window.MODE_ENUM)

/**
 * @enum {string} cell 属性枚举
 */
var CellAttributeKeyEnum = {
  COMPONENT_KEY: 'componentKey',
  CATEGORY: 'category',
  SHAPE_KEY: 'shapeKey',
  COPY_SOURCE: 'copySource'
}

window.CellAttributeKeyEnum = CellAttributeKeyEnum

Object.freeze(window.CellAttributeKeyEnum)

/**
 * @type {HashParamsType}
 */
window.hashParams = (function () {
  try {
    const { hash } = window.location
    let string = atob(hash.slice(1))
    string = atob(string.slice(0, 6) + string.slice(16))
    return JSON.parse(string)
  } catch (err) {
    return {}
  }
})()

/**
 * @type {UrlParamsType}
 */
var urlParams = (function () {
  var result = { proxyPrefix: PROJECT_ENV.base }
  var params = window.location.search.slice(1).split('&')
  var isProxyMode = result.proxyPrefix !== '/'

  // 禁用 OneDrive 集成。
  result.od = 0
  // 禁用 GitHub 集成。
  result.gh = 0
  // 禁用 GitLab 集成。
  result.gl = 0
  // 禁用 Dropbox 集成。
  result.db = 0
  // 禁用谷歌集成。
  result.gapi = 0
  // 不显示初始屏幕。
  result.splash = 0
  // 指定为本地存储
  // result.mode = 'browser'

  result['sidebar-entries'] = 'large'

  result.save = 'local'

  for (let i = 0; i < params.length; i++) {
    var idx = params[i].indexOf('=')

    if (idx > 0)
      result[params[i].substring(0, idx)] = params[i].substring(idx + 1)
  }

  if (window.PROJECT_ENV && window.PROJECT_ENV.mode && window.PROJECT_ENV.mode === ENV_MODE_ENUM.DEVELOPMENT) result.dev = 1

  result.isProxyMode = isProxyMode

  if (hashParams.mode !== MODE_ENUM.DESIGN) {
    result.chrome = 0
    result.edit = '_blank'
    result.nav = 1
    result.layers = 1
    result.lightbox = 1
    return result
  }

  result.ruler = 1

  return result
})()

window.urlParams = urlParams

Object.freeze(window.urlParams)

/**
 * @description 获取代理前缀
 * @returns {string}
 */
function getProxyPrefix() {
  return window.urlParams.isProxyMode ? window.urlParams.proxyPrefix : ''
}

const drawioConfig = JSON.parse(localStorage.getItem('.drawio-config') || null)

const localLang = drawioConfig?.language


window.DRAWIO_BASE_URL = `${location.origin}/webapp`
window.RESOURCES_PATH = `${getProxyPrefix()}/webapp/resources`
window.DRAW_MATH_URL = `${getProxyPrefix()}/webapp/math/es5`
window.STYLE_PATH = `${getProxyPrefix()}/webapp/styles`
window.STENCIL_PATH = `${getProxyPrefix()}/webapp/stencils`
window.mxImageBasePath = `${getProxyPrefix()}/webapp/mxgraph/images`
window.IMAGE_PATH = `${getProxyPrefix()}/webapp/images`
window.mxLanguage = localLang || (window?.hashParams?.lang || 'zh')
window.mxBasePath = `${getProxyPrefix()}/webapp`
window.mxLoadResources = false
window.tkExtension = '.xml'
window.TEMPLATE_PATH = `${getProxyPrefix()}/webapp/templates`
window.DRAWIO_LIGHTBOX_URL = window.location.origin
window.SHAPES_PATH = `${getProxyPrefix()}/webapp/shapes`
window.GRAPH_IMAGE_PATH = `${getProxyPrefix()}/webapp/img`
window.mxGraphBasePath = `${getProxyPrefix()}/webapp/mxgraph`
window.OPEN_FORM = `${getProxyPrefix()}/webapp/open.html`;