* fix for #3547
see https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
because of "strict mode" - the `parentNode` property may not be writable and causes an error in `fakedom.js` (appendChild)
to reproduce: install CodeMirror, install "Tools for exploring internals of TW", open a heavy Tiddler like the Control-Panel in edit-mode, toggle preview on, switch to "parse tree" or "widget tree"
* check for tw fakedom
* use "text" config scheme
* use "text" config scheme
* use "text" config scheme
* use "text" config scheme
* use "text" config scheme
* use "text" config scheme
* use "text" config scheme
* use "text" config scheme
* use "text" config scheme + set type integer
* use "text" config scheme
* set type integer
* set type integer
AWS imposes a limit of 16MB in my testing for the payload of a lambda. Compressing it enables us to pass x2-3 more data, thanks to the inefficiencies of JSON
this reverts #3070 which prevents dragging text from one codemirror instance to another
there are other ways to solve the issue I tried to solve with this, so we should revert this to the standard behavior
As proposed in #3378
* Experimental support for comments on the entire wiki (enable in the plugin config panel). Implemented as comments on $:/SiteTitle, with the comments appearing at the top of the story river
* Refactor the "add comment" button actions so that they can be reused
* Refactor the comment toolbar to be extensible via a system tag
* Add an $:/AdvancedSearch canned filter for accessing all comments
* Module-ize server routes and add static file support (#2510)
* Refactor server routes to modules
New module type: serverroute
Caveats: Loading order is not deterministic but this would only matter
if two route modules attempted to use the same path regexp (that would
be silly).
* Add static assets plugin
This plugin allows the node server to fetch static assets in the /assets
directory. I felt that this was a feature that goes above the core
functionality. That is why I added it as a plugin. with the modular
route extensions this was a breeze.
* Add serverroute description to ModuleTypes
* Coding standards tweaks
* Fix filename typo
* Move support for attachments from a plugin into the core
* Missing "else"
* Refactor server handling
* Introduce a new named parameter scheme for commands
* Move the SimpleServer class into it's own module
* Deprecate the --server command because of the unwieldy syntax
* Add a new --listen command using the new syntax
For example:
tiddlywiki mywiki --listen host:0.0.0.0 port:8090
* Add check for unknown parameters
* Add support for multiple basic authentication credentials in a CSV file
Beware: Passwords are stored in plain text. If that's a problem, use an authenticating proxy and the trusted header authentication approach.
* Refactor module locations
* Rename "serverroute" module type to "route"
* Remove support for verifying optional named command parameters
The idea was to be able to flag unknown parameter names, but requiring a command to pre-specify all the parameter names makes it harder for (say) the listen command to be extensible so that plugins can add new optional parameters that they handle. (This is particularly in the context of work in progress to encapsulate authenticators into their own modules).
* Refactor the two authenticators into separate modules and add support for authorization
* Correct mistaken path.join vs. path.resolve
See https://stackoverflow.com/a/39836259
* Docs for the named command parameters
I'd be grateful if anyone with sufficient Windows experience could confirm that the note about double quotes in "NamedCommandParameters" is correct.
* Be consistent about lower case parameter names
* Do the right thing when we have a username but no password
With a username parameter but no password parameter we'll attribute edits to that username, but not require authentication.
* Remove obsolete code
* Add support for requiring authentication without restricting the username
* Refactor authorization checks
* Return read_only status in /status response
* Fix two code typos
* Add basic support for detecting readonly status and avoiding write errors
We now have syncadaptors returning readonly status and avoid attempting to write to the server if it's going to fail
* Add readonly-styles
We hide editing-related buttons in read only mode
I've made this part of the tiddlyweb plugin but I think a case could be made for putting it into the core.
* Add custom request header as CSRF mitigation
By default we require the header X-Requested-With to be set to TiddlyWiki. Can be overriden by setting csrfdisable to "yes"
See https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet#Protecting_REST_Services:_Use_of_Custom_Request_Headers
* Add support for HTTPS
* First pass at a route for serving rendered tiddlers
cc @Drakor
* Tweaks to the single tiddler static view
Adding a simple sidebar
* Switch to "dash" separated parameter names
* Typo
* Docs: Update ServerCommand and ListenCommand
* First pass at docs for the new web server stuff
Writing the docs is turning out to be quite an undertaking, much harder than writing the code!
* Get rid of extraneous paragraphs in static renderings
* Rejig anonymous user handling
Now we can support wikis that are read-only for anonymous access, but allow a user to login for read/write access.
* More docs
Slowly getting there...
* Static tiddler rendering: Fix HTML content in page title
* Docs updates
* Fix server command parameter names
Missed off 30ce7ea
* Docs: Missing quotes
* Avoid inadvertent dependency on Node.js > v9.6.0
The listenOptions parameter of the plain HTTP version of CreateServer was only introduced in v9.6.0
cc @Drakor @pmario
* Typo
* Update codemirror.js
* Update xml-fold.js
* Update javascript.js
* Update markdown.js
* Update readme.tid
* add tiddlywiki theme to codemirror demo
* set tiddlywiki theme for codemirror demo
* correct naming of meta to tw-meta
* vim keymap updates were missing - now added
* Create swipe.js
* add swipe widget
* add popup handling
* velocity mini-tweak
* add press widget
* add tap widget
* remove popup from tap widget - not possible as it seems
* add pan widget + utility css
* correcting field name
* naming and formatting
* add usage
* add pinch widget
* add pinch widget
* various small fixes
* adding absolute coordinates to pan widget
* prevent default dragging for pan widget
* improve pan widget stability
* try adding data-dynaview-unset-tiddler
I obviously lied
* dynaview unset functionality when scrolling out of view
* additional undefined check
* Update docs.tid
* update true and false to "true" and "false"
* add example of unset functionality
* Update reveal-on-scroll.tid
* v5.35.1
* codemirror 5.35.1
* v5.35.1
* v5.35.1
* v5.35.1
* v5.35.1
* v5.35.1
* adding search&replace and autocomplete
* update version number
* add jump-to-line.js required for search&replace
* adding show-hint.js required by autocomplete
* adding basic autocomplete for any word
* adding autocomplete css
* adding new files to tiddlywiki.files
* forgot adding search.js
* minify 'em all
* Delete vim.js
* Delete sublime.js
* Delete emacs.js
* Delete anyword-hint.js
* Delete show-hint.css
* Delete show-hint.js
* Update config.tid
* Update tiddlywiki.files
* Update tiddlywiki.files
* Update config.tid
* Update config.tid
* Update config.tid
* Delete dialog.js
* Delete dialog.css
* Delete jump-to-line.js
* Delete search.js
* Delete searchcursor.js
* Update tiddlywiki.files
* Update tiddlywiki.files
* Update tiddlywiki.files
* add search-and-replace cm-addon as plugin
* add autocomplete cm-addon as plugin
* add fullscreen-editing cm-addon as plugin
* add keymaps as plugins + cleanup
* add highlighting modes as plugins
* small update on usage.tid
* moved multiplex.js to htmlembedded mode - the only one using it
* config/CodeMirror update
* how to disable line numbers
* how to change CM theme
* add closebrackets and closetags addons
* packaging a base-addon
* move meta.js from codemirror to base addon
* inputStyle: textarea -> prevents contenteditable on mobile browsers, keeps focus when clicking toolbar buttons, prevents import on paste
* default config no line numbers
* temporary add panel plugin for demo
* put base-plugin back to codemirror editor
* searchcursor to searchnreplace plugin
* bad copypasta mistake
* another typo
* stripped down meta.js + moved matchbrackets to closebrackets plugin
* remove panel
* change module-type to codemirro and make init "require" dynamic.
* make config handling dynamic with sensible defaults
* make cm settings translateable
* delete multids. they will be replaced
* add auto-config tiddlers
* dynamically create config structure for CM
* fix filename
* change typo
* kitchensink config, plus change plugin description for better sorting.
* add matchBrackets config tiddler
* RIP codeblock
* removed install instructions from readme - codemirror usage tiddler still todo
* control panel settings for cm base
* add setting for auto-close tags
* adding fontfamily settings and theme settings
* change tags for settings from $:/tags/ControlPanel/Settings to $:/tags/ControlPanel/Settings/CodeMirror
* more usage info
* more usage info
* update to v5.36.0
* ugly hack enables highlighting and tag-closing for vnd.tiddlywiki and x-tiddlywiki
* disable auto-indent for vnd.tiddlywiki & x-tiddlywiki and add some hidden settings
* remove engine.js hack
* meta.js -> tw-meta.js
* codemirror settings tab
* rename tiddler to tw-meta.js
* make editor font monospace or sans-serif - dropdown select
* make editor font monospace or sans-serif - dropdown select
* now using correct tiddler for editor font setting
* better usage doc
* make markdown-mode require tw-meta
* add more themes info
* add active-line highlighting option
* mini usage change
* add integer type to engine.js config-getter
* blink rate config type string
* correct engine.js
* license for base-plugin, usage link in settings tab
* codemirrordemo hellothere update
* codemirrordemo hellothere update
* Update license.tid
* codemirror demo sidebarlayout, license
* license headers to addon files
* license formatting & forgot what year we have
* license formatting & forgot what year we have & codemirror demo sitetitle sitesubtitle
* more informations 'try-this-style' for codemirrordemo hellothere
* codemirror demo sitetitle & cm fontfamily
* hellothere
* font-family setting must be editor-font-family, not code-font-family
* add basic keyboard shortcuts table
* shortcuts change to not interfere with toolbar shortcuts - needs testing - vim and emacs todo
* formatting
* controlpanel change keymap - default keymap is default
* ctrl-T becomes Alt-T in default keymap
* adjustments for codemirror demo
* demo: hellothere - hint for sidebar keymap cheatsheet
* toolbar focus fix + remove console log
* engine.js cleanup
* formatting
* reverting focus fix
* indenting engine.js
* hoping that indenting gets better
A mechanism to choose the optimum font size of a passage of text to yield a particular numbr of characters per line.
@BurningTreeC I've made some minor consistency tweaks and cleanups to the viewport stuff, too.
* add KaTeX logo
* add katex stamp button
* add katex stamp dropdown
* add a snippet so that the dropdown isn't empty
* correct dropdown title
* change tag
* update snippets tag
Fixes https://github.com/Jermolene/TiddlyDesktop/issues/124 (the problem over there is that TiddlyWiki running as a wiki folder in TiddlyDesktop reports itself as running both under Node and the browser, and the previous test was wrongly choosing the fakedom)
* In the interests of performance and expressiveness, switched to using a Sax parser instead of a DOM implementation.
* Use extensible declarative rules to control the slicing process
* Added new optional set of rules for slicing by heading, where the paragraphs underneath a heading are packed into the same tiddler as the heading
* Added a modal dialogue for specifying parameters when slicing in the browser
This plugin provides support for importing tiddlers as external attachments -- it only works on platforms such as TiddlyDesktop that provide the required "path" property with imported files.
Using the plugin means that instead of importing binary files as self-contained tiddlers, they are imported as "skinny" tiddlers that reference the original file via the ''_canonical_uri'' field. This reduces the size of the wiki and thus improves performance. However, it does mean that the wiki is no longer fully self-contained
Instead of the simple ‘prefix’ and ‘extension’ parameters, we now
accept a filename filter. As well as allowing prefixes and suffixes to
be added via filter operators, we can also transform the title
Tools for working with Amazon Web Services:
* Templates for saving a TiddlyWiki as a single JavaScript file in a
ZIP file that can be executed as an AWS Lambda function. In this form,
TiddlyWiki is a self contained single file containing both code and
data, just like the standalone HTML file configuration
* Commands that can be used to interact with AWS services, under both
the Node.js and Lambda configurations of TiddlyWiki
We now use highlight.js in raw HTML mode on the server, rather than
trying to use it with the fakedom. This causes problems with fakedoms
inability to get textContent for a node that has been created by
assigning innerHTML. So we extend the fakedom to allow the original
text content to be saved.
See #2778 for discussion.
The code here had got a bit broken by some PRs that I should have
checked more carefully. I’ve done a major refactoring which will
hopefully make it easier to understand, and fixes a number of problems:
* Problem with eg .md tiddlers not being deleted correctly
* Problem with Windows path separators not being usable within
$:/config/FileSystemPaths on Windows
* Problem with filename clashes not being detected correctly when
saving to a different directory via $:/config/FileSystemPaths
* Enables slashes within tiddler titles to be mapped into folders
* Enables plain text files like .md and .css to be saved with .meta
files instead of as .tid files (see #2558)
* No longer replaces spaces with underscores
As this is such a major update, I’d be grateful if Node.js users could
give it a careful run through — in particular, you’ll need to try
creating new tiddlers of various types and ensure that the expected
files are created.
See the readme:
“This plugin causes TiddlyWiki to continuously save the contents of
each tiddler that is changed as a JSON file. Configured correctly, the
browser will download the files silently in the background, and they
can be used as a backup in case of accidental data loss.”
Inspired by @telmiger’s comment (3) here:
https://github.com/Jermolene/TiddlyWiki5/issues/2741#issuecomment-276128
871
* trying to implement new googleanalytics tracker
* trying to put new google tracker. Not working...
* more dev options for testing
still don"t understand wants goes wrong
* New version. Seems to work
* achieved update for new tests
brought back tiddlywiki.com settings value
created a settings tab to make it easier
* adding settings to plugin
add a settings tab to plugin to make it easier to use and see which GA account is in use
* fixes bug with GA_ACCOUNT and GA_DOMAIN tiddlers containing newlines at their end, preventing plugins to work
* soft rebase on jermolene's master
* revert to oldest version of GA_account and GA_domain tiddlers - had been overwritten by ones with a new line at the end
* Integrates some @tobibeer comments
* googleanalytics.js : removed "rebranding", var declaration and console log. Did not manage to get a non-minified version of Google script. But as far as I can see, jermolene's original plugin did same way
* plugin.info : placed "readme" first
* readme : back to previous "legacy" version. No more mention to temporary fork. Added mention and link to google official code.
* signed CLA
Add support for skipping an entire tiddler if a particular column is
blank
Add support for reading a row by column, making each of the columns
into a fieldname.
Also significantly refactored the code to break up the main, monolithic
function.
Hi @welford I wondered if you could kindly review this commit, since
you authored the original code? Before this commit, I was running into
a crash when running `prerelease-bld.sh` from
`build.jermolene.github.io`, caused by using raw HTML for the
highlighted block. Switching to the fake dom seems to fix things, but
I’d like a second pair of eyes.
TiddlyWiki passes the MIME type of the tiddler to highlight.js as the
"language brush", but it turns out that highlight.js doesn't actually
understand MIME types. This commit introduces a configuration mapping
between common MIME types and highlight.js language brushes
Fixes#2535
We were using `String.prototype.replace()` without addressing the
wrinkle that dollar signs in the replacement string have special
handling. This caused problems in situations where the replacement
string is derived from user input and contains dollar signs.
Fixes#2517
Fixes#2503
This bug was introduced in commit c4c7b18 where it would append
additional .tid extensions to a file every time the node server was
restarted.
Here we check the filepath does not have the extension already before
appending it.
The plan had been to switch template depending on the content type, but
we’d only implemented support for saving wikitext tiddlers. That meant
that creating a tiddler with any non-wikitext content type failed to
write the file correctly under Node.js.
Now we just always save in .tid file format.
* Save binary tiddlers with meta file
The filesystemadaptor plugin was a little simplistic in its
understanding of a binary file. It was using the typeInfo dictionary to
choose what tiddler types were binary (and hence needed a meta file when
saving).
I looked as if it was trying to be smart by looking for the hasMetaFile
*OR* had the encoding of base64. Unfortunately the typeInfo only defined
image/jpeg and so any other base64 encoded tiddler was assumed to be of
type text/vnd.tiddlywiki.
The net effect was only JPG images got a meta file and everything else
were saved as .tid files with base64 encoding. It all still worked but
made working with binary data in a Git repo a bit daunting.
There is enough information in the $tw.config.contentTypeInfo to
determine if a tiddler type is encoded with base64 or not. A better list
is available from boot/boot.js who registers all the types thorough the
registerFileType and marks then with base64 were appropriate.
This commit uses the typeInfo dictionary first for any filesystem
specific overrides, then the contentTypeInfo, and finally defaults to
the typeInfo["text/vnd.tiddlywiki"]. It also eliminates the now
unnecessary override for image/jpeg.
I think this might have been the original intent from commit 10b192e7.
From my limited testing all files described in boot/boot.js (lines
1832-1856) with an encoding of base64 now save as the original binary
and a meta file. Meaning that when you start the node server and then
drag-n-drop a binary file (i.e. image/png) it will PUT to the server
and then save it on the filesystem as-is allowing the file to be managed
as a binary file and not a text file. (Binary diffs are better and
GitHub supports them as well).
* Prevent duplicate file extensions
A side effects of using the $tw.config.contentFileInfo in the previous
commit is that it will always append a file extension to the tiddler
title when saving. In most cases this is the correct course of action.
However, sometimes that title is already a proper filename with an
extension (for example importing 'foobar.png' would save a file named
'foobar.png.png') which seemed silly.
This commit simply checks to make sure the title does not already end
with the file extension before appending it to the filename. A little
convenience really.
Since IE apparently doesn't have the String endsWith method I took the
liberty to add a helper method to $tw.utils trying to follow the other
polyfill patterns. I figured this was more generic and readable then
attempting to use a one-off solution inline. I got the polyfill code
from MDN.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith#Polyfill
Is strEndsWith the best method name?
When saving new tiddlers on node.js, allow the user to override the path of the
generated .tid file. This is done by creating a tiddler
$:/config/FileSystemPaths which contains one or more filter expressions, one
per line. These filters are applied in turn to the tiddler to be saved, and
the first output produced is taken as a logical path relative to the wiki's
tiddlers directory. Any occurences of "/" in the logical path are replaced with
the platform's path separator, the extension ".tid" is appended, illegal
characters are replaced by "_" and the path is disambiguated (if necessary) in
order to arrive at the final tiddler file path. If none of the filters matches,
or the configuration tiddler does not exist, fall back to the previous file
naming scheme (i.e. replacing "/" by "_").
This implies we will now, for tiddlers matching the user-specified filters,
create directory trees below the tiddlers directory. In order to avoid
cluttering it with empty directory trees when renaming or removing tiddlers, any
directories that become empty by deleting a tiddler file are removed
(recursively).
Benefits of this configuration option include the ability to organize git
repositories of TiddlyWikis running on node.js, ability to replace characters
that cause trouble with particular operating systems or workflows (e.g. '$' on
unix) and the ability to replicate tiddler "paths" in the filesystem (by
including a filter like "[!has[draft.of]]") without forcing such a (potentially
problematic) change on all users.
* Add icon for view template segment
* Muted background colour for view template segment
* Include links to parent tiddlers in the view template segment
* Fix logic for hiding/showing documents/headings (“open”/“close” were
transposed)
Without modified dates, new imports do not appear in recent file list. The equivalent of modified dates in ENEX is the 'updated' tag, with a date format similar to that of TW with the exception that the date format consists of a date stamp, a letter T, and a time stamp followed by Z for UTC presumably. There is no millisecond indicator. Not all ENEX notes have an update tag. The solution here is to apply creation date by default and then apply the update date if it is available. Dates are converted by stripping out Z and T and appending '000'.
@sukima the main issue with the previous code was that it incorrectly
used comma to delimit tags. We actually use spaces, and double square
brackets to delimit tags containing spaces. Better is to leave the tags
field as an array; the core will serialise it correctly as required.
I also made some minor consistency tweaks.
Relates to Issue #2268
I tried to map over the list of tags but NodeLists are not arrays and so
need to be converted. This looks ugly and probably should be abstracted
to a function. Come to think of it should we have a `$tw.utils.map()`
function?
Relates to Issue #2268
Based in the [example XML][1] attachments are listed in the <resources>
node. Since in TiddlyWiki these would be media tiddlers I add then one
by one as separate tiddlers.
There are some things that still need to happen. There should be a mime
type check so we don't attempt to import media tha TiddlyWiki doesn't
support. Also the example suggests the data is base64 encoded so I
blindly use that for the text attribute. Should there be a
`data:mediatyp;base64,…` prefix?
[1]: https://gist.github.com/evernotegists/6116886
Integrating this module allows us to do HTML/XML parsing under Node.js
(there is no built-in support for Node.js; we can already do HTML/XML
parsing in the browser). The implementation chosen is pure JavaScript,
and will work in all configurations of TiddlyWiki.
The immediate motivation is the work I’m doing to integrate with Amazon
Web Services.
We should be able to use JSZip to export multiple tiddlers in a single
operation from the browser.
Instead of showing a sequence of all documents in the preview column,
we just show a single document, with a dropdown to choose which one is
shown.
The change makes it easier to deal with large numbers of documents.
The metadata for each field is in a tiddler tagged
`$:/tags/DocumentMetaData` with the field `caption` being the displayed
caption for the field and `field` being the name of the field.
`field-type` is the type of the field, and can be “string” or “list”.
Previously, newly created image files would end up being saved as a
base64-encoded .tid file. Now they are saved as an ordinary binary file
with an accompanying .meta file for the metadata.
By making the docs available as a plugin we make it easier for people
to fork their own copy of the docs without losing the ability to get
updates in the future (which can be done just be updating the docs
plugin)
Many reasons:
* to allow subtrees to be grafted more easily
* to keep the tags for an entry clean by removing structural tags and
leaving the semantic tags
* to avoid the duplication of expressing the same relationship through
both the tags and list fields
1. Switch from using the text field of lists for storing the associated
filter to using the field `toc-list-filter` (to make it harder to
accidentally parse the text of an ordinary tiddler as a filter)
2. Fix several bugs
The exclude filter `+[tag[intro]]` will produce a document that only
includes the paragraphs with the tag “intro”. These are derived from
the paragraphs in the original document with the CSS class “intro”.
* Add warning in document tiddler toolbar if tiddler already exists
* Live preview document in new window
* Fix slicer.js bug that was preventing the list field of headings from
being filled in correctly
* Rationalise some class names
Now includes a special document view column on the left. Headings can
be expanded/collapsed, and tiddler titles can be inspected and renamed
via the toolbar. Clicking on an entry opens the associated tiddler. The
default tiddler view template includes a special section for tiddlers
that are part of a document
Now we process the rendered HTML of tiddlers, which allows us to
process HTML generated by MS Word. In fact, the HTML that MS Word
generates is so awful, I’ve instead been using Mammoth to do the
conversion: https://github.com/mwilliamson/mammoth.js
Also some necessary improvements to the fake dom implementation.
1. Introduce template tiddlers for the document, each tiddler, and the
tiddler toolbar
2. Move the text slicer toolbar button to the left of the edit button
3. Add a selectable toolbar, currently just containing the tiddler title