www.ispotnature.org Open in urlscan Pro
2606:4700:3032::ac43:853b  Public Scan

Submitted URL: http://ispotnature.org/
Effective URL: https://www.ispotnature.org/
Submission Tags: tranco_l324
Submission: On April 17 via api from DE — Scanned from DE

Form analysis 3 forms found in the DOM

Name: savefiltersform

<form class="o-form ng-pristine ng-hide ng-valid-pattern ng-valid-minlength ng-valid-maxlength ng-valid ng-valid-required" data-ng-attr-name="{{filters.formName}}" data-ng-show="user.loggedIn &amp;&amp; filters.filters.length"
  data-ng-submit="filters.submit()" novalidate="" name="savefiltersform" aria-hidden="true">
  <div class="o-input o-input--text-button ng-isolate-scope" data-input-button-disabled="!filters.formData.title" data-input-button="Save" data-input-errors="filters.formErrors.title"
    data-input-help="Enter a title to save this combination of filters." data-input-id="title" data-input-label="Save this filter" data-input-model="filters.formData.title" data-input-placeholder="I18N.PARTIALS.ASIDE.FILTERS.INPUT.PLACEHOLDER"
    data-input-submitting="filters.submitting" data-input-text-submit="">
    <div class="o-input__row" data-ng-class="{
      'is-invalid': errors.length || (form[id].$invalid &amp;&amp; (form.$submitted || form[id].$touched)),
      'is-focused': focused,
      'is-dirty': form[id].$viewValue.length,
      'is-disabled': disabled,
      'is-readonly': readonly
    }">
      <span data-tooltip="tooltip" class="ng-isolate-scope"><!-- ngIf: tooltip -->
      </span>
      <label class="o-input__label" data-ng-attr-for="{{::id}}" for="title">
        <span class="o-input__label-text ng-scope" data-translate="Save this filter">Save this filter</span><span class="o-input__required ng-hide" data-ng-show="required" aria-hidden="true"> *</span>
      </label>
      <div class="o-input-group">
        <input class="o-input__field o-input__field--text ng-pristine ng-untouched ng-empty ng-valid-pattern ng-valid-minlength ng-valid-maxlength ng-valid ng-valid-required" role="textbox" type="text"
          data-ng-attr-autocomplete="{{::autoComplete ? 'On' : 'Off'}}" data-ng-attr-id="{{::id}}" data-ng-attr-name="{{::id}}" data-ng-attr-placeholder="{{placeholder | translate}}" data-ng-blur="blur()" data-ng-disabled="disabled"
          data-ng-focus="focused = true" data-ng-init="focused = false" data-ng-maxlength="255" data-ng-minlength="false" data-ng-model="model" data-ng-pattern="" data-ng-readonly="readonly" data-ng-required="required" autocomplete="Off" id="title"
          name="title" placeholder="Title" aria-invalid="false">
        <span class="o-input__btn">
          <button class="c-btn u-sx-sm" data-ng-disabled="submitting || buttonDisabled" type="submit" disabled="disabled">
            <div class="c-spinner__wrap ng-isolate-scope fill t-white u-sz-sm" data-ng-class="{
    'fill': isFull,
    't-white': theme,
    'is-shown': loading,
    'u-sz-sm': size
  }" data-ng-click="$event.stopPropagation()" data-ng-attr-aria-hidden="{{loading ? 'false' : 'true'}}" data-loading-spinner="submitting" data-loading-spinner-size="sm" data-loading-spinner-theme="white" data-loading-spinner-full="true"
              role="button" tabindex="0" aria-hidden="true">
              <!-- ngIf: spinner -->
              <span class="sr-only ng-scope" data-translate="I18N.PARTIALS.SPINNER.LOADING">Loading...</span>
            </div>
            <span data-translate="Save" class="ng-scope">Save</span>
          </button>
        </span>
      </div>
      <!-- ngInclude: ::'/static/templates/website/forms/help-error-text.html' -->
      <div data-ng-include="::'/static/templates/website/forms/help-error-text.html'" class="ng-scope">
        <div class="c-help ng-scope" style="margin: 0;" data-ng-class="{
    'show-error-text': errors.length || (form[id].$invalid &amp;&amp; (form.$submitted || form[id].$touched))
  }">
          <div class="c-help__text" data-ng-show="!hideHelp &amp;&amp; (help || minLength || maxLength || max || min || readonly || disabled)" aria-hidden="false">
            <span data-translate="Enter a title to save this combination of filters." class="ng-scope">Enter a title to save this combination of filters.</span>
            <span data-ng-show="type === 'url'" data-translate="I18N.FORMS.HELP_ERRORS.URL" class="ng-scope ng-hide" aria-hidden="true">Must be a valid URL.</span>
            <span data-ng-show="dateFormat" data-translate="I18N.FORMS.HELP_ERRORS.DATE_FORMAT" data-translate-value-format="" class="ng-scope ng-hide" aria-hidden="true">The date format is .</span>
            <span data-ng-show="timeFormat" data-translate="I18N.FORMS.HELP_ERRORS.TIME_FORMAT" data-translate-value-format="" class="ng-scope ng-hide" aria-hidden="true">The time format is .</span>
            <span data-ng-show="minLength" data-translate="I18N.FORMS.HELP_ERRORS.MIN_LENGTH" data-translate-value-min="false" class="ng-scope ng-hide" aria-hidden="true">Requires at least false characters.</span>
            <span data-ng-show="maxLength &amp;&amp; !hideMaxLength" data-translate="I18N.FORMS.HELP_ERRORS.MAX_LENGTH" data-translate-value-max="255" class="ng-scope" aria-hidden="false">Accepts a maximum of 255 characters.</span>
            <span data-ng-show="min" data-translate="I18N.FORMS.HELP_ERRORS.MIN" data-translate-value-min="" class="ng-scope ng-hide" aria-hidden="true">Cannot be less than .</span>
            <span data-ng-show="max" data-translate="I18N.FORMS.HELP_ERRORS.MAX" data-translate-value-max="" class="ng-scope ng-hide" aria-hidden="true">Cannot be greater than .</span>
            <span data-ng-show="readonly" data-translate="I18N.FORMS.HELP_ERRORS.READONLY" class="ng-scope ng-hide" aria-hidden="true">This input is readonly.</span>
            <span data-ng-show="disabled" data-translate="I18N.FORMS.HELP_ERRORS.MAX.DISABLED" class="ng-scope ng-hide" aria-hidden="true">This input is disabled.</span>
          </div>
          <ul class="o-list o-list--errors">
            <!-- ngRepeat: error in errors -->
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.passwordconfirm" data-translate="I18N.FORMS.HELP_ERRORS.PASSWORD_MATCH" data-translate-value-label="Save this filter" aria-hidden="true">Passwords must match</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.password" data-translate="I18N.FORMS.HELP_ERRORS.PASSWORD" data-translate-value-label="Save this filter" aria-hidden="true">Passwords need at least: 8 characters, 1
              number and 1 upper-case letter</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.required" data-translate="I18N.FORMS.HELP_ERRORS.REQUIRED" data-translate-value-label="Save this filter" aria-hidden="true">Save this filter is required.</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.minlength" data-translate="I18N.FORMS.HELP_ERRORS.MIN_LENGTH_REQ" data-translate-value-label="Save this filter" data-translate-value-min="false" aria-hidden="true">
              Save this filter requires at least false characters.</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.maxlength" data-translate="I18N.FORMS.HELP_ERRORS.MAX_LENGTH_REQ" data-translate-value-label="Save this filter" data-translate-value-min="255" aria-hidden="true">Save
              this filter takes a maximum of 255 characters.</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.pattern" data-translate="I18N.FORMS.HELP_ERRORS.FORMAT" data-translate-value-label="Save this filter" aria-hidden="true">Save this filter does not match the required
              format.</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.number" data-translate="I18N.FORMS.HELP_ERRORS.NUMBER" data-translate-value-label="Save this filter" aria-hidden="true">Save this filter must be a valid number.</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.email" data-translate="I18N.FORMS.HELP_ERRORS.EMAIL" data-translate-value-label="Save this filter" aria-hidden="true">Save this filter must be a valid email address.
            </li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.url" data-translate="I18N.FORMS.HELP_ERRORS.URL_VALID" data-translate-value-label="Save this filter" aria-hidden="true">Save this filter must be a valid URL.</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.min" data-translate="I18N.FORMS.HELP_ERRORS.LESS_THAN" data-translate-value-label="Save this filter" data-translate-value-min="" aria-hidden="true">Save this filter
              cannot be less than .</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.max" data-translate="I18N.FORMS.HELP_ERRORS.GREATER_THAN" data-translate-value-label="Save this filter" data-translate-value-max="" aria-hidden="true">Save this
              filter cannot be greater than .</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.minDate" data-translate="I18N.FORMS.HELP_ERRORS.LESS_THAN_DATE" data-translate-value-label="Save this filter" data-translate-value-min-date="" aria-hidden="true">Save
              this filter cannot be less than .</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.maxDate" data-translate="I18N.FORMS.HELP_ERRORS.GREATER_THAN_DATE" data-translate-value-label="Save this filter" data-translate-value-max-date="" aria-hidden="true">
              Save this filter cannot be greater than .</li>
          </ul>
        </div>
      </div>
    </div>
  </div>
</form>

Name: searchform

<form class="o-form ng-pristine ng-valid-pattern ng-valid-minlength ng-valid-maxlength ng-valid ng-valid-required" data-ng-attr-name="{{search.formName}}" data-ng-submit="search.submit(search.formData.asideSearch)" novalidate="" name="searchform">
  <div class="o-input o-input--text-button ng-isolate-scope" data-input-button="I18N.PARTIALS.ASIDE.SEARCH.INPUT.BUTTON" data-input-help="I18N.PARTIALS.ASIDE.SEARCH.INPUT.HELP" data-input-hide-help="true"
    data-input-label="I18N.PARTIALS.ASIDE.SEARCH.INPUT.LABEL" data-input-model="search.formData.asideSearch" data-input-text-submit="">
    <div class="o-input__row" data-ng-class="{
      'is-invalid': errors.length || (form[id].$invalid &amp;&amp; (form.$submitted || form[id].$touched)),
      'is-focused': focused,
      'is-dirty': form[id].$viewValue.length,
      'is-disabled': disabled,
      'is-readonly': readonly
    }">
      <span data-tooltip="tooltip" class="ng-isolate-scope"><!-- ngIf: tooltip -->
      </span>
      <label class="o-input__label" data-ng-attr-for="{{::id}}" for="input-1">
        <span class="o-input__label-text ng-scope" data-translate="I18N.PARTIALS.ASIDE.SEARCH.INPUT.LABEL">Search</span><span class="o-input__required ng-hide" data-ng-show="required" aria-hidden="true"> *</span>
      </label>
      <div class="o-input-group">
        <input class="o-input__field o-input__field--text ng-pristine ng-untouched ng-empty ng-valid-pattern ng-valid-minlength ng-valid-maxlength ng-valid ng-valid-required" role="textbox" type="text"
          data-ng-attr-autocomplete="{{::autoComplete ? 'On' : 'Off'}}" data-ng-attr-id="{{::id}}" data-ng-attr-name="{{::id}}" data-ng-attr-placeholder="{{placeholder | translate}}" data-ng-blur="blur()" data-ng-disabled="disabled"
          data-ng-focus="focused = true" data-ng-init="focused = false" data-ng-maxlength="255" data-ng-minlength="false" data-ng-model="model" data-ng-pattern="" data-ng-readonly="readonly" data-ng-required="required" autocomplete="Off" id="input-1"
          name="input-1" placeholder="" aria-invalid="false">
        <span class="o-input__btn">
          <button class="c-btn u-sx-sm" data-ng-disabled="submitting || buttonDisabled" type="submit">
            <div class="c-spinner__wrap ng-isolate-scope fill t-white u-sz-sm" data-ng-class="{
    'fill': isFull,
    't-white': theme,
    'is-shown': loading,
    'u-sz-sm': size
  }" data-ng-click="$event.stopPropagation()" data-ng-attr-aria-hidden="{{loading ? 'false' : 'true'}}" data-loading-spinner="submitting" data-loading-spinner-size="sm" data-loading-spinner-theme="white" data-loading-spinner-full="true"
              role="button" tabindex="0" aria-hidden="true">
              <!-- ngIf: spinner -->
              <span class="sr-only ng-scope" data-translate="I18N.PARTIALS.SPINNER.LOADING">Loading...</span>
            </div>
            <span data-translate="I18N.PARTIALS.ASIDE.SEARCH.INPUT.BUTTON" class="ng-scope">Go</span>
          </button>
        </span>
      </div>
      <!-- ngInclude: ::'/static/templates/website/forms/help-error-text.html' -->
      <div data-ng-include="::'/static/templates/website/forms/help-error-text.html'" class="ng-scope">
        <div class="c-help ng-scope" style="margin: 0;" data-ng-class="{
    'show-error-text': errors.length || (form[id].$invalid &amp;&amp; (form.$submitted || form[id].$touched))
  }">
          <div class="c-help__text ng-hide" data-ng-show="!hideHelp &amp;&amp; (help || minLength || maxLength || max || min || readonly || disabled)" aria-hidden="true">
            <span data-translate="I18N.PARTIALS.ASIDE.SEARCH.INPUT.HELP" class="ng-scope">Enter search text.</span>
            <span data-ng-show="type === 'url'" data-translate="I18N.FORMS.HELP_ERRORS.URL" class="ng-scope ng-hide" aria-hidden="true">Must be a valid URL.</span>
            <span data-ng-show="dateFormat" data-translate="I18N.FORMS.HELP_ERRORS.DATE_FORMAT" data-translate-value-format="" class="ng-scope ng-hide" aria-hidden="true">The date format is .</span>
            <span data-ng-show="timeFormat" data-translate="I18N.FORMS.HELP_ERRORS.TIME_FORMAT" data-translate-value-format="" class="ng-scope ng-hide" aria-hidden="true">The time format is .</span>
            <span data-ng-show="minLength" data-translate="I18N.FORMS.HELP_ERRORS.MIN_LENGTH" data-translate-value-min="false" class="ng-scope ng-hide" aria-hidden="true">Requires at least false characters.</span>
            <span data-ng-show="maxLength &amp;&amp; !hideMaxLength" data-translate="I18N.FORMS.HELP_ERRORS.MAX_LENGTH" data-translate-value-max="255" class="ng-scope" aria-hidden="false">Accepts a maximum of 255 characters.</span>
            <span data-ng-show="min" data-translate="I18N.FORMS.HELP_ERRORS.MIN" data-translate-value-min="" class="ng-scope ng-hide" aria-hidden="true">Cannot be less than .</span>
            <span data-ng-show="max" data-translate="I18N.FORMS.HELP_ERRORS.MAX" data-translate-value-max="" class="ng-scope ng-hide" aria-hidden="true">Cannot be greater than .</span>
            <span data-ng-show="readonly" data-translate="I18N.FORMS.HELP_ERRORS.READONLY" class="ng-scope ng-hide" aria-hidden="true">This input is readonly.</span>
            <span data-ng-show="disabled" data-translate="I18N.FORMS.HELP_ERRORS.MAX.DISABLED" class="ng-scope ng-hide" aria-hidden="true">This input is disabled.</span>
          </div>
          <ul class="o-list o-list--errors">
            <!-- ngRepeat: error in errors -->
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.passwordconfirm" data-translate="I18N.FORMS.HELP_ERRORS.PASSWORD_MATCH" data-translate-value-label="Search" aria-hidden="true">Passwords must match</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.password" data-translate="I18N.FORMS.HELP_ERRORS.PASSWORD" data-translate-value-label="Search" aria-hidden="true">Passwords need at least: 8 characters, 1 number and
              1 upper-case letter</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.required" data-translate="I18N.FORMS.HELP_ERRORS.REQUIRED" data-translate-value-label="Search" aria-hidden="true">Search is required.</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.minlength" data-translate="I18N.FORMS.HELP_ERRORS.MIN_LENGTH_REQ" data-translate-value-label="Search" data-translate-value-min="false" aria-hidden="true">Search
              requires at least false characters.</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.maxlength" data-translate="I18N.FORMS.HELP_ERRORS.MAX_LENGTH_REQ" data-translate-value-label="Search" data-translate-value-min="255" aria-hidden="true">Search takes a
              maximum of 255 characters.</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.pattern" data-translate="I18N.FORMS.HELP_ERRORS.FORMAT" data-translate-value-label="Search" aria-hidden="true">Search does not match the required format.</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.number" data-translate="I18N.FORMS.HELP_ERRORS.NUMBER" data-translate-value-label="Search" aria-hidden="true">Search must be a valid number.</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.email" data-translate="I18N.FORMS.HELP_ERRORS.EMAIL" data-translate-value-label="Search" aria-hidden="true">Search must be a valid email address.</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.url" data-translate="I18N.FORMS.HELP_ERRORS.URL_VALID" data-translate-value-label="Search" aria-hidden="true">Search must be a valid URL.</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.min" data-translate="I18N.FORMS.HELP_ERRORS.LESS_THAN" data-translate-value-label="Search" data-translate-value-min="" aria-hidden="true">Search cannot be less than .
            </li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.max" data-translate="I18N.FORMS.HELP_ERRORS.GREATER_THAN" data-translate-value-label="Search" data-translate-value-max="" aria-hidden="true">Search cannot be greater
              than .</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.minDate" data-translate="I18N.FORMS.HELP_ERRORS.LESS_THAN_DATE" data-translate-value-label="Search" data-translate-value-min-date="" aria-hidden="true">Search cannot
              be less than .</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.maxDate" data-translate="I18N.FORMS.HELP_ERRORS.GREATER_THAN_DATE" data-translate-value-label="Search" data-translate-value-max-date="" aria-hidden="true">Search
              cannot be greater than .</li>
          </ul>
        </div>
      </div>
    </div>
  </div>
</form>

Name: loginusernamePOST

<form data-ng-attr-id="{{ loginUsername.formName }}" data-ng-attr-name="{{ loginUsername.formName }}" data-ng-controller="loginUsernameController as loginUsername" data-ng-show="login.state == 'login'" data-ng-submit="loginUsername.submit()"
  method="post" novalidate="" class="ng-pristine ng-scope ng-invalid ng-invalid-required ng-valid-pattern ng-valid-minlength ng-valid-maxlength ng-valid-passwordconfirm" id="loginusername" name="loginusername" aria-hidden="false">
  <div class="o-input o-input--text ng-isolate-scope" data-input-text="" data-input-id="username" data-input-errors="loginUsername.formErrors.username" data-input-hide-help="true" data-input-label="I18N.PARTIALS.LOGIN.LABEL.USERNAME"
    data-input-model="loginUsername.formData.username" data-input-required="true">
    <div class="o-input__row" data-ng-class="{
      'is-invalid': errors.length || (form[id].$invalid &amp;&amp; (form.$submitted || form[id].$touched)),
      'is-focused': focused,
      'is-dirty': form[id].$viewValue.length,
      'is-disabled': disabled,
      'is-readonly': readonly
    }">
      <span data-tooltip="tooltip" class="ng-isolate-scope"><!-- ngIf: tooltip -->
      </span>
      <label style="display:inline-block; margin: 0 0 4px 0;" class="o-input__label" data-ng-attr-for="{{::id}}" for="username">
        <span class="o-input__label-text ng-scope" data-translate="I18N.PARTIALS.LOGIN.LABEL.USERNAME">Username</span><span class="o-input__required" data-ng-show="required" aria-hidden="false"> *</span>
        <!-- ngInclude: ::'/static/templates/website/forms/help-error-text.html' -->
        <div style="float:right; margin: 0;" data-ng-include="::'/static/templates/website/forms/help-error-text.html'" class="ng-scope">
          <div class="c-help ng-scope" style="margin: 0;" data-ng-class="{
    'show-error-text': errors.length || (form[id].$invalid &amp;&amp; (form.$submitted || form[id].$touched))
  }">
            <div class="c-help__text ng-hide" data-ng-show="!hideHelp &amp;&amp; (help || minLength || maxLength || max || min || readonly || disabled)" aria-hidden="true">
              <span data-translate="I18N.DIRECTIVE.TEXT.HELPER" class="ng-scope">Enter text.</span>
              <span data-ng-show="type === 'url'" data-translate="I18N.FORMS.HELP_ERRORS.URL" class="ng-scope ng-hide" aria-hidden="true">Must be a valid URL.</span>
              <span data-ng-show="dateFormat" data-translate="I18N.FORMS.HELP_ERRORS.DATE_FORMAT" data-translate-value-format="" class="ng-scope ng-hide" aria-hidden="true">The date format is .</span>
              <span data-ng-show="timeFormat" data-translate="I18N.FORMS.HELP_ERRORS.TIME_FORMAT" data-translate-value-format="" class="ng-scope ng-hide" aria-hidden="true">The time format is .</span>
              <span data-ng-show="minLength" data-translate="I18N.FORMS.HELP_ERRORS.MIN_LENGTH" data-translate-value-min="false" class="ng-scope ng-hide" aria-hidden="true">Requires at least false characters.</span>
              <span data-ng-show="maxLength &amp;&amp; !hideMaxLength" data-translate="I18N.FORMS.HELP_ERRORS.MAX_LENGTH" data-translate-value-max="255" class="ng-scope" aria-hidden="false">Accepts a maximum of 255 characters.</span>
              <span data-ng-show="min" data-translate="I18N.FORMS.HELP_ERRORS.MIN" data-translate-value-min="" class="ng-scope ng-hide" aria-hidden="true">Cannot be less than .</span>
              <span data-ng-show="max" data-translate="I18N.FORMS.HELP_ERRORS.MAX" data-translate-value-max="" class="ng-scope ng-hide" aria-hidden="true">Cannot be greater than .</span>
              <span data-ng-show="readonly" data-translate="I18N.FORMS.HELP_ERRORS.READONLY" class="ng-scope ng-hide" aria-hidden="true">This input is readonly.</span>
              <span data-ng-show="disabled" data-translate="I18N.FORMS.HELP_ERRORS.MAX.DISABLED" class="ng-scope ng-hide" aria-hidden="true">This input is disabled.</span>
            </div>
            <ul class="o-list o-list--errors">
              <!-- ngRepeat: error in errors -->
              <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.passwordconfirm" data-translate="I18N.FORMS.HELP_ERRORS.PASSWORD_MATCH" data-translate-value-label="Username" aria-hidden="true">Passwords must match</li>
              <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.password" data-translate="I18N.FORMS.HELP_ERRORS.PASSWORD" data-translate-value-label="Username" aria-hidden="true">Passwords need at least: 8 characters, 1 number
                and 1 upper-case letter</li>
              <li class="o-list__item ng-scope" data-ng-show="form[id].$error.required" data-translate="I18N.FORMS.HELP_ERRORS.REQUIRED" data-translate-value-label="Username" aria-hidden="false">Username is required.</li>
              <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.minlength" data-translate="I18N.FORMS.HELP_ERRORS.MIN_LENGTH_REQ" data-translate-value-label="Username" data-translate-value-min="false" aria-hidden="true">Username
                requires at least false characters.</li>
              <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.maxlength" data-translate="I18N.FORMS.HELP_ERRORS.MAX_LENGTH_REQ" data-translate-value-label="Username" data-translate-value-min="255" aria-hidden="true">Username
                takes a maximum of 255 characters.</li>
              <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.pattern" data-translate="I18N.FORMS.HELP_ERRORS.FORMAT" data-translate-value-label="Username" aria-hidden="true">Username does not match the required format.</li>
              <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.number" data-translate="I18N.FORMS.HELP_ERRORS.NUMBER" data-translate-value-label="Username" aria-hidden="true">Username must be a valid number.</li>
              <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.email" data-translate="I18N.FORMS.HELP_ERRORS.EMAIL" data-translate-value-label="Username" aria-hidden="true">Username must be a valid email address.</li>
              <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.url" data-translate="I18N.FORMS.HELP_ERRORS.URL_VALID" data-translate-value-label="Username" aria-hidden="true">Username must be a valid URL.</li>
              <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.min" data-translate="I18N.FORMS.HELP_ERRORS.LESS_THAN" data-translate-value-label="Username" data-translate-value-min="" aria-hidden="true">Username cannot be less
                than .</li>
              <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.max" data-translate="I18N.FORMS.HELP_ERRORS.GREATER_THAN" data-translate-value-label="Username" data-translate-value-max="" aria-hidden="true">Username cannot be
                greater than .</li>
              <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.minDate" data-translate="I18N.FORMS.HELP_ERRORS.LESS_THAN_DATE" data-translate-value-label="Username" data-translate-value-min-date="" aria-hidden="true">Username
                cannot be less than .</li>
              <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.maxDate" data-translate="I18N.FORMS.HELP_ERRORS.GREATER_THAN_DATE" data-translate-value-label="Username" data-translate-value-max-date="" aria-hidden="true">
                Username cannot be greater than .</li>
            </ul>
          </div>
        </div>
      </label>
      <input class="o-input__field o-input__field--text ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required ng-valid-pattern ng-valid-minlength ng-valid-maxlength" role="textbox" type="text"
        data-ng-attr-autocomplete="{{::autoComplete ? 'On' : 'Off'}}" data-ng-attr-id="{{::id}}" data-ng-attr-name="{{::id}}" data-ng-attr-placeholder="{{placeholder | translate}}" data-ng-blur="blur()" data-ng-disabled="disabled"
        data-ng-focus="focused = true" data-ng-init="focused = false" data-ng-maxlength="255" data-ng-minlength="false" data-ng-model="model" data-ng-pattern="" data-ng-readonly="readonly" data-ng-required="required" autocomplete="Off" id="username"
        name="username" placeholder="" required="required" aria-invalid="true">
    </div>
  </div>
  <div class="o-input o-input--password ng-isolate-scope" data-input-password="" data-input-id="password" data-input-errors="loginUsername.formErrors.password" data-input-hide-help="true" data-input-label="I18N.PARTIALS.LOGIN.LABEL.PASSWORD"
    data-input-model="loginUsername.formData.password" data-input-required="true" data-input-validate-regex="false">
    <div class="o-input__row" data-ng-class="{
      'is-invalid': errors.length || (form[id].$invalid &amp;&amp; (form.$submitted || form[id].$touched)),
      'is-focused': focused,
      'is-dirty': form[id].$viewValue.length,
      'is-disabled': disabled,
      'is-readonly': readonly
    }">
      <span data-tooltip="tooltip" class="ng-isolate-scope"><!-- ngIf: tooltip -->
      </span>
      <label class="o-input__label" data-ng-attr-for="{{::id}}" for="password">
        <span class="o-input__label-text ng-scope" data-translate="I18N.PARTIALS.LOGIN.LABEL.PASSWORD">Password</span><span class="o-input__required" data-ng-show="required" aria-hidden="false"> *</span>
      </label>
      <input class="o-input__field o-input__field--password ng-pristine ng-untouched ng-isolate-scope ng-empty ng-valid-passwordconfirm ng-invalid ng-invalid-required ng-valid-pattern ng-valid-minlength ng-valid-maxlength"
        data-ng-attr-autocomplete="{{::autoComplete ? 'On' : 'Off'}}" data-ng-attr-id="{{::id}}" data-ng-attr-name="{{::id}}" data-ng-attr-placeholder="{{placeholder | translate}}" data-ng-blur="focused = false" data-ng-disabled="disabled"
        data-ng-focus="focused = true" data-ng-init="focused = false" data-ng-maxlength="255" data-ng-minlength="false" data-ng-model="model" data-ng-model-options="{allowInvalid: true}" data-ng-pattern="" data-ng-readonly="readonly"
        data-ng-required="required" data-valid-password="" data-password-confirm="confirm" role="textbox" type="password" autocomplete="Off" id="password" name="password" placeholder="" required="required" aria-invalid="true">
      <!-- ngInclude: ::'/static/templates/website/forms/help-error-text.html' -->
      <div data-ng-include="::'/static/templates/website/forms/help-error-text.html'" class="ng-scope">
        <div class="c-help ng-scope" style="margin: 0;" data-ng-class="{
    'show-error-text': errors.length || (form[id].$invalid &amp;&amp; (form.$submitted || form[id].$touched))
  }">
          <div class="c-help__text ng-hide" data-ng-show="!hideHelp &amp;&amp; (help || minLength || maxLength || max || min || readonly || disabled)" aria-hidden="true">
            <span data-translate="I18N.DIRECTIVE.PASSWORD.HELPER" class="ng-scope">Passwords need at least: 8 characters, 1 number and 1 upper-case letter</span>
            <span data-ng-show="type === 'url'" data-translate="I18N.FORMS.HELP_ERRORS.URL" class="ng-scope ng-hide" aria-hidden="true">Must be a valid URL.</span>
            <span data-ng-show="dateFormat" data-translate="I18N.FORMS.HELP_ERRORS.DATE_FORMAT" data-translate-value-format="" class="ng-scope ng-hide" aria-hidden="true">The date format is .</span>
            <span data-ng-show="timeFormat" data-translate="I18N.FORMS.HELP_ERRORS.TIME_FORMAT" data-translate-value-format="" class="ng-scope ng-hide" aria-hidden="true">The time format is .</span>
            <span data-ng-show="minLength" data-translate="I18N.FORMS.HELP_ERRORS.MIN_LENGTH" data-translate-value-min="false" class="ng-scope ng-hide" aria-hidden="true">Requires at least false characters.</span>
            <span data-ng-show="maxLength &amp;&amp; !hideMaxLength" data-translate="I18N.FORMS.HELP_ERRORS.MAX_LENGTH" data-translate-value-max="255" class="ng-scope" aria-hidden="false">Accepts a maximum of 255 characters.</span>
            <span data-ng-show="min" data-translate="I18N.FORMS.HELP_ERRORS.MIN" data-translate-value-min="" class="ng-scope ng-hide" aria-hidden="true">Cannot be less than .</span>
            <span data-ng-show="max" data-translate="I18N.FORMS.HELP_ERRORS.MAX" data-translate-value-max="" class="ng-scope ng-hide" aria-hidden="true">Cannot be greater than .</span>
            <span data-ng-show="readonly" data-translate="I18N.FORMS.HELP_ERRORS.READONLY" class="ng-scope ng-hide" aria-hidden="true">This input is readonly.</span>
            <span data-ng-show="disabled" data-translate="I18N.FORMS.HELP_ERRORS.MAX.DISABLED" class="ng-scope ng-hide" aria-hidden="true">This input is disabled.</span>
          </div>
          <ul class="o-list o-list--errors">
            <!-- ngRepeat: error in errors -->
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.passwordconfirm" data-translate="I18N.FORMS.HELP_ERRORS.PASSWORD_MATCH" data-translate-value-label="Password" aria-hidden="true">Passwords must match</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.password" data-translate="I18N.FORMS.HELP_ERRORS.PASSWORD" data-translate-value-label="Password" aria-hidden="true">Passwords need at least: 8 characters, 1 number
              and 1 upper-case letter</li>
            <li class="o-list__item ng-scope" data-ng-show="form[id].$error.required" data-translate="I18N.FORMS.HELP_ERRORS.REQUIRED" data-translate-value-label="Password" aria-hidden="false">Password is required.</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.minlength" data-translate="I18N.FORMS.HELP_ERRORS.MIN_LENGTH_REQ" data-translate-value-label="Password" data-translate-value-min="false" aria-hidden="true">Password
              requires at least false characters.</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.maxlength" data-translate="I18N.FORMS.HELP_ERRORS.MAX_LENGTH_REQ" data-translate-value-label="Password" data-translate-value-min="255" aria-hidden="true">Password
              takes a maximum of 255 characters.</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.pattern" data-translate="I18N.FORMS.HELP_ERRORS.FORMAT" data-translate-value-label="Password" aria-hidden="true">Password does not match the required format.</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.number" data-translate="I18N.FORMS.HELP_ERRORS.NUMBER" data-translate-value-label="Password" aria-hidden="true">Password must be a valid number.</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.email" data-translate="I18N.FORMS.HELP_ERRORS.EMAIL" data-translate-value-label="Password" aria-hidden="true">Password must be a valid email address.</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.url" data-translate="I18N.FORMS.HELP_ERRORS.URL_VALID" data-translate-value-label="Password" aria-hidden="true">Password must be a valid URL.</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.min" data-translate="I18N.FORMS.HELP_ERRORS.LESS_THAN" data-translate-value-label="Password" data-translate-value-min="" aria-hidden="true">Password cannot be less
              than .</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.max" data-translate="I18N.FORMS.HELP_ERRORS.GREATER_THAN" data-translate-value-label="Password" data-translate-value-max="" aria-hidden="true">Password cannot be
              greater than .</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.minDate" data-translate="I18N.FORMS.HELP_ERRORS.LESS_THAN_DATE" data-translate-value-label="Password" data-translate-value-min-date="" aria-hidden="true">Password
              cannot be less than .</li>
            <li class="o-list__item ng-scope ng-hide" data-ng-show="form[id].$error.maxDate" data-translate="I18N.FORMS.HELP_ERRORS.GREATER_THAN_DATE" data-translate-value-label="Password" data-translate-value-max-date="" aria-hidden="true">Password
              cannot be greater than .</li>
          </ul>
        </div>
      </div>
    </div>
  </div>
  <button class="c-btn" data-ng-click="loginUsername.login()" data-ng-disabled="loginUsername.submitting">
    <div class="c-spinner__wrap ng-isolate-scope fill t-white u-sz-sm" data-ng-class="{
    'fill': isFull,
    't-white': theme,
    'is-shown': loading,
    'u-sz-sm': size
  }" data-ng-click="$event.stopPropagation()" data-ng-attr-aria-hidden="{{loading ? 'false' : 'true'}}" data-loading-spinner="loginUsername.submitting" data-loading-spinner-full="true" data-loading-spinner-size="sm"
      data-loading-spinner-theme="white" role="button" tabindex="0" aria-hidden="true">
      <!-- ngIf: spinner -->
      <span class="sr-only ng-scope" data-translate="I18N.PARTIALS.SPINNER.LOADING">Loading...</span>
    </div> Log in
  </button>
