Thanks, Jeremy,

adding value=$tw.utils.parseDate(value) to $tw.utils.stringifyDate()
function seems to do the trick.  parseDate() is defined right after
stringifyDate() and seems to do exactly what is needed.  You may consider
adding it there for future releases.  It's a good idea to make sure that
value is a date object before using getUTCFullYear() function on it.

// Convert a date into UTC YYYYMMDDHHMMSSmmm format
$tw.utils.stringifyDate = function(value) {value=$tw.utils.parseDate(value);
        return value.getUTCFullYear() +
                        $tw.utils.pad(value.getUTCMonth() + 1) +
                        $tw.utils.pad(value.getUTCDate()) +
                        $tw.utils.pad(value.getUTCHours()) +
                        $tw.utils.pad(value.getUTCMinutes()) +
                        $tw.utils.pad(value.getUTCSeconds()) +
                        $tw.utils.pad(value.getUTCMilliseconds(),3);
};

// Parse a date from a UTC YYYYMMDDHHMMSSmmm format string
$tw.utils.parseDate = function(value) {
        if(typeof value === "string") {
                return new Date(Date.UTC(parseInt(value.substr(0,4),10),
                                parseInt(value.substr(4,2),10)-1,
                                parseInt(value.substr(6,2),10),
                                parseInt(value.substr(8,2)||"00",10),
                                parseInt(value.substr(10,2)||"00",10),
                                parseInt(value.substr(12,2)||"00",10),
                                parseInt(value.substr(14,3)||"000",10)));
        } else if($tw.utils.isDate(value)) {
                return value;
        } else {
                return null;
        }
};


On Thu, Mar 10, 2016 at 12:44 AM, Jeremy Ruston <[email protected]>
wrote:

