summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/duplicate_reports.js
blob: ad5f171118f2c18a8ac8aafa1934eb30beea4c53 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/**
 * Interactive behavior for duplicate reports.
 */

import { $, $$, showEl } from './utils/dom';

const selectedDupeReports = [];

function setupDupeReports() {
  const [ onion, slider ] = $$('.onion-skin__image, .onion-skin__slider');
  const swipe = $('.swipe__image');

  if (swipe) setupSwipe(swipe);
  if (onion) setupOnionSkin(onion, slider);

  setupMassSelection();
}

function setupSwipe(swipe) {
  const [ clip, divider ] = $$('#clip rect, #divider', swipe);
  const { width } = swipe.viewBox.baseVal;

  function moveDivider({ clientX }) {
    // Move center to cursor
    const rect = swipe.getBoundingClientRect();
    const newX = (clientX - rect.left) * (width / rect.width);

    divider.setAttribute('x', newX);
    clip.setAttribute('width', newX);
  }

  swipe.addEventListener('mousemove', moveDivider);
}

function setupOnionSkin(onion, slider) {
  const target = $('#target', onion);

  function setOpacity() {
    target.setAttribute('opacity', slider.value);
  }

  setOpacity();
  slider.addEventListener('input', setOpacity);
}

function setupMassSelection() {
    const submitForm = $(".js-mass-dupe-submit");

    if (!submitForm) return;

    const submitButton = $('a', submitForm);
    const hiddenField = $('input[name=duplicate_report_ids]', submitForm);

    submitButton.addEventListener('click', evt => {
        submitForm.submit();
        evt.preventDefault();
    });

    [].forEach.call($$(".js-mass-dupe-reject"), elem => {
        elem.addEventListener('change', evt => {
            const dupeReportId = evt.currentTarget.dataset.dupeReportId;

            if (evt.currentTarget.checked) {
                selectedDupeReports.push(dupeReportId);
            } else {
                selectedDupeReports.splice(selectedDupeReports.indexOf(dupeReportId), 1);
            }

            hiddenField.setAttribute('value', selectedDupeReports.join(','));
        });

        showEl(elem);
    });

    showEl(submitForm);
}

export { setupDupeReports };