Security update for permissions_by_term
[yaffs-website] / web / modules / contrib / permissions_by_term / js / node-form.js
1 /**
2  * @file
3  * Info behaviors on node edit form.
4  */
5
6 (function ($, window) {
7
8   'use strict';
9
10   var relationFieldsPathByContentType = "/admin/permissions-by-term/access-info-by-content-type/",
11       relationFieldsPathByUrl = "/admin/permissions-by-term/access-info-by-url?url=";
12
13   /**
14    * @type {Drupal~behavior}
15    */
16   Drupal.behaviors.nodeForm = {
17     attach: function () {
18
19       var contentType = getContentType(),
20           getFormInfo = null;
21
22       if (contentType !== null) {
23         getFormInfo = $.get(relationFieldsPathByContentType + contentType);
24       } else {
25         getFormInfo = $.get(relationFieldsPathByUrl + window.location.pathname);
26       }
27
28       $.when(getFormInfo).done(function(formInfo){
29
30         if (formInfo['taxonomyRelationFieldNames'] !== null) {
31
32           var nodeForm = new NodeForm($),
33               fieldWrapperCSSClasses = nodeForm.computeFieldWrapperCSSClasses(formInfo['taxonomyRelationFieldNames']);
34
35           initPermissionInfoByFormElements(nodeForm, fieldWrapperCSSClasses, formInfo);
36
37           for (var index = 0; index < fieldWrapperCSSClasses.length; ++index) {
38
39             var formElementCssClass = fieldWrapperCSSClasses[index];
40
41             nodeForm.addFormElementCssClass(formElementCssClass);
42
43             $(formElementCssClass + ' select').change(function (){
44               nodeForm.displayPermissionsBySelect(fieldWrapperCSSClasses, formInfo['permissions']);
45             });
46
47             $(formElementCssClass + ' input[type="text"]').on('autocomplete-select', function (){
48               nodeForm.displayPermissionsByAutocomplete(fieldWrapperCSSClasses, formInfo['permissions']);
49             });
50
51             $(formElementCssClass + ' input[type="text"]').on('keyup', function (){
52               nodeForm.displayPermissionsByAutocomplete(fieldWrapperCSSClasses, formInfo['permissions']);
53             });
54
55             $(formElementCssClass + ' input[type="checkbox"]').change(function (){
56               nodeForm.displayPermissionsByCheckbox($(this).prop('value'), $(this).prop('checked'), formInfo['permissions']);
57             });
58           }
59         }
60
61       });
62
63       function initPermissionInfoByFormElements(nodeForm, fieldWrapperCSSClasses, formInfo) {
64         nodeForm.displayPermissionsBySelect(fieldWrapperCSSClasses, formInfo['permissions']);
65         nodeForm.displayPermissionsByAutocomplete(fieldWrapperCSSClasses, formInfo['permissions']);
66         nodeForm.displayPermissionsByCheckbox($(this).prop('value'), $(this).prop('checked'), formInfo['permissions']);
67       }
68
69       function getContentType() {
70         if (window.location.href.indexOf('/node/add') !== -1) {
71           return window.location.href.split("/").pop();
72         }
73
74         return null;
75       }
76
77     }
78   };
79
80   /**
81    * Handles an auto-complete select event.
82    *
83    * Override the autocomplete method to add a custom event. Overriding is
84    * happening to get full input.
85    *
86    * @param {jQuery.Event} event
87    *   The event triggered.
88    * @param {object} ui
89    *   The jQuery UI settings object.
90    *
91    * @return {boolean}
92    *   Returns false to indicate the event status.
93    */
94   Drupal.autocomplete.options.select = function selectHandler(event, ui) {
95     var terms = Drupal.autocomplete.splitValues(event.target.value);
96     // Remove the current input.
97     terms.pop();
98     // Add the selected item.
99     if (ui.item.value.search(',') > 0) {
100       terms.push('"' + ui.item.value + '"');
101     }
102     else {
103       terms.push(ui.item.value);
104     }
105     event.target.value = terms.join(', ');
106     // Fire custom event that other controllers can listen to.
107     jQuery(event.target).trigger('autocomplete-select');
108
109     // Return false to tell jQuery UI that we've filled in the value already.
110     return false;
111   }
112
113 })(jQuery, window);