</form>

Text Content

 * Skip to content

 



SHARE NATURE

Menu
 * Home
   
   
 * Explore community
   * Home
   * Observations
     * List
     * Gallery
     * Map
   * Species browser
   * Species dictionary
   * Projects
   * Bioblitzes
   * News stories
   * Articles
   * Forum
 * Identify
   * By searching the site
   * By browsing species
     
   * By using an ID guide (keys)
     
   * Try a quiz
   
 * Help
   

 * Communities
     
   * Chile
     
   * Global
     
   * Hong Kong
     
   * Southern Africa
     
   * UK and Ireland
     

   
 * Global
   

Sign up to iSpot
View sidebar Hide sidebar
Sign up Log in

A friendly and free community helping to identify wildlife and share nature.


EXPLORE

Browse the thousands of species spotted so far.


RECORD

Submit your observation, try to identify it, and the community will help..


IDENTIFY

Engage in discussions, help others identify and build your iSpot reputation.


LEARN

Take quizzes, join online courses, use identification keys and create projects.




GLOBAL LATEST OBSERVATIONS


« prev next »
Filter by group
   
 * 
   
 * 
   
 * 
   
 * 
   
 * 
   
 * 
   
 * 
   
 * 
   
 * 

Loading...

--------------------------------------------------------------------------------


