Compare commits
7 commits
Author | SHA1 | Date | |
---|---|---|---|
Simon Vieille | c9fee1ea42 | ||
Simon Vieille | 196da8cb45 | ||
Simon Vieille | cb286ce704 | ||
Simon Vieille | 6d84cf319c | ||
Simon Vieille | e5f996705e | ||
Simon Vieille | 7c32234626 | ||
Simon Vieille | 7195609086 |
2
Makefile
2
Makefile
|
@ -20,6 +20,7 @@ npm:
|
||||||
@echo
|
@echo
|
||||||
|
|
||||||
${NPM} install
|
${NPM} install
|
||||||
|
${NPM} update
|
||||||
|
|
||||||
update:
|
update:
|
||||||
@echo "Updating application's dependencies"
|
@echo "Updating application's dependencies"
|
||||||
|
@ -31,6 +32,7 @@ update:
|
||||||
${MKDIR} -p data/cache
|
${MKDIR} -p data/cache
|
||||||
${COMPOSER} update
|
${COMPOSER} update
|
||||||
${NPM} install
|
${NPM} install
|
||||||
|
${NPM} update
|
||||||
|
|
||||||
clean-cache:
|
clean-cache:
|
||||||
@echo "Removing cache"
|
@echo "Removing cache"
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
{
|
{
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bootstrap": "^3.3.4",
|
"bootstrap": "^3.4.1",
|
||||||
"diff": "^2.2.2",
|
"diff": "^3.5.0",
|
||||||
"flag-icon-css": "^0.8.6",
|
"flag-icon-css": "^0.8.6",
|
||||||
"iframe-resizer": "^2.8.6",
|
"iframe-resizer": "^2.8.10",
|
||||||
"jquery": "^1.9.1"
|
"jquery": ">=3.4.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,27 @@ abstract class Controller
|
||||||
*/
|
*/
|
||||||
protected $app;
|
protected $app;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $types = [
|
||||||
|
'html',
|
||||||
|
'css',
|
||||||
|
'javascript',
|
||||||
|
'php',
|
||||||
|
'sql',
|
||||||
|
'xml',
|
||||||
|
'yaml',
|
||||||
|
'markdown',
|
||||||
|
'perl',
|
||||||
|
'c',
|
||||||
|
'asp',
|
||||||
|
'python',
|
||||||
|
'bash',
|
||||||
|
'actionscript3',
|
||||||
|
'text',
|
||||||
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* __construct.
|
* __construct.
|
||||||
*
|
*
|
||||||
|
@ -88,6 +109,7 @@ abstract class Controller
|
||||||
return array(
|
return array(
|
||||||
'gist' => $gist,
|
'gist' => $gist,
|
||||||
'type' => $gist->getType(),
|
'type' => $gist->getType(),
|
||||||
|
'types' => $this->types,
|
||||||
'history' => $history,
|
'history' => $history,
|
||||||
'commit' => $commit,
|
'commit' => $commit,
|
||||||
'raw_content' => $content,
|
'raw_content' => $content,
|
||||||
|
|
|
@ -31,6 +31,17 @@ class ViewController extends Controller
|
||||||
$viewOptions = $this->getViewOptions($request, $gist, $commit);
|
$viewOptions = $this->getViewOptions($request, $gist, $commit);
|
||||||
|
|
||||||
if (is_array($viewOptions)) {
|
if (is_array($viewOptions)) {
|
||||||
|
if ($request->query->has('type')) {
|
||||||
|
$type = $request->query->get('type');
|
||||||
|
|
||||||
|
if (in_array($type, $this->types)) {
|
||||||
|
$viewOptions['gist']->setType($type);
|
||||||
|
$viewOptions['type_overrided'] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$viewOptions['no_cache'] = true;
|
||||||
|
|
||||||
return $this->createResponse('View/view.html.twig', $viewOptions);
|
return $this->createResponse('View/view.html.twig', $viewOptions);
|
||||||
} else {
|
} else {
|
||||||
return $this->notFoundResponse();
|
return $this->notFoundResponse();
|
||||||
|
@ -53,6 +64,15 @@ class ViewController extends Controller
|
||||||
$viewOptions = $this->getViewOptions($request, $gist, $commit);
|
$viewOptions = $this->getViewOptions($request, $gist, $commit);
|
||||||
|
|
||||||
if (is_array($viewOptions)) {
|
if (is_array($viewOptions)) {
|
||||||
|
if ($request->query->has('type')) {
|
||||||
|
$type = $request->query->get('type');
|
||||||
|
|
||||||
|
if (in_array($type, $this->types)) {
|
||||||
|
$viewOptions['gist']->setType($type);
|
||||||
|
$viewOptions['type_overrided'] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $this->createResponse('View/embed.html.twig', $viewOptions);
|
return $this->createResponse('View/embed.html.twig', $viewOptions);
|
||||||
} else {
|
} else {
|
||||||
return $this->notFoundResponse();
|
return $this->notFoundResponse();
|
||||||
|
@ -72,13 +92,19 @@ class ViewController extends Controller
|
||||||
{
|
{
|
||||||
$viewOptions = $this->getViewOptions($request, $gist, $commit);
|
$viewOptions = $this->getViewOptions($request, $gist, $commit);
|
||||||
|
|
||||||
return new Response(
|
if ($request->query->has('type')) {
|
||||||
$this->render('View/embedJs.html.twig', $viewOptions),
|
$type = $request->query->get('type');
|
||||||
200,
|
|
||||||
array(
|
if (in_array($type, $this->types)) {
|
||||||
'Content-Type' => 'text/javascript',
|
$viewOptions['gist']->setType($type);
|
||||||
)
|
$viewOptions['type_overrided'] = true;
|
||||||
);
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$response = $this->createResponse('View/embedJs.html.twig', $viewOptions);
|
||||||
|
$response->headers->set('Content-Type', 'text/javascript');
|
||||||
|
|
||||||
|
return $response;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -31,6 +31,12 @@
|
||||||
{% block nav %}{% endblock %}
|
{% block nav %}{% endblock %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
|
{% set routeParams = app.request.attributes.get('_route_params') %}
|
||||||
|
|
||||||
|
{% if type_overrided is defined %}
|
||||||
|
{% set routeParams = routeParams|merge({type: gist.type}) %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12" id="embed">
|
<div class="col-md-12" id="embed">
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
|
@ -47,7 +53,7 @@
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu dropdown-menu-right">
|
<ul class="dropdown-menu dropdown-menu-right">
|
||||||
<li>
|
<li>
|
||||||
<a target="_blank" href="{{ path('view', app.request.attributes.get('_route_params')) }}" class="cipher-link">
|
<a target="_blank" href="{{ path('view', routeParams) }}" class="cipher-link">
|
||||||
<span class="btn btn-warning btn-xs">
|
<span class="btn btn-warning btn-xs">
|
||||||
{{ commit|slice(0, 10) }}
|
{{ commit|slice(0, 10) }}
|
||||||
</span>
|
</span>
|
||||||
|
@ -55,18 +61,18 @@
|
||||||
</li>
|
</li>
|
||||||
{% if not gist.cipher %}
|
{% if not gist.cipher %}
|
||||||
<li>
|
<li>
|
||||||
<a target="_blank" href="{{ path('raw', app.request.attributes.get('_route_params')) }}">
|
<a target="_blank" href="{{ path('raw', routeParams) }}">
|
||||||
{{ 'gist.action.raw'|trans }}
|
{{ 'gist.action.raw'|trans }}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a target="_blank" href="{{ path('download', app.request.attributes.get('_route_params')) }}">
|
<a target="_blank" href="{{ path('download', routeParams) }}">
|
||||||
{{ 'gist.action.download'|trans }}
|
{{ 'gist.action.download'|trans }}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<li>
|
<li>
|
||||||
<a target="_blank" href="{{ path('clone', app.request.attributes.get('_route_params')) }}" class="cipher-link">
|
<a target="_blank" href="{{ path('clone', routeParams) }}" class="cipher-link">
|
||||||
{{ 'gist.action.clone'|trans }}
|
{{ 'gist.action.clone'|trans }}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -75,20 +81,20 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="visible-md visible-lg">
|
<div class="visible-md visible-lg">
|
||||||
<div class="text-right actions">
|
<div class="text-right actions">
|
||||||
<a target="_blank" href="{{ path('view', app.request.attributes.get('_route_params')) }}" class="cipher-link"><span class="btn btn-warning btn-xs">{{ commit|slice(0, 10) }}</span></a>
|
<a target="_blank" href="{{ path('view', routeParams) }}" class="cipher-link"><span class="btn btn-warning btn-xs">{{ commit|slice(0, 10) }}</span></a>
|
||||||
|
|
||||||
{% if not gist.cipher %}
|
{% if not gist.cipher %}
|
||||||
<a target="_blank" href="{{ path('raw', app.request.attributes.get('_route_params')) }}" class="btn btn-default btn-sm">
|
<a target="_blank" href="{{ path('raw', routeParams) }}" class="btn btn-default btn-sm">
|
||||||
<span class="glyphicon glyphicon-eye-open"></span>
|
<span class="glyphicon glyphicon-eye-open"></span>
|
||||||
{{ 'gist.action.raw'|trans }}
|
{{ 'gist.action.raw'|trans }}
|
||||||
</a>
|
</a>
|
||||||
<a target="_blank" href="{{ path('download', app.request.attributes.get('_route_params')) }}" class="btn btn-default btn-sm">
|
<a target="_blank" href="{{ path('download', routeParams) }}" class="btn btn-default btn-sm">
|
||||||
<span class="glyphicon glyphicon-save-file"></span>
|
<span class="glyphicon glyphicon-save-file"></span>
|
||||||
{{ 'gist.action.download'|trans }}
|
{{ 'gist.action.download'|trans }}
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<a target="_blank" href="{{ path('clone', app.request.attributes.get('_route_params')) }}" class="btn btn-success btn-sm cipher-link">
|
<a target="_blank" href="{{ path('clone', routeParams) }}" class="btn btn-success btn-sm cipher-link">
|
||||||
<span class="glyphicon glyphicon-copy"></span>
|
<span class="glyphicon glyphicon-copy"></span>
|
||||||
{{ 'gist.action.clone'|trans }}
|
{{ 'gist.action.clone'|trans }}
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -1,9 +1,15 @@
|
||||||
|
{% set routeParams = app.request.attributes.get('_route_params') %}
|
||||||
|
|
||||||
|
{% if type_overrided is defined %}
|
||||||
|
{% set routeParams = routeParams|merge({type: gist.type}) %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
var iFrameResizeLoaded = function() {
|
var iFrameResizeLoaded = function() {
|
||||||
var div = document.getElementById('gist-{{ gist.file }}-{{ commit }}');
|
var div = document.getElementById('gist-{{ gist.file }}-{{ commit }}');
|
||||||
var iframeId = 'gist-' + (Math.floor(Math.random() * (10000 - 1)) + 1).toString();
|
var iframeId = 'gist-' + (Math.floor(Math.random() * (10000 - 1)) + 1).toString();
|
||||||
var iframe = document.createElement('iframe');
|
var iframe = document.createElement('iframe');
|
||||||
var url = '{{ app.request.getSchemeAndHttpHost() ~ path('embed', app.request.attributes.get('_route_params')) }}';
|
var url = '{{ app.request.getSchemeAndHttpHost() ~ path('embed', routeParams) }}';
|
||||||
|
|
||||||
if (div.getAttribute('data-key')) {
|
if (div.getAttribute('data-key')) {
|
||||||
url = [url, div.getAttribute('data-key')].join('');
|
url = [url, div.getAttribute('data-key')].join('');
|
||||||
|
|
|
@ -15,6 +15,12 @@
|
||||||
{% block title %}{{ gist.title ? gist.title : 'gist.untitled'|trans }} - {{ commit|slice(0, 10) }}{% endblock %}
|
{% block title %}{{ gist.title ? gist.title : 'gist.untitled'|trans }} - {{ commit|slice(0, 10) }}{% endblock %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
|
{% set routeParams = app.request.attributes.get('_route_params') %}
|
||||||
|
|
||||||
|
{% if type_overrided is defined %}
|
||||||
|
{% set routeParams = routeParams|merge({type: gist.type}) %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<ul class="nav nav-tabs">
|
<ul class="nav nav-tabs">
|
||||||
|
@ -45,7 +51,7 @@
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu dropdown-menu-right">
|
<ul class="dropdown-menu dropdown-menu-right">
|
||||||
<li>
|
<li>
|
||||||
<a target="_blank" href="{{ path('view', app.request.attributes.get('_route_params')) }}" class="cipher-link">
|
<a target="_blank" href="{{ path('view', routeParams) }}" class="cipher-link">
|
||||||
<span class="btn btn-warning btn-xs">
|
<span class="btn btn-warning btn-xs">
|
||||||
{{ commit|slice(0, 10) }}
|
{{ commit|slice(0, 10) }}
|
||||||
</span>
|
</span>
|
||||||
|
@ -53,18 +59,18 @@
|
||||||
</li>
|
</li>
|
||||||
{% if not gist.cipher %}
|
{% if not gist.cipher %}
|
||||||
<li>
|
<li>
|
||||||
<a href="{{ path('raw', app.request.attributes.get('_route_params')) }}">
|
<a href="{{ path('raw', routeParams) }}">
|
||||||
{{ 'gist.action.raw'|trans }}
|
{{ 'gist.action.raw'|trans }}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="{{ path('download', app.request.attributes.get('_route_params')) }}">
|
<a href="{{ path('download', routeParams) }}">
|
||||||
{{ 'gist.action.download'|trans }}
|
{{ 'gist.action.download'|trans }}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<li>
|
<li>
|
||||||
<a href="{{ path('clone', app.request.attributes.get('_route_params')) }}" class="cipher-link">
|
<a href="{{ path('clone', routeParams) }}" class="cipher-link">
|
||||||
{{ 'gist.action.clone'|trans }}
|
{{ 'gist.action.clone'|trans }}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -78,17 +84,17 @@
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
{% if not gist.cipher %}
|
{% if not gist.cipher %}
|
||||||
<a href="{{ path('raw', app.request.attributes.get('_route_params')) }}" class="btn btn-default btn-sm">
|
<a href="{{ path('raw', routeParams) }}" class="btn btn-default btn-sm">
|
||||||
<span class="glyphicon glyphicon-eye-open"></span>
|
<span class="glyphicon glyphicon-eye-open"></span>
|
||||||
{{ 'gist.action.raw'|trans }}
|
{{ 'gist.action.raw'|trans }}
|
||||||
</a>
|
</a>
|
||||||
<a href="{{ path('download', app.request.attributes.get('_route_params')) }}" class="btn btn-default btn-sm">
|
<a href="{{ path('download', routeParams) }}" class="btn btn-default btn-sm">
|
||||||
<span class="glyphicon glyphicon-save-file"></span>
|
<span class="glyphicon glyphicon-save-file"></span>
|
||||||
{{ 'gist.action.download'|trans }}
|
{{ 'gist.action.download'|trans }}
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<a href="{{ path('clone', app.request.attributes.get('_route_params')) }}" class="btn btn-success btn-sm cipher-link">
|
<a href="{{ path('clone', routeParams) }}" class="btn btn-success btn-sm cipher-link">
|
||||||
<span class="glyphicon glyphicon-copy"></span>
|
<span class="glyphicon glyphicon-copy"></span>
|
||||||
{{ 'gist.action.clone'|trans }}
|
{{ 'gist.action.clone'|trans }}
|
||||||
</a>
|
</a>
|
||||||
|
@ -104,6 +110,33 @@
|
||||||
<pre><code {% if gist.cipher %}data-cipher{% endif %} class="line-numbers language-{{ gist.highlightType }}">{{ raw_content }}</code></pre>
|
<pre><code {% if gist.cipher %}data-cipher{% endif %} class="line-numbers language-{{ gist.highlightType }}">{{ raw_content }}</code></pre>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="btn-toolbar">
|
||||||
|
<div class="pull-right">
|
||||||
|
<div class="btn-group">
|
||||||
|
<div class="btn-group">
|
||||||
|
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
|
||||||
|
{{ ('form.type.choice.' ~ gist.type)|trans }}
|
||||||
|
<span class="caret"></span>
|
||||||
|
</button>
|
||||||
|
<ul class="dropdown-menu dropdown-menu-right">
|
||||||
|
{% for item in types %}
|
||||||
|
{% if gist.type != item %}
|
||||||
|
<li>
|
||||||
|
{% set params = app.request.attributes.get('_route_params')|merge({type: item}) %}
|
||||||
|
|
||||||
|
<a href="{{ path('view', params) }}">
|
||||||
|
<label for="type-{{ loop.index }}">
|
||||||
|
{{ ('form.type.choice.' ~ item)|trans }}
|
||||||
|
</label>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -115,7 +148,7 @@
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
<div class="tab-pane active in">
|
<div class="tab-pane active in">
|
||||||
<pre><code class="language-html">{{ '<div%key%id="gist-' ~ gist.file ~ '-' ~ commit ~ '" class="gist-container"></div>
|
<pre><code class="language-html">{{ '<div%key%id="gist-' ~ gist.file ~ '-' ~ commit ~ '" class="gist-container"></div>
|
||||||
<script src="' ~ app.request.getSchemeAndHttpHost() ~ path('embedjs', app.request.attributes.get('_route_params')) ~ '" async></script>' }}</code></pre>
|
<script src="' ~ app.request.getSchemeAndHttpHost() ~ path('embedjs', routeParams) ~ '" async></script>' }}</code></pre>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -117,7 +117,7 @@
|
||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script src="{{ web_path }}components/jquery/jquery.min.js"></script>
|
<script src="{{ web_path }}components/jquery/dist/jquery.min.js"></script>
|
||||||
<script src="{{ web_path }}components/bootstrap/dist/js/bootstrap.min.js"></script>
|
<script src="{{ web_path }}components/bootstrap/dist/js/bootstrap.min.js"></script>
|
||||||
<script src="{{ web_path }}app/js/cipher.js"></script>
|
<script src="{{ web_path }}app/js/cipher.js"></script>
|
||||||
<script src="{{ web_path }}app/js/app.js"></script>
|
<script src="{{ web_path }}app/js/app.js"></script>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* PrismJS 1.15.0
|
/* PrismJS 1.15.0
|
||||||
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+actionscript+c+csharp+bash+cpp+aspnet+css-extras+diff+markup-templating+markdown+perl+php+php-extras+sql+python+yaml&plugins=line-highlight+line-numbers+autolinker */
|
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+actionscript+c+csharp+bash+cpp+aspnet+css-extras+diff+markup-templating+markdown+perl+php+php-extras+sql+python+yaml&plugins=line-highlight+line-numbers */
|
||||||
/**
|
/**
|
||||||
* prism.js default theme for JavaScript, CSS and HTML
|
* prism.js default theme for JavaScript, CSS and HTML
|
||||||
* Based on dabblet (http://dabblet.com)
|
* Based on dabblet (http://dabblet.com)
|
||||||
|
@ -231,6 +231,3 @@ pre[class*="language-"].line-numbers > code {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
.token a {
|
|
||||||
color: inherit;
|
|
||||||
}
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue