Commit ead4faad authored by Thomas Citharel's avatar Thomas Citharel 🌲

ready

parent 79a31b56
Strut - An ImpressJS Authoring Tool / An ImpreeJS GUI
Copyright (c) 2012 Tantaman LLC
Copyright (c) 2016 Framasoft
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
......
Symfony Standard Edition
========================
Welcome to the Symfony Standard Edition - a fully-functional Symfony
application that you can use as the skeleton for your new applications.
For details on how to download and get started with Symfony, see the
[Installation][1] chapter of the Symfony Documentation.
What's inside?
--------------
The Symfony Standard Edition is configured with the following defaults:
* An AppBundle you can use to start coding;
* Twig as the only configured template engine;
* Doctrine ORM/DBAL;
* Swiftmailer;
* Annotations enabled for everything.
It comes pre-configured with the following bundles:
* **FrameworkBundle** - The core Symfony framework bundle
* [**SensioFrameworkExtraBundle**][6] - Adds several enhancements, including
template and routing annotation capability
* [**DoctrineBundle**][7] - Adds support for the Doctrine ORM
* [**TwigBundle**][8] - Adds support for the Twig templating engine
* [**SecurityBundle**][9] - Adds security by integrating Symfony's security
component
* [**SwiftmailerBundle**][10] - Adds support for Swiftmailer, a library for
sending emails
* [**MonologBundle**][11] - Adds support for Monolog, a logging library
* **WebProfilerBundle** (in dev/test env) - Adds profiling functionality and
the web debug toolbar
* **SensioDistributionBundle** (in dev/test env) - Adds functionality for
configuring and working with Symfony distributions
* [**SensioGeneratorBundle**][13] (in dev/test env) - Adds code generation
capabilities
* **DebugBundle** (in dev/test env) - Adds Debug and VarDumper component
integration
All libraries and bundles included in the Symfony Standard Edition are
released under the MIT or BSD license.
Enjoy!
[1]: https://symfony.com/doc/3.0/book/installation.html
[6]: https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/index.html
[7]: https://symfony.com/doc/3.0/book/doctrine.html
[8]: https://symfony.com/doc/3.0/book/templating.html
[9]: https://symfony.com/doc/3.0/book/security.html
[10]: https://symfony.com/doc/3.0/cookbook/email.html
[11]: https://symfony.com/doc/3.0/cookbook/logging/monolog.html
[13]: https://symfony.com/doc/3.0/bundles/SensioGeneratorBundle/index.html
[![](https://framagit.org/assets/favicon-075eba76312e8421991a0c1f89a89ee81678bcde72319dd3e8047e2a47cd3a42.ico)](https://framagit.org)
![English:](https://upload.wikimedia.org/wikipedia/commons/thumb/a/ae/Flag_of_the_United_Kingdom.svg/20px-Flag_of_the_United_Kingdom.svg.png) **Framasoft uses GitLab** for the development of its free softwares. Our Github repositories are only mirrors.
If you want to work with us, **fork us on [framagit.org](https://framagit.org)**. (no registration needed, you can sign in with your Github account)
![Français :](https://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/20px-Flag_of_France.svg.png) **Framasoft utilise GitLab** pour le développement de ses logiciels libres. Nos dépôts Github ne sont que des miroirs.
Si vous souhaitez travailler avec nous, **forkez-nous sur [framagit.org](https://framagit.org)**. (l'inscription n'est pas nécessaire, vous pouvez vous connecter avec votre compte Github)
* * *
# Framaslides
An online presentation editor service [https://framaslides.org](https://framaslides.org)
## Installation
* Server nginx or Apache (lighttpd should work)
* Requirements: PHP 7, NodeJS >= 6
* Dependencies though composer and npm so you'll need them
* Database PostGreSQL
### Dependencies
* `npm i`
* `composer up` You'll need to fill in your database informations
### Compilation and bundling
* `grunt build` (for Strut)
* `webpack` (for the manage interface)
### Database installation
* `bin/console doctrine:schema:create`
* `doctrine:database:create`
### Virtual Host
#### Nginx
```
server {
listen *:80;
listen [ipv6]:80;
listen *:443 ssl;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
listen [ipv6]:443 ssl;
ssl_certificate /path/to/certificate;
ssl_certificate_key /path/to/associated/key;
server_name messlides.tld ;
root /path/to/framaslides/;
if ($scheme != "https") {
rewrite ^ https://$http_host$request_uri? permanent;
}
index index.html index.htm index.php index.cgi index.pl index.xhtml;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ \.php$ {
location ~ ^/(app_dev|config)\.php(/|$) {
root /path/to/framaslides/web/;
fastcgi_pass unix:/path/to/sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
}
location ~ ^/app\.php(/|$) {
root /path/to/framaslides/web/;
fastcgi_pass unix:/path/to/sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
internal;
}
return 404;
}
location @php {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/path/to/sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
}
location / {
root /path/to/framaslides/web/;
try_files $uri /app.php$is_args$args;
}
```
......@@ -3,5 +3,7 @@
{% trans_default_domain 'FOSUserBundle' %}
{% block fos_user_content %}
<p>{{ 'registration.check_email'|trans({'%email%': user.email}) }}</p>
<div class="row full-height">
<p>{{ 'registration.check_email'|trans({'%email%': user.email}) }}</p>
</div>
{% endblock fos_user_content %}
{% trans_default_domain 'FOSUserBundle' %}
<div class="card">
<div class="row full-height">
{{ form_start(form, {'method': 'post', 'action': path('fos_user_registration_register'), 'attr': {'class': 'fos_user_registration_register'}}) }}
<div class="card-block">
{{ form_widget(form._token) }}
......@@ -16,6 +17,7 @@
</div>
<div class="form-group">
<div class="alert alert-info">Note : Le nom d'utilisateur est insensible à la casse</div>
{{ form_errors(form.username) }}
{{ form_label(form.username) }}
{{ form_widget(form.username, { 'attr': {'class': 'form-control'} }) }}
......@@ -35,4 +37,4 @@
</div>
<a href="{{ path('fos_user_security_login') }}" class="btn btn-secondary">{{ 'security.login.submit'|trans }}</a>
<button class="btn btn-primary" type="submit" name="send">{{ 'registration.submit'|trans({}, 'FOSUserBundle') }}</button>
</div>
\ No newline at end of file
</div>
{% trans_default_domain 'FOSUserBundle' %}
<div class="row full-height">
<form action="{{ path('fos_user_resetting_send_email') }}" method="POST" class="fos_user_resetting_request">
<div>
<label for="username">{{ 'resetting.request.username'|trans }}</label>
<input type="text" id="username" name="username" required="required" />
</div>
<div>
<button type="submit" class="btn btn-primary">{{ 'resetting.request.submit'|trans }}</button>
</div>
</form>
<form action="{{ path('fos_user_resetting_send_email') }}" method="POST" class="fos_user_resetting_request">
<div>
<label for="username">{{ 'resetting.request.username'|trans }}</label>
<input type="text" id="username" name="username" required="required" />
</div>
<div>
<button type="submit" class="btn btn-primary">{{ 'resetting.request.submit'|trans }}</button>
</div>
</form>
</div>
{% trans_default_domain 'FOSUserBundle' %}
<div class="row full-height">
{{ form_start(form, { 'action': path('fos_user_resetting_reset', {'token': token}), 'attr': { 'class': 'fos_user_resetting_reset' } }) }}
{{ form_widget(form) }}
<div>
<button type="submit" class="btn btn-primary">{{ 'resetting.reset.submit'|trans }}</button>
</div>
{{ form_end(form) }}
</div>
<header role="banner">
<div class="pull-right text-right strut-logo">
<p>Basé sur <br><a href="https://strut.io"><img src="{{ asset('img/strut-logo.png') }}" alt="Strut"></a></p>
</div>
<a href="/" class="logo"><h1>{{ 'app.name' | trans() | raw }}</h1></a>
<p class="lead">Éditez vos présentations en ligne</p>
<hr class="trait" role="presentation">
......@@ -52,7 +49,7 @@
</form>
</div>
</div>
<hr role="presentation" />
<hr class="trait" role="presentation" />
<div class="row">
<div class="col-md-4" id="tuto-video">
<h2>Documentation</h2>
......@@ -66,9 +63,9 @@
<h2>Le logiciel</h2>
<p class="text-center" role="presentation"><span class="glyphicon glyphicon-cloud"></span></p>
<p><b class="frama">Frama</b><b class="vert">slides</b> repose en partie sur le logiciel libre
<a href="https://owncloud.org">Strut</a>.
<a href="https://strut.io">Strut</a>.
Les données sont hébergées sur les serveurs de <b class="frama">Frama</b><b class="soft">soft</b>.
<p>Strut est sous <a href="https://github.com/owncloud/core/blob/master/COPYING-README">licence <abbr title="Affero General Public License">AGPL</abbr></a>.</p>
<p>Strut est sous <a href="https://github.com/tantaman/Strut/blob/master/LICENSE.txt">licence <abbr title="Affero General Public License">AGPL</abbr></a> et cette application l'est <a href="https://framagit.org/framasoft/framaslides/blob/master/LICENSE.txt">également</a>.</p>
</div>
......@@ -76,10 +73,10 @@
<h2>Cultivez votre jardin</h2>
<p class="text-center" role="presentation"><span class="glyphicon glyphicon-tree-deciduous"></span></p>
<p>Pour participer au développement du logiciel, proposer des améliorations
ou simplement le télécharger, rendez-vous sur <a href="https://github.com/owncloud/">le site de développement</a>.</p>
ou simplement le télécharger, rendez-vous sur <a href="https://framagit.org/framasoft/framaslides/">le site de développement</a>.</p>
<br>
<p>Si vous souhaitez installer ce logiciel pour votre propre usage et ainsi gagner en autonomie, nous vous aidons sur :</p>
<p class="text-center"><a href="http://framacloud.org/cultiver-son-jardin/installation-de-owncloud/" class="btn btn-success"><span class="glyphicon glyphicon-tree-deciduous"></span> framacloud.org</a></p>
<p class="text-center"><a href="#" class="btn btn-success"><span class="glyphicon glyphicon-tree-deciduous"></span> framacloud.org</a></p>
</div>
</div>
</main>
{% extends '::base.html.twig' %}
{% block content %}
{% if app.request.hasPreviousSession %}
{% for type, messages in app.session.flashbag.all() %}
{% for message in messages %}
<div class="flash-{{ type }}">
{{ message }}
</div>
{% endfor %}
{% endfor %}
{% endif %}
<div class="container">
<div class="row flex-items-xs-center">
{% if app.request.hasPreviousSession %}
{% for type, messages in app.session.flashbag.all() %}
{% for message in messages %}
{% if type == 'success' %}
{% set class = 'alert alert-success' %}
{% elseif type == 'error' %}
{% set class = 'alert alert-danger' %}
{% elseif type == 'info' %}
{% set class = 'alert alert-info' %}
{% else %}
{% set class = 'alert alert-warning' %}
{% endif %}
<div class="{{ class }}">
{{ message }}
</div>
{% endfor %}
{% endfor %}
{% endif %}
{% block fos_user_content %}
{% endblock fos_user_content %}
</div>
</div>
{% endblock content %}
......@@ -54,3 +54,35 @@ h2 {
.icon {
margin: 0 5px;
}
.infos {
display: inline-block;
}
.infoBlock {
width: 100%;
}
.full-height {
margin: 100px auto;
}
.pictures {
div.pictures {
display: flex;
flex-wrap: wrap;
justify-content: space-between; /* or space-around */
}
figure {
display: inline-block;
margin-bottom: 8px;
width: calc(50% - 4px);
}
@media screen and (min-width: 50em) {
figure {
width: calc(25% - 6px);
}
}
}
......@@ -8,7 +8,8 @@
<i class="glyphicon glyphicon-download-alt"></i>
</a>
</span>
{% if not loop.first or data.hasNextPage %}
{% if not data.hasPreviousPage and loop.first %}
{% else %}
<span class="icon icon-delete pull-right" data-toggle="tooltip" data-placement="bottom" title="Supprimer cette version">
<i class="glyphicon glyphicon-trash"></i>
</span>
......
......@@ -5,6 +5,7 @@ menu:
newpresentation: 'Nouvelle présentation'
mypresentations: 'Mes présentations'
templates: Modèles
pictures: Images
disconnect: 'Se déconnecter'
login: 'Se connecter'
register: 'S''inscrire'
......@@ -12,6 +13,8 @@ menu:
presentations:
nbversions: 'une version|%count% versions'
nbslides: 'une seule slide|%count% slides'
nbpictures: "{0}pas d'image|{1}une seule image|]1,Inf[%count% images"
createdAt: 'Présentation créée le %createdAt%'
updatedAt: 'Dernière version %updatedAt%'
empty: "Vous n'avez pas encore de présentations. Voulez-vous en créer une ?"
......@@ -71,6 +74,15 @@ flashes.user.notice.added: Utilisateur %username% ajouté
flashes.user.notice.updated: Utilisateur %username% mis à jour
flashes.user.notice.deleted: Utilisateur %username% supprimé
preview:
needlogin: Vous devez vous enregistrer pour modifier cette présentation
pictures:
title: Images
desc: Voici toutes les images que vous avez uploadées sur vos présentations. Notez que les images associées à une présentation sont supprimées en même temps que la présentation. Supprimer des images ici les enlève de vos présentations.
message:
deleted: L'image a été supprimée
# Admin stuff
user:
......
......@@ -29,7 +29,8 @@
<ul class="nav navbar-nav navbar-right">
<li class="nav-item"><a class="nav-link" href="{{ path('app') }}"><i title="{{ 'menu.newpresentation' | trans }}" class="glyphicon glyphicon-plus"></i></a></li>
<li class="nav-item"><a class="nav-link" href="{{ path('presentations') }}">{{ 'menu.mypresentations' | trans }}</a></li>
<li class="nav-item"><a class="nav-link " href="{{ path('templates') }}">{{ 'menu.templates' | trans }}</a></li>
<li class="nav-item"><a class="nav-link" href="{{ path('templates') }}">{{ 'menu.templates' | trans }}</a></li>
<li class="nav-item"><a class="nav-link" href="{{ path('pictures') }}">{{ 'menu.pictures' | trans }}</a></li>
<li class="nav-item"><a class="nav-link glyphicon glyphicon-user" href="{{ path('fos_user_profile_show') }}">{{ app.user }}</a></li>
{% if is_granted('ROLE_ADMIN') %}
<li class="nav-item"><a class="nav-link" href="{{ path('user_index') }}">{{ 'menu.admin' | trans }}</a></li>
......
......@@ -9,13 +9,29 @@
<div class="row">
{% for presentation in presentations %}
<div class="col-xs-12 col-sm-4">
<div class="card" data-presentation="{{ presentation.id }}" data-presentation-title="{{ presentation.title }}" data-template="{{ presentation.isTemplate ? '1' : '0' }}" data-public="{{ presentation.isPublic ? '1' : '0' }}">
<div class="card thumbnail" data-presentation="{{ presentation.id }}" data-presentation-title="{{ presentation.title }}" data-template="{{ presentation.isTemplate ? '1' : '0' }}" data-public="{{ presentation.isPublic ? '1' : '0' }}">
<div class="card-block">
<h4 class="card-title"><span class="title">{{ presentation.title }}</span></h4>
<p><span class="label label-default versions">{{ 'presentations.nbversions' | transchoice(presentation.versions | length) }}</span> {% if presentation.isTemplate %}<span class="label label-primary">{{ 'presentations.isTemplate' | trans }}</span>{% endif %} {% if presentation.isPublic %}<span class="label label-success">{{ 'presentations.isPublic' | trans }}</span>{% endif %}</p>
<p class="card-text">{{ 'presentations.createdAt' | trans({ '%createdAt%': presentation.createdAt | date("d/m/Y") }) }}
{{ 'presentations.updatedAt' | trans({ '%updatedAt%': presentation.getLastVersionDate | time_diff }) }}
Nb slides : {{ presentation.getNbSlides }}</p>
<div class="media">
<div class="media-body">
<h4 class="card-title media-heading"><span class="title">{{ presentation.title }}</span></h4>
<p><span class="label label-default versions">{{ 'presentations.nbversions' | transchoice(presentation.versions | length) }}</span> {% if presentation.isTemplate %}<span class="label label-primary">{{ 'presentations.isTemplate' | trans }}</span>{% endif %} {% if presentation.isPublic %}<span class="label label-success">{{ 'presentations.isPublic' | trans }}</span>{% endif %}</p>
<div class="infoBlock">
<div class="infos">
<small><span class="glyphicon glyphicon-time" title="Date de création"></span> {{ presentation.createdAt | date("d/m/Y") }}</small><br>
<small><span class="glyphicon glyphicon-refresh" title="Date de dernière mise à jour"></span> {{ presentation.getLastVersionDate | time_diff }}</small>
</div>
<div class="infos pull-right">
<small><span class="glyphicon glyphicon-th-large" title="Nombre de slides"></span> {{ 'presentations.nbslides' | transchoice(presentation.getNbSlides) }}</small><br>
<small><span class="glyphicon glyphicon-picture" title="Nombre d'images"></span> {{ 'presentations.nbpictures' | transchoice(presentation.pictures | length) }}</small>
</div>
</div>
</div>
{% if presentation.pictures | length > 0 %}
<div class="media-right">
<img width="50px" class="img-thumbnail media-object" src="{{ path('show-picture', { 'uuid': (presentation.pictures | first).uuid }) }}" />
</div>
{% endif %}
</div>
</div>
<div class="card-footer">
<a href="{{ path('app', {'_fragment': presentation.title }) }}" class="edit" data-presentation="{{ presentation.title }}"><i class="glyphicon glyphicon-edit"></i></a>
......@@ -24,7 +40,7 @@
<a href="{{ path('export-presentation', {'presentation': presentation.id }) }}" class="download-json" data-presentation="{{ presentation.title }}"><i class="glyphicon glyphicon-download-alt"></i></a>
{% if presentation.rendered %}
<a class="share" href="{{ path('share', {'id': presentation.id }) }}"><i class="glyphicon glyphicon-share"></i></a>
<a class="play right" href="{{ path('preview', {'type': 'impress', 'title': presentation.title }) }}" target="_blank"><i class="glyphicon glyphicon-play-circle"></i></a>{% endif %}
<a class="play right" href="{{ path('preview', {'type': 'impress', 'title': presentation.title }) }}"><i class="glyphicon glyphicon-play-circle"></i></a>{% endif %}
</div>
</div>
</div>
......
......@@ -20,8 +20,10 @@
Nb slides : {{ presentation.getNbSlides }}</p>
</div>
<div class="card-footer">
{% if app.user == presentation.user %}
<a href="{{ path('app') }}" class="edit" data-presentation="{{ presentation.title }}"><i class="glyphicon glyphicon-edit"></i></a>
<a href="#" class="publish" data-presentation="{{ presentation.id }}"><i class="glyphicon glyphicon-bookmark"></i></a>
<a href="#" class="publish" data-presentation="{{ presentation.id }}"><i class="glyphicon glyphicon-bookmark"></i></a>
{% endif %}
<a href="{{ path('export-presentation', {'presentation': presentation.id }) }}" class="download-json" data-presentation="{{ presentation.title }}"><i class="glyphicon glyphicon-download-alt"></i></a>
<a href="#" class="fork" data-presentation="{{ presentation.id }}"><i class="glyphicon glyphicon-duplicate"></i></a>
{% if presentation.rendered %}<a class="play right" href="{{ path('preview', {'type': 'impress', 'title': presentation.title }) }}"><i class="glyphicon glyphicon-play-circle"></i></a>{% endif %}
......
......@@ -55,7 +55,7 @@ define(function() {
data: {
presentation: path,
data: JSON.stringify(data),
newEntry: (saveAction !== undefined) ? 1 : 0
newEntry: (saveAction !== undefined && saveAction !== false) ? 1 : 0
}
}).success(function (data, status, xhr) {
if (cb) {
......
......@@ -6,7 +6,7 @@ security:
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
ROLE_SUPER_ADMIN: [ ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ]
providers:
fos_userbundle:
......@@ -14,7 +14,7 @@ security:
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
pattern: ^/(_(profiler|wdt)|css|assets|images|js)/
security: false
login_firewall:
......
......@@ -12,6 +12,7 @@ services:
factory: [ "@doctrine.orm.default_entity_manager", getRepository ]
arguments:
- Strut:Presentation
- Strut:User
strut.users_repository:
class: Strut\StrutBundle\Repository\UsersRepository
......@@ -25,6 +26,12 @@ services:
arguments:
- Strut:Version
strut.picture_repository:
class: Strut\StrutBundle\Repository\PictureRepository
factory: [ "@doctrine.orm.default_entity_manager", getRepository ]
arguments:
- Strut:Picture
twig.extension.date:
class: Twig_Extensions_Extension_Date
arguments:
......
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Deck Title</title>
<link rel="stylesheet" href="css/themes/default-reset.css"></link>
<link rel="stylesheet" type="text/css" href="css/main.css" />
<link rel="stylesheet" href="reveal/css/theme/default.css" id="theme">
<link href='css/web-fonts.css' rel='stylesheet' type='text/css' />
<link rel="stylesheet" type="text/css" href="bespoke/css/demo.css" />
<link rel="stylesheet" type="text/css" href="bespoke/css/themes.css" />
<link href='../styles/strut.themes/backgroundClasses.css' rel='stylesheet' type='text/css' />
<link href='../styles/strut.themes/surfaceClasses.css' rel='stylesheet' type='text/css' />
<title>{{ presentation.title }}</title>
<link rel="stylesheet" href="{{ asset('preview_export/css/themes/default-reset.css') }}">
<link rel="stylesheet" href="{{ asset('preview_export/css/main.css') }}" type='text/css' />
<link rel="stylesheet" href="{{ asset('preview_export/reveal/css/theme/default.css') }}" id="theme">
<style>
@font-face {
font-family: 'Lato';
font-style: normal;
font-weight: 700;
src: local('Lato Bold'), local('Lato-Bold'), url('{{ asset('preview_export/css/Lato-Bold.woff') }}') format('woff');
}
@font-face {
font-family: 'Hammersmith One';
font-style: normal;
font-weight: 400;
src: local('Hammersmith One'), local('HammersmithOne'), url('{{ asset('preview_export/css/HammersmithOne.woff') }}') format('woff');
}
@font-face {
font-family: 'Gorditas';
font-style: normal;
font-weight: 400;
src: local('Gorditas'), local('Gorditas-Regular'), url('{{ asset('preview_export/css/Gorditas-Regular.woff') }}') format('woff');
}
@font-face {
font-family: 'Fredoka One';
font-style: normal;
font-weight: 400;
src: local('Fredoka One'), local('FredokaOne-Regular'), url('{{ asset('preview_export/css/FredokaOne-Regular.woff') }}') format('woff');
}
@font-face {
font-family: 'Ubuntu';
font-style: normal;
font-weight: 400;
src: local('Ubuntu'), url('{{ asset('preview_export/css/Ubuntu.woff') }}') format('woff');
}
@font-face {
font-family: 'Ubuntu';
font-style: normal;
font-weight: 700;
src: local('Ubuntu Bold'), local('Ubuntu-Bold'), url('{{ asset('preview_export/css/Ubuntu-Bold.woff') }}') format('woff');
}
@font-face {
font-family: 'PressStart2P';
font-style: normal;
font-weight: 400;
src: local('Press Start 2P'), local('PressStart2P-Regular'), url('{{ asset('preview_export/css/PressStart2P-Regular.woff') }}') format('woff');
}
@font-face {
font-family: 'Lato';
font-style: italic;
font-weight: 700;
src: local('Lato Bold Italic'), local('Lato-BoldItalic'), url('{{ asset('preview_export/css/Lato-BoldItalic.woff') }}') format('woff');
}
@font-face {
font-family: 'Abril Fatface';
font-style: normal;
font-weight: 400;
src: local('Abril Fatface'), local('AbrilFatface-Regular'), url('{{ asset('preview_export/css/AbrilFatface-Regular.woff') }}') format('woff');
}
@font-face {
font-family: 'Lato';
font-style: normal;
font-weight: 400;
src: local('Lato Regular'), local('Lato-Regular'), url('{{ asset('preview_export/css/Lato-Regular.woff') }}') format('woff');
}
@font-face {
font-family: 'Droid Sans Mono';
font-style: normal;
font-weight: 700;
src: local('Droid Sans Mono'), local('Droid-Sans-Mono'), url('{{ asset('preview_export/css/Droid-Sans-Mono.woff') }}') format('woff');
}
</style>
<link rel="stylesheet" href="{{ asset('preview_export/bespoke/css/demo.css') }}">
<link rel="stylesheet" href="{{ asset('preview_export/bespoke/css/themes.css') }}">
<link rel='stylesheet' href="{{ asset('styles/strut.themes/backgroundClasses.css') }}" type='text/css' />
<link rel='stylesheet' href="{{ asset('styles/strut.themes/surfaceClasses.css') }}" type='text/css' />
<style type="text/css">
.componentContainer {
......@@ -54,14 +122,15 @@
}
</style>
<script src="bespoke/scripts/bespoke.js"></script>
<script src="bespoke/scripts/bespoke-plugins.js"></script>
<script src="scripts/onready.js"></script>
<script src="scripts/loadPresentation.js"></script>
<script type="text/javascript" src="{{ asset('preview_export/bespoke/scripts/bespoke.js') }}"></script>
<script type="text/javascript" src="{{ asset('preview_export/bespoke/scripts/bespoke-plugins.js') }}"></script>
<script type="text/javascript" src="{{ asset('preview_export/scripts/onready.js') }}"></script>
<script>
ready(function() {
if (document.getElementById('launched-placeholder'))
loadPresentation();
if (document.getElementById('launched-placeholder')) {
var presentation = "{% spaceless %}{{ presentation.rendered | e('js') }}{% endspaceless %}";
}
if (!window.presStarted) {
bespoke.horizontal.from('article', {
hash: true,
......
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=1024" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<title>Deck Title</title>
<title>{{ presentation.title }}</title>
<meta name="description" content="TODO" />
<meta name="author" content="TODO" />
<link rel="stylesheet" href="css/themes/default-reset.css"></link>
<link href="css/main.css" rel="stylesheet" type='text/css' />
<link rel="stylesheet" href="reveal/css/theme/default.css" id="theme" />
<link href='css/web-fonts.css' rel='stylesheet' type='text/css' />
<meta name="description" content="A presentation on Framaslides" />
<meta name="author" content="{{ presentation.user.name }}" />
<link rel="stylesheet" href="{{ asset('preview_export/css/themes/default-reset.css') }}">
<link rel="stylesheet" href="{{ asset('preview_export/css/main.css') }}" type='text/css' />
<link rel="stylesheet" href="{{ asset('preview_export/reveal/css/theme/default.css') }}" id="theme">
<style>
@font-face {
font-family: 'Lato';
font-style: normal;
font-weight: 700;
src: local('Lato Bold'), local('Lato-Bold'), url('{{ asset('preview_export/css/Lato-Bold.woff') }}') format('woff');
}
@font-face {
font-family: 'Hammersmith One';
font-style: normal;
font-weight: 400;
src: local('Hammersmith One'), local('HammersmithOne'), url('{{ asset('preview_export/css/HammersmithOne.woff') }}') format('woff');
}
@font-face {
font-family: 'Gorditas';
font-style: normal;
font-weight: 400;
src: local('Gorditas'), local('Gorditas-Regular'), url('{{ asset('preview_export/css/Gorditas-Regular.woff') }}') format('woff');
}
@font-face {
font-family: 'Fredoka One';
font-style: normal;
font-weight: 400;
src: local('Fredoka One'), local('FredokaOne-Regular'), url('{{ asset('preview_export/css/FredokaOne-Regular.woff') }}') format('woff');
}
@font-face {
font-family: 'Ubuntu';
font-style: normal;
font-weight: 400;
src: local('Ubuntu'), url('{{ asset('preview_export/css/Ubuntu.woff') }}') format('woff');
}
@font-face {
font-family: 'Ubuntu';
font-style: normal;
font-weight: 700;
src: local('Ubuntu Bold'), local('Ubuntu-Bold'), url('{{ asset('preview_export/css/Ubuntu-Bold.woff') }}') format('woff');
}
@font-face {
font-family: 'PressStart2P';
font-style: normal;
font-weight: 400;
src: local('Press Start 2P'), local('PressStart2P-Regular'), url('{{ asset('preview_export/css/PressStart2P-Regular.woff') }}') format('woff');
}
@font-face {
font-family: 'Lato';