Skip to content

Commit e24f73f

Browse files
Add files via upload
1 parent a2ca7a8 commit e24f73f

File tree

9 files changed

+283
-36
lines changed

9 files changed

+283
-36
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
@media (pointer:none), (pointer:coarse) {
2+
.wsa[wsa-stat="closed"]{
3+
height: 12px;
4+
}
5+
}

WebServerAI/assets/AI/css/webserverai.min.css

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@
4444
--wsa-dark-copy: #cdcbcb;
4545
--wsa-dark-scrollbar-bg: #525252;
4646
--wsa-dark-scrollbar-thumb: #3c3d3b;
47+
--wsa-dark-toggleBtn-bg:rgba(71, 71, 71, 0.65);
48+
--wsa-dark-toggleBtn-color: rgb(255,255,255);
4749

4850
--wsa-box-width: 60%;
4951
--wsa-box-height: 280px;
@@ -84,9 +86,11 @@
8486
cursor: -moz-grabbing;
8587
cursor: -webkit-grabbing;
8688
}
89+
8790
.wsa[wsa-stat="closed"]{
88-
height: 0;
91+
height: 0px;
8992
}
93+
9094
.wsa[wsa-stat="closed"] .wsa-container{
9195
overflow: hidden;
9296
}
@@ -153,10 +157,13 @@
153157
right: 0;
154158
}
155159

