scrivito.on 'content', (content) -> return unless scrivito.in_editable_view() $(content).find(''' [data-scrivito-field-name="_permalink"]:not([data-editor]), [data-editor~=permalink] ''').each -> create($(@)) create = (field) -> editor = field.html(render(field.scrivito('content') || '')) input = editor.find('input') button = editor.find('a') error = editor.find('div.scrivito_error') clear = editor.find('.scrivito_clear') input.on 'input', -> permalink = input.val() if permalink == field.scrivito('content') hideError() disableSaveButton() else if permalink.match(/^([\w._-]+[\/\w._-]*)?$/) hideError() enableSaveButton() else showError( 'The permalink may only contain letters from A to Z, periods, hyphens, and underscores.') disableSaveButton() clear.on 'click', -> input.val('') hideError() if !field.scrivito('content') disableSaveButton() else enableSaveButton() off button.on 'click', -> trySave() off editor.on 'keyup', (event) -> switch event.keyCode when 13 # Enter trySave() when 27 # Esc input.val(field.scrivito('content')) hideError() disableSaveButton() input.blur() trySave = -> return off if button.hasClass('scrivito_disabled') showSaving() permalink = input.val() if permalink scrivito.obj_where('_permalink', 'equals', permalink).size().then (total) -> if total > 0 hideSaving() showError('Permalink already taken.') disableSaveButton() input.focus() else save(permalink) else save(null) disableSaveButton = -> button.addClass('scrivito_disabled') enableSaveButton = -> button.removeClass('scrivito_disabled scrivito_saving') showError = (message) -> disableSaveButton() input.addClass('scrivito_error') error.text(message) error.show() hideError = -> input.removeClass('scrivito_error') error.hide() showSaving = -> input.attr('disabled', 'disabled') disableSaveButton() button.addClass('scrivito_saving') button.find('span').text('Saving...') hideSaving = -> input.removeAttr('disabled') enableSaveButton() button.find('span').text('Save') save = (permalink) -> field.scrivito('save', permalink).then -> create(field) render = (content) -> """ """