HELP CONFIRM GLOBAL OBSERVATIONS


« prev next »
Filter by group
   
 * 
   
 * 
   
 * 
   
 * 
   
 * 
   
 * 
   
 * 
   
 * 
   
 * 

Loading...

--------------------------------------------------------------------------------


ARTICLES

Loading...
   


 * ISPOT INFORMATION, RELATED ACTIVITIES, PROJECTS AND RESOURCES
   
   Want to do more for nature with iSpot? Check out the following links to
   information, associated activities, projects and resources.
   
   Read More
   


 * ISPOT JOINS THE OU AND BBC PLACING A SPOTLIGHT ON THE BRITISH ISLES
   
   A new natural history series, Wild Isles, began on Sunday March 12, taking
   viewers on a journey through some of Britain and Ireland’s most beautiful
   landscapes and iSpot is here to help you identify and learn about species in
   the Wild Isles! Wild Isles is an Open University (OU) and BBC co-production
   that will be available on BBC One and iPlayer and the fourth episode airs at
   7pm on Sunday 2nd April, 2023. Wild Isles is presented by OU Honorary
   Graduate, Sir David Attenborough, read on to find out more.
   
   Read More
   


 * ISPOT AND AI: FASTCAT-CLOUD AND THE PLANTNET-API
   
   iSpot is currently trialling two image recognition
   technologies: FASTCAT-Cloud and the Pl@ntNet-API.
   
   FASTCAT-Cloud is an Artificial Intelligence (AI) service, from DynAIkon, that
   uploads and analyses nature videos and pictures filtering to relevant images
   and recordings of wildlife activity to identify species names.
   
   The Pl@ntNet-API is an AI plant identification Application Programming
   Interface (API) which queries Pl@ntNet using image recognition to make
   identifications of plant species. 
   
   How are these AI services being integrated into iSpot? Read on to find out
   more.
   
   Read More
   


