123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- class @Utils
- @navigatePath: (path) ->
- path = "/" + path unless path.match(/^\//)
- window.location.href = path
- @currentPath: ->
- window.location.href.replace(/https?:\/\/.*?\//g, '')
- @registerPage: (klass, options = {}) ->
- if options.forPathsMatching?
- if Utils.currentPath().match(options.forPathsMatching)
- window.currentPage = new klass()
- else
- new klass()
- @showDynamicModal: (content = '', { title, body, onHide } = {}) ->
- $("body").append """
- <div class="modal fade" tabindex="-1" id='dynamic-modal' role="dialog" aria-labelledby="dynamic-modal-label" aria-hidden="true">
- <div class="modal-dialog modal-lg">
- <div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
- <h4 class="modal-title" id="dynamic-modal-label"></h4>
- </div>
- <div class="modal-body">#{content}</div>
- </div>
- </div>
- </div>
- """
- modal = document.querySelector('#dynamic-modal')
- $(modal).find('.modal-title').text(title || '').end().on 'hidden.bs.modal', ->
- $('#dynamic-modal').remove()
- onHide?()
- body?(modal.querySelector('.modal-body'))
- $(modal).modal('show')
- @handleDryRunButton: (button, data = if button.form then $(':input[name!="_method"]', button.form).serialize() else '') ->
- $(button).prop('disabled', true)
- cleanup = -> $(button).prop('disabled', false)
- url = $(button).data('action-url')
- with_event_mode = $(button).data('with-event-mode')
- if with_event_mode is 'no'
- return @invokeDryRun(url, data, cleanup)
- $.ajax url,
- method: 'GET',
- data:
- with_event_mode: with_event_mode
- source_ids: $.map($(".link-region select option:selected"), (el) -> $(el).val() )
- success: (modal_data) =>
- Utils.showDynamicModal modal_data,
- body: (body) =>
- form = $(body).find('.dry-run-form')
- payload_editor = form.find('.payload-editor')
- if previous = $(button).data('payload')
- payload_editor.text(previous)
- editor = window.setupJsonEditor(payload_editor)[0]
- $(body).find('.dry-run-event-sample').click (e) =>
- e.preventDefault()
- editor.json = $(e.currentTarget).data('payload')
- editor.rebuild()
- form.submit (e) =>
- e.preventDefault()
- json = $(e.target).find('.payload-editor').val()
- json = '{}' if json == ''
- try
- payload = JSON.parse(json.replace(/\\\\([n|r|t])/g, "\\$1"))
- throw true unless payload.constructor is Object
- if Object.keys(payload).length == 0
- json = ''
- else
- json = JSON.stringify(payload)
- catch
- alert 'Invalid JSON object.'
- return
- if json == ''
- if with_event_mode is 'yes'
- alert 'Event is required for this agent to run.'
- return
- dry_run_data = data
- $(button).data('payload', null)
- else
- dry_run_data = "event=#{encodeURIComponent(json)}&#{data}"
- $(button).data('payload', json)
- $(body).closest('[role=dialog]').on 'hidden.bs.modal', =>
- @invokeDryRun(url, dry_run_data, cleanup)
- .modal('hide')
- $(body).closest('[role=dialog]').on 'shown.bs.modal', ->
- $(this).find('.btn-primary').focus()
- title: 'Dry Run'
- onHide: cleanup
- @invokeDryRun: (url, data, callback) ->
- $('body').css(cursor: 'progress')
- $.ajax type: 'POST', url: url, dataType: 'html', data: data
- .always =>
- $('body').css(cursor: 'auto')
- .done (modal_data) =>
- Utils.showDynamicModal modal_data,
- title: 'Dry Run Results',
- onHide: callback
- .fail (xhr, status, error) ->
- alert('Error: ' + error)
- callback()
- @select2TagClickHandler: (e, elem) ->
- if e.which == 1
- window.location = $(elem).attr('href')
- else
- window.open($(elem).attr('href'))
- # _.escape from underscore: https://github.com/jashkenas/underscore/blob/1e68f06610fa4ecb7f2c45d1eb2ad0173d6a2cc1/underscore.js#L1411-L1436
- escapeMap =
- '&': '&'
- '<': '<'
- '>': '>'
- '"': '"'
- '\'': '''
- '`': '`'
- createEscaper = (map) ->
- escaper = (match) ->
- map[match]
- # Regexes for identifying a key that needs to be escaped.
- source = '(?:' + Object.keys(map).join('|') + ')'
- testRegexp = RegExp(source)
- replaceRegexp = RegExp(source, 'g')
- (string) ->
- string = if string == null then '' else '' + string
- if testRegexp.test(string) then string.replace(replaceRegexp, escaper) else string
- @escape = createEscaper(escapeMap)
|