MediaWiki:Condivisione articoli.js

Da Wikinotizie, le notizie a contenuto aperto

Nota: dopo aver pubblicato, potrebbe essere necessario pulire la cache del proprio browser per vedere i cambiamenti.

  • Firefox / Safari: tieni premuto il tasto delle maiuscole Shift e fai clic su Ricarica, oppure premi Ctrl-F5 o Ctrl-R (⌘-R su Mac)
  • Google Chrome: premi Ctrl-Shift-R (⌘-Shift-R su un Mac)
  • Internet Explorer / Edge: tieni premuto il tasto Ctrl e fai clic su Aggiorna, oppure premi Ctrl-F5
  • Opera: premi Ctrl-F5.
/*
 *  Questo script visualizza (solo per gli articoli pubblicati)
 *  le icone di condivisione contenute nel template Di_la_tua
 *  e per default nascoste con 'display:none'
 *
 *  Inoltre fornisce un dialog
 *  che restituisce il codice da copiare
 *  per linkare l'articolo.
 *
 */

( function scriptWrapper() {

  // mostra un dialog che fornisce il codice da copiare
  function showHtmlForm() {

    // costruisce il testo di un <a href ...>
    function getLink( href, text, hint ) {

      return '<a href="' + href + '"\n'
      + 'target="_blank"'
      + ( typeof hint == 'string'
        ? '\ntitle="' + hint + '"'
        : ''
        )
      + '>' + text + '</a>';

    }

    // HTML del dialog
    function getHtmlDialog() {

      var
      dottedStyle = 'style="border: 1px dotted black; padding: 1em; margin: .5em 0;"',
      dottedStylePre = dottedStyle.replace ( '="', '="white-space: pre-line; overflow: auto; ' ),
      hr = '<hr style="margin: .5em 0;">';

      return $( '<div>' )
      .append( '\
Qui sotto puoi vedere il codice HTML da utilizzare per inserire \n\
il link alla notizia sul tuo sito personale o negli altri casi in cui è possibile utilizzare \n\
un link HTML, per esempio in un commento su un blog.' )
      .append( '<div id="link-type" style="margin-top: 1em; font-weight: bold;">' )
      .append( '<div ' + dottedStylePre + '><code id="html-link">' )
      .append( '<br />E questo sarà il risultato:' )
      .append( '<div id="html-sample" ' + dottedStyle + '>' )
      .append(
        $ ( '<div  style="font-size:80%">' )
        .append( '\
Tieni però presente che l\'aspetto finale \
dipenderà anche dalle impostazioni del sito (principalmente dai '
          )
        .append( getLink(
          '//it.wikipedia.org/wiki/CSS',
          'fogli di stile',
          'it.wikipedia.org'
          ) )
        .append( ').')
        .append( hr )
        .append( 'Ricorda che il contenuto di Wikinotizie viene rilasciato sotto licenza ' )
        .append( getLink(
          'http://creativecommons.org/licenses/by/2.5/',
          'Creative Commons Attribution 2.5'
          ) )
        .append( ' \
che richiede l\'attribuzione degli articoli agli autori, \n\
visibili nella cronologia della pagina. La cronologia può essere indicata direttamente \n\
oppure raggiunta indirettamente attraverso un link all\'articolo.<br />\n\
<br />\n\
Grazie di diffondere le nostre notizie.'
          )
        .append( hr )
        )
      .append( '\n\
Cliccando uno dei due pulsanti \'link\', \n\
verrà visualizzato e selezionato il codice corrispondente, \n\
pronto per essere copiato negli appunti.\n\
' );

    }

    // codice del link da copiare
    function setCode( dialog, shortOrLongCode ) {

      // seleziona il testo da copiare
      function select( $element ) {

        var selection = window.getSelection();
        selection.removeAllRanges();
        var range = document.createRange();
        range.selectNodeContents( $element.get( 0 ) );
        selection.addRange( range );

      }

      // ricava la data dalle categorie
      function getArticleDate() {

        var
        regexData = new RegExp( '\\d\\d? (gennaio|febbraio|marzo|aprile|maggio|giugno|luglio|agosto|settembre|ottobre|novembre|dicembre) \\d\\d\\d\\d' ),
        data = null;

        $.each( wgCategories, function( index, category ) {
          if ( regexData.test( category ) ) {
            data = category;
            return false;
          }
        } );

        return data;

      }

      var
      Server = mw.config.get( 'wgServer' ),
      wgTitle = mw.config.get( 'wgTitle' ),
      wgPageName = mw.config.get( 'wgPageName' ),
      wgScript = mw.config.get( 'wgScript' ),
      articleDate = getArticleDate(),
      articleHref = mw.util.getUrl( wgPageName ),
      articleLink = getLink( articleHref, wgTitle,
        'Articolo di Wikinotizie, le notizie a contenuto aperto.' ),
      wikinotizieLink = getLink( Server, 'Wikinotizie', Server ),
      historyLink = getLink(
        Server + wgScript + '?title=' + mw.util.wikiUrlencode( wgPageName ) + '&action=history',
        'autori', 'elenco dei contributori dell\'articolo'
        );

      var code, linkTipe;
      switch ( shortOrLongCode ) {
        case 'longCode':
          code
          = articleLink + '\n da ' + wikinotizieLink + ', le notizie a contenuto aperto'
          + ( articleDate ? ', ' + articleDate : '' )
          + ' (' + historyLink + ')';
          linkTipe = 'citazione';
          break;
        case 'shortCode':
          code = articleLink;
          linkTipe = 'link semplice';
          break;
      }

      $( dialog ).find( '#html-link' ).text( code );
      $( dialog ).find( '#html-sample' ).html( code );
      $( dialog ).find( '#link-type' ).text( linkTipe );
      select( $( dialog ).find( '#html-link' ) );

    }

    mw.loader.using( 'jquery.ui', function() {

      getHtmlDialog().dialog( {
        title: 'HTML da includere',
        modal: true,
        width: 500,
        position: 'top',
        open: function() {
          setCode( this, 'shortCode' );
        },
        buttons: {
          chiudi: function() {
            $( this ).dialog( 'close' );
          },
          'citazione' : function() {
            setCode( this, 'longCode' );
          },
          'link semplice' : function() {
            setCode( this, 'shortCode' );
          }
        }
      } );

    } );

  }

  // chiude se l'articolo non e' pubblicato
  var wgCategories = mw.config.get( 'wgCategories' );
  if ( $.inArray( 'Pubblicati', wgCategories ) < 0 ) {
    return;
  }

  $( '#commentrequest' )
  .prepend( '<!-- \n\
Lo script MediaWiki:Condivisione_articoli.js, \n\
caricato da MediaWiki:Common.js, \n\
ha modificato alcuni degli elementi contenuti in #commentrequest \n\
-->' )
  .find( '#condivisione-articolo' )
  // mostra le icone di condivisione
  .show()
  // modifica il click dell'icona 'link o citazione'
  .find( '#link-citazione a' )
  .attr( 'href', 'javascript:void(0)' )
  .click( showHtmlForm );

  // imposta apertura link in un'altra scheda o finestra
  $( '#commentrequest #condivisione-articolo #social_bookmark span:not(.no-blank) a' )
  .attr( 'target', '_blank' );

} )();