tiles
parser to mapsrank
parser to tablescompute
table parsertable
now accepts urlsprintShortSnippetsParser
footer
Parserstopwatch
ParserprintColumn
parserdisk
parser which generates a table from local disk contentsFind/Replace for shorter relative links:
^ link ([^\s]+)\.html
$1.html
container
parserhakon
parsertufte
themegazetteCss
. Now use theme gazette
.tufteCss
. Now use theme tufte
.theme
parser and 3 themes: roboto, dark, and gazetteiframes
parserhaml
quick html tagslinks
parser to tablescompose
parser to tablesquickIncludeJsonParser
parsercloc
parserfavIcon
parserquickCssParser
quickIncludeHtmlParser
quickScriptParser
assertHtmlEqualsParser
for faster and more intelligent testingprintTable
printTable
limit
parser to tablesloop
parser can now loop over tablesclassicForm
and scrollForm
work differently now.quickImport
parser for imports.quickVideo
parser for including videos.quickMusic
parser for including sound files.quickTable
parser for including csvs, tsvs, psvs, and ssvs.tests/sipOfCoffee.m4a
loop
tests/spirit.mp4
loop
pages.csv
printTable
quickImage
parser. Add an image with just the filename. quickImageParser detects by filename.particles.png
scrollForm
now implements the One Textarea design pattern. Thanks Alejandro for your help!scrollForm
parsertextarea
to ScrollSet formsabstractTextareaMeasureParser
mediumColumn
, thinColumn
, and wideColumn
parsers.form
to classicForm
form
parserExample:
chat
I have some questions
What is your current productivity tool
pen and paper
Hmm and for project management?
pen and paper
youTube
parser to youtube
(all lowercase). Deprecate old spelling.tree
is no longer a table format. Use particles
instead.buildPdf
parser. Currently requires MacOS + Chrome.printMeasures
printConcepts
buildConcepts
and buildMeasures
now generates csv
by default instead of tsv
Before:
buildConcepts
printConcepts
After:
buildConcepts
table
printTable
printUsageStats
printLeetSheet
is now printScrollLeetSheet
printAvancedLeetSheet
is now printparsersLeetSheet
paintParser
which replaces highlightScopeParser
highlightScope
to paint
wwsButton
is now downloadButton
email
. Now do emailButton [email]
downloadUrl
. Now do downloadButton [url]
printRelated
br
parserbuildCsv
parseremailButton
parser.scrollVersionLink
parser.wwsButton
parser.center
parser now also creates centered sections:This should be centered.
printViewSource
is now viewSourceLink
pageFooter
has been split into simpler parsers.find ^pageFooter
replace
center
emailButton
downloadButton
viewSourceButton
scrollVersionLink
homeButton
parser.leftRightButtons
parser.viewSourceButton
parser.pageHeader
. Split that into 3 simpler parsers. Change pageHeader
to:find ^pageHeader
replace
homeButton
leftRightButtons
viewSourceButton
printViewSourceBadge
is now viewSourceButton
homeUrl
. Insead do:homeButton
link ../someOtherURL.html
video
parser.video tests/spirit.mp4
loop
music
parser for playing songs, podcasts, sounds, et cetera.music tests/sipOfCoffee.m4a
loop
nickelbackIpsum
parser. Idea from gigamick.label
should show up in scatterplot autocompletebutton
parserdinkus
parserimage
parser easier to extendimpute
parserfetch
now writes to localStorage in browser environment.table
now can read from localStorage in browser environment.groupBy
parsertableSearch
stylingtableSearch
now adds copy and CSV buttons.transpose
parsersparkline [columnName]
is now sparkline\n y [columnName]
groupBy
parser for "pivot tables"select
parserorderBy
parserrename
parserreverse
parserfetch
parserscatterplot
now gets data from table
.table [filename].[json|tsv|csv]
to load and print a table from disksparkline
now can take a table as input:table posts.csv
sparkline
y wordCount
printTable
at root level. Now works nested under tablespaceTable
. See below to migrate.tabTable
. See below to migrate.treeTable
. See below to migrate.commaTable
. See below to migrate.pipeTable
. See below to migrate.table
now takes delimiter and data parsers. Usage:name | score |
---|---|
Kape | 35 |
Regex to find all breaks: ^(printTable|spaceTable|tabTable|treeTable|commaTable|pipeTable|table )
inlineMarkups
now supports setting attributes and tagsa href="url"
instead.inlineMarkups
parser. Thanks to eugenesvk for the idea.printSourceStack
now prints [Unchanged] if the source was not changed during a compiler step.wrapsOn
is now inlineMarkupsOn
wrap
is now inlineMarkup
counters
parser.printSourceStack
parser to provide a clean way to view source code at each step in compilation.readingList
parser. Aftertext is a better choice.printExpandedSource
and printOriginalSource
into printSourceStack
buildFiles
to CLI classprintExpandedSource
and printOriginalSource
parserstestStrict
parser to allow disabling catch all paragraph on a per file basis.heatrix
now supports using custom labels even for numeric atoms.heatrix
heatrix
.heatrix
is now heatrixAdvanced
. heatrix
is the simplest fast version now.heatrix
printCsv
now includes year
columnheatrix
parserprintRelated
now has support for tags! No need to add a related
line on each post.groups
is now tags
.printRelatedList
is now just printRelated
.related
parser. Now just use tags. Apply tags liberally.codeWithHeader
parsercenter
aftertext markup parserprintFormatLinks
parserprintAdvancedLeetSheet
now also prints atom parser docsDemo:
Hello world
bold
This is italicized
italics
Make this code
code
Strikethrough this whole line.
strike
Hello world
This is italicized
Make this code
Strikethrough this whole line.
printAdvancedLeetSheet
after feedback in r/WorldWideScrollheight
and width
to imagesfloat
to imageswrapsOn
. You can write wrapsOn none
to disable all wraps.printCsv
now exports authors
as wellauthors
parser to support multiple authorsauthors
now can use all aftertext featuresprintAuthor
is now printAuthors
author
is now authors
.To update from author
to authors
, you can use this regex find/replace:
Find: ^author ([^ ]+) (.*)
Replace: authors 2\n 1 $2
contacts
microlang.microlangs
foldercenter
parser! first blink, now center!printCheatSheet
to printLeetSheet
printUsageStats
parser.printCheatSheet
now prints good txt only docs too.printCheatSheet
now prints descriptions.printCheatSheet
parser v0.1.0keywordAtom
has been replaced by cueAtom
. You can do a simple find/replace or just add:keywordAtom
extends cueAtom
scroll build
through passed in SSH command was hangingstartColumns
, gazetteHeader
, gazetteFooter
, byLine
printViewSourceBadge
parsergit
parser. No longer needed now that we use deep link to all source pages.viewSource
to printViewSource
to clarify that it prints an HTML element.pageHeader
and pageFooter
parsers will now only emit icons for git, downloadUrl, and email if those items are setstrikethrough
parser to strike
loadConcepts
fixrelatedParser
to relatedScrollFilesParser
to free up relatedParser
for userland.relatedList
to printRelatedList
sortBy
to printConcepts
parserscroll init
generates a smaller sitedescriptionParser
to openGraphParser
and titleParser
to pageTitleParser
to free up those names for userparserland.buildJs
and script
parsersbuildCss
parserThis is a major breaking release meant to simplify and standardize a lot of the core Scroll concepts.
buildHtml
parserbuildRss
parserimportOnly
on a file if the file uses no buildCommandParsers.snippets
=> printSnippets
fullSnippets
=> printFullSnippets
buildText
=> buildTxt
scroll build
will no longer write anything by default. You now need to explicitly include 1 or more buildCommands in your files, such as buildHtml
or buildTxt
.tags
parser in css themes. Instead of this:permalink style.css
gazetteCss
tags false
Do this:
buildCss style.css
gazetteCss
date
is now derived from file creation timetitle
is now computed by un-camelcasing the filenameid
limit
parser to snippetswws
to its own repowws
. Thank you Nick Noble!writeText
is now buildText
writeConcepts
is now buildConcepts
writeMeasures
is now buildMeasures
buildFilesInFolder
now returns an object of all built files.scatterplot
can now take a url as a data sourcescatterplot
parserstamp
mini languagesparkline
parser using beautiful tiny sparkline library by Marius Gundersen.sparkline 5 7 27 87 300 17 10 5
grammar
to parsers
change.grammar
it's just parsers
..grammar
now end in .parsers
.formatAndSave
method.wws
command line app.downloadUrl
parser.canonicalLink
is now canonicalUrl
.homeLink
is now homeUrl
.jtree
with scrollsdk
classes
parserrequireOnce
abstractCustomListItemParser
for making HTML lists with custom markerswriteConcepts
and writeMeasures
now strips blank values when generating JSON and/or JStableSearch
now will save the sort order to the urlscroll format
command now also prettifies concepts and measurements in ScrollSets. If a measurement's sortIndex
jumps to a new integer (for example, 1.9 to 2.1), a newline will be inserted before it.sortIndex
is now 1.9, and the sort index of id
is 1.0. Update sortIndex
accordingly.id
the filename (without the extension). Have the id be a simple one atom url friendly string. If you want a pretty title, add a name
measure. Everything much simpler this way.printAuthor
parser prints the author defined by author
. byLine
has been deprecated--replace with printAuthor
.author
parser now takes a URL.printDate
parserhelpfulNotFound
now assumes the script can be found at the root of the domain.Scroll Datasets
to ScrollSets
.Coverage
in Measurements should round down.isMeasureRequired
.metaTags
from breaking try.scroll.pubslideshow
working on try.scroll.pubslideshow
parserprintTitle
in text filesidParser
and filenameParser
no longer ship in default grammar. This will allow for useful future dataset features. Instead, add them yourself if you are using Concepts like this:idParser
extends abstractIdParser
filenameParser
extends abstractFilenameParser
printTitle
printTitle
parser added for easier templatestitle
is now a setter. This regex handles the migration:^title
printTitle\ntitle
endSnippet
and does have a dinkus, it will now generate a snippet rather than using the whole post.measureNames
. Restrict them from containing "_", which we use to combine nested measures.>
(with aftertext support)!>
, those will now be parsed by the quickQuoteParserminutes
to read (assuming 200 atoms/minute) to printSearch
and printCsv
exportssitemap
for making sitemaps specific to certain folders/groupsprintFeed
, snippets
, fullSnippets
providing groups is now optionalreplaceJs
now has access to the filepathsortBy
can now sort on multiple columns and handle asc/descwriteConcepts
and writeMeasures
can now take multiple filenames in one line and also include a sortBy
condition.id
measure was appearing twicereplaceDefault
parser. No one should be affected.nodejs
parser to `replaceNodejs. Few should be affected.keyboardNav
was in use. First implementation was accidentally quadratic.printSearchTable
now generates correct links when searching across multiple folderstableSearch
now takes a parameter from the url #q=[search]
. Updating the searching box also updates url.printSearchTable
parserscroll test
and fix bug in percentAtom
writeMeasures
and printMeasures
parsersabstractPercentageMeasureParser
loadConcepts
parser for if you had a dataset split into many files in a folder.float sortIndex [int]
for sorting the measures(columns) in dataset generation. Lower sort indexes come first.scroll test
will now report if an aftertext pattern has no matches.****
as an "end of post dinkus" which prints โid
in conceptsscroll init
id
parser for using datasets.[measureName]:
syntax introduced in version 77. You no longer have to worry about the annoyance that introduced when writing a paragraph such as "Sidenote: yada yada".belowAsCodeUntil
parser::
parser. Now concepts are simply identified by the parser id
.writeDataset
is now writeConcepts
and printDataset
is now printConcepts
.[measureName]:
syntax introduced in version 77. To use datasets (aka Concept files) now, just extend Scroll parsers like you normally would. See this blog post for an example.openGraphImage
is no longer required. Will be auto-added if not present.link
under image
. Also added target
.openGraph
under an image
node as an alternative to adding a separate openGraphImage
linemediumColumns
parserthinColumns
parser.Note: startColumns
will eventually be removed. You can now safely switch those to thinColumns
.
expander
parserAnything in the section will show up here. A blank line ends a section.
printTable
parserprintTable [index]
to print any existing tabular tables.printTable
will look for a table to print using this strategy:
npm install
npm install -g scroll-cli --production
fastendSnippet
was showing up in htmlformatCommand
to the CLI for nicely formatting files, moving top matter to the top, cleaning up white space, etc, so you don't have to worry about that.The current formatting conventions are:
importOnly
, if present, is moved to the very topNote that currently the title
tag is a meta tag and a tag that prints content. Going to split that up into 2 tags soon.
Note that if you are doing something like a tutorial and using a belowAsCode
where you purposely put a top matter parser not at the top, it will currently get moved to the top by format. We can probably add a feature like treating meta nodes with // noFormat
as if they were content nodes.
related
and relatedList
parsersplainTextOnly
for rare case when you need to include content only for the plain text version.html
should not print in text versions (since it is html :)).thoughtParser
, that is now called paragraphParser
.helpfulNotFound
parser for better 404s.wordCount
in printCsv
now measures wordCount in the text version of a post.writeText
parser.Note: there are likely to be a few rapid releases to refine this.
printSiteMap
parser for text sitemap generation.^(\t|[^ ]+\t)
Spreadsheets are great tools for working with tabular data. I want to copy/paste between Scroll docs and spreadsheets. This makes it easier.
Tabular data is better than line orientation for experimental data because it requires half the number of tokens and it's more efficient eye movement during comparisons and proofreading.
Scroll already supported tabular data using tabTable
, but that made copy/paste workflows between spreadsheets and text editors a pain. This should be more ergonomic and make it easier to work with this useful tool of thought.
::
, printDataset
, writeDataset
, and *:
and *::
parsers.Sidenote: yada yada.
, those will now be parsed incorrectly as measures. Just explicitly make them paragraphs * Sidenote: yada yada.
. This regex can help you find any instances: ^[^ ]+: .
The code below added to a page will create the zoom out effect:
css html {font-size: var(--base-font-size, 8px);}
***
parser to print a Dinkus
Now I will show an example.
***
Above is a dinkus.
Now I will show an example.
Above is a dinkus.
thanksTo
parserplainText
parserprintSource
parser to be able to dump the source code for a group of posts to a plain text file.printCsv
parser to make it as easy to generate a CSV of a blog as it is to generate an RSS feed
was present in RSS pages. Thank you to Joao for the report.This paragraph has a dropcap. It can be a useful visual aid for the reader to break up sections. You can read more about dropcaps on Wikipedia.
wrapsOn
you can now provide parameters to specify only the wraps you want, if any.katex
node in a file. So any paragraph containing multiple $ will now behave as before katex wraps were added.wideColumns
parser2*4*2
or inline \KaTeX X_{2_i}.katex
node in your file and will load the KaTeX code.program
parser for Program Links. See blog post for details.<!DOCTYPE html>
to improve performance on Google Lighthouse.<html lang></html>
back as you need that to get proper hyphenation. Added test.htmlLang
parser for overriding the default lang which is set to "en"text-align: justify;
on paragraphs to Gazette and Tufte themes.tufteCss
beta theme.###
, ####
and #####
headers.title
can be thought of as h0
.gazetteHeader
is now pageHeader
and gazetteFooter
is now pageFooter
. Headers and footers can be independent of themes.\n\*
\n
.\n\* [a-z]
search first to find any paragraphs that start with a lowercase letter.<!
, as they will be parsed as HTML nodes.katex
parser. KaTeX: "The fastest math typesetting library for the web."tag
parser to thought nodes so you can change the compiled html tag (needed in rare circumstances)thought
parser and standardized vocab to calling the thought node the main node that most nodes extend.style
parser to provide inline html styles to a thought node.No one should be affected. This was an internal rewrite to upstream the imports code to ParticleFileSystem
in Jtree. No changes for Scroll users.
scrollKeywords
is no longer exportedDefaultScrollCompiler
is now DefaultScrollParser
ScrollDiskFileSystem
and ScrollInMemoryFileSystem
replaced by ScrollFileSystem
Simplify theme building.
gazetteTheme
is now gazetteCss
.// Change `gazetteTheme noTags` to:
gazetteCss
tags false
Maintenance release. Update packages and remove unused package and specify required NodeJs versions accurately.
This is The Theme Release.
author
node is now byLine
. author
is kept for now but updating is recommended.scrollCssTag
is gone. use gazetteTheme
for previous behavior. scrollCss
is gone, use gazetteTheme noTag
.gazetteTheme
now contains that CSS code.scrollHeader
is now gazetteHeader
and scrollFooter
is now gazetteFooter
scrollHeaderComponent
=> gazetteHeader
, scrollFooterComponent
=> gazetteFooter
kpiTable
is now dashboard
Node
to Parser
).abstractScrollWithRequirementsNode
and use it for copyButtons
and map
to only include the external JS and CSS once.compileSettings
as an input in all Scroll nodes rather than maintaining state on instancesThis was a big internal refactor to remove the outdated concept of ScrollFolder
and rely on the file system parameter instead. This makes it easier to build webapps serving dynamic Scroll pages. It also simplifies the upcoming isomorphic release.
ScrollFolder
. Exports now include ScrollDiskFileSystem
and ScrollInMemoryFileSystem
. To get the same behavior as new ScrollFolder("folder").buildFiles()
use new ScrollDiskFileSystem().buildFilesInFolder("folder")
.new ScrollFolder(__dirname).defaultScrollCompiler
use DefaultScrollCompiler
compileSnippet
should now be compileEmbeddedVersion
file.folder.folder
use file.folderPath
loop
may be affected:relativeLink
to linkRelativeToCompileTarget
canonicalUrl
if you need to include query strings in canonical link.canonicalUrl https://scroll.pub/tests/maps.html?canonLinkTest=true
map
using LeafletJScopyButtons
parser. Use that to give code blocks a copy-to-clipboard button on hover.nodejs
node for including small node.js scripts inside a Scroll file, similar to a PHP snippet. . The snippet is written to disk and then require is used to run it. Exports variables are then replaced throughout the script.ScrollFolder
constructor now requires an argument. You can now pass an object as a second param to use a virtual filesystem.DefaultScrollCompiler
export. Instead use new ScrollFolder().defaultScrollCompiler
buildNeeded
method only used programmatically by PLDB. Switching that to dynamic generation which is a better pattern.quickHtml
node. A line starting with <
will be treated as an html
node. So these are the same:html <hr>
<hr>
*
) node.---
//
. Previously it was only comment
scroll init
now creates a .gitignore
file and also runs git init
.image
parser now supports class
and id
tagsclass
tag with just a class will now apply to the whole parent element and not insert a spanabstractItemsProviderNode
[]
and [x]
-
are now indentableloop
node type:loop
atoms #2a2d34ff #009ddcff #f26430ff #6761a8ff #009b72ff
javascript `<span style="background-color: ${item}; width: 30px; height: 30px; display: inline-block;"> </span>`
startColumns
clear the section stack. Simpler behavior.getFullyExpandedFile
is no longer exported. Instead use: new ScrollFile(undefined, filePath).importResults.code
ScrollFile
have changed. absoluteFilePath
is now param #2, instaed of #3.css
one liners๐ added support for `css` one liners
class blueOneLiner
css .blueOneLiner { color: blue;}
title
nodes are now proper aftertext nodes and can use all features of aftertexthidden
parser can now be used on any aftertext nodepermalink
on a file the title
node won't output an a tagtitle
blocks now start a section like #
and ##
, so you may need to add an empty line to end the section, for example if you previously had a startColumns
right after the title tag.snippets
nodes can now accept multiple groups and also groups can be in different folders. Syntax is [folderPath]/[groupName]
For example:# The Long Beach Pub
snippets 2023/index stories/index 2022/index
jtree
66. If you are extending Scroll you may need to migrate extensions.scroll init
aboveAsCode
and belowAsCode
now take an optional number for showing multiple nodes.1. One
2. Two
3. Three
table
grammar error messagetable
parser which supports custom delimiters:table
delimiter &&
data
name&&score
kaia&&400
pemma&&100
class
aftertext directive now inserts a span across the whole element content if no text search is provided.css
.classDemo {color:blue;}
This whole text will be blue.
class classDemo
This whole text will be blue.
replaceJs
parser.youTube
CORS fix to work whether someone includes www.youtube or not.watch
command. nodemon
can be used for hot reloading. Install with sudo npm install -g nodemon
. Then run:nodemon -e scroll -x "scroll build"
Or alias it:
alias watch="nodemon -e scroll -x 'scroll build'"
You can add the following code to the page(s) you are working on to have them reload without manually refreshing the browser:
html <meta http-equiv="refresh" content="1;">
scroll init
no longer starts with a viewSourceBaseUrl
. If not provided then the View Source link is to the scroll file, so new sites don't start with broken links.link
nodes can now have target
. This link will open in blank tab.๐ `link` nodes can now have `target`. This link will open in blank tab.
https://scroll.pub This link
target _blank
title Title can also be set.
youTube
nodes can now have captions.youTube
links are converted to proper embed links to fix CORS issues.scrollImageComponent
CSS class changed to scrollCaptionedComponent
. If you were overwriting the previous class may need to update.note
parser under link
nodes has been renamed to title
and instead of it being a block just the line is used. This is to better reflect what it does. See example above.youTube
definition was missing a atom type for url.redirectTo
definition was missing a atom type for url.*
nodes previously supported multiple lines of text. This now throws an errors. If you need the old behavior you can copy/paste the old node's Grammar code into your project.*
node with just a link now works correctly. Previously was rendering blank.html
now also supports quick oneliners:html <b>here is some html</b>
here is some html
importOnly
buildNeeded
returns whether the folder needs to be rebuilt. You can use this to skip unnecessary builds for faster perf.scroll build
now does not overwrite unmodified files. Now mtime
reflects when the generated HTML last changed instead of when the scroll build
command was last run. This speeds up rsync
deploys.Sections
. Headers (#
, ##
and ?
) now start a section, and a blank line ends it. A section will not be split across columns.listCommand
now much faster (~33% in pldb) because findScrollsInDirRecursive
will now skip node_modules
folders entirely.notes
parser. Referencing a footnote is done the same way but now footnotes just print immediately like you'd expect.For example^exampleFootnote
For example[1]
[1] This is an example footnote.
^exampleFootnote This is an example footnote.
viewSource
parser.footnote
and caveat
directives to hoverNote
to avoid confusion with footnotes.startRuledColumns
which doesn't appear to be used anywhereyouTube
parser for embedding youTube videos with proper responsive sizing.This release simplifies and removes things from the default install.
github
parser is now git
to make it clearer what it does. The git SVG is now used in the default theme.twitter
parser and removed the Twitter link from default theme.SVGS
is no longer exported.printFeed
, meaning pubDate and lastBuildDate are included.stumpNoSnippet
for advanced use case of PLDB until we have better support for custom grammars when using as a library.doNotPrint
class to header and footer elements for better printability.startColumns
parserThis is a major breaking refactor. Scroll now generates flat html. This release is NOT recommended for the feint of heart. Wait a day or two until the bugs are ironed out.
metaTags
parser.
,
,
, and
tags. Unnecessary. Modern browsers don't need them. HTML never should have had head/body split.SCROLL_CSS
export.stump
parser works nowscrollCss
works nowThis is a major breaking refactor. All the implicit imports are gone. Everything must be explicitly included now (perhaps with a few slight exceptions like meta tags). This migration guide is a work in progress. This release is NOT recommended for the feint of heart. Wait a day or two until the bugs are ironed out.
maxColumns
and columnWidth
and template
scrollHeader
and scrollFooter
. The previous behavior of scrollHeader
and scrollFooter
has been removed.startColumns
and endColumns
.scrollCssTag
. The previous behavior of scrollCss
has been removed. Also printScrollCss
is now scrollCss
.Brockton is a city in Massachusetts[2]. It was incorporated in 1881[3].
[2] A state in the United States.
[3] Incorporated as a city in 1881, but as a town in 1821. Wikipedia.
This is the title
simplification refactor release.
description
parser for use in open graph description generation.hidden
parser on title
nodes for setting title
without printing it.title
in their HTML by default. Must set manually.siteTitle
and siteDescription
parsers. Those concepts no longer make sense after the introduction of groups
concept. Generally if you rename siteTitle
to title
and siteDescription
to description
it should work well.htmlTitle
parser.http
quick links were not matching.SVGS
export when using as a library.- some item
) compiler was generating an extra p
tag.a
tags automatically. Note: if an a
tag is detected in the node Linkify will be DISABLED for that node.scroll check
is now scroll test
search ^# (\d+\.\d+\.\d+) (\d+)\-(\d+)\-(\d+)
replace # $1 $4.$2.$3
caption
now extends the thought (*
) node.scroll init
no longer creates a feed.xml
file by default. You can easily add an XML feed manually with the 2 steps below:comment Add the content below to feed.scroll
settings.scroll
permalink feed.xml
template blank
printFeed index
comment Add the line below to your posts and/or settings import file.
rssFeedUrl feed.xml
aftertext
node in favor of *
nodes. Regex [search replace] to upgrade: ^aftertext\n
*
paragraph
node. Regex [search replace] to upgrade: ^paragraph\n
*
question
node. Regex [search replace] to upgrade: ^question
?
section
node. Regex [search replace] to upgrade: ^section
#
subsection
node. Regex [search replace] to upgrade: ^subsection
##
list
node.orderedList
node.unorderedList
node. ([^ ]+)๐([^ ]+)
2">1
The goal of this release is to simplify and speed up Scroll by removing legacy features.
This is a major release that removes a bunch of the original parsers in favor of the newer more advanced aftertext nodes.
If you don't want to upgrade at this time, it's very easy to just add the removed grammar definitions from this commit into your existing scrolls using the normal extension pattern.
You can also easily alias the newer aftertext node types with the original parsers above if you'd prefer.
*
nodes bug๐ Added new better way to do lists.
findScrollsInDirRecursive
.redirectTo
tagscroll list | scroll build
execute
method on ScrollCli class to executeUsersInstructionsFromShell
where
command is now list
?
, #
and ##
*
, footnote
, and readingList
This is a thought. It's like a condensed form of aftertext with bold and italics and code
turned on by default.
* This is a _thought_. It's like a condensed form of aftertext with *bold* and _italics_ and `code` turned on by default.
hoverNote default
And it supports hover notes!
openGraphImage
nodereplace
now supports multiline stringsabstract
. You can then remove all occurrences of the parser abstract
from your grammar node definitions.getFullyExpandedFile(str)
replace with getFullyExpandedFile(str).code
author
and kpiTable
node typesThis is a major update that radically simplifies Scroll and adds significant new capabilities.
scroll.settings
and *.grammar
files are gone. Everything is now done with .scroll
files, and now every parser is documented and usable on try.scroll.com and type checked.
Use [filepath]
to import one scroll file into another. Use replace
and replaceDefault
for variables.
Define new nodeTypes or create your own aliases on a per file basis. Use the import parser and build your own collection of common reusable node types for your project(s).
Add files to one or more tags and then customize how each tag page prints. No more magic or implicit creation of collection pages.
The new language features (imports, grammar nodes, and variables) required a change from a 1 one stage compilation process to a multi-stage compiler pass pattern. The compilers passes run in this order: imports, grammar extensions, then variables. So variables cannot be used in imports or grammar extensions.
git
setting is renamed to viewSourceBaseUrl
sourceLink
setting is renamed to viewSourceUrl
skipIndexPage
. Instead you now opt-in to group pages like this: groups index.html
scroll.settings
concept. Use settings.scroll
now.footer
is now scrollFooter
and header
is now scrollHeader
ignoreGrammarFiles
. Custom grammar extensions must now be explicitly imported and/or be in .scroll
files.css
setting is now scrollCss
buildFiles
now. See 'full.scroll', index.scroll
, feed.scroll
, and style.scroll
in tests/kitchenSink
for how to implement those in new pattern.scrollArticleDateComponent => scrollDateComponent
scrollArticlePageComponent => scrollFilePageComponent
scrollSingleArticleTitle => scrollFilePageTitle
scrollIndexPageArticleContainerComponent => scrollGroupPageFileContainerComponent
scrollArticleSourceLinkComponent => scrollFileViewSourceUrlComponent
scrollIndexPageComponent => scrollGroupPageComponent
scrollIndexPageFileContainerComponent => scrollGroupPageFileContainerComponent
comment Put this in a file named style.scroll
buildCss style.css
gazetteCSS
scroll where
keyboardNav
nodepermalink
lines in .scroll
files need .html
. Run scroll migrate
to find and update automatically.new ScrollPage('title Hello world')
treeTable
table
delimiter particles
printTable
data
row
name Javascript
example
console.log("Hello world")
row
name Python
example
# A code block
print "Hello world"
name | example |
---|---|
Javascript | console.log("Hello world") |
Python | # A code block print "Hello world" |
htmlTitle
and sourceLink
parsers so an article can override the defaultscss split
to write CSS to scroll.css
instead of inline, or css none
to not generate CSS.wrap
parser for advanced custom wraps in aftertext.Some simple and advanced usages. An absolute link and a relative link. Show some added text or some deleted text.
Some !simple! and *advanced* usages. An #absolute link# and @@@a relative link@@@. Show some ++added text++ or some --deleted text--.
inlineMarkup ! em
inlineMarkup * b
inlineMarkup # a href="https://example.com"
inlineMarkup @@@ a href="potato.html"
inlineMarkup ++ span style="color:green"
inlineMarkup -- span style="color:red; text-decoration: line-through;"
wrapsOn
parser to aftertext.Support for traditional bold, code
, and italics in aftertext with the parser wrapsOn
.
Support for traditional *bold*, `code`, and _italics_ in aftertext with the parser `wrapsOn`.
This tiny release adds some ways to include more caveats and context around atoms and references.
This is a great idea.
This is a great idea.
hoverNote great
I'm not actually sure if this is a great idea. But often I want to include a comment and link it
back to the text, but don't quite want to footnote it.
This report showed the treatment had a big impact.
This report showed the treatment had a big impact.
https://example.com/report This report
title The average growth in the treatment group was 14.2x higher than the control group.
Example demonstrating the above:
aftertext
Click here to go to the middle paragraph.
link #middleParagraph Click here
loremIpsum 20
aftertext
Here is the middle paragraph.
id middleParagraph
loremIpsum 20
table
delimiter |
printTable
data
name|nameLink
Wikipedia|https://wikipedia.org
name |
---|
Wikipedia |
By default the article's date will be used but you can also provide a custom date.
A truck transporting llamas collided into a pajama factory late last night.
dateline 2/21/2020
February 21, 2020 โ A truck transporting llamas collided into a pajama factory late last night.
To migrate and keep your existing datelines use the command scroll migrate
.
How much wood can a woodchuck chuck if a woodchuck could chuck wood?
How much wood can a woodchuck chuck if a woodchuck could chuck wood?
https://en.wikipedia.org/wiki/Groundhog woodchuck
matchAll
class standout wood
match 0 3
css
.standout {
background-color: yellow;
border: 1px dashed red;
padding: 5px;
}
You write some text. After your text, you add your markup instructions with selectors to select the text to markup, one command per line. For example, this paragraph is written in Aftertext and the source code looks like:
You write some text. After your text, you add your markup instructions with selectors to select the text to markup, one command per line. For example, this paragraph is written in Aftertext and the source code looks like:
italics After your text
italics selectors
blog/screenshot.png
caption This is a caption
question
nodes?Question and answer structures are literally older than the Socratic Method. Such a common semantic pattern deserves it's own parsers.
The below regex may help.
Find ^title\d (.+\?)
ReplaceWith question $1
Find ^title\d (.+)
ReplaceWith section $1
what | why |
---|---|
PipeTable | Because it's awesome! |
To use an image node:
image foo.jpg
QuickParagraphs are now an error. When you want to drop in some HTML, do so with HTML node:
html
<b>anything goes here</b>
scroll check
commandFor single atom links in paragraph nodes only (for now) you can now do:
paragraph
This is a link๐example.com
Below is a regex for migrating existing *.scroll
files.
<a href="https://([^"]+)">([^ ]+)</a>
$2๐$1
The ๐link tag only supports single atom links. Like everything with ScrollScript, you have a number of options if the conventional design doesn't work for you. Your options are:
foo ๐link bar ๐link
Now you can! Sometimes you just want to publish an independent page without including it in the index. To do that, just add skipIndexPage
.