mirror of
https://gitnet.fr/deblan/gist.git
synced 2021-08-14 08:30:49 +02:00
Embed
This commit is contained in:
parent
088c9ebdcd
commit
11cee3c399
@ -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}
|
||||
|
@ -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!'
|
||||
|
@ -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.'
|
||||
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
93
src/Gist/Resources/views/View/embed.html.twig
Normal file
93
src/Gist/Resources/views/View/embed.html.twig
Normal 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 %}
|
24
src/Gist/Resources/views/View/embedJs.html.twig
Normal file
24
src/Gist/Resources/views/View/embedJs.html.twig
Normal 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();
|
||||
}
|
||||
})();
|
@ -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">
|
||||
|
@ -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>
|
||||
|
Loading…
Reference in New Issue
Block a user