From d018e9df2d0d01e066b784c687ad9cfdeb40f06d Mon Sep 17 00:00:00 2001 From: Kyle Drake Date: Tue, 13 Oct 2015 15:59:13 -0700 Subject: [PATCH] implement initial code for tutorial --- public/cat.png | Bin 0 -> 16793 bytes public/js/xregexp-min.js | 2 ++ views/tutorial/html/1.erb | 18 +++++++++++++----- views/tutorial/html/2.erb | 21 ++++++++++++++++++--- views/tutorial/html/3.erb | 25 ++++++++++++++++++++----- views/tutorial/html/4.erb | 19 +++++++++++++++---- views/tutorial/html/5.erb | 20 ++++++++++++++++---- views/tutorial/html/6.erb | 18 +++++++++++++++--- views/tutorial/html/7.erb | 16 ++++++++++++++-- views/tutorial/html/8.erb | 14 +++++++++++++- views/tutorial/layout.erb | 37 ++++++++++++++++++++++++++++++++++++- 11 files changed, 162 insertions(+), 28 deletions(-) create mode 100644 public/cat.png create mode 100644 public/js/xregexp-min.js diff --git a/public/cat.png b/public/cat.png new file mode 100644 index 0000000000000000000000000000000000000000..d4be8f2196d91a986c528a32cf918d588ea45eb1 GIT binary patch literal 16793 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
kp+VUhpk+a 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 MIT License +var XRegExp=function(a){"use strict";function u(a,d,e,f,g){var h;if(a[c]={captureNames:d},g)return a;if(a.__proto__)a.__proto__=b.prototype;else for(h in b.prototype)a[h]=b.prototype[h];return a[c].source=e,a[c].flags=f?f.split("").sort().join(""):f,a}function v(a){return e.replace.call(a,/([\s\S])(?=[\s\S]*\1)/g,"")}function w(d,f){if(!b.isRegExp(d))throw new TypeError("Type RegExp expected");var g=d[c]||{},h=y(d),i="",j="",k=null,l=null;return f=f||{},f.removeG&&(j+="g"),f.removeY&&(j+="y"),j&&(h=e.replace.call(h,new RegExp("["+j+"]+","g"),"")),f.addG&&(i+="g"),f.addY&&(i+="y"),i&&(h=v(h+i)),f.isInternalOnly||(g.source!==a&&(k=g.source),null!=g.flags&&(l=i?v(g.flags+i):g.flags)),d=u(new RegExp(d.source,h),z(d)?g.captureNames.slice(0):null,k,l,f.isInternalOnly)}function x(a){return parseInt(a,16)}function y(a){return q?a.flags:e.exec.call(/\/([a-z]*)$/i,RegExp.prototype.toString.call(a))[1]}function z(a){return!(!a[c]||!a[c].captureNames)}function A(a){return parseInt(a,10).toString(16)}function B(a,b){var d,c=a.length;for(d=0;c>d;++d)if(a[d]===b)return d;return-1}function C(a,b){return s.call(a)==="[object "+b+"]"}function D(a,b,c){return e.test.call(c.indexOf("x")>-1?/^(?:\s+|#.*|\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/:/^(?:\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/,a.slice(b))}function E(a){for(;a.length<4;)a="0"+a;return a}function F(a,b){var c;if(v(b)!==b)throw new SyntaxError("Invalid duplicate regex flag "+b);for(a=e.replace.call(a,/^\(\?([\w$]+)\)/,function(a,c){if(e.test.call(/[gy]/,c))throw new SyntaxError("Cannot use flag g or y in mode modifier "+a);return b=v(b+c),""}),c=0;c"}else if(c)return"\\"+(+c+i);return a};if(!C(a,"Array")||!a.length)throw new TypeError("Must provide a nonempty array of patterns to merge");for(m=0;m1&&B(f,"")>-1&&(h=w(this,{removeG:!0,isInternalOnly:!0}),e.replace.call(String(b).slice(f.index),h,function(){var c,b=arguments.length;for(c=1;b-2>c;++c)arguments[c]===a&&(f[c]=a)})),this[c]&&this[c].captureNames)for(i=1;if.index&&(this.lastIndex=f.index)}return this.global||(this.lastIndex=d),f},f.test=function(a){return!!f.exec.call(this,a)},f.match=function(a){var c;if(b.isRegExp(a)){if(a.global)return c=e.match.apply(this,arguments),a.lastIndex=0,c}else a=new RegExp(a);return f.exec.call(a,L(this))},f.replace=function(d,f){var h,i,j,g=b.isRegExp(d);return g?(d[c]&&(i=d[c].captureNames),h=d.lastIndex):d+="",j=C(f,"Function")?e.replace.call(String(this),d,function(){var c,b=arguments;if(i)for(b[0]=new String(b[0]),c=0;ce)throw new SyntaxError("Backreference to undefined group "+b);return a[e+1]||""}if("$"===d)return"$";if("&"===d||0===+d)return a[0];if("`"===d)return a[a.length-1].slice(0,a[a.length-2]);if("'"===d)return a[a.length-1].slice(a[a.length-2]+a[0].length);if(d=+d,!isNaN(d)){if(d>a.length-3)throw new SyntaxError("Backreference to undefined group "+b);return a[d]||""}throw new SyntaxError("Invalid token "+b)})}),g&&(d.global?d.lastIndex=0:d.lastIndex=h),j},f.split=function(c,d){if(!b.isRegExp(c))return e.split.apply(this,arguments);var j,f=String(this),g=[],h=c.lastIndex,i=0;return d=(d===a?-1:d)>>>0,b.forEach(f,c,function(a){a.index+a[0].length>i&&(g.push(f.slice(i,a.index)),a.length>1&&a.indexd?g.slice(0,d):g},t=b.addToken,t(/\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\dA-Fa-f]{4}|{[\dA-Fa-f]+})|x(?![\dA-Fa-f]{2}))/,function(a,b){if("B"===a[1]&&b===j)return a[0];throw new SyntaxError("Invalid escape "+a[0])},{scope:"all",leadChar:"\\"}),t(/\\u{([\dA-Fa-f]+)}/,function(a,b,c){var d=x(a[1]);if(d>1114111)throw new SyntaxError("Invalid Unicode code point "+a[0]);if(65535>=d)return"\\u"+E(A(d));if(o&&c.indexOf("u")>-1)return a[0];throw new SyntaxError("Cannot use Unicode code point above \\u{FFFF} without flag u")},{scope:"all",leadChar:"\\"}),t(/\[(\^?)]/,function(a){return a[1]?"[\\s\\S]":"\\b\\B"},{leadChar:"["}),t(/\(\?#[^)]*\)/,function(a,b,c){return D(a.input,a.index+a[0].length,c)?"":"(?:)"},{leadChar:"("}),t(/\s+|#.*/,function(a,b,c){return D(a.input,a.index+a[0].length,c)?"":"(?:)"},{flag:"x"}),t(/\./,function(){return"[\\s\\S]"},{flag:"s",leadChar:"."}),t(/\\k<([\w$]+)>/,function(a){var b=isNaN(a[1])?B(this.captureNames,a[1])+1:+a[1],c=a.index+a[0].length;if(!b||b>this.captureNames.length)throw new SyntaxError("Backreference to undefined group "+a[0]);return"\\"+b+(c===a.input.length||isNaN(a.input.charAt(c))?"":"(?:)")},{leadChar:"\\"}),t(/\\(\d+)/,function(a,b){if(!(b===j&&/^[1-9]/.test(a[1])&&+a[1]<=this.captureNames.length)&&"0"!==a[1])throw new SyntaxError("Cannot use octal escape or backreference to undefined group "+a[0]);return a[0]},{scope:"all",leadChar:"\\"}),t(/\(\?P?<([\w$]+)>/,function(a){if(!isNaN(a[1]))throw new SyntaxError("Cannot use integer as capture name "+a[0]);if("length"===a[1]||"__proto__"===a[1])throw new SyntaxError("Cannot use reserved word as capture name "+a[0]);if(B(this.captureNames,a[1])>-1)throw new SyntaxError("Cannot use same name for multiple groups "+a[0]);return this.captureNames.push(a[1]),this.hasNamedCapture=!0,"("},{leadChar:"("}),t(/\((?!\?)/,function(a,b,c){return c.indexOf("n")>-1?"(?:":(this.captureNames.push(null),"(")},{optionalFlags:"n",leadChar:"("}),b}(); \ No newline at end of file diff --git a/views/tutorial/html/1.erb b/views/tutorial/html/1.erb index 35f421ab..ed984d80 100644 --- a/views/tutorial/html/1.erb +++ b/views/tutorial/html/1.erb @@ -12,14 +12,22 @@ What's your name?
- - Submit + +
diff --git a/views/tutorial/html/2.erb b/views/tutorial/html/2.erb index c32fc741..f0b9ab3e 100644 --- a/views/tutorial/html/2.erb +++ b/views/tutorial/html/2.erb @@ -3,7 +3,7 @@

All you need to build your first site is a computer language called HTML.

HTML is made of tags - there's usually an opening tag and a closing tag, with content in between them.

- And here's some HTML, right in this box! Let's make a change. Replace Hello World with Victoria's Website, and click save! + And here's some HTML, right in this box! Let's make a change. Replace Hello World with The Website of , and click save!

You'll see the results here.

@@ -15,14 +15,29 @@

Welcome to HTML!

-

HTML stands for HyperText Markup Language. +

HTML stands for HyperText Markup Language. Hypertext refers to text that has links, and markup refers to the tags.

Don't worry if anything seems confusing - you'll get the hang of it once you try coding! If you ever get stuck, click the Help link below.

diff --git a/views/tutorial/html/3.erb b/views/tutorial/html/3.erb index f50093c0..c9a3ad87 100644 --- a/views/tutorial/html/3.erb +++ b/views/tutorial/html/3.erb @@ -1,14 +1,14 @@
- Great! - Check out your site at victoria.neocities.org. + Great! + Check out your site at victoria.neocities.org. You did it!
- But... hm... it needs a little something more. Let's make your name a heading by putting a Heading Level 1 tag around it. + But... hm... it needs a little something more. Let's make your name a heading by putting a Heading Level 1 tag around it.
- Change the text to this: [h1]Victoria's Website[/h1] + Change the text to this: and click save.
@@ -28,7 +28,22 @@
diff --git a/views/tutorial/html/4.erb b/views/tutorial/html/4.erb index e3f25b4d..e8c913ae 100644 --- a/views/tutorial/html/4.erb +++ b/views/tutorial/html/4.erb @@ -1,15 +1,26 @@
- Now let's add a paragraph of text below the heading. Perhaps "Welcome to my website" or your favorite quote. + Now let's add a paragraph of text below the heading (h1). Perhaps "Welcome to my website" or your favorite quote.
- To make a paragraph, surround your text with the [p] tag. So it should look something like - [p]Hello![/p] + To make a paragraph, surround your text with the <p> tag. So it should look something like + <p>Hello!<p>
diff --git a/views/tutorial/html/5.erb b/views/tutorial/html/5.erb index 8f6e4b87..427d02aa 100644 --- a/views/tutorial/html/5.erb +++ b/views/tutorial/html/5.erb @@ -5,9 +5,9 @@

For example, links look like this:

-

[a href="http://neocities.org"]Check out Neocities![/a]

- -

Add a link to your favorite site to the end of the paragraph, right before the [/p] closing tag!

+

<a href="http://neocities.org">Check out Neocities!</a>

+ +

Add a link to your favorite site to the end of the paragraph, right before the </p> closing tag!

@@ -26,6 +26,18 @@ But this isn't! diff --git a/views/tutorial/html/6.erb b/views/tutorial/html/6.erb index ac85d843..0b386182 100644 --- a/views/tutorial/html/6.erb +++ b/views/tutorial/html/6.erb @@ -3,10 +3,10 @@ Great job! You can see what you've done so far at victoria.neocities.org. Now let's try an image.
- Your Neocities web directory already includes a portrait of me called cat.png. + Your Neocities web directory already includes a portrait of me called cat.png.
- Add it to your page like so: [img src="cat.png"] + Add it to your page like so: <img src="/cat.png">
That's it! No closing tag needed for images. @@ -22,6 +22,18 @@ diff --git a/views/tutorial/html/7.erb b/views/tutorial/html/7.erb index 242ec6fb..b1fbf81e 100644 --- a/views/tutorial/html/7.erb +++ b/views/tutorial/html/7.erb @@ -8,7 +8,7 @@
- First, add a list to your page, but replace my favorite activities with your own! + First, add a list to your page, but replace my favorite activities with your own!
Second, put an h2 header above the list with some kind of title, like "Interests." @@ -27,6 +27,18 @@ diff --git a/views/tutorial/html/8.erb b/views/tutorial/html/8.erb index 9cf9dadd..e64dbb5f 100644 --- a/views/tutorial/html/8.erb +++ b/views/tutorial/html/8.erb @@ -22,6 +22,18 @@ diff --git a/views/tutorial/layout.erb b/views/tutorial/layout.erb index cccaa87e..ea130f55 100644 --- a/views/tutorial/layout.erb +++ b/views/tutorial/layout.erb @@ -1,14 +1,22 @@
+ <% if request.path =~ /\/html\/10?/ %> +
+ <% else %>
+ <% end %>

<%= @section.upcase %> Tutorial

Page <%= @page %>/10

<%== erb "tutorial/#{@section}/#{@page}".to_sym, layout: false %>
+ <% if request.path =~ /\/html\/10?/ %> + <% else %> +
+

HTML

Site Preview

-
+
+ + <% end %> +
@@ -35,4 +46,28 @@ window.location.href = '/tutorial/<%= @section %>/<%= @page.to_i+1 %>' } }) + + $('.tutorial #reset').on('click', function() { + var editor = $('#editor') + editor.val(editor.text()) + }) + + $('.tutorial textarea').on('keypress keyup', function() { + refreshIframe() + }) + + var tutorialHtml = sessionStorage.getItem('tutorialHtml') + if(tutorialHtml) + $('#editor').text(tutorialHtml) + + function refreshIframe() { + var editor = $('#editor') + $('.tutorial iframe').contents().find('html').html(editor.val()) + } + + $(function() { + refreshIframe() + }) + +