UNPKG

@magicbruno/fm_viewer

Version:
240 lines (239 loc) 16.5 kB
<h1 id="1-fm-viewer">1. FM Viewer</h1> <p>Semplice visualizzatore di file javascript.</p> <p><a href="https://magicbruno.github.io/FM_Viewer/">Demo e documentazione.</a></p> <h2 id="11-introduzione">1.1. introduzione</h2> <p>FM Viewer è un semplice visualizzatore di file e gallerie la cui interfaccia utente è modellata sulla popolare componente JavaScript FancyBox. </p> <p>Caratteristiche principali:</p> <ul> <li>Completamente gratuito e open source</li> <li>Nessuna dipendenza</li> <li>Molto leggero (JS + CSS circa 20 kb <em>minimized</em>)</li> <li>Completamente personalizzabile</li> <li>Scritto usando le classi ES6</li> <li>Funziona in tutti i <em>modern browsers</em></li> </ul> <h2 id="12-per-iniziare">1.2. Per iniziare</h2> <p>Installa Fm_viewer tramite NPM:</p> <pre><code>npm install @magicbruno/fm_viewer </code></pre> <p>o collegalo direttamente da CDN:</p> <pre><code>&lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/@magicbruno/fm_viewer@1.0.1/dist/css/file-man.min.css&quot;&gt; &lt;script src=&quot;https://cdn.jsdelivr.net/npm/@magicbruno/fm_viewer@1.0.1/FM_Viewer.min.js&quot;&gt;&lt;/script&gt; </code></pre> <p>Se preferisci puoi <a href="https://github.com/magicbruno/FM_Viewer/archive/refs/heads/main.zip">scaricarlo</a> o clonare il repository. I file si trovano nella cartella <strong>dist</strong>.</p> <p>Collega il foglio di stile nella <code>head</code> della tua pagina:</p> <pre><code>&lt;head&gt; ... &lt;link rel=&quot;stylesheet&quot; href=&quot;..../file-man.css&quot;&gt; ... &lt;/head&gt; </code></pre> <p>Collega lo script alla fine del <code>body</code> della pagina HTML</p> <pre><code>&lt;script src=&quot;..../FM_Viewer.js&quot;&gt;&lt;/script&gt; </code></pre> <p>e quindi crea un&#39;istanza della classe FM_Viewer per inizializzare il viewer.</p> <pre><code>&lt;script&gt; (function(win){ win.TheViewer = new FM_Viewer(&lt;selector&gt;); })(window); &lt;/script&gt; </code></pre> <p>Il parametro <code>&lt;selector&gt;</code> è l&#39;elemento HTML su cui è costruito il viewer. </p> <h2 id="13-uso-di-base">1.3. Uso di base</h2> <p>Se si crea l&#39;istanza del viewer senza parametri, FM_VIEWER costruirà l&#39;elemento html al volo e lo aggiungerà al <code>body</code> della pagina.</p> <pre><code>const TheViewer = new FM_Viewer(); </code></pre> <p>Tutti gli elementi <code>&lt;a&gt;</code> che hanno l&#39;attributo <code>data-fmviewer</code> vengono registrati dal viewer al caricamento del documento (evento <code>DomContentLoad</code>). Quando cliccati il link a cui punta il loro <code>href</code> sarà aperto nel viewer.</p> <p>È possibile specificare il tipo di documento da mostrare utilizzando l&#39;attributo <code>data-type</code>. I tipi validi sono: <code>image</code>, <code>video</code>, <code>audio</code> e <code>iframe</code>.</p> <blockquote> <h4 id="note">NOTE</h4> <ul> <li>Il viewer prova a determinare il tipo di documento collegato dall&#39;estensione del file. Se il collegamento è un&#39;URL senza estensione, è necessario specificare il tipo utilizzando l&#39;attributo <code>data-type</code>.</li> <li>Utilizza il tipo <code>video</code> solo per i collegamenti a file video. Per video Vimeo o YouTube usa invece il tipo <code>iFrame</code> (vedi esempio).</li> </ul> </blockquote> <p>Se si aggiungono elementi <code>&lt;a&gt;</code> dopo il caricamento del documento, ad esempio tramite chiamata Ajax, è possibile chiamare il metodo di aggiornamento del viewer per aggiungere i nuovi link ai link registrati.</p> <pre><code>TheViewer.refresh(); </code></pre> <p>Ecco il codice aggiunto al <code>body</code> del documento per impostazione predefinita. È possibile fornire invece inserire nel <code>body</code> il tuo viewer personalizzato e passare il selettore al costruttore FM_Viewer().</p> <pre><code>&lt;div class=&quot;fm-viewer off-screen&quot; id=&quot;fm-828573602&quot;&gt; &lt;nav class=&quot;fm-navbar&quot; role=&quot;navigation&quot;&gt; &lt;h3 class=&quot;viewer-title&quot;&gt;&lt;/h3&gt; &lt;ul class=&quot;fm-navbar-nav&quot; style=&quot;margin-left:auto&quot;&gt; &lt;li class=&quot;&quot;&gt; &lt;button type=&quot;button&quot; data-action=&quot;download-file&quot; title=&quot;Scarica&quot; class=&quot;btn btn-dark&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot;&gt; &lt;path fill=&quot;none&quot; d=&quot;M0 0h24v24H0z&quot;&gt;&lt;/path&gt; &lt;path d=&quot;M.6 13.7c0-.6.6-1.1 1.1-1.1s1.1.6 1.1 1.1v5.7c0 1.3 1 2.3 2.3 2.3h13.6c1.3 0 2.3-1 2.3-2.3v-5.7c0-.6.5-1.1 1.1-1.1.6 0 1.1.5 1.1 1.1v5.7c0 2.5-2 4.5-4.5 4.5H5.2c-2.5 0-4.5-2-4.5-4.5-.1-3.4-.1-5.3-.1-5.7z&quot; opacity=&quot;.5&quot; fill=&quot;#fff&quot;&gt;&lt;/path&gt; &lt;path d=&quot;M12 16c-.6 0-1.1-.5-1.1-1.1V1.2c0-.6.5-1.1 1.1-1.1.6 0 1.1.5 1.1 1.1v13.6c0 .7-.5 1.2-1.1 1.2z&quot; fill-rule=&quot;evenodd&quot; clip-rule=&quot;evenodd&quot; fill=&quot;#fff&quot;&gt;&lt;/path&gt; &lt;path d=&quot;M16.9 9.5c.4-.5 1.1-.5 1.6 0s.4 1.2 0 1.6l-5.7 5.7c-.4.4-1.1.4-1.6 0l-5.7-5.1c-.5-.4-.5-1.1-.1-1.6.5-.5 1.2-.5 1.7-.1l4.9 4.4 4.9-4.9z&quot; fill=&quot;#fff&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/button&gt; &lt;/li&gt; &lt;li class=&quot;&quot;&gt; &lt;button type=&quot;button&quot; data-action=&quot;previous&quot; title=&quot;Precedente&quot; class=&quot;btn btn-dark&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot;&gt; &lt;path fill=&quot;none&quot; d=&quot;M0 0h24v24H0z&quot;&gt;&lt;/path&gt; &lt;path d=&quot;M18.4 2.9c.7-.7.7-1.8 0-2.4-.7-.7-1.8-.7-2.4 0L5.6 10.8c-.6.6-.6 1.7 0 2.4L15 23.4c.6.7 1.7.7 2.4.1s.7-1.7.1-2.4L9.2 12l9.2-9.1z&quot; fill=&quot;#fff&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/button&gt; &lt;/li&gt; &lt;li class=&quot;&quot;&gt; &lt;button type=&quot;button&quot; data-action=&quot;next&quot; title=&quot;Successivo&quot; class=&quot;btn btn-dark&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot;&gt; &lt;path fill=&quot;none&quot; d=&quot;M0 0h24v24H0z&quot;&gt;&lt;/path&gt; &lt;path d=&quot;M5.6 2.9C5 2.3 5 1.2 5.6.5c.7-.7 1.8-.7 2.4 0l10.3 10.3c.6.6.7 1.7.1 2.4L9 23.4c-.6.7-1.7.7-2.4.1s-.7-1.7-.1-2.4l8.3-9.1-9.2-9.1z&quot; fill=&quot;#fff&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/button&gt; &lt;/li&gt; &lt;li class=&quot;&quot;&gt; &lt;button type=&quot;button&quot; data-action=&quot;fullscreen-on&quot; title=&quot;Fullscreen on&quot; class=&quot;btn btn-dark&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot;&gt; &lt;path fill=&quot;none&quot; d=&quot;M0 0h24v24H0z&quot;&gt;&lt;/path&gt; &lt;path d=&quot;M9.9 12L2.2 4.3c-.6-.6-.6-1.5 0-2.1s1.5-.6 2.1 0L12 9.9 21.3.6c.6-.6 1.5-.6 2.1 0s.6 1.5 0 2.1L14.1 12l9.3 9.3c.6.6.6 1.5 0 2.1s-1.5.6-2.1 0L12 14.1l-7.7 7.7c-.6.6-1.5.6-2.1 0s-.6-1.5 0-2.1L9.9 12z&quot; opacity=&quot;.7&quot; fill-rule=&quot;evenodd&quot; clip-rule=&quot;evenodd&quot; fill=&quot;#fff&quot;&gt;&lt;/path&gt; &lt;path d=&quot;M3 21h4.5c1 .2 1.5.7 1.5 1.5s-.5 1.3-1.5 1.5H0v-7.5c0-1 .5-1.5 1.5-1.5s1.5.5 1.5 1.5V21zm18 0v-4.5c.2-1 .7-1.5 1.5-1.5s1.3.5 1.5 1.5V24h-7.5c-1 0-1.5-.5-1.5-1.5s.5-1.5 1.5-1.5H21zm0-18h-4.5c-1-.2-1.5-.7-1.5-1.5S15.5.2 16.5 0H24v7.5c0 1-.5 1.5-1.5 1.5S21 8.5 21 7.5V3zM3 3v4.5C2.8 8.5 2.3 9 1.5 9S.2 8.5 0 7.5V0h7.5C8.5 0 9 .5 9 1.5S8.5 3 7.5 3H3z&quot; fill=&quot;#fff&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/button&gt; &lt;/li&gt; &lt;li class=&quot;&quot;&gt; &lt;button type=&quot;button&quot; data-action=&quot;fullscreen-off&quot; title=&quot;Fullscreen off&quot; class=&quot;btn btn-dark&quot;&gt; &lt;svg version=&quot;1.1&quot; id=&quot;prefix__Livello_1&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; x=&quot;0&quot; y=&quot;0&quot; viewBox=&quot;0 0 24 24&quot; xml:space=&quot;preserve&quot;&gt; &lt;style&gt; .prefix__st2 { fill: none; stroke: #fff; stroke-width: 2.9537; stroke-linecap: round; stroke-miterlimit: 10 } &lt;/style&gt; &lt;path id=&quot;prefix__Bound&quot; fill=&quot;none&quot; d=&quot;M0 0h24v24H0z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;prefix__Combined-Shape_00000038379922521257236590000010407855033361335999_&quot; d=&quot;M6.1 17.9H1.7c-1-.1-1.5-.6-1.5-1.5s.4-1.3 1.5-1.5H9v7.4c0 1-.4 1.5-1.5 1.5S6 23.4 6 22.3v-4.4zm11.8 0v4.4c-.1 1-.6 1.5-1.5 1.5s-1.3-.4-1.5-1.5V15h7.4c1 0 1.5.4 1.5 1.5s-.4 1.5-1.5 1.5h-4.4zm0-11.8h4.4c1 .1 1.5.6 1.5 1.5s-.4 1.3-1.5 1.4H15V1.7c0-1 .4-1.5 1.5-1.5S18 .6 18 1.7v4.4zm-11.8 0V1.7C6.2.7 6.7.2 7.6.2S8.9.6 9 1.7V9H1.7C.7 9 .2 8.6.2 7.5S.6 6 1.7 6h4.4z&quot; fill=&quot;#fff&quot;&gt;&lt;/path&gt; &lt;path class=&quot;prefix__st2&quot; d=&quot;M7.3 7.1L1.8 1.7M22.3 22.2l-5.4-5.5M7.3 16.9l-5.5 5.4M22.5 1.7L17 7.1&quot;&gt;&lt;/path&gt; &lt;circle cx=&quot;12&quot; cy=&quot;12.1&quot; r=&quot;2.2&quot; opacity=&quot;.7&quot; fill=&quot;#fff&quot;&gt;&lt;/circle&gt; &lt;/svg&gt; &lt;/button&gt; &lt;/li&gt; &lt;li class=&quot;&quot;&gt; &lt;button type=&quot;button&quot; data-action=&quot;close-viewer&quot; title=&quot;Chiudi&quot; class=&quot;btn btn-dark&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 24 24&quot;&gt; &lt;g fill-rule=&quot;evenodd&quot; clip-rule=&quot;evenodd&quot; fill=&quot;#fff&quot;&gt; &lt;path d=&quot;M.616 20.556L20.556.616a2.006 2.006 0 012.828 0c.778.777.778 2.05 0 2.828l-19.94 19.94a2.006 2.006 0 01-2.828 0 2.006 2.006 0 010-2.828z&quot;&gt;&lt;/path&gt; &lt;path d=&quot;M3.444.616l19.94 19.94c.778.778.778 2.05 0 2.828a2.006 2.006 0 01-2.828 0L.616 3.444a2.006 2.006 0 010-2.828 2.006 2.006 0 012.828 0z&quot;&gt;&lt;/path&gt; &lt;/g&gt; &lt;/svg&gt; &lt;/button&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/nav&gt; &lt;/div&gt; </code></pre> <p>FM Viewer non ha dipendenze. Non hai bisogno né di jQuery, né di Bootstrap e le icone sono SVG incorporati nel codice. Devi solo caricare il suo foglio di stile.</p> <h2 id="14-personalizzazione">1.4. Personalizzazione</h2> <p>È possibile personalizzare il tuo FM_Viewer che realizzando l&#39;interfaccia in HTML e/o modificando il foglio di stile.</p> <p>L&#39;esempio seguente espone solo i pulsanti di base (<code>close-viewer</code>, <code>next</code> e <code>previous</code>) con icone personalizzate e consente la chiusura del visualizzatore facendo clic sul backdrop.</p> <pre><code> &lt;div class=&quot;fm-viewer off-screen&quot; id=&quot;theViewer&quot; data-action=&quot;close-viewer&quot;&gt; &lt;a href=&quot;javascript:;&quot; data-action=&quot;close-viewer&quot;&gt; &lt;svg id=&quot;a&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 180 180&quot;&gt; &lt;defs&gt; &lt;style&gt; .b { fill: none; stroke: #fff; stroke-linecap: round; stroke-miterlimit: 10; stroke-width: 8.68px; } &lt;/style&gt; &lt;/defs&gt; &lt;line class=&quot;b&quot; x1=&quot;39.9&quot; y1=&quot;38.47&quot; x2=&quot;140.53&quot; y2=&quot;139.1&quot; /&gt; &lt;line class=&quot;b&quot; x1=&quot;39.47&quot; y1=&quot;139.53&quot; x2=&quot;140.1&quot; y2=&quot;38.9&quot; /&gt; &lt;/svg&gt; &lt;/a&gt; &lt;a href=&quot;javascript:;&quot; data-action=&quot;next&quot;&gt; &lt;svg id=&quot;a&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 180 180&quot;&gt; &lt;defs&gt; &lt;style&gt; .b { fill: none; stroke: #fff; stroke-linecap: round; stroke-miterlimit: 10; stroke-width: 8.75px; } &lt;/style&gt; &lt;/defs&gt; &lt;line class=&quot;b&quot; x1=&quot;64.84&quot; y1=&quot;38.28&quot; x2=&quot;115.6&quot; y2=&quot;89.03&quot; /&gt; &lt;line class=&quot;b&quot; x1=&quot;64.4&quot; y1=&quot;140.22&quot; x2=&quot;115.6&quot; y2=&quot;89.03&quot; /&gt; &lt;/svg&gt; &lt;/a&gt; &lt;a href=&quot;javascript:;&quot; data-action=&quot;previous&quot;&gt; &lt;svg id=&quot;a&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 180 180&quot;&gt; &lt;defs&gt; &lt;style&gt; .b { fill: none; stroke: #fff; stroke-linecap: round; stroke-miterlimit: 10; stroke-width: 8.79px; } &lt;/style&gt; &lt;/defs&gt; &lt;line class=&quot;b&quot; x1=&quot;115.27&quot; y1=&quot;38.05&quot; x2=&quot;64.29&quot; y2=&quot;89.03&quot; /&gt; &lt;line class=&quot;b&quot; x1=&quot;115.71&quot; y1=&quot;140.45&quot; x2=&quot;64.29&quot; y2=&quot;89.03&quot; /&gt; &lt;/svg&gt; &lt;/a&gt; &lt;footer&gt;&lt;div class=&quot;viewer-title d-none&quot;&gt;&lt;/div&gt;&lt;/footer&gt; &lt;/div&gt; </code></pre> <p>La funzionalità degli elementi e le azioni dei pulsanti sono definite tramite classi CSS e attributi <code>data-</code>:</p> <table> <thead> <tr> <th>Elemento (selettore CSS)</th> <th>Tipo</th> <th>Funzionalità/Azione</th> </tr> </thead> <tbody><tr> <td><code>.fm-viewer</code></td> <td>element</td> <td>Container per il viewer (obbligatorio). Aggiungi la classe <code>off-screen</code> se desideri che lo spettatore sia inizialmente fuori schermo.</td> </tr> <tr> <td><code>.viewer-title</code></td> <td>element</td> <td>Titolo/didascalia ottenuta dall&#39;attributo <code>title</code> dell&#39;elemento <code>&lt;a&gt;</code>. Nascosto se vuoto.</td> </tr> <tr> <td><code>[data-action=&quot;close-viewer&quot;]</code></td> <td>button or element</td> <td>Chiude il viewer. Se aggiunto al contenitore del viewer stesso consente di chiudere il viewer facendo clic sul backdrop.</td> </tr> <tr> <td><code>[data-action=&quot;download-file&quot;]</code></td> <td>button</td> <td>Avvia il download del file. Disponibile solo per i file provenienti dallo stesso dominio del viewer, altrimenti nascosto.</td> </tr> <tr> <td><code>[data-action=&quot;previous&quot;]</code></td> <td>button</td> <td>Mostra il file precedente nella galleria.</td> </tr> <tr> <td><code>[data-action=&quot;next&quot;]</code></td> <td>button</td> <td>Mostra il file successivo nella galleria.</td> </tr> <tr> <td><code>[data-action=&quot;fullscreen-on&quot;]</code></td> <td>button</td> <td>Apre la visualizzazione a schermo intero. Nascosto automaticamente se la visualizzazione a schermo intero è attiva.</td> </tr> <tr> <td><code>[data-action=&quot;fullscreen-off&quot;]</code></td> <td>button</td> <td>Chiude la visualizzazione a schermo intero. Nascosto automaticamente se la visualizzazione a schermo intero non è attiva.</td> </tr> </tbody></table>