@@ -28,6 +28,9 @@ class VueDashboard {
2828 this . removeCron_modalConfirm = document . querySelector ( "#remove_modal .modal-confirm" ) ;
2929 this . removeCronModal = M . Modal . init ( document . querySelector ( "#remove_modal" ) ) ;
3030
31+ this . optionsModal = M . Modal . init ( document . querySelector ( "#options_modal" ) ) ;
32+ this . editMessageModal = M . Modal . init ( document . querySelector ( "#editMessage" ) ) ;
33+
3134 this . tableLines = document . querySelectorAll ( "tbody tr" ) ;
3235 this . guild_id = new URLSearchParams ( location . search ) . get ( "id" ) ;
3336
@@ -68,6 +71,7 @@ class VueDashboard {
6871 }
6972
7073 addEventListener ( ) {
74+ this . tableLines = document . querySelectorAll ( "tbody tr" ) ;
7175 document . querySelector ( ".schedule-add-btn" ) . addEventListener ( "click" , ( ) => this . addCronModal . open ( ) ) ;
7276 document . querySelector ( ".timer-add-btn" ) . addEventListener ( "click" , ( ) => this . addTimerModal . open ( ) ) ;
7377 document . querySelector ( ".guild-timezone" ) . addEventListener ( "click" , ( ) => this . timezoneModal . open ( ) ) ;
@@ -79,11 +83,18 @@ class VueDashboard {
7983 document . querySelectorAll ( ".user_el" ) . forEach ( el => el . addEventListener ( "click" , ( ) => this . onUserClick ( el ) ) ) ;
8084 document . querySelectorAll ( ".channel_el" ) . forEach ( el => el . addEventListener ( "click" , ( ) => this . onChannelClick ( el ) ) ) ;
8185 document . querySelector ( "#setTimezone .modal-confirm" ) . addEventListener ( "click" , ( ) => this . onConfirmSetTimer ( ) ) ;
86+ document . querySelector ( "#options_modal .delete" ) . addEventListener ( "click" , ( ) => this . onRemoveEl ( ) ) ;
87+ document . querySelector ( "#options_modal .edit" ) . addEventListener ( "click" , ( ) => this . onOpenEdit ( ) ) ;
88+ document . querySelector ( "#editMessage .modal-confirm" ) . addEventListener ( "click" , ( ) => this . onConfirmUpdateMessage ( ) ) ;
8289 this . eachSelect . addEventListener ( "change" , ( ) => this . onChangeEachSelect ( ) ) ;
8390 this . addCron_modalConfirm . addEventListener ( "click" , ( ) => this . onConfirmAddCron ( ) ) ;
8491 this . addTimer_modalConfirm . addEventListener ( "click" , ( ) => this . onConfirmAddTimer ( ) ) ;
8592
86- this . tableLines . forEach ( el => el . addEventListener ( "click" , ( ) => this . onTableLineCLick ( el ) ) ) ;
93+ this . tableLines . forEach ( el => {
94+ el . addEventListener ( "click" , ( ) => this . onElClick ( el ) ) ;
95+ el . querySelector ( ".edit" ) . addEventListener ( "click" , ( ) => this . onOpenEdit ( el ) ) ;
96+ el . querySelector ( ".delete" ) . addEventListener ( "click" , ( ) => this . onRemoveEl ( el ) ) ;
97+ } ) ;
8798 this . removeCron_modalConfirm . addEventListener ( "click" , ( ) => this . onConfirmRemoveCron ( ) ) ;
8899 }
89100
@@ -371,11 +382,22 @@ class VueDashboard {
371382 } else response . text ( ) . then ( ( responseText ) => {
372383 let name ;
373384 document . channels . forEach ( element => { if ( element . id == channel_id ) name = element . name ; } ) ;
374- document . querySelector ( "tbody" ) . insertAdjacentHTML ( "afterbegin" , '<tr id="' + responseText + '" channel_id="' + channel_id + '"><td>' + desc + '</td><td>#' + name + '</td><td>' + content + '<i class="material-icons">delete</i></td></tr>' ) ;
375- document . getElementById ( responseText ) . addEventListener ( "click" , ( ) => {
376- self . removeCronModal . open ( ) ;
377- self . idToRemove = responseText ;
378- } ) ;
385+ document . querySelector ( "tbody" ) . insertAdjacentHTML ( "afterbegin" , `
386+ <tr id="${ responseText } " channel_id="${ channel_id } ">
387+ <td>${ desc } </td>
388+ <td>#${ name } </td>
389+ <td class="message">
390+ <div>
391+ <p class="description">${ content } </p>
392+ <div class="options">
393+ <i class="material-icons waves-effect edit">edit</i>
394+ <span class="divider"></span>
395+ <i class="material-icons waves-effect delete">delete</i>
396+ </div>
397+ </div>
398+ </td>
399+ </tr>` ) ;
400+ this . addEventListener ( ) ;
379401 this . form . reset ( ) ;
380402 M . toast ( { html : "This message has successfully been set" } , 5000 ) ;
381403 } ) ;
@@ -432,24 +454,51 @@ class VueDashboard {
432454 } else response . text ( ) . then ( ( responseText ) => {
433455 let name ;
434456 document . channels . forEach ( element => { if ( element . id == channel_id ) name = element . name ; } ) ;
435- document . querySelector ( "tbody" ) . insertAdjacentHTML ( "afterbegin" , '<tr id="' + responseText + '" channel_id="' + channel_id + '"><td>' + desc + '</td><td>#' + name + '</td><td>' + content + '<i class="material-icons">delete</i></td></tr>' ) ;
436- document . getElementById ( responseText ) . addEventListener ( "click" , ( ) => {
437- self . removeCronModal . open ( ) ;
438- self . idToRemove = responseText ;
439- } ) ;
457+ document . querySelector ( "tbody" ) . insertAdjacentHTML ( "afterbegin" , `
458+ <tr id="${ responseText } " channel_id="${ channel_id } ">
459+ <td>${ desc } </td>
460+ <td>#${ name } </td>
461+ <td class="message">
462+ <div>
463+ <p class="description">${ content } </p>
464+ <div class="options">
465+ <i class="material-icons waves-effect edit">edit</i>
466+ <span class="divider"></span>
467+ <i class="material-icons waves-effect delete">delete</i>
468+ </div>
469+ </div>
470+ </td>
471+ </tr>` ) ;
472+ this . addEventListener ( ) ;
440473 //Suppression du message automatiquement si la date est dépassée.
441474 setTimeout ( ( ) => { document . getElementById ( responseText ) . remove ( ) ; } , timestamp * 60 * 1000 - Date . now ( ) ) ;
442475 this . formTimer . reset ( ) ;
443476 M . toast ( { html : "This message has successfully been set" } , 5000 ) ;
444477 } ) ;
445478 this . addTimerModal . close ( ) ;
446- } ) ;
479+ } ) ;
447480 }
448-
449- onTableLineCLick ( el ) {
450- this . idToRemove = el . getAttribute ( "id" ) ;
481+ onRemoveEl ( el ) {
482+ if ( el )
483+ this . idToRemove = el . getAttribute ( "id" ) ;
484+ this . optionsModal . close ( ) ;
451485 this . removeCronModal . open ( ) ;
452486 }
487+ onElClick ( el ) {
488+ if ( window . innerWidth < 1000 ) {
489+ this . idToRemove = el . getAttribute ( "id" ) ;
490+ this . optionsModal . open ( ) ;
491+ }
492+ }
493+ onOpenEdit ( el ) {
494+ if ( el )
495+ this . idToRemove = el . getAttribute ( "id" ) ;
496+ document . querySelector ( "#contentEdit" ) . textContent = document . getElementById ( this . idToRemove ) . querySelector ( ".description" ) . innerText ;
497+ M . textareaAutoResize ( document . querySelector ( "#contentEdit" ) ) ;
498+ M . updateTextFields ( ) ;
499+ this . optionsModal . close ( ) ;
500+ this . editMessageModal . open ( ) ;
501+ }
453502 onConfirmRemoveCron ( ) {
454503 fetch ( `/ajax/remove_message?id=${ this . idToRemove } &guild_id=${ this . guild_id } ` ) . then ( ( response ) => {
455504 if ( response . status != 200 ) {
@@ -475,6 +524,39 @@ class VueDashboard {
475524 document . querySelector ( ".guild-timezone h5" ) . textContent = "Timezone : " + timezone ;
476525 this . timezoneModal . close ( ) ;
477526 }
527+ async onConfirmUpdateMessage ( ) {
528+ const message = document . querySelector ( "#contentEdit" ) . value ;
529+ const formData = new FormData ( ) ;
530+
531+ let sysContent = message ;
532+ document . channels . forEach ( el => {
533+ sysContent = sysContent . replace ( "#" + el . name , "<#" + el . id + ">" ) ;
534+ } ) ;
535+ document . users . forEach ( el => {
536+ const name = el . nickname || el . username ;
537+ sysContent = sysContent . replace ( "@" + name , "<@" + el . id + ">" ) ;
538+ } ) ;
539+ document . roles . forEach ( el => {
540+ sysContent = sysContent . replace ( "@" + el . username , "<@&" + el . id + ">" ) ;
541+ } ) ;
542+
543+ formData . append ( "content" , message ) ;
544+ formData . append ( "msg_id" , this . idToRemove ) ;
545+ formData . append ( "guild_id" , this . guild_id ) ;
546+ formData . append ( "sys_content" , sysContent ) ;
547+ const req = await fetch ( "/ajax/set_message" , {
548+ body : formData ,
549+ method : "POST"
550+ } ) ;
551+ if ( req . status != 200 ) {
552+ console . log ( "Error : " , req . status , " " , req . statusText ) ;
553+ M . toast ( { html : "Error : Impossible to set this message" } , 5000 ) ;
554+ return ;
555+ }
556+ this . editMessageModal . close ( ) ;
557+ M . toast ( { html : "Message updated !" } ) ;
558+ document . getElementById ( this . idToRemove ) . querySelector ( ".description" ) . textContent = message ;
559+ }
478560}
479561
480562window . addEventListener ( "DOMContentLoaded" , e => new VueDashboard ( ) ) ;
0 commit comments