Updated all the contrib modules to their latest versions.
[yaffs-website] / web / modules / contrib / permissions_by_term / js / src / client / dom-client.prototype.js
1 const _ = require('lodash');
2
3 /**
4  * @param PermissionsOutput permissionsOutput
5  * @param document
6  */
7 let DomClient = function(document, permissionsOutput, drupal) {
8   this.document = document;
9   this.drupal = drupal;
10   this.permissionsOutput = permissionsOutput;
11 }
12
13 DomClient.prototype.renderPermissionsInfo = function() {
14
15   let allowedUsersHtml = '<b>' + this.drupal.t('Allowed users:') + '</b> ';
16
17   if (!_.isEmpty(this.permissionsOutput.getUsernames())) {
18     allowedUsersHtml += this.permissionsOutput.getUsernames().join(', ');
19   } else {
20     allowedUsersHtml += '<i>' + this.drupal.t('No user restrictions.') + '</i>';
21   }
22
23   let allowedRolesHtml = '<b>' + this.drupal.t('Allowed roles:') + '</b> ';
24
25   if (!_.isEmpty(this.permissionsOutput.getRoles())) {
26     allowedRolesHtml += this.permissionsOutput.getRoles().join(', ');
27   } else {
28     allowedRolesHtml += '<i>' + this.drupal.t('No role restrictions.') + '</i>';;
29   }
30
31   let generalInfoText = this.drupal.t("This widget shows information about taxonomy term related permissions. It's being updated, as soon you make any related changes in the form.");
32
33   let newTermInfo = this.document.createElement('div');
34   newTermInfo.innerHTML = '<div id="edit-permissions-by-term-info"><div class="form-type-item">' + generalInfoText + '<br /><br />' + allowedUsersHtml + '<br />' + allowedRolesHtml + '</div></div>';
35   this.document.querySelector('#edit-permissions-by-term-info .form-type-item').replaceWith(newTermInfo);
36
37 }
38
39 DomClient.prototype._computeTidsByAutocomplete = function(fieldWrapperCSSClass) {
40   let selectedTids = []
41
42   let autocompleteInputs = this.document.querySelectorAll(fieldWrapperCSSClass + ' input.form-autocomplete');
43
44   for (let autocompleteInput of autocompleteInputs) {
45
46     if (autocompleteInput.value !== undefined && _.includes(autocompleteInput.value, '(') && _.includes(autocompleteInput.value, ')')) {
47
48       let tidsInBrackets = autocompleteInput.value.match(/\(\d+\)/g);
49
50       if (tidsInBrackets !== undefined && tidsInBrackets !== null && tidsInBrackets.constructor === Array) {
51
52         for (let i = 0; i < tidsInBrackets.length; ++i) {
53           let selectedTid = parseInt(tidsInBrackets[i].replace('(', '').replace(')', ''));
54           if (!_.includes(selectedTids, selectedTid)) {
55             selectedTids.push(String(selectedTid));
56           }
57         }
58
59       }
60
61     }
62
63   }
64
65   return selectedTids;
66 }
67
68 DomClient.prototype._computeTidsBySelect = function(fieldWrapperCSSClass) {
69   let tids = [],
70     inputTypes = ['select', 'input'];
71
72   for (let inputTypesIndex = 0; inputTypesIndex <= inputTypes.length; inputTypesIndex++) {
73     let value = this.document.querySelector(fieldWrapperCSSClass + ' select').value;
74
75     if (typeof value === "string") {
76       tids.push(value);
77     } else {
78       throw "Value must be type of string.";
79     }
80
81   }
82
83   return tids;
84 }
85
86 DomClient.prototype._computeTidsByCheckbox = function(formElementCssClass) {
87   let tids = [];
88
89   for (let checkbox of this.document.querySelectorAll(formElementCssClass + ' input[type="checkbox"]')) {
90     if (checkbox.checked === true) {
91       tids.push(checkbox.value);
92     }
93   }
94
95   return tids;
96 }
97
98 DomClient.prototype.computeTids = function(formElementCssClass) {
99   let tids = [];
100
101   let lookup = {
102     checkbox: '_computeTidsByCheckbox',
103     text: '_computeTidsByAutocomplete',
104     select: '_computeTidsBySelect',
105   };
106
107   let inputType = this._getInputType(formElementCssClass);
108
109   tids.push(this[lookup[inputType]](formElementCssClass));
110
111   return tids;
112 }
113
114 DomClient.prototype._getInputType = function(formElementCssClass) {
115   let formElement = null;
116
117   if (!_.isEmpty(this.document.querySelector(formElementCssClass + ' select'))) {
118     formElement = 'select';
119   }
120
121   if (!_.isEmpty(this.document.querySelector(formElementCssClass + ' input'))) {
122     formElement = 'input';
123   }
124
125   if (formElement === 'input') {
126     if (_.get(this.document.querySelector(formElementCssClass + ' input.form-autocomplete'), 'type') && this.document.querySelector(formElementCssClass + ' input.form-autocomplete').type === "text") {
127       return 'text';
128     }
129     if (this.document.querySelector(formElementCssClass + ' input').type === "checkbox") {
130       return 'checkbox';
131     }
132     if (this.document.querySelector(formElementCssClass + ' input').type === "radio") {
133       return 'radio';
134     }
135   }
136   if (!_.isEmpty(formElement) && this.document.querySelector(formElementCssClass + ' select').tagName === "SELECT") {
137     return 'select';
138   }
139
140 }
141
142 export default DomClient;