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}
|
path: /view/{gist}/{commit}
|
||||||
defaults: {_controller: Gist\Controller\ViewController::viewAction, _locale: en, commit: 0}
|
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:
|
raw:
|
||||||
path: /raw/{gist}/{commit}
|
path: /raw/{gist}/{commit}
|
||||||
defaults: {_controller: Gist\Controller\ViewController::rawAction, _locale: en, commit: 0}
|
defaults: {_controller: Gist\Controller\ViewController::rawAction, _locale: en, commit: 0}
|
||||||
|
@ -19,10 +19,14 @@ gist:
|
|||||||
raw: 'RAW'
|
raw: 'RAW'
|
||||||
download: 'Download'
|
download: 'Download'
|
||||||
clone: 'Clone'
|
clone: 'Clone'
|
||||||
|
embed: 'Embed:'
|
||||||
|
|
||||||
date:
|
date:
|
||||||
format: 'Y-m-d h:i:s'
|
format: 'Y-m-d h:i:s'
|
||||||
|
|
||||||
|
footer:
|
||||||
|
text: '<p>Powered by <a href="https://gitlab.deblan.org/deblan/gist">GIST</a></p>'
|
||||||
|
|
||||||
form:
|
form:
|
||||||
error:
|
error:
|
||||||
not_blank: 'This value should not be blank bro!'
|
not_blank: 'This value should not be blank bro!'
|
||||||
|
@ -19,10 +19,14 @@ gist:
|
|||||||
raw: 'RAW'
|
raw: 'RAW'
|
||||||
download: 'Télécharger'
|
download: 'Télécharger'
|
||||||
clone: 'Clôner'
|
clone: 'Clôner'
|
||||||
|
embed: 'Insérer : '
|
||||||
|
|
||||||
date:
|
date:
|
||||||
format: 'd/m/Y H\hi s\s'
|
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:
|
form:
|
||||||
error:
|
error:
|
||||||
not_blank: 'Vous devez saisir cette donnée.'
|
not_blank: 'Vous devez saisir cette donnée.'
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bootstrap": "3.3.4",
|
"bootstrap": "3.3.4",
|
||||||
"flag-icon-css": "0.7.1",
|
"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)
|
public function rawAction(Request $request, Application $app, $gist, $commit)
|
||||||
{
|
{
|
||||||
$viewOptions = $this->getViewOptions($request, $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 }}
|
{{ content|raw }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</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>
|
</div>
|
||||||
{% if not gist.cipher %}
|
{% if not gist.cipher %}
|
||||||
<div id="revisions" class="tab-pane out">
|
<div id="revisions" class="tab-pane out">
|
||||||
|
@ -16,46 +16,56 @@
|
|||||||
<title>{{ 'app.title_prefix'|trans }}{% block title %}{% endblock %}</title>
|
<title>{{ 'app.title_prefix'|trans }}{% block title %}{% endblock %}</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<nav class="navbar navbar-inverse">
|
{% block nav %}
|
||||||
<div class="container-fluid">
|
<nav class="navbar navbar-inverse">
|
||||||
<div class="navbar-header">
|
<div class="container-fluid">
|
||||||
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#main-menu">
|
<div class="navbar-header">
|
||||||
<span class="icon-bar"></span>
|
<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>
|
<span class="icon-bar"></span>
|
||||||
</button>
|
<span class="icon-bar"></span>
|
||||||
<a class="navbar-brand" href="{{ path('home') }}">
|
</button>
|
||||||
{{ 'app.title'|trans }}
|
<a class="navbar-brand" href="{{ path('home') }}">
|
||||||
</a>
|
{{ '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>
|
||||||
<div class="collapse navbar-collapse" id="main-menu">
|
</nav>
|
||||||
<ul class="nav navbar-nav">
|
{% endblock %}
|
||||||
<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>
|
|
||||||
<div class="container-fluid" id="container">
|
<div class="container-fluid" id="container">
|
||||||
{% block body %}{% endblock %}
|
{% block body %}{% endblock %}
|
||||||
|
|
||||||
|
{% block footer %}
|
||||||
|
<hr />
|
||||||
|
<footer>
|
||||||
|
{{ 'footer.text'|trans|raw }}
|
||||||
|
</footer>
|
||||||
|
{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
{% block js %}
|
{% block js %}
|
||||||
<script src="{{ web_path }}components/jquery/dist/jquery.min.js"></script>
|
<script src="{{ web_path }}components/jquery/dist/jquery.min.js"></script>
|
||||||
|
Loading…
Reference in New Issue
Block a user