diff --git a/pwiki/page.js b/pwiki/page.js
index 0324e41..2dc6b7b 100755
--- a/pwiki/page.js
+++ b/pwiki/page.js
@@ -855,7 +855,7 @@ object.Constructor('Page', BasePage, {
.call(this, Object.fromEntries(Object.entries(quote)), null, state)
// local filters...
- if(body){
+ if(body != null){
// expand the body...
var ast = expand ?
this.__parser__.expand(this, body, state)
@@ -903,9 +903,10 @@ object.Constructor('Page', BasePage, {
// At the moment nested recursion is checked in a fast but
// not 100% correct manner focusing on path depth and ignoring
// the context, this potentially can lead to false positives.
+ // XXX need a way to make encode option transparent...
include: Macro(
['src', 'recursive', 'join',
- ['strict', 'nonstrict', 'isolated']],
+ ['s', 'strict', 'nonstrict', 'isolated']],
async function*(args, body, state, key='included', handler){
var macro = 'include'
if(typeof(args) == 'string'){
@@ -927,6 +928,7 @@ object.Constructor('Page', BasePage, {
var isolated = args.isolated
var strict = args.strict
&& !args.nonstrict
+ var strquotes = args.s
var join = args.join
&& await base.parse(args.join, state)
@@ -989,6 +991,11 @@ object.Constructor('Page', BasePage, {
// load the included page...
var res = await handler.call(page, full, state)
depends.add(full)
+ res = strquotes ?
+ res
+ .replace(/["']/g, function(c){
+ return '%'+ c.charCodeAt().toString(16) })
+ : res
// NOTE: we only track recursion down and not sideways...
seen.delete(full)
@@ -1006,7 +1013,7 @@ object.Constructor('Page', BasePage, {
source: Macro(
// XXX should this have the same args as include???
['src', 'recursive', 'join',
- ['strict', 'nonstrict', 'isolated']],
+ ['s', 'strict', 'nonstrict', 'isolated']],
//['src'],
async function*(args, body, state){
var that = this
@@ -1845,7 +1852,7 @@ module.System = {
⇑
[@source(./location/!)]
⟳
- ✎
+ ✎
@@ -1891,13 +1898,13 @@ module.System = {
+''
+ +'oninput="saveLiveContent(\'@source(s ./path)/name\')">'
+'@source(./name)'
+'
'
+''
+ +'oninput="saveLiveContent(\'@source(s ./path)\', this.innerText)">'
+'
'
+'
'
+''},
@@ -1912,13 +1919,13 @@ module.System = {
+ oninput="saveContent(\'@source(s ./path)/title\', this.innerText)">
@source(./title)
`},
@@ -1932,11 +1939,11 @@ module.System = {
text: object.doc`
☰
- ⇑
+ ⇑
@source(../path)
- @source(./name)
+ @source(./name)
a
@@ -1945,9 +1952,9 @@ module.System = {
- (@include(./*/length/!))
+ (@include(./*/length/!))
- ×
+ ×
` },
// XXX this is really slow...
tree: {
@@ -1956,9 +1963,9 @@ module.System = {
@include("./tree:@(all)")
@@ -1970,11 +1977,11 @@ module.System = {
info: {
text: object.doc`
Path: [@source(../path) ]
- (
edit)
+ (
edit)
Resolved path: [@source(../resolved)]
- (
edit)
+ (
edit)
Referrer: [@source(../referrer)]
- (
edit)
+ (
edit)
Args:
type: @source(../type)
@@ -2141,11 +2148,13 @@ module.Templates = {
🗎
` },
+ // XXX this is not resolved...
+ 'FlatNotes/.templates/EmptyPage': {text: ' '},
}
var Test =
diff --git a/pwiki/path.js b/pwiki/path.js
index ae33b32..52a31b3 100755
--- a/pwiki/path.js
+++ b/pwiki/path.js
@@ -52,14 +52,14 @@ module = {
// XXX EXPERIMENTAL
encode: function(str){
return str
- .replace(/[#:*%'"]/g,
+ .replace(/[#:*%]/g,
function(s){
return '%'+s.charCodeAt().toString(16) }) },
decode: function(str){
return decodeURIComponent(str) },
encodeElem: function(str){
return str
- .replace(/[#:*%'"\\\/]/g,
+ .replace(/[#:*%\\\/]/g,
function(s){
return '%'+s.charCodeAt().toString(16) }) },
decodeElem: function(str){
diff --git a/pwiki2.html b/pwiki2.html
index 71fcf9c..8be6011 100755
--- a/pwiki2.html
+++ b/pwiki2.html
@@ -178,6 +178,9 @@ var SAVE_LIVE_QUEUE = {}
var saveLiveContent =
function(path, text){
+ path = path
+ .replace(/%22/g, '"')
+ .replace(/%27/g, "'")
SAVE_LIVE_QUEUE[path] = text
// clear editor page cache...
pwiki.cache = null }
@@ -185,6 +188,9 @@ function(path, text){
var SAVE_QUEUE = {}
var saveContent =
function(path, text){
+ path = path
+ .replace(/%22/g, '"')
+ .replace(/%27/g, "'")
SAVE_QUEUE[path] = text
}
diff --git a/pwiki2.js b/pwiki2.js
index 5fb50e0..646a496 100755
--- a/pwiki2.js
+++ b/pwiki2.js
@@ -6,13 +6,6 @@
* - fs store/export in browser or a simple way to export/import...
*
*
-* XXX BUG titles containing quotes break things...
-* this works:
-* await pwiki.get('/FlatNotes/* /delete').raw
-* opening/editing/deleting from ui breaks -- macro issue??
-* ...seems to be at least a problem with macros eating up quotes...
-* do not see how we can resolve this issue transparently in any
-* way other than disallowing quotes...
* XXX BUG: for some reason deleting and refreshing takes ~2x as long as
* refreshing...
* to reproduce: