SyncEditor - Anteprima durante la digitazione

Tutorial SyncEditor - Anteprima durante la digitazione

Messaggio Da Niko Dom 31 Ott 2021 - 17:36

SyncEditor - Anteprima durante la pubblicazione di messaggi


Se hai già usato StackOverflow , allora sai che hanno una versione semplificata di SCEditor che usa Forumattivo. Tuttavia, il loro editor mostra un'anteprima del post mentre l'utente digita .

Con questo plugin, quella funzione è ora disponibile su Forumattivo!

 SyncEditor - Anteprima durante la digitazione Captur10

Installazione Javascript

Andiamo verso Pannello di amministrazione ► Moduli ► HTML & Javascript ► Gestione del codice Javascript, assicuriamoci che la gestione del codice Javascript sia attivata, e creiamo un nuovo codice con queste impostazioni:
  • Titolo: a tua scelta
  • Dove: in tutte le pagine
  • Codice:
    Codice:
    $(function() {
        'SyncEditor Version v0.6 ©️ 2016';
        'Developed by Ace 1';
        'All rights reserved.';
     
        var lang = {
              preview: 'Anteprima', // ALL VERSIONS
              subject: 'Titolo', // PHPBB2
              appearance: 'Questo è come il tuo post comparirà una volta pubblicato' // PUNBB
            },
            select_code = false,
            preview_button_on = false;
     
        if ((/\/t\d+/.test(window.location.href) || /\/(post|privmsg|(post\?(f|t|p)=\d+&mode=(newtopic|reply|quote|editpost)))/.test(window.location.href)) && $.sceditor) {
     
            if ($.sceditor) {
                var preview,
     
                    version = $('.bodylinewidth')[0] ? 0 : document.getElementById('wrap') ? 1 : $('div.pun')[0] ? 2 : document.getElementById('ipbwrapper') ? 3 : document.getElementById('fa_edge') ? 4 : '',
     
                    simplePreview = [
                        '<table class="forumline preview" width="100%" border="0" cellspacing="1" cellpadding="4"><tbody><tr><th class="thHead" height="25">' + lang.preview + '</th></tr><tr><td class="row1"><table width="100%" border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div class="postbody"></div></td></tr></tbody></table></td></tr><tr><td class="spaceRow" height="1"></td></tr></tbody></table><br clear="all">',
                        '<div id="preview" class="post row2"><div class="h3">' + lang.preview + '</div><div class="content" style="min-height: inherit"></div></div>',
                        '<div class="main-head clearfix preview"><p class="h2">' + lang.preview + '</p></div><div class="main-content topic" style="text-align: left;"><div class="post"><div class="postmain" style="margin-left: 0;"><div class="posthead"><h2>' + lang.appearance + '.</h2></div><div class="postbody"><div class="post-entry"><div class="entry-content"></div></div></div></div></div></div>',
                        '<div id="preview" class="post borderwrap" style="background-color: #e4e6e9"><div class="maintitle clearfix"><h3>' + lang.preview + '</h3></div><div class="post-entry row1"></div></div>',
                        '<div id="preview" class="content-block post"><div class="title">' + lang.preview + '</div><div class="post-inner"><div class="postbody"><div class="content"></div></div></div></div>'
                    ][version],
     
                    createSimplePreview = function() {
                        version == 0 // PHPBB2
                            ? $('form[action="/viewforum"]').before(simplePreview)
                            : (
                              version == 1 || version == 4 // PHPBB3 && EDGE
                                ? $('#quick_reply').after(simplePreview)
                                : (
                                  version == 2 // PUNBB
                                    ? $('#quick_reply').append(simplePreview)
                                    : (
                                      version == 3 // INVISION
                                        ? $('#qpost').after(simplePreview)
                                        : ''
                                    )
                                )
                            )
                    },
     
                    advancedPreview = [
                        '<table class="forumline preview" width="100%" border="0" cellspacing="1" cellpadding="4"><tbody><tr><th class="thHead" height="25">' + lang.preview + '</th></tr><tr><td class="row1"><span class="postdetails"><img src="https://2img.net/i/fa/empty.gif" alt="Post" title="Post" border="0">' + lang.subject + ': <img src="https://2img.net/i/fa/empty.gif" alt="" border="0"><span style="user-select: none !important; color: transparent !important; text-shadow: none !important; background: none !important;"><3</span>' + formatDate() + '</span></td></tr><tr><td class="row1"><table width="100%" border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div class="postbody"></div></td></tr></tbody></table></td></tr><tr><td class="spaceRow" height="1"><img src="https://2img.net/i/fa/empty.gif" height="1" width="1" alt=""></td></tr></tbody></table><br clear="all">',
                        '<div id="preview" class="post row2"><div class="inner"><span class="corners-top"><span></span></span><div class="postbody"><div class="h3">' + lang.preview + '</div><div class="content"></div></div><span class="corners-bottom"><span></span></span></div></div>',
                        '<div class="main-head clearfix preview"><p class="h2">' + lang.preview + '</p></div><div class="main-content topic"><div class="post"><div class="postmain"><div class="posthead"><h2>' + lang.appearance + '.</h2></div><div class="postbody"><div class="user"><h4 class="user-ident"><span class="username">' + _userdata.username + '</span></h4></div><div class="post-entry"><div class="entry-content"></div></div></div></div></div></div>',
                        '<div id="preview" class="post borderwrap"><div class="maintitle clearfix"><h3>' + lang.preview + '</h3></div><div class="postbody"><div class="post-entry row1"></div></div></div>',
                        simplePreview + '<hr>'
                    ][version],
     
                    createAdvancedPreview = function() {
                        version == 0 // PHPBB2
                            ? $('form[action="/post"]').before(advancedPreview)
                            : (
                              version == 1 || version == 4 // PHPBB3 && EDGE
                                ? $('h1.page-title').after(advancedPreview)
                                : (
                                  version == 2 // PUNBB
                                    ? $('form.frm-form').prepend(advancedPreview)
                                    : (
                                      version == 3 // INVISION
                                        ? $('ul#navstrip').after(advancedPreview)
                                        : ''
                                    )
                                )
                            )
                    },
     
                    actualContainer = [
                        '.preview .row1 table .postbody',
                        '#preview .content',
                        /* form.frm-form */ '.preview .entry-content',
                        '#preview .post-entry',
                        '#preview .content'
                    ][version],
               
                    removeandreplaceCurrent = function() {
                      preview = actualContainer.split(/\s/).shift();
                      $(preview).remove();
                      createAdvancedPreview();
                 
                      if (version == 4) $(preview).next().remove();
                    };
     
                if ( version == 0 && document.forms.post.subject ) {
                    document.forms.post.subject.oninput = function() {
                        var v = this.value;
                        $('span.postdetails').eq(0).contents().filter(function() {return this.nodeType == 3})[0].textContent = 'Subject: ' + (v == 'undefined' ? '' : v);
                    };
                }
     
                function formatDate() {
                    var d = Date(),
                        y = new Date().getFullYear(),
                        m = new Date().getMinutes(),
                        s = new Date().getSeconds(),
                        n = d.indexOf(m + ':' + s),
                        realDate = d.substring(0, n + 5);
                    realDate = realDate.slice(0, realDate.indexOf(y) + 4) + " - " + realDate.slice(realDate.indexOf(y) + 5);
                    return realDate;
                }
         
                /(\/t\d+)|privmsg/.test(window.location.href)
                    ? createSimplePreview()
                    : (
                      /\/post\?(f|t|p)=\d+&mode=(newtopic|reply|quote|editpost)/.test(window.location.href)
                          ? createAdvancedPreview()
                          : removeandreplaceCurrent()
                    )
            }
     
            $('#text_editor_textarea').ready(function() {
              if (_userdata.user_desktop) return false;
                var instance = $('#text_editor_textarea').sceditor('instance'),
                    sceditorContent, previewContent,
     
                    convert = function() {
                        sceditorContent = instance.val();
                        previewContent = instance.fromBBCode(sceditorContent, false);
                        $(actualContainer).html(previewContent);
             
                        // Quote Parsing
                        if (/\[quote.*\]/i.test(sceditorContent) && /\[\/quote\]/i.test(sceditorContent)) {
                          if (version == 0) {
                              $(actualContainer)[0].innerHTML = $(actualContainer)[0].innerHTML
                                .replace(/\<blockquote\>/g, '<dl class="codebox">')
                                .replace(/\<\/blockquote\>/g, '</dl>')
                                .replace(/\<cite\>/g, '<dt><span class="genmed"><b><a href="#" rel="nofollow">')
                                .replace(/\<\/cite\>/g, '</a> wrote:</b></span></dt>');
     
                              $('dl.codebox > dt', actualContainer).each(function() {
                                  $(this).parent().contents().filter(function() {
                                      return this.tagName != 'DT' && this.className != 'code'
                                  }).wrapAll('<dd class="quote" />');
                              });
     
                              $('dl.codebox', actualContainer).each(function() {
                                  $(this).parent().contents().filter(function() {
                                      return this.className != 'codebox'
                                  }).wrapAll('<span class="postbody" />');
                              });
                          } else {
                              $('blockquote', actualContainer).wrapInner('<div />');
                              $('blockquote cite', actualContainer).wrapInner('<a href="#" rel="nofollow" />');
                              $('blockquote cite', actualContainer).append(' wrote:');
                          }
                        }
                   
                        // Code Parsing
                        if (/\[code\]/i.test(sceditorContent) && /\[\/code\]/i.test(sceditorContent)) {
                          var codeTitle = 'Code:' + (select_code ? selection : '');
                          $('code', actualContainer).wrap('<dl class="codebox" />');
     
                          $('.codebox code', actualContainer).before('<dt>' + (version == 0 ? '<span class="genmed"><b>' + codeTitle + '</b></span>' : codeTitle) + '</dt>').wrap('<dd' + (version == 0 ? ' class="code"' : '') + ' />');
                          $('dd.code', actualContainer).wrapInner('<div class="cont_code" />');
                          if ($('div.cont_code', actualContainer)[0]) ($('div.cont_code', actualContainer)[0].firstChild).contents().unwrap('code');
                        }
     
                        // Spoiler
                        if (/\[spoiler.*\]/i.test(sceditorContent) && /\[\/spoiler\]/i.test(sceditorContent)) {
                          $.sceditor.plugins.bbcode.bbcode.set('spoiler', {
                              tags: {
                                  'div': {
                                      'class': ['spoiler']
                                  }
                              },
                              format: '
    Spoiler:
    ',
                              html: function(token, attrs, content) {
                                  var a = attrs.defaultattr,
                                      c = content;
                                  if (a == undefined || a == '' || a == '"' || a == '\'') a = 'Spoiler';
                                  if (a && (a.charAt(0) == '"' || a.charAt(0) == '\'')) a = a.replace(/("|')/, '');
     
                                c = (version == 0 ? '<dt style="cursor: pointer;">' + a + ':</dt><dd class="spoiler_closed"> </dd><dd><div class="spoiler_content hidden">' + c + '</div></dd>' : '<dt style="cursor: pointer;">' + a + ':</dt><dd><div class="spoiler_content">' + c + '</div></dd>');
     
                                  return '<dl class="codebox spoiler">' + c + '</dl>';
                              }
                          });
                        }
     
                        // Smilies
                        var s, s2, re;
     
                        for (s in smileys) {
                            if ($(actualContainer).html() && $(actualContainer).html().indexOf(s) != -1) {
                                /\W/.test(s.replace(/:/g, '')) ? s2 = s.replace(/(.{1})/g, '\\$1') : s2 = s;
                                re = new RegExp(s2, 'gi');
                                $(actualContainer).html($(actualContainer).html().replace(re, '<img src="' + smileys[s] + '" class="smiley" />'));
                            }
                        }
                   
                        // Headings For PHPBB2 && PunBB
                        if (version == 0 || version == 2) {
                            $.sceditor.plugins.bbcode.bbcode.set('h2', {tags: { 'h2': null }, format: '

    {0}

    ',html: '<h2 class="post-content">{0}</h2>'});
                            $.sceditor.plugins.bbcode.bbcode.set('h3', {tags: { 'h3': null }, format: '

    {0}

    ',html: '<h3 class="post-content">{0}</h3>'});
                            $.sceditor.plugins.bbcode.bbcode.set('h4', {tags: { 'h4': null }, format: '

    {0}

    ',html: '<h4 class="post-content">{0}</h4>'});
                        }
     
                        // Scroll
                        if (/\[scroll.*\]/i.test(sceditorContent) && /\[\/scroll\]/i.test(sceditorContent)) {
                          $.sceditor.plugins.bbcode.bbcode.set('scroll', {
                              tags: {
                                  'marquee': null
                              },
                              format: '{0}',
                              html: function(token, attrs, content) {
                                  var c = content;
                                  c = '<marquee>' + c + '</marquee>';
     
                                  return '<span>' + c + '</span>';
                              }
                          });
                        }
                        // Updown
                        if (/\[updown.*\]/i.test(sceditorContent) && /\[\/updown\]/i.test(sceditorContent)) {
                          $.sceditor.plugins.bbcode.bbcode.set('updown', {
                              tags: {
                                  'marquee': {
                                      'direction': null
                                  }
                              },
                              format: '{0}',
                              html: function(token, attrs, content) {
                                  var c = content;
                                  c = '<marquee direction="up" scrollamount="1" style="height: 60px;">' + c + '</marquee>';
     
                                  return '<span>' + c + '</span>';
                              }
                          });
                        }
                    };
     
                /\/(post|privmsg|(post\?(f|t|p)=\d+&mode=(newtopic|reply|quote|editpost)))/.test(window.location.href) ? convert() : '';
     
                instance.bind('focus blur keydown keyup nodechanged', function() { convert(); });
     
                $('.sceditor-button').not('.sceditor-button-source').click(function() {
                    convert();
                    $('.sceditor-dropdown div').find('.button', '.sceditor-fontsize-option', 'sceditor-header-option').on('click', function() {
                    // $('.sceditor-dropdown div input.button').add('.sceditor-header-picker *').add('.sceditor-dropdown a.sceditor-fontsize-option').add('.sceditor-dropdown a.sceditor-fontsize-option > *').on('click', function() {
                        convert()
                    });
                    $('.sceditor-color-option').click(function() { setTimeout(convert, 100) });
                    // $('.smiley-element > img').click(function() { setTimeout(convert, 100) });
                });
     
            });
       
            /* Preview Option -- Coming Soon
            var toggle_preview_html = '<label>Toggle Preview <input type="checkbox" id="preview-content"><span class="checkbox-toggle"></span></label>';
         
            $('#preview').find('.tHead, .h3, .h2, h3, .title').first().append(toggle_preview_html);
            if (!localStorage.previewHTML || localStorage.previewHTML != 'true') {
              // localStorage.previewHTML == 'false' || undefined
              $('#preview').find('.tHead, .h3, .h2, h3, .title').first().next().remove();
            } else {
              $('#preview').find('.tHead, .h3, .h2, h3, .title')first().addClass('on');
              $('input#preview-content').prop('checked', true);
            }
         
            $('#preview-content').click(function() {
              var h = $(this).parent('label').parent(),
                  c = $(actualContainer);
           
              c[0] ? c.remove() : h.after('<div class="content" style="min-height: inherit"></div>');
              localStorage.previewHTML = c[0] ? false : true;
              h.toggleClass('on');
            });
         
            if (!$('[name="preview-content-styles"]')[0]) $('head').append('<style type="text/css" name="preview-content-styles">#preview .h3{color:red}#preview .h3.on{color:#0F0}#preview .h3 label{font-size:.9em;line-height:20px;font-weight:400;text-transform:none;position:relative;margin:0 10px}#preview .h3 label:before{position:absolute;content:"";background-color:#80A5C2;width:1px;height:100%;top:0;left:-6px}span.checkbox-toggle,span.checkbox-toggle:before{border-radius:50px}span.checkbox-toggle{position:relative;border:1px solid;width:30px;height:18px;background-color:red;display:inline-block;vertical-align:top;overflow:hidden;cursor:pointer}span.checkbox-toggle:before{content:"";position:absolute;height:14px;width:14px;top:50%;left:2px;transform:translateY(-50%);background-color:#600;transition:left .4s,color .75s,background-color .75s}input:checked+span.checkbox-toggle{background-color:#0F0}input:checked+span.checkbox-toggle:before{left:12px;background-color:#060}label:active span.checkbox-toggle:before{transition:all .2s;transform:translateY(-50%) scale(.5)}#preview-content{display:none}</style>');
            */
     
            if (version == 4) $('head').append('<style type="text/css">#quick_reply + #preview .post-inner { margin: 0 5px; }</style>');
            if (version == 1) $('head').append('<style type="text/css">[name=quickreply]+.h3+br+#quick_reply input[type=submit]{margin-bottom:25px}#quick_reply+#preview{padding:5px 10px}#quick_reply+#preview .h3{margin:3px 0}#quick_reply+#preview .content{font-size:1.3em;padding:1px}#preview .content font {line-height: normal}</style>');
            !preview_button_on ? $(document.forms.post.preview).remove() : '';
        }
     
        /*** Progress
        var logs = {
            v0.1 : 'Developed SyncEditor',
            v0.2 : 'Implemented Smilies -- Bug fixes for phpbb2',
            v0.3 : 'Optimized for FAE -- Smilies are completely operational -- Fixed quoting problems -- Minor bug fixes for all versions',
            v0.4 : 'Language data',
            v0.5 : 'Fully optimized for FAE -- Fixed preview button bug',
            v0.6 : 'Fixed instances of lag when typing a lot of text -- Colors now display automatically -- Minor bug fixes'
        };
        ***/
    });


Personalizzazione

  • Modifica delle traduzioni
    Puoi modificare questa parte del codice per personalizzare il testo predefinito:
    Codice:
    var lang = {
              preview: 'Anteprima', // ALL VERSIONS
              subject: 'Titolo', // PHPBB2
              appearance: 'Questo è come il tuo post comparirà una volta pubblicato' // PUNBB
            },

  • Se hai attivato il tutorial per la selezione dei codici nei BBtag "code", allora modifica questa parte da false a true
    select_code = false

  • Se vuoi nascondere il bottone "Anteprima" presente di default e usare solo la nuova anteprima diretta, modifica preview_button_enabled = false


Personalizzazione stile CSS

A piacere, è possibile modificare lo stile CSS con questo codice di base:
Codice:
[name="quickreply"] + .h3 + br + #quick_reply input[type="submit"] { margin-bottom: 25px; }
 
#quick_reply + #preview { padding: 5px 10px; border-radius: 3px; }
#quick_reply + #preview .h3 { margin: 3px 0; }
#quick_reply + #preview .content { font-size: 1.3em; padding: 1px; }


Niko
Niko
Moderatore
Moderatore

Sesso : Maschio
Età : 27
Messaggi : 9431
Località : Provincia di Varese

https://www.fmcodes.net/
Niko è stato ringraziato dall'autore di questo topic.

Visualizza l'argomento precedente Visualizza l'argomento successivo Torna in alto

- Argomenti simili

 
Permessi in questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum.