mirror of
https://github.com/neocities/neocities.git
synced 2025-04-24 17:22:35 +02:00
fix tag tests, start on education site creation, updated test code
This commit is contained in:
parent
f00e5d0757
commit
49defcd0c7
14 changed files with 627 additions and 623 deletions
26
Gemfile.lock
26
Gemfile.lock
|
@ -20,15 +20,15 @@ GEM
|
||||||
byebug (2.7.0)
|
byebug (2.7.0)
|
||||||
columnize (~> 0.3)
|
columnize (~> 0.3)
|
||||||
debugger-linecache (~> 1.2)
|
debugger-linecache (~> 1.2)
|
||||||
capybara (2.4.1)
|
capybara (2.4.4)
|
||||||
mime-types (>= 1.16)
|
mime-types (>= 1.16)
|
||||||
nokogiri (>= 1.3.3)
|
nokogiri (>= 1.3.3)
|
||||||
rack (>= 1.0.0)
|
rack (>= 1.0.0)
|
||||||
rack-test (>= 0.5.4)
|
rack-test (>= 0.5.4)
|
||||||
xpath (~> 2.0)
|
xpath (~> 2.0)
|
||||||
capybara_minitest_spec (1.0.1)
|
capybara_minitest_spec (1.0.5)
|
||||||
capybara (>= 2)
|
capybara (>= 2)
|
||||||
minitest (>= 2)
|
minitest (>= 4)
|
||||||
celluloid (0.15.2)
|
celluloid (0.15.2)
|
||||||
timers (~> 1.1.0)
|
timers (~> 1.1.0)
|
||||||
climate_control (0.0.3)
|
climate_control (0.0.3)
|
||||||
|
@ -99,8 +99,8 @@ GEM
|
||||||
metaclass (0.0.4)
|
metaclass (0.0.4)
|
||||||
method_source (0.8.2)
|
method_source (0.8.2)
|
||||||
mime-types (1.25.1)
|
mime-types (1.25.1)
|
||||||
mini_portile (0.6.0)
|
mini_portile (0.6.2)
|
||||||
minitest (5.3.1)
|
minitest (5.6.1)
|
||||||
minitest-reporters (1.0.2)
|
minitest-reporters (1.0.2)
|
||||||
ansi
|
ansi
|
||||||
builder
|
builder
|
||||||
|
@ -108,14 +108,14 @@ GEM
|
||||||
powerbar
|
powerbar
|
||||||
mocha (1.0.0)
|
mocha (1.0.0)
|
||||||
metaclass (~> 0.0.1)
|
metaclass (~> 0.0.1)
|
||||||
multi_json (1.10.1)
|
multi_json (1.11.0)
|
||||||
multipart-post (2.0.0)
|
multipart-post (2.0.0)
|
||||||
netrc (0.10.3)
|
netrc (0.10.3)
|
||||||
nokogiri (1.6.3.1)
|
nokogiri (1.6.6.2)
|
||||||
mini_portile (= 0.6.0)
|
mini_portile (~> 0.6.0)
|
||||||
pg (0.17.1)
|
pg (0.17.1)
|
||||||
phantomjs (1.9.7.1)
|
phantomjs (1.9.7.1)
|
||||||
poltergeist (1.5.1)
|
poltergeist (1.6.0)
|
||||||
capybara (~> 2.1)
|
capybara (~> 2.1)
|
||||||
cliver (~> 0.3.1)
|
cliver (~> 0.3.1)
|
||||||
multi_json (~> 1.0)
|
multi_json (~> 1.0)
|
||||||
|
@ -133,14 +133,14 @@ GEM
|
||||||
pry (~> 0.9.12)
|
pry (~> 0.9.12)
|
||||||
puma (2.8.1)
|
puma (2.8.1)
|
||||||
rack (>= 1.1, < 2.0)
|
rack (>= 1.1, < 2.0)
|
||||||
rack (1.5.2)
|
rack (1.6.0)
|
||||||
rack-cache (1.2)
|
rack-cache (1.2)
|
||||||
rack (>= 0.4)
|
rack (>= 0.4)
|
||||||
rack-protection (1.5.2)
|
rack-protection (1.5.2)
|
||||||
rack
|
rack
|
||||||
rack-recaptcha (0.6.6)
|
rack-recaptcha (0.6.6)
|
||||||
json
|
json
|
||||||
rack-test (0.6.2)
|
rack-test (0.6.3)
|
||||||
rack (>= 1.0)
|
rack (>= 1.0)
|
||||||
rack_session_access (0.1.1)
|
rack_session_access (0.1.1)
|
||||||
builder (>= 2.0.0)
|
builder (>= 2.0.0)
|
||||||
|
@ -226,7 +226,9 @@ GEM
|
||||||
webmock (1.17.4)
|
webmock (1.17.4)
|
||||||
addressable (>= 2.2.7)
|
addressable (>= 2.2.7)
|
||||||
crack (>= 0.3.2)
|
crack (>= 0.3.2)
|
||||||
websocket-driver (0.3.4)
|
websocket-driver (0.5.4)
|
||||||
|
websocket-extensions (>= 0.1.0)
|
||||||
|
websocket-extensions (0.1.2)
|
||||||
xpath (2.0.0)
|
xpath (2.0.0)
|
||||||
nokogiri (~> 1.3)
|
nokogiri (~> 1.3)
|
||||||
zipruby (0.3.6)
|
zipruby (0.3.6)
|
||||||
|
|
|
@ -7,6 +7,7 @@ end
|
||||||
|
|
||||||
post '/api/upload' do
|
post '/api/upload' do
|
||||||
require_api_credentials
|
require_api_credentials
|
||||||
|
|
||||||
files = []
|
files = []
|
||||||
params.each do |k,v|
|
params.each do |k,v|
|
||||||
next unless v.is_a?(Hash) && v[:tempfile]
|
next unless v.is_a?(Hash) && v[:tempfile]
|
||||||
|
|
|
@ -16,9 +16,11 @@ def new_recaptcha_valid?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
CREATE_MATCH_REGEX = /^username$|^password$|^email$|^new_tags_string$|^is_education$/
|
||||||
|
|
||||||
post '/create_validate_all' do
|
post '/create_validate_all' do
|
||||||
content_type :json
|
content_type :json
|
||||||
fields = params.select {|p| p.match /^username$|^password$|^email$|^new_tags_string$/}
|
fields = params.select {|p| p.match CREATE_MATCH_REGEX}
|
||||||
|
|
||||||
site = Site.new fields
|
site = Site.new fields
|
||||||
|
|
||||||
|
@ -33,11 +35,12 @@ end
|
||||||
post '/create_validate' do
|
post '/create_validate' do
|
||||||
content_type :json
|
content_type :json
|
||||||
|
|
||||||
if !params[:field].match /^username$|^password$|^email$|^new_tags_string$/
|
if !params[:field].match CREATE_MATCH_REGEX
|
||||||
return {error: 'not a valid field'}.to_json
|
return {error: 'not a valid field'}.to_json
|
||||||
end
|
end
|
||||||
|
|
||||||
site = Site.new(params[:field] => params[:value])
|
site = Site.new(params[:field] => params[:value])
|
||||||
|
site.is_education = params[:is_education]
|
||||||
site.valid?
|
site.valid?
|
||||||
|
|
||||||
field_sym = params[:field].to_sym
|
field_sym = params[:field].to_sym
|
||||||
|
@ -58,7 +61,8 @@ post '/create' do
|
||||||
username: params[:username],
|
username: params[:username],
|
||||||
password: params[:password],
|
password: params[:password],
|
||||||
email: params[:email],
|
email: params[:email],
|
||||||
new_tags_string: params[:tags],
|
new_tags_string: params[:new_tags_string],
|
||||||
|
is_education: params[:is_education] == 'true' ? true : false,
|
||||||
ip: request.ip
|
ip: request.ip
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -85,4 +89,4 @@ post '/create' do
|
||||||
|
|
||||||
session[:id] = @site.id
|
session[:id] = @site.id
|
||||||
{result: 'ok'}.to_json
|
{result: 'ok'}.to_json
|
||||||
end
|
end
|
||||||
|
|
|
@ -34,7 +34,7 @@ get '/?' do
|
||||||
@sites_count = SimpleCache.get :sites_count
|
@sites_count = SimpleCache.get :sites_count
|
||||||
end
|
end
|
||||||
|
|
||||||
erb :index, layout: false
|
erb :index, layout: :index_layout
|
||||||
end
|
end
|
||||||
|
|
||||||
get '/welcome' do
|
get '/welcome' do
|
||||||
|
@ -44,7 +44,8 @@ get '/welcome' do
|
||||||
end
|
end
|
||||||
|
|
||||||
get '/education' do
|
get '/education' do
|
||||||
erb :education, layout: false
|
redirect '/' if signed_in?
|
||||||
|
erb :education, layout: :index_layout
|
||||||
end
|
end
|
||||||
|
|
||||||
get '/tutorials' do
|
get '/tutorials' do
|
||||||
|
|
9
migrations/064_add_education_to_sites.rb
Normal file
9
migrations/064_add_education_to_sites.rb
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
Sequel.migration do
|
||||||
|
up {
|
||||||
|
add_column :sites, :is_education, :boolean, default: false
|
||||||
|
}
|
||||||
|
|
||||||
|
down {
|
||||||
|
drop_column :sites, :is_education
|
||||||
|
}
|
||||||
|
end
|
|
@ -835,6 +835,18 @@ class Site < Sequel::Model
|
||||||
new_tags.compact!
|
new_tags.compact!
|
||||||
@new_filtered_tags = []
|
@new_filtered_tags = []
|
||||||
|
|
||||||
|
if values[:is_education] == true
|
||||||
|
if new?
|
||||||
|
if @new_tags_string.nil? || @new_tags_string.empty?
|
||||||
|
errors.add :new_tags_string, 'A Class Tag is required.'
|
||||||
|
end
|
||||||
|
|
||||||
|
if new_tags.length > 1
|
||||||
|
errors.add :new_tags_string, 'Must only have one tag'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if ((new? ? 0 : tags_dataset.count) + new_tags.length > 5)
|
if ((new? ? 0 : tags_dataset.count) + new_tags.length > 5)
|
||||||
errors.add :new_tags_string, 'Cannot have more than 5 tags for your site.'
|
errors.add :new_tags_string, 'Cannot have more than 5 tags for your site.'
|
||||||
end
|
end
|
||||||
|
@ -861,7 +873,7 @@ class Site < Sequel::Model
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
|
|
||||||
next if tags.collect {|t| t.name}.include? tag
|
next if !new? && tags.collect {|t| t.name}.include?(tag)
|
||||||
|
|
||||||
@new_filtered_tags << tag
|
@new_filtered_tags << tag
|
||||||
@new_filtered_tags.uniq!
|
@new_filtered_tags.uniq!
|
||||||
|
|
61
tests/acceptance/education_tests.rb
Normal file
61
tests/acceptance/education_tests.rb
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
require_relative './environment.rb'
|
||||||
|
|
||||||
|
Capybara.register_driver :poltergeist do |app|
|
||||||
|
Capybara::Poltergeist::Driver.new(app, js_errors: false)
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'signup' do
|
||||||
|
include Capybara::DSL
|
||||||
|
|
||||||
|
def fill_in_valid
|
||||||
|
@site = Fabricate.attributes_for(:site)
|
||||||
|
@class_tag = SecureRandom.uuid.gsub('-', '')[0..Tag::NAME_LENGTH_MAX-1]
|
||||||
|
fill_in 'username', with: @site[:username]
|
||||||
|
fill_in 'password', with: @site[:password]
|
||||||
|
fill_in 'email', with: @site[:email]
|
||||||
|
fill_in 'new_tags_string', with: @class_tag
|
||||||
|
end
|
||||||
|
|
||||||
|
before do
|
||||||
|
Capybara.default_driver = :poltergeist
|
||||||
|
Capybara.reset_sessions!
|
||||||
|
visit '/education'
|
||||||
|
page.must_have_content 'Neocities' # Used to force load wait
|
||||||
|
end
|
||||||
|
|
||||||
|
after do
|
||||||
|
Capybara.default_driver = :rack_test
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'succeeds with valid data' do
|
||||||
|
fill_in_valid
|
||||||
|
click_button 'Create My Site'
|
||||||
|
page.must_have_content 'Welcome to Neocities'
|
||||||
|
|
||||||
|
index_file_path = File.join Site::SITE_FILES_ROOT, @site[:username], 'index.html'
|
||||||
|
File.exist?(index_file_path).must_equal true
|
||||||
|
|
||||||
|
site = Site[username: @site[:username]]
|
||||||
|
site.site_files.length.must_equal 4
|
||||||
|
site.site_changed.must_equal false
|
||||||
|
site.site_updated_at.must_equal nil
|
||||||
|
site.is_education.must_equal true
|
||||||
|
site.tags.length.must_equal 1
|
||||||
|
site.tags.first.name.must_equal @class_tag
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'fails to create for existing site' do
|
||||||
|
@existing_site = Fabricate :site
|
||||||
|
fill_in_valid
|
||||||
|
fill_in :username, with: @existing_site.username
|
||||||
|
click_button 'Create My Site'
|
||||||
|
page.must_have_content 'already taken'
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'fails for multiple tags' do
|
||||||
|
fill_in_valid
|
||||||
|
fill_in :new_tags_string, with: 'derp, ie'
|
||||||
|
click_button 'Create My Site'
|
||||||
|
page.must_have_content 'Must only have one tag'
|
||||||
|
end
|
||||||
|
end
|
|
@ -4,4 +4,6 @@ Capybara.app = Sinatra::Application
|
||||||
|
|
||||||
def teardown
|
def teardown
|
||||||
Capybara.reset_sessions!
|
Capybara.reset_sessions!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Capybara.default_wait_time = 5
|
||||||
|
|
|
@ -30,6 +30,7 @@ describe 'signup' do
|
||||||
Capybara.default_driver = :poltergeist
|
Capybara.default_driver = :poltergeist
|
||||||
Capybara.reset_sessions!
|
Capybara.reset_sessions!
|
||||||
visit_signup
|
visit_signup
|
||||||
|
page.must_have_content 'Neocities' # Used to force load wait
|
||||||
end
|
end
|
||||||
|
|
||||||
after do
|
after do
|
||||||
|
@ -48,19 +49,15 @@ describe 'signup' do
|
||||||
site.site_files.length.must_equal 4
|
site.site_files.length.must_equal 4
|
||||||
site.site_changed.must_equal false
|
site.site_changed.must_equal false
|
||||||
site.site_updated_at.must_equal nil
|
site.site_updated_at.must_equal nil
|
||||||
|
site.is_education.must_equal false
|
||||||
|
|
||||||
site.ip.must_equal Site.hash_ip('127.0.0.1')
|
site.ip.must_equal Site.hash_ip('127.0.0.1')
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'fails to create for existing site' do
|
it 'fails to create for existing site' do
|
||||||
|
@existing_site = Fabricate :site
|
||||||
fill_in_valid
|
fill_in_valid
|
||||||
click_signup_button
|
fill_in 'username', with: @existing_site.username
|
||||||
page.must_have_content 'Welcome to Neocities'
|
|
||||||
Capybara.reset_sessions!
|
|
||||||
visit_signup
|
|
||||||
sleep 0.3
|
|
||||||
fill_in 'username', with: @site[:username]
|
|
||||||
fill_in 'password', with: @site[:password]
|
|
||||||
click_signup_button
|
click_signup_button
|
||||||
page.must_have_content 'already taken'
|
page.must_have_content 'already taken'
|
||||||
end
|
end
|
||||||
|
@ -113,9 +110,6 @@ describe 'signup' do
|
||||||
page.must_have_content /email.+exists/
|
page.must_have_content /email.+exists/
|
||||||
end
|
end
|
||||||
|
|
||||||
puts "$$$$$$$$$$$$$$$$$$$$$$ TODO FIX TAGS TESTS"
|
|
||||||
|
|
||||||
=begin
|
|
||||||
it 'succeeds with no tags' do
|
it 'succeeds with no tags' do
|
||||||
fill_in_valid
|
fill_in_valid
|
||||||
fill_in 'new_tags_string', with: ''
|
fill_in 'new_tags_string', with: ''
|
||||||
|
@ -139,7 +133,7 @@ puts "$$$$$$$$$$$$$$$$$$$$$$ TODO FIX TAGS TESTS"
|
||||||
Site.last.tags.collect {|t| t.name}.must_equal ['derpie', 'shoujo']
|
Site.last.tags.collect {|t| t.name}.must_equal ['derpie', 'shoujo']
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'fails with invalid tag chars' do
|
it 'fails with invalid tag chars' do
|
||||||
fill_in_valid
|
fill_in_valid
|
||||||
fill_in 'new_tags_string', with: '$POLICE OFFICER$$$$$, derp'
|
fill_in 'new_tags_string', with: '$POLICE OFFICER$$$$$, derp'
|
||||||
click_signup_button
|
click_signup_button
|
||||||
|
@ -179,9 +173,10 @@ puts "$$$$$$$$$$$$$$$$$$$$$$ TODO FIX TAGS TESTS"
|
||||||
fill_in 'new_tags_string', with: 'one, one'
|
fill_in 'new_tags_string', with: 'one, one'
|
||||||
click_signup_button
|
click_signup_button
|
||||||
|
|
||||||
site = Site.last
|
page.must_have_content /Welcome to Neocities/
|
||||||
|
|
||||||
|
site = Site[username: @site[:username]]
|
||||||
site.tags.length.must_equal 1
|
site.tags.length.must_equal 1
|
||||||
site.tags.first.name.must_equal 'one'
|
site.tags.first.name.must_equal 'one'
|
||||||
end
|
end
|
||||||
=end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -167,14 +167,6 @@ describe 'api upload' do
|
||||||
'/' => Rack::Test::UploadedFile.new('./tests/files/test.jpg', 'image/jpeg')
|
'/' => Rack::Test::UploadedFile.new('./tests/files/test.jpg', 'image/jpeg')
|
||||||
}
|
}
|
||||||
res[:error_type].must_equal 'invalid_file_type'
|
res[:error_type].must_equal 'invalid_file_type'
|
||||||
|
|
||||||
create_site
|
|
||||||
basic_authorize @user, @pass
|
|
||||||
post '/api/upload', {
|
|
||||||
'' => Rack::Test::UploadedFile.new('./tests/files/test.jpg', 'image/jpeg')
|
|
||||||
}
|
|
||||||
|
|
||||||
res[:error_type].must_equal 'missing_files'
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'fails for file with no extension' do
|
it 'fails for file with no extension' do
|
||||||
|
|
37
views/_index_signup_script.erb
Normal file
37
views/_index_signup_script.erb
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
<script src="/js/app.min.js"></script>
|
||||||
|
<script src="/js/bootstrap.min.js"></script>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
$('#createSiteForm').on('submit', function(obj) {
|
||||||
|
$.post('/create_validate_all', $(obj.target).serialize(), function(errors) {
|
||||||
|
if(errors.length == 0) {
|
||||||
|
$.post('/create', $('#createSiteForm').serialize(), function(res) {
|
||||||
|
window.location.href = '/welcome'
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
for(var i=0; i<errors.length;i++) {
|
||||||
|
if(errors[i][0] == 'captcha') {
|
||||||
|
var captchaDiv = $('#captcha-input')
|
||||||
|
captchaDiv.attr('data-original-title', errors[i][1])
|
||||||
|
captchaDiv.tooltip('show')
|
||||||
|
} else {
|
||||||
|
var ele = $('input[name='+errors[i][0]+']')
|
||||||
|
ele.attr('data-original-title', errors[i][1])
|
||||||
|
ele.tooltip('show')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
$('input[type=text],input[type=password]').on('change focusout', function(obj) {
|
||||||
|
$.post('/create_validate', {field: obj.target.name, value: obj.target.value, is_education: $('input[name=is_education]')[0].value, csrf_token: '<%= csrf_token %>'}, function(res) {
|
||||||
|
if(res.result == 'ok') {
|
||||||
|
return $(obj.target).tooltip('hide')
|
||||||
|
}
|
||||||
|
|
||||||
|
$(obj.target).attr('data-original-title', res.error)
|
||||||
|
$(obj.target).tooltip('show')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
</script>
|
|
@ -1,189 +1,148 @@
|
||||||
<!doctype html>
|
<body class="hp education">
|
||||||
<!--[if IE 8 ]><html lang="en" class="ieAll ie8"><![endif]-->
|
<a id="new"></a>
|
||||||
<!--[if IE 9 ]><html lang="en" class="ieAll ie9"><![endif]-->
|
|
||||||
<!--[if (gt IE 9)|!(IE)]><!--><html lang="en"><!--<![endif]-->
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
|
||||||
|
|
||||||
<title>Neocities for Education</title>
|
<div class="page">
|
||||||
<meta itemprop="name" content="Neocities.org" />
|
|
||||||
<meta itemprop="description" content="Create your own free home page, and do whatever you want with it." />
|
|
||||||
<meta name="description" content="Neocities is the new Geocities. Create your own free home page, and do whatever you want with it." />
|
|
||||||
<meta name="keywords" content="free website, html, css, learn to code, free hosting, build a website, create a web page" />
|
|
||||||
|
|
||||||
<link rel="canonical" href="//neocities.org" />
|
<header class="header-Base" role="banner">
|
||||||
|
<nav class="header-Nav clearfix" role="navigation">
|
||||||
|
<a href="#!" title="show small screen nav" class="small-Nav">
|
||||||
|
<img src="/img/nav-Icon.png" alt="navigation icon" />
|
||||||
|
</a>
|
||||||
|
<ul class="h-Nav constant-Nav" role="presentation">
|
||||||
|
<%== erb :'_header_links', layout: false %>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<meta property="og:title" content="Neocities"/>
|
<ul class="status-Nav">
|
||||||
<meta property="og:site_name" content="Neocities | neocities.org"/>
|
|
||||||
<meta property="og:type" content="website"/>
|
|
||||||
<meta property="og:image" content=""/>
|
|
||||||
<meta property="og:url" content="//www.neocities.org"/>
|
|
||||||
<meta property="og:description" content="Neocities is the new Geocities. Create your own free home page, and do whatever you want with it."/>
|
|
||||||
|
|
||||||
<link rel="shortcut icon" type="image/ico" href="/favicon.ico?v=4" />
|
<% if !signed_in? %>
|
||||||
<link rel="apple-touch-icon-precomposed" href="#apple-icon-144.png" />
|
<li>
|
||||||
<link rel="apple-touch-startup-image" href="#startup.png" />
|
<a href="/signin" class="sign-In">Sign In</a>
|
||||||
|
</li>
|
||||||
|
<% else %>
|
||||||
|
<li>
|
||||||
|
<a href="/dashboard" class="sign-In">Dashboard</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="/settings" class="sign-In">Settings</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="/signout" class="sign-In">Sign Out</a>
|
||||||
|
</li>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<% if flash.keys.length > 0 %>
|
||||||
<!-- Mobile Meta -->
|
<div class="alert alert-block txt-Center">
|
||||||
<meta name="HandheldFriendly" content="True" />
|
<% flash.keys.each do |key| %>
|
||||||
<meta name="MobileOptimized" content="320" />
|
<%== flash[key] %>
|
||||||
<meta name="viewport" content="width=device-width, minimum-scale=1, initial-scale=1" />
|
<% end %>
|
||||||
|
</div>
|
||||||
<link href="/css/neo.css" rel="stylesheet" type="text/css" media="all"/>
|
<% end %>
|
||||||
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script type="text/javascript" src="/js/html5.min.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
|
|
||||||
<script src="/js/jquery-1.11.0.min.js"></script>
|
|
||||||
<script src='https://www.google.com/recaptcha/api.js'></script>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body class="hp education">
|
|
||||||
<a id="new"></a>
|
|
||||||
|
|
||||||
<div class="page">
|
|
||||||
|
|
||||||
<header class="header-Base" role="banner">
|
|
||||||
<nav class="header-Nav clearfix" role="navigation">
|
|
||||||
<a href="#!" title="show small screen nav" class="small-Nav">
|
|
||||||
<img src="/img/nav-Icon.png" alt="navigation icon" />
|
|
||||||
</a>
|
|
||||||
<ul class="h-Nav constant-Nav" role="presentation">
|
|
||||||
<%== erb :'_header_links', layout: false %>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<ul class="status-Nav">
|
|
||||||
|
|
||||||
<% if !signed_in? %>
|
|
||||||
<li>
|
|
||||||
<a href="/signin" class="sign-In">Sign In</a>
|
|
||||||
</li>
|
|
||||||
<% else %>
|
|
||||||
<li>
|
|
||||||
<a href="/dashboard" class="sign-In">Dashboard</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="/settings" class="sign-In">Settings</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="/signout" class="sign-In">Sign Out</a>
|
|
||||||
</li>
|
|
||||||
<% end %>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<% if flash.keys.length > 0 %>
|
|
||||||
<div class="alert alert-block txt-Center">
|
|
||||||
<% flash.keys.each do |key| %>
|
|
||||||
<%== flash[key] %>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<div class="int-Logo hp-Logo">
|
<div class="int-Logo hp-Logo">
|
||||||
<a href="/" title="back to home">
|
<a href="/" title="back to home">
|
||||||
<span class="hidden">Neocities.org</span>
|
<span class="hidden">Neocities.org</span>
|
||||||
<img src="/img/cat.png" alt="Neocities.org" />
|
<img src="/img/cat.png" alt="Neocities.org" />
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<section class="header-Intro">
|
<section class="header-Intro">
|
||||||
<h1 class="logo header-Content content">
|
<h1 class="logo header-Content content">
|
||||||
<span class="hidden">Neocities for Education</span>
|
<span class="hidden">Neocities for Education</span>
|
||||||
<img src="/img/neocities-logo-education.png" alt="Neocities.org" />
|
<img src="/img/neocities-logo-education.png" alt="Neocities.org" />
|
||||||
</h1>
|
</h1>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<div class="header-Outro">
|
<div class="header-Outro">
|
||||||
<div class="row header-Content content">
|
<div class="row header-Content content">
|
||||||
<div class="col intro">
|
<div class="col intro">
|
||||||
<h3 class="delta">A great place to learn how to build websites</h2>
|
<h3 class="delta">A great place to learn how to build websites</h2>
|
||||||
<img src="/img/heartcat.png" class="float-Right">
|
<img src="/img/heartcat.png" class="float-Right">
|
||||||
<p class="intro-text">Completely free and continuously under development, we're building Neocities into a simple and intuitive web hosting service for students learning HTML and CSS for the first time. Give us a try and <a href="/contact">let us know</a> what you think!</p>
|
<p class="intro-text">Completely free and continuously under development, we're building Neocities into a simple and intuitive web hosting service for students learning HTML and CSS for the first time. Give us a try and <a href="/contact">let us know</a> what you think!</p>
|
||||||
|
|
||||||
<h3 class="delta">Tools for creation and review</h2>
|
|
||||||
<img src="/img/about-neocities.png" class="float-Left">
|
|
||||||
<p class="intro-text">Neocities has a great built-in HTML editor and drag-and-drop upload. Instructors can easily review all class websites using our class tag feature. By signing up using this education page, students will get an experience tailored for them, and they'll only see sites from their class in the gallery.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col signup-Area">
|
<h3 class="delta">Tools for creation and review</h2>
|
||||||
<% if signed_in? %>
|
<img src="/img/about-neocities.png" class="float-Left">
|
||||||
|
<p class="intro-text">Neocities has a great built-in HTML editor and drag-and-drop upload. Instructors can easily review all class websites using our class tag feature. By signing up using this education page, students will get an experience tailored for them, and they'll only see sites from their class in the gallery.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="signup-Form">
|
<div class="col signup-Area">
|
||||||
<div class="content">
|
<% if signed_in? %>
|
||||||
<h3 class="gamma txt-Center">Build your Website!</h3>
|
|
||||||
</div>
|
<div class="signup-Form">
|
||||||
<p class="txt-Center">
|
<div class="content">
|
||||||
Go to your dashboard to<br> start editing your website!
|
<h3 class="gamma txt-Center">Build your Website!</h3>
|
||||||
</p>
|
|
||||||
<br />
|
|
||||||
<div class="txt-Center">
|
|
||||||
<a href="/dashboard" class="btn-Action">Get Started</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<% else %>
|
<p class="txt-Center">
|
||||||
<form id="createSiteForm" class="signup-Form" onsubmit="return false">
|
Go to your dashboard to<br> start editing your website!
|
||||||
<input type="hidden" name="csrf_token" value="<%= csrf_token %>">
|
</p>
|
||||||
<fieldset class="content">
|
<br />
|
||||||
<h2 class="gamma">Class Sign Up</h2>
|
<div class="txt-Center">
|
||||||
<hr />
|
<a href="/dashboard" class="btn-Action">Get Started</a>
|
||||||
<div class="siteCreateInputs">
|
</div>
|
||||||
<label for="create-Input">User Name</label>
|
</div>
|
||||||
<input type="text" name="prevent_autofill_username" id="prevent_autofill_username" value="" style="position:absolute; top:-2000px; left:-2000px;" />
|
<% else %>
|
||||||
<input type="password" name="prevent_autofill_password" id="prevent_autofill_password" value="" style="position:absolute; top:-2000px; left:-2000px;" />
|
<form id="createSiteForm" class="signup-Form" onsubmit="return false">
|
||||||
<input type="text" class="input-Area" id="create-Input" name="username" placeholder="my-site-name" data-placement="left" data-trigger="manual" autocapitalize="off" autocorrect="off" autocomplete="off" />
|
<input type="hidden" name="csrf_token" value="<%= csrf_token %>">
|
||||||
<label for="create-Input" id="domain-name">.neocities.org</label>
|
<input type="hidden" name="is_education" value="true">
|
||||||
|
<fieldset class="content">
|
||||||
|
<h2 class="gamma">Class Sign Up</h2>
|
||||||
|
<hr />
|
||||||
|
<div class="siteCreateInputs">
|
||||||
|
<label for="create-Input">User Name</label>
|
||||||
|
<input type="text" name="prevent_autofill_username" id="prevent_autofill_username" value="" style="position:absolute; top:-2000px; left:-2000px;" />
|
||||||
|
<input type="password" name="prevent_autofill_password" id="prevent_autofill_password" value="" style="position:absolute; top:-2000px; left:-2000px;" />
|
||||||
|
<input type="text" class="input-Area" id="create-Input" name="username" placeholder="my-site-name" data-placement="left" data-trigger="manual" autocapitalize="off" autocorrect="off" autocomplete="off" />
|
||||||
|
<label for="create-Input" id="domain-name">.neocities.org</label>
|
||||||
|
|
||||||
<label for="tags-input">Class Tag</label>
|
<label for="tags-input">Class Tag</label>
|
||||||
<input type="text" class="input-Area" id="tags-input" name="new_tags_string" placeholder="E.g. SmithSummer2015" data-placement="left" data-trigger="manual" autocapitalize="off" autocorrect="off" autocomplete="off" />
|
<input type="text" class="input-Area" id="tags-input" name="new_tags_string" placeholder="E.g. SmithSummer2015" data-placement="left" data-trigger="manual" autocapitalize="off" autocorrect="off" autocomplete="off" />
|
||||||
|
|
||||||
<div class="col col-50" style="padding-left:0;">
|
<div class="col col-50" style="padding-left:0;">
|
||||||
<label for="password-input">
|
<label for="password-input">
|
||||||
Password
|
Password
|
||||||
</label>
|
</label>
|
||||||
<input type="password" class="input-Area" id="password-input"
|
<input type="password" class="input-Area" id="password-input"
|
||||||
name="password" placeholder="password"
|
name="password" placeholder="password"
|
||||||
data-placement="left" data-trigger="manual"
|
data-placement="left" data-trigger="manual"
|
||||||
autocapitalize="off" autocorrect="off" autocomplete="off" />
|
autocapitalize="off" autocorrect="off" autocomplete="off" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col col-50">
|
<div class="col col-50">
|
||||||
<label for="email-input">
|
<label for="email-input">
|
||||||
Email
|
Email
|
||||||
</label>
|
</label>
|
||||||
<input type="email" class="input-Area"
|
<input type="email" class="input-Area"
|
||||||
id="email-input" name="email"
|
id="email-input" name="email"
|
||||||
placeholder="me@example.com" data-placement="left"
|
placeholder="me@example.com" data-placement="left"
|
||||||
data-trigger="manual" autocapitalize="off"
|
data-trigger="manual" autocapitalize="off"
|
||||||
autocorrect="off" autocomplete="off" />
|
autocorrect="off" autocomplete="off" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col col-50" style="padding-left:0;">
|
<div class="col col-50" style="padding-left:0;">
|
||||||
<label>
|
<label>
|
||||||
Confirm you are human
|
Confirm you are human
|
||||||
</label>
|
</label>
|
||||||
<div id="captcha-input" class="g-recaptcha"
|
<div id="captcha-input" class="g-recaptcha"
|
||||||
data-sitekey="<%= $config['recaptcha_public_key'] %>"
|
data-sitekey="<%= $config['recaptcha_public_key'] %>"
|
||||||
data-theme="dark" data-placement="left" data-trigger="manual">
|
data-theme="dark" data-placement="left" data-trigger="manual">
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col col-50">
|
|
||||||
<div style="margin-top: 15px">
|
|
||||||
<input type="submit" value="Create My Site" class="btn-Action float-Right" />
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
<% end %>
|
<div class="col col-50">
|
||||||
|
<div style="margin-top: 15px">
|
||||||
|
<input type="submit" value="Create My Site" class="btn-Action float-Right" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
|
||||||
</div> <!-- end .col-50 -->
|
<% end %>
|
||||||
|
|
||||||
</div> <!-- end .row -->
|
</div> <!-- end .col-50 -->
|
||||||
|
|
||||||
|
</div> <!-- end .row -->
|
||||||
|
|
||||||
</div> <!-- end .header-Outro -->
|
</div> <!-- end .header-Outro -->
|
||||||
|
|
||||||
|
@ -192,126 +151,90 @@
|
||||||
<main class="content-Base">
|
<main class="content-Base">
|
||||||
|
|
||||||
<div class="section instructor-quotes">
|
<div class="section instructor-quotes">
|
||||||
<h2 class="delta">What Instructors Say</h2>
|
<h2 class="delta">What Instructors Say</h2>
|
||||||
<div class="row content">
|
<div class="row content">
|
||||||
<div class="col col-33">
|
<div class="col col-33">
|
||||||
<div class="image" style="width:130px;height:130px;background:#aaa"></div>
|
<div class="image" style="width:130px;height:130px;background:#aaa"></div>
|
||||||
<h3>Instructor Name<br>
|
<h3>Instructor Name<br>
|
||||||
Location<br>
|
Location<br>
|
||||||
Class name</h3>
|
Class name</h3>
|
||||||
|
|
||||||
<p>"Neocities was an excellent resource for my students - it made everything very easy.
|
<p>"Neocities was an excellent resource for my students - it made everything very easy.
|
||||||
The Neocities team did a great job responding to any questions I had."</p>
|
The Neocities team did a great job responding to any questions I had."</p>
|
||||||
</div>
|
|
||||||
<div class="col col-33">
|
|
||||||
<div class="image" style="width:130px;height:130px;background:#aaa"></div>
|
|
||||||
<h3>Instructor Name<br>
|
|
||||||
Location<br>
|
|
||||||
Class name</h3>
|
|
||||||
|
|
||||||
<p>"Neocities was an excellent resource for my students - it made everything very easy.
|
|
||||||
The Neocities team did a great job responding to any questions I had."</p>
|
|
||||||
</div>
|
|
||||||
<div class="col col-33">
|
|
||||||
<div class="image" style="width:130px;height:130px;background:#aaa"></div>
|
|
||||||
<h3>Instructor Name<br>
|
|
||||||
Location<br>
|
|
||||||
Class name</h3>
|
|
||||||
|
|
||||||
<p>"Neocities was an excellent resource for my students - it made everything very easy.
|
|
||||||
The Neocities team did a great job responding to any questions I had."</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col col-33">
|
||||||
|
<div class="image" style="width:130px;height:130px;background:#aaa"></div>
|
||||||
|
<h3>Instructor Name<br>
|
||||||
|
Location<br>
|
||||||
|
Class name</h3>
|
||||||
|
|
||||||
|
<p>"Neocities was an excellent resource for my students - it made everything very easy.
|
||||||
|
The Neocities team did a great job responding to any questions I had."</p>
|
||||||
|
</div>
|
||||||
|
<div class="col col-33">
|
||||||
|
<div class="image" style="width:130px;height:130px;background:#aaa"></div>
|
||||||
|
<h3>Instructor Name<br>
|
||||||
|
Location<br>
|
||||||
|
Class name</h3>
|
||||||
|
|
||||||
|
<p>"Neocities was an excellent resource for my students - it made everything very easy.
|
||||||
|
The Neocities team did a great job responding to any questions I had."</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="section support">
|
<div class="section support">
|
||||||
<h2>Support Us</h2>
|
<h2>Support Us</h2>
|
||||||
<div class="row quote">
|
<div class="row quote">
|
||||||
<div class="col" style="">
|
<div class="col" style="">
|
||||||
<p>Neocities is funded directly by our community through supporter plans and donations. We will never sell users' personal data or embed advertising on member sites. Your support allows us to pay for server costs and continue working on Neocities full-time. You can support us by making a <a href="/donate">one-time donation</a> or by <a href="/plan">subscribing for $5/month</a>.</p>
|
<p>Neocities is funded directly by our community through supporter plans and donations. We will never sell users' personal data or embed advertising on member sites. Your support allows us to pay for server costs and continue working on Neocities full-time. You can support us by making a <a href="/donate">one-time donation</a> or by <a href="/plan">subscribing for $5/month</a>.</p>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<footer class="footer-Base" role="contentinfo">
|
<footer class="footer-Base" role="contentinfo">
|
||||||
<div class="footer-Intro">
|
<div class="footer-Intro">
|
||||||
<div class="footer-Content">
|
<div class="footer-Content">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col col-33">
|
<div class="col col-33">
|
||||||
<div class="f-Col f-Col-1 clearfix">
|
<div class="f-Col f-Col-1 clearfix">
|
||||||
<span class="footer-icon"></span>
|
<span class="footer-icon"></span>
|
||||||
<h2 class="delta">Support Us</h2>
|
<h2 class="delta">Support Us</h2>
|
||||||
<p class="tiny">
|
<p class="tiny">
|
||||||
Neocities is funded by <a href="/plan">supporters</a> and <a href="/donate">donations</a>. If you’d like to contribute, you can help us pay our server costs using credit card, Bitcoin, or PayPal.
|
Neocities is funded by <a href="/plan">supporters</a> and <a href="/donate">donations</a>. If you’d like to contribute, you can help us pay our server costs using credit card, Bitcoin, or PayPal.
|
||||||
</p>
|
</p>
|
||||||
<a href="/donate" title="Donate to Neocities" class="action-Link">Donate Today</a>
|
<a href="/donate" title="Donate to Neocities" class="action-Link">Donate Today</a>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col col-33">
|
</div>
|
||||||
<div class="f-Col f-Col-2 clearfix">
|
<div class="col col-33">
|
||||||
<span class="footer-icon"></span>
|
<div class="f-Col f-Col-2 clearfix">
|
||||||
<h2 class="delta">About Us</h2>
|
<span class="footer-icon"></span>
|
||||||
<p class="tiny">
|
<h2 class="delta">About Us</h2>
|
||||||
Neocities is here to bring back the creativity and
|
<p class="tiny">
|
||||||
free expression to the world wide web that made it great.
|
Neocities is here to bring back the creativity and
|
||||||
</p>
|
free expression to the world wide web that made it great.
|
||||||
<a href="/about" title="More about Neocities" class="action-Link">More About Us</a>
|
</p>
|
||||||
</div>
|
<a href="/about" title="More about Neocities" class="action-Link">More About Us</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col col-33">
|
</div>
|
||||||
<div class="f-Col f-Col-3 clearfix">
|
<div class="col col-33">
|
||||||
<span class="footer-icon"></span>
|
<div class="f-Col f-Col-3 clearfix">
|
||||||
<h2 class="delta">Latest News</h2>
|
<span class="footer-icon"></span>
|
||||||
<p class="tiny">
|
<h2 class="delta">Latest News</h2>
|
||||||
The latest news on Neocities can be found on our blog.
|
<p class="tiny">
|
||||||
</p>
|
The latest news on Neocities can be found on our blog.
|
||||||
<a href="/blog" title="Read about Neocities news and updates" class="action-Link">Read More</a>
|
</p>
|
||||||
</div>
|
<a href="/blog" title="Read about Neocities news and updates" class="action-Link">Read More</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<%== erb :'_footer', layout: false %>
|
<%== erb :'_footer', layout: false %>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script src="/js/bootstrap.min.js"></script>
|
<%== erb :'_index_signup_script', layout: false %>
|
||||||
<script>
|
</body>
|
||||||
|
|
||||||
$('#createSiteForm').on('submit', function(obj) {
|
|
||||||
$.post('/create_validate_all', $(obj.target).serialize(), function(errors) {
|
|
||||||
if(errors.length == 0) {
|
|
||||||
$.post('/create', $('#createSiteForm').serialize(), function(res) {
|
|
||||||
window.location.href = '/welcome'
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
for(var i=0; i<errors.length;i++) {
|
|
||||||
if(errors[i][0] == 'captcha') {
|
|
||||||
var captchaDiv = $('#captcha-input')
|
|
||||||
captchaDiv.attr('data-original-title', errors[i][1])
|
|
||||||
captchaDiv.tooltip('show')
|
|
||||||
} else {
|
|
||||||
var ele = $('input[name='+errors[i][0]+']')
|
|
||||||
ele.attr('data-original-title', errors[i][1])
|
|
||||||
ele.tooltip('show')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
$('input[type=text],input[type=password]').on('change focusout', function(obj) {
|
|
||||||
$.post('/create_validate', {field: obj.target.name, value: obj.target.value, csrf_token: '<%= csrf_token %>'}, function(res) {
|
|
||||||
if(res.result == 'ok') {
|
|
||||||
return $(obj.target).tooltip('hide')
|
|
||||||
}
|
|
||||||
|
|
||||||
$(obj.target).attr('data-original-title', res.error)
|
|
||||||
$(obj.target).tooltip('show')
|
|
||||||
})
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
550
views/index.erb
550
views/index.erb
|
@ -1,201 +1,160 @@
|
||||||
<!doctype html>
|
<body class="hp">
|
||||||
<!--[if IE 8 ]><html lang="en" class="ieAll ie8"><![endif]-->
|
<a id="new"></a>
|
||||||
<!--[if IE 9 ]><html lang="en" class="ieAll ie9"><![endif]-->
|
|
||||||
<!--[if (gt IE 9)|!(IE)]><!--><html lang="en"><!--<![endif]-->
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
|
||||||
|
|
||||||
<title>Neocities: Create your free website now!</title>
|
<div class="page">
|
||||||
<meta itemprop="name" content="Neocities.org" />
|
|
||||||
<meta itemprop="description" content="Create your own free home page, and do whatever you want with it." />
|
|
||||||
<meta name="description" content="Neocities is the new Geocities. Create your own free home page, and do whatever you want with it." />
|
|
||||||
<meta name="keywords" content="free website, html, css, learn to code, free hosting, build a website, create a web page" />
|
|
||||||
|
|
||||||
<link rel="canonical" href="//neocities.org" />
|
<header class="header-Base" role="banner">
|
||||||
|
<nav class="header-Nav clearfix" role="navigation">
|
||||||
|
<a href="#!" title="show small screen nav" class="small-Nav">
|
||||||
|
<img src="/img/nav-Icon.png" alt="navigation icon" />
|
||||||
|
</a>
|
||||||
|
<ul class="h-Nav constant-Nav" role="presentation">
|
||||||
|
<%== erb :'_header_links', layout: false %>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<meta property="og:title" content="Neocities"/>
|
<ul class="status-Nav">
|
||||||
<meta property="og:site_name" content="Neocities | neocities.org"/>
|
|
||||||
<meta property="og:type" content="website"/>
|
|
||||||
<meta property="og:image" content=""/>
|
|
||||||
<meta property="og:url" content="//www.neocities.org"/>
|
|
||||||
<meta property="og:description" content="Neocities is the new Geocities. Create your own free home page, and do whatever you want with it."/>
|
|
||||||
|
|
||||||
<link rel="shortcut icon" type="image/ico" href="/favicon.ico?v=4" />
|
<% if !signed_in? %>
|
||||||
<link rel="apple-touch-icon-precomposed" href="#apple-icon-144.png" />
|
<li>
|
||||||
<link rel="apple-touch-startup-image" href="#startup.png" />
|
<a href="/signin" class="sign-In">Sign In</a>
|
||||||
|
</li>
|
||||||
|
<% else %>
|
||||||
|
<li>
|
||||||
|
<a href="/dashboard" class="sign-In">Dashboard</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="/settings" class="sign-In">Settings</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="/signout" class="sign-In">Sign Out</a>
|
||||||
|
</li>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<% if flash.keys.length > 0 %>
|
||||||
<!-- Mobile Meta -->
|
<div class="alert alert-block txt-Center">
|
||||||
<meta name="HandheldFriendly" content="True" />
|
<% flash.keys.each do |key| %>
|
||||||
<meta name="MobileOptimized" content="320" />
|
<%== flash[key] %>
|
||||||
<meta name="viewport" content="width=device-width, minimum-scale=1, initial-scale=1" />
|
<% end %>
|
||||||
|
</div>
|
||||||
<link href="/css/neo.css" rel="stylesheet" type="text/css" media="all"/>
|
<% end %>
|
||||||
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script type="text/javascript" src="/js/html5.min.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
|
|
||||||
<script src="/js/jquery-1.11.0.min.js"></script>
|
|
||||||
<script src='https://www.google.com/recaptcha/api.js'></script>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body class="hp">
|
|
||||||
<a id="new"></a>
|
|
||||||
|
|
||||||
<div class="page">
|
|
||||||
|
|
||||||
<header class="header-Base" role="banner">
|
|
||||||
<nav class="header-Nav clearfix" role="navigation">
|
|
||||||
<a href="#!" title="show small screen nav" class="small-Nav">
|
|
||||||
<img src="/img/nav-Icon.png" alt="navigation icon" />
|
|
||||||
</a>
|
|
||||||
<ul class="h-Nav constant-Nav" role="presentation">
|
|
||||||
<%== erb :'_header_links', layout: false %>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<ul class="status-Nav">
|
|
||||||
|
|
||||||
<% if !signed_in? %>
|
|
||||||
<li>
|
|
||||||
<a href="/signin" class="sign-In">Sign In</a>
|
|
||||||
</li>
|
|
||||||
<% else %>
|
|
||||||
<li>
|
|
||||||
<a href="/dashboard" class="sign-In">Dashboard</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="/settings" class="sign-In">Settings</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="/signout" class="sign-In">Sign Out</a>
|
|
||||||
</li>
|
|
||||||
<% end %>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<% if flash.keys.length > 0 %>
|
|
||||||
<div class="alert alert-block txt-Center">
|
|
||||||
<% flash.keys.each do |key| %>
|
|
||||||
<%== flash[key] %>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<div class="int-Logo hp-Logo">
|
<div class="int-Logo hp-Logo">
|
||||||
<a href="/" title="back to home">
|
<a href="/" title="back to home">
|
||||||
<span class="hidden">Neocities.org</span>
|
<span class="hidden">Neocities.org</span>
|
||||||
<img src="/img/cat.png" alt="Neocities.org" />
|
<img src="/img/cat.png" alt="Neocities.org" />
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<section class="header-Intro">
|
<section class="header-Intro">
|
||||||
<h1 class="logo header-Content content">
|
<h1 class="logo header-Content content">
|
||||||
<span class="hidden">Neocities.org</span>
|
<span class="hidden">Neocities.org</span>
|
||||||
<img src="/img/neocities-Logo.png" alt="Neocities.org" />
|
<img src="/img/neocities-Logo.png" alt="Neocities.org" />
|
||||||
</h1>
|
</h1>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<div class="header-Outro">
|
<div class="header-Outro">
|
||||||
<div class="row header-Content content">
|
<div class="row header-Content content">
|
||||||
<div class="col intro">
|
<div class="col intro">
|
||||||
<h2 class="section-header">Create your own free web site, and discover new ones.</h2>
|
<h2 class="section-header">Create your own free web site, and discover new ones.</h2>
|
||||||
<p class="intro-text">
|
<p class="intro-text">
|
||||||
Neocities is a community of <a href="/browse"><%= @sites_count.to_s.reverse.gsub(/...(?=.)/,'\&,').reverse %> sites</a> that are bringing back the lost individual creativity of the web. We provide free hosting and tools that allow anyone to make a web site. Only your imagination is required. Join us!
|
Neocities is a community of <a href="/browse"><%= @sites_count.to_s.reverse.gsub(/...(?=.)/,'\&,').reverse %> sites</a> that are bringing back the lost individual creativity of the web. We provide free hosting and tools that allow anyone to make a web site. Only your imagination is required. Join us!
|
||||||
</p>
|
</p>
|
||||||
<ul class="intro-List">
|
<ul class="intro-List">
|
||||||
<li class="intro-Social">
|
<li class="intro-Social">
|
||||||
<span class="intro-Icon"></span>
|
<span class="intro-Icon"></span>
|
||||||
<h3 class="delta">Share your web creation with the world</h3>
|
<h3 class="delta">Share your web creation with the world</h3>
|
||||||
<p class="base">
|
<p class="base">
|
||||||
Follow your favorite Neocities sites to keep up with all their latest updates. Discover new websites related to your interests using tags, comment on them, and share them. Unlimited creativity, zero ads.
|
Follow your favorite Neocities sites to keep up with all their latest updates. Discover new websites related to your interests using tags, comment on them, and share them. Unlimited creativity, zero ads.
|
||||||
</p>
|
</p>
|
||||||
</li>
|
</li>
|
||||||
<li class="intro-Tools">
|
<li class="intro-Tools">
|
||||||
<span class="intro-Icon"></span>
|
<span class="intro-Icon"></span>
|
||||||
<h3 class="delta">Powerful new features to help you build</h3>
|
<h3 class="delta">Powerful new features to help you build</h3>
|
||||||
<p class="base">
|
<p class="base">
|
||||||
We’ve made it easier to build your website and explore other sites. Neocities features an in-browser HTML editor, custom domain support, faster site loading, easy file uploading, RSS feeds, folder support, and much more.
|
We’ve made it easier to build your website and explore other sites. Neocities features an in-browser HTML editor, custom domain support, faster site loading, easy file uploading, RSS feeds, folder support, and much more.
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col signup-Area">
|
<div class="col signup-Area">
|
||||||
<% if signed_in? %>
|
<% if signed_in? %>
|
||||||
|
|
||||||
<div class="signup-Form">
|
<div class="signup-Form">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<h3 class="gamma txt-Center">Build your Website!</h3>
|
<h3 class="gamma txt-Center">Build your Website!</h3>
|
||||||
</div>
|
|
||||||
<p class="txt-Center">
|
|
||||||
Go to your dashboard to<br> start editing your website!
|
|
||||||
</p>
|
|
||||||
<br />
|
|
||||||
<div class="txt-Center">
|
|
||||||
<a href="/dashboard" class="btn-Action">Get Started</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<% else %>
|
<p class="txt-Center">
|
||||||
<form id="createSiteForm" class="signup-Form" onsubmit="return false">
|
Go to your dashboard to<br> start editing your website!
|
||||||
<input type="hidden" name="csrf_token" value="<%= csrf_token %>">
|
</p>
|
||||||
<fieldset class="content">
|
<br />
|
||||||
<h2 class="gamma">Sign up for free</h2>
|
<div class="txt-Center">
|
||||||
<hr />
|
<a href="/dashboard" class="btn-Action">Get Started</a>
|
||||||
<div class="siteCreateInputs">
|
</div>
|
||||||
<label for="create-Input">User Name</label>
|
</div>
|
||||||
<input type="text" name="prevent_autofill_username" id="prevent_autofill_username" value="" style="position:absolute; top:-2000px; left:-2000px;" />
|
<% else %>
|
||||||
<input type="password" name="prevent_autofill_password" id="prevent_autofill_password" value="" style="position:absolute; top:-2000px; left:-2000px;" />
|
<form id="createSiteForm" class="signup-Form" onsubmit="return false">
|
||||||
<input type="text" class="input-Area" id="create-Input" name="username" placeholder="my-site-name" data-placement="left" data-trigger="manual" autocapitalize="off" autocorrect="off" autocomplete="off" />
|
<input type="hidden" name="csrf_token" value="<%= csrf_token %>">
|
||||||
<label for="create-Input" id="domain-name">.neocities.org</label>
|
<input type="hidden" name="is_education" value="false">
|
||||||
|
<fieldset class="content">
|
||||||
|
<h2 class="gamma">Sign up for free</h2>
|
||||||
|
<hr />
|
||||||
|
<div class="siteCreateInputs">
|
||||||
|
<label for="create-Input">User Name</label>
|
||||||
|
<input type="text" name="prevent_autofill_username" id="prevent_autofill_username" value="" style="position:absolute; top:-2000px; left:-2000px;" />
|
||||||
|
<input type="password" name="prevent_autofill_password" id="prevent_autofill_password" value="" style="position:absolute; top:-2000px; left:-2000px;" />
|
||||||
|
<input type="text" class="input-Area" id="create-Input" name="username" placeholder="my-site-name" data-placement="left" data-trigger="manual" autocapitalize="off" autocorrect="off" autocomplete="off" />
|
||||||
|
<label for="create-Input" id="domain-name">.neocities.org</label>
|
||||||
|
|
||||||
<label for="tags-input">Tags (your interests, site topics)</label>
|
<label for="tags-input">Tags (your interests, site topics)</label>
|
||||||
<input type="text" class="input-Area" id="tags-input" name="new_tags_string" placeholder="art, videogames, food, music, programming, gardening, cats" data-placement="left" data-trigger="manual" autocapitalize="off" autocorrect="off" autocomplete="off" />
|
<input type="text" class="input-Area" id="tags-input" name="new_tags_string" placeholder="art, videogames, food, music, programming, gardening, cats" data-placement="left" data-trigger="manual" autocapitalize="off" autocorrect="off" autocomplete="off" />
|
||||||
|
|
||||||
<div class="col col-50" style="padding-left:0;">
|
<div class="col col-50" style="padding-left:0;">
|
||||||
<label for="password-input">
|
<label for="password-input">
|
||||||
Password
|
Password
|
||||||
</label>
|
</label>
|
||||||
<input type="password" class="input-Area" id="password-input"
|
<input type="password" class="input-Area" id="password-input"
|
||||||
name="password" placeholder="password"
|
name="password" placeholder="password"
|
||||||
data-placement="left" data-trigger="manual"
|
data-placement="left" data-trigger="manual"
|
||||||
autocapitalize="off" autocorrect="off" autocomplete="off" />
|
autocapitalize="off" autocorrect="off" autocomplete="off" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col col-50">
|
<div class="col col-50">
|
||||||
<label for="email-input">
|
<label for="email-input">
|
||||||
Email
|
Email
|
||||||
</label>
|
</label>
|
||||||
<input type="email" class="input-Area"
|
<input type="email" class="input-Area"
|
||||||
id="email-input" name="email"
|
id="email-input" name="email"
|
||||||
placeholder="me@example.com" data-placement="left"
|
placeholder="me@example.com" data-placement="left"
|
||||||
data-trigger="manual" autocapitalize="off"
|
data-trigger="manual" autocapitalize="off"
|
||||||
autocorrect="off" autocomplete="off" />
|
autocorrect="off" autocomplete="off" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col col-50" style="padding-left:0;">
|
<div class="col col-50" style="padding-left:0;">
|
||||||
<label>
|
<label>
|
||||||
Confirm you are human
|
Confirm you are human
|
||||||
</label>
|
</label>
|
||||||
<div id="captcha-input" class="g-recaptcha"
|
<div id="captcha-input" class="g-recaptcha"
|
||||||
data-sitekey="<%= $config['recaptcha_public_key'] %>"
|
data-sitekey="<%= $config['recaptcha_public_key'] %>"
|
||||||
data-theme="dark" data-placement="left" data-trigger="manual">
|
data-theme="dark" data-placement="left" data-trigger="manual">
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col col-50">
|
|
||||||
<div style="margin-top: 15px">
|
|
||||||
<input type="submit" value="Create My Site" class="btn-Action float-Right" />
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
<% end %>
|
<div class="col col-50">
|
||||||
|
<div style="margin-top: 15px">
|
||||||
|
<input type="submit" value="Create My Site" class="btn-Action float-Right" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
|
||||||
</div> <!-- end .col-50 -->
|
<% end %>
|
||||||
|
|
||||||
</div> <!-- end .row -->
|
</div> <!-- end .col-50 -->
|
||||||
|
|
||||||
|
</div> <!-- end .row -->
|
||||||
|
|
||||||
</div> <!-- end .header-Outro -->
|
</div> <!-- end .header-Outro -->
|
||||||
|
|
||||||
|
@ -204,118 +163,118 @@
|
||||||
<main class="content-Base">
|
<main class="content-Base">
|
||||||
|
|
||||||
<div class="section featured-Websites">
|
<div class="section featured-Websites">
|
||||||
<h2 class="delta">Featured Sites</h2>
|
<h2 class="delta">Featured Sites</h2>
|
||||||
<!--
|
<!--
|
||||||
<div class="nav prev"></div>
|
<div class="nav prev"></div>
|
||||||
-->
|
-->
|
||||||
<ul class="website-Gallery hp-Gallery">
|
<ul class="website-Gallery hp-Gallery">
|
||||||
<% Site.featured.each do |site| %>
|
<% Site.featured.each do |site| %>
|
||||||
<li>
|
<li>
|
||||||
<a href="<%= site.uri %>" title="<%= site.title %>" target="_blank">
|
<a href="<%= site.uri %>" title="<%= site.title %>" target="_blank">
|
||||||
<img src="<%= site.screenshot_url 'index.html', '210x158' %>" class="neo-SS" alt="<%= site.title %>" />
|
<img src="<%= site.screenshot_url 'index.html', '210x158' %>" class="neo-SS" alt="<%= site.title %>" />
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<% end %>
|
<% end %>
|
||||||
</ul>
|
</ul>
|
||||||
<!--
|
<!--
|
||||||
<div class="nav next"></div>
|
<div class="nav next"></div>
|
||||||
-->
|
-->
|
||||||
<a href="/browse" class="btn-Action float-Right">Browse all sites</a>
|
<a href="/browse" class="btn-Action float-Right">Browse all sites</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="section previews">
|
<div class="section previews">
|
||||||
<h2 class="delta">Our mission: To make the web fun again by giving you back control of how you express yourself online.</h2>
|
<h2 class="delta">Our mission: To make the web fun again by giving you back control of how you express yourself online.</h2>
|
||||||
|
|
||||||
<div class="row content">
|
<div class="row content">
|
||||||
<div class="col col-50"><div class="screenshot" style="background-image:url(/img/front-editor-screenshot.png)"></div></div>
|
<div class="col col-50"><div class="screenshot" style="background-image:url(/img/front-editor-screenshot.png)"></div></div>
|
||||||
<div class="col col-50 text">
|
<div class="col col-50 text">
|
||||||
<h3><i class="fa fa-edit"></i> HTML editor, right in your browser</h3>
|
<h3><i class="fa fa-edit"></i> HTML editor, right in your browser</h3>
|
||||||
<p>No tools needed. With our easy-to-use HTML editor, you're ready to start building your awesome web site right now.</p>
|
<p>No tools needed. With our easy-to-use HTML editor, you're ready to start building your awesome web site right now.</p>
|
||||||
<p>If you'd rather use your favorite desktop editor, no problem. Uploading files is as easy as drag-n-drop.</p>
|
<p>If you'd rather use your favorite desktop editor, no problem. Uploading files is as easy as drag-n-drop.</p>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row content right">
|
|
||||||
<div class="col col-50"><div class="screenshot" style="background-image:url(/img/front-browse-screenshot.png);"></div></div>
|
|
||||||
<div class="col col-50 text">
|
|
||||||
<h3><i class="fa fa-globe"></i> It's time to bring back web surfing.</h3>
|
|
||||||
<p>All Neocities sites are viewable in our <a href="/browse">website gallery</a>. And it's easy to browse sites with our optional surf bar.</p>
|
|
||||||
<p>Using tags (our version of Web Rings) you can easily discover new sites related to your interests.</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row content">
|
|
||||||
<div class="col col-50"><div class="screenshot" style="background-image:url(/img/front-follow-screenshot.png);"></div></div>
|
|
||||||
<div class="col col-50 text">
|
|
||||||
<h3><i class="fa fa-user-plus"></i> Follow your favorite Neocities sites</h3>
|
|
||||||
<p>Keep track of all your favorite sites by following them. Any changes to the sites automatically show up in your news feed. You'll also see what sites they follow.</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row content right">
|
|
||||||
<div class="col col-50"><div class="screenshot" style="background-image:url(/img/front-comment-screenshot.png);"></div></div>
|
|
||||||
<div class="col col-50 text">
|
|
||||||
<h3><i class="fa fa-comments-o"></i> Web creativity plus community</h3>
|
|
||||||
<p>Interact with your favorite web builders by posting comments, and sharing their sites on your social network of choice.</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<section class="section features">
|
<div class="row content right">
|
||||||
<div class="row">
|
<div class="col col-50"><div class="screenshot" style="background-image:url(/img/front-browse-screenshot.png);"></div></div>
|
||||||
<div class="col col-50">
|
<div class="col col-50 text">
|
||||||
|
<h3><i class="fa fa-globe"></i> It's time to bring back web surfing.</h3>
|
||||||
|
<p>All Neocities sites are viewable in our <a href="/browse">website gallery</a>. And it's easy to browse sites with our optional surf bar.</p>
|
||||||
|
<p>Using tags (our version of Web Rings) you can easily discover new sites related to your interests.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row content">
|
||||||
|
<div class="col col-50"><div class="screenshot" style="background-image:url(/img/front-follow-screenshot.png);"></div></div>
|
||||||
|
<div class="col col-50 text">
|
||||||
|
<h3><i class="fa fa-user-plus"></i> Follow your favorite Neocities sites</h3>
|
||||||
|
<p>Keep track of all your favorite sites by following them. Any changes to the sites automatically show up in your news feed. You'll also see what sites they follow.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row content right">
|
||||||
|
<div class="col col-50"><div class="screenshot" style="background-image:url(/img/front-comment-screenshot.png);"></div></div>
|
||||||
|
<div class="col col-50 text">
|
||||||
|
<h3><i class="fa fa-comments-o"></i> Web creativity plus community</h3>
|
||||||
|
<p>Interact with your favorite web builders by posting comments, and sharing their sites on your social network of choice.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<section class="section features">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col col-50">
|
||||||
|
<h3>
|
||||||
|
<i class="fa fa-eye-slash"></i>Zero advertising
|
||||||
|
</h3>
|
||||||
|
<p>
|
||||||
|
Neocities will never sell your personal data or embed advertising on your site. Instead, we are funded directly by our community through <a href="/plan">supporter plans</a> and <a href="/donate">donations</a>. This allows us to base all our decisions on making the best possible web building experience for you, rather than on appeasing ad companies.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="col col-50">
|
||||||
|
<h3><i class="fa fa-tachometer"></i>More space, speed, and security</h3>
|
||||||
|
<p>Neocities now uses distributed, globally-cached web servers in datacenters all over the world to serve your site. Whether it’s your personal home page or a busy professional site, your site loads fast. And if you need more space, <a href="/plan">we've got you covered</a>. We also provide Snowden-grade SSL cryptography on all sites, preventing snoops from seeing what you browse.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col col-50">
|
||||||
|
<h3><i class="fa fa-wrench"></i>Developer tools</h3>
|
||||||
|
<p>We have an in-browser HTML editor, easy file uploading, WebDAV publishing, support for custom domains, RSS feeds for every site, powerful APIs for building developer applications, and much more!</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col col-50">
|
||||||
|
<h3><i class="fa fa-university"></i>Open Company</h3>
|
||||||
|
<p>Neocities is a member of the <a href="http://www.opencompany.org/" target="_blank">Open Company Initative</a>, working to help improve trustability in tech companies. We <a href="https://github.com/neocities" target="_blank">publish</a> the code that powers the site for inspection, and strive for openness in our company's operations. We want to win your trust—not lock you in.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col col-100">
|
||||||
|
<div class="row press">
|
||||||
|
<a href="http://www.wired.com/2013/07/neocities/" class="logo wired"></a>
|
||||||
|
<a href="http://www.fastcodesign.com/3037028/why-the-internet-is-time-traveling-back-to-1994" class="logo fastco"></a>
|
||||||
|
<a href="http://motherboard.vice.com/blog/neocities-is-recreating-the-garish-web-10-creativity-of-geocities" class="logo vice"></a>
|
||||||
|
<a href="http://arstechnica.com/tech-policy/2014/05/web-host-gives-fcc-a-28-8kbps-slow-lane-in-net-neutrality-protest/" class="logo ars"></a>
|
||||||
|
<!--<a href="/press" class="more">See all press »</a>-->
|
||||||
|
</div>
|
||||||
|
<div class="row quote">
|
||||||
<h3>
|
<h3>
|
||||||
<i class="fa fa-eye-slash"></i>Zero advertising
|
"Designed as a 21st century reincarnation of GeoCities, Neocities lets you make your own site for free. <strong>And it just might spark a renaissance of creativity online.</strong>"
|
||||||
|
<br />
|
||||||
|
<cite>— Matthew Guay, <a href="http://web.appstorm.net/reviews/web-dev/neocities-the-free-place-to-code-your-own-site-from-scratch" target="_blank">AppStorm</a>. <a href="/press">View All Press »</a></cite>
|
||||||
</h3>
|
</h3>
|
||||||
<p>
|
|
||||||
Neocities will never sell your personal data or embed advertising on your site. Instead, we are funded directly by our community through <a href="/plan">supporter plans</a> and <a href="/donate">donations</a>. This allows us to base all our decisions on making the best possible web building experience for you, rather than on appeasing ad companies.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="col col-50">
|
|
||||||
<h3><i class="fa fa-tachometer"></i>More space, speed, and security</h3>
|
|
||||||
<p>Neocities now uses distributed, globally-cached web servers in datacenters all over the world to serve your site. Whether it’s your personal home page or a busy professional site, your site loads fast. And if you need more space, <a href="/plan">we've got you covered</a>. We also provide Snowden-grade SSL cryptography on all sites, preventing snoops from seeing what you browse.</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
<div class="row">
|
<% # erb :'plan/_pricing' %>
|
||||||
<div class="col col-50">
|
|
||||||
<h3><i class="fa fa-wrench"></i>Developer tools</h3>
|
|
||||||
<p>We have an in-browser HTML editor, easy file uploading, WebDAV publishing, support for custom domains, RSS feeds for every site, powerful APIs for building developer applications, and much more!</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col col-50">
|
<section class="section bottom-signup">
|
||||||
<h3><i class="fa fa-university"></i>Open Company</h3>
|
<h2>What are you waiting for? <a href="#new">Start building your web site now!</a></h2>
|
||||||
<p>Neocities is a member of the <a href="http://www.opencompany.org/" target="_blank">Open Company Initative</a>, working to help improve trustability in tech companies. We <a href="https://github.com/neocities" target="_blank">publish</a> the code that powers the site for inspection, and strive for openness in our company's operations. We want to win your trust—not lock you in.</p>
|
</section>
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col col-100">
|
|
||||||
<div class="row press">
|
|
||||||
<a href="http://www.wired.com/2013/07/neocities/" class="logo wired"></a>
|
|
||||||
<a href="http://www.fastcodesign.com/3037028/why-the-internet-is-time-traveling-back-to-1994" class="logo fastco"></a>
|
|
||||||
<a href="http://motherboard.vice.com/blog/neocities-is-recreating-the-garish-web-10-creativity-of-geocities" class="logo vice"></a>
|
|
||||||
<a href="http://arstechnica.com/tech-policy/2014/05/web-host-gives-fcc-a-28-8kbps-slow-lane-in-net-neutrality-protest/" class="logo ars"></a>
|
|
||||||
<!--<a href="/press" class="more">See all press »</a>-->
|
|
||||||
</div>
|
|
||||||
<div class="row quote">
|
|
||||||
<h3>
|
|
||||||
"Designed as a 21st century reincarnation of GeoCities, Neocities lets you make your own site for free. <strong>And it just might spark a renaissance of creativity online.</strong>"
|
|
||||||
<br />
|
|
||||||
<cite>— Matthew Guay, <a href="http://web.appstorm.net/reviews/web-dev/neocities-the-free-place-to-code-your-own-site-from-scratch" target="_blank">AppStorm</a>. <a href="/press">View All Press »</a></cite>
|
|
||||||
</h3>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<% # erb :'plan/_pricing' %>
|
|
||||||
|
|
||||||
<section class="section bottom-signup">
|
|
||||||
<h2>What are you waiting for? <a href="#new">Start building your web site now!</a></h2>
|
|
||||||
</section>
|
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<footer class="footer-Base" role="contentinfo">
|
<footer class="footer-Base" role="contentinfo">
|
||||||
|
@ -356,47 +315,8 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<%== erb :'_footer', layout: false %>
|
<%== erb :'_footer', layout: false %>
|
||||||
</footer>
|
</footer>
|
||||||
|
</div>
|
||||||
</div>
|
<%== erb :'_index_signup_script', layout: false %>
|
||||||
<script src="/js/app.min.js"></script>
|
</body>
|
||||||
<script src="/js/bootstrap.min.js"></script>
|
|
||||||
<script>
|
|
||||||
|
|
||||||
$('#createSiteForm').on('submit', function(obj) {
|
|
||||||
$.post('/create_validate_all', $(obj.target).serialize(), function(errors) {
|
|
||||||
if(errors.length == 0) {
|
|
||||||
$.post('/create', $('#createSiteForm').serialize(), function(res) {
|
|
||||||
window.location.href = '/welcome'
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
for(var i=0; i<errors.length;i++) {
|
|
||||||
if(errors[i][0] == 'captcha') {
|
|
||||||
var captchaDiv = $('#captcha-input')
|
|
||||||
captchaDiv.attr('data-original-title', errors[i][1])
|
|
||||||
captchaDiv.tooltip('show')
|
|
||||||
} else {
|
|
||||||
var ele = $('input[name='+errors[i][0]+']')
|
|
||||||
ele.attr('data-original-title', errors[i][1])
|
|
||||||
ele.tooltip('show')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
$('input[type=text],input[type=password]').on('change focusout', function(obj) {
|
|
||||||
$.post('/create_validate', {field: obj.target.name, value: obj.target.value, csrf_token: '<%= csrf_token %>'}, function(res) {
|
|
||||||
if(res.result == 'ok') {
|
|
||||||
return $(obj.target).tooltip('hide')
|
|
||||||
}
|
|
||||||
|
|
||||||
$(obj.target).attr('data-original-title', res.error)
|
|
||||||
$(obj.target).tooltip('show')
|
|
||||||
})
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
45
views/index_layout.erb
Normal file
45
views/index_layout.erb
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
<!doctype html>
|
||||||
|
<!--[if IE 8 ]><html lang="en" class="ieAll ie8"><![endif]-->
|
||||||
|
<!--[if IE 9 ]><html lang="en" class="ieAll ie9"><![endif]-->
|
||||||
|
<!--[if (gt IE 9)|!(IE)]><!--><html lang="en"><!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||||
|
|
||||||
|
<title>Neocities: Create your free website now!</title>
|
||||||
|
<meta itemprop="name" content="Neocities.org" />
|
||||||
|
<meta itemprop="description" content="Create your own free home page, and do whatever you want with it." />
|
||||||
|
<meta name="description" content="Neocities is the new Geocities. Create your own free home page, and do whatever you want with it." />
|
||||||
|
<meta name="keywords" content="free website, html, css, learn to code, free hosting, build a website, create a web page" />
|
||||||
|
|
||||||
|
<link rel="canonical" href="//neocities.org" />
|
||||||
|
|
||||||
|
<meta property="og:title" content="Neocities"/>
|
||||||
|
<meta property="og:site_name" content="Neocities | neocities.org"/>
|
||||||
|
<meta property="og:type" content="website"/>
|
||||||
|
<meta property="og:image" content=""/>
|
||||||
|
<meta property="og:url" content="//www.neocities.org"/>
|
||||||
|
<meta property="og:description" content="Neocities is the new Geocities. Create your own free home page, and do whatever you want with it."/>
|
||||||
|
|
||||||
|
<link rel="shortcut icon" type="image/ico" href="/favicon.ico?v=4" />
|
||||||
|
<link rel="apple-touch-icon-precomposed" href="#apple-icon-144.png" />
|
||||||
|
<link rel="apple-touch-startup-image" href="#startup.png" />
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Mobile Meta -->
|
||||||
|
<meta name="HandheldFriendly" content="True" />
|
||||||
|
<meta name="MobileOptimized" content="320" />
|
||||||
|
<meta name="viewport" content="width=device-width, minimum-scale=1, initial-scale=1" />
|
||||||
|
|
||||||
|
<link href="/css/neo.css" rel="stylesheet" type="text/css" media="all"/>
|
||||||
|
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script type="text/javascript" src="/js/html5.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
|
||||||
|
<script src="/js/jquery-1.11.0.min.js"></script>
|
||||||
|
<script src='https://www.google.com/recaptcha/api.js'></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<%== yield %>
|
||||||
|
|
||||||
|
</html>
|
Loading…
Add table
Reference in a new issue