mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	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:
		@@ -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)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user