Private fn chat no jquery
This commit is contained in:
parent
74ec8912bd
commit
9e5318fdb5
11 changed files with 5210 additions and 42 deletions
1468
public/assets/chat/chat-no-jquery.coffee
Normal file
1468
public/assets/chat/chat-no-jquery.coffee
Normal file
File diff suppressed because it is too large
Load diff
2490
public/assets/chat/chat-no-jquery.js
Normal file
2490
public/assets/chat/chat-no-jquery.js
Normal file
File diff suppressed because it is too large
Load diff
2
public/assets/chat/chat-no-jquery.min.js
vendored
Normal file
2
public/assets/chat/chat-no-jquery.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
|
@ -10,7 +10,6 @@
|
||||||
border-radius: 5px 5px 0 0;
|
border-radius: 5px 5px 0 0;
|
||||||
will-change: bottom;
|
will-change: bottom;
|
||||||
display: none;
|
display: none;
|
||||||
-webkit-flex-direction: column;
|
|
||||||
-ms-flex-direction: column;
|
-ms-flex-direction: column;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
z-index: 999; }
|
z-index: 999; }
|
||||||
|
@ -20,9 +19,10 @@
|
||||||
width: 100%;
|
width: 100%;
|
||||||
border-radius: 0 !important;
|
border-radius: 0 !important;
|
||||||
font-size: 16px; } }
|
font-size: 16px; } }
|
||||||
|
.zammad-chat--animate {
|
||||||
|
transition: transform 500ms; }
|
||||||
|
|
||||||
.zammad-chat.zammad-chat-is-loaded {
|
.zammad-chat.zammad-chat-is-loaded {
|
||||||
display: -webkit-flex;
|
|
||||||
display: -ms-flexbox;
|
display: -ms-flexbox;
|
||||||
display: flex;
|
display: flex;
|
||||||
opacity: 0; }
|
opacity: 0; }
|
||||||
|
@ -49,6 +49,7 @@
|
||||||
background: #379ad7;
|
background: #379ad7;
|
||||||
color: white;
|
color: white;
|
||||||
line-height: 2.5em;
|
line-height: 2.5em;
|
||||||
|
height: 2.5em;
|
||||||
box-shadow: 0 -1px rgba(0, 0, 0, 0.1), 0 1px rgba(255, 255, 255, 0.3) inset, 0 -1px rgba(0, 0, 0, 0.1) inset, 0 1px 1px rgba(0, 0, 0, 0.13);
|
box-shadow: 0 -1px rgba(0, 0, 0, 0.1), 0 1px rgba(255, 255, 255, 0.3) inset, 0 -1px rgba(0, 0, 0, 0.1) inset, 0 1px 1px rgba(0, 0, 0, 0.13);
|
||||||
position: relative;
|
position: relative;
|
||||||
border-radius: 5px 5px 0 0;
|
border-radius: 5px 5px 0 0;
|
||||||
|
@ -134,28 +135,15 @@
|
||||||
background: #52c782; }
|
background: #52c782; }
|
||||||
|
|
||||||
.zammad-chat-agent-status[data-status="connecting"]:before {
|
.zammad-chat-agent-status[data-status="connecting"]:before {
|
||||||
-webkit-animation: linear connect-fade 600ms infinite alternate;
|
|
||||||
animation: linear connect-fade 600ms infinite alternate;
|
animation: linear connect-fade 600ms infinite alternate;
|
||||||
background: #faab00; }
|
background: #faab00; }
|
||||||
|
|
||||||
@-webkit-keyframes connect-fade {
|
|
||||||
from {
|
|
||||||
opacity: .5;
|
|
||||||
-webkit-transform: scale(0.6);
|
|
||||||
transform: scale(0.6); }
|
|
||||||
to {
|
|
||||||
opacity: 1;
|
|
||||||
-webkit-transform: scale(1);
|
|
||||||
transform: scale(1); } }
|
|
||||||
|
|
||||||
@keyframes connect-fade {
|
@keyframes connect-fade {
|
||||||
from {
|
from {
|
||||||
opacity: .5;
|
opacity: .5;
|
||||||
-webkit-transform: scale(0.6);
|
|
||||||
transform: scale(0.6); }
|
transform: scale(0.6); }
|
||||||
to {
|
to {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
-webkit-transform: scale(1);
|
|
||||||
transform: scale(1); } }
|
transform: scale(1); } }
|
||||||
|
|
||||||
.zammad-chat-modal {
|
.zammad-chat-modal {
|
||||||
|
@ -169,13 +157,10 @@
|
||||||
background: white;
|
background: white;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
display: -webkit-flex;
|
|
||||||
display: -ms-flexbox;
|
display: -ms-flexbox;
|
||||||
display: flex;
|
display: flex;
|
||||||
-webkit-align-items: center;
|
|
||||||
-ms-flex-align: center;
|
-ms-flex-align: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
-webkit-justify-content: center;
|
|
||||||
-ms-flex-pack: center;
|
-ms-flex-pack: center;
|
||||||
justify-content: center; }
|
justify-content: center; }
|
||||||
.zammad-chat-modal:empty {
|
.zammad-chat-modal:empty {
|
||||||
|
@ -196,10 +181,8 @@
|
||||||
|
|
||||||
.zammad-scroll-hint {
|
.zammad-scroll-hint {
|
||||||
background: #f9fafa;
|
background: #f9fafa;
|
||||||
display: -webkit-flex;
|
|
||||||
display: -ms-flexbox;
|
display: -ms-flexbox;
|
||||||
display: flex;
|
display: flex;
|
||||||
-webkit-align-items: center;
|
|
||||||
-ms-flex-align: center;
|
-ms-flex-align: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
border-bottom: 1px solid #e8e8e8;
|
border-bottom: 1px solid #e8e8e8;
|
||||||
|
@ -217,15 +200,14 @@
|
||||||
padding: 0.5em 1em;
|
padding: 0.5em 1em;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
background: white;
|
background: white;
|
||||||
-webkit-flex: 1;
|
|
||||||
-ms-flex: 1;
|
-ms-flex: 1;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
display: none;
|
display: none;
|
||||||
-webkit-overflow-scrolling: touch; }
|
-webkit-overflow-scrolling: touch;
|
||||||
|
overscroll-behavior: contain; }
|
||||||
@media only screen and (max-width: 768px) {
|
@media only screen and (max-width: 768px) {
|
||||||
.zammad-chat-body {
|
.zammad-chat-body {
|
||||||
height: auto;
|
height: auto;
|
||||||
-webkit-flex: 1;
|
|
||||||
-ms-flex: 1;
|
-ms-flex: 1;
|
||||||
flex: 1; } }
|
flex: 1; } }
|
||||||
|
|
||||||
|
@ -289,41 +271,25 @@
|
||||||
height: 0.55em;
|
height: 0.55em;
|
||||||
width: 0.55em;
|
width: 0.55em;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
-webkit-animation: ease-in-out load-fade 600ms infinite alternate;
|
|
||||||
animation: ease-in-out load-fade 600ms infinite alternate; }
|
animation: ease-in-out load-fade 600ms infinite alternate; }
|
||||||
|
|
||||||
.zammad-chat-loading-circle + .zammad-chat-loading-circle {
|
.zammad-chat-loading-circle + .zammad-chat-loading-circle {
|
||||||
-webkit-animation-delay: .13s;
|
|
||||||
animation-delay: .13s; }
|
animation-delay: .13s; }
|
||||||
|
|
||||||
.zammad-chat-loading-circle + .zammad-chat-loading-circle + .zammad-chat-loading-circle {
|
.zammad-chat-loading-circle + .zammad-chat-loading-circle + .zammad-chat-loading-circle {
|
||||||
-webkit-animation-delay: .26s;
|
|
||||||
animation-delay: .26s; }
|
animation-delay: .26s; }
|
||||||
|
|
||||||
@-webkit-keyframes load-fade {
|
|
||||||
from {
|
|
||||||
opacity: .5;
|
|
||||||
-webkit-transform: scale(0.6);
|
|
||||||
transform: scale(0.6); }
|
|
||||||
67% {
|
|
||||||
opacity: 1;
|
|
||||||
-webkit-transform: scale(1);
|
|
||||||
transform: scale(1); } }
|
|
||||||
|
|
||||||
@keyframes load-fade {
|
@keyframes load-fade {
|
||||||
from {
|
from {
|
||||||
opacity: .5;
|
opacity: .5;
|
||||||
-webkit-transform: scale(0.6);
|
|
||||||
transform: scale(0.6); }
|
transform: scale(0.6); }
|
||||||
67% {
|
67% {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
-webkit-transform: scale(1);
|
|
||||||
transform: scale(1); } }
|
transform: scale(1); } }
|
||||||
|
|
||||||
.zammad-chat-controls {
|
.zammad-chat-controls {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
display: none;
|
display: none;
|
||||||
-webkit-align-items: flex-end;
|
|
||||||
-ms-flex-align: end;
|
-ms-flex-align: end;
|
||||||
align-items: flex-end;
|
align-items: flex-end;
|
||||||
border-top: 1px solid #ededed;
|
border-top: 1px solid #ededed;
|
||||||
|
@ -335,7 +301,6 @@
|
||||||
background: white; }
|
background: white; }
|
||||||
|
|
||||||
.zammad-chat-is-open .zammad-chat-controls {
|
.zammad-chat-is-open .zammad-chat-controls {
|
||||||
display: -webkit-flex;
|
|
||||||
display: -ms-flexbox;
|
display: -ms-flexbox;
|
||||||
display: flex; }
|
display: flex; }
|
||||||
|
|
||||||
|
@ -356,7 +321,6 @@
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
box-sizing: content-box;
|
box-sizing: content-box;
|
||||||
outline: none;
|
outline: none;
|
||||||
-webkit-flex: 1;
|
|
||||||
-ms-flex: 1;
|
-ms-flex: 1;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
overflow: auto; }
|
overflow: auto; }
|
||||||
|
|
|
@ -19,6 +19,10 @@
|
||||||
border-radius: 0 !important;
|
border-radius: 0 !important;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&--animate {
|
||||||
|
transition: transform 500ms;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.zammad-chat.zammad-chat-is-loaded {
|
.zammad-chat.zammad-chat-is-loaded {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
@ -50,6 +54,7 @@
|
||||||
background: hsl(203,67%,53%);
|
background: hsl(203,67%,53%);
|
||||||
color: white;
|
color: white;
|
||||||
line-height: 2.5em;
|
line-height: 2.5em;
|
||||||
|
height: 2.5em;
|
||||||
box-shadow:
|
box-shadow:
|
||||||
0 -1px rgba(0,0,0,.1),
|
0 -1px rgba(0,0,0,.1),
|
||||||
0 1px rgba(255,255,255,.3) inset,
|
0 1px rgba(255,255,255,.3) inset,
|
||||||
|
@ -231,6 +236,7 @@
|
||||||
flex: 1;
|
flex: 1;
|
||||||
display: none;
|
display: none;
|
||||||
-webkit-overflow-scrolling: touch;
|
-webkit-overflow-scrolling: touch;
|
||||||
|
overscroll-behavior: contain;
|
||||||
|
|
||||||
@media only screen and (max-width: 768px) {
|
@media only screen and (max-width: 768px) {
|
||||||
height: auto;
|
height: auto;
|
||||||
|
|
|
@ -37,6 +37,23 @@ gulp.task('js', function(){
|
||||||
.pipe(gulp.dest('./'));
|
.pipe(gulp.dest('./'));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
gulp.task('no-jquery', function(){
|
||||||
|
var templates = gulp.src('views/*.eco')
|
||||||
|
.pipe(eco({namespace: 'zammadChatTemplates'}));
|
||||||
|
|
||||||
|
var js = gulp.src('chat-no-jquery.coffee')
|
||||||
|
.pipe(plumber())
|
||||||
|
.pipe(coffee({bare: true}).on('error', gutil.log));
|
||||||
|
|
||||||
|
return merge(templates, js)
|
||||||
|
.pipe(concat('chat-no-jquery.js'))
|
||||||
|
.pipe(gulp.dest('./'))
|
||||||
|
.pipe(uglify())
|
||||||
|
.pipe(rename({ extname: '.min.js' }))
|
||||||
|
.pipe(gulp.dest('./'));
|
||||||
|
});
|
||||||
|
|
||||||
gulp.task('default', function(){
|
gulp.task('default', function(){
|
||||||
var cssWatcher = gulp.watch(['chat.scss'], ['css']);
|
var cssWatcher = gulp.watch(['chat.scss'], ['css']);
|
||||||
cssWatcher.on('change', function(event) {
|
cssWatcher.on('change', function(event) {
|
||||||
|
@ -47,4 +64,9 @@ gulp.task('default', function(){
|
||||||
jsWatcher.on('change', function(event) {
|
jsWatcher.on('change', function(event) {
|
||||||
console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
|
console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var js2Watcher = gulp.watch(['chat-no-jquery.coffee'], ['no-jquery']);
|
||||||
|
js2Watcher.on('change', function(event) {
|
||||||
|
console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
174
public/assets/chat/znuny-no-jquery-open_by_button.html
Normal file
174
public/assets/chat/znuny-no-jquery-open_by_button.html
Normal file
|
@ -0,0 +1,174 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="de-de">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Zammad Chat</title>
|
||||||
|
<link rel="stylesheet" href="znuny.css">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
font-family: sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mockup {
|
||||||
|
vertical-align: bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings {
|
||||||
|
position: fixed;
|
||||||
|
left: 20px;
|
||||||
|
top: 20px;
|
||||||
|
background: white;
|
||||||
|
font-size: 14px;
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 5px;
|
||||||
|
box-shadow: 0 3px 10px rgba(0,0,0,.3);
|
||||||
|
width: 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings input {
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.settings input + input {
|
||||||
|
margin-right: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table td:first-child {
|
||||||
|
text-align: right;
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
table td.log {
|
||||||
|
text-align: left;
|
||||||
|
padding-right: 0;
|
||||||
|
word-break: break-all;
|
||||||
|
}
|
||||||
|
|
||||||
|
td {
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 1em;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 768px) {
|
||||||
|
.settings {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.Box {
|
||||||
|
background: hsl(0,0%,91%);
|
||||||
|
width: 26px;
|
||||||
|
height: 24px;
|
||||||
|
color: hsl(0,0%,47%);
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.Box.Active {
|
||||||
|
background: hsl(0,0%,36%);
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<img class="mockup" width="100%" src="znuny.png">
|
||||||
|
<img class="mockup" width="100%" src="znuny.png">
|
||||||
|
<img class="mockup" width="100%" src="znuny.png">
|
||||||
|
<img class="mockup" width="100%" src="znuny.png">
|
||||||
|
<img class="mockup" width="100%" src="znuny.png">
|
||||||
|
<img class="mockup" width="100%" src="znuny.png">
|
||||||
|
<img class="mockup" width="100%" src="znuny.png">
|
||||||
|
<img class="mockup" width="100%" src="znuny.png">
|
||||||
|
<img class="mockup" width="100%" src="znuny.png">
|
||||||
|
<img class="mockup" width="100%" src="znuny.png">
|
||||||
|
<img class="mockup" width="100%" src="znuny.png">
|
||||||
|
<img class="mockup" width="100%" src="znuny.png">
|
||||||
|
|
||||||
|
<form class="settings" onsubmit="return false">
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><h2>Settings</h2>
|
||||||
|
<td>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<input id="flat" type="checkbox" onchange="updateStyle(this.form)">
|
||||||
|
<td>
|
||||||
|
<label for="flat">Flat Design</label>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<input type="color" id="color" value="#AE99D6" oninput="updateStyle(this.form)">
|
||||||
|
<td>
|
||||||
|
<label for="color">Color</label>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<input type="range" id="fontSize" value="12" min="11" max="18" name="fontSize" oninput="updateStyle(this.form)">
|
||||||
|
<output for="fontSize" id="fontSizeOutput" style="width: 20px; display: inline-block">12</output>px
|
||||||
|
<td>
|
||||||
|
<label for="fontSize">Font Size</label>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<td><button class="open-zammad-chat">Open Chat</button>
|
||||||
|
<tr>
|
||||||
|
<td class="log"><h2>Log</h2>
|
||||||
|
<td>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" class="log js-chatLogDisplay">
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<script src="chat-no-jquery.js"></script>
|
||||||
|
<script>
|
||||||
|
function getSearchParameters() {
|
||||||
|
var prmstr = window.location.search.substr(1);
|
||||||
|
return prmstr != null && prmstr != '' ? transformToAssocArray(prmstr) : {};
|
||||||
|
}
|
||||||
|
function transformToAssocArray( prmstr ) {
|
||||||
|
var params = {};
|
||||||
|
var prmarr = prmstr.split('&');
|
||||||
|
for ( var i = 0; i < prmarr.length; i++) {
|
||||||
|
var tmparr = prmarr[i].split('=');
|
||||||
|
params[tmparr[0]] = tmparr[1];
|
||||||
|
}
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
var hostname = window.location.hostname;
|
||||||
|
var port = window.location.port;
|
||||||
|
var params = getSearchParameters();
|
||||||
|
var host = 'ws://'+ (location.host || 'localhost').split(':')[0] +':6042'
|
||||||
|
if (params['port']) {
|
||||||
|
host = 'ws://' + hostname + ':' + params['port']
|
||||||
|
}
|
||||||
|
cssUrl = 'http://' + hostname + ':' + port + '/assets/chat/chat.css'
|
||||||
|
|
||||||
|
var chat = new ZammadChat({
|
||||||
|
chatId: 1,
|
||||||
|
host: host,
|
||||||
|
cssUrl: cssUrl,
|
||||||
|
debug: true,
|
||||||
|
background: '#494d52',
|
||||||
|
flat: true,
|
||||||
|
show: false,
|
||||||
|
idleTimeout: 1,
|
||||||
|
idleTimeoutIntervallCheck: 0.5,
|
||||||
|
inactiveTimeout: 2,
|
||||||
|
inactiveTimeoutIntervallCheck: 0.5,
|
||||||
|
waitingListTimeout: 1.2,
|
||||||
|
waitingListTimeoutIntervallCheck: 0.5,
|
||||||
|
});
|
||||||
|
|
||||||
|
function updateStyle(form){
|
||||||
|
chat.el.classList.toggle('zammad-chat--flat', form.flat.checked);
|
||||||
|
var surfaces = document.querySelectorAll('.zammad-chat-header, .zammad-chat-message--customer .zammad-chat-message-body, .zammad-chat-button');
|
||||||
|
for(var i=0; i<surfaces.length; i++){
|
||||||
|
surfaces[i].style.background = form.color.value;
|
||||||
|
}
|
||||||
|
chat.options.background = form.color.value;
|
||||||
|
chat.el.style.fontSize = form.fontSize.value +'px';
|
||||||
|
form.fontSizeOutput.textContent = form.fontSize.value;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
173
public/assets/chat/znuny-no-jquery.html
Normal file
173
public/assets/chat/znuny-no-jquery.html
Normal file
|
@ -0,0 +1,173 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="de-de">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Zammad Chat</title>
|
||||||
|
<link rel="stylesheet" href="znuny.css">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
font-family: sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mockup {
|
||||||
|
vertical-align: bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings {
|
||||||
|
position: fixed;
|
||||||
|
left: 20px;
|
||||||
|
top: 20px;
|
||||||
|
background: white;
|
||||||
|
font-size: 14px;
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 5px;
|
||||||
|
box-shadow: 0 3px 10px rgba(0,0,0,.3);
|
||||||
|
width: 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings input {
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.settings input + input {
|
||||||
|
margin-right: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table td:first-child {
|
||||||
|
text-align: right;
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
table td.log {
|
||||||
|
text-align: left;
|
||||||
|
padding-right: 0;
|
||||||
|
word-break: break-all;
|
||||||
|
}
|
||||||
|
|
||||||
|
td {
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 1em;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 768px) {
|
||||||
|
.settings {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.Box {
|
||||||
|
background: hsl(0,0%,91%);
|
||||||
|
width: 26px;
|
||||||
|
height: 24px;
|
||||||
|
color: hsl(0,0%,47%);
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.Box.Active {
|
||||||
|
background: hsl(0,0%,36%);
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<img class="mockup" width="100%" src="znuny.png">
|
||||||
|
<img class="mockup" width="100%" src="znuny.png">
|
||||||
|
<img class="mockup" width="100%" src="znuny.png">
|
||||||
|
<img class="mockup" width="100%" src="znuny.png">
|
||||||
|
<img class="mockup" width="100%" src="znuny.png">
|
||||||
|
<img class="mockup" width="100%" src="znuny.png">
|
||||||
|
<img class="mockup" width="100%" src="znuny.png">
|
||||||
|
<img class="mockup" width="100%" src="znuny.png">
|
||||||
|
<img class="mockup" width="100%" src="znuny.png">
|
||||||
|
<img class="mockup" width="100%" src="znuny.png">
|
||||||
|
<img class="mockup" width="100%" src="znuny.png">
|
||||||
|
<img class="mockup" width="100%" src="znuny.png">
|
||||||
|
|
||||||
|
<form class="settings" onsubmit="return false">
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><h2>Settings</h2>
|
||||||
|
<td>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<input id="flat" type="checkbox" onchange="updateStyle(this.form)">
|
||||||
|
<td>
|
||||||
|
<label for="flat">Flat Design</label>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<input type="color" id="color" value="#AE99D6" oninput="updateStyle(this.form)">
|
||||||
|
<td>
|
||||||
|
<label for="color">Color</label>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<input type="range" id="fontSize" value="12" min="11" max="18" name="fontSize" oninput="updateStyle(this.form)">
|
||||||
|
<output for="fontSize" id="fontSizeOutput" style="width: 20px; display: inline-block">12</output>px
|
||||||
|
<td>
|
||||||
|
<label for="fontSize">Font Size</label>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<td><button class="open-zammad-chat">Open Chat</button>
|
||||||
|
<tr>
|
||||||
|
<td class="log"><h2>Log</h2>
|
||||||
|
<td>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" class="log js-chatLogDisplay">
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<script src="chat-no-jquery.js"></script>
|
||||||
|
<script>
|
||||||
|
function getSearchParameters() {
|
||||||
|
var prmstr = window.location.search.substr(1);
|
||||||
|
return prmstr != null && prmstr != '' ? transformToAssocArray(prmstr) : {};
|
||||||
|
}
|
||||||
|
function transformToAssocArray( prmstr ) {
|
||||||
|
var params = {};
|
||||||
|
var prmarr = prmstr.split('&');
|
||||||
|
for ( var i = 0; i < prmarr.length; i++) {
|
||||||
|
var tmparr = prmarr[i].split('=');
|
||||||
|
params[tmparr[0]] = tmparr[1];
|
||||||
|
}
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
var hostname = window.location.hostname;
|
||||||
|
var port = window.location.port;
|
||||||
|
var params = getSearchParameters();
|
||||||
|
var host = 'ws://'+ (location.host || 'localhost').split(':')[0] +':6042'
|
||||||
|
if (params['port']) {
|
||||||
|
host = 'ws://' + hostname + ':' + params['port']
|
||||||
|
}
|
||||||
|
cssUrl = 'http://' + hostname + ':' + port + '/assets/chat/chat.css'
|
||||||
|
|
||||||
|
var chat = new ZammadChat({
|
||||||
|
chatId: 1,
|
||||||
|
host: host,
|
||||||
|
cssUrl: cssUrl,
|
||||||
|
debug: true,
|
||||||
|
background: '#494d52',
|
||||||
|
flat: true,
|
||||||
|
idleTimeout: 1,
|
||||||
|
idleTimeoutIntervallCheck: 0.5,
|
||||||
|
inactiveTimeout: 2,
|
||||||
|
inactiveTimeoutIntervallCheck: 0.5,
|
||||||
|
waitingListTimeout: 1.2,
|
||||||
|
waitingListTimeoutIntervallCheck: 0.5,
|
||||||
|
});
|
||||||
|
|
||||||
|
function updateStyle(form){
|
||||||
|
chat.el.classList.toggle('zammad-chat--flat', form.flat.checked);
|
||||||
|
var surfaces = document.querySelectorAll('.zammad-chat-header, .zammad-chat-message--customer .zammad-chat-message-body, .zammad-chat-button');
|
||||||
|
for(var i=0; i<surfaces.length; i++){
|
||||||
|
surfaces[i].style.background = form.color.value;
|
||||||
|
}
|
||||||
|
chat.options.background = form.color.value;
|
||||||
|
chat.el.style.fontSize = form.fontSize.value +'px';
|
||||||
|
form.fontSizeOutput.textContent = form.fontSize.value;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -157,7 +157,6 @@
|
||||||
debug: true,
|
debug: true,
|
||||||
background: '#494d52',
|
background: '#494d52',
|
||||||
flat: true,
|
flat: true,
|
||||||
show: true,
|
|
||||||
idleTimeout: 1,
|
idleTimeout: 1,
|
||||||
idleTimeoutIntervallCheck: 0.5,
|
idleTimeoutIntervallCheck: 0.5,
|
||||||
inactiveTimeout: 2,
|
inactiveTimeout: 2,
|
||||||
|
|
|
@ -59,6 +59,7 @@ if [ "$LEVEL" == '1' ]; then
|
||||||
rm test/browser/agent_user_profile_test.rb
|
rm test/browser/agent_user_profile_test.rb
|
||||||
# test/browser/auth_test.rb
|
# test/browser/auth_test.rb
|
||||||
rm test/browser/chat_test.rb
|
rm test/browser/chat_test.rb
|
||||||
|
rm test/browser/chat_no_jquery_test.rb
|
||||||
rm test/browser/customer_ticket_create_fields_test.rb
|
rm test/browser/customer_ticket_create_fields_test.rb
|
||||||
rm test/browser/customer_ticket_create_test.rb
|
rm test/browser/customer_ticket_create_test.rb
|
||||||
rm test/browser/first_steps_test.rb
|
rm test/browser/first_steps_test.rb
|
||||||
|
@ -140,6 +141,7 @@ elif [ "$LEVEL" == '2' ]; then
|
||||||
rm test/browser/agent_user_profile_test.rb
|
rm test/browser/agent_user_profile_test.rb
|
||||||
rm test/browser/auth_test.rb
|
rm test/browser/auth_test.rb
|
||||||
rm test/browser/chat_test.rb
|
rm test/browser/chat_test.rb
|
||||||
|
rm test/browser/chat_no_jquery_test.rb
|
||||||
rm test/browser/customer_ticket_create_fields_test.rb
|
rm test/browser/customer_ticket_create_fields_test.rb
|
||||||
rm test/browser/customer_ticket_create_test.rb
|
rm test/browser/customer_ticket_create_test.rb
|
||||||
rm test/browser/first_steps_test.rb
|
rm test/browser/first_steps_test.rb
|
||||||
|
@ -221,6 +223,7 @@ elif [ "$LEVEL" == '3' ]; then
|
||||||
rm test/browser/agent_user_profile_test.rb
|
rm test/browser/agent_user_profile_test.rb
|
||||||
rm test/browser/auth_test.rb
|
rm test/browser/auth_test.rb
|
||||||
rm test/browser/chat_test.rb
|
rm test/browser/chat_test.rb
|
||||||
|
rm test/browser/chat_no_jquery_test.rb
|
||||||
rm test/browser/customer_ticket_create_fields_test.rb
|
rm test/browser/customer_ticket_create_fields_test.rb
|
||||||
rm test/browser/customer_ticket_create_test.rb
|
rm test/browser/customer_ticket_create_test.rb
|
||||||
rm test/browser/first_steps_test.rb
|
rm test/browser/first_steps_test.rb
|
||||||
|
@ -302,6 +305,7 @@ elif [ "$LEVEL" == '4' ]; then
|
||||||
rm test/browser/agent_user_profile_test.rb
|
rm test/browser/agent_user_profile_test.rb
|
||||||
rm test/browser/auth_test.rb
|
rm test/browser/auth_test.rb
|
||||||
rm test/browser/chat_test.rb
|
rm test/browser/chat_test.rb
|
||||||
|
rm test/browser/chat_no_jquery_test.rb
|
||||||
# test/browser/customer_ticket_create_fields_test.rb
|
# test/browser/customer_ticket_create_fields_test.rb
|
||||||
# test/browser/customer_ticket_create_test.rb
|
# test/browser/customer_ticket_create_test.rb
|
||||||
rm test/browser/first_steps_test.rb
|
rm test/browser/first_steps_test.rb
|
||||||
|
@ -382,6 +386,7 @@ elif [ "$LEVEL" == '5' ]; then
|
||||||
# test/browser/agent_user_profile_test.rb
|
# test/browser/agent_user_profile_test.rb
|
||||||
rm test/browser/auth_test.rb
|
rm test/browser/auth_test.rb
|
||||||
rm test/browser/chat_test.rb
|
rm test/browser/chat_test.rb
|
||||||
|
rm test/browser/chat_no_jquery_test.rb
|
||||||
rm test/browser/customer_ticket_create_fields_test.rb
|
rm test/browser/customer_ticket_create_fields_test.rb
|
||||||
rm test/browser/customer_ticket_create_test.rb
|
rm test/browser/customer_ticket_create_test.rb
|
||||||
rm test/browser/first_steps_test.rb
|
rm test/browser/first_steps_test.rb
|
||||||
|
@ -465,6 +470,7 @@ elif [ "$LEVEL" == '6' ]; then
|
||||||
rm test/browser/agent_user_profile_test.rb
|
rm test/browser/agent_user_profile_test.rb
|
||||||
rm test/browser/auth_test.rb
|
rm test/browser/auth_test.rb
|
||||||
# test/browser/chat_test.rb
|
# test/browser/chat_test.rb
|
||||||
|
# test/browser/chat_no_jquery_test.rb
|
||||||
rm test/browser/customer_ticket_create_fields_test.rb
|
rm test/browser/customer_ticket_create_fields_test.rb
|
||||||
rm test/browser/customer_ticket_create_test.rb
|
rm test/browser/customer_ticket_create_test.rb
|
||||||
# test/browser/first_steps_test.rb
|
# test/browser/first_steps_test.rb
|
||||||
|
|
864
test/browser/chat_no_jquery_test.rb
Normal file
864
test/browser/chat_no_jquery_test.rb
Normal file
|
@ -0,0 +1,864 @@
|
||||||
|
require 'browser_test_helper'
|
||||||
|
|
||||||
|
class ChatNoJqueryTest < TestCase
|
||||||
|
|
||||||
|
def test_basic
|
||||||
|
chat_url = "#{browser_url}/assets/chat/znuny-no-jquery.html?port=#{ENV['WS_PORT']}"
|
||||||
|
agent = browser_instance
|
||||||
|
login(
|
||||||
|
browser: agent,
|
||||||
|
username: 'master@example.com',
|
||||||
|
password: 'test',
|
||||||
|
url: browser_url,
|
||||||
|
)
|
||||||
|
tasks_close_all(
|
||||||
|
browser: agent,
|
||||||
|
)
|
||||||
|
|
||||||
|
# disable chat
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: 'a[href="#manage"]',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: '.content.active a[href="#channels/chat"]',
|
||||||
|
)
|
||||||
|
switch(
|
||||||
|
browser: agent,
|
||||||
|
css: '.content.active .js-chatSetting',
|
||||||
|
type: 'off',
|
||||||
|
)
|
||||||
|
|
||||||
|
# nav bar shuld be gone
|
||||||
|
sleep 2
|
||||||
|
exists_not(
|
||||||
|
browser: agent,
|
||||||
|
css: 'a[href="#customer_chat"]',
|
||||||
|
)
|
||||||
|
sleep 15
|
||||||
|
|
||||||
|
customer = browser_instance
|
||||||
|
location(
|
||||||
|
browser: customer,
|
||||||
|
url: chat_url,
|
||||||
|
)
|
||||||
|
sleep 4
|
||||||
|
exists_not(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
)
|
||||||
|
match(
|
||||||
|
browser: customer,
|
||||||
|
css: '.settings',
|
||||||
|
value: '{"state":"chat_disabled"}',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: 'a[href="#manage"]',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: '.content.active a[href="#channels/chat"]',
|
||||||
|
)
|
||||||
|
switch(
|
||||||
|
browser: agent,
|
||||||
|
css: '.content.active .js-chatSetting',
|
||||||
|
type: 'on',
|
||||||
|
)
|
||||||
|
sleep 15 # wait for rerendering
|
||||||
|
switch(
|
||||||
|
browser: agent,
|
||||||
|
css: '#navigation .js-chatMenuItem .js-switch',
|
||||||
|
type: 'off',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: 'a[href="#customer_chat"]',
|
||||||
|
wait: 2,
|
||||||
|
)
|
||||||
|
match_not(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active.content',
|
||||||
|
value: 'disabled',
|
||||||
|
)
|
||||||
|
|
||||||
|
reload(
|
||||||
|
browser: customer,
|
||||||
|
)
|
||||||
|
sleep 4
|
||||||
|
exists_not(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
)
|
||||||
|
match_not(
|
||||||
|
browser: customer,
|
||||||
|
css: '.settings',
|
||||||
|
value: '{"state":"chat_disabled"}',
|
||||||
|
)
|
||||||
|
match(
|
||||||
|
browser: customer,
|
||||||
|
css: '.settings',
|
||||||
|
value: '{"event":"chat_status_customer","data":{"state":"offline"}}',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: 'a[href="#customer_chat"]',
|
||||||
|
)
|
||||||
|
switch(
|
||||||
|
browser: agent,
|
||||||
|
css: '#navigation .js-chatMenuItem .js-switch',
|
||||||
|
type: 'on',
|
||||||
|
)
|
||||||
|
reload(
|
||||||
|
browser: customer,
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
timeout: 5,
|
||||||
|
)
|
||||||
|
match_not(
|
||||||
|
browser: customer,
|
||||||
|
css: '.settings',
|
||||||
|
value: '{"state":"chat_disabled"}',
|
||||||
|
)
|
||||||
|
match_not(
|
||||||
|
browser: customer,
|
||||||
|
css: '.settings',
|
||||||
|
value: '{"event":"chat_status_customer","data":{"state":"offline"}}',
|
||||||
|
)
|
||||||
|
match(
|
||||||
|
browser: customer,
|
||||||
|
css: '.settings',
|
||||||
|
value: '"data":{"state":"online"}',
|
||||||
|
)
|
||||||
|
|
||||||
|
# init chat
|
||||||
|
click(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat .js-chat-open',
|
||||||
|
)
|
||||||
|
exists(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat-is-shown',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
value: '(waiting|warte)',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: agent,
|
||||||
|
css: '.js-chatMenuItem .counter',
|
||||||
|
value: '1',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat .js-chat-toggle .zammad-chat-header-icon',
|
||||||
|
)
|
||||||
|
watch_for_disappear(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
value: '(waiting|warte)',
|
||||||
|
)
|
||||||
|
watch_for_disappear(
|
||||||
|
browser: agent,
|
||||||
|
css: '.js-chatMenuItem .counter',
|
||||||
|
)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_basic_usecase1
|
||||||
|
chat_url = "#{browser_url}/assets/chat/znuny-no-jquery.html?port=#{ENV['WS_PORT']}"
|
||||||
|
agent = browser_instance
|
||||||
|
login(
|
||||||
|
browser: agent,
|
||||||
|
username: 'master@example.com',
|
||||||
|
password: 'test',
|
||||||
|
url: browser_url,
|
||||||
|
)
|
||||||
|
tasks_close_all(
|
||||||
|
browser: agent,
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: 'a[href="#customer_chat"]',
|
||||||
|
)
|
||||||
|
agent.find_elements(css: '.active .chat-window .js-disconnect:not(.is-hidden)').each(&:click)
|
||||||
|
agent.find_elements(css: '.active .chat-window .js-close').each(&:click)
|
||||||
|
|
||||||
|
customer = browser_instance
|
||||||
|
location(
|
||||||
|
browser: customer,
|
||||||
|
url: chat_url,
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
timeout: 5,
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: customer,
|
||||||
|
css: '.js-chat-open',
|
||||||
|
)
|
||||||
|
exists(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat-is-shown',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
value: '(waiting|warte)',
|
||||||
|
)
|
||||||
|
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .js-acceptChat',
|
||||||
|
)
|
||||||
|
sleep 2
|
||||||
|
exists_not(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .chat-status.is-modified',
|
||||||
|
)
|
||||||
|
match(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .js-body',
|
||||||
|
value: chat_url,
|
||||||
|
)
|
||||||
|
set(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .js-customerChatInput',
|
||||||
|
value: 'my name is me',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .js-send',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat .zammad-chat-agent-status',
|
||||||
|
value: 'online',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
value: 'my name is me',
|
||||||
|
)
|
||||||
|
set(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat .zammad-chat-input',
|
||||||
|
value: 'my name is customer',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat .zammad-chat-send',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window',
|
||||||
|
value: 'my name is customer',
|
||||||
|
)
|
||||||
|
exists(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .chat-status.is-modified',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .js-customerChatInput',
|
||||||
|
)
|
||||||
|
exists_not(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .chat-status.is-modified',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: customer,
|
||||||
|
css: '.js-chat-toggle .zammad-chat-header-icon',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window',
|
||||||
|
value: 'closed the conversation',
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_basic_usecase2
|
||||||
|
chat_url = "#{browser_url}/assets/chat/znuny-no-jquery.html?port=#{ENV['WS_PORT']}"
|
||||||
|
agent = browser_instance
|
||||||
|
login(
|
||||||
|
browser: agent,
|
||||||
|
username: 'master@example.com',
|
||||||
|
password: 'test',
|
||||||
|
url: browser_url,
|
||||||
|
)
|
||||||
|
tasks_close_all(
|
||||||
|
browser: agent,
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: 'a[href="#customer_chat"]',
|
||||||
|
)
|
||||||
|
agent.find_elements(css: '.active .chat-window .js-disconnect:not(.is-hidden)').each(&:click)
|
||||||
|
agent.find_elements(css: '.active .chat-window .js-close').each(&:click)
|
||||||
|
|
||||||
|
customer = browser_instance
|
||||||
|
location(
|
||||||
|
browser: customer,
|
||||||
|
url: chat_url,
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
timeout: 5,
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: customer,
|
||||||
|
css: '.js-chat-open',
|
||||||
|
)
|
||||||
|
exists(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat-is-shown',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
value: '(waiting|warte)',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .js-acceptChat',
|
||||||
|
)
|
||||||
|
sleep 2
|
||||||
|
exists_not(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .chat-status.is-modified',
|
||||||
|
)
|
||||||
|
|
||||||
|
# keep focus outside of chat window to check .chat-status.is-modified later
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: '#global-search',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat .zammad-chat-agent-status',
|
||||||
|
value: 'online',
|
||||||
|
)
|
||||||
|
set(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat .zammad-chat-input',
|
||||||
|
value: 'my name is customer',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat .zammad-chat-send',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window',
|
||||||
|
value: 'my name is customer',
|
||||||
|
)
|
||||||
|
exists(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .chat-status.is-modified',
|
||||||
|
)
|
||||||
|
set(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .js-customerChatInput',
|
||||||
|
value: 'my name is me',
|
||||||
|
)
|
||||||
|
exists_not(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .chat-status.is-modified',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .js-send',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
value: 'my name is me',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .js-disconnect:not(.is-hidden)',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .js-close',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat .zammad-chat-agent-status',
|
||||||
|
value: 'offline',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
value: '(Chat closed by|Chat beendet von)',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat .js-chat-toggle .zammad-chat-header-icon',
|
||||||
|
)
|
||||||
|
watch_for_disappear(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat-is-open',
|
||||||
|
)
|
||||||
|
agent.find_elements(css: '.active .chat-window .js-disconnect:not(.is-hidden)').each(&:click)
|
||||||
|
agent.find_elements(css: '.active .chat-window .js-close').each(&:click)
|
||||||
|
sleep 2
|
||||||
|
click(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat .js-chat-open',
|
||||||
|
)
|
||||||
|
exists(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat-is-shown',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
value: '(waiting|warte)',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .js-acceptChat',
|
||||||
|
)
|
||||||
|
sleep 2
|
||||||
|
exists_not(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .chat-status.is-modified',
|
||||||
|
)
|
||||||
|
exists(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .chat-status',
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_basic_usecase3
|
||||||
|
chat_url = "#{browser_url}/assets/chat/znuny-no-jquery.html?port=#{ENV['WS_PORT']}"
|
||||||
|
agent = browser_instance
|
||||||
|
login(
|
||||||
|
browser: agent,
|
||||||
|
username: 'master@example.com',
|
||||||
|
password: 'test',
|
||||||
|
url: browser_url,
|
||||||
|
)
|
||||||
|
tasks_close_all(
|
||||||
|
browser: agent,
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: 'a[href="#customer_chat"]',
|
||||||
|
)
|
||||||
|
agent.find_elements(css: '.active .chat-window .js-disconnect:not(.is-hidden)').each(&:click)
|
||||||
|
agent.find_elements(css: '.active .chat-window .js-close').each(&:click)
|
||||||
|
|
||||||
|
# set chat preferences
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .js-settings',
|
||||||
|
)
|
||||||
|
|
||||||
|
modal_ready(browser: agent)
|
||||||
|
set(
|
||||||
|
browser: agent,
|
||||||
|
css: '.modal [name="chat::phrase::1"]',
|
||||||
|
value: 'Hi Stranger!;My Greeting',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: '.modal .js-submit',
|
||||||
|
)
|
||||||
|
modal_disappear(browser: agent)
|
||||||
|
|
||||||
|
customer = browser_instance
|
||||||
|
location(
|
||||||
|
browser: customer,
|
||||||
|
url: chat_url,
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
timeout: 5,
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: customer,
|
||||||
|
css: '.js-chat-open',
|
||||||
|
)
|
||||||
|
exists(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat-is-shown',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .js-badgeWaitingCustomers',
|
||||||
|
value: '1',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .js-acceptChat',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
value: 'Hi Stranger|My Greeting',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat .zammad-chat-agent-status',
|
||||||
|
value: 'online',
|
||||||
|
)
|
||||||
|
match(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .js-body',
|
||||||
|
value: chat_url,
|
||||||
|
)
|
||||||
|
set(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .js-customerChatInput',
|
||||||
|
value: 'my name is me',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .js-send',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
value: 'my name is me',
|
||||||
|
)
|
||||||
|
set(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat .zammad-chat-input',
|
||||||
|
value: 'my name is customer',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat .zammad-chat-send',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window',
|
||||||
|
value: 'my name is customer',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .js-customerChatInput',
|
||||||
|
)
|
||||||
|
reload(
|
||||||
|
browser: customer,
|
||||||
|
)
|
||||||
|
exists(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
value: 'Hi Stranger|My Greeting',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
value: 'my name is me',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
value: 'my name is customer',
|
||||||
|
)
|
||||||
|
location(
|
||||||
|
browser: customer,
|
||||||
|
url: "#{chat_url}#new_hash",
|
||||||
|
)
|
||||||
|
sleep 2
|
||||||
|
match(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .js-body',
|
||||||
|
value: "#{chat_url}#new_hash",
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat .js-chat-toggle .zammad-chat-header-icon',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window',
|
||||||
|
value: 'closed the conversation',
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_open_chat_by_button
|
||||||
|
chat_url = "#{browser_url}/assets/chat/znuny-no-jquery-open_by_button.html?port=#{ENV['WS_PORT']}"
|
||||||
|
agent = browser_instance
|
||||||
|
login(
|
||||||
|
browser: agent,
|
||||||
|
username: 'master@example.com',
|
||||||
|
password: 'test',
|
||||||
|
url: browser_url,
|
||||||
|
)
|
||||||
|
tasks_close_all(
|
||||||
|
browser: agent,
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: 'a[href="#customer_chat"]',
|
||||||
|
)
|
||||||
|
agent.find_elements(css: '.active .chat-window .js-disconnect:not(.is-hidden)').each(&:click)
|
||||||
|
agent.find_elements(css: '.active .chat-window .js-close').each(&:click)
|
||||||
|
|
||||||
|
customer = browser_instance
|
||||||
|
location(
|
||||||
|
browser: customer,
|
||||||
|
url: chat_url,
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
timeout: 5,
|
||||||
|
)
|
||||||
|
exists_not(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat-is-shown',
|
||||||
|
)
|
||||||
|
exists_not(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat-is-open',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: customer,
|
||||||
|
css: '.open-zammad-chat',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat-is-shown',
|
||||||
|
timeout: 4,
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat-is-open',
|
||||||
|
timeout: 4,
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
value: '(waiting|warte)',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat-header-icon-close',
|
||||||
|
)
|
||||||
|
watch_for_disappear(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat-is-shown',
|
||||||
|
timeout: 4,
|
||||||
|
)
|
||||||
|
watch_for_disappear(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat-is-open',
|
||||||
|
timeout: 4,
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_timeouts
|
||||||
|
chat_url = "#{browser_url}/assets/chat/znuny-no-jquery.html?port=#{ENV['WS_PORT']}"
|
||||||
|
agent = browser_instance
|
||||||
|
login(
|
||||||
|
browser: agent,
|
||||||
|
username: 'master@example.com',
|
||||||
|
password: 'test',
|
||||||
|
url: browser_url,
|
||||||
|
)
|
||||||
|
tasks_close_all(
|
||||||
|
browser: agent,
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: 'a[href="#customer_chat"]',
|
||||||
|
)
|
||||||
|
agent.find_elements(css: '.active .chat-window .js-disconnect:not(.is-hidden)').each(&:click)
|
||||||
|
agent.find_elements(css: '.active .chat-window .js-close').each(&:click)
|
||||||
|
|
||||||
|
exists(
|
||||||
|
browser: agent,
|
||||||
|
css: '#navigation .js-chatMenuItem .js-switch input[checked]'
|
||||||
|
)
|
||||||
|
|
||||||
|
# no customer action, hide widget
|
||||||
|
customer = browser_instance
|
||||||
|
location(
|
||||||
|
browser: customer,
|
||||||
|
url: chat_url,
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
timeout: 5,
|
||||||
|
)
|
||||||
|
watch_for_disappear(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
timeout: 95,
|
||||||
|
)
|
||||||
|
|
||||||
|
# no agent action, show sorry screen
|
||||||
|
reload(
|
||||||
|
browser: customer,
|
||||||
|
)
|
||||||
|
exists(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: customer,
|
||||||
|
css: '.js-chat-open',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
value: '(waiting|warte)',
|
||||||
|
timeout: 35,
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
value: '(takes longer|dauert länger)',
|
||||||
|
timeout: 120,
|
||||||
|
)
|
||||||
|
|
||||||
|
# check if agent is offline, idle timeout, chat not answered
|
||||||
|
exists_not(
|
||||||
|
browser: agent,
|
||||||
|
css: '#navigation .js-chatMenuItem .js-switch input[checked]'
|
||||||
|
)
|
||||||
|
switch(
|
||||||
|
browser: agent,
|
||||||
|
css: '#navigation .js-chatMenuItem .js-switch',
|
||||||
|
type: 'on',
|
||||||
|
)
|
||||||
|
|
||||||
|
# no customer action, show sorry screen
|
||||||
|
reload(
|
||||||
|
browser: customer,
|
||||||
|
)
|
||||||
|
exists(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: customer,
|
||||||
|
css: '.js-chat-open',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: agent,
|
||||||
|
css: '.js-chatMenuItem .counter',
|
||||||
|
value: '1',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .js-acceptChat',
|
||||||
|
)
|
||||||
|
sleep 2
|
||||||
|
set(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .js-customerChatInput',
|
||||||
|
value: 'agent is asking',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .js-send',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
value: 'agent is asking',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
value: '(Since you didn\'t respond|Da Sie in den letzten)',
|
||||||
|
timeout: 150,
|
||||||
|
)
|
||||||
|
|
||||||
|
agent.find_elements( { css: '.active .chat-window .js-close' } ).each(&:click)
|
||||||
|
sleep 2
|
||||||
|
click(
|
||||||
|
browser: customer,
|
||||||
|
css: '.js-restart',
|
||||||
|
)
|
||||||
|
sleep 5
|
||||||
|
click(
|
||||||
|
browser: customer,
|
||||||
|
css: '.js-chat-open',
|
||||||
|
)
|
||||||
|
exists(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat-is-shown',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
value: '(waiting|warte)',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .js-acceptChat',
|
||||||
|
)
|
||||||
|
sleep 2
|
||||||
|
exists(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .chat-status',
|
||||||
|
)
|
||||||
|
set(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .js-customerChatInput',
|
||||||
|
value: 'my name is me',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: '.active .chat-window .js-send',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat .zammad-chat-agent-status',
|
||||||
|
value: 'online',
|
||||||
|
)
|
||||||
|
watch_for(
|
||||||
|
browser: customer,
|
||||||
|
css: '.zammad-chat',
|
||||||
|
value: 'my name is me',
|
||||||
|
)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
def disable_chat
|
||||||
|
login(
|
||||||
|
browser: agent,
|
||||||
|
username: 'master@example.com',
|
||||||
|
password: 'test',
|
||||||
|
url: browser_url,
|
||||||
|
)
|
||||||
|
tasks_close_all(
|
||||||
|
browser: agent,
|
||||||
|
)
|
||||||
|
|
||||||
|
# disable chat
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: 'a[href="#manage"]',
|
||||||
|
)
|
||||||
|
click(
|
||||||
|
browser: agent,
|
||||||
|
css: '.content.active a[href="#channels/chat"]',
|
||||||
|
)
|
||||||
|
switch(
|
||||||
|
browser: agent,
|
||||||
|
css: '.content.active .js-chatSetting',
|
||||||
|
type: 'off',
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
Loading…
Reference in a new issue