diff --git a/project/Docs.scala b/project/Docs.scala index 8a55639be..f01912ad1 100644 --- a/project/Docs.scala +++ b/project/Docs.scala @@ -59,16 +59,20 @@ object Docs site.addMappingsToSiteDir(mappings in sxr, prefix) ) - def sphinxEnvironmentVariables = (scalaVersion, version) map { (scalaV, sbtV) => - // major.minor + def sphinxEnvironmentVariables = (scalaVersion, version, isSnapshot) map { (scalaV, sbtV, snap) => + // sphinx's terminology: major.minor def release(v: String): String = CrossVersion.partialVersion(v) match { case Some((major,minor)) => major + "." + minor case None => v } + val siteVersion = sbtV.takeWhile(_ != '-') + val siteSourceVersion = if(snap) release(siteVersion) else siteVersion + val siteSourceBase = s"https://github.com/sbt/sbt/raw/$siteSourceVersion/src/sphinx/" Map[String,String]( "sbt.full.version" -> sbtV, "sbt.partial.version" -> release(sbtV), - "sbt.site.version" -> sbtV.takeWhile(_ != '-'), + "sbt.site.version" -> siteVersion, + "sbt.site.source.base" -> siteSourceBase, "sbt.binary.version" -> CrossVersion.binarySbtVersion(sbtV), "scala.full.version" -> scalaV, "scala.partial.version" -> release(scalaV), diff --git a/src/sphinx/_sphinx/exts/srcref.py b/src/sphinx/_sphinx/exts/srcref.py new file mode 100644 index 000000000..b858d740a --- /dev/null +++ b/src/sphinx/_sphinx/exts/srcref.py @@ -0,0 +1,19 @@ +from docutils import nodes +from sphinx.util.nodes import set_source_info +from sphinx.util.osutil import relative_uri +import os + +# This role inserts a link to the source rST on GitHub. +def srcref(name, rawtext, text, lineno, inliner, options={}, content=[]): + srcPath = inliner.document.settings.env.docname + srcUri = "%s%s.rst" % (os.environ['sbt.site.source.base'], srcPath) + refNode = nodes.reference('', 'Source for this page', internal=False, refuri=srcUri) + spanNode = nodes.paragraph() + spanNode.append(refNode) + spanNode['classes'].append('page-source') + return [spanNode], [] + +# register the role +def setup(app): + app.add_role('srcref', srcref) + diff --git a/src/sphinx/_sphinx/themes/sbt/static/docs.css b/src/sphinx/_sphinx/themes/sbt/static/docs.css index 274c0b875..7c8b0f386 100644 --- a/src/sphinx/_sphinx/themes/sbt/static/docs.css +++ b/src/sphinx/_sphinx/themes/sbt/static/docs.css @@ -219,4 +219,8 @@ input#search-input { } .breadcrumb li select option { font-weight: normal; +} +.page-source { + margin-top: 20px; + text-align: center; } \ No newline at end of file diff --git a/src/sphinx/conf.py b/src/sphinx/conf.py index b98ca19a1..6ea043d06 100644 --- a/src/sphinx/conf.py +++ b/src/sphinx/conf.py @@ -3,7 +3,7 @@ import sys, os sys.path.append(os.path.abspath('_sphinx/exts')) -extensions = ['sphinxcontrib.issuetracker', 'sphinx.ext.extlinks', 'howto', 'codeliteral', 'key'] +extensions = ['sphinxcontrib.issuetracker', 'sphinx.ext.extlinks', 'howto', 'codeliteral', 'key', 'srcref'] # Project variables @@ -78,7 +78,6 @@ launcher_release_base = typesafe_ivy_releases + 'org.scala-sbt/sbt-launch/' launcher_snapshots_base = typesafe_ivy_snapshots + 'org.scala-sbt/sbt-launch/' sbt_native_package_base = 'http://repo.scala-sbt.org/scalasbt/sbt-native-packages/org/scala-sbt/sbt/' - rst_epilog = """ .. |scalaVersion| replace:: %(scalaVersion)s .. |scalaRelease| replace:: %(scalaRelease)s @@ -96,6 +95,8 @@ rst_epilog = """ .. _sbt-launcher-package: https://github.com/sbt/sbt-launcher-package .. _Stack Overflow: http://stackoverflow.com/tags/sbt .. _source code: http://github.com/sbt/sbt + +:srcref:`ignored` """ % { 'launcher_release_base': launcher_release_base, 'launcher_snapshots_base': launcher_snapshots_base, @@ -105,5 +106,3 @@ rst_epilog = """ 'scalaVersion': scalaVersion, 'release': release } - -