station 0.0.105 → 0.0.110
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/nexmo-developer +7 -0
- data/lib/nexmo_developer/Gemfile +10 -25
- data/lib/nexmo_developer/Gemfile.lock +131 -147
- data/lib/nexmo_developer/app/assets/config/manifest.js +1 -4
- data/lib/nexmo_developer/app/assets/javascripts/application.js +2 -7
- data/lib/nexmo_developer/app/assets/stylesheets/application.css +1 -1
- data/lib/nexmo_developer/app/controllers/static_controller.rb +3 -11
- data/lib/nexmo_developer/app/helpers/application_helper.rb +2 -0
- data/lib/nexmo_developer/app/models/tutorial.rb +10 -12
- data/lib/nexmo_developer/app/models/tutorial/prerequisite.rb +3 -1
- data/lib/nexmo_developer/app/models/tutorial/task.rb +24 -11
- data/lib/nexmo_developer/app/services/translator/files_list_coordinator.rb +90 -0
- data/lib/nexmo_developer/app/services/translator/smartling/api/download_file.rb +6 -1
- data/lib/nexmo_developer/app/services/translator/smartling/api/file_status.rb +7 -1
- data/lib/nexmo_developer/app/services/translator/utils.rb +1 -1
- data/lib/nexmo_developer/app/views/admin/feedbacks/_steps.html.erb +1 -1
- data/lib/nexmo_developer/app/views/layouts/partials/_footer.html.erb +4 -4
- data/lib/nexmo_developer/app/views/layouts/partials/_head.html.erb +4 -5
- data/lib/nexmo_developer/app/views/layouts/partials/_header.html.erb +3 -3
- data/lib/nexmo_developer/app/views/layouts/partials/_improve_this_page.html.erb +1 -1
- data/lib/nexmo_developer/app/views/static/_products.html.erb +20 -17
- data/lib/nexmo_developer/app/views/static/default_landing/partials/_join_slack.html.erb +1 -1
- data/lib/nexmo_developer/app/views/static/landing.html.erb +8 -8
- data/lib/nexmo_developer/app/views/static/{robots.txt.erb → robots.text.erb} +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/fonts/Lato-Black.woff +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/fonts/Lato-Black.woff2 +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/fonts/Lato-Regular.woff +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/fonts/Lato-Regular.woff2 +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/fonts/Lato-Semibold.woff +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/fonts/Lato-Semibold.woff2 +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/fonts/icomoon.eot +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/fonts/icomoon.json +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/fonts/icomoon.svg +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/fonts/icomoon.ttf +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/fonts/icomoon.woff +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/images/.keep +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/images/logo@3x.png +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/images/logo_vonage.png +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/images/nexmo-developer-logo.svg +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/images/nexmo-logo-collapsed.svg +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/images/nexmo-vonage-white.svg +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/images/posters/chatapp.jpg +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/images/posters/chatapp_small.png +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/images/posters/nexmo.jpg +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/images/posters/numberinsight.jpg +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/images/posters/numberinsight_small.png +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/images/posters/sms.jpg +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/images/posters/sms_small.png +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/images/posters/verify.jpg +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/images/posters/verify_small.png +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/images/posters/voice.jpg +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/images/posters/voice_small.png +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/images/select-dropdown.png +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/images/slack.svg +0 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/images/themes/ea/topography.png +0 -0
- data/lib/nexmo_developer/app/webpacker/javascript/code_snippet_events/index.js +23 -85
- data/lib/nexmo_developer/app/webpacker/javascript/volta/volta.js +1 -1
- data/lib/nexmo_developer/app/webpacker/javascript/volta_tabbed_examples/index.js +23 -3
- data/lib/nexmo_developer/app/webpacker/packs/active_admin.js +5 -0
- data/lib/nexmo_developer/app/webpacker/packs/active_admin/print.scss +2 -0
- data/lib/nexmo_developer/app/webpacker/packs/application.js +12 -0
- data/lib/nexmo_developer/app/{assets → webpacker}/stylesheets/active_admin.scss +4 -4
- data/lib/nexmo_developer/app/webpacker/stylesheets/application.scss +0 -1
- data/lib/nexmo_developer/app/webpacker/stylesheets/custom/_core.scss +1 -1
- data/lib/nexmo_developer/app/webpacker/stylesheets/objects/_icons.scss +1 -0
- data/lib/nexmo_developer/app/webpacker/stylesheets/objects/_navigation.scss +1 -2
- data/lib/nexmo_developer/config/environments/development.rb +1 -1
- data/lib/nexmo_developer/config/environments/production.rb +8 -1
- data/lib/nexmo_developer/config/initializers/active_admin.rb +3 -0
- data/lib/nexmo_developer/config/initializers/assets.rb +0 -2
- data/lib/nexmo_developer/config/webpack/environment.js +10 -0
- data/lib/nexmo_developer/config/webpack/plugins/jquery.js +7 -0
- data/lib/nexmo_developer/lib/tasks/smartling.rake +7 -0
- data/lib/nexmo_developer/nexmo_developer.rb +1 -4
- data/lib/nexmo_developer/version.rb +1 -1
- data/package.json +25 -17
- data/station.gemspec +5 -12
- data/yarn.lock +1510 -1021
- metadata +159 -239
- data/lib/nexmo_developer/app/assets/fonts/nexmo-developer.json +0 -36483
- data/lib/nexmo_developer/app/assets/javascripts/active_admin.js.coffee +0 -1
- data/lib/nexmo_developer/app/assets/javascripts/stats.js +0 -14
- data/lib/nexmo_developer/app/assets/regex/matching_chars.rb +0 -1
- data/lib/nexmo_developer/app/assets/regex/sequence_diagram_regex.rb +0 -1
- data/lib/nexmo_developer/app/assets/regex/stats_regex.rb +0 -1
- data/lib/nexmo_developer/app/assets/regex/webfont_regex.rb +0 -1
- data/lib/nexmo_developer/app/views/slack/join.html.erb +0 -25
- data/lib/nexmo_developer/app/views/static/_community.html.erb +0 -24
- data/lib/nexmo_developer/app/views/static/_dotnet.html.erb +0 -26
- data/lib/nexmo_developer/app/views/static/_slack.html.erb +0 -2
- data/lib/nexmo_developer/app/views/static/_xwithy.html.erb +0 -33
- data/lib/nexmo_developer/app/views/static/podcast.html.erb +0 -40
- data/lib/nexmo_developer/app/webpacker/stylesheets/objects/_building-block.scss +0 -32
- data/lib/nexmo_developer/vendor/assets/javascripts/jquery-scrolltofixed.js +0 -567
- data/lib/nexmo_developer/vendor/assets/javascripts/mermaid.js +0 -49
- data/lib/nexmo_developer/vendor/assets/javascripts/underscore.js +0 -5
- data/lib/nexmo_developer/vendor/assets/javascripts/volta/addons/jquery.tablesorter.js +0 -1031
- data/lib/nexmo_developer/vendor/assets/javascripts/volta/addons/prism.js +0 -22
- data/lib/nexmo_developer/vendor/assets/javascripts/volta/components/side-navigation/volta.menu.js +0 -377
- data/lib/nexmo_developer/vendor/assets/javascripts/volta/components/volta.accordion.js +0 -249
- data/lib/nexmo_developer/vendor/assets/javascripts/volta/components/volta.dropdown.js +0 -145
- data/lib/nexmo_developer/vendor/assets/javascripts/volta/components/volta.flash.js +0 -175
- data/lib/nexmo_developer/vendor/assets/javascripts/volta/components/volta.modal.js +0 -312
- data/lib/nexmo_developer/vendor/assets/javascripts/volta/components/volta.tab.js +0 -203
- data/lib/nexmo_developer/vendor/assets/javascripts/volta/components/volta.tooltip.js +0 -71
- data/lib/nexmo_developer/vendor/assets/javascripts/volta/popper.min.js +0 -5
- data/lib/nexmo_developer/vendor/assets/javascripts/volta/svgxuse.min.js +0 -12
- data/lib/nexmo_developer/vendor/assets/javascripts/volta/tooltip.min.js +0 -5
- data/lib/nexmo_developer/vendor/assets/javascripts/volta/volta.core.js +0 -238
- data/lib/nexmo_developer/vendor/assets/javascripts/volta/volta.js +0 -2141
- data/lib/nexmo_developer/vendor/assets/javascripts/volta/volta.min.js +0 -1
@@ -1,3 +1,4 @@
|
|
1
|
+
|
1
2
|
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
3
|
// listed below.
|
3
4
|
//
|
@@ -10,10 +11,4 @@
|
|
10
11
|
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
|
11
12
|
// about supported directives.
|
12
13
|
//
|
13
|
-
//= require
|
14
|
-
//= require jquery-scrolltofixed
|
15
|
-
//= require clipboard
|
16
|
-
//= require underscore
|
17
|
-
//= require gmaps/google
|
18
|
-
//= require javascripts/nexmo-oas-renderer
|
19
|
-
//= require mermaid
|
14
|
+
//= require javascripts/nexmo-oas-renderer
|
@@ -1 +1 @@
|
|
1
|
-
//= require stylesheets/nexmo-oas-renderer
|
1
|
+
//= require stylesheets/nexmo-oas-renderer
|
@@ -113,17 +113,9 @@ class StaticController < ApplicationController
|
|
113
113
|
end
|
114
114
|
|
115
115
|
def robots
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
def podcast
|
120
|
-
# Get URL and split the / to retrieve the landing page name
|
121
|
-
yaml_name = request.fullpath.split('/')[1]
|
122
|
-
|
123
|
-
# Load the YAML for that particular page
|
124
|
-
@content = YAML.load_file("#{Rails.root}/config/landing_pages/#{yaml_name}.yml")
|
125
|
-
|
126
|
-
render layout: 'landing'
|
116
|
+
respond_to do |format|
|
117
|
+
format.any { render plain: 'robots', layout: false, content_type: 'text/plain' }
|
118
|
+
end
|
127
119
|
end
|
128
120
|
|
129
121
|
def team
|
@@ -84,20 +84,18 @@ class Tutorial
|
|
84
84
|
subtasks[current_task_index - 1]
|
85
85
|
end
|
86
86
|
|
87
|
+
def tasks
|
88
|
+
@tasks ||= (yaml['tasks'] || []).map do |t|
|
89
|
+
Task.make_from(
|
90
|
+
name: t,
|
91
|
+
code_language: code_language,
|
92
|
+
current_step: current_step
|
93
|
+
)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
87
97
|
def subtasks
|
88
98
|
@subtasks ||= begin
|
89
|
-
tasks = []
|
90
|
-
|
91
|
-
(yaml['tasks'] || []).map do |t|
|
92
|
-
tasks.push(
|
93
|
-
Task.make_from(
|
94
|
-
name: t,
|
95
|
-
code_language: code_language,
|
96
|
-
current_step: current_step
|
97
|
-
)
|
98
|
-
)
|
99
|
-
end
|
100
|
-
|
101
99
|
tasks.unshift(prerequisite_task)
|
102
100
|
tasks.unshift(introduction_task)
|
103
101
|
tasks.push(conclusion_task)
|
@@ -1,11 +1,24 @@
|
|
1
1
|
class Tutorial::Task
|
2
|
-
attr_reader :name, :
|
2
|
+
attr_reader :name, :code_language, :current_step
|
3
3
|
|
4
|
-
|
4
|
+
delegate :yaml, :path, to: :@file_loader
|
5
|
+
|
6
|
+
def initialize(name:, current_step:, code_language: nil, title: nil, description: nil)
|
5
7
|
@name = name
|
6
8
|
@title = title
|
7
9
|
@description = description
|
10
|
+
@code_language = code_language
|
8
11
|
@current_step = current_step
|
12
|
+
@file_loader = load_file!
|
13
|
+
end
|
14
|
+
|
15
|
+
def load_file!
|
16
|
+
Tutorial::FileLoader.new(
|
17
|
+
root: Tutorial.task_content_path,
|
18
|
+
doc_name: @name,
|
19
|
+
code_language: @code_language,
|
20
|
+
format: 'md'
|
21
|
+
)
|
9
22
|
end
|
10
23
|
|
11
24
|
def active?
|
@@ -13,17 +26,9 @@ class Tutorial::Task
|
|
13
26
|
end
|
14
27
|
|
15
28
|
def self.make_from(name:, code_language:, current_step:)
|
16
|
-
file_loader = Tutorial::FileLoader.new(
|
17
|
-
root: Tutorial.task_content_path,
|
18
|
-
doc_name: name,
|
19
|
-
code_language: code_language,
|
20
|
-
format: 'md'
|
21
|
-
)
|
22
|
-
|
23
29
|
new(
|
24
30
|
name: name,
|
25
|
-
|
26
|
-
description: file_loader.yaml['description'],
|
31
|
+
code_language: code_language,
|
27
32
|
current_step: current_step
|
28
33
|
)
|
29
34
|
end
|
@@ -42,4 +47,12 @@ class Tutorial::Task
|
|
42
47
|
def hash
|
43
48
|
name.hash ^ title.hash ^ description.hash ^ current_step.hash
|
44
49
|
end
|
50
|
+
|
51
|
+
def title
|
52
|
+
@title || yaml['title']
|
53
|
+
end
|
54
|
+
|
55
|
+
def description
|
56
|
+
@description || yaml['description']
|
57
|
+
end
|
45
58
|
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
module Translator
|
2
|
+
class FilesListCoordinator
|
3
|
+
def self.call(attrs = {})
|
4
|
+
new(attrs).call
|
5
|
+
end
|
6
|
+
|
7
|
+
def initialize(days:)
|
8
|
+
@days = days
|
9
|
+
end
|
10
|
+
|
11
|
+
def call
|
12
|
+
process_files(files)
|
13
|
+
end
|
14
|
+
|
15
|
+
def files
|
16
|
+
@files ||= `(git fetch origin master:master) && (git log --since="#{@days} days" --name-only --oneline --diff-filter=ACM --pretty=format: master #{Rails.configuration.docs_base_path}/_documentation/en #{Rails.configuration.docs_base_path}/_tutorials/en #{Rails.configuration.docs_base_path}/_use_cases/en) | uniq | awk 'NF'`.split("\n")
|
17
|
+
end
|
18
|
+
|
19
|
+
def process_files(files)
|
20
|
+
files.each_with_object([]) do |file, list|
|
21
|
+
if file.include?('_documentation')
|
22
|
+
list << file if translatable_doc_file?(file)
|
23
|
+
elsif file.include?('_use_cases')
|
24
|
+
list << file if translatable_use_case_file?(file)
|
25
|
+
elsif file.include?('_tutorials')
|
26
|
+
list << file if translatable_tutorial_file?(file)
|
27
|
+
else
|
28
|
+
raise ArgumentError, "The following file did not match documentation, use cases or tutorials: #{file}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def translatable_doc_file?(file)
|
34
|
+
return nil unless File.exist?("#{Rails.configuration.docs_base_path}/#{file}")
|
35
|
+
|
36
|
+
allowed_products.any? do |product|
|
37
|
+
product['path'].include?(file.split('/')[2])
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def translatable_use_case_file?(file)
|
42
|
+
return nil unless File.exist?("#{Rails.configuration.docs_base_path}/#{file}")
|
43
|
+
|
44
|
+
allowed_products.any? do |product|
|
45
|
+
use_case_product(file).include?(product['path'])
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def use_case_product(file)
|
50
|
+
@use_case_product = YAML.safe_load(File.read("#{Rails.configuration.docs_base_path}/#{file}"))['products']
|
51
|
+
|
52
|
+
@use_case_product
|
53
|
+
end
|
54
|
+
|
55
|
+
def translatable_tutorial_file?(file)
|
56
|
+
return nil unless File.exist?("#{Rails.configuration.docs_base_path}/#{file}")
|
57
|
+
|
58
|
+
allowed_tutorial_files.any? do |tutorial|
|
59
|
+
tutorial.include?(file)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def allowed_products
|
64
|
+
@allowed_products ||= YAML.safe_load(File.read("#{Rails.configuration.docs_base_path}/config/products.yml"))['products'].select { |product| product['translate'] == true }
|
65
|
+
end
|
66
|
+
|
67
|
+
def allowed_tutorial_files
|
68
|
+
file_names = []
|
69
|
+
tutorials_list = []
|
70
|
+
|
71
|
+
TutorialList.all.each do |item|
|
72
|
+
allowed_products.each do |product|
|
73
|
+
tutorials_list << item if item.products.to_s.include?(product['path'])
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
tutorials_list.each do |item|
|
78
|
+
item.tutorial.prerequisites&.each do |prereq|
|
79
|
+
file_names << prereq.path
|
80
|
+
end
|
81
|
+
|
82
|
+
item.tutorial.tasks&.each do |task|
|
83
|
+
file_names << task.path
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
file_names.uniq
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -18,7 +18,12 @@ module Translator
|
|
18
18
|
def uri
|
19
19
|
@uri ||= begin
|
20
20
|
uri = URI("https://api.smartling.com/files-api/v2/projects/#{@project_id}/locales/#{@locale_id}/file")
|
21
|
-
uri.query = URI.encode_www_form(
|
21
|
+
uri.query = URI.encode_www_form(
|
22
|
+
{
|
23
|
+
'fileUri' => @file_uri,
|
24
|
+
'retrievalType' => 'published',
|
25
|
+
}
|
26
|
+
)
|
22
27
|
uri
|
23
28
|
end
|
24
29
|
end
|
@@ -31,7 +31,13 @@ module Translator
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def return_value
|
34
|
-
@return_value ||=
|
34
|
+
@return_value ||= begin
|
35
|
+
total_word_count = response_body['response']['data']['totalWordCount']
|
36
|
+
total_string_count = response_body['response']['data']['totalStringCount']
|
37
|
+
response_body['response']['data']['items'].map do |item|
|
38
|
+
item['localeId'] if total_word_count == item['completedWordCount'] && total_string_count == item['completedStringCount']
|
39
|
+
end.compact
|
40
|
+
end
|
35
41
|
end
|
36
42
|
|
37
43
|
def to_s
|
@@ -35,7 +35,7 @@ module Translator
|
|
35
35
|
dir_path = pathname.dirname.to_s == '.' ? '' : "/#{pathname.dirname}"
|
36
36
|
"#{Rails.configuration.docs_base_path}/config/tutorials/#{locale}#{dir_path}"
|
37
37
|
elsif filename.starts_with? '_tutorials'
|
38
|
-
pathname = Pathname.new(filename.gsub(
|
38
|
+
pathname = Pathname.new(filename.gsub('_tutorials/', ''))
|
39
39
|
dir_path = pathname.dirname.to_s == '.' ? '' : "/#{pathname.dirname}"
|
40
40
|
"#{Rails.configuration.docs_base_path}/_tutorials/#{locale}#{dir_path}"
|
41
41
|
else
|
@@ -35,7 +35,7 @@
|
|
35
35
|
<% step['fields'].each_with_index do |field, field_index| %>
|
36
36
|
<div>
|
37
37
|
<b><%= field['label'] %>:</b>
|
38
|
-
<small><%= feedback.steps[step_index][field['name']
|
38
|
+
<small><%= feedback.steps[step_index].try(:[], field['name']) %></small>
|
39
39
|
</div>
|
40
40
|
<% end %>
|
41
41
|
<% end %>
|
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
|
8
8
|
<div class="Nxd-logo Vlt-white" id="footer-logo">
|
9
|
-
<a href="/"
|
9
|
+
<a href="/" class="Nxd-logo__image">
|
10
10
|
<%= image_tag info[:logo_path], alt: info[:logo_alt] %>
|
11
11
|
</a>
|
12
12
|
<hr class="Nxd-product__separator">
|
@@ -17,7 +17,7 @@
|
|
17
17
|
</div>
|
18
18
|
|
19
19
|
<% if info[:status] %>
|
20
|
-
<a href=<%= info[:status]['path'] %> target="_blank" class="Vlt-badge-combined">
|
20
|
+
<a href=<%= info[:status]['path'] %> target="_blank" class="Vlt-badge-combined" rel="noopener">
|
21
21
|
<span class="Vlt-badge Vlt-white Nxd-api-badge"><%= info[:status]['text'] %></span><span class="Vlt-badge Vlt-badge--purple Nxd-api-status">Loading</span>
|
22
22
|
</a>
|
23
23
|
<% end %>
|
@@ -25,7 +25,7 @@
|
|
25
25
|
<% if info[:social_links] %>
|
26
26
|
<div id="footer-social-links">
|
27
27
|
<% info[:social_links].each do |target, url| %>
|
28
|
-
<a href=<%= url %> class="footer-link" target="_blank"><i class="icon icon-<%= target %>"></i></a>
|
28
|
+
<a href=<%= url %> class="footer-link" target="_blank" rel="noopener" title="<%= target %>"><i class="icon icon-<%= target %>"></i></a>
|
29
29
|
<% end %>
|
30
30
|
</div>
|
31
31
|
<% end %>
|
@@ -43,7 +43,7 @@
|
|
43
43
|
<div id="footer-support">
|
44
44
|
<h5>Support</h5>
|
45
45
|
<% info[:support_links].each do |name, url| %>
|
46
|
-
<a href=<%= Footer.support_link(url) %> target="_blank"><%= Footer.support_link_text(name) %></a>
|
46
|
+
<a href=<%= Footer.support_link(url) %> target="_blank" rel="noopener"><%= Footer.support_link_text(name) %></a>
|
47
47
|
<% end %>
|
48
48
|
</div>
|
49
49
|
</div>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<% head = Head.new %>
|
1
|
+
<% head = Head.new(@frontmatter) %>
|
2
2
|
|
3
3
|
<head>
|
4
4
|
<meta charset="utf-8" />
|
@@ -73,7 +73,7 @@
|
|
73
73
|
|
74
74
|
<link rel="canonical" href="<%= canonical_url %>">
|
75
75
|
|
76
|
-
<%= javascript_include_tag 'application' %>
|
76
|
+
<%= javascript_include_tag 'application', defer: true %>
|
77
77
|
|
78
78
|
<%= javascript_packs_with_chunks_tag 'application', defer: true %>
|
79
79
|
<% if @additional_scripts %>
|
@@ -81,13 +81,12 @@
|
|
81
81
|
<%= javascript_include_tag script %>
|
82
82
|
<% end %>
|
83
83
|
<% end %>
|
84
|
-
|
85
84
|
<% if ENV['ENVIRONMENT_SCRIPTS'] %>
|
86
85
|
<%= ENV['ENVIRONMENT_SCRIPTS'].html_safe %>
|
87
86
|
<% end %>
|
88
87
|
|
89
|
-
<%= stylesheet_pack_tag 'application' %>
|
90
|
-
<%= stylesheet_link_tag 'application' %>
|
88
|
+
<%= stylesheet_pack_tag 'application', preload: true %>
|
89
|
+
<%= stylesheet_link_tag 'application', preload: true %>
|
91
90
|
|
92
91
|
<%= javascript_include_tag 'https://www.google.com/recaptcha/api.js', async: true, defer: true %>
|
93
92
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<%= render partial: 'layouts/partials/post-body-tags' %>
|
3
3
|
|
4
4
|
<div class="Nxd-header">
|
5
|
-
<header id="header" class="Nxd-header__main"
|
5
|
+
<header id="header" class="Nxd-header__main">
|
6
6
|
<a tabindex="0" id="skip-to-navigation" href="#sidenav-first" class="Vlt-btn Vlt-btn--outline Vlt-btn--primary Vlt-btn--app">Skip to navigation</a>
|
7
7
|
<a tabindex="0" id="skip-to-content" href="#primary-content" class="Vlt-btn Vlt-btn--outline Vlt-btn--primary Vlt-btn--app">Skip to content</a>
|
8
8
|
<div class="Nxd-logo">
|
@@ -15,7 +15,7 @@
|
|
15
15
|
<small><%= header.subtitle %></small>
|
16
16
|
</div>
|
17
17
|
</a>
|
18
|
-
<a href="/" id="logo" class="Nxd-logo__image Vlt-S-only">
|
18
|
+
<a href="/" id="logo-small" class="Nxd-logo__image Vlt-S-only">
|
19
19
|
<%= image_tag header.small_logo_path, alt: header.logo_alt %>
|
20
20
|
</a>
|
21
21
|
<% if header.hiring_link? %>
|
@@ -38,7 +38,7 @@
|
|
38
38
|
</header>
|
39
39
|
|
40
40
|
<nav id="subnav" class="Nxd-header__sub">
|
41
|
-
<
|
41
|
+
<button id="Vlt-sidenav-mobile-trigger" class="Vlt-btn Vlt-btn--link"><svg><use xlink:href="/symbol/volta-icons.svg#Vlt-icon-menu"></use></svg></button>
|
42
42
|
|
43
43
|
<div class="Nxd-header__sub__menu">
|
44
44
|
<% Topnav.new(@navigation).items.each do |item| %>
|
@@ -8,7 +8,7 @@
|
|
8
8
|
<svg class="Vlt-icon Vlt-black">
|
9
9
|
<use xlink:href="/symbol/volta-icons.svg#Vlt-icon-github" />
|
10
10
|
</svg>
|
11
|
-
<a href="<%= presenter.github_url %>" target="_blank" class="Vlt-text-link Vlt-black">Improve this page</a>
|
11
|
+
<a href="<%= presenter.github_url %>" target="_blank" class="Vlt-text-link Vlt-black" rel="noopener">Improve this page</a>
|
12
12
|
</span>
|
13
13
|
</div>
|
14
14
|
</div>
|
@@ -1,31 +1,34 @@
|
|
1
1
|
<div class="Nxd-products-list">
|
2
2
|
<div class="Vlt-grid Vlt-grid--center Vlt-grid--margin-top2">
|
3
|
+
|
4
|
+
|
3
5
|
<div class="Vlt-col Vlt-col--1of3 Vlt-col--M-1of2">
|
4
6
|
<div class="Vlt-card Vlt-article--reverse Vlt-card--image Nxd-card--products">
|
5
7
|
<div class="Vlt-card__content">
|
6
8
|
<svg class="Vlt-icon Vlt-icon--larger Vlt-purple-dark"><use xlink:href="/symbol/volta-icons.svg#Vlt-icon-message" /></svg>
|
7
|
-
<div class="Nxd-card--product__subtitle"><small>
|
8
|
-
|
9
|
+
<div class="Nxd-card--product__subtitle"><small>PRODUCT AREA</small></div>
|
9
10
|
<h2>
|
10
11
|
<a href="/messaging/sms/overview">
|
11
|
-
|
12
|
+
PRODUCT NAME
|
12
13
|
</a>
|
13
14
|
</h2>
|
14
15
|
<nav>
|
15
|
-
<a href="
|
16
|
+
<a href="#"><svg class="Vlt-icon Vlt-icon--small Vlt-icon--text-bottom Vlt-gray-darker"
|
16
17
|
aria-hidden="true">
|
17
|
-
<use xlink:href="/symbol/volta-icons.svg#Vlt-icon-home" /></svg>
|
18
|
-
<a href="
|
18
|
+
<use xlink:href="/symbol/volta-icons.svg#Vlt-icon-home" /></svg>Product Topic 1</a>
|
19
|
+
<a href="#"><svg class="Vlt-icon Vlt-icon--small Vlt-icon--text-bottom Vlt-gray-darker"
|
19
20
|
aria-hidden="true">
|
20
|
-
<use xlink:href="/symbol/volta-icons.svg#Vlt-icon-books" /></svg>
|
21
|
-
<a href="
|
21
|
+
<use xlink:href="/symbol/volta-icons.svg#Vlt-icon-books" /></svg>Product Topic 2</a>
|
22
|
+
<a href="#"><svg class="Vlt-icon Vlt-icon--small Vlt-icon--text-bottom Vlt-gray-darker"
|
22
23
|
aria-hidden="true">
|
23
|
-
<use xlink:href="/symbol/volta-icons.svg#Vlt-icon-code" /></svg>
|
24
|
-
<a href="
|
24
|
+
<use xlink:href="/symbol/volta-icons.svg#Vlt-icon-code" /></svg>Product Topic 3</a>
|
25
|
+
<a href="#"><svg class="Vlt-icon Vlt-icon--small Vlt-icon--text-bottom Vlt-gray-darker"
|
25
26
|
aria-hidden="true">
|
26
27
|
<use xlink:href="/symbol/volta-icons.svg#Vlt-icon-mockup" /></svg>Tutorials</a>
|
27
28
|
<hr class="hr--short">
|
28
|
-
<a href="/
|
29
|
+
<a href="https://nexmo.github.io/station/How-To-Use#customization-options">
|
30
|
+
To modify this view, copy <a href="https://raw.githubusercontent.com/Nexmo/station/master/lib/nexmo_developer/app/views/static/_products.html.erb">the file</a> to your `custom/views/static` folder and customize the copied file.
|
31
|
+
</a>
|
29
32
|
</nav>
|
30
33
|
</div>
|
31
34
|
</div>
|
@@ -67,7 +70,7 @@
|
|
67
70
|
<svg class="Vlt-icon Vlt-icon--larger Vlt-purple-dark"><use xlink:href="/symbol/volta-icons.svg#Vlt-icon-video" /></svg>
|
68
71
|
<div class="Nxd-card--product__subtitle"><small>PROGRAMMABLE</small></div>
|
69
72
|
<h2>
|
70
|
-
<a target="_blank" href="https://tokbox.com/developer/">
|
73
|
+
<a target="_blank" href="https://tokbox.com/developer/" rel="noopener">
|
71
74
|
Video
|
72
75
|
</a>
|
73
76
|
<small class="Vlt-grey-dark" style="font-size:1.4rem; font-weight:normal;">
|
@@ -77,20 +80,20 @@
|
|
77
80
|
</small>
|
78
81
|
</h2>
|
79
82
|
<nav>
|
80
|
-
<a target="_blank" href="https://tokbox.com/developer/guides/basics/"><svg class="Vlt-icon Vlt-icon--small Vlt-icon--text-bottom Vlt-gray-darker"
|
83
|
+
<a target="_blank" href="https://tokbox.com/developer/guides/basics/" rel="noopener"><svg class="Vlt-icon Vlt-icon--small Vlt-icon--text-bottom Vlt-gray-darker"
|
81
84
|
aria-hidden="true">
|
82
85
|
<use xlink:href="/symbol/volta-icons.svg#Vlt-icon-home" /></svg>Overview</a>
|
83
|
-
<a target="_blank" href="https://tokbox.com/developer/guides/"><svg class="Vlt-icon Vlt-icon--small Vlt-icon--text-bottom Vlt-gray-darker"
|
86
|
+
<a target="_blank" href="https://tokbox.com/developer/guides/" rel="noopener"><svg class="Vlt-icon Vlt-icon--small Vlt-icon--text-bottom Vlt-gray-darker"
|
84
87
|
aria-hidden="true">
|
85
88
|
<use xlink:href="/symbol/volta-icons.svg#Vlt-icon-books" /></svg>Guides</a>
|
86
|
-
<a target="_blank" href="https://tokbox.com/developer/samples/"><svg class="Vlt-icon Vlt-icon--small Vlt-icon--text-bottom Vlt-gray-darker"
|
89
|
+
<a target="_blank" href="https://tokbox.com/developer/samples/" rel="noopener"><svg class="Vlt-icon Vlt-icon--small Vlt-icon--text-bottom Vlt-gray-darker"
|
87
90
|
aria-hidden="true">
|
88
91
|
<use xlink:href="/symbol/volta-icons.svg#Vlt-icon-code" /></svg>Code Snippets</a>
|
89
|
-
<a target="_blank" href="https://tokbox.com/developer/tutorials/"><svg class="Vlt-icon Vlt-icon--small Vlt-icon--text-bottom Vlt-gray-darker"
|
92
|
+
<a target="_blank" href="https://tokbox.com/developer/tutorials/" rel="noopener"><svg class="Vlt-icon Vlt-icon--small Vlt-icon--text-bottom Vlt-gray-darker"
|
90
93
|
aria-hidden="true">
|
91
94
|
<use xlink:href="/symbol/volta-icons.svg#Vlt-icon-mockup" /></svg>Tutorials</a>
|
92
95
|
<hr class="hr--short">
|
93
|
-
<a target="_blank" href="https://tokbox.com/developer/sdks/client/">API Reference</a>
|
96
|
+
<a target="_blank" href="https://tokbox.com/developer/sdks/client/" rel="noopener">API Reference</a>
|
94
97
|
</nav>
|
95
98
|
</div>
|
96
99
|
</div>
|