Commit d27fda8c1685c1752e6d24dc2af9deeb189d55d5
Committed by
Gust
1 parent
1607da03
Exists in
master
and in
34 other branches
Removed dpaste dependency
Showing
7 changed files
with
2 additions
and
491 deletions
Show diff stats
colab/static/dpaste/css/theme.css
| ... | ... | @@ -1,212 +0,0 @@ |
| 1 | - | |
| 2 | -.shortcut { | |
| 3 | - color: #AAA; | |
| 4 | - font-size: 13px; | |
| 5 | - font-weight: 300; | |
| 6 | - margin-left: 15px; | |
| 7 | -} | |
| 8 | - | |
| 9 | -.form-horizontal .form-group { | |
| 10 | - margin: 0 0 20px 0; | |
| 11 | -} | |
| 12 | - | |
| 13 | -#id_content{ | |
| 14 | - width: 100%; | |
| 15 | - font-family: monospace; | |
| 16 | - font-size: 14px; | |
| 17 | - line-height: 16px; | |
| 18 | -} | |
| 19 | - | |
| 20 | -/* ---------------------------------------------------------------------------- | |
| 21 | - Snippet Details | |
| 22 | ----------------------------------------------------------------------------- */ | |
| 23 | -#snippet-diff { | |
| 24 | - display: none; | |
| 25 | -} | |
| 26 | -.snippet-options{ | |
| 27 | - margin-bottom: 20px; | |
| 28 | -} | |
| 29 | - | |
| 30 | -.snippet-reply { | |
| 31 | - margin-top: 30px; | |
| 32 | -} | |
| 33 | - | |
| 34 | -.snippet-reply-hidden { | |
| 35 | - opacity: 0.3; | |
| 36 | -} | |
| 37 | - | |
| 38 | -.snippet-reply-hidden, | |
| 39 | -.snippet-reply-hidden *{ | |
| 40 | - cursor: pointer; | |
| 41 | -} | |
| 42 | - | |
| 43 | -.snippet-diff-form { | |
| 44 | -} | |
| 45 | - | |
| 46 | -.snippet-rendered { | |
| 47 | - color: #666; | |
| 48 | - font-size: 16px; | |
| 49 | - line-height: 24px; | |
| 50 | - max-width: 620px; | |
| 51 | - font-family: Helvetica, FreeSerif, serif; | |
| 52 | - font-weight: 300; | |
| 53 | -} | |
| 54 | -.diff-form { | |
| 55 | -/* margin-bottom: 10px;*/ | |
| 56 | -} | |
| 57 | - | |
| 58 | -#diff { | |
| 59 | - margin-bottom: 10px; | |
| 60 | -/* display: none;*/ | |
| 61 | -} | |
| 62 | - | |
| 63 | -.tree{ | |
| 64 | - width: 100%; | |
| 65 | - line-height: 1.8em; | |
| 66 | -} | |
| 67 | - | |
| 68 | -.tree ul, | |
| 69 | -.tree ul li{ | |
| 70 | - margin: 0; | |
| 71 | - padding: 0; | |
| 72 | - list-style: none; | |
| 73 | -} | |
| 74 | - | |
| 75 | -.tree ul li{ | |
| 76 | - color: #ccc; | |
| 77 | - clear: both; | |
| 78 | -} | |
| 79 | - | |
| 80 | -.tree ul li div{ | |
| 81 | - border-bottom: 1px solid #EEE; | |
| 82 | -} | |
| 83 | - | |
| 84 | -.tree strong{ | |
| 85 | - color: #111; | |
| 86 | - font-weight: normal; | |
| 87 | -} | |
| 88 | - | |
| 89 | -.tree ul li li{ | |
| 90 | - padding-left: 0; | |
| 91 | - margin-left: 15px; | |
| 92 | - color: #ccc; | |
| 93 | - list-style: circle; | |
| 94 | -} | |
| 95 | - | |
| 96 | -/* ---------------------------------------------------------------------------- | |
| 97 | - .code | |
| 98 | ----------------------------------------------------------------------------- */ | |
| 99 | - | |
| 100 | -.code { | |
| 101 | - width: 100%; | |
| 102 | - background: #232829; | |
| 103 | - color: #f8f8f2; | |
| 104 | - padding: 20px 30px !important; | |
| 105 | - border-radius: 0; | |
| 106 | - padding: 20px 30px; | |
| 107 | - font-family: Monaco,Menlo,Consolas,"Courier New",monospace; | |
| 108 | -} | |
| 109 | - | |
| 110 | -.code.wordwrap { | |
| 111 | - overflow: auto; | |
| 112 | - white-space: nowrap; | |
| 113 | -} | |
| 114 | - | |
| 115 | -.code ol { | |
| 116 | - margin: 0 0 0 45px; | |
| 117 | -} | |
| 118 | - | |
| 119 | -.code ol li { | |
| 120 | - color: #aaa; | |
| 121 | - font-size: 12px; | |
| 122 | - line-height: 21px; | |
| 123 | - cursor: pointer; | |
| 124 | - padding-left: 5px; | |
| 125 | -} | |
| 126 | - | |
| 127 | -.code ol li.marked { | |
| 128 | - color: #f4e009; | |
| 129 | - background-color: #4f4800; | |
| 130 | - margin-right: -30px; | |
| 131 | - padding-right: 30px; | |
| 132 | -} | |
| 133 | - | |
| 134 | -/* ---------------------------------------------------------------------------- | |
| 135 | - Pygments | |
| 136 | ----------------------------------------------------------------------------- */ | |
| 137 | - | |
| 138 | -.code .gd { color: #FF494F; display: block; } | |
| 139 | -.code .gi { color: #53C64A; display: block; } | |
| 140 | - | |
| 141 | -.code .hll { background-color: #49483e } | |
| 142 | -.code .c { color: #75715e } /* Comment */ | |
| 143 | -.code .err { color: #960050; background-color: #1e0010 } /* Error */ | |
| 144 | -.code .k { color: #66d9ef } /* Keyword */ | |
| 145 | -.code .l { color: #ae81ff } /* Literal */ | |
| 146 | -.code .n { color: #f8f8f2 } /* Name */ | |
| 147 | -.code .o { color: #f92672 } /* Operator */ | |
| 148 | -.code .p { color: #f8f8f2 } /* Punctuation */ | |
| 149 | -.code .cm { color: #75715e } /* Comment.Multiline */ | |
| 150 | -.code .cp { color: #75715e } /* Comment..codeproc */ | |
| 151 | -.code .c1 { color: #75715e } /* Comment.Single */ | |
| 152 | -.code .cs { color: #75715e } /* Comment.Special */ | |
| 153 | -.code .ge { font-style: italic } /* Generic.Emph */ | |
| 154 | -.code .gs { font-weight: bold } /* Generic.Strong */ | |
| 155 | -.code .kc { color: #66d9ef } /* Keyword.Constant */ | |
| 156 | -.code .kd { color: #66d9ef } /* Keyword.Declaration */ | |
| 157 | -.code .kn { color: #f92672 } /* Keyword.Namespace */ | |
| 158 | -.code .kp { color: #66d9ef } /* Keyword.Pseudo */ | |
| 159 | -.code .kr { color: #66d9ef } /* Keyword.Reserved */ | |
| 160 | -.code .kt { color: #66d9ef } /* Keyword.Type */ | |
| 161 | -.code .ld { color: #e6db74 } /* Literal.Date */ | |
| 162 | -.code .m { color: #ae81ff } /* Literal.Number */ | |
| 163 | -.code .s { color: #e6db74 } /* Literal.String */ | |
| 164 | -.code .na { color: #a6e22e } /* Name.Attribute */ | |
| 165 | -.code .nb { color: #f8f8f2 } /* Name.Builtin */ | |
| 166 | -.code .nc { color: #a6e22e } /* Name.Class */ | |
| 167 | -.code .no { color: #66d9ef } /* Name.Constant */ | |
| 168 | -.code .nd { color: #a6e22e } /* Name.Decorator */ | |
| 169 | -.code .ni { color: #f8f8f2 } /* Name.Entity */ | |
| 170 | -.code .ne { color: #a6e22e } /* Name.Exception */ | |
| 171 | -.code .nf { color: #a6e22e } /* Name.Function */ | |
| 172 | -.code .nl { color: #f8f8f2 } /* Name.Label */ | |
| 173 | -.code .nn { color: #f8f8f2 } /* Name.Namespace */ | |
| 174 | -.code .nx { color: #a6e22e } /* Name.Other */ | |
| 175 | -.code .py { color: #f8f8f2 } /* Name.Property */ | |
| 176 | -.code .nt { color: #f92672 } /* Name.Tag */ | |
| 177 | -.code .nv { color: #f8f8f2 } /* Name.Variable */ | |
| 178 | -.code .ow { color: #f92672 } /* Operator.Word */ | |
| 179 | -.code .w { color: #f8f8f2 } /* Text.Whitespace */ | |
| 180 | -.code .mf { color: #ae81ff } /* Literal.Number.Float */ | |
| 181 | -.code .mh { color: #ae81ff } /* Literal.Number.Hex */ | |
| 182 | -.code .mi { color: #ae81ff } /* Literal.Number.Integer */ | |
| 183 | -.code .mo { color: #ae81ff } /* Literal.Number.Oct */ | |
| 184 | -.code .sb { color: #e6db74 } /* Literal.String.Backtick */ | |
| 185 | -.code .sc { color: #e6db74 } /* Literal.String.Char */ | |
| 186 | -.code .sd { color: #e6db74 } /* Literal.String.Doc */ | |
| 187 | -.code .s2 { color: #e6db74 } /* Literal.String.Double */ | |
| 188 | -.code .se { color: #ae81ff } /* Literal.String.Escape */ | |
| 189 | -.code .sh { color: #e6db74 } /* Literal.String.Heredoc */ | |
| 190 | -.code .si { color: #e6db74 } /* Literal.String.Interpol */ | |
| 191 | -.code .sx { color: #e6db74 } /* Literal.String.Other */ | |
| 192 | -.code .sr { color: #e6db74 } /* Literal.String.Regex */ | |
| 193 | -.code .s1 { color: #e6db74 } /* Literal.String.Single */ | |
| 194 | -.code .ss { color: #e6db74 } /* Literal.String.Symbol */ | |
| 195 | -.code .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */ | |
| 196 | -.code .vc { color: #f8f8f2 } /* Name.Variable.Class */ | |
| 197 | -.code .vg { color: #f8f8f2 } /* Name.Variable.Global */ | |
| 198 | -.code .vi { color: #f8f8f2 } /* Name.Variable.Instance */ | |
| 199 | -.code .il { color: #ae81ff } /* Literal.Number.Integer.Long */ | |
| 200 | - | |
| 201 | - | |
| 202 | -/* ---------------------------------------------------------------------------- | |
| 203 | - Mobile | |
| 204 | ----------------------------------------------------------------------------- */ | |
| 205 | - | |
| 206 | -@media (max-width: 580px) { | |
| 207 | - .form-options-expire { | |
| 208 | - float: left; | |
| 209 | - clear: left; | |
| 210 | - margin-top: 10px; | |
| 211 | - } | |
| 212 | -} |
colab/templates/dpaste/base.html
| ... | ... | @@ -1,16 +0,0 @@ |
| 1 | -{% extends 'base.html' %} | |
| 2 | -{% load static from staticfiles %} | |
| 3 | - | |
| 4 | -{% block head_css %} | |
| 5 | -<link rel="stylesheet" href="{% static 'dpaste/css/theme.css' %}" type="text/css" media="screen" /> | |
| 6 | -{% endblock %} | |
| 7 | - | |
| 8 | -{% block header %} | |
| 9 | -<h2>Paste</h2> | |
| 10 | -{% endblock %} | |
| 11 | - | |
| 12 | -{% block main-content %} | |
| 13 | -{% block page %}{% endblock %} | |
| 14 | -{% endblock %} | |
| 15 | - | |
| 16 | -{% block footer_js %}{% endblock %} |
colab/templates/dpaste/snippet_details.html
| ... | ... | @@ -1,207 +0,0 @@ |
| 1 | -{% extends "dpaste/base.html" %} | |
| 2 | - | |
| 3 | -{% load mptt_tags %} | |
| 4 | -{% load i18n %} | |
| 5 | -{% load dpaste_tags %} | |
| 6 | - | |
| 7 | -{% block page %} | |
| 8 | - | |
| 9 | -{# Snippet options #} | |
| 10 | - | |
| 11 | - | |
| 12 | -<div id="snippet-diff" class="row"> | |
| 13 | - <div class="col-md-10"> | |
| 14 | - <div id="diff" style="display:none;"></div> | |
| 15 | - </div> | |
| 16 | - <div id="snippet-diff-form" class="col-md-2"> | |
| 17 | - <form method="get" id="diffform" action="{% url "snippet_diff" %}"> | |
| 18 | - {% csrf_token %} | |
| 19 | - <div class="form-group tree"> | |
| 20 | - {% for tree_item,structure in tree|tree_info %} | |
| 21 | - {% if structure.new_level %}<ul><li>{% else %}</li><li>{% endif %} | |
| 22 | - <div> | |
| 23 | - <span class="pull-right"> | |
| 24 | - <input type="radio" name="a" value="{{ tree_item.id }}" {% ifequal tree_item.id snippet.parent_id %}checked="checked"{% endifequal %}> | |
| 25 | - <input type="radio" name="b" value="{{ tree_item.id }}" {% ifequal snippet tree_item %}checked="checked"{% endifequal %}> | |
| 26 | - </span> | |
| 27 | - {% ifequal snippet tree_item %} | |
| 28 | - <strong>#{{ tree_item.id }}</strong> | |
| 29 | - {% else %} | |
| 30 | - <a href="{{ tree_item.get_absolute_url }}">#{{ tree_item.id }}</a> | |
| 31 | - {% endifequal %} | |
| 32 | - </div> | |
| 33 | - {% for level in structure.closed_levels %}</li></ul>{% endfor %} | |
| 34 | - {% endfor %} | |
| 35 | - </div> | |
| 36 | - <div class="form-group pull-right"> | |
| 37 | - <button type="submit" class="btn btn-default">{% trans "Compare" %}</button> | |
| 38 | - </div> | |
| 39 | - </form> | |
| 40 | - </div> | |
| 41 | -</div> | |
| 42 | - | |
| 43 | - | |
| 44 | -<div class="btn-group btn-group-sm snippet-options"> | |
| 45 | - <a href="#" class="btn btn-default disabled"> | |
| 46 | - {% if snippet.expire_type == 1 %} | |
| 47 | - {% blocktrans with date=snippet.expires|timeuntil %}Expires in: {{ date }}{% endblocktrans %} | |
| 48 | - {% elif snippet.expire_type == 2 %} | |
| 49 | - {% trans "Snippet never expires" %} | |
| 50 | - {% elif snippet.expire_type == 3 %} | |
| 51 | - {% trans "One-time snippet" %} | |
| 52 | - {% endif %} | |
| 53 | - </a> | |
| 54 | - | |
| 55 | - {% if snippet.pk|in_list:request.session.snippet_list %} | |
| 56 | - <a href="{% url "snippet_delete" snippet.secret_id %}" class="btn btn-default" onclick="return confirm('{% trans "Really delete this snippet?" %}');"> | |
| 57 | - <span class="glyphicon glyphicon-trash"></span> | |
| 58 | - {% trans "Delete Now" %} | |
| 59 | - </a> | |
| 60 | - {% endif %} | |
| 61 | - | |
| 62 | - {% if not snippet.is_single %} | |
| 63 | - <a href="#snippet-diff" class="btn btn-default snippet-diff-trigger" title="{% trans "Compare Snippets" %}"> | |
| 64 | - <span class="glyphicon glyphicon-search"></span> | |
| 65 | - {% trans "Compare Snippets" %} | |
| 66 | - </a> | |
| 67 | - {% endif %} | |
| 68 | - | |
| 69 | - <a href="{% url "snippet_details_raw" snippet.secret_id %}" class="btn btn-default" title="{% trans "View Raw" %}"> | |
| 70 | - <span class="glyphicon glyphicon-align-left"></span> | |
| 71 | - {% trans "View Raw" %} | |
| 72 | - </a> | |
| 73 | - <a href="{% url "snippet_gist" snippet.secret_id %}" class="btn btn-default" rel="nofollow" title="Create a secret Gist"> | |
| 74 | - <span class="glyphicon glyphicon-share"></span> | |
| 75 | - </i> {% trans "Gist" %} | |
| 76 | - </a> | |
| 77 | - <a href="/paste" class="btn btn-primary"> | |
| 78 | - New snippet | |
| 79 | - <span class="glyphicon glyphicon-arrow-right"></span> | |
| 80 | - </a> | |
| 81 | -</div> | |
| 82 | - | |
| 83 | - | |
| 84 | - {% if snippet.expire_type == 3 %} | |
| 85 | - <div class="alert alert-warning alert-dismissable"> | |
| 86 | - <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> | |
| 87 | - | |
| 88 | - {% trans "This is a one-time snippet." %} | |
| 89 | - {% if snippet.remaining_views > 1 %} | |
| 90 | - {% trans "It will automatically get deleted after {{ remaining }} further views." %} | |
| 91 | - {% elif snippet.remaining_views == 1 %} | |
| 92 | - {% trans "It will automatically get deleted after the next view." %} | |
| 93 | - {% else %} | |
| 94 | - {% trans "It cannot be viewed again." %} | |
| 95 | - {% endif %} | |
| 96 | - </div> | |
| 97 | - {% endif %} | |
| 98 | - | |
| 99 | - {% if snippet.lexer == 'text' %} | |
| 100 | - <div class="snippet-rendered"> | |
| 101 | - {{ snippet.content|linebreaksbr }} | |
| 102 | - </div> | |
| 103 | - {% else %} | |
| 104 | - {% include "dpaste/snippet_pre.html" %} | |
| 105 | - {% endif %} | |
| 106 | - | |
| 107 | - {% if not snippet.expire_type == 3 %} | |
| 108 | - <div class="snippet-reply snippet-reply-hidden"> | |
| 109 | - <h3>{% trans "Reply to this snippet" %} →</h3> | |
| 110 | - {% include "dpaste/snippet_form.html" %} | |
| 111 | - </div> | |
| 112 | - {% endif %} | |
| 113 | - | |
| 114 | - | |
| 115 | - | |
| 116 | -{% block footer_js %} | |
| 117 | -<script> | |
| 118 | - | |
| 119 | -$(document).ready(function() { | |
| 120 | - $('.snippet-reply-hidden').click(function(e) { | |
| 121 | - $(this).removeClass('snippet-reply-hidden'); | |
| 122 | - }); | |
| 123 | - | |
| 124 | - var diffReq; | |
| 125 | - | |
| 126 | - $('.snippet-diff-trigger').click(function(event) { | |
| 127 | - $('#snippet-diff form').submit(); | |
| 128 | - $('#snippet-diff').show(); | |
| 129 | - event.preventDefault(); | |
| 130 | - }); | |
| 131 | - | |
| 132 | - | |
| 133 | - $('#diffform').submit(function() { | |
| 134 | - var a = $('input[name="a"]:checked').val(), | |
| 135 | - b = $('input[name="b"]:checked').val(); | |
| 136 | - | |
| 137 | - window.location.hash = 'D' + a + ',' + b; | |
| 138 | - | |
| 139 | - // Cancel previous request if it is still pending | |
| 140 | - if (diffReq) { | |
| 141 | - diffReq.abort(); | |
| 142 | - } | |
| 143 | - | |
| 144 | - diffReq = $.get("{% url "snippet_diff" %}", { | |
| 145 | - a: a, | |
| 146 | - b: b | |
| 147 | - }).done(function(data) { | |
| 148 | - $('#diff').html(data).slideDown('fast'); | |
| 149 | - }).complete(function() { | |
| 150 | - diffReq = null; | |
| 151 | - }); | |
| 152 | - | |
| 153 | - return false; | |
| 154 | - }); | |
| 155 | - | |
| 156 | - var curLine = document.location.hash, | |
| 157 | - hashlist; | |
| 158 | - | |
| 159 | - if (curLine.substring(0, 2) === '#D') { | |
| 160 | - hashlist = curLine.substring(2).split(','); | |
| 161 | - if (hashlist.length === 2) { | |
| 162 | - console.log(hashlist); | |
| 163 | - $('#diffform input[name="a"][value="' + hashlist[0] + '"]').prop('checked', true); | |
| 164 | - $('#diffform input[name="b"][value="' + hashlist[1] + '"]').prop('checked', true); | |
| 165 | - $('#snippet-diff form').submit(); | |
| 166 | - $('#snippet-diff').show(); | |
| 167 | - } | |
| 168 | - } | |
| 169 | - | |
| 170 | - /* ------------------------------------------------------------------------ | |
| 171 | -Line Highlighting | |
| 172 | ------------------------------------------------------------------------- */ | |
| 173 | - if (curLine.substring(0, 2) === '#L') { | |
| 174 | - hashlist = curLine.substring(2).split(','); | |
| 175 | - if (hashlist.length > 0 && hashlist[0] !== '') { | |
| 176 | - $.each(hashlist, function(index, elem){ | |
| 177 | - $('.code li#' + elem).addClass('marked'); | |
| 178 | - }); | |
| 179 | - } | |
| 180 | - } | |
| 181 | - | |
| 182 | - $('.code li').click(function(event) { | |
| 183 | - var hash = 'L'; | |
| 184 | - | |
| 185 | - $(this).toggleClass("marked"); | |
| 186 | - | |
| 187 | - $('.code li.marked').each(function (index, elem) { | |
| 188 | - if (hash !== 'L') hash += ','; | |
| 189 | - hash += $(elem).attr('id'); | |
| 190 | - }); | |
| 191 | - | |
| 192 | - window.location.hash = hash; | |
| 193 | - | |
| 194 | - e.preventDefault(); | |
| 195 | - }); | |
| 196 | - | |
| 197 | - /* ------------------------------------------------------------------------ | |
| 198 | -Line Highlighting | |
| 199 | ------------------------------------------------------------------------- */ | |
| 200 | - $('#toggleWordwrap').click(function(e){ | |
| 201 | - e.preventDefault(); | |
| 202 | - $('.code').toggleClass('wordwrap'); | |
| 203 | - }); | |
| 204 | -}); | |
| 205 | -</script> | |
| 206 | -{% endblock %} | |
| 207 | -{% endblock %} |
colab/templates/dpaste/snippet_diff.html
| ... | ... | @@ -1,14 +0,0 @@ |
| 1 | -{% load i18n %} | |
| 2 | -{% load url from future %} | |
| 3 | - | |
| 4 | -<h4> | |
| 5 | - {% blocktrans with fileA.get_absolute_url as filea_url and fileB.get_absolute_url as fileb_url and fileA.id as filea_id and fileB.id as fileb_id %} | |
| 6 | - Diff between <a href="{{ filea_url }}">#{{ filea_id }}</a> and <a href="{{ fileb_url }}">#{{ fileb_id }}</a> | |
| 7 | - {% endblocktrans %} | |
| 8 | -</h4> | |
| 9 | - | |
| 10 | -{% if snippet.lexer == 'diff' %} | |
| 11 | - {% include "dpaste/snippet_pre.html" %} | |
| 12 | -{% else %} | |
| 13 | - <p>{{ snippet.content }}</p> | |
| 14 | -{% endif %} |
colab/templates/dpaste/snippet_form.html
| ... | ... | @@ -1,33 +0,0 @@ |
| 1 | -{% load i18n %} | |
| 2 | - | |
| 3 | -<form action="" method="post" class="form-horizontal"> | |
| 4 | - {% csrf_token %} | |
| 5 | - {{ snippet_form.non_field_errors }} | |
| 6 | - | |
| 7 | - <div class="form-group superenter {% if is_new %}autofocus{% endif %} {% if snippet_form.content.errors %}has-error{% endif %}"> | |
| 8 | - {{ snippet_form.content }} | |
| 9 | - </div> | |
| 10 | - | |
| 11 | - <div class="form-group"> | |
| 12 | - | |
| 13 | - <div class="pull-left {% if snippet_form.lexer.errors %}has-error{% endif %}"> | |
| 14 | - {{ snippet_form.lexer }} | |
| 15 | - </div> | |
| 16 | - | |
| 17 | - <div class="pull-right has-feedback"> | |
| 18 | - <div class="input-group"> | |
| 19 | - <span class="glyphicon glyphicon-trash input-group-addon"></span> | |
| 20 | - {{ snippet_form.expires }} | |
| 21 | - </div> | |
| 22 | - | |
| 23 | - </div> | |
| 24 | - </div> | |
| 25 | - | |
| 26 | - <div class="form-group"> | |
| 27 | - <div class="well"> | |
| 28 | - <input tabindex="0" type="submit" class="btn btn-primary" value="{% trans "Paste it" %}"> | |
| 29 | - <span class="shortcut">Ctrl+⏎ ou ⌘+⏎</span> | |
| 30 | - </div> | |
| 31 | - </div> | |
| 32 | - | |
| 33 | -</form> |
colab/templates/dpaste/snippet_new.html