PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.7.2
Independent Analytics – WordPress Analytics Plugin v2.7.2
2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / javascript-source / modules / duplicate-field.js
independent-analytics / javascript-source / modules Last commit date
duplicate-field.js 2 years ago email-reports.js 2 years ago notices.js 2 years ago scroll-to-top.js 2 years ago sticky-sidebar.js 2 years ago support.js 2 years ago user-roles.js 1 year ago
duplicate-field.js
78 lines
1 const $ = jQuery;
2
3 const FieldDuplicator = {
4 setup: function() {
5 var self = this;
6 var duplicators = $('.duplicator');
7 duplicators.each(function(index, duplicator) {
8 $(this).find('.duplicate-button').on('click', function(e){
9 e.preventDefault();
10 self.createNewEntry($(duplicator));
11 });
12 });
13 var entries = $('.entry');
14 entries.each(function() {
15 self.attachRemoveEvent($(this));
16 });
17 },
18 createNewEntry: function(duplicator) {
19 var entryField = duplicator.find('.new-field');
20 if(this.errorChecks(entryField)) {
21 return;
22 }
23 var clone = duplicator.find('.blueprint .entry').clone();
24 clone.find('input').val(entryField.val());
25 duplicator.next().append(clone);
26
27 if (entryField.hasClass('select')) {
28 entryField.find('option[value="'+ entryField.val() +'"').remove();
29 } else {
30 entryField.val('');
31 }
32
33 this.resetIndex(duplicator.next('.saved'));
34 this.attachRemoveEvent(clone);
35 duplicator.parents('form').removeClass('empty exists');
36 this.hideNoneMessage(duplicator);
37 },
38 attachRemoveEvent: function(entry) {
39 var self = this;
40 entry.find('.remove').on('click', function(e){
41 e.preventDefault();
42 var saved = $(entry).parent('.saved');
43 $(this).parents('form').addClass('unsaved');
44 $(this).parent().remove();
45 self.resetIndex(saved);
46 });
47 },
48 resetIndex: function(saved) {
49 var count = 0;
50 saved.find('input').each(function() {
51 $(this).attr('name', $(this).attr('data-option') + '['+count+']');
52 $(this).attr('id', $(this).attr('data-option') + '['+count+']');
53 count++;
54 });
55 saved.parents('form').addClass('unsaved');
56 },
57 errorChecks(entryField) {
58 if (entryField.val() == '') {
59 entryField.parents('form').addClass('empty');
60 return true;
61 }
62 var existingValues = [];
63 entryField.parent().parent().next('.saved').find('.entry').each(function() {
64 existingValues.push($(this).find('input').val());
65 });
66 if (existingValues.includes(entryField.val())) {
67 entryField.parents('form').addClass('exists');
68 return true;
69 }
70
71 return false;
72 },
73 hideNoneMessage: function(duplicator) {
74 duplicator.parent().find('.none').hide();
75 }
76 }
77
78 export { FieldDuplicator };