mirror of https://github.com/zulip/zulip.git
Clean up back end HTML templates.
The check-handlebars-templates script now looks at most of our back end templates to try and find imbalanced tags. This commit fixes a bunch of the existing templates. (imported from commit fad4a5d85d68160370dd588b41d6f125f64d198f)
This commit is contained in:
parent
197ddd6edb
commit
1c91d1a5bc
|
@ -1,7 +1,7 @@
|
|||
{{! Alert word in the settings page that can be removed }}
|
||||
<li class="alert-word-item" data-word='{{word}}'>
|
||||
{{#if editing}}
|
||||
<input class="edit-alert-word input-medium" type="text" placeholder="Alert Word"></input><button class="btn btn-mini add-alert-word" type="button">Add</button>
|
||||
<input class="edit-alert-word input-medium" type="text" placeholder="Alert Word"><button class="btn btn-mini add-alert-word" type="button">Add</button>
|
||||
{{else}}
|
||||
{{word}}<button class="btn btn-mini remove-alert-word" type="button"><i class="icon-vector-remove"></i></button>
|
||||
{{/if}}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
{% block portico_content %}
|
||||
|
||||
<br/>
|
||||
<p class="lead">404: Page not found.<p>
|
||||
<p class="lead">404: Page not found.</p>
|
||||
|
||||
<p>We know this is stressful, but we still love you.</p>
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
{% block portico_content %}
|
||||
|
||||
<br/>
|
||||
<p class="lead">500: Internal server error.<p>
|
||||
<p class="lead">500: Internal server error.</p>
|
||||
|
||||
<p>Well oops. This one's probably our fault. Sorry about that!</p>
|
||||
|
||||
|
|
|
@ -8,16 +8,16 @@
|
|||
<p>You're confirmed. We're not exactly sure what we confirmed you for, but whatever it is you're totally good.</p>
|
||||
{% else %}
|
||||
|
||||
<p class="lead">Whoops, something's not right. We couldn't find your confirmation ID!<p>
|
||||
<p class="lead">Whoops, something's not right. We couldn't find your confirmation ID!</p>
|
||||
|
||||
{% if enterprise % }
|
||||
<p>Make sure you copied the link correctly in to your browser.<p>
|
||||
<p>Make sure you copied the link correctly in to your browser.</p>
|
||||
|
||||
<p>If you're still having problems, please contact your Zulip administrator at <a
|
||||
href="mailto:{{ support_email }}">{{ support_email }}</a>.</p>
|
||||
{% else % }
|
||||
<p>Make sure you copied the link correctly in to your browser. If you're
|
||||
still encountering this page, its probably our fault. We're sorry.<p>
|
||||
still encountering this page, its probably our fault. We're sorry.</p>
|
||||
|
||||
<p>Anyway, shoot us a line at <a
|
||||
href="mailto:{{ support_email }}">{{ support_email }}</a> and we'll get
|
||||
|
|
|
@ -54,7 +54,7 @@
|
|||
<i class="icon-vector-user icon-vector-3x feature-icon"></i>
|
||||
<h4>@-notifications</h4>
|
||||
<p>Want someone's attention in a conversation? @-notify them
|
||||
and they'll be right over.
|
||||
and they'll be right over.</p>
|
||||
</div>
|
||||
<div class="feature-block">
|
||||
<i class="icon-vector-bullhorn icon-vector-3x feature-icon"></i>
|
||||
|
|
|
@ -58,9 +58,7 @@
|
|||
|
||||
<p>If you have any questions, please contact us using the "Send feedback"
|
||||
button in Zulip or e-mail us
|
||||
at <a href="mailto:support@zulip.com">support@zulip.com</a><p>
|
||||
at <a href="mailto:support@zulip.com">support@zulip.com</a></p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
id="name" name="name" placeholder="Wolfgang A. Mozart" /><span class="punc">,</span> and
|
||||
you can email me at <input class="input-large" type="email"
|
||||
id="email" name="email"
|
||||
placeholder="w.a.mozart@magicflute.com" /><span class="punc">.</span>
|
||||
placeholder="w.a.mozart@magicflute.com" /><span class="punc">.</span></p>
|
||||
|
||||
|
||||
<p>I work at <input class="input-large" type="text"
|
||||
|
@ -54,7 +54,7 @@
|
|||
about <input class="input-mini" type="text" id="count"
|
||||
name="count" placeholder="10" /> of us, and today we use
|
||||
<input class="input-medium" type="text" id="product"
|
||||
name="product" placeholder="IRC" /> to chat.</p></span>
|
||||
name="product" placeholder="IRC" /> to chat.</span></p>
|
||||
|
||||
<div class="signup-signature">
|
||||
<p>I'm looking forward to it!</p>
|
||||
|
|
|
@ -71,7 +71,4 @@ mirror script instead of using Webathena.</p>
|
|||
doing so will result in messages you sent being forwarded to
|
||||
Zephyr twice.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
|
||||
<h3>You're done!</h3>
|
||||
<p>If you have any questions, please contact us using the "Send feedback" button in Zulip or e-mail us at
|
||||
<a href="mailto:support@zulip.com">support@zulip.com</a><p>
|
||||
<a href="mailto:support@zulip.com">support@zulip.com</a></p>
|
||||
|
||||
<h3>If you want to automatically transfer your existing Zephyr subscriptions</h3>
|
||||
|
||||
|
@ -36,7 +36,7 @@
|
|||
home view that you less commonly read. You can still easily access those streams
|
||||
from Zulip when you want to read them. You can control your subscriptions
|
||||
and what's in your home view by clicking the gear in the upper right-hand corner
|
||||
and then selecting "Streams".</p>
|
||||
and then selecting "Streams".</p></li>
|
||||
</ol>
|
||||
|
||||
<h3>If you subscribe to any encrypted Zephyr classes</h3>
|
||||
|
@ -48,7 +48,4 @@
|
|||
</ol>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
{% block portico_content %}
|
||||
|
||||
<br/>
|
||||
<p class="lead">We couldn't validate your Google account<p>
|
||||
<p class="lead">We couldn't validate your Google account</p>
|
||||
|
||||
<p>You might want to <a href="{% url 'django_openid_auth.views.login_begin' %}">try logging in via Google again</a>
|
||||
or <a href="{% url 'django.contrib.auth.views.login' %}">log in with a username or password.</a></p>
|
||||
|
|
|
@ -20,7 +20,7 @@ Allow the user to accept the terms, creating an email record of that fact.
|
|||
<div class="control-group">
|
||||
<label for="id_email" class="control-label">Email</label>
|
||||
<div class="controls fakecontrol">
|
||||
<p>{{ email }}<p>
|
||||
<p>{{ email }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<div class="app portico-page">
|
||||
<div class="app-main portico-page-container">
|
||||
<h2>Thanks for signing up!</h2>
|
||||
<p class="lead">Check your email so we can get started.<p>
|
||||
<p class="lead">Check your email so we can get started.</p>
|
||||
|
||||
<p>Still no email? We can <a href="#" id="resend_email_link">resend it</a>.<br/>
|
||||
<small>(Just in case, take a look at your Spam folder.)</small></p>
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
|
||||
<p><em>Note: The latest versions of the Mac app require Mac OS
|
||||
X 10.7+. If you are running OS X 10.6 (Snow Leopard), please
|
||||
download <a href="https://zulip.com/dist/apps/mac/Zulip-0.3.8%20NoUpdate.dmg">this version</a> instead.</p></em>
|
||||
download <a href="https://zulip.com/dist/apps/mac/Zulip-0.3.8%20NoUpdate.dmg">this version</a> instead.</em></p>
|
||||
|
||||
<p style="text-align: center">
|
||||
{% if not_enterprise %}
|
||||
|
@ -89,10 +89,11 @@ sudo apt-get install zulip-desktop-sso
|
|||
<h3>Other</h3>
|
||||
{% if not_enterprise %}
|
||||
<p>We provide a <a href="https://zulip.com/dist/apps/linux/zulip-desktop_latest.bin.tar.gz">binary tarball</a> of the Zulip application, built for 64-bit systems.
|
||||
</p>
|
||||
{% else %}
|
||||
<p>We provide a <a href="https://zulip.com/dist/apps/sso/linux/zulip-desktop_latest.bin.tar.gz">binary tarball</a> of the Zulip application, built for 64-bit systems.
|
||||
</p>
|
||||
{% endif %}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="tab-pane" id="windows">
|
||||
|
|
|
@ -185,7 +185,7 @@
|
|||
<p>You will need your Basecamp account ID. You can find it as a sequence of numbers in the URL when you log in:</p>
|
||||
<img class="screenshot" src="/static/images/integrations/basecamp/001.png">
|
||||
<p>Edit the Basecamp and Zulip credentials in <code>integrations/basecamp/zulip_basecamp_config.py</code> using
|
||||
your favorite editor:
|
||||
your favorite editor:</p>
|
||||
|
||||
|
||||
<div class="codehilite">
|
||||
|
@ -210,7 +210,7 @@
|
|||
|
||||
<p><b>Congratulations! You're done!</b><br /> Whenever you create a new project,
|
||||
calendar event, comment, message, or more, you'll get a notification in your selected stream
|
||||
with the project or calendar as the topic.
|
||||
with the project or calendar as the topic.</p>
|
||||
<img class="screenshot" src="/static/images/integrations/basecamp/002.png">
|
||||
</div>
|
||||
|
||||
|
@ -792,9 +792,10 @@ following, to the stream <code>commits</code> with a subject that matches the re
|
|||
<ul>
|
||||
<li>Did you set up a post-build action for your project?</li>
|
||||
<li>Does the stream you picked (e.g. <code>jenkins</code>) already exist? If not, add yourself to it and try again.</li>
|
||||
<li>Are your access key and email address correct? Test them using <a href="/api">our curl API</a>.
|
||||
<li>Are your access key and email address correct? Test them using <a href="/api">our curl API</a>.</li>
|
||||
<li>Still stuck? Email <a href="mailto:support@zulip.com?subject=Jenkins">support@zulip.com</a>.</li>
|
||||
</ul>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="jira" class="integration-instructions">
|
||||
|
@ -872,6 +873,7 @@ following, to the stream <code>commits</code> with a subject that matches the re
|
|||
<p>In the Administrators page, navigate to <code>Plugins > Other > Script Listeners</code>. In the <code>Add Listener</code> section, click on
|
||||
the <code>Custom Listener</code> option. Select the events you wish the Zulip integration to fire for, and the projects you wish Zulip to be notified for.
|
||||
In the <code>Name of groovy class</code> field, enter <code>org.zulip.jira.ZulipListener</code>.
|
||||
</p>
|
||||
|
||||
<p>Click <code>Add Listener</code>, and JIRA will now notify your Zulip of changes to your issues!</p>
|
||||
|
||||
|
@ -911,6 +913,7 @@ key=NAGIOS_BOT_API_KEY
|
|||
GROUPS</code> section
|
||||
of <code>/etc/nagios3/conf.d/contacts.cfg</code>, doing
|
||||
something like:
|
||||
</p>
|
||||
|
||||
<div class="codehilite"><pre>define contactgroup{
|
||||
contactgroup_name admins
|
||||
|
@ -958,6 +961,7 @@ key=NAGIOS_BOT_API_KEY
|
|||
https://github.com/zulip/phabricator-to-zulip
|
||||
</a>
|
||||
to get it set up.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
|
|
@ -74,7 +74,7 @@ autofocus('#id_username');
|
|||
<div class="control-group">
|
||||
<label for="id_password" class="control-label">Password</label>
|
||||
<div class="controls">
|
||||
<input id="id_password" name="password" class="required" type="password">
|
||||
<input id="id_password" name="password" class="required" type="password" />
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
|
|
@ -166,7 +166,7 @@ opt-in consent for the sharing of any sensitive personal information.</p>
|
|||
</li>
|
||||
|
||||
<li>
|
||||
<p><strong>With domain administrators</strong>
|
||||
<p><strong>With domain administrators</strong></p>
|
||||
|
||||
<p>If your Zulip Account is managed for you by a domain administrator then
|
||||
your domain administrator and resellers who provide user support to your
|
||||
|
|
|
@ -33,7 +33,7 @@ Form is validated both client-side using jquery-validate (see signup.js) and ser
|
|||
<label for="id_email" class="control-label">Email</label>
|
||||
<div class="controls fakecontrol">
|
||||
<input type='hidden' name='key' value='{{ key }}' />
|
||||
<p>{{ email }}<p>
|
||||
<p>{{ email }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
|
|
|
@ -6,13 +6,19 @@ import subprocess
|
|||
class Record:
|
||||
pass
|
||||
|
||||
def validate(fn):
|
||||
def validate(fn, check_indent=True):
|
||||
text = open(fn).read()
|
||||
|
||||
state = Record()
|
||||
|
||||
def NoStartTag(end_tag):
|
||||
raise Exception('No start tag for %s' % end_tag)
|
||||
raise Exception('''
|
||||
No start tag
|
||||
fn: %s
|
||||
end tag:
|
||||
%s
|
||||
line %d, col %d
|
||||
''' % (fn, end_tag, state.line, state.col))
|
||||
|
||||
def start_tag_matcher(s):
|
||||
start_line = state.line
|
||||
|
@ -25,7 +31,7 @@ def validate(fn):
|
|||
problem = None
|
||||
if start_tag != end_tag[2:-1]:
|
||||
problem = 'Mismatched tag.'
|
||||
elif state.line > start_line + 1 and state.col != start_col:
|
||||
elif check_indent and state.line > start_line + 1 and state.col != start_col:
|
||||
problem = 'Bad indentation.'
|
||||
if problem:
|
||||
raise Exception('''
|
||||
|
@ -40,7 +46,7 @@ def validate(fn):
|
|||
''' % (fn, problem, s, start_line, start_col, end_tag, state.line, state.col))
|
||||
state.matcher = old_matcher
|
||||
state.depth -= 1
|
||||
return f
|
||||
state.matcher = f
|
||||
|
||||
state.depth = 0
|
||||
state.i = 0
|
||||
|
@ -71,24 +77,37 @@ def validate(fn):
|
|||
if s.startswith('</'):
|
||||
state.matcher(s)
|
||||
else:
|
||||
if not s.endswith('/>'):
|
||||
state.matcher = start_tag_matcher(s)
|
||||
tag = s[1:-1].split()[0]
|
||||
ignore = s.startswith('<!--') or s.endswith('/>') or tag in ['img', 'meta', 'br', 'input']
|
||||
if not ignore:
|
||||
start_tag_matcher(s)
|
||||
advance(len(s))
|
||||
continue
|
||||
advance(1)
|
||||
|
||||
assert state.depth == 0
|
||||
if state.depth != 0:
|
||||
return state.matcher("(NO TAG)")
|
||||
|
||||
git_files = map(str.strip, subprocess.check_output(['git', 'ls-files']).split('\n'))
|
||||
|
||||
# Check all our handlebars templates.
|
||||
templates = [fn for fn in git_files if fn.endswith('.handlebars')]
|
||||
assert len(templates) >= 10 # sanity check that we are actually doing work
|
||||
|
||||
# Django templates are pretty messy now, so we whitelist them for now.
|
||||
templates += [
|
||||
'templates/zerver/settings.html'
|
||||
]
|
||||
|
||||
for fn in templates:
|
||||
validate(fn)
|
||||
|
||||
# Django templates are pretty messy now, so we do minimal checking.
|
||||
templates = sorted([fn for fn in git_files if fn.endswith('.html') and 'templates' in fn])
|
||||
|
||||
def ok(fn):
|
||||
if 'api.html' in fn: return False
|
||||
if 'base.html' in fn: return False
|
||||
if 'emails/' in fn: return False
|
||||
return True
|
||||
|
||||
templates = filter(ok, templates)
|
||||
|
||||
|
||||
assert len(templates) >= 10 # sanity check that we are actually doing work
|
||||
for fn in templates:
|
||||
validate(fn, check_indent=False)
|
||||
|
|
Loading…
Reference in New Issue