Browse Source

Fixes #4048 - Prefix the contact form css with 'zammad' for a better selection.

Dominik Klein 2 years ago
parent
commit
b11fef3c7c

+ 2 - 0
app/assets/javascripts/app/controllers/_channel/form.coffee

@@ -73,12 +73,14 @@ class ChannelForm extends App.ControllerSubContent
       @$('.js-formBtn').removeClass('hide')
       @$('.js-formBtn').ZammadForm(params)
       @$('.js-formBtn').text('Feedback')
+      @$('.js-formInline').toggleClass('no-css', params.noCSS)
     else
       @$('.js-modal').addClass('hide')
       @$('.js-inlineForm').removeClass('hide')
       @$('.js-formBtn').addClass('hide')
       @$('.js-formInline').removeClass('hide')
       @$('.js-formInline').ZammadForm(params)
+      @$('.js-formInline').toggleClass('no-css', params.noCSS)
 
   toggleFormSetting: =>
     value = @formSetting.prop('checked')

+ 6 - 6
app/assets/javascripts/app/views/channel/form.jst.eco

@@ -122,7 +122,7 @@
       <div class="browser-body js-browserBody">
         <div class="browser-website centered vertical fit">
           <div class="btn js-formBtn"><%- @T('Feedback') %></div>
-          <div class="js-formInline" style="width: 300px;"></div>
+          <div class="js-formInline browser-inline-form"></div>
           <script id="zammad_form_script" src="/assets/form/form.js"></script>
         </div>
       </div>
@@ -134,28 +134,28 @@
 
   <p><%- @T('You need to add the following Javascript code snippet to your web page') %>:</p>
 
