{"version":3,"file":"js/admin.min.js?h=28c1ca88ba96af2c7f51","mappings":"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","sources":["webpack://photo-engine-web/webpack/runtime/chunk loaded","webpack://photo-engine-web/./src/js/app/admin/ctrl/blog.js","webpack://photo-engine-web/./src/js/app/admin/ctrl/debug-exif.js","webpack://photo-engine-web/./src/js/app/admin/module/index.js","webpack://photo-engine-web/./src/js/app/shared/directives/index-progress.js","webpack://photo-engine-web/./src/js/app/shared/directives/file-upload.js","webpack://photo-engine-web/./src/js/app/shared/directives/query-designer.js","webpack://photo-engine-web/./src/js/app/shared/directives/diff.js","webpack://photo-engine-web/./src/js/app/shared/directives/logs.js","webpack://photo-engine-web/./src/js/app/admin/directives/index.js","webpack://photo-engine-web/./src/js/app/shared/directives/reactive-button.js","webpack://photo-engine-web/./src/js/app/shared/directives/confirm.js","webpack://photo-engine-web/./src/js/app/shared/directives/select-users.js","webpack://photo-engine-web/./src/js/app/shared/directives/get-user.js","webpack://photo-engine-web/./src/js/app/shared/directives/index-name.js","webpack://photo-engine-web/./src/js/app/shared/directives/files.js","webpack://photo-engine-web/./src/js/app/shared/directives/upload.js","webpack://photo-engine-web/./src/js/app/shared/directives/index-actions.js","webpack://photo-engine-web/./src/js/app/shared/directives/parse-cron.js","webpack://photo-engine-web/./src/js/app/shared/directives/back-button.js","webpack://photo-engine-web/./src/js/app/shared/directives/imageonload.js","webpack://photo-engine-web/./src/js/app/shared/directives/filter-creator.js","webpack://photo-engine-web/./src/js/app/shared/directives/draggable.js","webpack://photo-engine-web/./src/js/app/admin/ctrl/logs.js","webpack://photo-engine-web/./src/js/app/admin/ctrl/indices.js","webpack://photo-engine-web/./src/js/app/shared/ctrl/imageselector.js","webpack://photo-engine-web/./src/js/app/admin/ctrl/files.js","webpack://photo-engine-web/./src/js/app/admin/ctrl/dashboard.js","webpack://photo-engine-web/./src/js/app/admin/ctrl/image-profiles.js","webpack://photo-engine-web/./src/js/helpers/agg-keys.js","webpack://photo-engine-web/./src/js/app/admin/ctrl/site-config.js","webpack://photo-engine-web/./src/js/app/admin/ctrl/browse.js","webpack://photo-engine-web/./src/js/app/admin/ctrl/queues.js","webpack://photo-engine-web/./src/js/app/admin/ctrl/crowdsource-diff.js","webpack://photo-engine-web/./src/js/app/admin/ctrl/attribute-editor.js","webpack://photo-engine-web/./src/js/app/admin/ctrl/index.js","webpack://photo-engine-web/./src/js/app/shared/ctrl/fileselector.js","webpack://photo-engine-web/./src/js/app/admin/ctrl/list-tenants.js","webpack://photo-engine-web/./src/js/app/admin/ctrl/edit-tenant.js","webpack://photo-engine-web/./src/js/app/admin/ctrl/settings.js","webpack://photo-engine-web/./src/js/app/admin/ctrl/users.js","webpack://photo-engine-web/./src/js/app/admin/ctrl/user-edit.js","webpack://photo-engine-web/./src/js/app/admin/ctrl/workers.js","webpack://photo-engine-web/./src/js/app/admin/ctrl/worker.js","webpack://photo-engine-web/./src/js/app/admin/ctrl/schedules.js","webpack://photo-engine-web/./src/js/app/admin/ctrl/feed.js","webpack://photo-engine-web/./src/js/app/admin/ctrl/comments.js","webpack://photo-engine-web/./src/js/app/admin/ctrl/alias.js","webpack://photo-engine-web/./src/js/app/admin/ctrl/preferences.js","webpack://photo-engine-web/./src/js/app/admin/ctrl/crowdsource.js","webpack://photo-engine-web/./src/js/app/admin/factories/index.js","webpack://photo-engine-web/./src/js/app/admin/filters/index.js","webpack://photo-engine-web/./src/js/app/shared/filters/props.js","webpack://photo-engine-web/./src/js/app/admin/index.js","webpack://photo-engine-web/./src/js/app/admin/routes/index.js","webpack://photo-engine-web/./src/js/app/shared/factories/files.js","webpack://photo-engine-web/./src/js/app/shared/factories/imageselector.js","webpack://photo-engine-web/./src/js/app/shared/tools/sse-client.js","webpack://photo-engine-web/webpack/bootstrap","webpack://photo-engine-web/webpack/runtime/compat get default export","webpack://photo-engine-web/webpack/runtime/define property getters","webpack://photo-engine-web/webpack/runtime/get javascript chunk filename","webpack://photo-engine-web/webpack/runtime/global","webpack://photo-engine-web/webpack/runtime/hasOwnProperty shorthand","webpack://photo-engine-web/webpack/runtime/make namespace object","webpack://photo-engine-web/webpack/runtime/node module decorator","webpack://photo-engine-web/webpack/runtime/runtimeId","webpack://photo-engine-web/webpack/runtime/publicPath","webpack://photo-engine-web/webpack/runtime/jsonp chunk loading","webpack://photo-engine-web/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","\nconst slug = require('slug');\n\n\n\n\n\nfunction blogController($scope, $routeParams, $resource, ImageSelector, Notification){\n\n  $scope.tenantId = $routeParams.tenantId;\n  $scope.id = $routeParams.id;\n  const defaults = {\n    id: $routeParams.id,\n    draft: true,\n    expires: null,\n    tags: [],\n    tenantId: $routeParams.tenantId,\n    text: `\n# Heading 1\n## Heading 2\n### Heading 3\n\nList:\n- foo\n- bar \n- baz\n\n**Bold**\n\n*Italic*\n\n> blockquote\n\nOrdered list:\n1. First item\n2. Second item\n3. Third item\n\n\n\\`Some code .. \\`\n\n\nHorizontal Rule\t\n\n---\n\nMore text here..\n\n\n    `\n  }\n\n  $scope.editCache = {};\n\n  const newUUID = crypto.randomUUID();\n\n  $scope.selectIfNoImage = function selectIfNoImage(img){\n\n    if (!img || !img.src) return $scope.selectImage(false);\n  }\n\n\n  const Blog = $resource('/api/tenants/:tenantId/blog/:id', {\n    tenantId: '@tenantId',\n    id: '@id',\n  }, {\n    create: {\n      method: 'POST'\n    },\n    remove: {\n      method: 'DELETE'\n    },\n  });\n\n  if ($scope.id){\n\n    if ($routeParams.new){\n      $scope.blog = new Blog(defaults);\n    } else {\n      \n      console.log('feeetch ', $scope.id)\n      \n\n      const blog = Blog.get({\n        tenantId: $scope.tenantId,\n        id: $scope.id,\n      });\n\n      blog.$promise.then(res => {\n        if (res.expires){\n          res.expires =  new Date(res.expires);\n        }\n        $scope.blog = res; \n      })\n    }\n  } else {\n\n    \n    $scope.blogs = Blog.query({\n      tenantId: $scope.tenantId,\n    })\n\n    // $scope.blog = new Blog(defaults);\n    // $scope.blog.id = crypto.randomUUID();\n    // $scope.blog.tenantId = $routeParams.tenantId;\n  }\n\n  const mainText = document.getElementById('mainText');\n\n  let lastEditComputed = false;\n\n  document.addEventListener('keydown', function(event){\n    // console.log('eeevent, keydwon', event)\n\n    if (event.key === 'Control') return;\n\n    if (event.key === 'z' && event.ctrlKey && lastEditComputed){\n      undoHistroy();\n      return console.log('Now undo from history??', lastEditComputed);\n    }\n\n    // console.log('Will set lastEdithist as false', lastEditComputed, event)\n\n    lastEditComputed = false;\n  })\n\n  $scope.$watch('blog.title', function (a, b) {\n    if (!a || a === b) return;\n    const slugId = slug(a);\n    $scope.blog.slug = slugId;\n  });\n\n  $scope.remove = function remove(item, i){\n\n    console.log(item, i);\n    const req = item.$remove();\n\n    req.then(res => {\n      console.log(`Delete response`, res);\n\n      $scope.blogs.splice(i, 1);\n    }).catch(error => {\n      console.error(`Delete error`, error);\n    })\n\n    console.log(req);\n  }\n\n\n  $scope.newBlogLink = function newBlogLink(){\n    const uuid = crypto.randomUUID();\n    const url = `/admin/settings/${$scope.tenantId}/blog/edit/${newUUID}?new=true`;\n    return url;\n  }\n\n\n  let carouselSaveTimeout = false;\n  $scope.$on('draggable:dragstart', function (event) {\n    if (carouselSaveTimeout){\n      clearTimeout(carouselSaveTimeout);\n    }\n  })\n  $scope.$on('draggable:end', function(event){\n\n    carouselSaveTimeout = setTimeout(() => {\n      return saveData();\n    }, 1500);\n\n  })\n\n\n\n  function saveData() {\n\n    if (! $scope.blog  ) return;\n    const id = $scope.blog.id;\n\n    const req = $scope.blog.$create();\n\n    req.then(function success(response){\n      console.log('success', response);\n\n      if (!$routeParams.id ){\n        return $window.location = `/admin/settings/${$scope.tenantId}/blog/edit/${id}`;\n      }\n\n      if (response.expires){\n        response.expires = new Date(response.expires);\n      }\n\n      $scope.blog = new Blog(response);\n\n      Notification.success(`Vistað!`)\n\n    });\n\n    return req;\n  }\n\n\n  function textTransformer(textString, anchor){\n    const pos = {\n      start: mainText.selectionStart,\n      end: mainText.selectionEnd,\n    };\n\n\n    const diff = pos.end - pos.start;\n    let text = `${anchor}Texti..${anchor}\\n`\n\n    if (diff > 0) {\n\n      const slice = textString.slice(pos.start, pos.end - 1);\n\n\n      if (slice.includes(anchor)) {\n        const regex = new RegExp(anchor);\n        text = slice.replace(regex, '');\n      } else {\n        text = `${anchor}${slice}${anchor}`;\n      }\n    }\n\n    const newText = [textString.slice(0, pos.start), text, textString.slice(pos.end)].join('')\n\n\n    updateText(newText)\n  }\n\n\n\n  $scope.bold = function bold(){\n    const text = $scope.blog.text;\n    return textTransformer(text, '**')\n  }\n\n  $scope.italic = function italic() {\n    const text = $scope.blog.text;\n    return textTransformer(text, '*')\n  }\n\n\n  $scope.link = function link() {\n    const uri = `[Titill](https://www.example.com)\\n`;\n\n    const pos = {\n      start: mainText.selectionStart,\n      end: mainText.selectionEnd,\n    };\n\n    const newText = [$scope.blog.text.slice(0, pos.start), uri, $scope.blog.text.slice(pos.end)].join('')\n\n    updateText(newText);\n  }\n\n\n  const textHistory  = [];\n\n  function updateText(string){\n    const current = $scope.blog.text;\n    textHistory.push(current);\n\n    lastEditComputed = true;\n\n\n    $scope.$applyAsync(function (){\n\n      $scope.blog.text = string;\n    })\n  }\n\n  function undoHistroy(){\n    const last = textHistory[textHistory.length - 1 ];\n\n    if (last === undefined) return;\n\n    console.log('Will apply last', last)\n\n    updateText(last);\n  }\n\n  $scope.addImage = function addImage(){\n    \n    const pos = {\n      start: mainText.selectionStart,\n      end: mainText.selectionEnd,\n    };\n    \n    const modalPromise = ImageSelector.open({\n      tenant: $scope.tenant,\n      config: $scope.config,\n      multiple: false\n    });\n\n    modalPromise.then(response => {\n      const name = response.selected.name;\n      const uri = response.selected.uri;\n\n      const template = `\\n![${name}](${uri})\\n`;\n\n      const newText = [$scope.blog.text.slice(0, pos.start), template, $scope.blog.text.slice(pos.end)].join('')\n      updateText(newText);\n      $scope.$applyAsync();\n    })\n  }\n\n\n  $scope.attachment = function attachment() {\n\n    const pos = {\n      start: mainText.selectionStart,\n      end: mainText.selectionEnd,\n    };\n\n    const modalPromise = ImageSelector.open({\n      tenant: $scope.tenant,\n      config: $scope.config,\n      multiple: false,\n      acceptedFiles: 'application/*,image/*',\n      title: 'Veldu skrá',\n      asset: true,\n    });\n\n    modalPromise.then(response => {\n      const name = response.selected.name;\n      const uri = response.selected.uri;\n      const template = `\\n[${name}](${uri})\\n`;\n\n      const newText = [$scope.blog.text.slice(0, pos.start), template, $scope.blog.text.slice(pos.end)].join('')\n      updateText(newText);\n      $scope.$applyAsync();\n    })\n  }\n\n\n  $scope.selectImage = function selectImage(multiple) {\n    const modalPromise = ImageSelector.open({\n      tenant: $scope.tenant,\n      config: $scope.config,\n      multiple,\n    });\n\n    modalPromise.then(response => {\n      const selected = response.selected;\n      $scope.blog.image = { \n        name: selected.name,\n        src: selected.uri,\n      };\n      $scope.$applyAsync();\n    })\n  }\n\n\n  $scope.showCarouselOrdering = false;\n\n  $scope.carouselOrder = 1;\n\n  $scope.blockAutoSave = false;\n\n  // $scope.orderCaruselImage = function orderCaruselImage(img){\n  //   if (! $scope.showCarouselOrdering ) return;\n\n  //   img.order = $scope.carouselOrder;\n\n  //   $scope.carouselOrder ++;\n  // }\n\n\n\n  // let isFirstSave = true;\n  // let saveCarouselTimeout = false;\n  // $scope.$watchCollection('blog.carousel', (a,b) => {\n  //   if (saveCarouselTimeout) {\n  //     window.clearTimeout(saveCarouselTimeout)\n  //   }\n  //   if ( (a || b ) && isFirstSave){\n  //     isFirstSave = false;\n  //     return;\n  //   }\n\n  //   if (! $scope.blog ) return;\n\n  //   saveCarouselTimeout = setTimeout(() => {\n  //     isFirstSave = true;\n  //     saveData();\n  //   }, 1500)\n  // })\n\n  $scope.removeCarousel = function removeCarousel(){\n    $scope.blog.carousel = [];\n  }\n\n  $scope.saveImageEdit = function saveImageEdit(img){\n    $scope.editCache[img.src] = false;\n    saveData();\n  }\n\n  $scope.saveImageRename = function saveImageRename(image){\n    delete image.edit;\n    saveData();\n  }\n\n\n  $scope.createCarousel = function createCarousel() {\n    const modalPromise = ImageSelector.open({\n      tenant: $scope.tenant,\n      config: $scope.config,\n      multiple: true\n    });\n\n    modalPromise.then(response => {\n      const selected = response.selected;\n      $scope.blog.carousel = selected.map((img, i) => {\n        return {\n          name: img.name,\n          src: img.uri,\n          order: i,\n        }\n      })\n      $scope.$applyAsync();\n    })\n  }\n\n\n  let saveTimeout = false;\n  function autoSave(){\n    if (saveTimeout){\n      clearTimeout(saveTimeout);\n    }\n\n    saveTimeout = setTimeout(function save(){\n      const req = saveData();\n    }, 1000);\n\n  }\n\n  $scope.$watchCollection('blog', function (a,b){\n\n    if ($scope.blockAutoSave) return console.warn('Auto save blocked');\n\n    if (! a || !b ) return;\n\n    if (b.$resolved === false) return;\n\n    const srcA = angular.copy(a);\n    const srcB = angular.copy(b);\n\n    delete srcA.edit;\n    delete srcB.edit;\n    delete srcA.$promise;\n    delete srcB.$promise;\n    delete srcA.$resolved;\n    delete srcB.$resolved;\n\n    const srcAjson = JSON.stringify(angular.copy(srcA));\n    const srcBjson = JSON.stringify(angular.copy(srcB));\n\n    if (srcAjson === srcBjson) return;\n    return autoSave();\n  })\n}\n\n\nblogController.$inject = ['$scope', '$routeParams', '$resource', 'ImageSelector', 'Notification'];\n\n\n\nmodule.exports = blogController;","\n\n\n\nconst $ = require('jquery');\nconst { Dropzone } = require(\"dropzone\");\n\n\nfunction debugExifController($scope){\n\n\n  const collapse = $('#collapseUploadDebugger');\n\n\n  $scope.alert = {\n    show: false,\n    message: '',\n  }\n\n\n  $scope.exif = false;\n\n  const theDropzone = new Dropzone(\"#dropzone-exif-debug\", {\n    method: 'post',\n    url: '/api/debug/exif',\n    acceptedFiles: 'image/*',\n    dictDefaultMessage: 'Smelltu hér eða dragðu skjalið hingað',\n    error: (file, message) => {\n      if (file.previewElement) {\n        file.previewElement.classList.add(\"dz-error\");\n        if (typeof message !== \"string\" && message.error) {\n          message = message.error;\n        }\n        if (message !== \"string\" && message.message) {\n          message = message.message;\n        }\n        for (let node of file.previewElement.querySelectorAll(\n          \"[data-dz-errormessage]\"\n        )) {\n          node.textContent = message;\n        }\n      }\n    }\n  });\n  theDropzone.on(\"addedfile\", file => {\n\n    $scope.alert.show = false;\n    console.log(`File added: ${file.name}`);\n\n    return 'Hestur!'\n  });\n\n\n\n  theDropzone.on('complete', (file, a) => {\n\n    const response = JSON.parse(file.xhr.response);\n\n    console.log(file.xhr)\n\n    if (file.xhr.status !== 200){\n      $scope.alert = {\n        show: true,\n        message: `${response.code} ${response.message}`,\n      }\n      return $scope.$applyAsync();\n\n    }\n\n\n    $scope.exif = response.pop();\n\n    collapse.collapse('hide')\n\n    $scope.$applyAsync();\n    document.getElementById('debugger').scrollIntoView({\n      behavior: 'smooth'\n    })\n\n  })\n\n}\n\n\ndebugExifController.$inject = ['$scope'];\n\n\nmodule.exports = debugExifController;","require('angular/angular.min.js');\nrequire('angular-sanitize/angular-sanitize.min.js');\nrequire('angular-ui-notification/dist/angular-ui-notification.min.js');\nrequire('angular-moment/angular-moment.min.js');\nrequire('ui-select/dist/select.min.js');\nrequire('angular-ui-notification/dist/angular-ui-notification.min.css');\nrequire('angular-resource/angular-resource.min.js');\nrequire('angular-route/angular-route.min.js');\nrequire('angular-cookies/angular-cookies.min.js');\nrequire('angular-cache/dist/angular-cache.min.js');\nrequire('angular-scroll/dist/angular-scroll.min.js');\n\nconsole.log('INFO: Loading Admin module');\nconst app = angular.module('admin', [\n  'ngResource',\n  'ngRoute',\n  'ui.select',\n  'ngSanitize',\n  'ui-notification',\n  'angularMoment',\n  'angular-cache',\n  'angularScroll'\n]);\nimport service from '../../shared/services';\nservice(app);\n\nimport applicationRun from '../../shared/run/';\napp.run(applicationRun);\n\n\nfunction httpErrorInterceptor($q, $rootScope){\n  return {\n    requestError(err) {\n      console.log('Got reject', err);\n      return $q.reject(err);\n    },\n    responseError(err) {\n      console.log('Got responseError', err, $rootScope);\n\n      $rootScope.$emit('responseError', err);\n      return $q.reject(err);\n    }\n  }\n}\n\nhttpErrorInterceptor.$inject = ['$q', '$rootScope'];\n\napp.factory('httpErrorInterceptor', httpErrorInterceptor);\n\n\n\nfunction moduleConfig($httpProvider) {\n  console.log('httpProvider', $httpProvider)\n\n\n\n  $httpProvider.interceptors.push('httpErrorInterceptor')\n\n}\n\nmoduleConfig.$inject = ['$httpProvider']\n\napp.config(moduleConfig)\n","\nconst $ = require('jquery');\nconst randomstring = require('randomstring');\nconst inView = require('in-view');\n\nfunction indexProgress($http, $interval){\n  return {\n    restrict : 'E',\n    templateUrl : 'templates/directives/index-progress.html',\n    scope: {\n      index : '<',\n      tenant : '<'\n    },\n    link : function ($scope, element, attrs){\n      const indexId = $scope.index;\n      const tenantId = $scope.tenant;\n\n      $scope.donePr = 0;\n      $scope.failedPr = 0;\n      $scope.workingPr = 0;\n      $scope.waitingPr = 0;\n      $scope.popover = \"\";\n\n      $('.progress.special-popover').popover({\n        html :true,\n      });\n\n      $('.progress.special-popover').on('shown.bs.popover', function (event){\n        const id = $(this).attr('aria-describedby');\n        const target = document.getElementById(id);\n        const refreshButton = target.querySelector('.refresh-counter');\n        const resetButton = target.querySelector('.reset-counter');\n        if (refreshButton){\n          refreshButton.addEventListener('click', get);\n        }\n        if (resetButton){\n          resetButton.addEventListener('click', resetCounter);\n        }\n      })\n\n      const maxErrCount = 10;\n      let errCount = 0;\n\n      $scope.isFetching = false;\n\n      function start(){\n        $scope.Timer = $interval(get, 30000);\n        get();\n      }\n\n      function resetCounter(){\n        $http({\n          method:'POST',\n          url : `/api/tenants/${tenantId}/indices/${indexId}/counter`\n        }).then(function success(res){\n          get();\n        }, function error(err){\n          console.error(err);\n        });\n      }\n\n      function getOther(obj){\n        const values = [];\n\n        [\n          'completed',\n          'failed',\n          'waiting',\n          'started',\n          'stalled',\n          'skipped'\n        ].forEach(function (key){\n          values.push(obj[key]);\n        });\n\n        return values.reduce((a,b) => a + b);\n      }\n\n      function stop(){\n        // console.log('stop', indexId);\n        if (angular.isDefined($scope.Timer)) {\n          $interval.cancel($scope.Timer);\n        }\n      }\n      function getElement(){\n        const els = document.getElementById(`progress_${indexId}`);\n\n        if (!els) return false;\n        return els.querySelector('.progress');\n      }\n\n      function get(){\n        const progressElement = getElement();\n\n        if (!progressElement) return stop();\n\n        if (document.hidden) return;\n\n\n        if (!inView.is(progressElement)) return stop();\n\n        if($scope.isFetching) return;\n\n        $scope.isFetching = true;\n        $http({\n          url : `/api/tenants/${tenantId}/indices/${indexId}/counter`\n        }).then(function success(res){\n\n          $scope.isFetching = false;\n          $scope.total = res.data.total;\n          $scope.done = getOther(res.data);\n          $scope.stats = res.data;\n\n          $scope.skippedPr = ((res.data.skipped / res.data.total) * 100).toFixed(2);\n          $scope.donePr = ((res.data.completed / res.data.total) * 100).toFixed(2);\n          $scope.failedPr = ((res.data.failed / res.data.total) * 100).toFixed(2);\n          $scope.stalledPr = ((res.data.stalled / res.data.total) * 100).toFixed(2);\n          $scope.workingPr = ((res.data.started / res.data.total) * 100).toFixed(2);\n          $scope.waitingPr = ((res.data.waiting / res.data.total) * 100).toFixed(2);\n          errCount = 0;\n        }, function error(err){\n\n          $scope.isFetching = false;\n          if (err.status === 403) return stop();\n          console.error('Error fetching index progress', err);\n          if (errCount > maxErrCount) return stop();\n          errCount++;\n        })\n      }\n\n      setTimeout(function startEverything() {\n        $scope.elementId = `#progress_${indexId} .progress`;\n        inView($scope.elementId)\n        .on('enter', function (){\n          start();\n        })\n        .on('exit', function (){\n          stop();\n        });\n        start();\n      }, 500)\n      $scope.$on(\"$destroy\",function(){\n        if (angular.isDefined($scope.Timer)) {\n          $interval.cancel($scope.Timer);\n        }\n      });\n    }\n  }\n}\n\n\nexport default indexProgress;\n","import worker from '../../workers';\n\nfunction fileUpload($timeout, Notification, $filter, CacheFactory){\n  const fromBytes = $filter('bytes');\n  return {\n    restrict : 'E',\n    templateUrl:'templates/directives/file-upload.html',\n    scope: {\n      uri: '<',\n      done: '&',\n      validate: '&',\n      error: '&',\n      multiple: '<',\n      thumbnail: '<',\n    },\n    link : function ($scope, element, attrs){\n\n      $scope.getAcceptedFiles = function getAcceptedFiles(){\n        if ($scope.uploadFolder) return '';\n        return '.tif,.jpg,.jpeg,.wav,.tiff,.mp3,.xml';\n      }\n      \n      $scope.state = 'ready';\n      const input = document.getElementById('master-upload');\n      $scope.getStyle = function getStyle(pr){\n        return { width: `${pr}%` };\n      }\n      input.addEventListener('change', function (){\n        if (!$scope.uri) return console.error('No upload URL set');\n        console.log('Now upload the files using delta sync', $scope.uri);\n        startUpload();\n      });\n\n      $scope.showRatio = function showRatio(metadata){\n        const ratio = metadata.sent / metadata.size;\n        const pr = (ratio * 100).toFixed(2);\n        return `${pr}%`\n      }\n\n      const fileMap = {};\n      \n      function handleMessage(event){\n        if (event.data.type === 'file-upload:update') {\n          return handleFileUpdates(event);\n        }\n\n        if (event.data.type === 'synchronize-complete'){\n          return;// Just discard it.\n        }\n\n\n        if (event.data.type === 'file-upload:complete') {\n          return handleFileUpdates(event);\n        }\n\n        if (event.data.type === 'file-upload:error') {\n          return handleFileUpdates(event);\n        }\n      }\n\n      worker.channel.addEventListener('message', handleMessage);\n\n      function handleFileUpdates(event){\n\n        const newState = event.data.state;\n        const oldState = fileMap[newState?.name] || {};\n\n\n        oldState.isComplete = false; // Force not complete..\n\n        Object.keys(newState).forEach(key => {\n          const oldValue = oldState[key];\n          const newValue = newState[key];\n\n          if (oldValue === newValue){\n            return; //console.log('No change', { key, newValue });\n          }\n\n          oldState[key] = newState[key];\n        });\n\n\n        if (event.data.type === 'file-upload:error') {\n          oldState.error = event.data.error;\n        }\n\n        $scope.$applyAsync();\n      }\n\n      async function startUpload(){\n        const files = input.files;\n        $scope.pr = 0;\n        $scope.filesToUpload = [];\n        $scope.state = 'uploading';\n\n        for (const file of files) {\n          const state = { // Make refrence to object throug map.\n            name: file.name,\n            size: file.size,\n            lastModified: file.lastModified,\n            type: file.type,\n            webkitRelativePath: file.webkitRelativePath,\n            isComplete: false,\n            added: new Date(),\n            metadata: {\n              text: '',\n              pr: 0,\n              sent: 0,\n              size: file.size,\n            }\n          }\n          fileMap[file.name] = state;\n          $scope.filesToUpload.push(state);\n        }\n\n        console.log('Sending files to webworker', $scope.filesToUpload.length)\n\n        return worker.sendMessage({\n          type: 'upload-request',\n          files,\n          url: $scope.uri,\n        })\n\n        \n      }\n\n      $scope.getUploadIcon = function getUploadIcon(state){\n        const icons = {\n          error : 'fa-upload text-danger',\n          uploading : 'fa-spinner fa-spin',\n          done : 'fa-check text-success',\n          ready : 'fa-upload',\n        };\n        return icons[state];\n      }\n\n      $scope.$watch('uploadFolder', function (a, b) {\n        if (a) {\n          input.setAttribute('directory', a);\n          input.setAttribute('webkitdirectory', a);\n        } else {\n          input.removeAttribute('directory');\n          input.removeAttribute('webkitdirectory');\n        }\n      })\n      $scope.uploadTypeText = function uploadTypeText(uploadFolder){\n        if (uploadFolder){\n          return 'Hlaða upp möppu';\n        }\n        return 'Hlaða upp skrám';\n      }\n\n    }\n  }\n}\n\n\n\nfileUpload.$inject = ['$timeout', 'Notification', '$filter', 'CacheFactory'];\n\nexport default fileUpload;\n","\n\nconst bbHelper = require('bodybuilder-helper');\n\n\n\nfunction directiveQueryDesigner($http, es, bodybuilder, $q, CacheFactory){\n\n  const cacheName = \"indexMappings\";\n  let cache = CacheFactory.get(cacheName);\n  if (!cache) {\n    cache = CacheFactory.createCache(cacheName, {\n      maxAge: (3600 * 1000),\n    });\n  }\n  return {\n    restrict : 'E',\n    scope : {\n      index : '<',\n      query : '=',\n    },\n    template : `\n    <div class=\"form-group\" >\n      <div class=\"form-row align-items-center\" ng-repeat=\"(i, filter) in filters\">\n        <div class=\"col-auto\">\n          <label class=\"sr-only\" for=\"inlineFormInput\">Type</label>\n          <select class=\"form-control mb-2\" ng-model=\"filter.type\" ng-change=\"fetchIndexKeys(filter)\">\n            <option value=\"{{type}}\" ng-repeat=\"type in availableTypes.filter track by $index\">{{type}}</option>\n          </select>\n        </div>\n        <div class=\"col-md-3\">\n          <label class=\"sr-only\" for=\"inlineFormInputGroup\">Field</label>\n          <select class=\"form-control mb-2\" ng-model=\"filter.field\" ng-change=\"fetchValuesForField(filter)\">\n            <option value=\"{{key.field}}\" ng-repeat=\"key in filter._keys track by $index\">{{key.name}}</option>\n          </select>\n        </div>\n        <div class=\"col-auto\">\n          <label class=\"sr-only\" for=\"inlineFormInput\">Query type</label>\n          <select class=\"form-control mb-2\" ng-change=\"buildQuery()\" ng-model=\"filter.queryType\">\n            <option value=\"{{op.id}}\" ng-repeat=\"op in availableOperators track by $index\">{{op.name}}</option>\n          </select>\n        </div>\n        <div class=\"col-auto\">\n          <label class=\"sr-only\" for=\"inlineFormInputGroup\">Value</label>\n          <select class=\"form-control mb-2\" ng-model=\"filter.value\" ng-change=\"buildQuery()\">\n            <option value=\"{{value}}\" ng-repeat=\"value in filter._values track by $index\">'{{value}}'</option>\n          </select>\n        </div>\n        <div class=\"col-auto\">\n          <button type=\"button\" ng-click=\"removeFilter(i)\" class=\"btn btn-danger btn-sm  mb-2\"><i class=\"fa fa-remove\"></i></button>\n        </div>\n      </div>\n      <button ng-show=\"index\" ng-click=\"addFilter(i);\" type=\"button\" class=\"btn btn-info btn-sm  mb-2\"><i class=\"fa fa-plus\"></i> Bæta við síu</button>\n    </div>\n    `,\n    link : function ($scope, element, attrs){\n\n      $scope.initQuery = false;\n\n      $scope.availableTypes = {\n        filter: ['term']\n      };\n\n      $scope.filter = {};\n\n      $scope.filters = [];\n\n      $scope.availableOperators = [\n        {\n          id : 'must',\n          name: 'Er',\n        },\n        {\n          id : 'should',\n          name: 'Ætti',\n        },\n        {\n          id : 'should_not',\n          name: 'Ætti ekki',\n        },\n        {\n          id : 'must_not',\n          name: 'Er ekki',\n        }\n      ];\n\n\n      $scope.$watch('query', function (a,b){\n        if ($scope.initQuery) return;\n\n        if (a && a.query) {\n          const loaded = bbHelper.loadQuery(a);\n          let parsedFilters = loaded.filter.map(function (filter){\n            $scope.fetchIndexKeys(filter, false).then(function (){\n              $scope.fetchValuesForField(filter, false)\n            })\n\n            return filter;\n          })\n\n          //fetchIndexKeys();\n          // Fetch the valus and keys available\n          $scope.filters = parsedFilters;\n          $scope.initQuery = true;\n\n        }\n\n      });\n\n\n      $scope.addFilter = function (){\n        $scope.filters.push({});\n      }\n\n      $scope.removeFilter = function (i){\n        $scope.filters.splice(i, 1);\n\n        $scope.buildQuery();\n      }\n\n      function getIndexKeys(index){\n        return $q(function (resolve, reject){\n          if (!index) return reject(`No index defined`);\n          const cacheResponse = cache.get(index);\n          if (cacheResponse) return resolve(cacheResponse);\n          es.indices.getMapping({\n            index : index,\n          }).then(function (data){\n            console.log(index)\n            if (! data[index]) return reject(data);\n            if (! data[index].mappings) return reject(data);\n            if (! data[index].mappings.properties) return reject(data);\n\n            const obj = data[index].mappings.properties;\n            const keys = Object.keys(obj).filter(function (key){\n              const value = obj[key];\n              return (value.type === 'text');\n            })\n\n            const put = cache.put(index, keys);\n            return resolve(keys);\n          }, reject)\n        })\n      };\n\n\n      $scope.fetchIndexKeys = function fetchIndexKeys(target, buildQuery){\n        const index = $scope.index;\n\n        target._values = [];\n\n        return $q(function (resolve, reject){\n          getIndexKeys(index).then(function (keys){\n            const parsedKeys = keys.map(function (k){\n              return {\n                name : k,\n                field : `${k}.keyword`\n              };\n            });\n\n            target._keys = parsedKeys;\n            resolve(parsedKeys);\n\n            if (buildQuery !== false) $scope.buildQuery();\n\n          }, function (err){\n            console.log('error fetching mappings', err)\n          });\n        })\n\n\n      }\n\n      $scope.buildQuery = function (){\n\n        const filter = angular.copy($scope.filters).map(function (f){\n          delete f._keys;\n          delete f._values;\n          return f;\n        }).filter(function (f){\n          return (typeof f.value === 'string');\n        });\n\n        if (filter.length === 0) return;\n\n        const query = {\n          filter : filter\n        };\n\n        const eQuery = bbHelper.generateQuery(query);\n\n        $scope.query = eQuery;\n      }\n\n      $scope.fetchValuesForField = function fetchValuesForField(target, buildQuery){\n        const selectedKey = target.field;\n        return $q(function (resolve, reject){\n          es.search({\n            index : $scope.index,\n            size : 0,\n            body : bodybuilder().agg('terms',selectedKey, '0', { size : 10000 }).build()\n          }).then(function success(res){\n            console.log('Fetch keys for field', res.aggregations);\n            const bucket = res.aggregations['0'].buckets;\n            let values = [];\n            if (Array.isArray(bucket)){\n              values = bucket.map( i => i.key );\n              target._values = values;\n            }\n\n            resolve(values);\n\n            if (buildQuery !== false) $scope.buildQuery();\n          }, reject)\n        });\n      };\n    }\n  }\n}\n\ndirectiveQueryDesigner.$inject = [ '$http', 'es', 'bodybuilder', '$q', 'CacheFactory' ];\n\nexport default directiveQueryDesigner;\n","\nconst Diff = require('diff');\n\nfunction diffDirective(){\n  return {\n    restrict : 'E',\n    templateUrl: 'templates/directives/diff.html',\n    replace: true,\n    scope : {\n      a : '<',\n      b : '<',\n    },\n    link : function ($scope, element, attrs, controller){\n\n      $scope.color = function (diff){\n        if (diff.removed) return 'text-danger';\n        if (diff.added) return 'text-success';\n        return 'text-secondary'\n      }\n\n      if ($scope.a || $scope.b ) {\n        $scope.diffAfter = Diff.diffLines($scope.a || \"\", $scope.b || \"\");\n      }\n    }\n  }\n}\n\n\nexport default diffDirective;\n","\n\nfunction logs($http){\n  return {\n    restrict : 'E',\n    templateUrl: 'templates/directives/logs.html',\n    scope:{\n      tenant: '<',\n      index: '<',\n    },\n    link : function ($scope, element, attrs){\n\n      if (! $scope.tenant ) return console.log('No tenant set');\n      if (! $scope.index ) return console.log('No index set');\n\n      $scope.search = function search(){\n        $scope.from = 0;\n        return query($scope.queryString, true);\n      }\n\n      $scope.meta = {};\n\n      $scope.size = 50;\n      $scope.from = 0;\n      $scope.logs = [];\n\n      setInterval(() => {\n        if (window.scrollY > (window.innerHeigh / 2) ) {\n          return;\n        }\n        return query($scope.queryString, true);\n      }, 5000);\n\n\n      function applyLogs(response){\n        const map = {};\n\n        $scope.logs.forEach(item => {\n          map[item._id] = item;\n        });\n\n        response.forEach(item => {\n          if (map[item._id]){\n            return;\n          }\n          $scope.logs.push(item);\n        });\n      }\n\n\n      $scope.moreAvailable = false;\n      function query(queryString, newSearch = false){\n        const data = {\n          filters : [{\n            type: 'term',\n            field: 'indexId.keyword',\n            value: $scope.index.id,\n          }],\n          query: queryString\n        }\n\n        const request = $http.post(`/api/tenants/${$scope.tenant}/logs?size=${$scope.size}&from=${$scope.from}`,\n          data\n        )\n        $scope.isSearching = true;\n\n        request.then(function (res){\n          const data = res.data;\n          $scope.meta.took = data.took;\n          $scope.meta.total = data.hits.total;\n          $scope.isSearching = false;\n          if (newSearch){\n\n            applyLogs(data.hits.hits);\n            // $scope.logs = data.hits.hits\n          } else {\n            $scope.logs = $scope.logs.concat(data.hits.hits);\n          }\n          $scope.total = data.hits.total.value;\n          $scope.moreAvailable = ($scope.total > $scope.logs.length);\n          enableMoreData();\n        }, function error(err){\n          console.error('Unable to fetch logs', err);\n        });\n\n        return request;\n      }\n\n      const options = {\n        root: document,\n        // rootMargin: \"0px\",\n        // threshold: 1.0,\n      };\n\n      function loadMoreData(){\n\n        if (!$scope.moreAvailable) return;\n\n        $scope.from = $scope.from + $scope.size;\n        return query($scope.queryString);\n      }\n\n      const observer = new IntersectionObserver(function (entries, observer){\n        entries.forEach(entr => {\n          if (entr.isIntersecting && $scope.isSearching === false){\n            return loadMoreData();\n          }\n        })\n      }, options);\n\n      let isEnabled = false;\n\n      function enableMoreData(){\n        if (isEnabled) return;\n        isEnabled = true;\n        const elm = getLoadMoreElement();\n        observer.observe(elm);\n      }\n\n\n      function getLoadMoreElement(){\n        return document.querySelector('.load-more')\n      }\n\n      if ($scope.index.$promise){\n        $scope.index.$promise.then(query);\n      }\n\n    }\n  }\n}\n\nlogs.$inject = ['$http'];\n\nexport default logs;\n","import appNavbar from '../../shared/directives/app-navbar.js';\nimport loadingDirective from '../../shared/directives/loading.js';\nimport lozadController from '../../shared/directives/lozad.js';\nimport parseCron from '../../shared/directives/parse-cron.js';\nimport reactiveButtonDirective from '../../shared/directives/reactive-button.js';\nimport confirmDirective from '../../shared/directives/confirm.js';\n\nimport directiveFilterable from '../../shared/directives/filterable.js';\nimport selectUsers from '../../shared/directives/select-users.js';\nimport getUser from '../../shared/directives/get-user.js';\nimport indexName from '../../shared/directives/index-name.js';\nimport filesDirective from '../../shared/directives/files.js';\nimport uploadDirective from '../../shared/directives/upload.js';\nimport indexActions from '../../shared/directives/index-actions.js';\nimport indexProgress from '../../shared/directives/index-progress.js';\nimport albumCoverImage from '../../shared/directives/album-cover-image.js';\nimport backButton from '../../shared/directives/back-button.js';\nimport fileUpload from '../../shared/directives/file-upload.js';\nimport markdown from '../../shared/directives/markdown.js';\nimport indexCount from '../../shared/directives/index-count.js';\nimport imageonload from '../../shared/directives/imageonload.js';\nimport queryDesigner from '../../shared/directives/query-designer.js';\nimport filterCreator from '../../shared/directives/filter-creator.js';\nimport infoDirective from '../../shared/directives/info.js';\nimport printMetadata from '../../shared/directives/print-metadata.js';\nimport diffDirective from '../../shared/directives/diff.js';\nimport logs from '../../shared/directives/logs.js';\nimport copy from '../../shared/directives/copy.js';\nimport textEditor from '../../shared/directives/text-editor.js';\nimport createFilter from '../../shared/directives/create-filter.js';\nimport draggable from '../../shared/directives/draggable.js';\nimport alertDirective from '../../shared/directives/alert.js'\n\n\nconst app = angular.module('admin');\n\n\napp.directive('textEditor', [\n  textEditor\n]);\napp.directive('appNavbar', ['$http', '$rootElement', '$rootScope', 'CacheFactory', '$location', 'Api', appNavbar ] );\napp.directive('whileLoading', ['$compile', loadingDirective ]);\napp.directive('printMetadata', [printMetadata]);\napp.directive('lozad', [lozadController  ]);\napp.directive('reactiveButton', ['$timeout','Notification', 'Confirm', reactiveButtonDirective ]);\napp.directive('confirm', ['Notification', 'Confirm', confirmDirective ]);\n\napp.directive('selectUsers', [ 'es', 'bodybuilder', selectUsers ]);\napp.directive('filterable', [directiveFilterable ]);\napp.directive('getUser', ['Api', 'CacheFactory', getUser ]);\napp.directive('indexName', ['Api', indexName ]);\napp.directive('files', ['$http','Api', filesDirective ]);\napp.directive('upload', ['$parse', uploadDirective ]);\napp.directive('indexActions', ['$http', '$q', indexActions ]);\napp.directive('indexProgress', ['$http', '$interval', indexProgress ]);\napp.directive('albumCoverImage', [ 'es','bodybuilder', 'createImageUri', albumCoverImage  ]);\napp.directive('parseCron', [parseCron  ]);\napp.directive('backButton', [backButton  ]);\napp.directive('markdown', [markdown  ]);\napp.directive('indexCount', [ '$http', '$interval', 'es', indexCount  ]);\napp.directive('imageonload', [imageonload]);\napp.directive('fileUpload', fileUpload );\napp.directive('queryDesigner', queryDesigner);\napp.directive('filterCreator', [ 'Api', 'es', 'bodybuilder', filterCreator  ]);\napp.directive('info', [ infoDirective  ]);\napp.directive('diff', [ diffDirective  ]);\napp.directive('logs', logs);\napp.directive('copy', copy);\napp.directive('createFilter', createFilter);\napp.directive('draggable', draggable)\napp.directive('alert', alertDirective);\n","\nfunction reactiveButtonDirective($timeout, Notification, Confirm){\n  return {\n    restrict : 'E',\n    replace:true,\n    transclude : true,\n    template : function (element, attrs){\n      return `<button ng-click=\"buttonClick()\"  type=\"button\" class=\"btn\" ng-class=\"cssClass\"></button>`;\n    },\n    scope : {\n      callback : '&',\n    },\n    link : function ($scope, element, attrs, controller, transclude){\n      $scope.statusOk = true;\n\n      const successMessage = attrs.success || \"Success !\";\n\n      $scope.cssClass = \"\";\n      const a = [\n        'ok',\n        'error',\n        'waiting',\n        'success'\n      ];\n\n      const defaultCSS = {\n        ok : 'btn-light',\n        error: 'btn-danger',\n        waiting : 'btn-secondary disabled',\n        success : 'btn-success'\n      };\n\n      transclude($scope, function(clone) {\n        element.append(clone);\n      });\n\n      $scope.status = function(state, cssClass){\n        if (cssClass){\n          defaultCSS[state] = cssClass;\n        }\n        $scope.cssClass = defaultCSS[$scope.state];\n        if (state === $scope.state) return true;\n      }\n\n      $scope.confirm = function (){\n\n        const message = (typeof attrs.confirm === 'string') ? attrs.confirm : 'Are you sure?';\n        const promise = Confirm.ask(message);\n        promise.then(function success(data){\n          return callback();\n        }, function reject(err){\n          console.log('REJECTED');\n        });\n      };\n\n      $scope.setState = function (state){\n        $scope.state = state;\n        $scope.cssClass = defaultCSS[state];\n      }\n\n      $scope.setState('ok');\n      if (typeof $scope.callback !== 'function') return console.error('ng-click is not defined or not a funciton');\n\n\n      const callback = function(){\n        if ($scope.state === 'waiting') return console.log('Already running')\n\n        const run = $scope.callback();\n        if (!run){\n          if (attrs.notify) Notification.warning('Was unable to call callback');\n          return console.log('The callback did not return a object');\n        }\n\n        const promise = (run.$promise) ? run.$promise : run;\n\n        if ( ! promise instanceof Promise ){\n          if (attrs.notify) Notification.warning('Was unable to call callback');\n          return console.log('The function did not return Promise', promise);\n        }\n\n        $scope.setState('waiting');\n        promise.then(function success(data){\n\n          if (attrs.notify) Notification.success(successMessage)\n          $scope.setState('success');\n          $timeout(function (){\n            $scope.setState('ok');\n          }, 4000)\n        }, function errorResponse(error){\n\n          if (! error ){\n            $scope.setState('error');\n            $timeout(function () {\n              $scope.setState('ok');\n            }, 4000)\n            return console.error('No data in error?', error);\n            \n          }\n\n          const errorMessage = (error.data && error.data.message) ? error.data.message : \"\";\n\n          if (attrs.notify) Notification.error(`${error.statusText}: ${errorMessage}`)\n          $scope.setState('error');\n          $timeout(function (){\n            $scope.setState('ok');\n          }, 4000)\n        });\n      }\n\n      $scope.buttonClick = (attrs.confirm) ? $scope.confirm : callback;\n\n    }\n  }\n}\n\n\nexport default reactiveButtonDirective;\n","\nfunction confirmDirective(Notification, Confirm){\n  return {\n    restrict : 'E',\n    template: function (a,b){\n      return `\n      <button ng-click=\"_callback()\"><ng-transclude></ng-transclude></button>\n      `;\n    },\n    transclude: true,\n    replace: true,\n    scope : {\n      success : '&success',\n      cancel : '&cancel',\n    },\n    link : function ($scope, element, attrs, controller, transclude){\n      $scope.question = attrs.question || \"Ertu viss?\";\n      $scope._callback = function _callback(){\n        const promise = Confirm.ask($scope.question);\n        promise.then(function success(data){\n          return $scope.success();\n        }, function reject(err){\n          return $scope.cancel();\n        });\n      }\n    }\n  }\n}\n\n\nexport default confirmDirective;\n","export default function userSelect(es, bodybuilder){\n  return {\n    restrict : 'E',\n    template : `\n          <ui-select\n              multiple\n              ng-model=\"users\"\n              reset-search-input=\"true\"\n              theme=\"bootstrap\"\n              spinner-enabled=\"true\"\n              sortable=\"true\"\n              close-on-select=\"false\"\n              spinner-class=\"fa fa-spinner fa-spin\"\n              spinner-enabled=\"true\"\n              on-select=\"addUser({ user : $item })\"\n              on-remove=\"removeUser({ user: $item })\" >\n            <ui-select-match class=\"ui-select-match\" placeholder=\"Select person...\">{{$item.name}} &lt;{{$item.email}}&gt;</ui-select-match>\n            <ui-select-choices  class=\"ui-select-choices\" repeat=\"user in getUsers($select.search) | filter:$select.search\" refresh=\"queryUsers($select.search)\" refresh-delay=\"100\" minimum-input-length=\"1\">\n              <div ng-class=\"foo(user)\" ng-bind-html=\"user.name | highlight: $select.search\"></div>\n              <small>\n                email: {{user.email}}\n              </small>\n            </ui-select-choices>\n          </ui-select>`,\n    replace : false,\n    scope : {\n      users : '<',\n      addUser : '&',\n      removeUser: '&',\n      self : '='\n    },\n    link : function ($scope, element, attrs, ){\n      $scope.availableUsers = [];\n      $scope.userCache = {};\n\n      $scope.foo = function (i){\n        console.log('foo', i)\n      }\n\n      $scope.$watch('users', function (){\n        console.log('usr', $scope.users)\n      })\n\n      $scope.fixedUser = false;\n\n      $scope.$watch('self', function (){\n        if (!$scope.self) return;\n        if ($scope.fixedUser) return;\n        if ( ! Array.isArray($scope.users)) return;\n        $scope.users = $scope.users.filter(function (user){\n          return (user.id !== $scope.self);\n        });\n        $scope.fixedUser = true;\n      })\n\n\n      function addToUsers(hit){\n\n        const userObject = {\n          id : hit._id,\n          name : hit._source.name,\n          email : hit._source.email\n        };\n\n        const id = hit._id;\n\n        const existGlobal = $scope.availableUsers.filter(function (user){\n          return (user.id === hit._id);\n        });\n\n\n        if (existGlobal.length === 0) {\n          $scope.availableUsers.push(userObject);\n        }\n\n        if ($scope.userCache[id] !== undefined ) return;\n\n        $scope.userCache[id] = userObject;\n      }\n\n      function searchForUsers(query){\n\n        if (query.length < 2) return;\n\n        return new Promise(function (resolve, reject){\n          es.search({\n            index : 'photo-engine-public-users',\n            type : 'user',\n            body : bodybuilder().query('query_string', { query : `${query}*` }).build()\n          }, function (err, res){\n\n            console.log('RES', res)\n            if (err){\n              console.log(err);\n              return reject();\n            }\n            res.hits.hits.forEach(addToUsers);\n            resolve();\n          });\n        });\n\n      }\n\n      $scope.queryUsers = function (query){\n        return searchForUsers(query);\n      }\n\n      $scope.getUsers = function (query){\n        const values = Object.values($scope.userCache);\n        return values;\n      };\n\n\n    }\n  }\n}\n","export default  function getUser(Api, CacheFactory){\n  return {\n    restrict : 'E',\n    replace:true,\n    template : `<span><span ng-show=\"loading\"><i class=\"fa fa-spinner fa-spin\"></i></span><span ng-hide=\"loading\" >{{user.name}}</span></span>`,\n    scope: {\n      userId : '<'\n    },\n    link : function ($scope, element, attrs ){\n\n      const cacheName = \"userInfo\";\n      let cache = CacheFactory.get(cacheName);\n\n      if (!cache) {\n        cache = CacheFactory.createCache(cacheName, {\n          maxAge: (3600 * 1000),\n          recycleFreq: (3600 * 1000)\n        });\n      }\n\n      let loaded = false;\n\n      function load(){\n        console.log('And load it?')\n        if (typeof $scope.userId !== 'string') return;\n        if (loaded) return;\n\n        const user = cache.get($scope.userId);\n\n        // console.log('Get user', $scope.userId, user, cache, cache.__proto__);\n        if (user){\n          // console.log('Cache hit', user);\n          return $scope.user = user;\n        }\n\n        $scope.loading = true;\n        $scope.user = Api.users.get({id : $scope.userId});\n        $scope.user.$promise.then(function (user){\n          $scope.loading = false;\n          loaded = true;\n          cache.put($scope.userId, user);\n        });\n      }\n\n      function callback(ent){\n        if (ent[0].intersectionRatio <= 0) return;\n        load();\n      }\n\n      const observer = new IntersectionObserver(callback);\n      const elm = angular.element(element)[0];\n      observer.observe(elm);\n    }\n  }\n}\n","export default  function indexName(Api){\n  return {\n    restrict : 'E',\n    replace:true,\n    template : `<span><span ng-show=\"loading\"><i class=\"fa fa-spinner fa-spin\"></i></span><span ng-hide=\"loading\" >{{item.name}}</span></span>`,\n    scope: {\n      tenantId : '<',\n      indexId : '<'\n    },\n    link : function ($scope, element, attrs ){\n      let loaded = false;\n\n      if (! $scope.tenantId)return console.error('tenantId is not defined');\n      if (! $scope.indexId) return console.error('indexId is not defined');\n      $scope.$watch('indexId', load);\n      function load(){\n        if (typeof $scope.indexId !== 'string') return;\n        if (loaded) return;\n        $scope.loading = true;\n        $scope.item = Api.tenant.indices.get({id : $scope.indexId, tenantID : $scope.tenantId });\n        $scope.item.$promise.then(function (){\n          $scope.loading = false;\n          loaded = true;\n        }, function error(data){\n          console.error('Error fetching index', data);\n          $scope.loading = false;\n          //loaded = true;\n          $scope.item = { name : \"\" };\n        });\n      }\n    }\n  }\n}\n","\nexport default  function listFiles($http, Api){\n  return {\n    restrict : 'E',\n    replace: true,\n    template : `\n      <div class=\"\">\n      <div class=\"btn-group btn-group-toggle\" data-toggle=\"buttons\">\n        <label class=\"btn btn-sm\" ng-class=\"setClass(state)\" ng-click=\"showFiles(true)\" >\n          <input type=\"radio\" autocomplete=\"off\" active> Sýna skrár\n        </label>\n        <label class=\"btn btn-sm\" ng-class=\"setClass(!state)\" ng-click=\"showFiles(false)\" >\n          <input  type=\"radio\" autocomplete=\"off\"> Fela skrár\n        </label>\n      </div>\n        <div>\n          <span class=\"badge badge-info\">/{{directory.selected}}</span>\n        </div>\n        <table class=\"table table-sm table-striped\">\n          <thead>\n            <th><i class=\"fa fa-list\"></i></th>\n            <th>Name</th>\n            <th>Modified</th>\n          </thead>\n          <tbody>\n            <tr ng-repeat=\"file in files | orderBy:'type' | filter:filter \">\n              <td><i class=\"fa\" ng-class=\"selectIcon(file)\"></i></td>\n              <td><button type=\"button\" ng-disabled=\"isDisabled(file)\" ng-click=\"navigate(file)\" class=\"btn btn-link\">{{file.name}}</button></td>\n              <td>{{file.stats.ctime | date }}</td>\n              <td>\n                <span ng-show=\"isFile(file)\" >\n                  {{file.stats.size | bytes }}\n                </span>\n              </td>\n            </tr>\n          </tbody>\n        </table>\n      </div>\n    `,\n    scope: {\n      tenant : '<',\n      directory : '=',\n    },\n    link : function ($scope, element, attrs ){\n\n      $scope.isFile = function isFile(item){\n        return (item.type==='file');\n      }\n\n      $scope.isInit = false;\n\n      $scope.changed = false;\n\n      $scope.path = \"/\";\n\n      let originalPath;\n\n      $scope.setClass = function (state){\n        if (state) return 'btn-success active';\n        return \"btn-secondary\";\n      }\n\n      $scope.$watch('directory', function (){\n\n        console.log('files:directory updated', $scope.directory)\n        if ($scope.changed) return;\n        if (!$scope.directory || !angular.isString($scope.directory.selected)){\n          $scope.directory.selected = \"\";\n        }\n        $scope.path = $scope.directory.selected;\n\n        originalPath = $scope.directory.selected;\n        init();\n      })\n\n      $scope.navigation = [];\n\n      $scope.files = [];\n\n      $scope.filter = \"directory\";\n      $scope.state = false;\n\n      $scope.showFiles = function showFiles(bool){\n        $scope.state = bool;\n        if (bool){\n          $scope.filter = \"\";\n        }else{\n          $scope.filter = \"directory\";\n        }\n      }\n      $scope.toggleFilter = function toggleFilter(){\n        if ($scope.filter === 'directory'){\n          $scope.filter = \"\";\n        }else{\n          $scope.filter = 'directory';\n        }\n      }\n\n      function setPath(){\n\n        $scope.changed = true;\n\n        const nav = angular.copy($scope.navigation);\n        const current = nav.pop();\n\n        if (typeof current !== 'object'){\n          console.log('Set path, no current', originalPath);\n          $scope.directory.selected = '';\n          return;\n        }\n        $scope.directory.selected = current.rel;\n      }\n\n      $scope.selectIcon = function selectIcon(item){\n        if (item.type === 'file') return 'fa-file';\n        return 'fa-folder-open';\n      }\n\n      $scope.navigate = function navigate(item){\n        const index = $scope.navigation.findIndex(function (i){\n          return (item.name === i.name);\n        });\n\n        if (index === -1){\n          if (item.name === '..' ){\n            $scope.navigation.pop();\n          }else{\n            $scope.navigation.push(item)\n          }\n        }else{\n          $scope.navigation = $scope.navigation.slice(0, index +1)\n        }\n\n        setPath();\n\n        if (item.href) return get(item.href);\n      }\n\n      $scope.isDisabled = function isDisabled(item){\n        if (!item) return false;\n        return (item.href) ? false : true;\n      }\n\n      function get(path){\n        return $http.get(path).then(function (response){\n          $scope.files = response.data;\n        }, function error(err){\n          console.error('Error from server', err.data);\n        });\n      }\n\n      function init(){\n        const path = $scope.path;\n        $scope.uri = `/api/files?stats=true&path=${path}`;\n\n\n        if ($scope.tenant){\n          $scope.uri = `/api/tenants/${$scope.tenant}/files?stats=true&path=${path}`;\n        }\n\n        return get($scope.uri);\n      }\n\n      init();\n\n\n    }\n  }\n}\n","\n\nexport default function uplaodFileDirective($parse){\n  return {\n    link: function fn_link(scope, element, attrs) {\n      const onChange = $parse(attrs.upload);\n      element.on('change', function (event) {\n        onChange(scope, { $files: event.target.files });\n      });\n    }\n  }\n}\n","\nexport default  function indexActions($http, $q){\n  return {\n    templateUrl: 'templates/directives/index-actions.html',\n    scope : {\n      scheduler : '=',\n      index : '<',\n      tenant : '<'\n    },\n    link : function ($scope, element, attrs, controller, transcludeFn){\n      if ( ! $scope.index ) return console.error(`Could not get indexID`);\n      if ( ! $scope.tenant ) return console.error(`Could not get tenant`);\n\n      $scope.runScan = function runScan(scheduler){\n        return requestRunIndex(scheduler, 'action=scan', 'scan');\n      }\n      $scope.dryRun = function dryRun(scheduler){\n        return requestRunIndex(scheduler, 'action=dry', 'compare only');\n      }\n      $scope.forceSync = function forceSync(scheduler){\n        return requestRunIndex(scheduler, 'action=force', 'Force scan');\n      }\n      $scope.cleanIndex = function cleanIndex(scheduler){\n        return $http({\n          url : `/api/tenants/${$scope.tenant}/indices/${$scope.index}/cleanup`,\n          method : 'post'\n        });\n      }\n      $scope.forceReIndex = function forceReIndex(scheduler){\n        return requestRunIndex(scheduler, 'action=force-reindex', 'Force reindex');\n      }\n\n      function requestRunIndex(scheduler, queryParam, type){\n        return $http({\n          url : `/api/tenants/${$scope.tenant}/indices/${$scope.index}/run?${queryParam}`,\n          method : 'post'\n        });\n      }\n    }\n  }\n}\n","export default function parseCron(Api){\n  return {\n    restrict : 'E',\n    replace:true,\n    template : `<span>{{humanString}}</span>`,\n    scope: {\n      cron : '<',\n    },\n    link : function ($scope, element, attrs ){\n      const cronstrue = require('cronstrue');\n\n      $scope.$watch('cron', update);\n      update();\n\n      function update(){\n        if (! $scope.cron) return;\n        $scope.humanString = cronstrue.toString($scope.cron);\n      }\n\n    }\n  }\n}\n","\n\nexport default  function backButton(){\n  return {\n    restrict : 'E',\n    template : '<button type=\"button\" ng-click=\"back();\" class=\"btn btn-outline-secondary\">Baka</button>',\n    link : function ($scope){\n      $scope.back = function (){\n        window.history.back();\n      }\n    }\n  }\n}\n","export default  function imageonload() {\n    return {\n        restrict: 'A',\n        link: function(scope, element, attrs) {\n            element.bind('load', function() {\n                //call the function that was passed\n              scope.$apply(attrs.imageonload);\n            });\n            element.bind('error', function() {\n              scope.$apply(attrs.imageonerror);\n            })\n        }\n    };\n}\n","\n\n\nfunction filterCreator(Api, es, bodybuilder){\n  return {\n    template : `\n    <div class=\"form-row\">\n      <div class=\"form-group col-md-4\">\n        <select\n          id=\"archiveThumbnailFilter\"\n          class=\"form-control\"\n          ng-model=\"tempFilter\"\n          ng-change=\"fetchKeyValues('archive', tempFilter)\"\n          ng-options=\"item as item.name for item in termsAvailable track by item.name\"></select>\n        <small id=\"advSettingsSortKey\" class=\"form-text text-muted\"></small>\n      </div>\n      <div class=\"form-group col-md-2\">\n        <select\n          id=\"archiveThumbnailFilterOrder\"\n          class=\"form-control\"\n          ng-model=\"tempFilter.value\"\n          ng-options=\"item as item.name for item in tempFilter._values track by item.name\">\n        </select>\n      </div>\n      <div class=\"col-auto my-1\">\n        <button ng-click=\"reset();\" type=\"button\" class=\"btn btn-danger btn-sm\">Reset</button>\n      </div>\n    </div>`,\n    scope: {\n      tenant : '<',\n      type : '<',\n      filter : '=',\n    },\n    link : function ($scope, element, attrs){\n\n      console.log('Creating filter!',{ \n        tenant: $scope.tenant, \n        type: $scope.type, \n        filter: $scope.filter,\n      })\n\n      const mappings = Api.tenant.mappings.get({\n        tenantID : $scope.tenant,\n      });\n\n      $scope.reset = function reset(){\n        $scope.filter = {}\n        $scope.tempFilter = {};\n      };\n\n      $scope.tempFilter = {};\n\n      $scope.$watch('tempFilter', function (n, o){\n\n        if (!n || !n.value || !n.value.value) return false;\n\n        const filter = {\n          type : 'term',\n          field : n.name,\n          value : n.value.value\n        };\n        $scope.filter = filter;\n      }, true)\n\n      const termCache = {};\n      mappings.$promise.then(function (mapping){\n        console.log('Mapppings!!', mapping)\n        Object.keys(mapping).forEach(function (type){\n\n          console.log('Got mappings', type);\n          if (type.substring(0, 1) === '$') return;\n          const array = [];\n          Object.keys(mapping[type]).forEach(function (key){\n            const value = mapping[type][key];\n            value.name = key;\n            if (value.keyword){\n              const clone = Object.assign({}, value);\n              clone.name = `${clone.name}.keyword`;\n              array.push(clone)\n            } else {\n              array.push(value);\n            }\n          });\n          termCache[type] = array;\n        });\n        $scope.termsAvailable = termCache[attrs.type];\n\n        let current;\n        \n        if (angular.isArray($scope.termsAvailable)) {\n          current = $scope.termsAvailable.filter(function (item){\n            if (typeof $scope.filter !== 'object') return false;\n            return (item.name === $scope.filter.field);\n          }).pop();\n        }\n        \n        $scope.tempFilter = current;\n        console.log('------------ here ? ', $scope.termsAvailable)\n\n        $scope.fetchKeyValues(attrs.type, current, function (err, res){\n          if (err) return;\n          current.value = current._values.filter(function(item){\n            return (item.value === $scope.filter.value);\n          }).pop();\n        })\n      });\n\n      $scope.availableValues = {}\n\n      $scope.fetchKeyValues = function fetchKeyValues(type, field, callback){\n\n        callback = callback || function (){}\n\n        if (!field) return;\n\n        if (!field._indices ) return;\n\n        const indices = Object.keys(field._indices);\n\n        const query = bodybuilder().agg('terms', field.name, 'values', {\n          size : 1000,\n        });\n        const searchRequest = es.search({\n          index: indices.join(','),\n          type: '_doc',\n          size : 0,\n          body: query.build(),\n        })\n        searchRequest.then(function success(res){\n          const array  = res.aggregations.values.buckets.map(function (e){\n            return {\n              name : e.key,\n              value : e.key\n            }\n          });\n          $scope.$applyAsync(function (){\n            field._values = array;\n\n            callback(null, array);\n          });\n        }, function error(err){\n          callback(err);\n          console.error('Error', err)\n        });\n\n        return searchRequest;\n      };\n    }\n  }\n}\n\nexport default  filterCreator;\n","\n\nfunction arrayMove(array, fromIndex, toIndex){\n  array.splice(toIndex, 0, array.splice(fromIndex, 1)[0]);\n}\n\n\nfunction draggableDirective(){\n  let dragSource = null;\n  let dragTarget = null;\n\n\n  return {\n    restrict: 'A',\n    scope: {\n      draggable: '<',\n    },\n    link: function ($scope, elm, attrs){\n      const target = elm[0];\n      const sourceArray = $scope.draggable.array;\n      \n      target.setAttribute('draggable', 'true');\n\n      Array.prototype.slice.call(target.getElementsByTagName('img')).forEach(img => {\n        img.setAttribute('draggable', 'false')\n      })\n\n      target.addEventListener('dragstart', (event) => {\n        dragSource = {\n          item: $scope.draggable,\n          element: elm\n        };\n        $scope.$emit('draggable:dragstart', $scope.draggable);\n        target.classList.add('draggable-start')\n      })\n      target.addEventListener('dragend', (event) => {\n        target.classList.remove('bg-light')\n        event.preventDefault();\n      })\n      target.addEventListener('dragleave', (event) => {\n        target.classList.remove('bg-light')\n      })\n      target.addEventListener('dragover', (event) => {\n        target.classList.add('bg-light')\n        event.preventDefault();\n      })\n      target.addEventListener('drop', (event) => {\n        target.classList.remove('bg-light')\n        target.classList.remove('draggable-start')\n\n        dragTarget = {\n          item: $scope.draggable,\n          element: elm\n        };\n\n        const fromIndex = dragSource.item.index;\n        const toIndex = dragTarget.item.index;\n\n        arrayMove(sourceArray, fromIndex, toIndex);\n        event.preventDefault();\n        $scope.$emit('draggable:end', $scope.draggable);\n        $scope.$applyAsync();\n      })\n    }\n  }\n}\n\nexport default draggableDirective;","\n\n\n\n\nfunction jobLogsController($scope, Api, $routeParams, $http, $location){\n  const userCache = {};\n\n\n  $scope.filters = [];\n  // this can be aggrigate..\n  $scope.queues = [\n    {\n      checked : false,\n      name : 'scan'\n    },\n    {\n      checked : false,\n      name : 'repeat'\n    },\n    {\n      checked : false,\n      name : 'worker'\n    },\n  ];\n\n  $scope.removeFilter = function removeFilter(filter){\n    console.log('remove', filter)\n\n    // $location.search('')\n\n  }\n\n  $scope.search = function (){\n    query();\n  }\n\n  $scope.toggleCheck = function (q){\n    if (q.checked){\n      $scope.filters.push({\n        type : 'term',\n        field : 'queueName.keyword',\n        value : q.name,\n      });\n    }else{\n      $scope.filters = $scope.filters.filter(function (filter){\n        return (filter.value !== q.name);\n      });\n    }\n    query();\n  }\n\n  function parseID(id){\n\n    if (!id) return \"N/A\";\n    const regex = new RegExp(/([a-z0-9]{32})/);\n\n    const match = id.match(regex);\n    if (match && match.length > 1){\n      return match[1];\n    };\n\n    return id;\n\n  }\n\n  $scope.jobs = [];\n\n\n  function parseHits(hits){\n    return hits.map(function (hit){\n      hit._source._id  = hit._id;\n      return hit._source;\n    });\n  }\n\n  function getFiltesAndQuery(){\n    if ($routeParams.jobId){\n      $scope.filters.push({\n        type : 'term',\n        field : 'fileId.keyword',\n        value : $routeParams.jobId\n      });\n    }\n\n    return {\n      filters : $scope.filters,\n      query : $scope.queryString\n    }\n  }\n\n  $scope.meta = {\n    took : 0,\n    total: 0,\n  };\n  $scope.isSearching = false;\n  function query(){\n    const request = $http.post(`/api/tenants/${$routeParams.tenantID}/logs`,\n      getFiltesAndQuery()\n    )\n    $scope.isSearching = true;\n    request.then(function (res){\n      $scope.meta.took = res.data.took;\n      $scope.meta.total = res.data.hits.total?.value;\n      $scope.isSearching = false;\n      const data = res.data;\n      $scope.logs = parseHits(res.data.hits.hits);\n    });\n\n  }\n  query();\n\n\n  $scope.isUpdatingLogs = false;\n\n  function fetchNewLogs(){\n\n    if ($scope.isUpdatingLogs) return;\n\n    const logs = angular.copy($scope.logs);\n\n    if (logs && logs.length < 2) return;\n\n    const first = logs.pop();\n\n    const last = logs.shift();\n\n\n    const time = {\n      first : new Date(first.time).getTime(),\n      last : new Date(last.time).getTime()\n    };\n\n    const latestTime = (time.first >= time.last) ? time.first : time.last;\n\n\n    // add one ms.. so it wont return the new one..\n    const isoTime = new Date(latestTime + 1).toISOString();\n\n    $scope.isUpdatingLogs = true;\n\n    const request = $http.post(`/api/tenants/${$routeParams.tenantID}/logs?since=${encodeURIComponent(isoTime)}`,\n      getFiltesAndQuery()\n    )\n\n    request.then(function (res){\n      const hits = parseHits(res.data.hits.hits);\n\n\n      hits.forEach(function (rec){\n        $scope.logs.unshift(rec);\n      });\n\n\n      $scope.isUpdatingLogs = false;\n    }, function error(err){\n\n      $scope.isUpdatingLogs = false;\n    })\n  }\n\n  //$scope.int = $interval(fetchNewLogs, 30000);\n\n\n  $scope.selectCSSClass = function (level){\n    switch (level) {\n      case 'info':\n        return 'table-info';\n      case 'warn':\n        return 'table-warning';\n        break;\n      case 'error':\n        return 'table-danger';\n      case 'debug':\n        return 'table-primary';\n        break;\n      default:\n      return '';\n    }\n  };\n\n  $scope.getDirectory = function getDirectory(path) {\n    if ( ! path) return \"N/A\";\n\n    const parts = path.split('/');\n\n    return parts[parts.length -2 ];\n  }\n\n  $scope.displayId = function (id){\n    const _id = parseID(id);\n\n    if (_id.length < 10) return id;\n    return _id.substring(_id.length - 5, _id.length);\n    return [\n      _id.substring(0, 5),\n      _id.substring(_id.length - 5, _id.length)\n    ].join('...');\n  }\n\n  $scope.getUserName = function (userId){\n    if (!userId) return \"N/A\";\n\n    if (userCache[userId]){\n      return userCache[userId];\n    }\n    const user=Api.users.get({id : userId})\n\n    userCache[userId] = user;\n\n    return user;\n  }\n};\njobLogsController.$inject = ['$scope', 'Api', '$routeParams', '$http', '$location']\n\nexport default jobLogsController","\nconst $ = require('jquery');\nrequire('bootstrap/dist/js/bootstrap.min.js')\n\n\nexport default function adminIndicesCtrl($scope, Api, $timeout, Notification, $routeParams, es, bodybuilder, $http, Files){\n\n  console.log('------------------')\n  const modal = $('#createIndexModal');\n  $scope.me = Api.me.get();\n  $scope.tenants = [];\n  $scope.disableUserAdd = true;\n  $scope.indexId = $routeParams.id;\n  $scope.indices = [];\n\n  $scope.orderByKey = 'updated';\n  $scope.orderAsc = true;\n\n\n  $scope.toggleSort = function toggleSort(key){\n    if (key === $scope.orderByKey){\n      $scope.orderAsc = !$scope.orderAsc;\n      return;\n    }\n\n    $scope.orderByKey = key;\n    $scope.orderAsc = true;\n  }\n\n\n  $scope.getSortClass = function getSortClass(key){\n    if (key === $scope.orderByKey){\n      return ($scope.orderAsc) ? 'fa-sort-desc' : 'fa-sort-asc';\n    };\n\n    return 'fa-sort';\n  }\n\n\n\n\n  const tenantID = $routeParams.tenantID;\n\n  $('body').tooltip({\n    selector: '[data-toggle=\"tooltip\"]'\n  });\n\n  $scope.getRootLink = function getRootLink(index){\n    return `/admin/settings/${index.tenantID}/indices/${index.id}/files?path=/`;\n  }\n\n  $scope.getFolders = function getFolders(index){\n\n    const dir = index.directory;\n\n    if (index._dir) return index._dir;\n\n    if (typeof dir !== 'string') return;\n    // console.log('No dir set or not string', index, dir);\n\n    const parts = dir.split('/');\n\n    index._dir = parts.map(function (d, i){\n      const other = parts.slice(0, i);\n      other.push(d);\n      const dirPath = other.join('/');\n      const link = `/admin/settings/${index.tenantID}/indices/${index.id}/files?path=${dirPath}`;\n      return {\n        name : d,\n        link : link,\n      };\n    });\n\n    //console.log({index, parts})\n    return index._dir;\n  }\n\n  $scope.uploadUri = `/api/tenants/${$routeParams.tenantID}/indices/${$routeParams.id}/upload/.delta-sync`;\n\n  $scope.indexTypes = [\n    {\n      name : 'Photo album',\n      id : 'album'\n    },\n    {\n      name : 'Archive',\n      id : 'archive'\n    },\n    {\n      name : 'Filemaker',\n      id : 'filemaker'\n    },\n    {\n      name: 'Hljóðskrár',\n      id: 'audio'\n    }\n  ];\n\n  $scope.isImageProfile = function isImageProfile(index){\n    \n    const type = index.type;\n\n    if (type === 'filemaker') return false;\n    if (type === 'audio') return false;\n    return true;\n  }\n\n  $scope.removeFolderSelected = function (index){\n    if ($scope.index.directory) {\n      delete $scope.index.directory;\n    }\n  }\n\n  $scope.openFileSelector = function openFileSelector(tenant, index){\n    const dir = index.directory || \"\";\n    console.log('openFileSelector', {\n      tenant: tenant,\n      index:index,\n      dir: dir,\n    })\n\n    Files.open(tenant, dir).then(function success(output){\n      console.log('Successfully selected ', output)\n      index.directory = output;\n    }, function error(message){\n      if (message) return Notification.error(message);\n\n      Notification.error('Ekki náðist að velja möppu');\n    })\n  }\n\n  $scope.availableKeys = [];\n  function getMappings(){\n    es.indices.getMapping({\n      // /api/search/:index/:type/:action\n      index : $routeParams.id,\n    }).then(function (data){\n\n      if (! data[$routeParams.id]) return;\n      if (! data[$routeParams.id].mappings) return;\n      if (! data[$routeParams.id].mappings._doc) return;\n      if (! data[$routeParams.id].mappings._doc.properties) return;\n\n      const obj = data[$routeParams.id].mappings._doc.properties;\n      $scope.availableKeys = Object.keys(obj).filter(function (key){\n        const value = obj[key];\n        return (value.type === 'text');\n      })\n    })\n\n  }\n\n  $scope.getType = function getType(type){\n    const typeObject = $scope.indexTypes.filter(function (obj){\n      return (type === obj.id);\n    }).pop();\n\n    if (!typeObject) return;\n\n    return typeObject.name;\n  }\n\n  $scope.getUploadUri = function getUploadUri(index){\n    return `/api/tenants/${index.tenantID}/indices/${index.id}/upload/.delta-sync`;\n  }\n\n  $scope.profiles = Api.tenant.profiles.query({\n    tenantID : $routeParams.tenantID\n  });\n\n  if ($routeParams.id){\n    $scope.index = Api.tenant.indices.get({ id : $routeParams.id, tenantID: $routeParams.tenantID });\n    getMappings();\n  }else{\n    $scope.index = {\n      type : $scope.indexTypes[0].id\n    };\n  }\n\n  const randomstring = require('randomstring');\n\n\n  $scope.someRandomName = function someRandomName(){\n    return randomstring.generate(20);\n  }\n\n  async function checkFiles(files){\n    const fileArray = [];\n\n    for (let file of files){\n      fileArray.push({\n        name: file.name,\n        lastModified: file.lastModified,\n        size: file.size,\n      });\n    }\n\n    const url = $scope.uploadUri + '/check';\n\n    return $http({\n      url,\n      method: 'post',\n      data: {\n        files: fileArray,\n      },\n    }).then(res => {\n      return res.data.fileCheck;\n    })\n  }\n\n  $scope.validateImage = async function validateImage(files, callback){\n\n    console.log('Validating images', files);\n\n\n    try {\n      const state = await checkFiles(files);\n\n      const stateHash = {};\n      state.forEach(status => {\n        \n        stateHash[status.file.name] = status;\n      });\n\n      for (let file of files) {\n        const name = file.name;\n        const fileState = stateHash[name];\n        file._state = fileState;\n      }\n\n\n      return callback(null, null, files);\n    } catch (error) {\n      return callback(error, 'Unable to check status of files');\n    }\n  }\n\n  $scope.setValues = function (item, i){\n    es.search({\n      index : $routeParams.id,\n      type : '_doc',\n      size : 0,\n      body : bodybuilder().agg('terms',`${item.key}.keyword`, { size : 100 }).build()\n    }).then(function success(res){\n\n      const key = getKey(res.aggregations);\n      const bucket = res.aggregations[key].buckets;\n      if (Array.isArray(bucket)){\n        item.values = bucket.map( i => i.key );\n      }\n    })\n  };\n\n  function getKey(object){\n    return Object.keys(object).pop();\n  }\n  $scope.tenant = $routeParams.tenantID;\n  $scope.me.$promise.then(function (me){\n\n    return $scope.indices = Api.tenant.indices.query({tenantID:tenantID});\n    if (me.admin){\n      console.log('Adming stuff ok ')\n\n      return;\n    }\n\n    if ( ! Array.isArray(me.tenants)) return;\n\n    const indicesArray = [];\n\n    me.tenants.forEach(function (tenantID){\n      indicesArray.push( Api.tenant.indices.query({tenantID:tenantID}));\n      $scope.tenants.push(Api.tenants.get({id: tenantID}))\n    })\n    indicesArray.forEach(function (resource){\n      resource.$promise.then(function (data){\n        data.forEach(function (index){\n          $scope.indices.push(index);\n        })\n      })\n    })\n  });\n\n  $scope.userCache = {};\n\n  $scope.getEditBy = function(index){\n    if ($scope.userCache[index.edit_by]) return $scope.userCache[index.edit_by];\n\n    const user = Api.users.get({id : index.edit_by});\n\n    if (!index.edit_by) return user;\n\n    $scope.userCache[index.edit_by] = user;\n\n    return user;\n  }\n\n\n  $scope.remove = function remove(index){\n    const promise = index.$remove({\n      tenantID : tenantID\n    });\n    promise.then(function (){\n\n      const i = $scope.indices.findIndex(function (item){\n        return (item.id === index.id);\n      });\n      console.log(\n        i,\n        $scope.indices\n      )\n      $scope.indices.splice(i, 1);\n\n    });\n    return promise;\n  };\n\n  $scope.showFileBrowser = function showFileBrowser(index){\n    if (index.directory && index.directory.length > 1) return true;\n    return false;\n  }\n\n  $scope.showActions = $scope.showFileBrowser;\n\n\n  $scope.validate= false;\n\n\n  $scope.animate = false;\n\n  $scope.update = function update(){\n    const save = $scope.index.$save();\n    save.then(function success(success){\n      $scope.index = Api.tenant.indices.get({ id : $routeParams.id, tenantID: $routeParams.tenantID });\n      Notification.success('Saved!');\n    }, function error(error){\n      const message = (error.data && error.data.message) ? error.data.message : error.statusText;\n      Notification.error(message);\n    });\n  };\n\n  $scope.create = function create(){\n    $scope.validate= true;\n    $scope.animate = true;\n\n    $timeout(function (){\n      $scope.animate = false;\n    }, 1000);\n\n    if ($scope.createIndex.$invalid) return console.log('Invalid form');\n\n    if (! Array.isArray($scope.index.filters)){\n      $scope.index.filters = [];\n    }\n    $scope.index.filters.forEach(function (filter){\n      delete filter.values;\n    });\n\n    $scope.index.tenantID = $routeParams.tenantID;\n\n    const index = new Api.tenant.indices($scope.index);\n\n    index.$create().then(function success(data){\n      modal.modal('hide');\n      $scope.indices = Api.tenant.indices.query({tenantID:tenantID});\n\n      Notification.success('Success!');\n    }, function error(error){\n      const message = (error.data && error.data.message) ? error.data.message : error.statusText;\n      Notification.error(message);\n    });\n\n  }\n\n}\n","const $ = require('jquery');\nconst { Dropzone } = require(\"dropzone\");\nconst Search = require('../tools/search.js').default;\n\nfunction imageSelector($scope, ImageSelector, $q, createImageUri, $http){\n\n  const modal = $('#imageSelector');\n\n  $scope.enableAlbum = true;\n  $scope.enableArchive = true;\n\n  $scope.indexTypes = {\n    album : true,\n    archive: true,\n  }\n\n\n  $scope.toggleIndex = function toggleIndex(type){\n    $scope.indexTypes[type] = !$scope.indexTypes[type];\n\n\n    $scope.submit();\n  }\n\n  console.log({autoLoader});\n\n\n  $scope.uploadValidate = function (files, callback){\n    console.log(\"I'm uload valiating... \", files);\n    const allow = ['image/png', 'image/jpg', 'image/jpeg'];\n\n     [...files].forEach(file => {\n      const isValid = allow.includes(file.type);\n       if (!isValid){\n         return callback(true, `File ${file.type} is not allowed`);\n       }\n    });\n\n    return callback(null, true);\n  }\n\n\n  $scope.uploadSuccess = function uploadSuccess(response) {\n    console.log('uploadSuccess', response);\n  }\n\n  $scope.uploadError = function uploadError(error) {\n    console.log('uploadError', error);\n  }\n\n  $scope.searchClean = false;\n\n  $scope.moreAvailable = false;\n\n  $scope.isLoadingMore = false;\n\n  const observer = new IntersectionObserver(function (entry){\n    if ($scope.moreAvailable && $scope.currentSearch){\n      console.log('Loadding more data', $scope.currentSearch)\n      loadMoreData();\n      $scope.$applyAsync();\n    }\n  }, {\n    root: document.getElementById('imageSelector')\n  });\n\n\n  function loadMoreData(){\n    const q = $scope.currentSearch.next();\n    $scope.moreAvailable = false;\n    $scope.isLoadingMore = true;\n    q.then(function (response){\n      $scope.isLoadingMore = false;\n      $scope.hits = $scope.hits.concat(response.data.hits.hits);\n      setTimeout(function () {\n        $scope.moreAvailable = isMoreAvailable(response);\n      }, 500);\n      $scope.$applyAsync();\n    });\n\n    q.catch(error => {\n      console.error(`Unable to load more data`, error);\n      $scope.isLoadingMore = false;\n    })\n\n    console.log('loadMoreData',{q})\n  }\n\n  observer.observe(document.getElementById('autoLoader'))\n\n\n  $scope.modalError = false;\n  $scope.modalErrorMessage = \"Óþekkt villa\";\n  $scope.isOpen = false;\n  $scope.queryString = \"\";\n\n  $scope.autoLoadDisabled = true;\n\n  $scope.hits = [];\n\n  $scope.indices = [];\n\n  $scope.size = 60;\n  $scope.from = 0;\n  $scope.selected = [];\n  $scope.searchPromise = false;\n\n  $scope.getSelectedNames = function getSelectedNames(selected){\n    return selected.map(s => {\n\n      const src = s._source || {};\n\n      const name = src.fileObjectBase || src.Title;\n\n      if (! name ){\n        console.warn('fileObjectbase not found', src);\n        return src._id;\n      }\n      return name;\n    }).join(',');\n  };\n\n  $scope.debugselected = function debugselected(selected){\n    return selected.map(s => {\n      const src = s._source || {};\n\n      return {\n        _id: s._id,\n        name: src.fileObjectBase || src.Title,\n        _selected: s._selected,\n      }\n    })\n  }\n\n\n  $scope.lastImageSelected = false;\n\n  $scope.pickMe = function pickMe(hit, $event, array, currentIndex){\n    console.log({ $event, multiple: $scope.isMultiple, hit});\n\n\n    // Check current index.\n    const i = $scope.selected.findIndex(item => {\n      return (hit._id === item._id)\n    });\n\n\n    if ($event.shiftKey && $scope.isMultiple && $scope.lastImageSelected) {\n\n      const startIndex = array.findIndex(item => {\n        return (item._id === $scope.lastImageSelected._id);\n      });\n\n      if (startIndex > -1 ){\n        const slice = array.slice(startIndex, currentIndex +1 );\n\n        return slice.forEach(item => {\n          item._selected = true;\n          $scope.selected.push(item);\n        })\n\n      }\n    }\n\n\n    if ($event.ctrlKey && $scope.isMultiple){\n      // This is multiple\n\n      // Simple check.\n      const exists = (i >= 0);\n      \n      console.log('This item exists?', exists, i);\n\n      if ( exists ){\n        hit._selected = false;\n        $scope.selected.splice(i, 1);\n        return;\n      } else {\n        hit._selected = true;\n        $scope.lastImageSelected = hit;\n        $scope.selected.push(hit);\n        return; \n      }\n    }\n\n    \n    array.forEach(h => {\n      h._selected = false;\n    });\n\n    if (hit._selected){\n      hit._selected = false;\n\n      $scope.selected = [];\n      return;\n    }\n\n    hit._selected = true;\n\n    $scope.lastImageSelected = hit;\n    $scope.selected = [ hit ];\n\n  }\n\n  $scope.imageUrl = function imageUrl(hit){\n    const src = createImageUri(hit);\n    return src['x-small'];\n  }\n\n  function search(queryString){\n\n    console.log('Seaarch', queryString)\n    $scope.hits = [];\n    const index = $scope.indices.filter(index => {\n      return ($scope.indexTypes[index.type]);\n    }).map(index => {\n      return index.index || index.id; \n    });\n\n\n    const search = new Search({\n      index: index.join(','),\n    });\n\n    const q = search.query(\n      queryString\n    );\n    return q;\n  }\n\n  $scope.currentSearch = false;\n  $scope.submittedQuery = \"\";\n\n  $scope.submit = function (){\n    const promise = search($scope.queryString);\n    $scope.submittedQuery = $scope.queryString;\n    $scope.searchPromise = promise;\n    promise.then(response => {\n      $scope.searchClean = true;\n      $scope.autoLoadDisabled = false;\n\n      $scope.currentSearch = response;\n      $scope.hits = response.data.hits.hits.map(hit => {\n\n        const src = hit._source;\n        \n        const name = src.fileObjectBase || src.Title\n        hit.name = name;\n        return hit;\n      })\n\n      setTimeout(function (){\n        $scope.moreAvailable = isMoreAvailable(response);\n      }, 500);\n\n      $scope.$applyAsync();\n    });\n  }\n\n  function isMoreAvailable(response){\n    const currentHits = $scope.hits.length;\n    const total = response.data.hits.total.value;\n    return (total > currentHits);\n  }\n\n\n  function getThumbUri(selected){\n    if (selected.uri) return selected.uri;\n\n    if (selected._source) return createImageUri(selected);\n    \n  }\n\n  $scope.filter = false;\n\n  $scope.tenantId = false;\n\n\n  function sourceType(selected){\n    if (!Array.isArray(selected) ) return;\n\n    const item = selected[0];\n\n    if ( ! item ) return;\n\n    if (item._source) return 'elasticsearch';\n\n    return 'upload';\n  }\n  $scope.assets = [];\n\n  $scope.loadImages = function loadImages(){\n    if ($scope.assets.length > 0) return;\n\n    const url = `/api/tenants/${$scope.tenantId}/assets`;\n\n    const req = $http.get(url);\n\n    req.then(function success(res){\n      console.log('got the imgs', res);\n      \n      const images = res.data.filter(img => {\n        if ($scope.allowAssets) return true;\n  \n        return (img.isImage);\n      })\n      $scope.assets = images.map(hit => {\n\n        hit._id = hit.name;\n\n        return hit;\n      })\n    })\n\n  }\n\n  let theDropzone = false;\n\n  function parseXHR(xhr){\n    const data = JSON.parse(xhr.response);\n\n    if (Array.isArray(data)) return data.pop();\n\n    return data;\n  }\n\n  function initDropzone(url, acceptedFiles, multiple){\n    theDropzone = new Dropzone(\"#dropzone\", {\n      method: 'post',\n      url,\n      acceptedFiles,\n      dictDefaultMessage: 'Smelltu hér eða dragðu skjalið hingað',\n      addRemoveLinks: true,\n    });\n    theDropzone.on(\"addedfile\", file => {\n      console.log(`File added: ${file.name}`);\n    });\n\n    theDropzone.on('complete', (file,a) => {\n      console.log('File uploaded complete', file, a)\n\n      const responseData = parseXHR(file.xhr);\n\n      const fileObject = {\n        _id: file.name,\n        name: file.name,\n        uri: responseData.uri,\n      };\n\n      $scope.$applyAsync(function (){\n        \n        if (!multiple){\n          $scope.selected = [fileObject];\n          return;\n        }\n        $scope.selected.push(fileObject);\n      })\n\n      console.log({fileObject})\n\n    })\n    \n    theDropzone.on('removedfile', (file, a) => {\n      console.log('File removedfile', file, a);\n\n      $scope.$applyAsync(function () {\n        const index = $scope.selected.findIndex(s => {\n          return (s._id === file.name);\n        });\n\n        if (index >= 0){\n          $scope.selected.splice(index, 1);\n        }\n        // $scope.selected.push(fileObject);\n      })\n    })\n  }\n\n\n  $scope.assets = false;\n\n  ImageSelector.open = function (opts){\n\n\n    $scope.isMultiple = opts.multiple;\n    $scope.tenantId = opts.config.tenant;\n\n    $scope.title = `Veldu mynd`;\n\n    const acceptedFiles = (opts.acceptedFiles === undefined) ? 'image/*' : opts.acceptedFiles; \n\n\n    if (opts.title){\n      $scope.title = opts.title;\n    }\n\n    let uploadUri = `/api/tenants/${$scope.tenantId}/assets/image`;\n    $scope.allowAssets = opts.asset;\n\n    if ( opts.asset === true ){\n\n\n      // Append image for image upload process.\n      uploadUri = `/api/tenants/${$scope.tenantId}/assets`;\n    }\n\n\n\n    initDropzone(uploadUri, acceptedFiles, opts.multiple);\n\n    console.log('Image selector open', opts)\n    $scope.isOpen = true;\n    $scope.filter = opts.filter;\n\n    $scope.indices = opts.config.indices.filter(index => {\n      return (['archive', 'album'].includes(index.type));\n    })\n\n\n\n    modal.on('hidden.bs.modal', function(){\n      if (theDropzone && theDropzone.destroy){\n        console.log('Will destroy dropzone');\n\n        theDropzone.destroy();\n      }\n    })\n\n\n    function ensureUri(selected){\n      if (selected._source) {\n        const thumbs = createImageUri(selected);\n        selected.uri = thumbs['x-large'];\n        return selected;\n      };\n\n\n\n      return selected;\n    }\n\n\n    return $q(function (resolve, reject){\n      modal.modal('show');\n\n      $scope.submit();\n\n      $scope.yes = function (){\n        const clone = $scope.selected.slice().map(s => {\n          return ensureUri(s);\n        }); // Prevent edit from this side after save;\n        \n        console.log('Selected image', clone);\n\n\n        const source = sourceType(clone);\n\n        if (! $scope.isMultiple ){\n          const sel = clone.pop();\n          resolve({\n            source,\n            selected: sel,\n            image: getThumbUri(sel),\n          });\n        } else {\n          resolve({\n            source,\n            selected: clone,\n            image: clone.map(hit => {\n              return getThumbUri(hit);\n            }),\n          });\n        }\n        \n        modal.modal('hide');\n      };\n      $scope.no= function (){\n\n        $scope.selected.forEach(hit => {\n          hit._selected = false;\n        });\n\n\n        $scope.selected = [];\n\n        modal.modal('hide');\n        return reject();\n      };\n    })\n    \n  };\n\n}\n\nimageSelector.$inject = [\n  '$scope', \n  'ImageSelector', \n  '$q',\n  'createImageUri',\n  '$http',\n];\n\nexport default imageSelector;\n","\nconst $ = require('jquery');\nexport default function filesController($scope, $http, $routeParams, $location, es, bodybuilder, $q, Notification){\n\n  $scope.isFile = function isFile(item){\n    return (item.type==='file');\n  }\n  $scope.changed = false;\n\n  $scope.setClass = function (state){\n    if (state) return 'active';\n    return \"\";\n  }\n\n  $scope.openCol = false;\n\n  $(document).keyup(function (event){\n\n    if (event.keyCode !== 27) return;\n    if ($scope.openCol) return $scope.openCol.collapse('hide');\n  })\n\n\n  $scope.dirs = [];\n\n  function getDirs(){\n\n    const pathDirs = $scope.path.split('/');\n\n    const last= pathDirs[pathDirs.length -1];\n\n    if (last === \"\") return console.log({\n      last, pathDirs\n    });\n\n    const dirs = pathDirs.map(function (dir, index, all){\n      const next = index + 1;\n      const nextDir = all[next];\n      let linkDirs = false;\n\n      if (nextDir){\n        linkDirs = all.slice(0, next).join('/');\n      }\n\n      const url = new URL($scope.baseHref);\n      url.searchParams.set('path', linkDirs);\n      return {\n        rel : linkDirs,\n        name : dir,\n        href : url.toString(),\n      }\n    });\n    $scope.dirs = dirs;\n  }\n  function getRootLink(){\n    const url = new URL($scope.baseHref);\n    url.searchParams.set('path', '/');\n    return url.toString();\n  }\n\n  $scope.baseHref = false;\n\n  $scope.files = [];\n  $scope.state = false;\n\n  $scope.path = $routeParams.path || \"\";\n\n  $scope.navigation = [{\n    name : '..',\n    rel : '/',\n    type: 'directory'\n  }];\n\n  $scope.selectIcon = function selectIcon(item){\n    if (item.type) return 'fa-file';\n    return 'fa-folder-open';\n  }\n\n  $scope.elasticCache = {};\n\n  $scope.esFetch = false;\n\n  $scope.fetchRecord = function fetchRecord(item){\n    if (!item.hash) return {\n      _source : {}\n    }\n\n    if (typeof item.hash.id !== 'string') return {\n      _source : {}\n    }\n    const id = item.hash.id;\n\n    return $scope.elasticCache[id];\n\n  }\n\n  function getElasticRecords(files){\n    files = files.filter(function hasID(item){\n      if (!item.hash) return false;\n      if (typeof item.hash.id !== 'string') return false;\n      return true;\n    })\n\n    const request = files.map(function (item){\n      return item.hash.id;\n    });\n\n    if (files.length < 1) return;\n    $scope.esFetch = es.mget({\n      index : $routeParams.index,\n      type : '_doc',\n      _sourceInclude : ['indexedAt'],\n      body :{\n        ids : request\n      }\n    });\n\n    $scope.esFetch.then(function response(res){\n      res.docs.forEach(function (doc){\n        $scope.elasticCache[doc._id] = doc;\n      })\n    });\n  }\n\n\n  function setPath(){\n    $location.search('path',  $scope.path);\n  }\n\n  $scope.navigate = function navigate(item){\n    if (!item){\n      $scope.path = \"/\";\n      setPath();\n      return get(getRootLink());\n      return console.error({item}, 'No item set')\n    }\n\n    if (!item.href){\n        return console.error({item}, `Has not href`);\n    }\n    $scope.path = item.rel;\n    setPath();\n    return get(item.href);\n  }\n\n  $scope.isDisabled = function isDisabled(item){\n    if (!item) return false;\n    return (item.href) ? false : true;\n  }\n\n  function get(path){\n\n    if (!$scope.baseHref){\n      const url = new URL(`${window.location.origin}/${path}`);\n      $scope.baseHref = url;\n    }\n\n    return $http.get(path).then(function (response){\n      $scope.files = response.data;\n      getElasticRecords(response.data);\n\n      getDirs();\n    }, function error(err){\n      console.error(`Error fetching files`, err)\n    });\n  }\n\n  function init(){\n    $scope.uri = `/api/tenants/${$routeParams.tenantID}/files?stats=true&path=${$scope.path}`;\n    return get($scope.uri);\n  }\n\n  init();\n\n  $scope.indexFile = function reIndexRecord(hit){\n    const recordId = hit.hash.id;\n    const url = new URL(window.location.origin);\n    url.pathname = `/api/tenants/${$routeParams.tenantID}/indices/${$routeParams.index}/records/${recordId}`\n    url.searchParams.set('rel', hit.rel);\n    return $q(function (resolve, reject){\n      $http({\n        method : 'PATCH',\n        url: url.toString(),\n      }).then(function success(response){\n        if (response.status === 204) return resolve();\n        return reject();\n      }, reject)\n    })\n  }\n\n  $scope.removeFromIndex = function removeFromIndex(hit){\n    const recordId = hit.hash.id;\n\n    const url = new URL(window.location.origin);\n    url.pathname = `/api/tenants/${$routeParams.tenantID}/indices/${$routeParams.index}/records/${recordId}`\n    url.searchParams.set('rel', hit.rel);\n    return $q(function (resolve, reject){\n      $http({\n        method : 'DELETE',\n        url: url.toString(),\n      }).then(function success(response){\n        if (response.status === 204) return resolve();\n        return reject();\n      }, reject)\n\n    })\n  }\n\n  $scope.getLogUrl = function getLogUrl(item){\n    if (item.type !== 'file') return;\n    return `/admin/settings/${$routeParams.tenantID}/logs?jobId=${item.hash.id}`\n  }\n\n  $scope.openCol = false;\n  $scope.showMetadata = function showMetadata(item, i){\n    const target = $(`#according_${i}`);\n    $scope.openCol = target;\n\n\n    if (item.gotMetadata) return target.collapse('toggle');\n\n    item.gotMetadata = false;\n\n    item.fetchingMetadata = true;\n\n    item.error = false;\n    item.metadata = {};\n\n    const query = bodybuilder().query();\n\n    es.get({\n      index : $routeParams.index,\n      type : '_doc',\n      id : item.hash.id,\n    }).then(function response(res){\n      item.fetchingMetadata = false;\n      if (res.found){\n        item.gotMetadata = true;\n        item.metadata = res._source;\n      }\n      target.collapse('toggle');\n\n    }, function error(err){\n      item.fetchingMetadataError = err;\n      item.fetchingMetadata = false;\n      Notification.error(`${err.status}: ${err.data.message}`);\n    })\n  }\n\n\n  $scope.slimJson = function(source){\n\n    const object = {};\n    Object.assign(object, source);\n\n    const remove = [,\n      \"Fwl\",\n      \"Xmp\",\n      \"Iptc4xmpCore\",\n      \"Fwu\",\n      \"Crs\",\n      \"ResolutionUnit\",\n      \"ResolutionUnit_number\",\n      \"YResolution\",\n      \"XResolution\",\n      \"PhotometricInterpretation\",\n      \"PhotometricInterpretation_number\",\n      \"ImageLength_number\",\n      \"ImageWidth_number\",\n      \"Orientation\",\n      \"Orientation_number\",\n      \"NativeDigest\",\n      \"PixelXDimension_number\",\n      \"PixelYDimension_number\",\n      \"ColorMode\",\n      \"ColorMode_number\",\n      \"Urgency\",\n      \"Urgency_number\",\n      \"HasCrop\",\n      \"thumbnails\",\n      \"DateCreated_number\",\n\n    ];\n\n    remove.forEach(function (key){\n      delete object[key];\n    })\n\n    return object;\n\n  };\n\n}\n","\n\nconst async = require('async-es');\nconst $ = require('jquery');\n\nconst SSEClient = require('../../shared/tools/sse-client.js');\n\nfunction getLastMonthDate(){\n  const now = new Date();\n  const thisMonth = now.getMonth();\n  now.setMonth(thisMonth - 1);\n  now.setDate(1);\n  now.setHours(0);\n  now.setMinutes(0);\n  now.setSeconds(0);\n  now.setMilliseconds(0);\n  return now;\n}\n\nfunction getLastWeek(){\n  return (new Date().getTime() - 604800000);\n}\n\nfunction getLast24hours(){\n  return (new Date().getTime() - 86400000);\n}\n\nfunction panelController($scope, $http, userinfo, Api, $rootScope, hasPermission){\n  $scope.info = {};\n  $scope.selectedTenant = $rootScope.selectedTenant;\n  $scope.tenants = [];\n  $scope.profiles = [];\n  $scope.tenantFileSize = 0;\n  $scope.tenantFileCount = 0;\n  $scope.indicesFetched = false;\n  \n  $scope.eventPaneActive = false;\n\n  $scope.jobCount = {\n    total : {\n      count: 0,\n      name:'Heild',\n      from: 0,\n    },\n    day : {\n      count : 0,\n      name:'Síðustu 24klst',\n      from: Math.floor(getLast24hours() / 1000),\n    },\n    week : {\n      count : 0,\n      name:'Síðustu vikuna',\n      from: Math.floor(getLastWeek() / 1000),\n    },\n    month : {\n      count: 0,\n      name: 'Frá 1. þessa mánaðar',\n      from: Math.floor(getLastMonthDate().getTime() / 1000),\n    },\n  };\n\n\n\n  $scope.gitLog = gitLog;\n\n  const defaultTab = '#stats';\n\n  \n  $scope.isTabActive = function isTabActive(name, isNav){\n    \n    const currentTab = location.hash || defaultTab;\n    const classes = ['active'];\n\n\n    $scope.eventPaneActive = (currentTab === '#events');\n\n\n    if (! isNav){\n      classes.push('show');\n    }\n    if (name === currentTab){\n      return classes.join(' ');\n    }\n  }\n\n  $scope.hasNewCommit = function hasNewCommit(){\n\n    if (! $scope.gitLog || ! $scope.gitLog.latest) return false;\n    const current = gitLog.latest;\n    const last = localStorage.getItem('admin/changes/read');\n\n    if (last === current.hash) return false;\n\n    return true;\n  }\n\n  $scope.getNewChangesCount = function getNewChangesCount(){\n    if (! $scope.gitLog || ! $scope.gitLog.latest) return '';\n    const current = gitLog.latest;\n    const last = localStorage.getItem('admin/changes/read');\n\n    if (! last ) return '1';\n\n    if (!Array.isArray(gitLog.all)) return '';\n\n    const index = gitLog.all.findIndex(function (item){\n      return (item.hash === last);\n    });\n\n    if (index < 1) return '';\n    return `${index}`;\n  }\n\n  $scope.markChangesRead = function markChangesRead(){\n    if (! $scope.gitLog || ! $scope.gitLog.latest) return false;\n    const current = gitLog.latest;\n    localStorage.setItem('admin/changes/read', current.hash);\n  }\n\n  $scope.getVersion = function getVersion(i, log, all){\n    if (log.versionstring) return log.versionstring;\n\n\n    const slice = all.slice(i, all.length);\n\n    const reg = new RegExp('tag: ([0-9]\\.[0-9]{1,2}.[0-9]{1,3})');\n    const filtered = slice.filter( l => {\n      return /tag/.test(l.refs);\n    }).map(l => {\n      const match = l.refs.match(reg);\n      if (match){\n        l.version = match[1];\n      } else {\n        l.version = \"0.0.0\";\n      }\n      return l;\n    })\n    const last = filtered[0];\n    if (! last) return \"0.0.0\";\n\n    const index = all.findIndex( l => {\n      return (l.hash === last.hash);\n    });\n\n\n    const diff = index - i;\n    log.versionstring = `${last.version}-${diff}`;\n    return log.versionstring;\n  }\n\n  $scope.myInfo = {};\n\n  $scope.islandIsRegisterToken = \"#\";\n\n  function getIslandIsRegisterToken(me){\n\n    $http.get(`/api/users/${me.id}/registertoken`).then(function success(response){\n      const token = response.data;\n      $scope.islandIsRegisterToken = `/login?register=${token}`;\n      $scope.isFacebookLogin = true;\n\n    }, function error(err){\n      console.error(`Unable to fetch register token`);\n    })\n\n  }\n\n  $http({url: '/api/me'}).then(function success(response){\n\n    \n    const data = response.data;\n\n    $scope.myInfo = data;\n\n    if (data.provider === 'facebook') {\n      getIslandIsRegisterToken(data);\n    }\n\n\n  }, function error(err){\n    console.error(`Unable to fetch me`, err)\n  })\n\n  $scope.hasNotification = true;\n\n  $scope.notifications = [];\n\n\n\n  $scope.hasPermission = function (required){\n\n    if (typeof $scope.me !== 'object') return;\n\n    if (typeof $scope.me.permissions !== 'object') return;\n    if (typeof $scope.me.permissions.tenants !== 'object') return;\n\n\n\n    const tenantId = (typeof $scope.selectedTenant === 'object' ) ? $scope.selectedTenant.id : '';\n    const globalRole = $scope.me.permissions.global;\n    const tenantRole = $scope.me.permissions.tenants[tenantId];\n\n    const hasGlobalAccess = hasPermission(required, globalRole)\n    if (hasGlobalAccess) return true;\n    const hasTenantAccess = hasPermission(required, tenantRole)\n    if (hasTenantAccess) return true;\n\n    return false;\n  }\n\n  const sseClientCache = {};\n\n  $scope.events = [];\n\n\n  $scope.fileName = function fileName(path){\n    if (typeof path !== 'string') return \"\";\n\n    return path.split('/').pop();\n  }\n\n  $rootScope.$on('tenant::selected', function (ev, data){\n    if (!data) return;\n\n\n    Object.values(sseClientCache).forEach(client => {\n      if (client && client.close){\n        return client.close();\n      }\n    })\n\n    $scope.selectedTenant = data;\n    $scope.isFetchingTotalCount = false;\n\n    $scope.indices = Api.tenant.indices.query({ tenantID : data.id })\n\n    const id = data.id;\n\n    const sseClient = new SSEClient(`/api/tenants/${id}/events`);\n\n    $http.get(`/api/tenants/${id}/events/cache`).then(res => {\n      $scope.events = res.data.sort((a,b) => {\n        return (new Date(b.date).getTime() - new Date(a.date).getTime())\n      });\n    })\n\n    sseClientCache[id] = sseClient;\n\n    sseClient.on('queue-updates', function (event){\n      if (!$scope.eventPaneActive) return;\n      $scope.events.unshift(event.json);\n      $scope.$applyAsync();\n    });\n\n    $scope.indices.$promise.then(function (indices){\n      $scope.indicesFetched = true;\n      $scope.fetchTotalRecordCount();\n      $scope.getTotalSize();\n      fetchAllJobCount(indices);\n    });\n\n  })\n\n  $scope.getTotalSize = function getTotalSize(){\n    return $http.get(`/api/tenants/${$scope.selectedTenant.id}/size`).then(function (res){\n      $scope.tenantFileSize = res.data.size;\n      $scope.tenantFileCount = res.data.files;\n    })\n  }\n\n  $scope.eventTimestamp = function eventTimestamp(event){\n    return new Date(event.job.timestamp);\n  }\n\n  async function fetchAllJobCount(indices){\n\n    const types = Object.keys($scope.jobCount);\n    const to = Math.floor(new Date().getTime() / 1000);\n\n    return new Promise(function (resolve, reject){\n      async.forEachSeries(types, function (type, next){\n        const obj = $scope.jobCount[type];\n        const from = obj.from;\n\n        fetchAllIndicesJobCount(indices, from, to).then(\n          function success(count){\n            obj.count = count;\n            return next();\n          }, next)\n\n      }, function done(err){\n        if (err) {\n          console.error('Error fetching all job count', {error : err});\n          return reject(err);\n        }\n        resolve();\n\n        $scope.$applyAsync(function () { })\n\n      })\n    })\n  }\n\n  async function fetchAllIndicesJobCount(indices, from, to){\n\n    return new Promise(function (resolve, reject){\n      let count = 0;\n\n      async.forEachSeries(indices, function (index, next){\n        Api.indexJobCount(\n          $scope.selectedTenant.id,\n          index.id, from, to).then(\n              function (res){\n                if (\n                  typeof res === 'object' &&\n                  typeof res.count === 'number'\n                ){\n                  count = count + res.count;\n                }\n                next();\n              },\n              function (error){\n                console.error('indexJobCount', error)\n                next();\n              }\n            )\n      }, function done(err){\n        if (err){\n          console.error('Unable to fetch all indices job count', {\n            error : err\n          });\n          return reject(err);\n        }\n        return resolve(count);\n      });\n    })\n  }\n  //\n  // function getIndexJobCount(index, from, to){\n  //   return $http.get(`/api/tenants/${$scope.selectedTenant.id}/indices/${index}/counter/logs/count?from=${from}&to=${to}`).then(function (res){\n  //     return res.data;\n  //   });\n  // }\n\n  userinfo().then(function (data){\n    $scope.info = data;\n    console.log({info : data})\n  });\n\n  $scope.getSearchCount = function (stats){\n    if (!stats) return;\n    return (stats._all.total.search.query_total / stats._shards.total).toFixed(0)\n  }\n\n  $scope.isFetchingTotalCount = false;\n\n  $scope.totalRecordCount = \"NA\";\n\n  $scope.indicesMetadata = {};\n\n  $scope.fetchTotalRecordCount = function (){\n\n    if ( ! $scope.indicesFetched) return console.error('cancel.. ');\n\n    if ( $scope.isFetchingTotalCount ) return console.error('cancel.. ');\n    $scope.isFetchingTotalCount = true;\n\n\n    const indicesString = $scope.indices.map( i => i.id).join(',');\n    const url = `/api/tenants/${$scope.selectedTenant.id}/indices/${indicesString}/metadata?stats=true`;\n    $http.get(url).then(function (res){\n      if (!res.data || !res.data._all) return;\n\n      $scope.indicesStats = res.data;\n\n      $scope.indicesFetched = true;\n    }, function httpError(err){\n      console.error(`Unable to fectch`, err)\n    })\n\n  }\n\n  function sumArray(arr){\n    return arr.reduce( (a,b) => a+b);\n  }\n\n};\n\npanelController.$inject = [\n  '$scope',\n  '$http',\n  'userinfo',\n  'Api',\n  '$rootScope',\n  'hasPermission',\n]\n\nexport default panelController;","\nconst axios = require('axios');\n\nfunction imageProfileController($scope, Api, $routeParams, Notification, ImageSelector){\n  const $ = require('jquery');\n  const modal = $('#openModel');\n  const fileSelectorElm = document.getElementById('customFile');\n\n  if (fileSelectorElm){\n\n    fileSelectorElm.addEventListener('change', async (event) => {\n      const url = $scope.getUploadUri();\n      const form = new FormData();\n      for (const file of event.target.files) {\n        console.log({ file });  \n  \n        const uuid = crypto.randomUUID();\n  \n        const name = `wm-${$scope.tenantID}-${$scope.profileID}-${uuid}.png`;\n  \n        form.append('file', file, name);\n  \n        const req = await axios({\n          url,\n          data: form,\n          method: 'post',\n        });\n  \n        console.log('upload', req)\n  \n        const img = req.data.pop();\n        $scope.uploadSuccess(img);\n        \n        console.log(form, name, url)\n      }\n      return false;\n    })\n  }\n\n\n  $scope.profileID = $routeParams.profileID;\n  $scope.tenantID = $routeParams.tenantID;\n  $scope.fetchingImage = true;\n  $scope.imageLoadErrorMessage = false;\n  $scope.newWatermark = false;\n  $scope.currentWatermarkSource = false;\n  $scope.mewWatermarkSource= false;\n  $scope.overRideWatermark = false;\n  $scope.hasWatermark = false;\n  $scope.orginalWatermark = false;\n\n  $scope.imageLoaded = function imageLoaded(){\n    $scope.fetchingImage = false;\n  }\n\n  $scope.imageError = function imageError(error){\n    $scope.fetchingImage = false;\n    $scope.imageLoadErrorMessage = `Ekki náðist að hlaða myndina`;\n  }\n\n  function getCurrentWatermark(){\n    if (!$scope.profile.watermark) return false;\n    if (!$scope.profile.watermark.path) return false;\n\n    if (! $scope.orginalWatermark){\n      $scope.orginalWatermark = $scope.profile.watermark;\n    }\n    return `/static/${$scope.orginalWatermark.path}`;\n  }\n\n\n  $scope.getPreview = function getPreview(profile){\n    if (!profile.watermark) return;\n    const opacity = profile.watermark.opacity || 1;\n    const gravity = profile.watermark.gravity;\n    const maxsize = profile.watermark.maxsize;\n    return `/api/tenants/${$scope.tenantID}/profiles/${profile.id}/render?gravity=${gravity}&opacity=${opacity}&maxsize=${maxsize}`;\n  }\n\n  function getPreviewImage(){\n    if (!$scope.profile.watermark) return;\n    const opacity = $scope.profile.watermark.opacity || 1;\n    const gravity = $scope.profile.watermark.gravity;\n    const maxsize = $scope.profile.watermark.maxsize;\n    Notification.info(`Uppfæri Sýnishorn`);\n    const watermark = $scope.overRideWatermark || \"\";\n    return `/api/tenants/${$scope.tenantID}/profiles/${$scope.profileID}/render?gravity=${gravity}&opacity=${opacity}&maxsize=${maxsize}&watermark=${watermark}`;\n  }\n\n\n  $scope.availableGravity = [\n    {key: 'north', name: 'Miðjan efst'},\n    {key: 'northeast', name: 'Hægrameginn efst'},\n    {key: 'east', name: 'Hægrameginn'},\n    {key: 'southeast', name: 'Hægrameginn neðst'},\n    {key: 'south', name: 'Miðjan neðst'},\n    {key: 'southwest', name: 'Neðst vinstrameginn'},\n    {key: 'west', name: 'Vinstrameginn'},\n    {key: 'northwest', name: 'Efst vinstrameginn'},\n    {key: 'center', name: 'Miðjan'},\n  ];\n\n  $scope.backUri = `/user/${$scope.tenantID}/image-profiles`;\n\n\n  if (! $scope.profileID){\n    $scope.profiles = Api.tenant.profiles.query({ tenantID : $routeParams.tenantID});\n    $scope.profile = {\n      tenantID : $routeParams.tenantID,\n    };\n    $scope.profile.profiles = {\n      'xx-small': {\n          maxsize: 225,\n          quality: 60,\n          type : ['jpeg']\n        },\n      'x-small': {\n          maxsize: 324,\n          quality: 60,\n          type : ['jpeg']\n        },\n      'small': {\n          maxsize: 480,\n          quality: 60,\n          type : ['jpeg']\n        },\n      'medium': {\n          maxsize: 720,\n          quality: 60,\n          type : ['jpeg']\n        },\n      'large': {\n          maxsize: 1080,\n          quality: 70,\n          type : ['jpeg']\n        },\n      'x-large': {\n          maxsize: 1280,\n          quality: 70,\n          type : ['jpeg']\n        },\n      'xx-large': {\n          maxsize: 2400,\n          quality: 100,\n          type : ['jpeg']\n        }\n    };\n  }else{\n    $scope.profile = Api.tenant.profiles.get({ tenantID : $routeParams.tenantID, id: $scope.profileID});\n\n    $scope.profile.$promise.then(function (data) {\n\n      if (data.watermark) {\n        $scope.profile.watermark.maxsize = data.watermark.maxsize || 0.7;\n\n        if (typeof data.watermark.path === 'string') {\n          $scope.hasWatermark = true;\n        }\n      }\n\n      $scope.previewImageSource= getPreviewImage();\n      $scope.currentWatermarkSource  = getCurrentWatermark();\n    })\n  }\n\n  $scope.watermarkToPercentage = function (float){\n    return (float * 100).toFixed(0);\n  }\n\n  $scope.$watchCollection('profile.watermark', function (o, n){\n    if ($scope.fetchingImage) return;\n\n    $scope.fetchingImage = true;\n    $scope.previewImageSource= getPreviewImage();\n  })\n\n  $scope.getUploadUri = function getUploadUri(){\n    return `/api/tenants/${$routeParams.tenantID}/assets`;\n  }\n\n  $scope.uploadSuccess = function uploadSuccess(upload){\n\n    $scope.newWatermarkLocation = `/static/${upload.location}`;\n    $scope.overRideWatermark = upload.name;\n    $scope.previewImageSource= getPreviewImage();\n    $scope.hasWatermark = true;\n    $scope.profile.watermark.name = upload.name;\n    $scope.profile.watermark.path = upload.location;\n\n    $scope.$applyAsync();\n  }\n\n  $scope.remove = function remove(resource){\n    const promise = resource.$remove();\n    promise.then(function (){\n      $scope.profiles = Api.tenant.profiles.query({ tenantID : $routeParams.tenantID});\n    });\n    return promise;\n  }\n\n  function toNumber(int, def){\n    const number = parseInt(int);\n\n    if (isNaN(number)) {\n      return def || 0;\n    }\n\n    return number;\n  }\n\n  $scope.update = function update(){\n\n    if ($scope.profile.watermark && ! $scope.profile.watermark.path){\n      delete $scope.profile.watermark;\n    }\n\n    // Enforce integers..\n    Object.keys($scope.profile.profiles).forEach(function (key){\n      const profile = $scope.profile.profiles[key];\n\n      if (typeof profile.maxsize !== 'number'){\n        profile.maxsize = toNumber(profile.maxsize, 80)\n      }\n      if (typeof profile.quality !== 'number'){\n        profile.quality = toNumber(profile.quality, 80)\n      }\n    });\n    const save = $scope.profile.$save();\n    save.then(function success(success){\n      Notification.success('Saved!');\n    }, function error(error){\n      const message = (error.data && error.data.message) ? error.data.message : error.statusText;\n      Notification.error(message);\n    })\n  };\n\n  $scope.create = function create(){\n    const profile = new Api.tenant.profiles($scope.profile);\n    profile.$create().then(function success(success){\n      modal.modal('hide');\n\n      console.log({success})\n\n      const id = success.id;\n\n      window.location = `/admin/settings/${$scope.tenantID}/image-profiles/${id}`;\n      // Notification.success('Success!');\n      // $scope.profiles = Api.tenant.profiles.query({ tenantID : $routeParams.tenantID});\n    }, function error(error){\n      console.log('error', error)\n      const message = (error.data && error.data.message) ? error.data.message : error.statusText;\n      Notification.error(message);\n    });\n  }\n};\n\nimageProfileController.$inject = [\n  '$scope', 'Api', '$routeParams', 'Notification', 'ImageSelector'\n]\n\nexport default  imageProfileController;","\n\nconst keys = [\n  {\n    name: \"About\",\n    field: \"About\",\n    id: 0\n  },\n  {\n    name: \"ApertureValue\",\n    field: \"ApertureValue\",\n    id: 3\n  },\n  {\n    name: \"ApproximateFocusDistance\",\n    field: \"ApproximateFocusDistance\",\n    id: 4\n  },\n  {\n    name: \"Author\",\n    field: \"Author\",\n    id: 5\n  },\n  {\n    name: \"CameraProfile\",\n    field: \"CameraProfile\",\n    id: 9\n  },\n  {\n    name: \"Caption\",\n    field: \"Caption\",\n    id: 10\n  },\n  {\n    name: \"CaptionWriter\",\n    field: \"CaptionWriter\",\n    id: 11\n  },\n  {\n    name: \"Categories\",\n    field: \"Categories\",\n    id: 12\n  },\n  {\n    name: \"Category\",\n    field: \"Category\",\n    id: 13\n  },\n  {\n    name: \"Borg/Bær\",\n    field: \"City\",\n    id: 14\n  },\n  {\n    name: \"Comment\",\n    field: \"Comment\",\n    id: 15\n  },\n  {\n    name: \"ContentValue\",\n    field: \"ContentValue\",\n    id: 16\n  },\n  {\n    name: \"ConvertToGrayscale\",\n    field: \"ConvertToGrayscale\",\n    id: 17\n  },\n  {\n    name: \"CopyrightNotice\",\n    field: \"CopyrightNotice\",\n    id: 18\n  },\n  {\n    name: \"Country\",\n    field: \"Country\",\n    id: 19\n  },\n  {\n    name: \"CountryCode\",\n    field: \"CountryCode\",\n    id: 20\n  },\n  {\n    name: \"CreateDate\",\n    field: \"CreateDate\",\n    isString: false,\n    id: 21\n  },\n  {\n    name: \"CreatorTool\",\n    field: \"CreatorTool\",\n    id: 22\n  },\n  {\n    name: \"Credit\",\n    field: \"Credit\",\n    id: 23\n  },\n  {\n    name: \"Datetime\",\n    field: \"Datetime\",\n    id: 24\n  },\n  {\n    name: \"Dehaze\",\n    field: \"Dehaze\",\n    id: 25\n  },\n  {\n    name: \"DerivedFrom\",\n    field: \"DerivedFrom\",\n    id: 26\n  },\n  {\n    name: \"Description\",\n    field: \"Description\",\n    id: 27\n  },\n  {\n    name: \"DocumentID\",\n    field: \"DocumentID\",\n    id: 28\n  },\n  {\n    name: \"Exif\",\n    field: \"Exif\",\n    id: 29\n  },\n  {\n    name: \"ExifImageHeight\",\n    field: \"ExifImageHeight\",\n    id: 30\n  },\n  {\n    name: \"ExifImageWidth\",\n    field: \"ExifImageWidth\",\n    id: 31\n  },\n  {\n    name: \"ExifVersion\",\n    field: \"ExifVersion\",\n    id: 32\n  },\n  {\n    name: \"Exposure2012\",\n    field: \"Exposure2012\",\n    id: 33\n  },\n  {\n    name: \"ExposureBiasValue\",\n    field: \"ExposureBiasValue\",\n    id: 34\n  },\n  {\n    name: \"ExposureMode\",\n    field: \"ExposureMode\",\n    id: 35\n  },\n  {\n    name: \"ExposureProgram\",\n    field: \"ExposureProgram\",\n    id: 36\n  },\n  {\n    name: \"ExposureTime\",\n    field: \"ExposureTime\",\n    id: 37\n  },\n  {\n    name: \"FileAccessDate\",\n    field: \"FileAccessDate\",\n    isString: false,\n    id: 39\n  },\n  {\n    name: \"FileInodeChangeDate\",\n    field: \"FileInodeChangeDate\",\n    isString: false,\n    id: 40\n  },\n  {\n    name: \"FileModifyDate\",\n    field: \"FileModifyDate\",\n    isString: false,\n    id: 41\n  },\n  {\n    name: \"Flash\",\n    field: \"Flash\",\n    id: 43\n  },\n  {\n    name: \"FocalLength\",\n    field: \"FocalLength\",\n    id: 44\n  },\n  {\n    name: \"Format\",\n    field: \"Format\",\n    id: 45\n  },\n  {\n    name: \"Headline\",\n    field: \"Headline\",\n    id: 46\n  },\n  {\n    name: \"InstanceID\",\n    field: \"InstanceID\",\n    id: 49\n  },\n  {\n    name: \"Instructions\",\n    field: \"Instructions\",\n    id: 50\n  },\n  {\n    name: \"Keywords\",\n    field: \"Keywords\",\n    id: 52\n  },\n  {\n    name: \"Linsa\",\n    field: \"Lens\",\n    id: 53\n  },\n  {\n    name: \"Linsu upplýsingar\",\n    field: \"LensInfo\",\n    id: 54\n  },\n  {\n    name: \"LocalCaption\",\n    field: \"LocalCaption\",\n    id: 55\n  },\n  {\n    name: \"Make\",\n    field: \"Make\",\n    id: 56\n  },\n  {\n    name: \"Marked\",\n    field: \"Marked\",\n    id: 57\n  },\n  {\n    name: \"MetadataDate\",\n    field: \"MetadataDate\",\n    isString: false,\n    id: 59\n  },\n  {\n    name: \"Model\",\n    field: \"Model\",\n    id: 60\n  },\n  {\n    name: \"ModifyDate\",\n    field: \"ModifyDate\",\n    isString: false,\n    id: 61\n  },\n  {\n    name: \"Notes\",\n    field: \"Notes\",\n    id: 62\n  },\n  {\n    name: \"ObjectName\",\n    field: \"ObjectName\",\n    id: 63\n  },\n  {\n    name: \"ReferenceNumber\",\n    field: \"ReferenceNumber\",\n    isString: false,\n    id: 64\n  },\n  {\n    name: \"ReleaseDate\",\n    field: \"ReleaseDate\",\n    isString: false,\n    id: 65\n  },\n  {\n    name: \"Rights\",\n    field: \"Rights\",\n    id: 66\n  },\n  {\n    name: \"Saturation\",\n    field: \"Saturation\",\n    id: 67\n  },\n  {\n    name: \"Source\",\n    field: \"Source\",\n    id: 68\n  },\n  {\n    name: \"SpecialInstructions\",\n    field: \"SpecialInstructions\",\n    id: 69\n  },\n  {\n    name: \"Sýsla\",\n    field: \"State\",\n    id: 72\n  },\n  {\n    name: \"Subject\",\n    field: \"Subject\",\n    id: 73\n  },\n  {\n    name: \"SupplementalCategories\",\n    field: \"SupplementalCategories\",\n    id: 74\n  },\n  {\n    name: \"Titill\",\n    field: \"Title\",\n    id: 75\n  },\n  {\n    name: \"UserDefined1\",\n    field: \"UserDefined1\",\n    id: 76\n  },\n  {\n    name: \"UserDefined102\",\n    field: \"UserDefined102\",\n    id: 77\n  },\n  {\n    name: \"UserDefined104\",\n    field: \"UserDefined104\",\n    id: 78\n  },\n  {\n    name: \"UserDefined12\",\n    field: \"UserDefined12\",\n    id: 79\n  },\n  {\n    name: \"UserDefined14\",\n    field: \"UserDefined14\",\n    id: 80\n  },\n  {\n    name: \"UserDefined2\",\n    field: \"UserDefined2\",\n    id: 81\n  },\n  {\n    name: \"UserDefined3\",\n    field: \"UserDefined3\",\n    id: 82\n  },\n  {\n    name: \"UserDefined4\",\n    field: \"UserDefined4\",\n    id: 83\n  },\n  {\n    name: \"Uppfærð\",\n    field: \"indexedAt\",\n    isString : false,\n    id: 84\n  },\n  {\n    name: \"Skráarnafni\",\n    field: \"fileObjectName\",\n    isString : false,\n    id: 85\n  },\n  {\n    name: \"Númer myndar\",\n    field: \"_sortedFileObject\",\n    isString : false,\n    id: 86\n  }\n];\n\n\nconst map = {};\nkeys.forEach(item => {\n  map[item.field] = item;\n});\n\n\n\nexport default {\n  keys,\n  map,\n}","\nimport mapping from '../../shared/tools/mapping.js';\nimport aggKeys from '../../../helpers/agg-keys.js';\nimport async from 'async-es';\n\nfunction siteConfigController($scope, Api, $routeParams, Notification, es, ImageSelector){\n\n  $scope.tenantID = $routeParams.tenantID;\n  $scope.uploadUri= `/api/tenants/${$scope.tenantID}/assets/image?maxsize=1920&type=jpg&quality=75`;\n  $scope.selectedImage = {};\n  $scope.config = Api.config.get({\n    tenantID : $routeParams.tenantID\n  });\n  $scope.availableSortFns = [{\n    id : 0,\n    name: 'HERAK Sértækt N-YYYY',\n    key: 'custom_herak_1',\n    match: '/[0-9]{1}\\-[0-9]{4}/',\n  },\n  {\n    id : 1,\n    name: 'HERAK Sértækt N-YYYY 2',\n    key: 'custom_herak_1',\n    match: '/[0-9]{1}\\-[0-9]{4}/',\n  }];\n\n\n  $scope.availableArhiveSorts = [\n    { name: 'Númer myndar aftast /_sortedFileObject ', value: '_sortedFileObject', },\n    { name: 'Númer myndar fremst /_sortedFileObjectReverse ', value: '_sortedFileObjectReverse', },\n    { name: 'Nafn myndar / fileObjectName', value: 'fileObjectName', },\n  ];\n\n  const defaultLevels = [\n    {\n      id: 0,\n      sort: { count: false, order: 'ASC', },\n      agg: {\n        id: 68,\n        field: \"Source\",\n        name: \"Source\",\n        value: \"Source.keyword\",\n      }\n    },\n    {\n      id: 1,\n      sort: { count: false, order: 'ASC', },\n      agg: {\n        id: 83,\n        field: \"UserDefined4\",\n        name: \"UserDefined4\",\n        value: \"UserDefined4.keyword\",\n      }\n    },\n    {\n      id: 2,\n      sort: { count: false, order: 'ASC', },\n      agg: {\n        id: 79,\n        field: \"UserDefined12\",\n        name: \"UserDefined12\",\n        value: \"UserDefined12.keyword\",\n      }\n    },\n    {\n      id: 3,\n      sort: { count: false, order: 'ASC', },\n      agg: {\n        id: 80,\n        field: \"UserDefined14\",\n        name: \"UserDefined14\",\n        value: \"UserDefined14.keyword\",\n      }\n    },\n  ];\n\n  // const availableAggKeys = require('../../../helpers/agg-keys.js')\n\n\n  // $scope.availableAggKeys = availableAggKeys.map(function (val, i){\n  //   if (val.isString === false){\n  //     val.value=val.field;\n  //   }else {\n  //     val.value=`${val.field}.keyword`;\n  //   }\n  //   return val;\n  // });\n\n  // $scope.availableAggSortKeys = availableAggKeys.map(function (val, i){\n  //   if (val.isString === false){\n  //     val.value=val.field;\n  //   }else {\n  //     val.value=`${val.field}.keyword`;\n  //   }\n  //   return val;\n  // })\n  // $scope.availableAggSortKeys.unshift({\n  //   name : \"Stærð\",\n  //   type : \"size\",\n  //   id : 1000\n  // });\n\n  // $scope.availableSortKeys = $scope.availableAggSortKeys.slice();\n  // $scope.availableArchiveAggSortKeys = $scope.availableSortKeys.slice();\n\n  // console.log('Sorting keys so lame', $scope.availableArchiveAggSortKeys)\n\n  // $scope.availableAggSortKeys.unshift({\n  //   name : \"Einkunn\",\n  //   field:'_score',\n  //   isString : false,\n  //   id : 1001\n  // });\n\n\n  function lookupName(key, type) {\n    const value = aggKeys.map[key];\n    const name = (value) ? value.name : key;\n  \n    return (type === 'keyword') ? `${name}.keyword` : name;\n  }\n\n  function getKey(object){\n    return Object.keys(object || {}).pop();\n  }\n\n  function sortByName(a,b){\n    const nameA = a.name.toUpperCase(); // ignore upper and lowercase\n    const nameB = b.name.toUpperCase(); // ignore upper and lowercase\n    if (nameA < nameB) {\n      return -1;\n    }\n    if (nameA > nameB) {\n      return 1;\n    }\n    return 0;\n  }\n\n  const indices = Api.tenant.indices.query({tenantID : $routeParams.tenantID})\n  indices.$promise.then(fetchAllMappings)\n\n\n  function getMappingAsArray(object){\n    const arr = [];\n\n    function pushItem(key, value) {\n\n      let isString = false;\n\n      if (value.type === 'text') {\n        isString = true;\n      }\n\n      if (value.properties) {\n        return Object.keys(value.properties).forEach(k => {\n          const dotted = [key, k].join('.');\n          return pushItem(dotted, value.properties[k])\n        })\n      }\n\n      // Default push...\n      arr.push({\n        name: lookupName(key, value.type),\n        field: key,\n        value: key,\n        isString,\n      });\n\n      if (value.fields && value.fields.keyword && value.fields.keyword.type === 'keyword') {\n        arr.push({\n          name: lookupName(key, value.fields.keyword.type),\n          field: key,\n          value: `${key}.keyword`,\n          isString: true,\n        });\n      }\n    }\n\n    Object.keys(object || {}).forEach((key) => {\n      const value = object[key];\n      return pushItem(key, value);\n    })\n\n    return arr;\n  }\n\n  function fetchAllMappings(indices){\n    const allMappings = {};\n\n    // This might be a better option.\n    // Api.tenant.mappings.get({ \n    //   tenantID: $scope.tenantID,\n    // }).$promise.then(map => {\n    //   console.log(' --- 1', map)\n    // })\n\n    async.mapSeries(indices, async function (index, next){\n      allMappings[index.type] = {};\n      const req = es.indices.getMapping({\n        index: index.id\n      });\n\n      let mappings;\n      try {\n        mappings = await req;\n      } catch (error) {\n        console.log('Got error', error);\n        return next();\n      }\n      const key = getKey(mappings);\n      if (\n        key && \n        mappings[key] &&\n        mappings[key].mappings &&\n        mappings[key].mappings &&\n        mappings[key].mappings.properties\n      ){\n        return next(null, {\n          index,\n          mapping : mappings[key].mappings.properties\n        });\n      }\n      return next();\n    }, function done(err, arr){\n      if (err) return console.error('Error fetching mappings', err);\n\n      $scope.rawMappingsArray = arr;\n      arr.filter(e => e).forEach(function (record){\n        Object.keys(record.mapping).forEach(function (key){\n          const value = record.mapping[key];\n          value._index = [record.index];\n          if (typeof allMappings[record.index.type][key] === 'object'){\n            allMappings[record.index.type][key]._index.push(record.index)\n          } else {\n            allMappings[record.index.type][key] = value;\n          }\n        });\n      });\n\n\n      const archiveKeys = getMappingAsArray(allMappings.archive);\n      const albumKeys = getMappingAsArray(allMappings.album);\n      $scope.availableAggKeys = albumKeys;\n      $scope.availableAggSortKeys = albumKeys.slice();\n\n      archiveKeys.sort(sortByName).forEach((item, i) => {\n        item.id = i;\n      });\n\n      $scope.availableAggSortKeys.unshift({\n        name : \"Stærð\",\n        type : \"size\",\n        value: 'size',\n        id : 1000,\n      });\n\n      $scope.availableAggSortKeys.unshift({\n        name : \"Einkunn\",\n        field:'_score',\n        value: '_score',\n        isString : false,\n        id : 1001\n      });\n\n      $scope.availableArchiveAggSortKeys = archiveKeys;\n\n      console.log(archiveKeys)\n      $scope.$applyAsync(function (){\n        console.log('All mappings', allMappings);\n        $scope.allMappings = allMappings;\n      });\n    });\n  }\n\n  const defaultMappings = {};\n\n\n  Object.keys(mapping).forEach(function (key){\n    const map = mapping[key];\n\n    map.name = key;\n    map.key = key;\n    map.show = true;\n\n    defaultMappings[key] = map;\n  });\n\n  $scope.config.$promise.then(function (loaded){\n    $scope.config.tenantID = $routeParams.tenantID;\n\n    if ( ! loaded.search || ! loaded.search.mappings ){\n      if ( typeof $scope.config.search !== 'object' ){\n        $scope.config.search = {};\n      }\n      $scope.config.search.mappings = defaultMappings;\n    }\n\n    // Monkey patch\n    if (loaded.albums && typeof loaded.albums.sort === 'object' && loaded.albums.sort.field === '_score'){\n      loaded.albums.sort.value = '_score';\n    }\n\n\n    if (loaded.albums.showadvancedmetadata === undefined){\n      loaded.albums.showadvancedmetadata = true;\n    }\n\n    if (loaded.allowImageDownload === undefined){\n      loaded.allowImageDownload = true;\n    }\n\n    if (typeof $scope.config.archive !== 'object' || ! Array.isArray($scope.config.archive.levels)){\n      $scope.config.archive = {\n        levels : defaultLevels\n      }\n    }\n    if (typeof $scope.config.archive === 'object' && ! Array.isArray($scope.config.archive?.levels)){\n      $scope.config.archive.levels = defaultLevels;\n    }\n  })\n  $scope.saveConfig = function saveConfig(){\n\n    const save = $scope.config.$save();\n\n    Api.flush();\n\n    save.then(function success(response){\n      Notification.success(`Vistað!`)\n    }, function error(error){\n      Notification.success(`Ekki náðist að vista: ${error.statusText}`);\n      console.error('Error saving config', error);\n    });\n  }\n\n  $scope.uniqName = function uniqName(file){\n    const now = new Date().getTime();\n    const parts = file.name.split('.');\n    const ext = parts.pop();\n    const filename = parts.join('.');\n    return `background-${now}.${ext}`;\n  }\n\n  $scope.setFileUri = function (res){\n    $scope.config.background = res.pop().uri;\n    console.log('setFileUri', $scope.config);\n  }\n\n  $scope.removeItem = function removeItem(i, arr){\n    return arr.splice(i, 1);\n  }\n  $scope.addLevel = function addLevel(arr){\n    arr.push({\n      \n    })\n  }\n\n  $scope.selectImage = async function selectImage() {\n\n    const config = await Api.siteConfig();\n    const opts = {\n      tenant: $routeParams.tenantID,\n      config: config,\n    }\n    const modalPromise = ImageSelector.open(opts);\n\n    modalPromise.then(response => {\n      console.log('Got image', { response });\n      $scope.config.background = response.selected.uri;\n    })\n  }\n\n\n  const Url = window.URL || window.webkitURL;\n\n  const types = [\n    'image/png',\n    'image/jpeg',\n    'image/webp',\n  ];\n\n  function toMegabyte(bytes){\n    const mb = (bytes / 1024 / 1024);\n\n    return mb.toFixed(0);\n  }\n  function toBytes (megabyte){\n    return megabyte * 1024 * 1024;\n  }\n\n  const minHeight = 720;\n  const minWidth = 1000;\n  const maxSize = toBytes(5);\n\n  $scope.validateImage = function (images, callback){\n    const file = images[0];\n\n    if (! types.includes(file.type)){\n      return callback('err', `${file.type} is not supported file type`);\n    }\n\n    if (file.size > maxSize){\n      return callback('err',\n        `Myndin er of stór ${toMegabyte(file.size)} Mb hún má mest vera ${toMegabyte(maxSize)} Mb`\n      );\n    }\n\n    const dummyImage = new Image();\n\n    dummyImage.onload = function (){\n\n      if (this.height < minHeight || this.width < minWidth) {\n        return callback('err',\n          `Myndin er ekki í réttri stærð hún þarf að vera að lágmarki ${minHeight} x ${minWidth} en ekki ${this.height} x ${this.width}`\n        );\n      }\n      callback(null);\n    };\n    dummyImage.src = Url.createObjectURL(file);\n  }\n}\n\n\nsiteConfigController.$inject = [\n  '$scope', 'Api', '$routeParams', 'Notification', 'es', 'ImageSelector'\n];\n\nexport default siteConfigController;","\n\nconst $ = require('jquery');\nconst async = require('async-es')\nexport default function browseIndexController($scope, $http, $routeParams, $location, Api, Notification, es, bodybuilder, $q, Confirm){\n\n  $scope.lastResult = {};\n  $scope.hits = [];\n  $scope.filterToEdit = false;\n\n  $scope.queryString = $routeParams.q || '';\n  $scope.scrollDisabled = false;\n  $scope.noMoreResults = false;\n  $scope.isSearching = false;\n\n  $scope.index = Api.tenant.indices.get({ tenantID: $routeParams.tenantID, id : $routeParams.id });\n\n  $scope.size = 100;\n  $scope.from = 0;\n\n  $scope.openCol = false;\n\n  $scope.siteConfig = Api.siteConfig();\n\n  $scope.editFilter = function (filter) {\n    // filterToEdit = filter; showAddFilter = true\n    $scope.filterToEdit = filter;\n    $scope.showAddFilter = true;\n  }\n\n  $(document).keyup(function (event){\n\n    if (event.keyCode !== 27) return;\n    if ($scope.openCol) return $scope.openCol.collapse('hide');\n  })\n\n  $scope.fileName = function fileName(source){\n    return source.ObjectName || source.fileObjectName;\n  }\n\n  $scope.bulkActionDisabled = false;\n  $scope.showMetadata = function showMetadata(i, hit){\n    const target = $(`#according_${i}`);\n    $scope.openCol = target;\n\n    hit._metadataShowing = !hit._metadataShowing;\n\n    return target.collapse('toggle');\n  }\n  $scope.selectAllITems = function selectAllITems(){\n    console.log('Selecting all items', $scope.selectAll);\n    if ($scope.selectAll === true) {\n      $scope.hits.forEach(function (hit){\n        hit._checked = false;\n      });\n    }else{\n      $scope.hits.forEach(function (hit){\n        hit._checked = true;\n      });\n    }\n  }\n\n  $scope.getLogUrl = function getLogUrl(item){\n    if (!item || !item._id ) return;\n    return `/admin/settings/${$routeParams.tenantID}/logs?jobId=${item._id}`\n  }\n\n  $scope.filters = [];\n\n  if ($routeParams.imageId) {\n    $scope.filters.push({\n      type: 'term',\n      field: '_id',\n      value: $routeParams.imageId\n    });\n  }\n\n  function search(callback){\n\n    $scope.isSearching = true;\n\n    callback = callback || function (){}\n    const query = bodybuilder();\n\n    if ($scope.queryString.length > 1){\n      query.query('query_string',{\n        default_operator : 'AND',\n        query : $scope.queryString,\n        _name : 'query_string'\n      });\n    }\n\n\n    $scope.filters.forEach(filter => {\n      query.filter(filter.type, filter.field, filter.value);\n    })\n\n    $location.search('q', $scope.queryString);\n\n    console.log({\n      index:  $scope.index,\n    })\n\n\n\n    if ($scope.index.type !== \"filemaker\"){\n      console.log('Add some sort..', $scope.index)\n      query.sort([{\n        // 'fileObjectName.keyword' : 'ASC',\n        '_sortedFileObject' : 'ASC'\n      }]);\n    }\n\n\n    const queryBody = query.build();\n\n    console.log({\n      queryBody\n    })\n\n    return $q(function (resolve, reject){\n      const request = es.search({\n        index : $routeParams.id,\n        type : '_doc',\n        body : queryBody,\n        size : $scope.size,\n        from : $scope.from,\n      });\n      request.then(function (data){\n        $scope.isSearching = false;\n        resolve(data);\n        callback(null, data);\n        updateMetadata(data);\n      }, function (err){\n        $scope.isSearching = false;\n        reject(err);\n        callback(err);\n      });\n    });\n  }\n\n  $scope.slimJson = function(source){\n    const object = {};\n    Object.assign(object, source);\n    const remove = [,\n      \"Fwl\",\n      \"Xmp\",\n      \"Iptc4xmpCore\",\n      \"Fwu\",\n      \"Crs\",\n      \"ResolutionUnit\",\n      \"ResolutionUnit_number\",\n      \"YResolution\",\n      \"XResolution\",\n      \"PhotometricInterpretation\",\n      \"PhotometricInterpretation_number\",\n      \"ImageLength_number\",\n      \"ImageWidth_number\",\n      \"Orientation\",\n      \"Orientation_number\",\n      \"NativeDigest\",\n      \"PixelXDimension_number\",\n      \"PixelYDimension_number\",\n      \"ColorMode\",\n      \"ColorMode_number\",\n      \"Urgency\",\n      \"Urgency_number\",\n      \"HasCrop\",\n      \"thumbnails\",\n      \"DateCreated_number\",\n    ];\n    remove.forEach(function (key){\n      delete object[key];\n    });\n    return object;\n  };\n\n\n  function getSelectedItems(){\n    return $scope.hits.filter(function (hit){\n      return hit._checked\n    });\n  }\n\n  function removeMe(id){\n    const index = $scope.hits.findIndex(function (hit){\n      return (hit._id == id);\n    });\n    $scope.hits.splice(index, 1);\n    $scope.$applyAsync(function (){ });\n  }\n\n  $scope._updating = false;\n\n  $scope.bulkActionDelete = function bulkActionDelete(){\n    $scope._updating = true;\n    $scope.bulkActionDisabled = true;\n    const records = getSelectedItems();\n    async.forEachLimit(records, 4, function (rec, next){\n      rec._updating = true;\n      rec._updating = true;\n\n      $scope.removeFromIndex(rec).then(function success(res){\n        rec._checked = false;\n        rec._updating = false;\n\n\n        removeMe(rec._id);\n        return next();\n      }, function error(res){\n        console.error('Error deleting from index', res);\n        rec._checked = false;\n        rec._updating = false;\n\n        let errorMessage = \"\";\n        if (typeof res.data.error === 'string'){\n          errorMessage = res.data.error;\n        }\n        if (typeof res.data.error === 'object'){\n          errorMessage = JSON.stringify(res.data.error);\n        }\n\n        rec._error = `Status: ${res.status} ${res.statusText} ${errorMessage}`;\n        return next(false);\n      });\n    }, function done(error){\n      if(error) console.error('error in bulk request', error);\n      $scope.selectAll = false;\n      $scope._updating = false;\n      $scope.bulkActionDisabled = false;\n    });\n  }\n\n  $scope.fmCate = {\n    'afhnumer':'Afhendingarnúmer',\n    'yfirskjalafl':'Yfirskjalaflokkur',\n    'skjalaflokkur':'Skjalaflokkur',\n    'kassanumer':'Kassanúmer',\n    'ork':'Örk',\n  };\n\n  function updateMetadata(data){\n    $scope.took = data.took;\n    $scope.count = data.hits.total;\n  }\n\n  $scope.bulkActionUpdate = function bulkActionUpdate(){\n    $scope._updating = true;\n    $scope.bulkActionDisabled = true;\n    const records = getSelectedItems();\n    async.forEachLimit(records, 4, function (rec, next){\n      rec._updating = true;\n\n      $scope.reIndexRecord(rec).then(function success(res){\n        rec._checked = false;\n        rec._updating = false;\n        return next();\n      }, function error(res){\n        console.error('Error re indexing record', res);\n        rec._checked = false;\n        rec._updating = false;\n\n        let errorMessage = \"\";\n        if (typeof res.data.error === 'string'){\n          errorMessage = res.data.error;\n        }\n        if (typeof res.data.error === 'object'){\n          errorMessage = JSON.stringify(res.data.error);\n        }\n\n        rec._error = `Status: ${res.status} ${res.statusText} ${errorMessage}`;\n        return next(false);\n      });\n    }, function done(error){\n      if(error) console.error('error in bulk request', error);\n      $scope.selectAll = false;\n      $scope._updating = false;\n      $scope.bulkActionDisabled = false;\n    });\n  }\n\n  $scope.search = function (newSearch){\n\n    $scope.from = 0;\n    search().then(function (response){\n      $scope.scrollDisabled = false;\n      if (response.hits && response.hits.hits && Array.isArray(response.hits.hits)){\n        if (newSearch){\n          $scope.hits = response.hits.hits;\n        }else{\n          $scope.hits = $scope.hits.concat(response.hits.hits);\n        }\n      }\n    });\n  }\n\n  $scope.$on('$destroy',function(){\n    setTimeout(function (){\n      $('.tooltip.show').remove()\n    }, 10)\n    $scope.scrollDisabled = true;\n    $scope.loadMoreResults = function (){};\n  }); \n\n  $scope.indexId = false;\n\n\n  $scope.index.$promise.then(function (){\n    $scope.search(true);\n    $scope.indexId = $scope.index.id;\n  })\n\n\n\n  $scope.$watchCollection('filters', function (a, b) {\n\n    if (!a || !b) return;\n\n    const aValue = a.map(i => {\n      return `${i.type}-${i.field}-${i.value}`;\n    }).join('');\n    const bValue = b.map(i => {\n      return `${i.type}-${i.field}-${i.value}`;\n    }).join('');\n\n    if (aValue === bValue) return console.log('No change to filters', {\n      aValue, bValue\n    });\n    return $scope.search(true);\n  })\n\n  $scope.removeFromIndex = function removeFromIndex(hit){\n\n    const tenantId = $routeParams.tenantID;\n    const indexId = $routeParams.id;\n    const recordId = hit._id;\n    const url = `/api/tenants/${tenantId}/indices/${indexId}/records/${recordId}`\n    return $q(function (resolve, reject){\n      $http({\n        method : 'DELETE',\n        url: url\n      }).then(function success(response){\n        if (response.status === 204) return resolve();\n        return reject();\n      }, reject)\n\n    });\n  }\n\n  $scope.reIndexRecord = function reIndexRecord(hit){\n\n    const tenantId = $routeParams.tenantID;\n    const indexId = $routeParams.id;\n    const recordId = hit._id;\n    const url = `/api/tenants/${tenantId}/indices/${indexId}/records/${recordId}`\n\n    return $q(function (resolve, reject){\n      $http({\n        method : 'PATCH',\n        url: url\n      }).then(function success(response){\n        if (response.status === 204) return resolve();\n        return reject();\n      }, reject)\n    });\n  }\n\n  $scope.loadMoreResults = function loadMoreResults(cb){\n\n    if ($scope.scrollDisabled) return;\n\n    $scope.from = $scope.from + $scope.size;\n\n    return search(function done(err, response){\n      if (err) {\n        $scope.scrollDisabled = true;\n        return console.log('Error loading more results')\n      }\n\n      if (response.hits.hits.length === $scope.size){\n        $scope.scrollDisabled = false;\n      }else{\n        $scope.noMoreResults = true;\n        $scope.scrollDisabled= true;\n      }\n\n      $scope.hits = $scope.hits.concat(response.hits.hits);\n\n      cb();\n    });\n\n  }\n\n}\n","\nconst async = require('async-es')\n\nexport default function ($scope, $http, $routeParams, Notification, $resource, $q){\n  const Queues = $resource('/api/queues/:type')\n  const Jobs = $resource('/api/queues/:type/jobs/:id', {\n    id : '@id',\n    type :'@type',\n  })\n\n  $scope.defaultSize = 200;\n  $scope.from = 0;\n  $scope.end = $scope.defaultSize;\n\n  $scope.scrollDisabled = false;\n  $scope.bulkActionDisabled=false;\n  $scope.state = $routeParams.state;\n\n  $scope.refreshIfActive = function refreshIfActive(state, key){\n\n    if (key !== state){\n      return false;\n    }\n    \n    $scope.jobs = fetchJobs();\n  }\n\n  if ($routeParams.type){\n\n    $scope.type = $routeParams.type;\n    $scope.queueStats = Queues.get({type : $routeParams.type})\n  }\n\n  $scope.jobs = []\n  if($routeParams.state){\n    $scope.jobs = fetchJobs();\n  }\n\n\n  function fetchJobs(){\n\n    console.log($routeParams)\n    return Jobs.query({\n      type : $routeParams.type,\n      state: $scope.state,\n      from : $scope.from,\n      end : $scope.end,\n    })\n  }\n\n  $scope.queues = [];\n\n\n  $scope.queues = Queues.query();\n  $scope.relLink = function (id){\n    const base = window.location.pathname.replace(`/${$routeParams.type}`, '');\n    return `${base}/${id}`\n  }\n\n  $scope.appendLink = function (id){\n    return `${window.location.pathname}/${id}`;\n  }\n\n  $scope.printStackTrace = function printStackTrace(trace){\n    return trace.join('');\n  }\n\n  $scope.buildUrl = function (type, state){\n    const urlArray = window.location.pathname.split($scope.type)\n                  .shift()\n                  .split('/')\n                  .filter( i => {\n                    return (i !== '')\n                  });\n\n    urlArray.push(type);\n    if (state){\n      urlArray.push(state);\n    }\n\n    const url = urlArray.join('/');\n    return `/${url}`;\n  }\n\n  $scope.selectAllITems = function selectAllITems(){\n    console.log('Selecting all items', $scope.selectAll);\n    if ($scope.selectAll === true) {\n      $scope.jobs.forEach(function (hit){\n        hit._checked = false;\n      });\n    }else{\n      $scope.jobs.forEach(function (hit){\n        hit._checked = true;\n      });\n    }\n  }\n\n\n  function getSelectedItems(){\n    const cache = {};\n\n    return $scope.jobs.filter(function (hit){\n      return hit._checked;\n    }).filter(function (hit){\n      if (cache[hit.id]) return false;\n      cache[hit.id] = true;\n      return true;\n    })\n  }\n\n  $scope.deleteJob = function deleteJob(job){\n    job.type = $scope.type;\n    const del= job.$delete();\n    job._updating = true;\n    job._updating = true;\n    del.then(function success(res){\n      job._checked = false;\n      job._updating = false;\n      removeIdFromArray(job.id)\n    }, function error(res){\n      console.error('Error deleting from index', res);\n      let errorMessage = \"\";\n      if (typeof res.data.error === 'string'){\n        errorMessage = res.data.error;\n      }\n      if (typeof res.data.error === 'object'){\n        errorMessage = JSON.stringify(res.data.error);\n      }\n      job._error = `Status: ${res.status} ${res.statusText} ${errorMessage}`;\n    });\n    return del;\n  }\n\n  function removeIdFromArray(id){\n    const index = $scope.jobs.findIndex(function (job){\n      return (id === job.id);\n    })\n    if (index < 0) return;\n    $scope.jobs.splice(index, 1)\n  }\n\n  $scope._updating = false;\n\n  $scope.bulkActionDelete = function bulkActionDelete(){\n    $scope._updating = true;\n    $scope.bulkActionDisabled = true;\n    const records = getSelectedItems();\n\n    async.forEachLimit(records, 4, function (rec, next){\n      const action = $scope.deleteJob(rec);\n      action.then(function success(res){\n        return next();\n      }, function error(res){\n        return next(false);\n      });\n    }, function done(error){\n      if(error) console.error('error in bulk request', error);\n      $scope.selectAll = false;\n      $scope._updating = false;\n      $scope.bulkActionDisabled = false;\n    });\n  }\n\n\n\n  $scope.loadMoreResults = function loadMoreResults(cb){\n    if ($scope.scrollDisabled) return;\n\n    $scope.from = $scope.end;\n\n    $scope.end = $scope.from + $scope.defaultSize;\n\n    const request = fetchJobs();\n\n    request.$promise.then(function success(jobs){\n\n\n      if (jobs.length < $scope.defaultSize){\n        $scope.noMoreResults = true;\n        $scope.scrollDisabled= true;\n      }else{\n        $scope.scrollDisabled = false;\n      }\n      $scope.jobs = $scope.jobs.concat(jobs);\n      cb();\n    }, function error(err){\n      $scope.scrollDisabled = true;\n      return console.log('Error loading more results')\n    })\n\n\n  }\n\n}\n","\n\nconst Diff = require('diff');\n\nexport default function crowdsourceDiffController($scope, $http, Api, $routeParams, Notification){\n  console.log({$routeParams});\n\n\n  $scope.textLoaded = false;\n\n\n\n  //\n  // tenantId : '@tenantId',\n  // indexId : '@indexId',\n  // documentId : '@documentId',\n  // id : '@id',\n\n  function getActive(){\n    const doc = Api.crowdsource.get({\n      documentId: $routeParams.documentId,\n      indexId: $routeParams.indexId,\n      tenantId: $routeParams.tenantId,\n      id: '_active',\n    });\n    return doc;\n  }\n\n  function getPropose(){\n    const doc = Api.crowdsource.get({\n      documentId: $routeParams.documentId,\n      indexId: $routeParams.indexId,\n      tenantId: $routeParams.tenantId,\n      id: $routeParams.id,\n    });\n    return doc;\n  }\n  $scope.denyUrl = function denyUrl(){\n\n    const base = `/admin/settings/${$routeParams.tenantId}/crowdsource`;\n    const doc = $scope.propose;\n    if ( !doc || !doc.$resolved) return base;\n    const rec = doc.record._source;\n    return `/admin/settings/${$routeParams.tenantId}/crowdsource/${rec.indexId}/${rec.recordId}`;\n  }\n\n\n  $scope.accept = function accept(){\n    const record = $scope.propose.record;\n    const d = new Api.crowdsource({\n      tenantId : record._source.tenantId,\n      indexId : record._source.indexId,\n      documentId : record._source.recordId,\n      id : record._id,\n    });\n    const accept = d.$accept();\n\n    accept.then(function success(res){\n      Notification.success('Vistað');\n    }, function error(err){\n      console.error('Unable to accept', err);\n      Notification.error('Gat ekki vistað');\n    });\n  }\n\n  $scope.active = getActive();\n\n  function logPromise(promise){\n    console.log('logPromise.init', promise)\n    promise.then(function success(res){\n      console.log('logPromise.success', res);\n    },function error(error){\n      console.error('logPromise.error', error);\n    });\n  }\n\n  $scope.current = {}\n\n  $scope.active.$promise.then(function success(response){\n    console.log({response, r : response.active.record});\n    $scope.current = response.active.record;\n    $scope.propose = getPropose();\n    logPromise($scope.propose.$promise);\n    onTextLoaded($scope.active.$promise, $scope.propose.$promise);\n  });\n\n  function onTextLoaded(pr1, pr2){\n    Promise.all([pr1, pr2]).then(function (){\n      $scope.$applyAsync(function (){\n        $scope.textLoaded = true;\n      });\n    });\n  }\n\n}\n","\n\n\nfunction attributeEditor($scope, $resource, Api, $routeParams, ImageSelector){\n  console.log('adminAttributeEditor');\n\n\n  const AttributeApi = $resource('/api/tenants/:tenantId/attributes/:id', {\n    tenantId: '@tenantId',\n    id: '@id',\n  });\n\n  $scope.config = {};\n  $scope.tenant = false;\n\n\n  $scope.uploadUri = false;\n\n  $scope.attributeForm = false;\n\n  $scope.fileUploadDone = function fileUploadDone(uploadResponse){\n    console.log('fileUploadDone', uploadResponse);\n    if (uploadResponse && Array.isArray(uploadResponse)){\n      $scope.attributeForm.image = uploadResponse.pop();\n    }\n  }\n\n  function filesToArray(files){\n    const output = [];\n    for (let i = 0; i < files.length; i++){\n      const file = files[i];\n      output.push(file)\n    }\n    return output;\n  }\n\n\n  $scope.selectImage = function selectImage(){\n    console.log('Open the image selector', ImageSelector);\n\n    const modalPromise = ImageSelector.open({\n      tenant: $scope.tenant,\n      config: $scope.config,\n    });\n\n    modalPromise.then(response => {\n      console.log('Got image', {response});\n\n\n      $scope.attributeForm.image = {\n        uri: response.selected.uri,\n      } \n      $scope.$applyAsync();\n\n    })\n\n  }\n\n  $scope.fileValidate = function fileValidate(files, callback) {\n    const isValid = filesToArray(files).every(function (file){\n      return (file.type === 'image/png' || file.type === 'image/jpeg');\n    })\n\n    if (isValid) return callback(false);\n    console.error('File not supported', files);\n    return callback(true, 'File not supported');\n  }\n\n  $scope.formReady = false;\n\n\n  function fetchAttributeApi(){\n    $scope.attributeForm = AttributeApi.get({\n      tenantId: $scope.tenant,\n      id: $routeParams.attributekey,\n    })\n\n    $scope.attributeForm.$promise.then(function () {\n      $scope.formReady = true;\n    })\n\n    console.log({ $routeParams, attr: $scope.attributeForm })\n  }\n\n  Api.siteConfig().then(function success(configResponse){\n    console.log(configResponse);\n    $scope.config = configResponse;\n    $scope.uploadUri = `/api/tenants/${configResponse.tenant}/assets/image`;\n    $scope.tenant = configResponse.tenant;\n    fetchAttributeApi();\n  });\n\n  $scope.save = function save(){\n    if ( !$scope.formReady ) return false;\n\n\n    console.log('Save', $scope.attributeForm)\n\n    const save = $scope.attributeForm.$save()\n\n\n    save.then(fetchAttributeApi)\n\n    console.log('LEts save it', $scope.formReady )\n  }\n\n}\n\n\nattributeEditor.$inject = [\n  '$scope',\n  '$resource',\n  'Api',\n  '$routeParams',\n  'ImageSelector',\n];\n\n\nexport default attributeEditor;","import notFoundCtrl from '../../shared/ctrl/not-found.js';\nimport logsCtrl from './logs.js';\nimport indexCtrl from './indices.js';\nimport editTenantCtrl from './edit-tenant.js';\nimport settingsCtrl from './settings.js';\nimport usersCtrl from './users.js';\nimport confirmCtrl from '../../shared/ctrl/confirm.js';\nimport fileSelectorCtrl from '../../shared/ctrl/fileselector.js';\nimport imageSelectorCtrl from '../../shared/ctrl/imageselector.js';\nimport userEditCtrl from './user-edit.js';\nimport listTenantsCtrl from './list-tenants.js';\nimport filesCtrl from './files.js';\nimport dashboardCtrl from './dashboard.js';\nimport imageProfilesCtrl from './image-profiles.js';\nimport siteConfigCtrl from './site-config.js';\nimport workersCtrl from './workers.js';\nimport workerCtrl from './worker.js';\nimport schedulesCtrl from './schedules.js';\nimport feedCtrl from './feed.js';\nimport browseIndexCtrl from './browse.js';\nimport commentsCtrl from './comments.js';\nimport adminCtrlAlias from './alias.js';\nimport adminCtrlPreferences from './preferences.js';\nimport adminCtrlQueues from './queues.js';\nimport infoCtrl from '../../shared/ctrl/info-controller.js';\nimport crowdsourceController from './crowdsource.js';\nimport crowdsourceDiffController from './crowdsource-diff.js';\nimport cookieController from '../../shared/ctrl/cookies.js';\nimport attributeEditor from './attribute-editor.js';\nimport blogController from './blog.js';\nimport debugExifController from './debug-exif.js';\n\nconst app = angular.module('admin');\napp.controller('cookies',  ['$scope', 'Api', cookieController ]);\napp.controller('fileSelector',            ['$scope', 'Files', '$q', fileSelectorCtrl]);\napp.controller('notFound',                ['$scope', notFoundCtrl ]);\napp.controller('adminCtrlTenants',        ['$scope', 'Api', 'Notification', '$timeout', listTenantsCtrl ]);\napp.controller('adminCtrlIndices',        ['$scope', 'Api', '$timeout', 'Notification', '$routeParams', 'es', 'bodybuilder', '$http', 'Files', indexCtrl]);\napp.controller('adminCtrlEditTenant',     ['$scope', '$routeParams', 'Api', 'Notification', 'hasPermission', editTenantCtrl]);\napp.controller('adminCtrlLogs',           logsCtrl );\napp.controller('adminCtrlSettings',       ['$scope', 'Api', '$rootScope', 'Notification', settingsCtrl]);\napp.controller('adminCtrlUsers',          ['$scope', 'Api', 'Notification', 'Confirm', '$routeParams', usersCtrl]);\napp.controller('adminCtrlUserEdit',       ['$scope', '$routeParams', '$rootScope', 'Api', 'Notification', userEditCtrl ]);\napp.controller('adminCtrlFiles',          ['$scope', '$http', '$routeParams','$location', 'es', 'bodybuilder', '$q', 'Notification', filesCtrl ]);\napp.controller('confirmModal',            ['$scope', 'Confirm', '$q', confirmCtrl]);\napp.controller('adminCtrlWorkers',        ['$scope', '$http', 'Notification', 'Api', '$resource', '$interval', workersCtrl ]);\napp.controller('adminCtrlWorker',         ['$scope', '$http', 'Notification', 'Api', '$resource', '$interval', '$routeParams', workerCtrl ]);\napp.controller('adminCtrlSchedules',      ['$scope', '$http', '$routeParams', '$location', 'Api','Notification', schedulesCtrl ]);\napp.controller('feedCtrl',                ['$scope', '$http', '$routeParams', '$location', 'Api','Notification', feedCtrl ]);\napp.controller('browseIndexCtrl',         ['$scope', '$http', '$routeParams', '$location', 'Api','Notification', 'es', 'bodybuilder', '$q', 'Confirm', browseIndexCtrl ]);\napp.controller('siteInfoController',      ['$scope', '$location', 'Api', infoCtrl ]);\napp.controller('commentsCtrl',            ['$scope', '$http', '$routeParams', '$resource', '$q', 'Notification', commentsCtrl ]);\napp.controller('adminCtrlAlias',          ['$scope', '$http', '$routeParams', 'es', 'bodybuilder', '$resource', 'Api', '$q', 'CacheFactory', '$location', 'Notification', adminCtrlAlias]);\napp.controller('adminCtrlQueues',         ['$scope', '$http', '$routeParams', 'Notification', '$resource', '$q', adminCtrlQueues]);\napp.controller('adminCtrlPreferences',    ['$scope', adminCtrlPreferences]);\napp.controller('adminCrowdsource', ['$scope', '$http', 'Api', '$routeParams', 'Notification', crowdsourceController])\napp.controller('adminCrowdsourceDiff', ['$scope', '$http', 'Api', '$routeParams', 'Notification', crowdsourceDiffController])\napp.controller('adminCtrlDashboard',  dashboardCtrl);\napp.controller('adminCtrlImageProfiles', imageProfilesCtrl);\napp.controller('imageSelector', imageSelectorCtrl);\napp.controller('adminCtrlSiteConfig', siteConfigCtrl );\napp.controller('adminAttributeEditor', attributeEditor);\napp.controller('blogController', blogController);\napp.controller('debugExifController', debugExifController);","function fileSelector($scope, Files, $q){\n\n  const $ = require('jquery');\n  $scope.question = \"\";\n  const modal  = $('#fileSelector');\n\n  $scope.modalError = false;\n\n  $scope.modalErrorMessage = \"Óþekkt villa\";\n\n  $scope.tenant = \"\";\n  $scope.directory = {\n    selected: \"/\",\n  } \n\n  $scope.isOpen = false;\n\n  Files.open = function (tenant, dir, callback){\n    $scope.isOpen = true;\n    if (typeof tenant !== 'string' || typeof dir !== 'string'){\n\n      $scope.modalError = true;\n\n      $scope.modalErrorMessage = \"Villa! Mappa virðist ekki vera rétt stillt.\";\n\n      return $q(function (resolve, reject){\n        modal.modal('show');\n\n        $scope.yes = reject;\n        $scope.no= reject;\n      })\n    }\n\n    $scope.directory.selected = dir;\n    $scope.tenant = tenant;\n\n    modal.modal('show');\n    return $q(function (resolve, reject){\n      $scope.yes = function (){\n        modal.modal('hide');\n        return resolve($scope.directory.selected);\n      }\n      $scope.no = function (){\n        modal.modal('hide');\n        return reject();\n      };\n    });\n  };\n\n}\n\nexport default fileSelector;\n","\n\n\nexport default function listTenants($scope, Api, Notification, $timeout){\n  const $ = require('jquery');\n  const modal = $('#createTenantModal');\n  $scope.tenant = {};\n\n  $scope.userCache = {};\n\n  $scope.getEditBy = function(item){\n\n    if ($scope.userCache[item.edit_by]) return $scope.userCache[item.edit_by];\n\n    const user = Api.users.get({id : item.edit_by});\n\n    if (!item.edit_by) return user;\n\n    $scope.userCache[item.edit_by] = user;\n\n    return user;\n  }\n\n\n  $scope.addUser = function (item){\n    const req = Api.tenant.admins.add({ tenantID : $routeParams.id, userID : item.id});\n    req.$promise.then(function (success){\n      Notification(`User ${item.name} added to users!`);\n    }, function (err){\n      $scope.tenant.admins.splice($scope.tenant.admins.length -1 , 1)\n      Notification.error(`Could not add ${item.name}, ${err.data.message}`);\n    });\n  }\n\n  $scope.removeUser = function (item){\n    const req= Api.tenant.admins.remove({ tenantID : $routeParams.id, userID : item.id});\n    req.$promise.then(function (success){\n      Notification(`User ${item.name} removed from users!`);\n    }, function (err){\n      $scope.tenant.admins.push(item);\n      Notification.error(`Could not remove ${item.name}, ${err.data.message}`);\n    });\n  }\n\n\n  $scope.deleteTenant = function (tenant){\n    const promise = tenant.$remove();\n    promise.then(function (){\n      $scope.tenants = Api.tenants.query();\n    });\n    return promise;\n  };\n\n  $scope.tenants = Api.tenants.query();\n\n  $scope.validate= false;\n  $scope.animate = false;\n\n  $scope.createNewTenant = function (){\n    $scope.validate= true;\n    $scope.animate = true;\n\n\n    $timeout(function (){\n      $scope.animate = false;\n    }, 1000);\n\n    if ($scope.createTenant.$invalid) return console.log('Invalid form');\n\n    const tenant = new Api.tenants($scope.tenant);\n\n    tenant.$create().then(function success(data){\n      modal.modal('hide');\n      $scope.tenants = Api.tenants.query();\n      Notification.success('Success!');\n    }, function error(error){\n      const message = (error.data && error.data.message) ? error.data.message : error.statusText;\n      Notification.error(message);\n    })\n\n\n  }\n}\n"," export default function editTenant($scope, $routeParams, Api, Notification, hasPermission){\n\n\n\n  $scope.self = false;\n  $scope.me = Api.me.get();\n\n  $scope.hasPermission = function (required){\n\n    if (typeof $scope.me !== 'object') return;\n\n    if (typeof $scope.me.permissions !== 'object') return;\n    if (typeof $scope.me.permissions.tenants !== 'object') return;\n\n\n\n    const tenantId = (typeof $scope.selectedTenant === 'object' ) ? $scope.selectedTenant.id : '';\n    const globalRole = $scope.me.permissions.global;\n    const tenantRole = $scope.me.permissions.tenants[tenantId];\n\n    const hasGlobalAccess = hasPermission(required, globalRole)\n    if (hasGlobalAccess) return true;\n    const hasTenantAccess = hasPermission(required, tenantRole)\n    if (hasTenantAccess) return true;\n\n    return false;\n  }\n\n  $scope.permissions = [\n    {\n      name: 'Stjórnandi',\n      id:'tenant::admin',\n    },\n    {\n      name: 'Ofur notandi',\n      id:'tenant::superuser',\n    },\n    {\n      name: 'Notandi',\n      id:'tenant::user',\n    }\n  ];\n\n  $scope.checkbox = {\n    taggedworker : false\n  }\n\n  $scope.changeRole = function changeRole(user){\n    console.log('changeRole', {user}, 'Role is:', user.role);\n    user._isModified = true;\n  }\n\n  $scope.saveUser = function saveUser(user, tenant){\n    console.log('saveUser', {user, tenant});\n\n    const payload = {\n      userID: user.id,\n      tenantID: tenant.id,\n      role: user.role,\n    };\n\n    const User = new Api.tenant.users(payload);\n\n    const save = User.$save();\n\n    save.then(function success(success){\n      Notification(`User ${user.name} updated with role: ${user.role}`);\n      user._isModified = false;\n    }, function error (err){\n      user._isModified = false;\n      Notification.error(`Unable to update ${user.name}, ${err.data.message}`);\n    });\n\n  }\n\n  function fetchTenant(){\n    $scope.tenant = Api.tenants.get({ id : $routeParams.id });\n    $scope.tenant.$promise.then(function (res){\n\n      if (res.taggedworker){\n        $scope.checkbox.taggedworker = true;\n      }\n\n      $scope.me = Api.me.get();\n      $scope.me.$promise.then(function (data){\n        $scope.self= data.id;\n      });\n\n      fetchAvailableUsers();\n    });\n  }\n\n  fetchTenant();\n\n\n  $scope.fail = function (attrs){\n    console.warn('Faaailure', {attrs})\n  }\n\n  $scope.success = function (attrs){\n    console.warn('success!!', {attrs})\n  }\n\n  $scope.defaultUser = {\n    id:'-',\n    _desc: 'Veldu notanda',\n  };\n\n  $scope.selectedUser = $scope.defaultUser;\n  $scope.isCreator = function isCreator(user, tenant){\n    return (user.id === tenant.creator);\n  }\n\n  $scope.availableUsers = [\n    $scope.defaultUser\n  ];\n\n  function fetchAvailableUsers(){\n    const queryForUsers = Api.users.query();\n\n    console.log($scope.tenant)\n    const currentUserIds = $scope.tenant.admins.map(function (user){\n      return user.id;\n    })\n\n    console.log({currentUserIds})\n\n    queryForUsers.$promise.then(function (users){\n\n      const parsed = users.map(function (user){\n        user._desc = `${user.name} - ${user.id}`;\n        return user;\n      });\n\n      const filtered = parsed.filter(function (user){\n        return !(currentUserIds.includes(user.id));\n      });\n      $scope.availableUsers = [\n        $scope.defaultUser\n      ];\n      $scope.availableUsers = $scope.availableUsers.concat(filtered);\n\n      console.log('$scope.selectedUser', $scope.selectedUser)\n    });\n  }\n\n\n  $scope.addUser = function (item){\n\n\n    console.log('Adding user', {item})\n\n    if (! item.role ){\n      item.role = 'tenant::user';\n    }\n\n    const role = item.role;\n\n    // return console.log('addUser', {item})\n    const req = Api.tenant.users.add({ role, tenantID : $routeParams.id, userID : item.id});\n    req.$promise.then(function (success){\n      Notification(`User ${item.name} added to users!`);\n      fetchTenant();\n    }, function (err){\n      $scope.tenant.admins.splice($scope.tenant.admins.length -1 , 1)\n      Notification.error(`Could not add ${item.name}, ${err.data.message}`);\n    });\n  }\n\n  $scope.removeUser = function (attrs){\n\n    const item = attrs.user;\n    const req= Api.tenant.users.remove({ tenantID : $routeParams.id, userID : item.id});\n    req.$promise.then(function (success){\n      Notification(`User ${item.name} removed from users!`);\n      fetchTenant();\n    }, function (err){\n      $scope.tenant.admins.push(item);\n      Notification.error(`Could not remove ${item.name}, ${err.data.message}`);\n    });\n  }\n\n  $scope.update = function(){\n\n    const tenant = angular.copy($scope.tenant);\n\n    delete tenant.admins;\n    delete tenant.created;\n    delete tenant.creator;\n    delete tenant.edit_by;\n    delete tenant.id;\n    delete tenant.indices;\n    delete tenant.updated;\n    delete tenant.users;\n\n    if ($scope.checkbox.taggedworker){\n      tenant.taggedworker = $routeParams.id;\n    }else{\n      tenant.taggedworker = false;\n    }\n\n    const save = tenant.$save({ id : $routeParams.id});\n\n    save.then(function success(response){\n      Notification.success('Updated successfully');\n\n      $scope.$emit('index:update', {update:tenant, response, id : $routeParams.id });\n    }, function error(error){\n      const errorMessage = (error.data && error.data.message) ? error.data.message : \"\";\n      Notification.error(`${error.statusText}: ${errorMessage}`);\n    })\n  }\n\n}\n","\n\n\n\nfunction controllerSettings($scope, Api, $rootScope, Notification){\n\n  $scope.settings = Api.settings.get();\n\n  $scope.removeMe = function (i, collection){\n    console.log(collection, i)\n    delete collection[i];\n  }\n\n  $scope.saveWarehouseMappings = function (){\n    const promise = $scope.settings.$save();\n\n    promise.then(function success(){\n      Notification.success('Saved');\n    }, function error(error){\n      Notification.error(error.data.message || 'Error');\n    })\n  }\n}\n\nexport default controllerSettings;\n","export default function usersController($scope, Api, Notification, Confirm, $routeParams){\n\n  $scope.users = Api.users.query();\n\n\n  const id = $routeParams.id;\n\n  if (id){\n    $scope.userID =id;\n    $scope.me = Api.me.get();\n    $scope.user = Api.users.get({id});\n  }\n\n  $scope.deleteUser = function (user){\n    const id = user.id;\n    const question = Confirm.ask(`Are you sure you want to delete '${user.name}'`);\n    question.then(function success(data){\n      const User = new Api.users({ id });\n      return User.$remove().then(function success(){\n        Notification.success(`User '${user.name}' deleted`);\n      }, function error(message){\n        console.log(message);\n        Notification.error(`Error deleting '${user.name}'`);\n      });\n    }, function reject(err){\n      console.log('REJECTED');\n    });\n  };\n\n  $scope.getImage = function (user, size){\n\n    if (!user.$resolved) return ;\n\n    console.log(user, size)\n    if (typeof user.picture !== 'object' ) return 'https://via.placeholder.com/350x150?text=User';\n\n    if (! user.picture[size]) return 'https://via.placeholder.com/350x150?text=User';\n    return user.picture[size].data.url;\n  }\n}\n","export default function userEditController($scope, $routeParams, $rootScope, Api, Notification){\n  const id = $routeParams.id;\n\n  $scope.user = Api.users.get({id});\n\n  $scope.user.$promise.then(function (data){\n    if (! $scope.user.max_indices){\n      $scope.user.max_indices = 10;\n    }\n\n    if ($scope.user.admin === undefined){\n      $scope.user.admin = false;\n    }\n\n    if ($scope.user.subscription === undefined){\n      $scope.user.subscription = false;\n    }\n  });\n\n  $scope.saveUser = function(){\n    delete $scope.user.id;\n    delete $scope.user.provider;\n    delete $scope.user.lastLogin;\n    delete $scope.user.created;\n    delete $scope.user.picture;\n\n    const save = $scope.user.$save({ id : $routeParams.id});\n\n    save.then(function success(response){\n      Notification.success('Updated successfully');\n      $scope.$emit('index:update', {update:$scope.user, response, id : $routeParams.id });\n    }, function error(error){\n      const errorMessage = (error.data && error.data.message) ? error.data.message : \"\";\n      Notification.error(`${error.statusText}: ${errorMessage}`);\n    })\n  };\n}\n","\n\n\nfunction workersConstroller($scope, $http, Notification, Api, $resource, $interval){\n  $scope.workers = [];\n\n  function getWorkerInfo(id){\n    return $resource(`/api/server/workers/${id}/info`).get(id);\n  }\n\n  function getWorker(id){\n    return $resource(`/api/server/workers/${id}`).get(id);\n  }\n\n  const $ = require('jquery');\n\n  $('body').tooltip({\n    selector : '[data-toggle=\"tooltip\"]'\n  })\n\n\n  function updateOrAdd(worker){\n\n    if ($scope.workers.length === 0) return $scope.workers.push(worker);\n\n    const index = $scope.workers.findIndex(function (wk){\n      return (wk.id === worker.id);\n    });\n\n    const old = $scope.isVeryOld (worker);\n\n    if (index > -1 && ! old){\n      return $scope.workers[index] = worker;\n    }\n\n    if (old){\n      if (index > -1 )  return $scope.workers.splice(index, 1);\n    }else{\n      return $scope.workers.push(worker);\n    }\n  }\n\n  function getWorkers(){\n    if (document.hidden) return;\n    $http({\n      method : 'GET',\n      url : '/api/server/workers'\n    }).then(function response(res){\n      res.data.map(function (id){\n        const worker = getWorkerInfo(id).$promise.then(function (data){\n          data.config = getWorker(id);\n          updateOrAdd(data);\n        });\n      });\n    });\n  };\n\n  getWorkers();\n\n  $scope.interval = $interval(getWorkers, 5000);\n\n  $scope.$on('$destroy',function(){\n    if($scope.interval)  $interval.cancel($scope.interval);\n  });\n\n  $scope.getMemoryUsage = function getMemoryUsage(worker){\n    if (! worker.si) return 0;\n    if (! worker.si.mem) return 0;\n    if ( typeof worker.si.mem !== 'object') return 0;\n    return (worker.si.mem.used /  worker.si.mem.total) * 100;\n  }\n  $scope.getCPUUsage = function getCPUUsage(worker){\n    if (! worker.si) return 0;\n    if (! worker.si.load) return 0;\n    if ( typeof worker.si.load !== 'object') return 0;\n    if ( typeof worker.si.load.current !== 'object') return 0;\n    return worker.si.load.current.currentload;\n  }\n\n  $scope.getWorkerCPUUsage = function getWorkerCPUUsage(worker){\n    if (! worker.si) return 0;\n    if (! worker.si.load) return 0;\n    if ( typeof worker.si.process !== 'object') return 0;\n    return worker.si.process.cpu;\n  }\n\n  $scope.getWorkerMemoryUsage = function getWorkerMemoryUsage(worker){\n    if (! worker.si) return 0;\n    if (! worker.si.load) return 0;\n    if ( typeof worker.si.process !== 'object') return 0;\n    return worker.si.process.mem;\n  }\n\n\n\n  $scope.getMemoryUsageHuman = function getMemoryUsageHuman(worker){\n    const usage = $scope.getMemoryUsage(worker);\n    if (!usage) return \"N/A\";\n    return usage.toFixed(2);\n  }\n\n  $scope.getCPUUsageHuman = function getCPUUsageHuman(worker){\n    const usage = $scope.getCPUUsage(worker);\n    if (!usage) return \"N/A\";\n    return usage.toFixed(2);\n  }\n\n  $scope.toKbps = function toKbps(bytes){\n    const kbps = bytes / 1024;\n    if (isNaN(kbps)) return \"-\";\n    return kbps;\n  }\n\n  $scope.rebootWorker = function rebootWorker(worker){\n    const id = worker.id;\n    $http({\n      method : 'POST',\n      url : `/api/server/workers/${id}/action`,\n      data : {\n        action : 'reboot'\n      }\n    }).then(function success(res){\n      Notification.success(`Worker with id ${id} rebooted`);\n    }, function error(error){\n      console.error(error);\n      Notification.success(`Server returned error se console`);\n\n    });\n  }\n\n\n  function getWorkerAge(worker){\n\n    const now = new Date().getTime();\n\n    if (! worker.now) return false;\n\n    const workerTime = new Date(worker.now).getTime();\n\n    if (isNaN(workerTime)) return false;\n\n    return now - workerTime;\n  }\n\n  function minutes(min){\n    return (min * 60 * 1000)\n  }\n\n  function hours(hours){\n    return minutes(hours * 60)\n  }\n\n  $scope.getWorkerAge = function (worker){\n    const time = getWorkerAge(worker);\n\n    return (time / 60 / 1000).toFixed(0);\n  };\n\n  $scope.isVeryOld = function isVeryOld(worker){\n    const age = getWorkerAge(worker);\n    if (!age) return false;\n\n    if (age > hours(24)) {\n      return true;\n    }\n    return false;\n  }\n\n  $scope.isOld = function isOld(worker){\n    const age = getWorkerAge(worker);\n    if (!age) return false;\n\n    if (age > minutes(1)) {\n      return true;\n    }\n    return false;\n  }\n\n  $scope.isOldClass = function isOld(worker){\n    const age = getWorkerAge(worker);\n    if (!age) return \"\";\n\n    if (age > minutes(1) && age < minutes(60)) {\n      return 'text-warning';\n    }\n    if (age > minutes(60)) {\n      return 'text-danger';\n    }\n    return \"\";\n  }\n\n}\n\nexport default workersConstroller;\n","\n\n\nfunction workerConstroller($scope, $http, Notification, Api, $resource, $interval, $routeParams){\n  function getWorkerInfo(id){\n    return $resource(`/api/server/workers/${id}/info`).get(id);\n  }\n\n  function getWorker(id){\n    return $resource(`/api/server/workers/${id}`).get(id);\n  }\n\n\n\n  $scope.tenants = [{\n    id : null,\n    name : 'Any'\n  }];\n\n  Api.tenants.query().$promise.then(function (tenants){\n\n    tenants.forEach(function (t){\n      $scope.tenants.push({\n        id : t.id,\n        name : t.name\n      });\n    })\n  })\n\n  $scope.rebootWorker = function rebootWorker(worker){\n    const id = $routeParams.worker;\n    $http({\n      method : 'POST',\n      url : `/api/server/workers/${id}/action`,\n      data : {\n        action : 'reboot'\n      }\n    }).then(function success(res){\n      Notification.success(`Worker with id ${id} rebooted`);\n    }, function error(error){\n      console.error(error);\n      Notification.success(`Server returned error se console`);\n\n    });\n  }\n\n  $scope.worker = getWorker($routeParams.worker);\n\n  $scope.saveWorker = function saveWorker(){\n    const workerToSave = angular.copy($scope.worker);\n\n    workerToSave.$save().then(function success(response){\n      console.log('Success', response)\n      Notification.success(`Worker saved`);\n\n      $scope.worker = getWorker($routeParams.worker);\n    }, function error(err){\n\n      const msg = err.data.message;\n      Notification.error(`Error saving worker. ${err.status}: ${msg}`)\n      console.error('Error saving worker', err)\n    })\n  }\n}\nexport default workerConstroller;\n","\n\nexport default function schedulesCtrl($scope, $http, $routeParams, $location, Api, Notification){\n  const $ = require('jquery');\n  const modal = $('#openModel');\n\n\n  $scope.item = {};\n\n  $scope.availableCrons = [  ];\n\n  $scope.availableActions = [\n    { name : 'Skima eftir breytingum', value : 'scan', desc : '' },\n    { name : 'Búa til nýjar smámyndir', value : 'thumbnails', desc : '' },\n    { name : 'Uppfæra allar myndir óháð stöðu', value : 'force', desc : '' },\n    { name : 'Uppfæra lýsigögn en ekki smámyndir', value : 'reindex', desc : '' },\n    { name : 'Hreinsa gamlar / duplicated mnyndir', value : 'cleanup', desc : '' },\n  ];\n\n  $scope.availableIndices = Api.tenant.indices.query({\n    tenantID : $routeParams.tenantID,\n  });\n\n  const indexCache = {};\n  const fetching = {};\n\n  function fetchSchedule(){\n    const item = Api.schedules.get({\n      tenantID : $routeParams.tenantID,\n      scheduleID : $routeParams.scheduleID\n    });\n\n    item.$promise.then(function (data){\n\n      if (!data.data){\n        return Notification.error(`Gat ekki sótt endurtekið verk`);\n      }\n\n      $scope.item = {\n        id : data.id,\n        _id : data._id,\n        scheduleID : data.id,\n        tenantID : $routeParams.tenantID,\n        index : data.data.index,\n        cron : data.opts.repeat.cron,\n        name : data.data.name,\n        action : data.data.action,\n      };\n    });\n  }\n  function fetchSchedules(){\n    $scope.schedules = Api.schedules.query({\n      tenantID : $routeParams.tenantID,\n    });\n  }\n\n\n  if ($routeParams.scheduleID){\n    fetchSchedule();\n  } else {\n    fetchSchedules()\n  }\n\n  // Add ever minute\n  //\n  function everyFiveMinutes(arr){\n    for (let i = 5; i < 60; i = i + 5){\n      arr.push({\n        name : `${i} mínútna fresti`,\n        cron : `*/${i} * * * *`\n      });\n    }\n  }\n\n  function everyHour(arr){\n    for (let i = 1; i < 24; i++){\n      arr.push({\n        name : `${i} klst fresti`,\n        cron : `0 */${i} * * *`\n      });\n    }\n  }\n\n  everyFiveMinutes($scope.availableCrons)\n  everyHour($scope.availableCrons)\n\n\n  $scope.scheduleID = $routeParams.scheduleID;\n\n  $scope.tenantID = $routeParams.tenantID;\n\n\n\n  $scope.remove = function remove(resource){\n    resource.tenantID = $routeParams.tenantID;\n    resource.scheduleID = resource.id;\n    const promise = resource.$remove();\n    promise.then(fetchSchedules);\n    return promise;\n  };\n  console.log($location)\n\n  $scope.update = function update(){\n\n    $scope.item.tenantID = $routeParams.tenantID;\n\n    const resource = new Api.schedules($scope.item);\n\n    const save = resource.$save();\n    save.then(function success(response){\n\n      const newUri = `/admin/settings/${$routeParams.tenantID}/schedules/${response.created.id}`;\n\n\n      $location.path(newUri)\n      fetchSchedule();\n\n      Notification.success('Saved!');\n    }, function error(error){\n      const message = (error.data && error.data.message) ? error.data.message : error.statusText;\n      Notification.error(message);\n    })\n  };\n\n  $scope.create = function create(){\n\n    $scope.item.tenantID = $routeParams.tenantID;\n\n    const resource = new Api.schedules($scope.item);\n\n    resource.$create().then(function success(success){\n      console.log('success', success);\n      modal.modal('hide');\n      Notification.success('Success!');\n      $scope.schedules = Api.schedules.query({\n        tenantID : $routeParams.tenantID,\n      });\n\n    }, function error(error){\n      console.log('error', error)\n      const message = (error.data && error.data.message) ? error.data.message : error.statusText;\n      Notification.error(message);\n    });\n  }\n};\n","export default function adminFeedController($scope, $http){\n  console.log('Feed controller')\n}\n","\n\nexport default function commentsController($scope, $http, $routeParams, $resource, $q, Notification){\n  const $ = require('jquery');\n  require('bootstrap/dist/js/bootstrap.min.js');\n  $('body').tooltip({\n    selector : '[data-toggle=\"tooltip\"]'\n  })\n\n\n  $scope.commentFound = false;\n\n  $scope.comments = [];\n\n  const Comments = $resource('/api/tenants/:tenantID/comments/:id', { tenantID : '@tenantID', size: 1000});\n\n  $scope.commentId = $routeParams.id;\n  const tenantID = $routeParams.tenantID;\n  $scope.tenantID = $routeParams.tenantID;\n\n  const fetchComment = Comments.get({tenantID : tenantID});\n  fetchComment.$promise.then(function success(response){\n    $scope.comments = response.comments;\n  }, function error(err){\n    Notification.error(`Error fetching comments`);\n    console.error('Error fetching comments', err)\n  })\n\n  $scope.imageName = function imageName(hitSource){\n    if ( typeof hitSource !== 'object' ) return \"\";\n    return hitSource.ObjectName || hitSource.fileObjectBase;\n  }\n  $scope.linkName = function linkName(hitSource){\n    if ( typeof hitSource !== 'object' ) return \"\";\n    return hitSource.imageRelLocation || hitSource.fileObjectBase;\n  }\n\n  $scope.comment = {};\n  if ($routeParams.id){\n    $scope.comment = Comments.get($routeParams);\n    $scope.comment.$promise.then(function (){\n      $scope.commentFound = true;\n    }, function (err){\n      console.error(`Unable to fetch comment`, err);\n      Notification.error(`${err.status} Unable to fetch comment`);\n      $scope.commentFound = false;\n    })\n  }\n\n  $scope.commentClass = function commentClass(comment){\n    if (comment._id === $routeParams.id) return 'list-group-item-secondary';\n    if (comment._read === false) return 'list-group-item-info';\n  }\n\n  function removeTooltips(){\n    $('[data-toggle=\"tooltip\"]').tooltip('dispose'); // used in v4\n  }\n\n\n  $scope.removeComment = function removeComment(comment){\n\n    const index = $scope.comments.findIndex(function (c){\n      return (c._id === comment._id);\n    });\n\n    const _comment = Comments.delete({tenantID : tenantID, id : comment._id});\n    _comment.$promise.then(function (){\n      $scope.comments.splice(index, 1);\n      removeTooltips();\n    })\n    return _comment;\n  }\n\n  $scope.getImageLink = function getImageLink(comment){\n    if (!comment.metadata) return;\n    const tenant = comment.metadata._source._tenantID;\n    const index = comment.metadata._source._indexID;\n    const id = comment.id;\n    return `main/albums/${tenant}/${index}?image=${id}`;\n  }\n\n\n  $scope.getImageSourceAddress = function getImageSourceAddress(comment){\n    if (!comment || !comment.metadata || !comment.metadata._source) return;\n    const image = comment.metadata._source;\n    return `${image.thumbnailsStore}/${image.thumbnails.medium.location}`;\n  }\n\n\n}\n","\nexport default function adminCtrlAlias($scope, $http, $routeParams, es, bodybuilder, $resource, Api, $q, CacheFactory, $location, Notification){\n  const $ = require('jquery');\n\n  $('body').tooltip({\n    selector : '[data-toggle=\"tooltip\"]'\n  })\n\n  const Alias = $resource('/api/tenants/:tenantID/alias/:id', {\n    tenantID : '@tenantId',\n    id : '@id'\n  },{\n    create : {\n      method : 'PUT'\n    },\n    remove : {\n      method: 'DELETE'\n    }\n  });\n\n  $scope.indexTypes = [\n    {\n      name : 'Myndasafn',\n      id : 'album'\n    },\n    {\n      name : 'Miðlun',\n      id : 'archive'\n    },\n    {\n      name : 'Skjalaskrá',\n      id : 'filemaker'\n    }\n  ];\n\n  $scope.edit = ! ($routeParams.id === undefined);\n\n  $scope.editHref = `${$location.$$path}/create`;\n\n\n  $scope.tenantID = $routeParams.tenantID;\n\n  $scope.aliases = [];\n\n  Api.tenant.indices.query({ tenantID : $scope.tenantID }).$promise.then(function (indices){\n    $scope.indices = [];\n    indices.forEach(function (i){\n      $scope.indices.push({\n        name : i.name,\n        id : i.id,\n        es_index : i.es_index,\n      });\n    })\n\n    fetchAliases();\n  });\n\n  function fetchAliases(){\n\n    $http.get(`/api/tenants/${$routeParams.tenantID}/alias`).then(function (response){\n      $scope.aliases = response.data;\n    }, function error(err){\n      console.log('Error fetching tenants alias' , err);\n    })\n  }\n\n  if (! $routeParams.id){\n    $scope.alias = {\n      indices : [{\n        filter : {}\n      }]\n    };\n  }else{\n    const alias = Alias.get($routeParams)\n    alias.$promise.then(function (a){\n      a.indices = a.indices.map(function (index){\n        index.filter = {\n          query : {\n            bool : {\n              filter: index.filter\n            }\n          }\n        };\n        return index;\n      });\n      $scope.alias = a;\n    });\n  }\n\n  $scope.selectedKey = \"\";\n\n  $scope.removeAlias = function removeAlias(alias, i){\n    const del = $http.delete(`/api/tenants/${$routeParams.tenantID}/alias/${alias.id}`)\n\n    del.then(function success(){\n      $scope.aliases.splice(i,1);\n    });\n\n    return del;\n  }\n\n  $scope.removeIndex = function (i, index){\n    console.log('Remove index?', i, index, $scope.alias.indices);\n\n    index.remove = true;\n  }\n\n\n  $scope.mapIndex = function mapIndex(indexId){\n\n    const int = $scope.indices.findIndex(function (index){\n      return (indexId === index.id);\n    })\n\n    const index = $scope.indices[int];\n    return index;\n  }\n\n  $scope.availableKeys = [];\n\n  $scope.availableValues = {};\n\n  $scope.addIndexToAlias = function addIndexToAlias(){\n    $scope.alias.indices.push({filter : {}})\n  }\n\n  $scope.setValue = function setValue(selectedValue){\n    $scope.selectedValue = selectedValue;\n  }\n\n  function removePrivateVariables(array){\n\n    console.log('Orginal', array)\n    function removeUnderScoreFromObject(object){\n      const newObject = {};\n      Object.keys(object).forEach(function (key){\n        if (key.charAt(0) === '_') return;\n        newObject[key] = object[key];\n      })\n      return newObject;\n    }\n\n    return array.map(removeUnderScoreFromObject)\n  }\n\n  $scope.submit = function submit(){\n\n    const aliasCopy = angular.copy($scope.alias);\n\n    aliasCopy.indices = aliasCopy.indices.map(function(index){\n\n      if (! index.filter) return index;\n\n      if (! index.filter.query) return index;\n\n      if (! index.filter.query.bool) return index;\n\n      if (! index.filter.query.bool.filter) return index;\n\n      index.filter = index.filter.query.bool.filter;\n\n      return index;\n    });\n\n    const body = {\n      id : aliasCopy.id,\n      tenantId : $routeParams.tenantID,\n      name : aliasCopy.name,\n      description : aliasCopy.description,\n      public : aliasCopy.public,\n      indices : aliasCopy.indices,\n      type : aliasCopy.type,\n    };\n\n\n    const resource = new Alias(body);\n\n    let requestCall = ($routeParams.id) ?  resource.$save() : resource.$create();\n\n    requestCall.then(function success(response){\n      console.log('Success!:', {response});\n\n      const message = ($routeParams.id) ? `Falskur vísir uppfærður` : `Falskur vísir stofnaður`;\n      Notification.success(message);\n    }, function error(err){\n      Notification.error(`Villa! ${err.data.message}`);\n      console.log('Error', err)\n    });\n  }\n\n  function findIndexById(id){\n    const int = $scope.indices.findIndex(function (index){\n      return (id === index.id);\n    })\n\n    return $scope.indices[int];\n  }\n\n\n\n}\n","\n\n\nexport default function preferencesController($scope){\n\n\n\n  function enableIslandIsLogin(){\n\n  }\n\n}\n","\n\n\n\nexport default function crowdsourceController($scope, $http, Api, $routeParams, Notification){\n  const indices = Api.tenant.indices.query({\n    tenantID: $routeParams.tenantId,\n  });\n\n  $scope.records = [];\n  $scope.activeIndex = false;\n  $scope.activeRecord = false;\n\n  indices.$promise.then(function success(res){\n    $scope.indices = res.filter(function (index){\n      return index.crowdsource;\n    });\n\n    if ($routeParams.indexId){\n      checkForActiveIndex().then(checkForActiveRecord)\n    }\n  });\n\n  $scope.editLink = function editLink(doc){\n    const rec = $scope.activeRecord;\n    return `/main/crowdsource/archive/${rec.indexId}/_/${rec.key}?changeId=${doc._id}&swipe=false`;\n  }\n\n  $scope.removeRecord = function removeRecord(rec, index){\n\n    const d = new Api.crowdsource({\n      tenantId : $routeParams.tenantId,\n      indexId : rec._source.indexId,\n      documentId : rec._source.recordId,\n      id : rec._source.id,\n    });\n\n    const remove = d.$remove();\n\n    remove.then(function success(res){\n      Notification.success('Skráningu eytt');\n      $scope.docs.splice(index, 1);\n\n    }, function error(err){\n      console.error(`Unable to remove record`, err);\n      Notification.error(`Gat ekki eytt skráningu`);\n    })\n  }\n\n\n  function checkForActiveRecord(activeIndexRes){\n    if (!$routeParams.documentId) return\n    const active = $scope.records.filter(function(rec){\n      return ($routeParams.documentId === rec.key);\n    }).pop();\n\n    if (!active) {\n      return Notification.error(`Fann ekki skrá: '${$routeParams.documentId}'`);\n    }\n\n    $scope.activeRecord = active;\n    return $scope.setRecordActive(active);\n  }\n\n  function checkForActiveIndex(){\n    $scope.activeIndex = $scope.indices.filter(function (index){\n      return (index.id === $routeParams.indexId);\n    }).pop();\n\n    if (! $scope.activeIndex ) {\n      return Notification.error(`Fann ekki vísi: '${$routeParams.indexId}'`);\n    }\n\n    return $scope.setIndexActive($scope.activeIndex);\n  }\n\n\n  $scope.getIndexUrl = function getIndexUrl(index){\n    return `/admin/settings/${$routeParams.tenantId}/crowdsource/${index.id}`;\n  }\n\n  $scope.getRecordUrl = function getRecordUrl(record){\n    if (!$scope.activeIndex) return;\n    return `/admin/settings/${$routeParams.tenantId}/crowdsource/${$scope.activeIndex.id}/${record.key}`;\n  }\n\n  $scope.fetchDocuments = function fetchDocuments(indexId){\n    const crowds = Api.crowdsource.query({\n      indexId,\n      tenantId: $routeParams.tenantId,\n    });\n\n    crowds.$promise.then(function success(res){\n      $scope.records = res._agg.map(function (agg){\n        agg.indexId = indexId;\n        return agg;\n      });\n    });\n\n    return crowds.$promise;\n  }\n  $scope.setRecordActive = function setRecordActive(record){\n    console.log('setRecordActive', {record});\n    $scope.records.forEach(r => {\n      r._active = false;\n    });\n\n    record._active = true;\n    return $scope.fetchDocumentRecords(record);\n  }\n\n  $scope.diffLink = function diffLink(doc){\n    const tenantId = doc._source.tenantId;\n    const indexId = doc._source.indexId;\n    const documentId = doc._source.recordId;\n    const id = doc._id;\n    return `/admin/settings/${tenantId}/crowdsource/${indexId}/${documentId}/${id}/diff`;\n  }\n\n  $scope.acceptChange = function acceptChange(doc){\n    console.log('acceptChange', doc);\n\n    const d = new Api.crowdsource({\n      tenantId : doc._source.tenantId,\n      indexId : doc._source.indexId,\n      documentId : doc._source.recordId,\n      id : doc._id,\n    });\n\n    const accept = d.$accept();\n\n    accept.then(function success(res){\n      Notification.success('Vistað');\n\n      $scope.fetchDocumentRecords({\n        indexId:doc._source.indexId,\n        key: doc._source.recordId\n      });\n    }, function error(err){\n      console.error('Unable to accept', err);\n      Notification.error('Gat ekki vistað');\n    });\n  }\n\n  $scope.itemClass = function (record){\n    const classes = [];\n\n    if (! record.isCurrent && ! record._active) {\n      classes.push('list-group-item-success')\n    }\n    if (record._active) {\n      classes.push('active')\n    }\n\n    return classes.join(' ');\n  }\n\n  $scope.docs = [];\n\n  $scope.fetchDocumentRecords = function fetchDocumentRecords(record){\n    console.log('fetchDocumentRecords',{record});\n    const crowds = Api.crowdsource.query({\n      indexId: record.indexId,\n      tenantId: $routeParams.tenantId,\n      documentId: record.key,\n    });\n\n    crowds.$promise.then(function success(res){\n      $scope.docs = res.hits.hits;\n      console.log('success', res, $scope.docs);\n    });\n  }\n\n\n  $scope.setIndexActive = function setIndexActive(index){\n    $scope.indices.forEach( i => {\n      i._active = false;\n    });\n\n    index._active = true;\n    return $scope.fetchDocuments(index.id);\n  }\n\n\n}\n","import confirmFactory from '../../shared/factories/confirm.js';\nimport filesFactory from '../../shared/factories/files.js';\nimport indexCache from '../../shared/factories/index-cache.js';\nimport searchCache from '../../shared/factories/search-cache.js';\nimport imageSelectorFactory from '../../shared/factories/imageselector.js';\nconst app = angular.module('admin');\napp.factory('indexCache', ['$cacheFactory', indexCache ]);\napp.factory('searchCache', ['CacheFactory', searchCache ]);\napp.factory('Confirm', [ confirmFactory ]);\napp.factory('Files', [ filesFactory ]);\napp.factory('ImageSelector', [imageSelectorFactory]);\n","import bytesFilter from '../../shared/filters/bytes.js';\nimport propsFilter from '../../shared/filters/props.js';\nimport shortNumberFilter from '../../shared/filters/shortnumber.js';\nimport humanNumbersFilter from '../../shared/filters/human-number.js';\n\nconst app = angular.module('admin');\n\napp.filter('bytes', [bytesFilter]);\napp.filter('propsFilter', [propsFilter]);\napp.filter('shortNumber', [shortNumberFilter])\napp.filter('humanNumbers', [humanNumbersFilter])\n","export default function props() {\n  return function(items, props) {\n    var out = [];\n\n    if (angular.isArray(items)) {\n      var keys = Object.keys(props);\n\n      items.forEach(function(item) {\n        var itemMatches = false;\n\n        for (var i = 0; i < keys.length; i++) {\n          var prop = keys[i];\n          var text = props[prop].toLowerCase();\n          if (item[prop].toString().toLowerCase().indexOf(text) !== -1) {\n            itemMatches = true;\n            break;\n          }\n        }\n\n        if (itemMatches) {\n          out.push(item);\n        }\n      });\n    } else {\n      // Let the output be the input untouched\n      out = items;\n    }\n\n    return out;\n  };\n};\n","import helpers from '../../helpers';\nhelpers.addWebPClass();\nhelpers.initLozad();\nhelpers.initTooltips();\n\nimport './module';\nimport './directives';\nimport './ctrl';\nimport './routes';\nimport './factories';\nimport './filters';\n\n\n\n\n//\n// async function start(){\n//   const mod = require('./module');\n//   const services = require('../shared/services');\n//   await services.default(mod);\n//   //console.log('LOAD:: services', services);\n//   require('../shared/config');\n//   //console.log('LOAD:: config');\n//   require('./directives');\n//   //console.log('LOAD:: directives');\n//   require('./ctrl');\n//   //console.log('LOAD:: ctrl');\n//   require('./filters');\n//   //console.log('LOAD:: filters');\n//   require('./routes');\n//   //console.log('LOAD:: routes');\n//   require('./factories');\n//   //console.log('LOAD:: factories');\n// }\n//\n//\n// start();\n","\n\nconst app = angular.module('admin');\n\napp.config([\n  '$routeProvider',\n  '$locationProvider',\n  'uiSelectConfig',\n  'NotificationProvider',\n  '$httpProvider',\n  function ($routeProvider,\n            $locationProvider,\n            uiSelectConfig,\n            NotificationProvider,\n            $httpProvider ){\n\n  $routeProvider.when('/admin/tenants/:id', {\n    templateUrl : 'views/edit-tenant.html',\n    reloadOnSearch : false,\n    controller  : 'adminCtrlEditTenant',\n  })\n  .when('/admin/preferences', {\n    templateUrl : 'views/preferences.html',\n    reloadOnSearch : false,\n    controller  : 'adminCtrlPreferences',\n  })\n  .when('/admin/tenants', {\n    templateUrl : 'views/list-tenants.html',\n    reloadOnSearch : false,\n    controller  : 'adminCtrlTenants',\n  })\n  .when('/admin/queues', {\n    templateUrl : 'views/queues.html',\n    reloadOnSearch : false,\n    controller  : 'adminCtrlQueues',\n  })\n  .when('/admin/queues/:type', {\n    templateUrl : 'views/queues.html',\n    reloadOnSearch : false,\n    controller  : 'adminCtrlQueues',\n  })\n  .when('/admin/queues/:type/:state', {\n    templateUrl : 'views/queues.html',\n    reloadOnSearch : false,\n    controller  : 'adminCtrlQueues',\n  })\n  .when('/admin/settings/:tenantID/indices', {\n    templateUrl : 'views/admin/indices/list.html',\n    reloadOnSearch : false,\n    controller  : 'adminCtrlIndices',\n  })\n  .when('/admin/settings/:tenantID/indices/:id/edit', {\n    templateUrl : 'views/admin/indices/edit.html',\n    reloadOnSearch : false,\n    controller  : 'adminCtrlIndices',\n  })\n  .when('/admin/settings/:tenantID/indices/:id/control', {\n    templateUrl : 'views/admin/indices/control.html',\n    reloadOnSearch : false,\n    controller  : 'adminCtrlIndices',\n  })\n  .when('/admin/settings/:tenantID/indices/:id/browse', {\n    templateUrl : 'views/browse-index.html',\n    reloadOnSearch : false,\n    controller  : 'browseIndexCtrl',\n  })\n  .when('/admin/settings/:tenantID/site-config', {\n    templateUrl : 'views/site-config.html',\n    reloadOnSearch : false,\n    controller  : 'adminCtrlSiteConfig',\n  })\n  .when('/admin/settings/:tenantID/comments', {\n    templateUrl : 'views/comments.html',\n    reloadOnSearch : false,\n    controller  : 'commentsCtrl',\n  })\n  .when('/admin/settings/:tenantID/comments/:id', {\n    templateUrl : 'views/comments.html',\n    reloadOnSearch : false,\n    controller  : 'commentsCtrl',\n  })\n  .when('/admin/settings/:tenantID/image-profiles', {\n    templateUrl : 'views/image-profiles.html',\n    reloadOnSearch : false,\n    controller  : 'adminCtrlImageProfiles',\n  })\n  .when('/admin/settings/:tenantID/image-profiles/:profileID', {\n    templateUrl : 'views/edit-image-profile.html',\n    reloadOnSearch : false,\n    controller  : 'adminCtrlImageProfiles',\n  })\n  .when('/admin/settings/:tenantID/schedules', {\n    templateUrl : 'views/schedules.html',\n    reloadOnSearch : false,\n    controller  : 'adminCtrlSchedules',\n  })\n  .when('/admin/settings/:tenantID/schedules/:scheduleID', {\n    templateUrl : 'views/edit-schedule.html',\n    reloadOnSearch : false,\n    controller  : 'adminCtrlSchedules',\n  })\n  .when('/admin/settings/:tenantID/logs', {\n    templateUrl : 'views/logs.html',\n    reloadOnSearch : false,\n    controller  : 'adminCtrlLogs',\n  })\n  .when('/admin/settings/:tenantID/indices/:index/files', {\n    templateUrl : 'views/files.html',\n    reloadOnSearch : true,\n    controller  : 'adminCtrlFiles',\n  })\n  .when('/admin/workers', {\n    templateUrl : 'views/workers.html',\n    reloadOnSearch : true,\n    controller  : 'adminCtrlWorkers',\n  })\n  .when('/admin/workers/:worker', {\n    templateUrl : 'views/worker.html',\n    reloadOnSearch : true,\n    controller  : 'adminCtrlWorker',\n  })\n  .when('/admin/users', {\n    templateUrl : 'views/users.html',\n    reloadOnSearch : false,\n    controller  : 'adminCtrlUsers',\n  })\n  .when('/admin/users/:id', {\n    templateUrl : 'views/user.html',\n    reloadOnSearch : false,\n    controller  : 'adminCtrlUsers',\n  })\n  .when('/admin/users/:id/edit', {\n    templateUrl : 'views/user-edit.html',\n    reloadOnSearch : false,\n    controller  : 'adminCtrlUserEdit',\n  })\n  .when('/admin/user/settings', {\n    templateUrl : 'views/settings.html',\n    reloadOnSearch : false,\n    controller  : 'adminCtrlSettings',\n  })\n  .when('/admin/dashboard', {\n    templateUrl : 'views/dashboard.html',\n    reloadOnSearch : false,\n    controller  : 'adminCtrlDashboard',\n  })\n  .when('/admin/settings/:tenantID/feed', {\n    templateUrl : 'views/feed.html',\n    reloadOnSearch : false,\n    controller  : 'feedCtrl',\n  })\n  .when('/admin/settings/:tenantID/alias', {\n    templateUrl : 'views/alias.html',\n    reloadOnSearch : false,\n    controller  : 'adminCtrlAlias',\n  })\n  .when('/admin/settings/:tenantId/crowdsource', {\n    templateUrl : 'views/admin/crowdsource.html',\n    reloadOnSearch : false,\n    controller  : 'adminCrowdsource',\n  })\n  .when('/admin/settings/:tenantId/crowdsource/:indexId', {\n    templateUrl : 'views/admin/crowdsource.html',\n    reloadOnSearch : false,\n    controller  : 'adminCrowdsource',\n  })\n  .when('/admin/settings/:tenantId/crowdsource/:indexId/:documentId', {\n    templateUrl : 'views/admin/crowdsource.html',\n    reloadOnSearch : false,\n    controller  : 'adminCrowdsource',\n  })\n  .when('/admin/settings/:tenantId/crowdsource/:indexId/:documentId/:id/diff', {\n    templateUrl : 'views/admin/crowdsource-diff.html',\n    reloadOnSearch : false,\n    controller  : 'adminCrowdsourceDiff',\n  })\n  .when('/admin/settings/:tenantID/alias/create', {\n    templateUrl : 'views/edit-alias.html',\n    reloadOnSearch : false,\n    controller  : 'adminCtrlAlias',\n  })\n  .when('/admin/settings/:tenantID/alias/:id/edit', {\n    templateUrl : 'views/edit-alias.html',\n    reloadOnSearch : false,\n    controller  : 'adminCtrlAlias',\n  })\n  .when('/admin/attribute-editor/:type/:attributekey', {\n    templateUrl: 'views/admin/attribute-editor.html',\n    reloadOnSearch: false,\n    controller: 'adminAttributeEditor',\n  })\n  .when('/admin/settings/:tenantId/blog', {\n    templateUrl: 'views/admin/blog/list.html',\n    reloadOnSearch: false,\n    controller: 'blogController',\n  })\n  .when('/admin/settings/:tenantId/blog/edit/:id', {\n    templateUrl: 'views/admin/blog/edit.html',\n    reloadOnSearch: false,\n    controller: 'blogController',\n  })\n  .when('/admin/settings/:tenantId/blog/edit', {\n    templateUrl: 'views/admin/blog/edit.html',\n    reloadOnSearch: false,\n    controller: 'blogController',\n  })\n  .when('/admin/debug/exif', {\n    templateUrl: 'views/admin/debug/exif.html',\n    reloadOnSearch: false,\n    controller: 'debugExifController',\n  })\n  .otherwise({\n    templateUrl : 'views/not-found.html',\n    controller  : 'notFound'\n  });\n\n  $locationProvider.html5Mode(true);\n  uiSelectConfig.theme = 'bootstrap';\n  uiSelectConfig.resetSearchInput = true;\n  uiSelectConfig.appendToBody = true;\n  NotificationProvider.setOptions({\n      positionX: 'left',\n      positionY: 'bottom'\n  });\n}]);\n","function filesFactory($q){\n\n  const fn = function(){};\n\n  return {\n    open : fn,\n  };\n}\n\nmodule.exports = filesFactory;\n","function imageSelectorFactory($q){\n\n  const fn = function(){};\n\n  return {\n    open : fn,\n  };\n}\n\nmodule.exports = imageSelectorFactory;\n","\n\n\nfunction parseJSON(string) {\n  try {\n    return JSON.parse(string);\n  } catch (error) {\n    return false;\n  }\n}\n\n\nfunction SSEClient(url, opts) {\n  const self = this;\n  this.source = false;\n  this.handlers = {};\n\n  this.retries = 1;\n  const timeout = 5000;\n  const maxTimeout = (300 * 1000) // 5min\n\n  \n\n  function getTimeout() {\n    const wait = (timeout * self.retries);\n    if (wait > maxTimeout) return maxTimeout;\n\n    return wait;\n  }\n\n  function onError(error) {\n    console.error('Server responded with error', error);\n\n    const wait = getTimeout();\n    const sec = (wait / 1000).toFixed();\n    console.log(`Will retry after ${sec}s`, self.source, self.source.readyState);\n    setTimeout(function () {\n      if (self.source.readyState !== 2) return;\n\n      connect(true);\n      self.retries++;\n    }, getTimeout())\n  }\n\n  async function preCheck() {\n    try {\n      const req = await fetch(url, {\n        method: 'HEAD',\n        mode: 'cors',\n        credentials: (opts && opts.withCredentials) ? 'include' : undefined\n      });\n\n      if (req.status !== 200) {\n        return {\n          message: 'Status code is not 200',\n          status: req.status,\n          req,\n        }\n      }\n      return true;\n    } catch (error) {\n\n      console.error('preflight check', error);\n      return {\n        message: 'unkown error, console',\n        status: 999\n      };\n    }\n  }\n\n\n\n  async function connect(reconnect) {\n\n    const check = await preCheck();\n    if (check !== true) return console.error(`Preflight check failed`, check);\n\n    self.source = new EventSource(url, opts);\n\n    self.source.onerror = onError;\n\n    self.source.onopen = (event) => {\n      console.log(`Connection to ${url} established`, event);\n      self.registerHandlers();\n      self.retries = 1;\n    }\n  }\n\n\n  connect();\n\n  return this;\n}\n\nSSEClient.prototype.close = function close() {\n  return this.source.close();\n}\n\nSSEClient.prototype.on = function on(name, callback) {\n  this.handlers[name] = callback;\n  return this.registerHandlers();\n}\n\nSSEClient.prototype.registerHandlers = function registerHandlers() {\n  const self = this;\n  Object.keys(this.handlers).forEach(name => {\n\n    const callback = self.handlers[name];\n\n    if (!this.source || this.source.readyState !== 1) return ;\n\n    this.source.addEventListener(name, function (event){\n\n      event.json = parseJSON(event.data);\n\n      return callback(event);\n\n    });\n  });\n}\n\nmodule.exports = SSEClient;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"js/bundle-\" + chunkId + \".js?h=\" + \"bbe6c00d8855362734e4\" + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 328;","__webpack_require__.p = \"/\";","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t328: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkphoto_engine_web\"] = self[\"webpackChunkphoto_engine_web\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [216,458,513], () => (__webpack_require__(81355)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","slug","require","blogController","$scope","$routeParams","$resource","ImageSelector","Notification","tenantId","id","defaults","draft","expires","tags","text","editCache","newUUID","crypto","randomUUID","selectIfNoImage","img","src","selectImage","Blog","create","method","remove","new","blog","console","log","get","$promise","then","res","Date","blogs","query","mainText","document","getElementById","lastEditComputed","addEventListener","event","key","ctrlKey","undefined","last","textHistory","length","updateText","$watch","a","b","slugId","item","i","req","$remove","splice","catch","error","newBlogLink","concat","carouselSaveTimeout","saveData","$create","response","$window","location","success","textTransformer","textString","anchor","pos","start","selectionStart","end","selectionEnd","diff","slice","includes","regex","RegExp","replace","join","$on","clearTimeout","setTimeout","bold","italic","link","string","current","push","$applyAsync","addImage","open","tenant","config","multiple","name","selected","uri","template","attachment","acceptedFiles","title","asset","image","showCarouselOrdering","carouselOrder","blockAutoSave","removeCarousel","carousel","saveImageEdit","saveImageRename","edit","createCarousel","map","order","saveTimeout","$watchCollection","warn","$resolved","srcA","angular","copy","srcB","JSON","stringify","$inject","module","exports","$","Dropzone","debugExifController","collapse","alert","show","message","exif","theDropzone","url","dictDefaultMessage","file","previewElement","classList","add","_step","_iterator","_createForOfIteratorHelper","querySelectorAll","s","n","done","value","textContent","err","e","f","on","parse","xhr","status","code","pop","scrollIntoView","behavior","app","httpErrorInterceptor","$q","$rootScope","requestError","reject","responseError","$emit","moduleConfig","$httpProvider","interceptors","service","run","applicationRun","factory","inView","fileUpload","$timeout","$filter","CacheFactory","restrict","templateUrl","scope","validate","thumbnail","element","attrs","getAcceptedFiles","uploadFolder","state","input","getStyle","pr","width","_startUpload","apply","arguments","startUpload","showRatio","metadata","sent","size","toFixed","fileMap","_asyncToGenerator","_regeneratorRuntime","_callee","files","_context","prev","next","filesToUpload","lastModified","type","webkitRelativePath","isComplete","added","abrupt","worker","sendMessage","stop","channel","data","newState","oldState","Object","keys","forEach","handleFileUpdates","getUploadIcon","uploading","ready","setAttribute","removeAttribute","uploadTypeText","bbHelper","directiveQueryDesigner","$http","es","bodybuilder","cacheName","cache","createCache","maxAge","index","initQuery","availableTypes","filter","filters","availableOperators","parsedFilters","loadQuery","fetchIndexKeys","fetchValuesForField","addFilter","removeFilter","buildQuery","target","_values","resolve","cacheResponse","indices","getMapping","mappings","properties","obj","put","getIndexKeys","parsedKeys","k","field","_keys","eQuery","generateQuery","selectedKey","search","body","agg","build","aggregations","bucket","buckets","values","Array","isArray","Diff","logs","queryString","newSearch","request","post","from","isSearching","meta","took","total","hits","_id","applyLogs","moreAvailable","isEnabled","elm","querySelector","observer","observe","enableMoreData","setInterval","window","scrollY","innerHeigh","options","root","IntersectionObserver","entries","entr","isIntersecting","loadMoreData","directive","textEditor","appNavbar","loadingDirective","printMetadata","lozadController","Confirm","transclude","callback","controller","statusOk","successMessage","cssClass","defaultCSS","ok","waiting","clone","append","confirm","ask","setState","notify","warning","promise","Promise","errorMessage","statusText","buttonClick","cancel","question","_callback","users","addUser","removeUser","self","addToUsers","hit","userObject","_source","email","availableUsers","user","userCache","foo","fixedUser","queryUsers","searchForUsers","getUsers","directiveFilterable","Api","userId","recycleFreq","loaded","ent","intersectionRatio","loading","load","indexId","tenantID","directory","originalPath","path","init","isFile","isInit","changed","setClass","isString","navigation","showFiles","bool","toggleFilter","selectIcon","navigate","findIndex","_typeof","rel","setPath","href","isDisabled","$parse","onChange","upload","$files","scheduler","transcludeFn","requestRunIndex","queryParam","runScan","dryRun","forceSync","cleanIndex","forceReIndex","$interval","donePr","failedPr","workingPr","waitingPr","popover","html","this","attr","refreshButton","resetButton","resetCounter","maxErrCount","errCount","Timer","isDefined","els","progressElement","hidden","is","isFetching","reduce","stats","skippedPr","skipped","completed","failed","stalledPr","stalled","started","elementId","albumCoverImage","cron","cronstrue","update","humanString","toString","back","history","markdown","indexCount","bind","$apply","imageonload","imageonerror","queryDesigner","reset","tempFilter","o","termCache","mapping","substring","array","keyword","assign","termsAvailable","fetchKeyValues","availableValues","_indices","searchRequest","infoDirective","color","removed","diffAfter","diffLines","createFilter","dragSource","dragTarget","draggable","sourceArray","prototype","call","getElementsByTagName","preventDefault","fromIndex","toIndex","arrayMove","alertDirective","jobLogsController","$location","jobId","_res$data$hits$total","queues","checked","toggleCheck","q","jobs","isUpdatingLogs","selectCSSClass","level","getDirectory","parts","split","displayId","match","parseID","getUserName","Search","imageSelector","createImageUri","modal","isMoreAvailable","currentHits","getThumbUri","enableAlbum","enableArchive","indexTypes","album","archive","toggleIndex","submit","autoLoader","uploadValidate","allow","_toConsumableArray","uploadSuccess","uploadError","searchClean","isLoadingMore","entry","currentSearch","modalError","modalErrorMessage","isOpen","autoLoadDisabled","searchPromise","getSelectedNames","fileObjectBase","Title","debugselected","_selected","lastImageSelected","pickMe","$event","currentIndex","isMultiple","shiftKey","startIndex","exists","h","imageUrl","submittedQuery","assets","loadImages","images","allowAssets","isImage","opts","uploadUri","addRemoveLinks","responseData","fileObject","initDropzone","destroy","yes","thumbs","ensureUri","source","sourceType","sel","no","async","SSEClient","panelController","userinfo","hasPermission","now","thisMonth","info","selectedTenant","tenants","profiles","tenantFileSize","tenantFileCount","indicesFetched","eventPaneActive","jobCount","count","day","Math","floor","getTime","week","month","getMonth","setMonth","setDate","setHours","setMinutes","setSeconds","setMilliseconds","gitLog","isTabActive","isNav","currentTab","hash","classes","hasNewCommit","latest","localStorage","getItem","getNewChangesCount","markChangesRead","setItem","getVersion","all","versionstring","reg","l","test","refs","version","myInfo","islandIsRegisterToken","me","provider","token","isFacebookLogin","hasNotification","notifications","required","permissions","globalRole","global","tenantRole","sseClientCache","_fetchAllJobCount","types","to","forEachSeries","fetchAllIndicesJobCount","_x2","_x3","_x4","_fetchAllIndicesJobCount","_callee2","_context2","indexJobCount","events","fileName","ev","client","close","isFetchingTotalCount","sseClient","sort","date","unshift","json","fetchTotalRecordCount","getTotalSize","_x","fetchAllJobCount","eventTimestamp","job","timestamp","getSearchCount","_all","query_total","_shards","totalRecordCount","indicesMetadata","indicesString","indicesStats","axios","imageProfileController","fileSelectorElm","getPreviewImage","profile","watermark","opacity","gravity","maxsize","overRideWatermark","profileID","toNumber","int","def","number","parseInt","isNaN","_ref","form","uuid","getUploadUri","FormData","t0","finish","fetchingImage","imageLoadErrorMessage","newWatermark","currentWatermarkSource","mewWatermarkSource","hasWatermark","orginalWatermark","imageLoaded","imageError","getPreview","availableGravity","backUri","previewImageSource","quality","watermarkToPercentage","float","newWatermarkLocation","resource","$save","siteConfigController","selectedImage","availableSortFns","availableArhiveSorts","defaultLevels","lookupName","aggKeys","sortByName","nameA","toUpperCase","nameB","getMappingAsArray","object","arr","pushItem","fields","allMappings","rawMappingsArray","record","_index","archiveKeys","albumKeys","availableAggKeys","availableAggSortKeys","availableArchiveAggSortKeys","defaultMappings","_$scope$config$archiv","albums","showadvancedmetadata","allowImageDownload","levels","saveConfig","save","flush","uniqName","ext","setFileUri","background","removeItem","addLevel","_selectImage","siteConfig","Url","URL","webkitURL","toMegabyte","bytes","maxSize","megabyte","validateImage","dummyImage","Image","onload","height","createObjectURL","attributeEditor","AttributeApi","fetchAttributeApi","attributeForm","attributekey","formReady","fileUploadDone","uploadResponse","fileValidate","isValid","output","filesToArray","every","configResponse","cookieController","Files","dir","notFoundCtrl","getEditBy","edit_by","admins","userID","deleteTenant","animate","createNewTenant","createTenant","$invalid","disableUserAdd","orderByKey","orderAsc","toggleSort","getSortClass","tooltip","selector","getRootLink","getFolders","_dir","d","other","dirPath","isImageProfile","removeFolderSelected","openFileSelector","availableKeys","getType","typeObject","_doc","randomstring","checkFiles","_checkFiles","fileArray","_iterator2","_step2","fileCheck","someRandomName","generate","_validateImage","stateHash","fileState","_state","setValues","showFileBrowser","showActions","createIndex","fetchTenant","taggedworker","checkbox","queryForUsers","currentUserIds","filtered","_desc","defaultUser","selectedUser","fetchAvailableUsers","changeRole","role","_isModified","saveUser","payload","fail","isCreator","creator","created","updated","logsCtrl","settings","removeMe","collection","saveWarehouseMappings","deleteUser","getImage","picture","max_indices","admin","subscription","lastLogin","baseHref","origin","esFetch","mget","_sourceInclude","ids","docs","doc","elasticCache","getElasticRecords","pathDirs","dirs","linkDirs","searchParams","set","getDirs","openCol","keyup","keyCode","fetchRecord","indexFile","recordId","pathname","removeFromIndex","getLogUrl","showMetadata","gotMetadata","fetchingMetadata","found","fetchingMetadataError","slimJson","confirmCtrl","getWorkers","getWorkerInfo","getWorker","workers","wk","old","isVeryOld","updateOrAdd","getWorkerAge","workerTime","minutes","min","interval","getMemoryUsage","si","mem","used","getCPUUsage","currentload","getWorkerCPUUsage","process","cpu","getWorkerMemoryUsage","getMemoryUsageHuman","usage","getCPUUsageHuman","toKbps","kbps","rebootWorker","action","age","hours","isOld","isOldClass","t","saveWorker","msg","fetchSchedule","schedules","scheduleID","repeat","fetchSchedules","availableCrons","availableActions","desc","availableIndices","everyFiveMinutes","everyHour","newUri","default_operator","_name","queryBody","updateMetadata","getSelectedItems","_checked","lastResult","filterToEdit","scrollDisabled","noMoreResults","editFilter","showAddFilter","ObjectName","fileObjectName","bulkActionDisabled","_metadataShowing","selectAllITems","selectAll","imageId","_updating","bulkActionDelete","records","forEachLimit","rec","_error","fmCate","bulkActionUpdate","reIndexRecord","loadMoreResults","aValue","bValue","cb","infoCtrl","commentFound","comments","Comments","commentId","imageName","hitSource","linkName","imageRelLocation","comment","commentClass","_read","removeComment","c","_comment","delete","getImageLink","_tenantID","_indexID","getImageSourceAddress","thumbnailsStore","thumbnails","medium","Alias","editHref","$$path","aliases","es_index","alias","removeAlias","del","removeIndex","mapIndex","addIndexToAlias","setValue","selectedValue","aliasCopy","description","public","Queues","Jobs","fetchJobs","defaultSize","refreshIfActive","queueStats","relLink","base","appendLink","printStackTrace","trace","buildUrl","urlArray","shift","deleteJob","$delete","checkForActiveRecord","activeIndexRes","documentId","active","activeRecord","setRecordActive","activeIndex","crowdsource","setIndexActive","editLink","removeRecord","getIndexUrl","getRecordUrl","fetchDocuments","crowds","_agg","r","_active","fetchDocumentRecords","diffLink","acceptChange","$accept","itemClass","isCurrent","textLoaded","denyUrl","propose","accept","pr1","pr2","dashboardCtrl","imageProfilesCtrl","imageSelectorCtrl","siteConfigCtrl","indexCache","searchCache","confirmFactory","filesFactory","imageSelectorFactory","bytesFilter","items","props","out","itemMatches","prop","toLowerCase","indexOf","shortNumberFilter","humanNumbersFilter","helpers","addWebPClass","initLozad","initTooltips","$routeProvider","$locationProvider","uiSelectConfig","NotificationProvider","when","reloadOnSearch","otherwise","html5Mode","theme","resetSearchInput","appendToBody","setOptions","positionX","positionY","handlers","retries","timeout","maxTimeout","getTimeout","wait","onError","sec","readyState","connect","preCheck","_preCheck","mark","wrap","fetch","mode","credentials","withCredentials","_connect","reconnect","check","EventSource","onerror","onopen","registerHandlers","_this","parseJSON","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","m","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","getter","__esModule","definition","defineProperty","enumerable","u","chunkId","g","globalThis","Function","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","p","baseURI","installedChunks","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}