160+
156161
.wsa .wsa-title{
157162
padding-top: .5rem;
158163
text-align: center;
159164
width: 100%;
165+
display: grid;
166+
position: relative;
160167
}
161168
.wsa .wsa-title .wsa-version{
162169
font-size: 15px;
@@ -174,7 +181,7 @@
174181
padding: 1rem;
175182
height: 75%;
176183
position: relative;
177-
overflow-y: auto;
184+
display: contents;
178185
}
179186
.wsa .wsa-ui *{
180187
width: 100%;

WebServerAI/assets/AI/js/components/Learner.js

Lines changed: 83 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,11 +118,12 @@ class Listener{
118118
AICode = AICode.split(/(?<=})\|\|/g).map((x)=>{return x.replace(/^{|}$/g, '')}).filter((x)=>{return x!==''});
119119
if(AICode.length>0){
120120
for(let i=0;i<AICode.length;i++){
121-
const action = AICode[i].split('_')[0].toLocaleLowerCase(),
121+
const action = AICode[i].split('_')[0].toLocaleLowerCase().replace(/^{/,''),
122122
value = AICode[i].split('_')[1];
123123
switch(action){
124124
case 'add':
125125
switch(value.toLocaleLowerCase()){
126+
126127
case 'abbr':
127128
this.holder+=1;
128129
this.lineCode.push({tagName: 'abbr',styles:{},scripts:{}});
@@ -330,6 +331,58 @@ class Listener{
330331
this.holder+=1;
331332
this.lineCode.push({tagName: 'img',styles:{},scripts:{}});
332333
break;
334+
case 'ruby':
335+
this.holder+=1;
336+
this.lineCode.push({tagName: 'ruby',styles:{},scripts:{}});
337+
break;
338+
case 'rp':
339+
this.holder+=1;
340+
this.lineCode.push({tagName: 'rp',styles:{},scripts:{}});
341+
break;
342+
case 'rt':
343+
this.holder+=1;
344+
this.lineCode.push({tagName: 'rt',styles:{},scripts:{}});
345+
break;
346+
case 'samp':
347+
this.holder+=1;
348+
this.lineCode.push({tagName: 'samp',styles:{},scripts:{}});
349+
break;
350+
case 'section':
351+
this.holder+=1;
352+
this.lineCode.push({tagName: 'section',styles:{},scripts:{}});
353+
break;
354+
case 'span':
355+
this.holder+=1;
356+
this.lineCode.push({tagName: 'span',styles:{},scripts:{}});
357+
break;
358+
case 'sub':
359+
this.holder+=1;
360+
this.lineCode.push({tagName: 'sub',styles:{},scripts:{}});
361+
break;
362+
case 'sup':
363+
this.holder+=1;
364+
this.lineCode.push({tagName: 'sup',styles:{},scripts:{}});
365+
break;
366+
case 'summary':
367+
this.holder+=1;
368+
this.lineCode.push({tagName: 'summary',styles:{},scripts:{}});
369+
break;
370+
case 'tblrow':
371+
this.holder+=1;
372+
this.lineCode.push({tagName: 'tr',styles:{},scripts:{}});
373+
break;
374+
case 'tblhead':
375+
this.holder+=1;
376+
this.lineCode.push({tagName: 'th',styles:{},scripts:{}});
377+
break;
378+
case 'tblcell':
379+
this.holder+=1;
380+
this.lineCode.push({tagName: 'td',styles:{},scripts:{}});
381+
break;
382+
case 'table':
383+
this.holder+=1;
384+
this.lineCode.push({tagName: 'table',styles:{},scripts:{},html:`<thead></thead><tbody></tbody>`});
385+
break;
333386
case 'kbd':
334387
this.holder+=1;
335388
this.lineCode.push({tagName: 'kbd',styles:{},scripts:{}});
@@ -346,6 +399,10 @@ class Listener{
346399
this.holder+=1;
347400
this.lineCode.push({tagName: 'source',styles:{},scripts:{}});
348401
break;
402+
case 'picture':
403+
this.holder+=1;
404+
this.lineCode.push({tagName: 'picture',styles:{},scripts:{}});
405+
break;
349406
case 'nav':
350407
this.holder+=1;
351408
this.lineCode.push({tagName: 'nav',styles:{},scripts:{}});
@@ -367,6 +424,10 @@ class Listener{
367424
this.holder+=1;
368425
this.lineCode.push({tagName: 'form',styles:{},scripts:{}});
369426
break;
427+
case 'progress':
428+
this.holder+=1;
429+
this.lineCode.push({tagName: 'progress',styles:{},scripts:{}});
430+
break;
370431
case 'labelblock':
371432
this.holder+=1;
372433
this.lineCode.push({tagName: 'label',styles:{},scripts:{}});
@@ -465,7 +526,11 @@ class Listener{
465526
break;
466527
case 'selectbox':
467528
this.holder+=1;
468-
this.lineCode.push({tagName: 'select',styles:{},scripts:{}, wsaNoSelect:false});
529+
this.lineCode.push({tagName: 'select',styles:{},scripts:{}});
530+
break;
531+
case 'output':
532+
this.holder+=1;
533+
this.lineCode.push({tagName: 'output',styles:{},scripts:{}});
469534
break;
470535
}
471536
break;
@@ -570,9 +635,21 @@ class Listener{
570635
case 'value':
571636
this.lineCode[this.holder].value = value;
572637
break;
638+
case 'contenteditable':
639+
this.lineCode[this.holder].contenteditable = true;
640+
break;
641+
case 'for':
642+
this.lineCode[this.holder].for = value;
643+
break;
573644
case 'src':
574645
this.lineCode[this.holder].src = value;
575646
break;
647+
case 'srcset':
648+
this.lineCode[this.holder].srcset = value;
649+
break;
650+
case 'media':
651+
this.lineCode[this.holder].media = value;
652+
break;
576653
case 'pxs':
577654
this.lineCode[this.holder].pxs = value;
578655
break;
@@ -668,8 +745,11 @@ class Listener{
668745
(this.lineCode[i].dir ? elem.dir = this.#dirName(this.lineCode[i].dir) : '');
669746
(this.lineCode[i].cite ? elem.cite = this.lineCode[i].cite : '');
670747
(this.lineCode[i].value ? elem.value = this.lineCode[i].value : '');
671-
(this.lineCode[i].wsaNoSelect ? elem.setAttribute('wsa-noselect','') : '');
748+
(this.lineCode[i].for ? elem.setAttribute('for',this.lineCode[i].for) : '');
749+
(this.lineCode[i].contenteditable ? elem.contentEditable = true : '');
672750
(this.lineCode[i].src ? elem.src = this.lineCode[i].src : '');
751+
(this.lineCode[i].srcset ? elem.srcset = this.lineCode[i].srcset : '');
752+
(this.lineCode[i].media ? elem.media = this.lineCode[i].media : '');
673753
(this.lineCode[i].controls ? elem.controls = this.lineCode[i].controls : '');
674754
(this.lineCode[i].title ? elem.title = this.lineCode[i].title : '');
675755
(this.lineCode[i].label ? elem.label = this.lineCode[i].label : '');
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import {shortcutJS} from '/WebServerAI/assets/AI/js/components/shortcut.min.js';
2+
var shortcuts = {
3+
'bold':{
4+
ctrlKey: true,
5+
keyName: 'b'
6+
}
7+
}
8+
function loadEditables(sc=null){
9+
sc = shortcuts
10+
document.querySelector('body[contenteditable]').addEventListener('keydown',(e)=>{
11+
const key = e.keyCode||e.which;
12+
})
13+
}
14+
export {shortcuts, loadEditables};

WebServerAI/assets/AI/js/components/utils.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,13 @@ function getInfo(name){
262262
d = e.request(window.location.origin+'/WebServerAI/libs/ai_checker.php?name='+name, true);
263263
return d[navigator.language.toLocaleLowerCase()];
264264
}
265+
/**
266+
* Checks if WebServerAI is active
267+
* @returns {Boolean} TRUE if webserverai is active, else FALSE.
268+
*/
269+
function isWSActive(){
270+
return (document.documentElement.hasAttribute('wsa-active') ? true : false);
271+
}
265272

266273
const VIDEO_PATH = window.location.origin+'/WebServerAI/assets/AI/videos',
267274
AUDIO_PATH = window.location.origin+'/WebServerAI/assets/AI/audios',
@@ -278,6 +285,7 @@ export {
278285
version_compare,
279286
isScrollable,
280287
getInfo,
288+
isWSActive,
281289
//CONST
282290
VIDEO_PATH,
283291
AUDIO_PATH,

WebServerAI/assets/AI/js/webserverai.min.js

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import Listener from '/WebServerAI/assets/AI/js/components/Learner.js';
22
import Extensions from '/WebServerAI/assets/AI/js/components/extenstions.js';
33
import { filter, caches} from '/WebServerAI/assets/AI/js/components/security.js';
4-
import {rgbaToHex, calculateContrastRatio, keyboardFocusable, isDecimal} from '/WebServerAI/assets/AI/js/components/utils.js';
4+
import {loadEditables} from '/WebServerAI/assets/AI/js/components/editable.js';
5+
import {rgbaToHex, calculateContrastRatio, keyboardFocusable, isDecimal, isWSActive} from '/WebServerAI/assets/AI/js/components/utils.js';
56
var responce, elemRole='', codeTheme='default';
67

78
window.WebServerAI = class {
@@ -153,7 +154,11 @@ window.WebServerAI = class {
153154
#formatDate(date){
154155
const splitDate = date.split('/');
155156
const d = new Date(parseInt(splitDate[2]),parseInt(splitDate[0])-1,parseInt(splitDate[1]));
156-
return d.toLocaleDateString(navigator.language);
157+
return d.toLocaleDateString(navigator.language,{
158+
month: '2-digit',
159+
day: '2-digit',
160+
year: 'numeric'
161+
});
157162
}
158163
/**
159164
* Get all parents to the branch
@@ -212,14 +217,18 @@ window.WebServerAI = class {
212217
chatBox.setAttribute('wsa-position',this.pos);
213218
chatBox.setAttribute('wsa-stat',this.status);
214219
chatBox.classList.add('wsa');
220+
chatBox.contentEditable = false;
215221
chatBox.draggable = true;
216222
chatBox.setAttribute('ondragstart', 'dragBlock(event)');
217223
chatBox.setAttribute('ondragend', 'endDragBlock(event)');
218-
chatBox.innerHTML = `<div class="wsa-toggle-btn wsa-opened"></div>`;
219224
document.querySelector('head').innerHTML+='<link rel="stylesheet" href="'+this.origin+'/WebServerAI/assets/AI/css/webserverai.min.css"/>';
225+
document.querySelector('head').innerHTML+='<link rel="stylesheet" href="'+this.origin+'/WebServerAI/assets/AI/css/webserverai-mobile.min.css"/>';
220226
const container = document.createElement('div');
221227
container.classList.add('wsa-container');
222-
container.innerHTML = `<h2 class="wsa-title">`+this.lang['dictionary'].title+` <span class="wsa-version" title="`+this.#formatDate(this.botInfo['Updated'])+`">v`+this.botInfo['Version']+` (`+this.lang.name+`)</span></h2>
228+
container.innerHTML = `<h2 class="wsa-title">`+
229+
this.lang['dictionary'].title+`
230+
<span class="wsa-version" title="`+
231+
this.#formatDate(this.botInfo['Updated'])+`">v`+this.botInfo['Version']+` (`+this.lang.name+`)</span></h2>
223232
<div class="wsa-ui">
224233
<div class="wsa-history"></div>
225234
<div class="wsa-editor">
@@ -513,9 +522,26 @@ window.WebServerAI = class {
513522
}
514523
}
515524
});
525+
document.querySelector('html[wsa-active]').addEventListener('touchstart',(e)=>{
526+
if(!e.target.matches('.wsa, .wsa *, .wsa-drop-bubble, .wsa-targetName, pre code, pre code *, code * , html, .code-toolbar .toolbar, .code-toolbar .toolbar *, .wpa-build-gps, .wpa-build-gps *, input, body, [wsa-noselect], [wsa-noselect] *')){
527+
const uit = this.#branchLoad(e.target);
528+
document.querySelector('.wsa-userinput').value+='"'+uit+'"';
529+
}
530+
});
516531

517532
}
518533
}
534+
var screenY=0;
535+
if(document.querySelector('.wsa')){
536+
document.querySelector('.wsa').addEventListener('touchmove',function(e){
537+
if(e.touches[0].screenY<screenY)
538+
this.setAttribute('wsa-stat','opened');
539+
else
540+
this.setAttribute('wsa-stat','closed');
541+
screenY = e.touches[0].screenY;
542+
});
543+
}
544+
519545
window.addEventListener('load',()=>{
520546
//syntax hightlight
521547
const hightlightStyle = document.createElement('link'),
@@ -528,6 +554,11 @@ window.WebServerAI = class {
528554
highlightScript.type = 'text/javascript';
529555
document.body.appendChild(highlightScript);
530556
});
557+
558+
//Table edit
559+
if(isWSActive()){
560+
document.body.contentEditable = true;
561+
}
531562
}
532563
/**
533564
* Triggers on users input from textarea
@@ -600,6 +631,15 @@ window.WebServerAI = class {
600631
console.clear();
601632
canReturn = false;
602633
}
634+
if(str.match(/^wsa --preview( true| false)?$/)){
635+
const match = str.match(/^wsa --preview( true| false)?$/);
636+
if(!match[1])
637+
document.body.contentEditable = false;
638+
else
639+
document.body.contentEditable = true;
640+
641+
canReturn = false;
642+
}
603643
if(str.match(/^wsa --info$/)){
604644
setTimeout(()=>{
605645
this.createCmd(this.botName, this.lang['dictionary'].name+': '+this.botName+'<br/>'+this.lang['dictionary'].version+' '+this.botInfo['Version']+'<br/>'+this.lang['dictionary'].updated+': '+

WebServerAI/build/video-player/video-player.js

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -171,33 +171,35 @@ if(ext.isAllowed(buildName)){
171171

172172
events.cmdLine(/new source \"(.*?)\"( and set quality to \"(.*?)\")?/g,events.get(e,'input'),(c)=>{
173173
var useFirstVideo = 0;
174-
c.forEach((e)=>{
175-
const list = events.statement(e,false),
176-
sendURL = (list[0].match(/[(http(s)?):\/\/(www\.)?a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/) ? list[0] : VIDEO_PATH+DS+list[0]),
177-
xhr = new XMLHttpRequest(),
178-
source = document.createElement('source');
179-
xhr.open("GET",sendURL);
180-
xhr.responseType = 'arraybuffer';
181-
xhr.onload = ()=>{
182-
const blob = new Blob([xhr.response]),
183-
url = URL.createObjectURL(blob);
184-
source.src = url;
185-
(list[1] ? source.setAttribute('size',list[1]) : '');
186-
source.type = 'video/mp4';
187-
if(useFirstVideo==0)
188-
document.querySelector('#'+buildName+'_'+v+' .video-container video').src = document.querySelectorAll('#'+buildName+'_'+v+' .video-container video source')[0].src;
189-
if(useFirstVideo>=c.length-1){
190-
thumbnailLoaded();
191-
qualitySelector();
192-
}
193-
useFirstVideo++;
194-
};
195-
xhr.send();
196-
document.querySelector('#'+buildName+'_'+v+' .video-container video').appendChild(source);
197-
198-
});
174+
if(c){
175+
c.forEach((e)=>{
176+
const list = events.statement(e,false),
177+
sendURL = (list[0].match(/[(http(s)?):\/\/(www\.)?a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/) ? list[0] : VIDEO_PATH+DS+list[0]),
178+
xhr = new XMLHttpRequest(),
179+
source = document.createElement('source');
180+
xhr.open("GET",sendURL);
181+
xhr.responseType = 'arraybuffer';
182+
xhr.onload = ()=>{
183+
const blob = new Blob([xhr.response]),
184+
url = URL.createObjectURL(blob);
185+
source.src = url;
186+
(list[1] ? source.setAttribute('size',list[1]) : '');
187+
source.type = 'video/mp4';
188+
if(useFirstVideo==0)
189+
document.querySelector('#'+buildName+'_'+v+' .video-container video').src = document.querySelectorAll('#'+buildName+'_'+v+' .video-container video source')[0].src;
190+
if(useFirstVideo>=c.length-1){
191+
thumbnailLoaded();
192+
qualitySelector();
193+
}
194+
useFirstVideo++;
195+
};
196+
xhr.send();
197+
document.querySelector('#'+buildName+'_'+v+' .video-container video').appendChild(source);
198+
});
199+
}
199200
});
200-
document.querySelector('#'+buildName+'_'+v+' .video-container video').preload = 'metadata';
201+
if(document.querySelector('#'+buildName+'_'+v+' .video-container video'))
202+
document.querySelector('#'+buildName+'_'+v+' .video-container video').preload = 'metadata';
201203
if(subtitles){
202204
subtitles.forEach((s)=>{
203205
const st = events.statement(s,false),

0 commit comments

Comments
 (0)