This commit is contained in:
Simon Vieille 2015-05-09 17:42:33 +02:00
parent 088c9ebdcd
commit 11cee3c399
9 changed files with 211 additions and 38 deletions

View file

@ -10,6 +10,14 @@ view:
path: /view/{gist}/{commit}
defaults: {_controller: Gist\Controller\ViewController::viewAction, _locale: en, commit: 0}
embed:
path: /embed/{gist}/{commit}
defaults: {_controller: Gist\Controller\ViewController::embedAction, _locale: en, commit: 0}
embedjs:
path: /embedjs/{gist}/{commit}
defaults: {_controller: Gist\Controller\ViewController::embedJsAction, _locale: en, commit: 0}
raw:
path: /raw/{gist}/{commit}
defaults: {_controller: Gist\Controller\ViewController::rawAction, _locale: en, commit: 0}

View file

@ -19,10 +19,14 @@ gist:
raw: 'RAW'
download: 'Download'
clone: 'Clone'
embed: 'Embed:'
date:
format: 'Y-m-d h:i:s'
footer:
text: '<p>Powered by <a href="https://gitlab.deblan.org/deblan/gist">GIST</a></p>'
form:
error:
not_blank: 'This value should not be blank bro!'

View file

@ -19,10 +19,14 @@ gist:
raw: 'RAW'
download: 'Télécharger'
clone: 'Clôner'
embed: 'Insérer : '
date:
format: 'd/m/Y H\hi s\s'
footer:
text: '<p>Propulsé avec <a href="https://gitlab.deblan.org/deblan/gist">GIST</a></p>'
form:
error:
not_blank: 'Vous devez saisir cette donnée.'

View file

@ -15,6 +15,7 @@
"dependencies": {
"bootstrap": "3.3.4",
"flag-icon-css": "0.7.1",
"SyntaxHighlighter": "3.0.83"
"SyntaxHighlighter": "3.0.83",
"iframe-resizer": "2.8.6"
}
}

View file

@ -25,6 +25,30 @@ class ViewController extends Controller
}
}
public function embedAction(Request $request, Application $app, $gist, $commit)
{
$viewOptions = $this->getViewOptions($request, $app, $gist, $commit);
if (is_array($viewOptions)) {
return $app['twig']->render('View/embed.html.twig', $viewOptions);
} else {
return $this->notFoundResponse($app);
}
}
public function embedJsAction(Request $request, Application $app, $gist, $commit)
{
$viewOptions = $this->getViewOptions($request, $app, $gist, $commit);
return new Response(
$app['twig']->render('View/embedJs.html.twig', $viewOptions),
200,
array(
'Content-Type' => 'text/javascript',
)
);
}
public function rawAction(Request $request, Application $app, $gist, $commit)
{
$viewOptions = $this->getViewOptions($request, $app, $gist, $commit);

View file

@ -0,0 +1,93 @@
{% extends 'base.html.twig' %}
{% block css %}
<link rel="stylesheet" href="{{ web_path }}app/css/geshi/vibrant-ink.css" />
{{ parent() }}
<style type="text/css">
#embed {
padding: 0;
}
#viewer {
background: #222;
}
pre {
font-size: 9px;
padding: 0;
}
.panel-body {
padding: 0;
}
.panel {
margin-bottom: 0;
}
pre ol {
padding-left: 0 !important;
list-style: none;
}
</style>
{% endblock %}
{% block title %}{{ gist.title ? gist.title : 'gist.untitled'|trans }} - {{ commit|slice(0, 10) }}{% endblock %}
{% block nav %}{% endblock %}
{% block body %}
<div class="row">
<div class="col-md-12" id="embed">
<div class="panel panel-default">
<div class="panel-heading">
{% if not gist.cipher %}
<div class="pull-right actions">
<span class="btn btn-warning btn-xs">
{{ commit|slice(0, 10) }}
</span>
<a target="_blank" href="{{ path('raw', app.request.attributes.get('_route_params')) }}" class="btn btn-default btn-sm">
<span class="glyphicon glyphicon-eye-open"></span>
{{ 'gist.action.raw'|trans }}
</a>
<a target="_blank" href="{{ path('download', app.request.attributes.get('_route_params')) }}" class="btn btn-default btn-sm">
<span class="glyphicon glyphicon-save-file"></span>
{{ 'gist.action.download'|trans }}
</a>
<a target="_blank" href="{{ path('clone', app.request.attributes.get('_route_params')) }}" class="btn btn-success btn-sm">
<span class="glyphicon glyphicon-copy"></span>
{{ 'gist.action.clone'|trans }}
</a>
</div>
{% endif %}
{{ gist.title ? gist.title : 'gist.untitled'|trans }}
</div>
<div class="panel-body">
<div class="tab-content">
<div id="view" class="tab-pane active in">
<div id="viewer">
{% if gist.cipher %}
<pre class="brush: {{ gist.type }}; syntaxhighlighter">{{ raw_content|raw }}</pre>
{% else %}
{{ content|raw }}
{% endif %}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% block footer %}{% endblock %}
{% block js %}
{{ parent() }}
<script type="text/javascript" src="{{ web_path }}components/iframe-resizer/js/iframeResizer.contentWindow.min.js"></script>
{% endblock %}