> Hi Arkady
>
> As far as I can tell, you have correctly set up the tiddlerfield object to
> describe the new “scheduled” field.
>
> The problem is that your “New Tiddler” has a “scheduled” field that is a
> string; the tiddlerfield object causes the core to expect the field to be a
> date, hence the crash when it turns out to be a string.
>
> I suspect that the problem is caused by the way that you are assigning a
> value to the field, which is just to set it to a string value.
>
> You may be able to work around it by ensuring that the field is set to a
> JS date object.
>
> Having said that, the core function $tw.utils.stringifyDate() could be
> modified to automatically convert strings to dates, which might work around
> the problem.
>
> Best wishes
>
> Jeremy
>
> On 10 Mar 2016, at 02:44, Arkady Grudzinsky <[email protected]> wrote:
>
> Jeremy,
>
> I see, most of the features I asked for back in 2013 in this thread are
> implemented now (e.g. date comparison with "days[]" filter).  I'm returning
> back to the idea of tracking my projects in TW5.  I created a custom date
> field called "scheduled" using the methodology you described below.  The
> "scheduled" field seems to get a correct type now.  However, when I try to
> use this field in widgets, I get an error message "Uncaught TypeError:
> value.getUTCFullYear is not a function"
>
> I have a feeling that something is missing in my date field specification,
> but cannot figure out what.  From what I understand, getUTCFullYear() is a
> standard JavaScript function, but it seems that for it to work, "value"
> needs to be of the date type, and the way the field is defined, JavaScript
> does not recognize the field as a date.
>
> See the attached latest empty.html TW5 file.  The "scheduled" field is
> defined in [[$:/plugins/tf/scheduled.js]], and the error is caused by the
> [[New Tiddler]] which has a "scheduled" field set to 20130301000000000 and
> is trying to show it using
> <$view field="scheduled"/>.  You will get the error if you try to open the
> [[New Tiddler]].
>
> Do you know why it crashes?  Is there a better way to create a custom date
> field now?  I noticed that the <<timeline>> macro allows "dateField"
> parameter.  I get the same error when I try to use my "scheduled" field
> with it.
>
>
> On Tuesday, October 29, 2013 at 1:57:05 AM UTC-7, Jeremy Ruston wrote:
>>
>> The tiddlerfields that are defined in the core are not full modules
>> because they are needed before the tiddler loading mechanism is fully
>> installed. That call to $tw.modules.define() directly defines the module
>> exports.
>>
>> For a normal module, you should use something like this:
>>
>> /*\
>> title: $:/plugins/arkadygrudzinsky/startfield.js
>> type: application/javascript
>> module-type: tiddlerfield
>>
>> Implements the start field as a date
>>
>> \*/
>> (function(){
>>
>> /*jslint node: true, browser: true */
>> /*global $tw: false */
>> "use strict";
>>
>> exports.name = "start";
>> exports.parse = $tw.utils.parseDate;
>> exports.stringify = $tw.utils.stringifyDate;
>>
>> })();
>>
>> Let me know how you get on,
>>
>> Best wishes
>>
>> Jeremy
>>
>>
>>
>> On Tue, Oct 29, 2013 at 1:19 AM, Arkady Grudzinsky <[email protected]>
>> wrote:
>>
>>> Jeremy,
>>>
>>>
>>>
>>>>>    - Are tiddler fields always treated as text or is it possible to
>>>>>    set a field type (e.g. date, integer, etc.).
>>>>>
>>>>> Tiddler fields are strings by default, but can be typed through the
>>>> use of "tiddlerfield" modules. The core tiddlerfields are in boot.js:
>>>>
>>>> https://github.com/Jermolene/TiddlyWiki5/blob/master/boot/boot.js#L713
>>>>
>>> A newbie question.
>>>
>>> I was able to chage my custom "start" field type to "date" by adding
>>> this to boot.js:
>>>
>>> $tw.modules.define("$:/boot/modules/tiddlerfields/start","tiddlerfield",{
>>>
>>> name: "start",
>>> parse: $tw.utils.parseDate,
>>> stringify: $tw.utils.stringifyDate
>>> });
>>>
>>>
>>>
>>> After that I was able to use
>>>
>>>
>>> I guess, it's not a good idea to mess with boot.js.  So, I tried to
>>> create a tiddler called "$:/boot/modules/tiddlerfields/start" and set its
>>> type to "application/javascript", "module-type: tiddlerfield".  But I could
>>> not get it to register.  It seems, I'm missing how to get the .js tiddler
>>> code registered as a module.
>>>
>>> I also tried naming the tiddler "$:/core/modules/tiddlerfields/start"
>>> thinking that boot somehow loads all "$:/core/modules" tiddlers, but it did
>>> not work.  What am I missing?
>>>
>>> Thanks.
>>>
>>> --
>>> Arkady
>>>
>>>
>>> On Saturday, October 26, 2013 7:12:39 AM UTC-7, Jeremy Ruston wrote:
>>>
>>>> Hi Arkady
>>>>
>>>> Thanks for the encouragement, and the detailed feedback, much
>>>> appreciated.
>>>>
>>>>
>>>>> I'm currently using mGSD to manage my tasks.  Recently tried TW5.  I
>>>>> think, it's awesome.  Wanted to thank Jeremy for Tiddlywiki.  <$list> and
>>>>> <$checkbox> widgets available at TW5 are very handy to create task lists 
>>>>> by
>>>>> project/context/contact.  The TW5 ability to manipulate and customize
>>>>> tiddler fields is a great addition.  I was able to create <$list> of tasks
>>>>> sorted by custom fields such as "start", "due", or "priority".  I also 
>>>>> love
>>>>> the minimalism of the interface.
>>>>>
>>>>
>>>> Great, I'm glad that the checkbox and list widgets are understandable.
>>>>
>>>>
>>>>> Couple of questions about TW5 features for which I could not find
>>>>> documentation.  I'm thinking of implementing recurring tasks in TW5.  I
>>>>> envision using tags "recurring" and "weekly"/"daily"/"monthly", etc. and
>>>>> use fields such as "start", "modified", etc.  So, my questions are:
>>>>>
>>>>>    - Is it possible to set <$list> filter to select tiddlers using
>>>>>    comparisons?  E.g. select tiddlers with "start" date before "now" to 
>>>>> make
>>>>>    tasks appear on the list at certain date/time?  Perhaps, it's possible 
>>>>> to
>>>>>    do it in a similar fashion as mGSD handles ticklers, but I thought, 
>>>>> <$list>
>>>>>    widget might offer a much simpler way.
>>>>>
>>>>> There's no comparison operators yet, but the plan is to have them as
>>>> filter operator modules. See the "has" operator as an example:
>>>>
>>>> https://github.com/Jermolene/TiddlyWiki5/blob/master/core/
>>>> modules/filters/has.js
>>>>
>>>>>
>>>>>    - Is it possible to set <$list> filter to select tiddlers with
>>>>>    tags/titles matching a regular expression?
>>>>>
>>>>> Not at the moment, but it's a good idea.
>>>>
>>>>>
>>>>>    - Is it possible to have <$checkbox> widget do more than assign a
>>>>>    tag to a tiddler?  E.g. Can it increment the "start" date field by 7 
>>>>> days?
>>>>>
>>>>>
>>>> Not yet. TW5 doesn't yet really have the general concept of
>>>> programmable actions, but something along those lines is going to be
>>>> useful. For the moment, I'd expect a GxD implementation to have it's own
>>>> extended checkbox widget.
>>>>
>>>>>
>>>>>    - Are tiddler fields always treated as text or is it possible to
>>>>>    set a field type (e.g. date, integer, etc.).
>>>>>
>>>>> Tiddler fields are strings by default, but can be typed through the
>>>> use of "tiddlerfield" modules. The core tiddlerfields are in boot.js:
>>>>
>>>> https://github.com/Jermolene/TiddlyWiki5/blob/master/boot/boot.js#L713
>>>>
>>>>>
>>>>>    - Is it possible to create contextual tiddler templates?  E.g.
>>>>>    - when a tiddler is tagged as "project", the tiddler view would
>>>>>       automatically show lists of tasks or
>>>>>       - when a tiddler is tagged as "context", the tiddler view would
>>>>>       automatically show a list of tasks orgainzed differently, etc.
>>>>>       (similar behavior as in mGSD, only I would expect a more
>>>>>       transparent and customizeable syntax with <$list> and <$view>.  In 
>>>>> mGSD,
>>>>>       it's done through macros which are hard to find and difficult to 
>>>>> customize.)
>>>>>
>>>>> You can almost do that in a basic form with the reveal widget.
>>>> Basically each type of view that you need would be a separate ViewTemplate
>>>> segment (i.e. a tiddler tagged $:/tags/ViewTemplate). You'd wrap it in a
>>>> reveal widget that would selectively display the template depending on the
>>>> tags on the current tiddler. The reveal widget doesn't yet allow for
>>>> testing tags, though.
>>>>
>>>>
>>>>>
>>>>>    - Would be nice to have an easy way to create a tiddler with a
>>>>>    certain template (e.g. create buttons with custom functionality).  I 
>>>>> have a
>>>>>    feeling that buttons are already implemented, but not documented.  Is 
>>>>> it
>>>>>    true?
>>>>>
>>>>> There is a button widget that's used for the new tiddler button:
>>>>
>>>> <$button message="tw-new-tiddler" class="btn-invisible">{{$:/
>>>> core/images/new-button}}</$button>
>>>>
>>>> The plan is to extend the tw-new-tiddler message so that the title of a
>>>> template tiddler can be provided.
>>>>
>>>>> Finally, I may be reinventing the wheel.  Is there a GTD
>>>>> implementation based on TW5?  Even if there is, I, probably, would want to
>>>>> customize a few things.  So, I still would like to know the answers.
>>>>>
>>>> No, there's no GTD implementations that I'm aware of.
>>>>
>>>> Do be aware that TW5 will undergo quite significant changes in the next
>>>> couple of days as I complete a round of refactoring that I've been doing.
>>>> With the new changes the generated HTML is much cleaner, and the individual
>>>> widgets have been rationalised and simplified:
>>>>
>>>> https://github.com/Jermolene/TiddlyWiki5/pull/178
>>>>
>>>>
>>>>> Thanks again to all Tidlywiki developers.  It's an awesome tool for
>>>>> many things.  I have not seen so much functionality packed in ~600K of 
>>>>> code.
>>>>>
>>>> Thank you, much appreciated. Eventually we'll minify the TW5 core by
>>>> default, which should reduce the footprint somewhat!
>>>>
>>>> Best wishes
>>>>
>>>> Jeremy
>>>>
>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "TiddlyWiki" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to tiddlywiki+...@googlegroups. <http://googlegroups.com/>com
>>>>> <http://googlegroups.com/>.
>>>>> To post to this group, send email to [email protected].
>>>>>
>>>>> Visit this group at http://groups.google.com/group/tiddlywiki.
>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Jeremy Ruston
>>>> mailto:[email protected]
>>>>
>>>
>>
>>
>> --
>> Jeremy Ruston
>> mailto:[email protected]
>>
> <empty.html>
>
>
>


-- 
Arkady

-- 
You received this message because you are subscribed to the Google Groups 
"TiddlyWiki" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/tiddlywiki.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/tiddlywiki/CAOvtUXn1cCwUA8LxfebnACOPzedeVzQ6sw36xR%3Dm5z4GFgUHxQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to