NEWS

Loading...
   


 * MARCH 3 IS WORLD WILDLIFE DAY!
   
   March 3 is celebrated globally as World Widlife Day and this year’s theme
   “Connecting People and Planet: Exploring Digital Innovation in Wildlife
   Conservation”. World Wildlife Day places a spotlight on connecting people
   with the natural world and inspiring continued learning and action for
   animals and plants beyond the day. Read on for more information.
   
   Read More
   


 * 2024 NBN AWARDS FOR WILDLIFE RECORDING: WHICH EXCEPTIONAL INDIVIDUALS OR
   GROUPS WILL BE NOMINATED THIS YEAR?
   
   Nominations for the 2024 National Biodiversity Network (NBN) Trust Awards for
   Wildlife Recording are still open, closing on Wednesday April 3, 2024.
   Through these awards, the NBN recognises significant achievements and
   celebrates successes in wildlife recording in the UK. This year there are two
   new awards – one for Lifetime Achievement and one for Verifiers - making a
   total of seven categories. Read on to find out more.
   
   Read More
   


 * HOW SOCIETY OUGHT TO ENGAGE WITH NATURE, SCIENCE, AND TECHNOLOGY
   
   The way we engage with the natural world informs our scientific
   understandings and our worldviews. This is according to Advaith Siddharthan,
   Professor of Computer Science and Society, The Open University (OU). Want to
   find out more? Join Professor Siddharthan’s Inaugural Lecture on Tuesday
   February 13 at 13:00 p.m. live at the OU campus or online. Entitled: How
   society ought to engage with nature, science and technology, Siddharthan will
   discuss the impacts of modern culture's disassociation with nature and the
   potential for citizen science methodologies (i.e. iSpotnature.org) to redress
   these. Read on for more information and joining details.
   
   Read More
   


