Passed
Push — develop ( 9a1b4b...96b452 )
by Xaver
03:40
created

lib/infobox/location.js   A

Complexity

Total Complexity 8
Complexity/F 1.33

Size

Lines of Code 71
Function Count 6

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 8
eloc 55
mnd 2
bc 2
fnc 6
dl 0
loc 71
rs 10
bpm 0.3333
cpm 1.3333
noi 0
c 0
b 0
f 0

2 Functions

Rating   Name   Duplication   Size   Complexity  
B location.js ➔ createBox 0 21 6
A location.js ➔ copy2clip 0 9 2
1
define(['helper'], function (helper) {
2
  'use strict';
3
4
  return function (el, d) {
5
    var sidebarTitle = document.createElement('h2');
6
    sidebarTitle.textContent = _.t('location.location');
7
    el.appendChild(sidebarTitle);
8
9
    helper.getJSON(config.reverseGeocodingApi + '?format=json&lat=' + d.lat + '&lon=' + d.lng + '&zoom=18&addressdetails=0&accept-language=' + _.locale())
10
      .then(function (result) {
11
        if (result.display_name) {
12
          sidebarTitle.outerHTML += '<p>' + result.display_name + '</p>';
13
        }
14
      });
15
16
    var editLat = document.createElement('input');
17
    editLat.setAttribute('aria-label', _.t('location.latitude'));
18
    editLat.type = 'text';
19
    editLat.value = d.lat.toFixed(9);
20
    el.appendChild(createBox('lat', _.t('location.latitude'), editLat));
21
22
    var editLng = document.createElement('input');
23
    editLng.setAttribute('aria-label', _.t('location.longitude'));
24
    editLng.type = 'text';
25
    editLng.value = d.lng.toFixed(9);
26
    el.appendChild(createBox('lng', _.t('location.longitude'), editLng));
27
28
    var editUci = document.createElement('textarea');
29
    editUci.setAttribute('aria-label', 'Uci');
30
    editUci.value =
31
      "uci set gluon-node-info.@location[0]='location'; " +
32
      "uci set gluon-node-info.@location[0].share_location='1';" +
33
      "uci set gluon-node-info.@location[0].latitude='" + d.lat.toFixed(9) + "';" +
34
      "uci set gluon-node-info.@location[0].longitude='" + d.lng.toFixed(9) + "';" +
35
      'uci commit gluon-node-info';
36
37
    el.appendChild(createBox('uci', 'Uci', editUci));
38
39
    function createBox(name, title, inputElem) {
40
      var box = document.createElement('div');
41
      var heading = document.createElement('h3');
42
      heading.textContent = title;
43
      box.appendChild(heading);
44
      var btn = document.createElement('button');
45
      btn.classList.add('ion-clipboard');
46
      btn.title = _.t('location.copy');
47
      btn.setAttribute('aria-label', _.t('location.copy'));
48
      btn.onclick = function onclick() {
49
        copy2clip(inputElem.id);
50
      };
51
      inputElem.id = 'location-' + name;
52
      inputElem.readOnly = true;
53
      var line = document.createElement('p');
54
      line.appendChild(inputElem);
55
      line.appendChild(btn);
56
      box.appendChild(line);
57
      box.id = 'box-' + name;
58
      return box;
59
    }
60
61
    function copy2clip(id) {
62
      var copyField = document.querySelector('#' + id);
63
      copyField.select();
64
      try {
65
        document.execCommand('copy');
66
      } catch (err) {
67
        console.warn(err);
68
      }
69
    }
70
  };
71
});
72