Mercury Editor

mercury.js.coffee

Require all the dependencies

= require mercury/dependencies/jquery-ui-1.8.13.custom = require mercury/dependencies/jquery.additions = require mercury/dependencies/jquery.htmlClean = require mercury/dependencies/liquidmetal = require mercury/dependencies/showdown

Require all mercury files

= requireself = require ./nativeextensions = require ./pageeditor = require ./historybuffer = require ./tableeditor = require ./dialog = require ./palette = require ./select = require ./panel = require ./modal = require ./lightview = require ./statusbar = require ./toolbar = require ./toolbar.button = require ./toolbar.buttongroup = require ./toolbar.expander = require ./tooltip = require ./snippet = require ./snippettoolbar = require ./region = require ./uploader = requiretree ./regions = requiretree ./dialogs = requiretree ./modals = require ./finalize

@Mercury ||= {}
jQuery.extend @Mercury,
  version: '0.2.3'

No IE support yet because it doesn’t follow the W3C standards for HTML5 contentEditable (aka designMode). todo: move these into the specific region types — some would be supported, just not the primary ones?

  supported: document.getElementById && document.designMode && !jQuery.browser.konqueror && !jQuery.browser.msie

Mercury object namespaces

  Regions: Mercury.Regions || {}
  modalHandlers: Mercury.modalHandlers || {}
  lightviewHandlers: Mercury.lightviewHandlers || {}
  dialogHandlers: Mercury.dialogHandlers || {}
  preloadedViews: Mercury.preloadedViews || {}

Custom ajax headers

  ajaxHeaders: ->
    headers = {}
    headers[Mercury.config.csrfHeader] = Mercury.csrfToken
    return headers

Custom event methods

  on: (eventName, callback) ->
    jQuery(top).on("mercury:#{eventName}", callback)


  trigger: (eventName, options) ->
    Mercury.log(eventName, options)
    jQuery(top).trigger("mercury:#{eventName}", options)


  bind: (eventName, callback) -> # todo: deprecated -- use 'on' instead
    Mercury.deprecated('Mercury.bind is deprecated, use Mercury.on instead')
    Mercury.on(eventName, callback)

Alerting and logging methods

  notify: (args...) ->
    window.alert(Mercury.I18n.apply(@, args))


  warn: (message, severity = 0) ->
    if console
      try console.warn(message)
      catch e1
        if severity >= 1
          try console.debug(message) catch e2
    else if severity >= 1
      Mercury.notify(message)


  deprecated: (message)->
    message = "#{message} -- #{console.trace()}" if console && console.trace

throw “deprecated: #{message}”

    Mercury.warn("deprecated: #{message}", 1)


  log: ->
    if Mercury.debug && console
      return if arguments[0] == 'hide:toolbar' || arguments[0] == 'show:toolbar'
      try console.debug(arguments)
      catch e

I18n / Translation methods

  locale: ->
    return Mercury.determinedLocale if Mercury.determinedLocale
    if Mercury.config.localization.enabled
      locale = []
      if navigator.language && (locale = navigator.language.toString().split('-')).length
        topLocale = Mercury.I18n[locale[0]] || {}
        subLocale = if locale.length > 1 then topLocale["_#{locale[1].toUpperCase()}_"]
      if !Mercury.I18n[locale[0]]
        locale = Mercury.config.localization.preferredLocale.split('-')
        topLocale = Mercury.I18n[locale[0]] || {}
        subLocale = if locale.length > 1 then topLocale["_#{locale[1].toUpperCase()}_"]
    return Mercury.determinedLocale = {top: topLocale || {}, sub: subLocale || {}}


  I18n: (sourceString, args...) ->
    locale = Mercury.locale()
    translation = (locale.sub[sourceString] || locale.top[sourceString] || sourceString || '').toString()
    return if args.length then translation.printf.apply(translation, args) else translation