OBSERVATIONS FILTER PROJECT FILTER

Login below to save filters.

No filters are currently active

Save this filter *
Loading...
Save
Enter a title to save this combination of filters. Must be a valid URL. The date
format is . The time format is . Requires at least false characters. Accepts a
maximum of 255 characters. Cannot be less than . Cannot be greater than . This
input is readonly. This input is disabled.
   
 * Passwords must match
 * Passwords need at least: 8 characters, 1 number and 1 upper-case letter
 * Save this filter is required.
 * Save this filter requires at least false characters.
 * Save this filter takes a maximum of 255 characters.
 * Save this filter does not match the required format.
 * Save this filter must be a valid number.
 * Save this filter must be a valid email address.
 * Save this filter must be a valid URL.
 * Save this filter cannot be less than .
 * Save this filter cannot be greater than .
 * Save this filter cannot be less than .
 * Save this filter cannot be greater than .





SEARCH ISPOT

Search *
Loading...
Go
Enter search text. Must be a valid URL. The date format is . The time format is
. Requires at least false characters. Accepts a maximum of 255 characters.
Cannot be less than . Cannot be greater than . This input is readonly. This
input is disabled.
   
 * Passwords must match
 * Passwords need at least: 8 characters, 1 number and 1 upper-case letter
 * Search is required.
 * Search requires at least false characters.
 * Search takes a maximum of 255 characters.
 * Search does not match the required format.
 * Search must be a valid number.
 * Search must be a valid email address.
 * Search must be a valid URL.
 * Search cannot be less than .
 * Search cannot be greater than .
 * Search cannot be less than .
 * Search cannot be greater than .


