1 const _ = require('lodash');
4 * @param PermissionsOutput permissionsOutput
7 let DomClient = function(document, permissionsOutput, drupal) {
8 this.document = document;
10 this.permissionsOutput = permissionsOutput;
13 DomClient.prototype.renderPermissionsInfo = function() {
15 let allowedUsersHtml = '<b>' + this.drupal.t('Allowed users:') + '</b> ';
17 if (!_.isEmpty(this.permissionsOutput.getUsernames())) {
18 allowedUsersHtml += this.permissionsOutput.getUsernames().join(', ');
20 allowedUsersHtml += '<i>' + this.drupal.t('No user restrictions.') + '</i>';
23 let allowedRolesHtml = '<b>' + this.drupal.t('Allowed roles:') + '</b> ';
25 if (!_.isEmpty(this.permissionsOutput.getRoles())) {
26 allowedRolesHtml += this.permissionsOutput.getRoles().join(', ');
28 allowedRolesHtml += '<i>' + this.drupal.t('No role restrictions.') + '</i>';;
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.");
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);
39 DomClient.prototype._computeTidsByAutocomplete = function(fieldWrapperCSSClass) {
42 let autocompleteInputs = this.document.querySelectorAll(fieldWrapperCSSClass + ' input.form-autocomplete');
44 for (let autocompleteInput of autocompleteInputs) {
46 if (autocompleteInput.value !== undefined && _.includes(autocompleteInput.value, '(') && _.includes(autocompleteInput.value, ')')) {
48 let tidsInBrackets = autocompleteInput.value.match(/\(\d+\)/g);
50 if (tidsInBrackets !== undefined && tidsInBrackets !== null && tidsInBrackets.constructor === Array) {
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));
68 DomClient.prototype._computeTidsBySelect = function(fieldWrapperCSSClass) {
70 inputTypes = ['select', 'input'];
72 for (let inputTypesIndex = 0; inputTypesIndex <= inputTypes.length; inputTypesIndex++) {
73 let value = this.document.querySelector(fieldWrapperCSSClass + ' select').value;
75 if (typeof value === "string") {
78 throw "Value must be type of string.";
86 DomClient.prototype._computeTidsByCheckbox = function(formElementCssClass) {
89 for (let checkbox of this.document.querySelectorAll(formElementCssClass + ' input[type="checkbox"]')) {
90 if (checkbox.checked === true) {
91 tids.push(checkbox.value);
98 DomClient.prototype.computeTids = function(formElementCssClass) {
102 checkbox: '_computeTidsByCheckbox',
103 text: '_computeTidsByAutocomplete',
104 select: '_computeTidsBySelect',
107 let inputType = this._getInputType(formElementCssClass);
109 tids.push(this[lookup[inputType]](formElementCssClass));
114 DomClient.prototype._getInputType = function(formElementCssClass) {
115 let formElement = null;
117 if (!_.isEmpty(this.document.querySelector(formElementCssClass + ' select'))) {
118 formElement = 'select';
121 if (!_.isEmpty(this.document.querySelector(formElementCssClass + ' input'))) {
122 formElement = 'input';
125 if (formElement === 'input') {
126 if (_.get(this.document.querySelector(formElementCssClass + ' input.form-autocomplete'), 'type') && this.document.querySelector(formElementCssClass + ' input.form-autocomplete').type === "text") {
129 if (this.document.querySelector(formElementCssClass + ' input').type === "checkbox") {
132 if (this.document.querySelector(formElementCssClass + ' input').type === "radio") {
136 if (!_.isEmpty(formElement) && this.document.querySelector(formElementCssClass + ' select').tagName === "SELECT") {
142 export default DomClient;