= form_for @changeset, ~p"/images", [multipart: true], fn f ->
  .dnp-warning
    h4
      ' Read the
      a> href="/pages/rules" site rules
      ' and check our
      a> href="/dnp" do-not-post list
    p
      ' Don't post content the artist doesn't want here (or shared in general),
      strong including commercial content.

  p
    strong
      ' Please check it isn't already here with
      a href="/search/reverse" reverse search.

  / todo: extract this
  h4 Select an image
  .image-other
    #js-image-upload-previews
    p Upload a file from your computer, or provide a link to the page containing the image and click Fetch.
    .field
      = file_input f, :image, class: "input js-scraper"
      = error_tag f, :image
      = error_tag f, :image_size
      = error_tag f, :image_width
      = error_tag f, :image_height
      = error_tag f, :image_name
      = error_tag f, :image_mime_type
      = error_tag f, :image_duration
      = error_tag f, :image_orig_sha512_hash

    .field.field--inline
      = url_input f, :scraper_url, class: "input input--wide js-scraper", placeholder: "Link a deviantART page, a Tumblr post, or the image directly"
      button.button.button--separate-left#js-scraper-preview(type="button" title="Fetch the image at the specified URL" data-disable-with="Fetch" disabled)
        ' Fetch

    .field-error-js.hidden.js-scraper

  h4 About this image
  p
    'The page(s) you found this image on. Images may have a maximum of
    span.js-max-source-count> 10
    ' source URLs. Leave any sources you don't want to use blank.

  = inputs_for f, :sources, fn fs ->
    .field.js-image-source.field--inline.flex--no-wrap.flex--centered
      = text_input fs, :source, class: "input flex__grow js-source-url", placeholder: "Source URL"
      = error_tag fs, :source

      label.input--separate-left.flex__fixed.flex--centered
        a.js-source-remove href="#"
          i.fa.fa-trash>
          ' Delete

  .field
    button.button.js-image-add-source type="button"
      i.fa.fa-plus>
      ' Add source

  .field
    label for="image[tag_input]"
      ' Describe with
      strong> 3+
      ' tags, including ratings and applicable artist tags

    = render PhilomenaWeb.TagView, "_tag_editor.html", f: f, name: :tag_input, type: :upload
    = error_tag f, :tag_input

    button.button.button--state-success.button--separate-left.button--bold id="tagsinput-save" type="button" title="This button saves the tags listed above to your browser, allowing you to retrieve them again by clicking the Load button" Save
    button.button.button--state-warning.button--separate-left.button--bold id="tagsinput-load" type="button" title="This button loads any saved tags from your browser" Load
    button.button.button--state-danger.button--separate-left.button--bold id="tagsinput-clear" type="button" title="This button will clear the list of tags above" Clear

    p You can mouse over tags below to view a description, and click to add. Short tag names can be used and will expand to full.

    .block.js-tagtable data-target="[name="image[tag_input]"]"
      = PhilomenaWeb.TagView.quick_tags(@conn)

  br

  .field
    .block
      .communication-edit__wrap
        = render PhilomenaWeb.MarkdownView, "_input.html", conn: @conn, f: f, action_icon: "pencil-alt", action_text: "Description", placeholder: "Describe this image in plain words - this should generally be info about the image that doesn't belong in the tags or source.", name: :description, class: "js-image-descr-input", required: false

  = render PhilomenaWeb.MarkdownView, "_anon_checkbox.html", conn: @conn, f: f, label: "Post anonymously"

  = render PhilomenaWeb.CaptchaView, "_captcha.html", name: "image", conn: @conn

  .actions
    = submit "Upload", class: "button input--separate-top", autocomplete: "off", data: [disable_with: "Please wait..."]