Merge spring-projects/gh-pages (#748)

* Display Pivotal Education related courseware

This change adds a new "Related Courseware" section in the side
container; this section lists links to courses and talks that are
relevant to the current project page.

Relevant content is fetched by the browser, with an AJAX request sent to
the Pivotal Education LMS API. This API uses the Referrer HTTP header as
input parameter to its content selection algorithm.

Note that CORS HTTP headers are also used to allow/disallow AJAX cross
domain requests.

* Revert "Display Pivotal Education related courseware"

This reverts commit bf15ee8a6da0f232254ac8d186184a5c274d63b3.

* Conditionalize showing reference doc/api doc links

If the reference doc URL of the API doc URL is empty, don't display a hyperlink.

* Fix content warning issues over https

When served with HTTP/2 and TLS, project pages show several mixed
content errors:

* the imported Google fonts
* the AJAX call to spring.io to get the current project information
* the newsletter iframe

This commit changes URLs to use https or protocol-relative URLs when
possible. This also deletes the now defunct newsletter integration.

* Update for changes in github pages

* Upgrade rbenv Ruby version to 2.2.0

* Fix markdown syntax error

The kramdown backend doesn't support titles whithout empty lines before
them.

* Replace ZeroClipboard with clipboard.js

For copy/paste support in our code samples, we are using the
ZeroClipboard library which relies heavily on Flash.
Because many browsers/extensions are disabling this plugin nowadays,
this commit replaces ZeroClipboard with a native, lightweight solution
for this feature.

* Add rouge gem

* Polish page.html

Remove default attributes and other little improvements.

* remove alt attribute in <div>

* Upgrade github-pages gem to fix deprecation warnings

Previously, when running bundle exec jekyll serve a false-positive
deprecation warning was reported:

Deprecation: Auto-regeneration can no longer be set from your
configuration file(s). Use the --[no-]watch/-w command-line option
instead.

See https://github.com/jekyll/jekyll/issues/4831 for some details.
Jekyll 3.0.5 fixes the problem. This commit upgrades to the latest
version of github-pages, thereby also upgrading to Jekyll 3.0.5

* Jekyll must be run with "bundle exec" command

* Add defensive check for empty repository key
This commit is contained in:
Rob Winch
2017-03-27 13:00:33 -05:00
committed by GitHub
parent 77f5c94b37
commit b02094230f
14 changed files with 208 additions and 106 deletions

View File

@@ -1 +1 @@
ruby-1.9.3
ruby-2.2.0

View File

@@ -1,3 +1,4 @@
source "http://rubygems.org"
gem "github-pages"
gem "rouge"

View File

@@ -1,50 +1,129 @@
GEM
remote: http://rubygems.org/
specs:
RedCloth (4.2.9)
classifier (1.3.3)
fast-stemmer (>= 1.0.0)
activesupport (4.2.6)
i18n (~> 0.7)
json (~> 1.7, >= 1.7.7)
minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
addressable (2.4.0)
coffee-script (2.4.1)
coffee-script-source
execjs
coffee-script-source (1.10.0)
colorator (0.1)
commander (4.1.5)
highline (~> 1.6.11)
directory_watcher (1.4.1)
fast-stemmer (1.0.2)
github-pages (1)
RedCloth (= 4.2.9)
jekyll (= 1.1.2)
kramdown (= 1.0.2)
liquid (= 2.5.1)
maruku (= 0.6.1)
rdiscount (= 1.6.8)
redcarpet (= 2.2.2)
highline (1.6.19)
jekyll (1.1.2)
classifier (~> 1.3)
ethon (0.9.0)
ffi (>= 1.3.0)
execjs (2.7.0)
faraday (0.9.2)
multipart-post (>= 1.2, < 3)
ffi (1.9.13)
gemoji (2.1.0)
github-pages (86)
github-pages-health-check (= 1.1.0)
jekyll (= 3.1.6)
jekyll-coffeescript (= 1.0.1)
jekyll-feed (= 0.5.1)
jekyll-gist (= 1.4.0)
jekyll-github-metadata (= 2.0.2)
jekyll-mentions (= 1.1.3)
jekyll-paginate (= 1.1.0)
jekyll-redirect-from (= 0.10.0)
jekyll-sass-converter (= 1.3.0)
jekyll-seo-tag (= 2.0.0)
jekyll-sitemap (= 0.10.0)
jemoji (= 0.6.2)
kramdown (= 1.11.1)
liquid (= 3.0.6)
listen (= 3.0.6)
mercenary (~> 0.3)
rouge (= 1.11.1)
terminal-table (~> 1.4)
github-pages-health-check (1.1.0)
addressable (~> 2.3)
net-dns (~> 0.8)
octokit (~> 4.0)
public_suffix (~> 1.4)
typhoeus (~> 0.7)
html-pipeline (2.4.1)
activesupport (>= 2, < 5)
nokogiri (>= 1.4)
i18n (0.7.0)
jekyll (3.1.6)
colorator (~> 0.1)
commander (~> 4.1.3)
directory_watcher (~> 1.4.1)
kramdown (~> 1.0.2)
liquid (~> 2.5.1)
maruku (~> 0.5)
pygments.rb (~> 0.5.0)
redcarpet (~> 2.2.2)
safe_yaml (~> 0.7.0)
kramdown (1.0.2)
liquid (2.5.1)
maruku (0.6.1)
syntax (>= 1.0.0)
posix-spawn (0.3.6)
pygments.rb (0.5.2)
posix-spawn (~> 0.3.6)
yajl-ruby (~> 1.1.0)
rdiscount (1.6.8)
redcarpet (2.2.2)
safe_yaml (0.7.1)
syntax (1.0.0)
yajl-ruby (1.1.0)
jekyll-sass-converter (~> 1.0)
jekyll-watch (~> 1.1)
kramdown (~> 1.3)
liquid (~> 3.0)
mercenary (~> 0.3.3)
rouge (~> 1.7)
safe_yaml (~> 1.0)
jekyll-coffeescript (1.0.1)
coffee-script (~> 2.2)
jekyll-feed (0.5.1)
jekyll-gist (1.4.0)
octokit (~> 4.2)
jekyll-github-metadata (2.0.2)
jekyll (~> 3.1)
octokit (~> 4.0)
jekyll-mentions (1.1.3)
html-pipeline (~> 2.3)
jekyll (~> 3.0)
jekyll-paginate (1.1.0)
jekyll-redirect-from (0.10.0)
jekyll (>= 2.0)
jekyll-sass-converter (1.3.0)
sass (~> 3.2)
jekyll-seo-tag (2.0.0)
jekyll (~> 3.1)
jekyll-sitemap (0.10.0)
jekyll-watch (1.4.0)
listen (~> 3.0, < 3.1)
jemoji (0.6.2)
gemoji (~> 2.0)
html-pipeline (~> 2.2)
jekyll (>= 3.0)
json (1.8.3)
kramdown (1.11.1)
liquid (3.0.6)
listen (3.0.6)
rb-fsevent (>= 0.9.3)
rb-inotify (>= 0.9.7)
mercenary (0.3.6)
mini_portile2 (2.1.0)
minitest (5.9.0)
multipart-post (2.0.0)
net-dns (0.8.0)
nokogiri (1.6.8)
mini_portile2 (~> 2.1.0)
pkg-config (~> 1.1.7)
octokit (4.3.0)
sawyer (~> 0.7.0, >= 0.5.3)
pkg-config (1.1.7)
public_suffix (1.5.3)
rb-fsevent (0.9.7)
rb-inotify (0.9.7)
ffi (>= 0.5.0)
rouge (1.11.1)
safe_yaml (1.0.4)
sass (3.4.22)
sawyer (0.7.0)
addressable (>= 2.3.5, < 2.5)
faraday (~> 0.8, < 0.10)
terminal-table (1.6.0)
thread_safe (0.3.5)
typhoeus (0.8.0)
ethon (>= 0.8.0)
tzinfo (1.2.2)
thread_safe (~> 0.1)
PLATFORMS
ruby
DEPENDENCIES
github-pages
rouge
BUNDLED WITH
1.12.5

View File

@@ -4,6 +4,9 @@ Spring's project pages are based on [Jekyll](http://jekyllrb.com) and [GitHub Pa
This approach may sound a little funky (and it is), but it's way better than the misery of Git submodules. In fact, it's actually pretty easy. If you're just getting started, then follow the directions immediately below. If you're needing a refresher on how to keep things up to date, then head to the section at the bottom on "keeping up to date".
> ***Note:*** Github changed their rendering (a lot) in April 2016. If you are seeing pages build failures since that time, then you probably need to merge some changes from this upstream. Follow the instructions below, and for testing locally use rubiy 2.x and don't forget to `bundle exec ...` everything.
# How to start a new `gh-pages` project page
@@ -95,7 +98,7 @@ Assuming you're already within your project's clone directory, and you've alread
### Install jekyll if you have not already
> **Note:** Jekyll 1.1.2 is a known good version, and it is specifically referred to in `Gemfile.lock` so you have to use `bundle` (not `gem install ...`) to install it:
> **Note:** Jekyll 3.0.4 is a known good version, and it is specifically referred to in `Gemfile.lock` so you have to use `bundle` (not `gem install ...`) to install it:
gem install bundler
bundle
@@ -104,7 +107,7 @@ Assuming you're already within your project's clone directory, and you've alread
Use the `--watch` flag to pick up changes to files as you make them, allowing you a nice edit-and-refresh workflow.
jekyll serve --watch
bundle exec jekyll serve --watch
> **Important:** Because the `baseurl` is set explicitly within your project's `_config.yml` file, you'll need to fully-qualify the URL to view your project. For example, if your project is named "spring-xyz", your URL when running Jekyll locally will be <http://localhost:4000/spring-xyz/>. Don't forget the trailing slash! You'll get a 404 without it.

View File

@@ -1,11 +1,17 @@
### Global gh-pages pre-amble
safe: true
lsi: false
pygments: true
markdown: redcarpet
redcarpet:
extensions: ["no_intra_emphasis", "fenced_code_blocks", "autolink", "tables", "with_toc_data"]
highlighter: rouge
markdown: kramdown
encoding: UTF-8
github: [metadata]
kramdown:
input: GFM
hard_wrap: false
smart_quotes: ["apos", "apos", "quot", "quot"]
gems:
- jekyll-coffeescript
- jekyll-paginate
### The following properties will change on a project-by-project basis
@@ -32,6 +38,6 @@ custom_gradle_template: false
### The following properties are constant for most projects
main_site_url: http://spring.io
projects_site_url: http://projects.spring.io
questions_url: http://spring.io/questions
main_site_url: https://spring.io
projects_site_url: https://projects.spring.io
questions_url: https://spring.io/questions

View File

@@ -1,7 +1,7 @@
{% if page.badges.twitter %}
<div class="project-sub-link">
<a href="https://twitter.com/{{ page.badges.twitter }}">
<div class="spring-icon project-badges twitter" alt="Twitter" title="Twitter">
<div class="spring-icon project-badges twitter" title="Twitter">
</div>
</a>
</div>
@@ -9,7 +9,7 @@
{% for badge in page.badges.custom %}
<div class="project-sub-link">
<a href="{{ badge.url }}">
<div class="spring-icon project-badges {{ badge.icon }}" alt="{{ badge.name }}" title="{{ badge.name }}">
<div class="spring-icon project-badges {{ badge.icon }}" title="{{ badge.name }}">
</div>
</a>
</div>

View File

@@ -1,10 +1,10 @@
<head>
<title>{{ site.name }}</title>
<link rel="icon" type="image/png" href="{{site.baseurl}}/favicon.png"/>
<link rel="icon" type="image/png" href="{{site.baseurl}}/favicon.png" />
<link rel="stylesheet" type="text/css" href="{{site.baseurl}}/bootstrap/css/bootstrap.min.css" />
<link href='http://fonts.googleapis.com/css?family=Varela+Round|Montserrat:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Varela+Round|Montserrat:400,700" />
<link rel="stylesheet" type="text/css" href="{{site.baseurl}}/font-awesome/css/font-awesome.min.css" />
<link rel="stylesheet" type="text/css" href="{{site.baseurl}}/bootstrap/css/bootstrap-select.css" />
@@ -18,21 +18,21 @@
{{ head_links }}
<script type="text/javascript" src="{{site.baseurl}}/js/jquery.js"></script>
<script type="text/javascript" src="{{site.baseurl}}/bootstrap/js/bootstrap.min.js"></script>
<script type="text/javascript" src="{{site.baseurl}}/bootstrap/js/bootstrap-select.js"></script>
<script src="{{site.baseurl}}/js/jquery.js"></script>
<script src="{{site.baseurl}}/bootstrap/js/bootstrap.min.js"></script>
<script src="{{site.baseurl}}/bootstrap/js/bootstrap-select.js"></script>
<script type="text/javascript" src="{{site.baseurl}}/js/underscore.js"></script>
<script type="text/javascript" src="{{site.baseurl}}/js/backbone.js"></script>
<script type="text/javascript" src="{{site.baseurl}}/js/projectDocumentationWidget.js"></script>
<script type="text/javascript" src="{{site.baseurl}}/js/application.js"></script>
<script type="text/javascript" src="{{site.baseurl}}/js/ZeroClipboard.min.js"></script>
<script type="text/javascript">
var apiBaseUrl = "{{ site.main_site_url }}";
var projectId = "{{ site.project }}";
var siteBaseUrl = "{{ site.baseurl }}";
<script src="{{site.baseurl}}/js/underscore.js"></script>
<script src="{{site.baseurl}}/js/backbone.js"></script>
<script src="{{site.baseurl}}/js/projectDocumentationWidget.js"></script>
<script src="{{site.baseurl}}/js/application.js"></script>
<script src="{{site.baseurl}}/js/clipboard.min.js"></script>
<script>
var apiBaseUrl = "{{ site.main_site_url }}",
projectId = "{{ site.project }}",
siteBaseUrl = "{{ site.baseurl }}";
</script>
<script type="text/javascript" src="{{site.baseurl}}/js/copySnippets.js"></script>
<script src="{{site.baseurl}}/js/copySnippets.js"></script>
<meta name="google-site-verification" content="7qGntFPD9lWAVCtUu5U77v4l68PsTHf6xpzgjQv2j2M" />
<script>
var _gaq = _gaq || [];
@@ -84,12 +84,12 @@
<div class="container-fluid">
<div class="search-form--container">
<form class="form-inline form-search"
action="{{site.main_site_url}}/search" method="get">
<input type="text"
action="{{site.main_site_url}}/search">
<input type="search"
class="search-query search-form--form js-search-input"
placeholder="Search for documention, guides, and posts..."
name="q" />
<button type="submit" class="search-form--submit">
<button class="search-form--submit">
<i class="icon-search"></i>
</button>
</form>
@@ -113,16 +113,10 @@
</ul>
</div>
</div>
&copy; <script type="text/javascript"> var d = new Date();
document.write(d.getFullYear());</script> <a href="http://www.pivotal.io">Pivotal Software</a>, Inc. All Rights Reserved.
<a href="http://www.pivotal.io/terms-of-use">Terms of Use</a> and
<a href="http://www.pivotal.io/privacy-policy">Privacy</a>
</div>
<div class="span4 footer-newsletter--wrapper pull-right">
<div class="footer-newsletter--container">
<label>Subscribe to our newsletter</label>
<iframe frameborder="0" height="42px" scrolling="no" src="http://play.gopivotal.com/OSS_Website_Spring_SpringNewsletterSubscriptionEmailOnly.html" style="border:none" width="324px"></iframe>
</div>
&copy; <script> var d = new Date();
document.write(d.getFullYear());</script> <a href="https://www.pivotal.io">Pivotal Software</a>, Inc. All Rights Reserved.
<a href="https://pivotal.io/terms-of-use">Terms of Use</a> and
<a href="https://pivotal.io/privacy-policy">Privacy</a>
</div>
</div>
</div>

View File

@@ -18,8 +18,12 @@
<div class="spring-icon {@= release.statusIconClass() @}"></div>
</div>
<div class="item--right-column">
<a href='{@= release.refDocUrl @}' class="docs-link reference-link">Reference</a>
<a href='{@= release.apiDocUrl @}' class="docs-link api-link">API</a>
{@ if (release.refDocUrl !== '') { @}
<a href='{@= release.refDocUrl @}' class="docs-link reference-link">Reference</a>
{@ }; @}
{@ if (release.apiDocUrl !== '') { @}
<a href='{@= release.apiDocUrl @}' class="docs-link api-link">API</a>
{@ }; @}
</div>
</div>
{@ }); @}