View file

@ -0,0 +1,24 @@
(function() {
var iFrameResizeLoaded = function() {
var iframeId = 'gist-' + (Math.floor(Math.random() * (10000 - 1)) + 1).toString();
var iframe = document.createElement('iframe');
iframe.setAttribute('id', iframeId);
iframe.setAttribute('frameborder', 0);
iframe.setAttribute('src', '{{ app.request.getSchemeAndHttpHost() ~ path('embed', app.request.attributes.get('_route_params')|merge({_locale: 'en'})) }}');
iframe.setAttribute('style', 'width: 100%');
document.getElementById('gist-{{ gist.file }}-{{ commit }}').appendChild(iframe);
iFrameResize({}, iframe);
}
if (typeof iFrameResize == 'undefined') {
var script = document.createElement('script');
script.setAttribute('id', 'gist-iframe-resizer');
script.setAttribute('class', 'gist-iframe');
script.setAttribute('src', '{{ app.request.getSchemeAndHttpHost() ~ web_path }}components/iframe-resizer/js/iframeResizer.min.js');
script.onload = iFrameResizeLoaded;
document.getElementsByTagName('head')[0].appendChild(script);
} else {
iFrameResizeLoaded();
}
})();

View file

@ -67,6 +67,11 @@
{{ content|raw }}
{% endif %}
</div>
<p id="embed" class="pull-right">
{{ 'gist.action.embed'|trans }}
<input type="text" class="form-control" value="{{ '<div id="gist-' ~ gist.file ~ '-' ~ commit ~ '" class="gist-container"></div><script src="' ~ app.request.getSchemeAndHttpHost() ~ path('embedjs', app.request.attributes.get('_route_params')) ~ '"></script>' }}" />
</p>
</div>
{% if not gist.cipher %}
<div id="revisions" class="tab-pane out">

View file

@ -16,46 +16,56 @@
<title>{{ 'app.title_prefix'|trans }}{% block title %}{% endblock %}</title>
</head>
<body>
<nav class="navbar navbar-inverse">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#main-menu">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="{{ path('home') }}">
{{ 'app.title'|trans }}
</a>
{% block nav %}
<nav class="navbar navbar-inverse">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#main-menu">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="{{ path('home') }}">
{{ 'app.title'|trans }}
</a>
</div>
<div class="collapse navbar-collapse" id="main-menu">
<ul class="nav navbar-nav">
<li class="active">
<a href="{{ path('home') }}">
{{ 'app.menu.home.title'|trans }}
</a>
</li>
<li>
<a href="{{ path('home') }}">
{{ 'app.menu.about.title'|trans }}
</a>
</li>
</ul>
{% block langs %}
<p class="navbar-text navbar-right">
<a class="btn btn-xs" href="{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge({_locale: 'en'})) }}">
<span class="flag-icon flag-icon-gb"></span>
</a>
<a class="btn btn-xs" href="{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge({_locale: 'fr'})) }}">
<span class="flag-icon flag-icon-fr"></span>
</a>
</p>
{% endblock %}
</div>
</div>
<div class="collapse navbar-collapse" id="main-menu">
<ul class="nav navbar-nav">
<li class="active">
<a href="{{ path('home') }}">
{{ 'app.menu.home.title'|trans }}
</a>
</li>
<li>
<a href="{{ path('home') }}">
{{ 'app.menu.about.title'|trans }}
</a>
</li>
</ul>
{% block langs %}
<p class="navbar-text navbar-right">
<a class="btn btn-xs" href="{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge({_locale: 'en'})) }}">
<span class="flag-icon flag-icon-gb"></span>
</a>
<a class="btn btn-xs" href="{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge({_locale: 'fr'})) }}">
<span class="flag-icon flag-icon-fr"></span>
</a>
</p>
{% endblock %}
</div>
</div>
</nav>
</nav>
{% endblock %}
<div class="container-fluid" id="container">
{% block body %}{% endblock %}
{% block footer %}
<hr />
<footer>
{{ 'footer.text'|trans|raw }}
</footer>
{% endblock %}
</div>
{% block js %}
<script src="{{ web_path }}components/jquery/dist/jquery.min.js"></script>