learn_duplicate 0.0.15 → 0.0.20
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/learn_duplicate +38 -21
- data/lib/learn_duplicate.rb +60 -51
- metadata +3 -37
- data/lib/templates/javascript_lab_template/CONTRIBUTING.md +0 -40
- data/lib/templates/javascript_lab_template/LICENSE.md +0 -23
- data/lib/templates/javascript_lab_template/README.md +0 -16
- data/lib/templates/javascript_lab_template/index.html +0 -12
- data/lib/templates/javascript_lab_template/index.js +0 -5
- data/lib/templates/javascript_lab_template/package-lock.json +0 -1854
- data/lib/templates/javascript_lab_template/package.json +0 -21
- data/lib/templates/javascript_lab_template/test/helpers.js +0 -20
- data/lib/templates/javascript_lab_template/test/indexTest.js +0 -23
- data/lib/templates/react-lab-template/README.md +0 -16
- data/lib/templates/react-lab-template/package-lock.json +0 -12333
- data/lib/templates/react-lab-template/package.json +0 -38
- data/lib/templates/react-lab-template/public/index.html +0 -41
- data/lib/templates/react-lab-template/public/manifest.json +0 -13
- data/lib/templates/react-lab-template/src/App.css +0 -5
- data/lib/templates/react-lab-template/src/App.js +0 -18
- data/lib/templates/react-lab-template/src/components/Button.js +0 -19
- data/lib/templates/react-lab-template/src/components/ExampleComponent.js +0 -15
- data/lib/templates/react-lab-template/src/components/Greeting.js +0 -15
- data/lib/templates/react-lab-template/src/index.js +0 -8
- data/lib/templates/react-lab-template/test/index.test.js +0 -64
- data/lib/templates/react-lab-template/test/mocha.opts +0 -4
- data/lib/templates/readme_template/CONTRIBUTING.md +0 -40
- data/lib/templates/readme_template/LICENSE.md +0 -23
- data/lib/templates/readme_template/README.md +0 -16
- data/lib/templates/ruby_lab_template/CONTRIBUTING.md +0 -40
- data/lib/templates/ruby_lab_template/Gemfile +0 -4
- data/lib/templates/ruby_lab_template/Gemfile.lock +0 -32
- data/lib/templates/ruby_lab_template/LICENSE.md +0 -23
- data/lib/templates/ruby_lab_template/README.md +0 -16
- data/lib/templates/ruby_lab_template/lib/example.rb +0 -13
- data/lib/templates/ruby_lab_template/spec/example_spec.rb +0 -37
- data/lib/templates/ruby_lab_template/spec/spec_helper.rb +0 -65
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: de4ad83a7cc673eb3aace9f6377a25447ab2c6fe92bdda14e59eb3a7d252ba4c
|
4
|
+
data.tar.gz: 73615dd4f8d998c355210867a347f58ba15093591b354172111329df7b8cab66
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1111b280c4623e3f2fa16f5b7d7cad8401aa9ee90b1ed4cf5843ea52e1bd5dd95e321df45b4b693fbcc634098d3066403102aad55335b550d06a627cf9c5dd5f
|
7
|
+
data.tar.gz: 4f7bbabe358898532586e8a531af80ef44777618cf50496dc32c2407c419c1f95845d2d328dd141c6191fcdb2ea1cd2199f9d3489e00268307a395fadf94a0f8
|
data/bin/learn_duplicate
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
require 'optparse'
|
4
5
|
require 'learn_duplicate'
|
@@ -52,43 +53,59 @@ OptionParser.new do |opts|
|
|
52
53
|
|
53
54
|
EOBANNER
|
54
55
|
|
55
|
-
opts.on(
|
56
|
-
opts.on(
|
57
|
-
opts.on(
|
58
|
-
|
59
|
-
|
56
|
+
opts.on('-s', '--script', 'Run in non-interactive mode') { |_v| options[:ni] = true }
|
57
|
+
opts.on('-v', '--verbose', 'Run in verbose mode') { |_v| options[:verbose] = true }
|
58
|
+
opts.on('--trimprefix OLD_PREFIX', 'Prefix to remove from <source>; implies --script') do |t|
|
59
|
+
options[:trimprefix] = t
|
60
|
+
end
|
61
|
+
opts.on('--newprefix NEW_PREFIX', 'Prefix to prepent to new destination repo name; implies --script') do |n|
|
62
|
+
options[:newprefix] = n
|
63
|
+
end
|
64
|
+
opts.on('--rename NEW_BASE', 'Prefix to rename repository; changes text after prefix; implies --script') do |r|
|
65
|
+
options[:rename] = r
|
66
|
+
end
|
67
|
+
opts.on('-d', '--dry-run', 'Do not actually make calls, print info out') { options[:dryrun] = true }
|
60
68
|
end.parse!
|
61
69
|
|
62
70
|
# Prefixes imply non-interactivity
|
63
|
-
options[:ni] = !!(options[:trimprefix] || options[:newprefix])
|
71
|
+
options[:ni] = !!(options[:trimprefix] || options[:newprefix] || options[:rename])
|
64
72
|
|
65
73
|
REPO_SOURCE = ARGV[0]
|
66
74
|
VERBOSE_FLAG = options[:verbose]
|
67
75
|
|
68
76
|
if options[:ni]
|
69
|
-
source_name = REPO_SOURCE.split('/').last.sub(/^(.*).*$/,
|
70
|
-
|
71
|
-
|
77
|
+
source_name = REPO_SOURCE.split('/').last.sub(/^(.*).*$/, '\\1')
|
78
|
+
|
79
|
+
if options[:trimprefix] && !options[:rename]
|
80
|
+
if source_name.index(options[:trimprefix]) == 0
|
81
|
+
puts 'Trim prefix is valid ' if VERBOSE_FLAG
|
82
|
+
else
|
83
|
+
raise ArgumentError, 'The --trimprefix is not left-anchored on the <source>'
|
84
|
+
end
|
85
|
+
|
86
|
+
if options[:trimprefix] && !options[:newprefix]
|
87
|
+
raise ArgumentError, 'If you have trimprefix you want newprefix as well'
|
88
|
+
end
|
89
|
+
|
90
|
+
trimmed_base = source_name.slice(options[:trimprefix].length..source_name.length)
|
91
|
+
elsif options[:rename]
|
92
|
+
puts 'Renaming base to ' + options[:rename] if VERBOSE_FLAG
|
93
|
+
trimmed_base = options[:rename]
|
72
94
|
else
|
73
|
-
|
95
|
+
puts 'Repository name will be the same as the original repo unless a new prefix is included' if VERBOSE_FLAG
|
96
|
+
trimmed_base = source_name
|
74
97
|
end
|
75
98
|
|
76
|
-
unless (options[:trimprefix] && options[:newprefix])
|
77
|
-
raise ArgumentError, "If you have trimprefix you want newprefix as well"
|
78
|
-
end
|
79
|
-
|
80
|
-
trimmed_base = source_name.slice(options[:trimprefix].length..source_name.length)
|
81
99
|
destination = String(options[:newprefix]) + trimmed_base
|
82
100
|
|
83
101
|
puts "Trimmed base: #{trimmed_base}" if VERBOSE_FLAG
|
84
102
|
puts "Destination: #{destination}" if VERBOSE_FLAG
|
85
103
|
|
86
|
-
LearnDuplicate.new(options.merge(
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
104
|
+
LearnDuplicate.new(options.merge(
|
105
|
+
source_name: source_name,
|
106
|
+
base: trimmed_base.downcase,
|
107
|
+
destination: destination.downcase
|
108
|
+
))
|
91
109
|
else
|
92
110
|
LearnDuplicate.new
|
93
111
|
end
|
94
|
-
|
data/lib/learn_duplicate.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'faraday'
|
2
4
|
require 'uri'
|
3
5
|
require 'open3'
|
@@ -5,21 +7,23 @@ require 'open3'
|
|
5
7
|
class LearnDuplicate
|
6
8
|
GITHUB_ORG = 'https://api.github.com/repos/learn-co-curriculum/'
|
7
9
|
|
8
|
-
def initialize(opts={})
|
10
|
+
def initialize(opts = {})
|
9
11
|
# For non-interactive mode
|
12
|
+
|
10
13
|
if opts[:ni]
|
11
|
-
validate_repo =
|
14
|
+
validate_repo = lambda do |repo_name|
|
12
15
|
url = GITHUB_ORG + repo_name
|
13
16
|
encoded_url = URI.encode(url).slice(0, url.length)
|
14
17
|
check_existing = Faraday.get URI.parse(encoded_url)
|
15
18
|
if check_existing.body.include? '"Not Found"'
|
16
19
|
raise IOError, "Could not connect to #{url}"
|
17
20
|
end
|
21
|
+
|
18
22
|
repo_name
|
19
23
|
end
|
20
24
|
|
21
|
-
de_apiify_url =
|
22
|
-
api_url.gsub(
|
25
|
+
de_apiify_url = lambda do |api_url|
|
26
|
+
api_url.gsub(%r{(api\.|repos/)}, '')
|
23
27
|
end
|
24
28
|
|
25
29
|
@old_repo = validate_repo.call(opts[:source_name])
|
@@ -30,76 +34,75 @@ class LearnDuplicate
|
|
30
34
|
|
31
35
|
@repo_name = opts[:destination]
|
32
36
|
|
33
|
-
if
|
37
|
+
if !opts[:dryrun]
|
34
38
|
begin
|
35
39
|
create_new_repo
|
36
40
|
puts ''
|
37
41
|
puts 'To access local folder, change directory into ' + @repo_name + '/'
|
38
42
|
puts "Repository available at #{de_apiify_url.call(GITHUB_ORG + @repo_name)}"
|
39
|
-
rescue => e
|
40
|
-
|
43
|
+
rescue StandardError => e
|
44
|
+
warn(e.message)
|
41
45
|
end
|
42
46
|
else
|
43
47
|
puts "DRY RUN: Would execute copy of: #{de_apiify_url.call(@old_repo)} to #{@repo_name}"
|
44
48
|
end
|
45
49
|
|
46
50
|
exit
|
47
|
-
end
|
48
|
-
|
49
|
-
@repo_name = ''
|
50
|
-
@old_repo = ''
|
51
51
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
puts 'What is the name of the repository you would like to copy? Paste exactly as is shown in the URL (i.e. advanced-hashes-hashketball)'
|
56
|
-
@old_repo = gets.strip
|
57
|
-
|
58
|
-
url = GITHUB_ORG + @old_repo
|
59
|
-
encoded_url = URI.encode(url).slice(0, url.length)
|
60
|
-
check_existing = Faraday.get URI.parse(encoded_url)
|
52
|
+
else
|
53
|
+
@repo_name = ''
|
54
|
+
@old_repo = ''
|
61
55
|
|
62
|
-
|
63
|
-
if check_existing.body.include? '"Not Found"'
|
64
|
-
puts 'Provided repository name is not a valid learn-co-curriculum repository. Please try again.'
|
65
|
-
else
|
66
|
-
break
|
67
|
-
end
|
68
|
-
end
|
56
|
+
puts 'Note: You must have write access to the learn-co-curriculum org on GitHub to use this tool'
|
69
57
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
puts 'What is the name of the repository you would like to create?'
|
58
|
+
loop do
|
59
|
+
puts 'What is the name of the repository you would like to copy? Paste exactly as is shown in the URL (i.e. advanced-hashes-hashketball)'
|
60
|
+
@old_repo = gets.strip
|
74
61
|
|
75
|
-
|
76
|
-
if @repo_name.length >= 100
|
77
|
-
puts 'Repository names must be shorter than 100 characters'
|
78
|
-
else
|
79
|
-
url = GITHUB_ORG + @repo_name
|
62
|
+
url = GITHUB_ORG + @old_repo
|
80
63
|
encoded_url = URI.encode(url).slice(0, url.length)
|
81
64
|
check_existing = Faraday.get URI.parse(encoded_url)
|
82
65
|
|
83
|
-
|
66
|
+
# careful - will hit rate limit on GitHub if abused
|
84
67
|
if check_existing.body.include? '"Not Found"'
|
68
|
+
puts 'Provided repository name is not a valid learn-co-curriculum repository. Please try again.'
|
69
|
+
else
|
85
70
|
break
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
loop do
|
75
|
+
puts ''
|
76
|
+
puts 'Old repository: ' + @old_repo
|
77
|
+
puts 'What is the name of the repository you would like to create?'
|
78
|
+
|
79
|
+
@repo_name = gets.strip.gsub(/\s+/, '-').downcase
|
80
|
+
if @repo_name.length >= 100
|
81
|
+
puts 'Repository names must be shorter than 100 characters'
|
86
82
|
else
|
87
|
-
|
88
|
-
|
89
|
-
|
83
|
+
url = GITHUB_ORG + @repo_name
|
84
|
+
encoded_url = URI.encode(url).slice(0, url.length)
|
85
|
+
check_existing = Faraday.get URI.parse(encoded_url)
|
86
|
+
|
87
|
+
if check_existing.body.include? '"Not Found"'
|
88
|
+
break
|
89
|
+
else
|
90
|
+
puts 'A repository with that name already exists or you may have hit a rate limit'
|
91
|
+
puts GITHUB_ORG + @repo_name
|
92
|
+
puts ''
|
93
|
+
end
|
90
94
|
end
|
91
95
|
end
|
92
|
-
end
|
93
96
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
97
|
+
create_new_repo
|
98
|
+
puts ''
|
99
|
+
puts 'To access local folder, change directory into ' + @repo_name + '/'
|
100
|
+
puts "Repository available at #{GITHUB_ORG}" + @repo_name
|
101
|
+
end
|
98
102
|
end
|
99
103
|
|
100
104
|
private
|
101
105
|
|
102
|
-
|
103
106
|
def create_local_lesson(type = 'readme', language = nil)
|
104
107
|
if !language
|
105
108
|
puts "Creating #{type}..."
|
@@ -114,10 +117,9 @@ class LearnDuplicate
|
|
114
117
|
|
115
118
|
copy_template(template_path)
|
116
119
|
create_dot_learn_file(type, language)
|
117
|
-
create_dot_gitignore_file
|
120
|
+
create_dot_gitignore_file
|
118
121
|
end
|
119
122
|
|
120
|
-
|
121
123
|
def cd_into_and(command)
|
122
124
|
"cd #{@repo_name} && #{command}"
|
123
125
|
end
|
@@ -129,7 +131,7 @@ class LearnDuplicate
|
|
129
131
|
|
130
132
|
def rename_repo
|
131
133
|
cmd = "mv -f #{@old_repo} #{@repo_name}"
|
132
|
-
cd_into_and(
|
134
|
+
cd_into_and('git remote rename origin origin-old')
|
133
135
|
`#{cmd}`
|
134
136
|
end
|
135
137
|
|
@@ -149,8 +151,8 @@ class LearnDuplicate
|
|
149
151
|
# Copy `master`, attempt to copy `solution`, but if it's not there, no
|
150
152
|
# complaints
|
151
153
|
cmds = [
|
152
|
-
|
153
|
-
|
154
|
+
"git push origin 'refs/remotes/origin/master:refs/heads/master' > /dev/null 2>&1",
|
155
|
+
"git push origin 'refs/remotes/origin/solution:refs/heads/solution' > /dev/null 2>&1"
|
154
156
|
]
|
155
157
|
cmds.each { |cmd| `#{cd_into_and(cmd)}` }
|
156
158
|
end
|
@@ -160,10 +162,17 @@ class LearnDuplicate
|
|
160
162
|
result.include?("You've successfully authenticated")
|
161
163
|
end
|
162
164
|
|
165
|
+
def git_pull
|
166
|
+
cmd = "cd #{@old_repo} && git fetch --all && git pull --all"
|
167
|
+
`#{cmd}`
|
168
|
+
end
|
169
|
+
|
163
170
|
def create_new_repo
|
164
171
|
# 'cd' doesn't work the way it would in the shell, must be used before every command
|
165
172
|
puts 'Cloning old repository'
|
166
173
|
git_clone
|
174
|
+
puts 'Getting Branches'
|
175
|
+
git_pull
|
167
176
|
puts "Renaming old directory with new name: #{@repo_name}"
|
168
177
|
rename_repo
|
169
178
|
puts ''
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: learn_duplicate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.20
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- flatironschool
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-08-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -38,39 +38,6 @@ files:
|
|
38
38
|
- Rakefile
|
39
39
|
- bin/learn_duplicate
|
40
40
|
- lib/learn_duplicate.rb
|
41
|
-
- lib/templates/javascript_lab_template/CONTRIBUTING.md
|
42
|
-
- lib/templates/javascript_lab_template/LICENSE.md
|
43
|
-
- lib/templates/javascript_lab_template/README.md
|
44
|
-
- lib/templates/javascript_lab_template/index.html
|
45
|
-
- lib/templates/javascript_lab_template/index.js
|
46
|
-
- lib/templates/javascript_lab_template/package-lock.json
|
47
|
-
- lib/templates/javascript_lab_template/package.json
|
48
|
-
- lib/templates/javascript_lab_template/test/helpers.js
|
49
|
-
- lib/templates/javascript_lab_template/test/indexTest.js
|
50
|
-
- lib/templates/react-lab-template/README.md
|
51
|
-
- lib/templates/react-lab-template/package-lock.json
|
52
|
-
- lib/templates/react-lab-template/package.json
|
53
|
-
- lib/templates/react-lab-template/public/index.html
|
54
|
-
- lib/templates/react-lab-template/public/manifest.json
|
55
|
-
- lib/templates/react-lab-template/src/App.css
|
56
|
-
- lib/templates/react-lab-template/src/App.js
|
57
|
-
- lib/templates/react-lab-template/src/components/Button.js
|
58
|
-
- lib/templates/react-lab-template/src/components/ExampleComponent.js
|
59
|
-
- lib/templates/react-lab-template/src/components/Greeting.js
|
60
|
-
- lib/templates/react-lab-template/src/index.js
|
61
|
-
- lib/templates/react-lab-template/test/index.test.js
|
62
|
-
- lib/templates/react-lab-template/test/mocha.opts
|
63
|
-
- lib/templates/readme_template/CONTRIBUTING.md
|
64
|
-
- lib/templates/readme_template/LICENSE.md
|
65
|
-
- lib/templates/readme_template/README.md
|
66
|
-
- lib/templates/ruby_lab_template/CONTRIBUTING.md
|
67
|
-
- lib/templates/ruby_lab_template/Gemfile
|
68
|
-
- lib/templates/ruby_lab_template/Gemfile.lock
|
69
|
-
- lib/templates/ruby_lab_template/LICENSE.md
|
70
|
-
- lib/templates/ruby_lab_template/README.md
|
71
|
-
- lib/templates/ruby_lab_template/lib/example.rb
|
72
|
-
- lib/templates/ruby_lab_template/spec/example_spec.rb
|
73
|
-
- lib/templates/ruby_lab_template/spec/spec_helper.rb
|
74
41
|
homepage: https://github.com/learn-co-curriculum/learn_duplicate
|
75
42
|
licenses:
|
76
43
|
- MIT
|
@@ -90,8 +57,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
57
|
- !ruby/object:Gem::Version
|
91
58
|
version: '0'
|
92
59
|
requirements: []
|
93
|
-
|
94
|
-
rubygems_version: 2.7.6
|
60
|
+
rubygems_version: 3.0.3
|
95
61
|
signing_key:
|
96
62
|
specification_version: 4
|
97
63
|
summary: learn_duplicate is a tool for duplicating learn.co lessons on github
|
@@ -1,40 +0,0 @@
|
|
1
|
-
# Contributing to Learn.co Curriculum
|
2
|
-
|
3
|
-
We're really excited that you're about to contribute to the [open
|
4
|
-
curriculum](https://learn.co/content-license) on [Learn.co](https://learn.co).
|
5
|
-
If this is your first time contributing, please continue reading to learn how
|
6
|
-
to make the most meaningful and useful impact possible.
|
7
|
-
|
8
|
-
## Raising an Issue to Encourage a Contribution
|
9
|
-
|
10
|
-
If you notice a problem with the curriculum that you believe needs improvement
|
11
|
-
but you're unable to make the change yourself, you should raise a Github issue
|
12
|
-
containing a clear description of the problem. Include relevant snippets of
|
13
|
-
the content and/or screenshots if applicable. Curriculum owners regularly review
|
14
|
-
issue lists and your issue will be prioritized and addressed as appropriate.
|
15
|
-
|
16
|
-
## Submitting a Pull Request to Suggest an Improvement
|
17
|
-
|
18
|
-
If you see an opportunity for improvement and can make the change yourself go
|
19
|
-
ahead and use a typical git workflow to make it happen:
|
20
|
-
|
21
|
-
* Fork this curriculum repository
|
22
|
-
* Make the change on your fork, with descriptive commits in the standard format
|
23
|
-
* Open a Pull Request against this repo
|
24
|
-
|
25
|
-
A curriculum owner will review your change and approve or comment on it in due
|
26
|
-
course.
|
27
|
-
|
28
|
-
# Why Contribute?
|
29
|
-
|
30
|
-
Curriculum on Learn is publicly and freely available under Learn's
|
31
|
-
[Educational Content License](https://learn.co/content-license). By
|
32
|
-
embracing an open-source contribution model, our goal is for the curriculum
|
33
|
-
on Learn to become, in time, the best educational content the world has
|
34
|
-
ever seen.
|
35
|
-
|
36
|
-
We need help from the community of Learners to maintain and improve the
|
37
|
-
educational content. Everything from fixing typos, to correcting
|
38
|
-
out-dated information, to improving exposition, to adding better examples,
|
39
|
-
to fixing tests—all contributions to making the curriculum more effective are
|
40
|
-
welcome.
|
@@ -1,23 +0,0 @@
|
|
1
|
-
# Learn.co Educational Content License
|
2
|
-
|
3
|
-
Copyright (c) 2018 Flatiron School, Inc
|
4
|
-
|
5
|
-
The Flatiron School, Inc. owns this Educational Content. However, the Flatiron
|
6
|
-
School supports the development and availability of educational materials in
|
7
|
-
the public domain. Therefore, the Flatiron School grants Users of the Flatiron
|
8
|
-
Educational Content set forth in this repository certain rights to reuse, build
|
9
|
-
upon and share such Educational Content subject to the terms of the Educational
|
10
|
-
Content License set forth [here](http://learn.co/content-license)
|
11
|
-
(http://learn.co/content-license). You must read carefully the terms and
|
12
|
-
conditions contained in the Educational Content License as such terms govern
|
13
|
-
access to and use of the Educational Content.
|
14
|
-
|
15
|
-
Flatiron School is willing to allow you access to and use of the Educational
|
16
|
-
Content only on the condition that you accept all of the terms and conditions
|
17
|
-
contained in the Educational Content License set forth
|
18
|
-
[here](http://learn.co/content-license) (http://learn.co/content-license). By
|
19
|
-
accessing and/or using the Educational Content, you are agreeing to all of the
|
20
|
-
terms and conditions contained in the Educational Content License. If you do
|
21
|
-
not agree to any or all of the terms of the Educational Content License, you
|
22
|
-
are prohibited from accessing, reviewing or using in any way the Educational
|
23
|
-
Content.
|
@@ -1,12 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<html lang="en">
|
3
|
-
<head>
|
4
|
-
<meta charset="UTF-8">
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
|
-
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
7
|
-
<title>JavaScript Lab</title>
|
8
|
-
</head>
|
9
|
-
<body>
|
10
|
-
hello
|
11
|
-
</body>
|
12
|
-
</html>
|