QL
Open Stories and Issues
Add the Map Collection to QL: This is a
huge feature, and would be significant effort to add, but it's generally useful, and I've been thinking about it since the early days.
As a QL author, I can use pattern matching: QL is a pure functional programming language. Every functional programming language winds up needing pattern-matching. So we should at least begin to design for this, on the theory that we will need it eventually.
I can define an Edit Button: This is to deal with a major usability bug in the Page Header Property -- there is no way to add an Edit button to it!
I should be able to construct a Model Value in code: This is the thin end of a wedge, but I really want to be able to specify, eg, a Duration of 2 years inline in the Carolingian Officers' Space. At the moment, I have to construct pointless Things just to hold values that I am using in code.
I should be able to easily manage how Links to my Things render: This comes up in A Respectful Calm. The Display Name is a gender-neutral version of the Character's name, like "I Zubin", so when I link to a Character that's how it shows up. But I'd really like to be able to instead display the Full Name Property when linking like that -- it's usually what I want.
Invocation should be based on the State Monad: This is to fix the "elem" problem -- the fact that you have to
manually remember, after calling something like contextBundlesAndElements, to use the elem later in the for comprehension. If you goof, you get multiplicative horror. We need this to be automatic.
Period Games Board Game page is now timing out: This has been running slow for a long time, but it's now actually failing. I would bet dollars to donuts that this is the last straw, requiring me to rewrite the QL rendering pipeline.
QL needs a match function: There are times when you
really want a switch or match function. Just as a simple example, in the Respectful Calm Space, there are several functions that want to match on Character Gender and produce different Text as a result. This is classic "match" in the Scala sense, but you currently have to do it with annoying nested _if's.
Rewrite the internal QL pipeline: This one is still deeply hypothetical, and huge, but the potential performance gains are sufficiently huge as to be worth really digging down and dealing with it.
Think through the security of Undelete: The undelete capability is quite powerful, especially now that
undeleteThing()
exists. It's arguably too powerful. Figure out what the rules should be, and implement them.
Users of a Space should have a Profile: Profiles / profile pages are ubiquitous on any sort of interactive website, for several good reasons: (1) if the site is remotely social, people want a sense of "who is this other user?" - creating a sense of community requires creating a sense of personhood. (2) websites
very often want to present the user with relevant preferences.
_tagRefs -> _bulleted is not giving the expected behavior.
Closed Stories and Issues
if(isEmpty(<foo>),xxx,<bar>)
'Xxx' was just a placeholder for while I worked on getting foo and bar correct. Once 'xxx' was displaying when expected, O tried removing it, leaving:
if(isEmpty(<foo>),,<bar>)
When I tried refreshing my test Event, I got a vague message about an unexpected error being logged.
._self
causes QL to crash: Eric originally reported this as a more complex QL expression, but the essence of the bug is that, if you say
._self
in a QL expression (with nothing before the dot), the parser crashes.
From a Model Value, I should be able to access the enclosing Thing: This is a subtle but significant problem pointed out by Eric. Sometimes, when you are building a sophisticated Model Type, you really want to be able to access contextual information that exists on the enclosing Bundle. For example, in his highly-customized Review Types, he wants to be able to display the current Average -- but the Average Property is on the Thing, not on the Review, and the Review currently has no way of getting to the enclosing Thing, even in workaround.
I can have a new Thing point back to the creating Thing: I've found that I often wind up with parent-child relationships between Things; in particular, I often want to put a button on Parent that says, "Create a new Child". All of which works decently well (using _createButton or _createInstanceLink), but with one problem: the Child doesn't start out with the pointer back to the Parent. I have to set that back-link manually, which is a hassle.
I should be able to specify a Display Name in QL: Currently, there is no way to use a Display Name in QL. This is inconvenient, especially for use with Tags. It would be damned useful to be able to give an Unknown Name that was actually a Display Name.
I should be able to use named parameters in QL: Currently, it is awkward to deal with complex parameter lists in QL: you can have optionals, but there is no good way to define a lot of parameters with defaults, and only specify one or two.
QL Functions can run indefinitely: Currently, it is fairly easy to write a QL expression that runs for Way Too Long -- far longer than the Gateway will allow. It's probably possible to write an infinite loop, although we try to avoid that. That's not okay.
Syntax errors should be contained: Currently, if a page has a syntax error, it generally blows the entire page -- there's little context, and it gets really annoying. Really, the syntax error should be isolated to the current "level" -- in particular, a syntax error in a QL expression should
only affect that expression, and not blow the page.
View Source fails to render List Literals: Noticed while looking at Eric's Space -- his parameters to _search look empty. This turns out to be because they are List Literals, and are undoubtedly not getting escaped properly for display.