From 380a7ce8c98a86fbed1b5af95726bad4cbebc9b8 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Fri, 30 Jan 2015 12:06:21 -0800 Subject: [PATCH] add ng-cloak to our ng-show alert messages to prevent them from showing while the page is loading --- views/account/account.jade | 56 ++++++++++---------- views/account/email-signup.jade | 14 ++--- views/bonfire/show.jade | 2 +- views/contact/done-with-first-100-hours.jade | 4 +- views/contact/nonprofits.jade | 6 +-- views/layout.jade | 2 +- 6 files changed, 42 insertions(+), 42 deletions(-) diff --git a/views/account/account.jade b/views/account/account.jade index 2612dfe818..a5bd9fc0a5 100644 --- a/views/account/account.jade +++ b/views/account/account.jade @@ -14,15 +14,15 @@ block content label.col-sm-3.col-sm-offset-2.control-label(for='name') Name * .col-sm-4 input.form-control(type='text', placeholder='Name', name='name', autocomplete="off", ng-model='user.profile.name', ng-minlength='3', ng-maxlength='50', required='required', id='name') - .col-sm-4.col-sm-offset-5(ng-show="profileForm.name.$invalid && profileForm.name.$error.required") + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show="profileForm.name.$invalid && profileForm.name.$error.required") alert(type='danger') span.ion-close-circled(id='#name-error') | Your name is required. - .col-sm-4.col-sm-offset-5(ng-show='profileForm.name.$error.minlength && !profileForm.name.$pristine') + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show='profileForm.name.$error.minlength && !profileForm.name.$pristine') alert(type='danger') span.ion-close-circled | Your name must be at least 3 characters. - .col-sm-4.col-sm-offset-5(ng-show='profileForm.name.$error.maxlength && !profileForm.name.$pristine') + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show='profileForm.name.$error.maxlength && !profileForm.name.$pristine') alert(type='danger') span.ion-close-circled | Your name must be fewer than 50 characters. @@ -31,23 +31,23 @@ block content label.col-sm-3.col-sm-offset-2.control-label(for='username') Username (path to public profile) * .col-sm-4 input.form-control(type='text', placeholder='username' name='username', autocomplete="off", id='username', ng-model='user.profile.username', required='required', ng-minlength='5', ng-maxlength='20', ng-keypress='', unique-username='', ng-pattern="/^[A-z0-9_]+$/") - .col-sm-4.col-sm-offset-5(ng-show="profileForm.username.$error.pattern") + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show="profileForm.username.$error.pattern") alert(type='danger') span.ion-close-circled | Your username should only contain letters, numbers and underscores (az10_). - .col-sm-4.col-sm-offset-5(ng-show="profileForm.username.$error.required") + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show="profileForm.username.$error.required") alert(type='danger') span.ion-close-circled | Your username is required. - .col-sm-4.col-sm-offset-5(ng-show="profileForm.username.$error.minlength && !profileForm.username.$pristine") + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show="profileForm.username.$error.minlength && !profileForm.username.$pristine") alert(type='danger') span.ion-close-circled | Your username must be at least 5 characters. - .col-sm-4.col-sm-offset-5(ng-show="profileForm.username.$error.maxlength && !profileForm.username.$pristine") + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show="profileForm.username.$error.maxlength && !profileForm.username.$pristine") alert(type='danger') span.ion-close-circled | Your username must be fewer than 15 characters. - .col-sm-4.col-sm-offset-5(ng-show="profileForm.username.$error.unique && !profileForm.username.$pristine && $scope.storedUsername !== user.profile.username") + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show="profileForm.username.$error.unique && !profileForm.username.$pristine && $scope.storedUsername !== user.profile.username") alert(type='danger') span.ion-close-circled | That username is already taken. @@ -56,15 +56,15 @@ block content label.col-sm-3.col-sm-offset-2.control-label(for='email') Email * .col-sm-4 input.form-control(type='email', name='email', id='email', autocomplete="off", ng-model='user.email', required='required', ng-keypress='', unique-email='') - .col-sm-4.col-sm-offset-5(ng-show="profileForm.email.$error.required") + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show="profileForm.email.$error.required") alert(type='danger') span.ion-close-circled | Your email address is required. - .col-sm-4.col-sm-offset-5(ng-show="profileForm.$error.email && !profileForm.email.$pristine") + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show="profileForm.$error.email && !profileForm.email.$pristine") alert(type='danger') span.ion-close-circled | Please enter a valid email format. - .col-sm-4.col-sm-offset-5(ng-show="profileForm.email.$error.unique && !profileForm.email.$pristine") + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show="profileForm.email.$error.unique && !profileForm.email.$pristine") alert(type='danger') span.ion-close-circled | That email is already taken. @@ -78,7 +78,7 @@ block content label.col-sm-3.col-sm-offset-2.control-label(for='email') Link to Profile Photo (1:1 ratio) .col-sm-4 input.form-control(type='url', name='picture', id='picture', ng-model='user.profile.picture', placeholder='http://') - .col-sm-4.col-sm-offset-5(ng-show="profileForm.picture.$error.url && !profileForm.picture.$pristine") + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show="profileForm.picture.$error.url && !profileForm.picture.$pristine") alert(type='danger') span.ion-close-circled | Please enter a valid URL format (http://www.example.com). @@ -87,7 +87,7 @@ block content label.col-sm-3.col-sm-offset-2.control-label(for='bio') Bio (140 characters) .col-sm-4 input.form-control(type='text', name='bio', autocomplete="off", ng-model='user.profile.bio', ng-maxlength='140', id='bio') - .col-sm-4.col-sm-offset-5(ng-show='profileForm.bio.$error.maxlength && !profileForm.bio.$pristine') + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show='profileForm.bio.$error.maxlength && !profileForm.bio.$pristine') alert(type='danger') span.ion-close-circled | Your bio must be fewer than 140 characters. @@ -107,11 +107,11 @@ block content .input-group.twitter-input span.input-group-addon @ input.form-control(type='text', name='twitterHandle', autocomplete="off", id='twitterHandle', ng-model='user.profile.twitterHandle', ng-maxlength='15', ng-pattern="/^[A-z0-9_]+$/") - .col-sm-4.col-sm-offset-5(ng-show="profileForm.twitterHandle.$error.pattern") + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show="profileForm.twitterHandle.$error.pattern") alert(type='danger') span.ion-close-circled | Your Twitter handle should only contain letters, numbers and underscores (az10_). - .col-sm-4.col-sm-offset-5(ng-show='profileForm.twitterHandle.$error.maxlength && !profileForm.twitterHandle.$pristine') + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show='profileForm.twitterHandle.$error.maxlength && !profileForm.twitterHandle.$pristine') alert(type='danger') span.ion-close-circled | Your name must be fewer than 15 characters. @@ -119,7 +119,7 @@ block content label.col-sm-3.col-sm-offset-2.control-label(for='email') Github .col-sm-4 input.form-control(type='url', name='githubProfile', id='githubProfile', autocomplete="off", ng-model='user.profile.githubProfile', placeholder='http://') - .col-sm-4.col-sm-offset-5(ng-show="profileForm.githubProfile.$error.url && !profileForm.githubProfile.$pristine") + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show="profileForm.githubProfile.$error.url && !profileForm.githubProfile.$pristine") alert(type='danger') span.ion-close-circled | Please enter a valid URL format (http://www.example.com). @@ -128,7 +128,7 @@ block content label.col-sm-3.col-sm-offset-2.control-label(for='email') CodePen .col-sm-4 input.form-control(type='url', name='codepenProfile', id='codepenProfile', autocomplete="off", ng-model='user.profile.codepenProfile', placeholder='http://') - .col-sm-4.col-sm-offset-5(ng-show="profileForm.codepenProfile.$error.url && !profileForm.codepenProfile.$pristine") + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show="profileForm.codepenProfile.$error.url && !profileForm.codepenProfile.$pristine") alert(type='danger') span.ion-close-circled | Please enter a valid URL format (http://www.example.com). @@ -137,7 +137,7 @@ block content label.col-sm-3.col-sm-offset-2.control-label(for='email') CoderByte .col-sm-4 input.form-control(type='url', name='coderbyteProfile', id='coderbyteProfile', autocomplete="off", ng-model='user.profile.coderbyteProfile', placeholder='http://') - .col-sm-4.col-sm-offset-5(ng-show="profileForm.coderbyteProfile.$error.url && !profileForm.coderbyteProfile.$pristine") + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show="profileForm.coderbyteProfile.$error.url && !profileForm.coderbyteProfile.$pristine") alert(type='danger') span.ion-close-circled | Please enter a valid URL format (http://www.example.com). @@ -146,7 +146,7 @@ block content label.col-sm-3.col-sm-offset-2.control-label(for='email') LinkedIn .col-sm-4 input.form-control(type='url', name='linkedinProfile', id='linkedinProfile', autocomplete="off", ng-model='user.profile.linkedinProfile', placeholder='http://') - .col-sm-4.col-sm-offset-5(ng-show="profileForm.linkedinProfile.$error.url && !profileForm.linkedinProfile.$pristine") + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show="profileForm.linkedinProfile.$error.url && !profileForm.linkedinProfile.$pristine") alert(type='danger') span.ion-close-circled | Please enter a valid URL format (http://www.example.com). @@ -167,7 +167,7 @@ block content label.col-sm-3.col-sm-offset-2.control-label(for='website1Title') Title .col-sm-4 input.form-control(type='text', name='website1Title', id='website1Title', autocomplete="off", ng-model='user.portfolio.website1Title', ng-maxlength='140') - .col-sm-4.col-sm-offset-5(ng-show="profileForm.website1Title.$error.maxlength && !profileForm.website1Title.$pristine") + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show="profileForm.website1Title.$error.maxlength && !profileForm.website1Title.$pristine") alert(type='danger') span.ion-close-circled | Portfolio project title must be fewer than 140 characters. @@ -176,7 +176,7 @@ block content label.col-sm-3.col-sm-offset-2.control-label(for='website1Link') Link .col-sm-4 input.form-control(type='url', name='website1Link', id='website1Link', autocomplete="off", ng-model='user.portfolio.website1Link', placeholder='http://') - .col-sm-4.col-sm-offset-5(ng-show="profileForm.website1Link.$error.url && !profileForm.website1Link.$pristine") + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show="profileForm.website1Link.$error.url && !profileForm.website1Link.$pristine") alert(type='danger') span.ion-close-circled | Please enter a valid URL format (http://www.example.com). @@ -185,7 +185,7 @@ block content label.col-sm-3.col-sm-offset-2.control-label(for='website1Image') Image Link (4:3 ratio) .col-sm-4 input.form-control(type='url', name='website1Image', id='website1Image', autocomplete="off", ng-model='user.portfolio.website1Image', placeholder='http://') - .col-sm-4.col-sm-offset-5(ng-show="profileForm.website1Image.$error.url && !profileForm.website1Image.$pristine") + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show="profileForm.website1Image.$error.url && !profileForm.website1Image.$pristine") alert(type='danger') span.ion-close-circled | Please enter a valid URL format (http://www.example.com). @@ -197,7 +197,7 @@ block content label.col-sm-3.col-sm-offset-2.control-label(for='website2Title') Title .col-sm-4 input.form-control(type='text', name='website2Title', id='website2Title', autocomplete="off", ng-model='user.portfolio.website2Title', ng-maxlength='140') - .col-sm-4.col-sm-offset-5(ng-show="profileForm.website2Title.$error.maxlength && !profileForm.website2Title.$pristine") + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show="profileForm.website2Title.$error.maxlength && !profileForm.website2Title.$pristine") alert(type='danger') span.ion-close-circled | Portfolio project title must be fewer than 140 characters. @@ -206,7 +206,7 @@ block content label.col-sm-3.col-sm-offset-2.control-label(for='website2Link') Link .col-sm-4 input.form-control(type='url', name='website2Link', id='website2Link', autocomplete="off", ng-model='user.portfolio.website2Link', placeholder='http://') - .col-sm-4.col-sm-offset-5(ng-show="profileForm.website2Link.$error.url && !profileForm.website2Link.$pristine") + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show="profileForm.website2Link.$error.url && !profileForm.website2Link.$pristine") alert(type='danger') span.ion-close-circled | Please enter a valid URL format (http://www.example.com). @@ -214,7 +214,7 @@ block content label.col-sm-3.col-sm-offset-2.control-label(for='website2Image') Image Link (4:3 ratio) .col-sm-4 input.form-control(type='url', name='website2Image', id='website2Image', autocomplete="off", ng-model='user.portfolio.website2Image', placeholder='http://') - .col-sm-4.col-sm-offset-5(ng-show="profileForm.website2Image.$error.url && !profileForm.website2Image.$pristine") + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show="profileForm.website2Image.$error.url && !profileForm.website2Image.$pristine") alert(type='danger') span.ion-close-circled | Please enter a valid URL format (http://www.example.com). @@ -226,7 +226,7 @@ block content label.col-sm-3.col-sm-offset-2.control-label(for='website3Title') Title .col-sm-4 input.form-control(type='text', name='website3Title', id='website3Title', autocomplete="off", ng-model='user.portfolio.website3Title', ng-maxlength='140') - .col-sm-4.col-sm-offset-5(ng-show="profileForm.website3Title.$error.maxlength && !profileForm.website3Title.$pristine") + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show="profileForm.website3Title.$error.maxlength && !profileForm.website3Title.$pristine") alert(type='danger') span.ion-close-circled | Portfolio project title must be fewer than 140 characters. @@ -235,7 +235,7 @@ block content label.col-sm-3.col-sm-offset-2.control-label(for='website3Link') Link .col-sm-4 input.form-control(type='url', name='website3Link', id='website3Link', autocomplete="off", ng-model='user.portfolio.website3Link', placeholder='http://') - .col-sm-4.col-sm-offset-5(ng-show="profileForm.website3Link.$error.url && !profileForm.website3Link.$pristine") + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show="profileForm.website3Link.$error.url && !profileForm.website3Link.$pristine") alert(type='danger') span.ion-close-circled | Please enter a valid URL format (http://www.example.com). @@ -244,7 +244,7 @@ block content label.col-sm-3.col-sm-offset-2.control-label(for='website3Image') Image Link (4:3 ratio) .col-sm-4 input.form-control(type='url', name='website3Image', id='website3Image', autocomplete="off", ng-model='user.portfolio.website3Image', placeholder='http://') - .col-sm-4.col-sm-offset-5(ng-show="profileForm.website3Image.$error.url && !profileForm.website3Image.$pristine") + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show="profileForm.website3Image.$error.url && !profileForm.website3Image.$pristine") alert(type='danger') span.ion-close-circled | Please enter a valid URL format (http://www.example.com). diff --git a/views/account/email-signup.jade b/views/account/email-signup.jade index 826af1f806..67a36fdf52 100644 --- a/views/account/email-signup.jade +++ b/views/account/email-signup.jade @@ -7,40 +7,40 @@ block content .form-group .col-sm-6.col-sm-offset-3 input.form-control(type='email', ng-model='email', ng-keypress='', name='email', id='email', placeholder='email', autofocus, required, autocomplete="off", unique-email='') - .col-sm-6.col-sm-offset-3(ng-show="signupForm.email.$error.unique && !signupForm.email.$pristine") + .col-sm-6.col-sm-offset-3(ng-cloak, ng-show="signupForm.email.$error.unique && !signupForm.email.$pristine") alert(type='danger') span.ion-close-circled | This email is taken. .form-group .col-sm-6.col-sm-offset-3 input.form-control(type='text', name='username', ng-keypress='', autocomplete="off", id='username', placeholder='username', ng-model='username', unique-username='', required, ng-minlength=5, ng-maxlength=20, ng-pattern="/^[A-z0-9_]+$/") - .col-sm-4.col-sm-offset-5(ng-show="profileForm.username.$error.pattern && !signupForm.username.$pristine") + .col-sm-4.col-sm-offset-5(ng-cloak, ng-show="profileForm.username.$error.pattern && !signupForm.username.$pristine") alert(type='danger') span.ion-close-circled | Your username should only contain letters, numbers and underscores (az10_). - .col-sm-6.col-sm-offset-3(ng-show="signupForm.username.$error.unique && !signupForm.username.$pristine") + .col-sm-6.col-sm-offset-3(ng-cloak, ng-show="signupForm.username.$error.unique && !signupForm.username.$pristine") alert(type='danger') span.ion-close-circled | This username is taken. - .col-sm-6.col-sm-offset-3(ng-show="signupForm.username.$error.minlength && !signupForm.username.$pristine") + .col-sm-6.col-sm-offset-3(ng-cloak, ng-show="signupForm.username.$error.minlength && !signupForm.username.$pristine") alert(type='danger') span.ion-close-circled | Your username must be at least 5 characters long. - .col-sm-6.col-sm-offset-3(ng-show="signupForm.username.$error.maxlength && !signupForm.username.$pristine") + .col-sm-6.col-sm-offset-3(ng-cloak, ng-show="signupForm.username.$error.maxlength && !signupForm.username.$pristine") alert(type='danger') span.ion-close-circled | Your usernames must be 20 characters or fewer. .form-group .col-sm-6.col-sm-offset-3 input.form-control(type='password', ng-model='password', name='password', id='password', placeholder='password', required, ng-minlength=5) - .col-sm-6.col-sm-offset-3(ng-show="signupForm.password.$error.minlength && !signupForm.password.$pristine") + .col-sm-6.col-sm-offset-3(ng-cloak, ng-show="signupForm.password.$error.minlength && !signupForm.password.$pristine") alert(type='danger') span.ion-close-circled | Your password must be at least 8 characters long. .form-group .col-sm-6.col-sm-offset-3 input.form-control(type='password', ng-model='confirmPassword', name='confirmPassword', id='confirmPassword', placeholder='confirm password', required, ng-minlength=5) - .col-sm-6.col-sm-offset-3(ng-show="(confirmPassword !== password) && !signupForm.confirmPassword.$pristine") + .col-sm-6.col-sm-offset-3(ng-cloak, ng-show="(confirmPassword !== password) && !signupForm.confirmPassword.$pristine") alert(type='danger') span.ion-close-circled | Passwords must match. diff --git a/views/bonfire/show.jade b/views/bonfire/show.jade index 1c33faa304..4732bb15b6 100644 --- a/views/bonfire/show.jade +++ b/views/bonfire/show.jade @@ -116,7 +116,7 @@ block content // extra field to distract password tools like lastpass from injecting css into our username field input.form-control(ng-show="false") input.form-control#completed-with(name="existingUser", placeholder="If you paired, enter your pair's username here", existing-username='', ng-model="existingUser", autofocus) - .col-xs-10.col-xs-offset-1.col-sm-8.col-sm-offset-2.col-md-8.col-md-offset-2(ng-show="completedWithForm.$error.exists && !completedWithForm.existingUser.$pristine && existingUser.length > 0") + .col-xs-10.col-xs-offset-1.col-sm-8.col-sm-offset-2.col-md-8.col-md-offset-2(ng-cloak, ng-show="completedWithForm.$error.exists && !completedWithForm.existingUser.$pristine && existingUser.length > 0") alert(type='danger') span.ion-close-circled | Username not found diff --git a/views/contact/done-with-first-100-hours.jade b/views/contact/done-with-first-100-hours.jade index 82406a6fee..070af7a11e 100644 --- a/views/contact/done-with-first-100-hours.jade +++ b/views/contact/done-with-first-100-hours.jade @@ -14,11 +14,11 @@ block content label(class='col-sm-3 control-label', for='email') Your email * .col-sm-8 input.form-control(type='text', name='email', id='email', autocomplete="off", ng-model='email', required='required', ng-keypress='') - .col-sm-8.col-sm-offset-3(ng-show="doneWithFirst100HoursForm.$error.email && !doneWithFirst100HoursForm.email.$pristine") + .col-sm-8.col-sm-offset-3(ng-cloak, ng-show="doneWithFirst100HoursForm.$error.email && !doneWithFirst100HoursForm.email.$pristine") alert(type='danger') span.ion-close-circled | Please enter a valid email format. - .col-sm-8.col-sm-offset-3(ng-show="doneWithFirst100HoursForm.email.$invalid && doneWithFirst100HoursForm.email.$error.required && !doneWithFirst100HoursForm.email.$pristine") + .col-sm-8.col-sm-offset-3(ng-cloak, ng-show="doneWithFirst100HoursForm.email.$invalid && doneWithFirst100HoursForm.email.$error.required && !doneWithFirst100HoursForm.email.$pristine") alert(type='danger') span.ion-close-circled(id='#email-error'). Your email is required. diff --git a/views/contact/nonprofits.jade b/views/contact/nonprofits.jade index 689d03f785..7df7fe5ae5 100644 --- a/views/contact/nonprofits.jade +++ b/views/contact/nonprofits.jade @@ -20,7 +20,7 @@ block content label(class='col-sm-2 control-label', for='name') Your name * .col-sm-8 input.form-control(type='text', name='name', id='name', autocomplete="off", ng-model='name', required='required') - .col-sm-8.col-sm-offset-2(ng-show="nonprofitForm.name.$invalid && nonprofitForm.name.$error.required && !nonprofitForm.name.$pristine") + .col-sm-8.col-sm-offset-2(ng-cloak, ng-show="nonprofitForm.name.$invalid && nonprofitForm.name.$error.required && !nonprofitForm.name.$pristine") alert(type='danger') span.ion-close-circled(id='#name-error') | Your name is required. @@ -28,7 +28,7 @@ block content label(class='col-sm-2 control-label', for='email') Your email * .col-sm-8 input.form-control(type='text', name='email', id='email', autocomplete="off", ng-model='email', required='required') - .col-sm-8.col-sm-offset-2(ng-show="nonprofitForm.email.$invalid && nonprofitForm.email.$error.required && !nonprofitForm.email.$pristine") + .col-sm-8.col-sm-offset-2(ng-cloak, ng-show="nonprofitForm.email.$invalid && nonprofitForm.email.$error.required && !nonprofitForm.email.$pristine") alert(type='danger') span.ion-close-circled(id='#email-error'). Your email is required. @@ -36,7 +36,7 @@ block content label(class='col-sm-2 control-label', for='message') Briefly describe what problem you need to solve, and for whom. * .col-sm-8 textarea.form-control(type='text', name='message', id='message', rows='7', autocomplete="off", ng-model='message', required='required') - .col-sm-8.col-sm-offset-2(ng-show="nonprofitForm.message.$invalid && nonprofitForm.message.$error.required && !nonprofitForm.message.$pristine") + .col-sm-8.col-sm-offset-2(ng-cloak, ng-show="nonprofitForm.message.$invalid && nonprofitForm.message.$error.required && !nonprofitForm.message.$pristine") alert(type='danger') span.ion-close-circled(id='#message-error') | Your message is required. diff --git a/views/layout.jade b/views/layout.jade index dfddef33b4..1d9332ec8c 100644 --- a/views/layout.jade +++ b/views/layout.jade @@ -2,7 +2,7 @@ doctype html html(ng-app='profileValidation', lang='en') head script(src="//ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js") - script(src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.8/angular.min.js") + script(src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js") script(src="//cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.12.0/ui-bootstrap-tpls.min.js") link(rel='shortcut icon', href='//s3.amazonaws.com/freecodecamp/favicon.ico') link(rel='stylesheet', href='//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css')