#************************************************************************************* # TOCOMMENT #************************************************************************************* @caissonMod "FormCaisson", -> @caissonMod "Field", -> class @Base #************************************************************************************* # CONSTRUCTOR #************************************************************************************* constructor: (@field) -> @build() #************************************************************************************* # PUBLIC INSTANCE METHODS #************************************************************************************* build: () -> @initPlaceholder() @tagField() @field.on('validate', (e) => @validate()) @field.blur (e) => @validate() if @hasErrors() closest: (path) -> @field.closest(path) data: (key, val) -> @field.data key, val hasApproximateName: (names) -> return name for name in names when name is @field.attr('name') or @field.attr('name').indexOf("[#{name}]") > 0 return '' hideErrors: -> @wrapper().removeClass('errors') @wrapper().find('div.error-messages').fadeOut 500, -> $(this).remove() $('#form-caisson-flash-' + @id()).fadeOut 500, -> $(this).remove() find: (key) -> @field.find key hasErrors: -> @wrapper().hasClass('errors') id: () -> @field.attr('id') input: () -> if @field[0].tagName.toLowerCase() == 'input' then @field else $(@field.find('input')) isPlaceholder: () -> @field.attr('placeholder') isnt undefined isSubmitAuto: () -> @field.data('submit') is 1 label: () -> @wrapper().find('label') labelText: () -> @label().text() showErrors: (messages) -> @removeErrorMessages() @wrapper().addClass('errors') @popErrors messages validate: () -> v = @validator() if v.validate() then @hideErrors() else @showErrors v.messages validateWithAjax: (url, caller, callback) -> $.getJSON url, (data) => if data['state'] is 'error' then @showErrors([data['message']]) caller[callback]() validator: () -> new FormCaisson.Field.Validator(@field.data('validations'), @field.val()) wrapper: () -> @field.closest('div.field') #************************************************************************************* # PRIVATE INSTANCE METHODS #************************************************************************************* initPlaceholder: () -> if @isPlaceholder() @input().placeholder() @input().focus (e) => $(@wrapper().find('.ui-placeholder')).addClass('focus') @input().blur (e) => $(@wrapper().find('.ui-placeholder')).removeClass('focus') removeErrorMessages: () -> @wrapper().find('div.error-messages').remove() $('#form-caisson-flash-' + @id()).remove() popErrors: (messages) -> content = '' content += '' + message + '' for message in messages flashPop = $('