View File

@@ -75,6 +75,7 @@ corpus callosum!
* ...
<span id="quick-start"></span>
## Quick Start
{% include download_widget.md %}

File diff suppressed because one or more lines are too long

Binary file not shown.

7
js/clipboard.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -1,26 +1,43 @@
window.Spring = window.Spring || {};
ZeroClipboard.setDefaults( { moviePath: siteBaseUrl + '/js/ZeroClipboard.swf' } );
$(document).ready(function() {
Spring.configureCopyButtons();
});
Spring.configureCopyButtons = function() {
if (ZeroClipboard.detectFlashSupport()) {
$(".highlight > pre").each(function(index) {
Spring.buildCopyButton($(this), index);
}
);
}
$("pre.highlight").each(function(index) {
Spring.buildCopyButton($(this), index);
}
);
var errorMessage = function() {
if (/Mac/i.test(navigator.userAgent)) {
return 'Press Cmd-C to Copy';
}
else {
return 'Press Ctrl-C to Copy';
}
};
var snippets = new Clipboard('.copy-button');
snippets.on('success', function(e) {
e.clearSelection();
Spring.showTooltip(e.trigger, "Copied!");
});
snippets.on('error', function(e) {
Spring.showTooltip(e.trigger, errorMessage());
});
}
Spring.showTooltip = function(elem, message) {
$(elem).tooltip({placement:'right', title:message});
$(elem).tooltip('show');
setTimeout(function(){$(elem).tooltip('destroy');},1000);
}
Spring.buildCopyButton = function (preEl, id) {
var codeBlockId = "code-block-"+ id;
var codeBlockId = "code-block-"+ id;
var copyButtonId = "copy-button-" + id;
preEl.attr('id', codeBlockId);
var button = $('<button class="copy-button snippet" id="' + copyButtonId + '" data-clipboard-target="' + codeBlockId + '"></button>');
var button = $('<button class="copy-button snippet" id="' + copyButtonId + '" data-clipboard-target="#' + codeBlockId + '"></button>');
preEl.before(button);
var zero = new ZeroClipboard(button);
$(zero.htmlBridge).tooltip({title: "copy to clipboard", placement: 'bottom'});
}

View File

@@ -95,7 +95,7 @@ Spring.SnippetView = Backbone.View.extend({
this.combinedTemplate = _.template(
"<div class=\"highlight\"><pre><code>" +
downloadTemplate.find("code:first").html() +
"{@ if (repository) { @}" +
"{@ if (typeof(repository) != \"undefined\") { @}" +
repositoryTemplate.find("code:first").html() +
"{@ } @}" +
"</code></pre></div>"
@@ -107,9 +107,7 @@ Spring.SnippetView = Backbone.View.extend({
var html = $(this.combinedTemplate(this.model));
this.$el.html(html);
if (ZeroClipboard.detectFlashSupport()) {
Spring.buildCopyButton(html.find(":first"), "snippet");
}
Spring.buildCopyButton(html.find(":first"), "snippet");
return this;
},