USER LOGIN

Username *
Enter text. Must be a valid URL. The date format is . The time format is .
Requires at least false characters. Accepts a maximum of 255 characters. Cannot
be less than . Cannot be greater than . This input is readonly. This input is
disabled.
   
 * Passwords must match
 * Passwords need at least: 8 characters, 1 number and 1 upper-case letter
 * Username is required.
 * Username requires at least false characters.
 * Username takes a maximum of 255 characters.
 * Username does not match the required format.
 * Username must be a valid number.
 * Username must be a valid email address.
 * Username must be a valid URL.
 * Username cannot be less than .
 * Username cannot be greater than .
 * Username cannot be less than .
 * Username cannot be greater than .

Password *
Passwords need at least: 8 characters, 1 number and 1 upper-case letter Must be
a valid URL. The date format is . The time format is . Requires at least false
characters. Accepts a maximum of 255 characters. Cannot be less than . Cannot be
greater than . This input is readonly. This input is disabled.
   
 * Passwords must match
 * Passwords need at least: 8 characters, 1 number and 1 upper-case letter
 * Password is required.
 * Password requires at least false characters.
 * Password takes a maximum of 255 characters.
 * Password does not match the required format.
 * Password must be a valid number.
 * Password must be a valid email address.
 * Password must be a valid URL.
 * Password cannot be less than .
 * Password cannot be greater than .
 * Password cannot be less than .
 * Password cannot be greater than .

Loading...
Log in
 * Cancel OU login
 * Request new password
 * Create new account




FREE COURSE

Citizen Science and Global Biodiversity



LATEST PROJECTS

Loading...
   
 * Snettisham
   
 * ❤️HABITAT iFOCUS-wall
   
 * ⭐SOME useful iLinks⭐
   
 * ♻️Inspiring Spring 20/03/2024 iBlitz
   
 * Biodiversity and Society
   
 * ♻️iFocus Wild Goose Chase Summary
   
 * LCH - Lune River
   
 * Engaging with Lichens
   


TWITTER




WHO'S ONLINE

There are 0 guests and 0 registered users online

RECENT USERS


SUCCESS


:

 * Home
 * Help
 * Contact

 * Learn about The Open University
   
 * About us
   
 * Accessibility statement
   
 * Terms of use
   
 * Contact
   
 * Help
   

 



© The Open University 2021
 

We use cookies to make sure iSpot works effectively and to improve your user
experience. If you continue to use this site we will assume that you are happy
with this. However, you can change your cookie settings at any time.

More Info/Change Settings
Continue



You are using an outdated browser. Please upgrade your browser to improve your
experience.