-  <pre class="js-modal"><code class="language-html js-code js-paramsBlock">&lt;button id="feedback-form"&gt;Feedback&lt;/button&gt;
+  <pre class="js-modal"><code class="language-html js-code js-paramsBlock">&lt;button id="zammad-feedback-form"&gt;Feedback&lt;/button&gt;
 
 &lt;script id="zammad_form_script" src="<%= @baseurl %>/assets/form/form.js"&gt;&lt;/script&gt;
 
 &lt;script&gt;
 $(function() {
-  $('#feedback-form').ZammadForm({
+  $('#zammad-feedback-form').ZammadForm({
 <span class="js-modal-params"></span>
   });
 });
 &lt;/script&gt;</code></pre>
 </div>
 
-  <pre class="js-inlineForm"><code class="language-html js-code js-paramsBlock">&lt;div id="feedback-form"&gt;form will be placed in here&lt;/div&gt;
+  <pre class="js-inlineForm"><code class="language-html js-code js-paramsBlock">&lt;div id="zammad-feedback-form"&gt;form will be placed in here&lt;/div&gt;
 
 &lt;script id="zammad_form_script" src="<%= @baseurl %>/assets/form/form.js"&gt;&lt;/script&gt;
 
 &lt;script&gt;
 $(function() {
-  $('#feedback-form').ZammadForm({
+  $('#zammad-feedback-form').ZammadForm({
 <span class="js-modal-params"></span>
   });
 });
 &lt;/script&gt;</code></pre>
-</div>
+</div>

+ 27 - 0
app/assets/stylesheets/zammad.scss

@@ -11989,6 +11989,33 @@ output {
   }
 }
 
+.browser-inline-form {
+  width: 300px;
+
+  &.no-css {
+    all: initial;
+
+    * {
+      all: unset;
+    }
+
+    input,
+    textarea,
+    button {
+      padding: 2px;
+      background: white;
+      border: 1px solid;
+      font: 400 11px system-ui;
+    }
+
+    button {
+      padding: 2px 6px 3px;
+      background-color: buttonface;
+      border: 2px outset buttonface;
+    }
+  }
+}
+
 .chat-demo {
   .zammad-chat {
     position: absolute;

+ 42 - 0
public/assets/form/form-no-css.html

@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width,initial-scale=1.0">
+  <title>Example Form (no CSS)</title>
+</head>
+<body>
+
+<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
+
+<h1>Feedback as Modal (no CSS)</h1>
+<button id="feedback-form-modal">Feedback as Modal</button>
+
+<h1>Feedback Inline (no CSS)</h1>
+<div id="feedback-form-inline"></div>
+
+
+<div class="js-logDisplay" style="margin-top: 10px; overflow-x: hidden;"></div>
+
+<p style="margin-bottom: 10px">Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</p>
+
+<script src="jquery-3.6.0.min.js"></script>
+<script id="zammad_form_script" src="/assets/form/form.js"></script>
+
+<script>
+$('#feedback-form-modal').ZammadForm({
+  modal: true,
+  debug: true,
+  noCSS: true,
+});
+
+ $('#feedback-form-inline').ZammadForm({
+  modal: false,
+  debug: true,
+  noCSS: true,
+});
+</script>
+
+
+</body>
+</html>

+ 5 - 5
public/assets/form/form.css

@@ -7,25 +7,25 @@
   margin-top: 0;
 }
 
-.zammad-form .form-group {
+.zammad-form-group {
   margin-bottom: 15px;
 }
 
-.zammad-form .form-control {
+.zammad-form-control {
   display: block;
   width: 100%;
   box-sizing: border-box;
 }
 
-.zammad-form .has-error .form-control {
+.zammad-form-group--has-error .zammad-form-control {
   border-color: #a94442;
 }
 
-.zammad-form .has-error label {
+.zammad-form-group--has-error label {
   color: #a94442;
 }
 
-.zammad-form .js-thankyou {
+.zammad-form-thankyou {
   text-align: center;
 }
 

+ 14 - 7
public/assets/form/form.js

@@ -5,12 +5,12 @@
 *  provides feedback form for zammad
 *
 
-<button id="feedback-form">Feedback</button>
+<button id="zammad-feedback-form">Feedback</button>
 
 <script id="zammad_form_script" src="http://localhost:3000/assets/form/form.js"></script>
 <script>
 $(function() {
-  $('#feedback-form').ZammadForm({
+  $('#zammad-feedback-form').ZammadForm({
     messageTitle: 'Feedback Form', // optional
     messageSubmit: 'Submit', // optional
     messageThankYou: 'Thank you for your inquiry (#%s)! We\'ll contact you as soon as possible.', // optional
@@ -333,12 +333,16 @@ $(function() {
       processData: false,
     }).done(function(data) {
 
-      // removed errors
+      // Remove the errors from the form.
+      _this.$form.find('.zammad-form-group--has-error').removeClass('zammad-form-group--has-error')
+      // Deprecated code, can be removed in future versions:
       _this.$form.find('.has-error').removeClass('has-error')
 
       // set errors
       if (data.errors) {
         $.each(data.errors, function( key, value ) {
+          _this.$form.find('[name=' + key + ']').closest('.'+ _this.options.prefixCSS +'group').addClass('zammad-form-group--has-error')
+          // Deprecated code, can be removed in future versions:
           _this.$form.find('[name=' + key + ']').closest('.form-group').addClass('has-error')
         })
         if (data.errors.token) {
@@ -414,14 +418,17 @@ $(function() {
     }
     $.each(this.options.attributes, function(index, value) {
       var valueId = _this.options.modal ? value.id + '-modal' : value.id + '-inline'
-      var item = $('<div class="form-group"><label for="' + valueId +'"> ' + _this.T(value.display) + '</label></div>');
+      // Deprecated class "form-group" can be removed in future versions.
+      var item = $('<div class="form-group '+ _this.options.prefixCSS +'group"><label for="' + valueId +'"> ' + _this.T(value.display) + '</label></div>');
       var defaultValue = (typeof value.defaultValue === 'function') ? value.defaultValue() : value.defaultValue;
       for (var i=0; i < (value.repeat ? value.repeat : 1); i++) {
         if (value.tag == 'input') {
-          item.append('<input class="form-control" id="' + valueId + '" name="' + value.name + '" type="' + value.type + '" placeholder="' + _this.T(value.placeholder) + '" value="' + (defaultValue || '') + '"' + (value.required === true ? ' required' : '') + '>')
+          // Deprecated class "form-control" can be removed in future versions.
+          item.append('<input class="form-control '+ _this.options.prefixCSS +'control" id="' + valueId + '" name="' + value.name + '" type="' + value.type + '" placeholder="' + _this.T(value.placeholder) + '" value="' + (defaultValue || '') + '"' + (value.required === true ? ' required' : '') + '>')
         }
         else if (value.tag == 'textarea') {
-          item.append('<textarea class="form-control" id="' + valueId + '" name="' + value.name + '" placeholder="' + _this.T(value.placeholder) + '" rows="' + value.rows + '"' + (value.required === true ? ' required' : '') + '>' + (defaultValue || '') + '</textarea>')
+          // Deprecated class "form-control" can be removed in future versions.
+          item.append('<textarea class="form-control '+ _this.options.prefixCSS +'control" id="' + valueId + '" name="' + value.name + '" placeholder="' + _this.T(value.placeholder) + '" rows="' + value.rows + '"' + (value.required === true ? ' required' : '') + '>' + (defaultValue || '') + '</textarea>')
         }
       }
       $form.append(item)
@@ -463,7 +470,7 @@ $(function() {
     if (data.ticket && data.ticket.number) {
       thankYou = thankYou.replace('%s', data.ticket.number)
     }
-    var message = $('<div class="js-thankyou">' + thankYou + '</div>')
+    var message = $('<div class="js-thankyou zammad-form-thankyou">' + thankYou + '</div>')
     this.$form.html(message)
   }