Hi,
I think I have the solution. First, let me tell you one important principle
for debugging: if you have a complex system, to debug, try to get the
simplest piece of it which seems to have the bug and debug that one. In
this case, I event haven't tried the plugin; instead, I put an inline html
like this to try to make it work:
<html><a href="javascript:;"
onclick="config.macros.newTiddler.onClickNewTiddler();" title="Create a new
tiddler" class="button" accesskey="N" newtitle="New Tiddler"
isjournal="false" params="sampleTag" newfocus="title" newtemplate="2"
newtext="sampleText">sampleLabel</a></html>
If you try this, you'll see that this doesn't work, so this small piece has
some problem. Next, I took a look at the code of the
config.macros.newTiddler.onClickNewTiddler [1]. I know that getAttribute
method is somewhat from DOM, not TiddlyWiki core and is applied to (called
by) a DOM element, so it "should work". Though, the call is
"this.getAttribute("newTitle")", so "this" should be the element itself.
But when I write just "config.macros.newTiddler.onClickNewTiddler();",
"this" is "config.macros.newTiddler" which has nothing to do with my "a"
element. So I checked what is "this" in the main context in the following
way:
<html><a href="javascript:;" onclick="
console.log(this);
" title="Create a new tiddler" class="button" accesskey="N" newtitle="New
Tiddler" isjournal="false" params="sampleTag" newfocus="title"
newtemplate="2" newtext="sampleText">sampleLabel</a></html>
Here console.log is the method to write to the console (in Opera is opened
by ctrl+shift+I and selecting the console tab, in FireBug there's such tab
also) and the console sais:
<a href="javascript:;" onclick=" console.log(this); " title="Create a new
tiddler" class="button" accesskey="N" newtitle="New Tiddler"
isjournal="false" params="sampleTag" newfocus="title" newtemplate="2"
newtext="sampleText">sampleLabel</a>
So "this" is the element itself, just what I need. Hence, I add this
context to the "config.macros.newTiddler.onClickNewTiddler" in this way:
<html><a href="javascript:;" onclick="
config.macros.newTiddler.onClickNewTiddler.apply(this);
" title="Create a new tiddler" class="button" accesskey="N" newtitle="New
Tiddler" isjournal="false" params="sampleTag" newfocus="title"
newtemplate="2" newtext="sampleText">sampleLabel</a></html>
and that worked! If you'd like to learn some more details, I'd recommend to
read more about "this" and scopes in JavaScript, may be [2] will be
helpfull.
Now the solutions seems to be the following:
var ah ="<a href=\"javascript:;\"
onclick=\"config.macros.newTiddler.onClickNewTiddler.apply(this);\"
title=\"Create a new tiddler\" accesskey=\"N\" newtitle=\"New Tiddler\"
isjournal=\"false\" newfocus=\"title\" newtemplate=\"2\">+</a>";
(though, I haven't tested this inside the plugin)
Best regards,
Yakov.
[1]
https://github.com/TiddlyWiki/tiddlywiki/blob/master/js/NewTiddler.js#L35
[2]
http://stackoverflow.com/questions/1007340/javascript-function-aliasing-doesnt-seem-to-work
среда, 6 февраля 2013 г., 23:55:43 UTC+4 пользователь Arc Acorn написал:
>
> As an example here are some of the things I've tried.
> All of which simply create a link that doesn't work.
>
> var ah ="<a href=\"javascript:;\"
> onclick=\"config.macros.newTiddler.onClickNewTiddler\" title=\"Create a new
> tiddler\" accesskey=\"N\" newtitle=\"New Tiddler\" isjournal=\"false\"
> newfocus=\"title\" newtemplate=\"2\">+</a>";
>
> var ah ="<a href=\"javascript:;\" onclick=\"return
> config.macros.newTiddler.onClickNewTiddler\" title=\"Create a new tiddler\"
> accesskey=\"N\" newtitle=\"New Tiddler\" isjournal=\"false\"
> newfocus=\"title\" newtemplate=\"2\">+</a>";
>
> var ah ="<a href=\"javascript:;\" onclick=\"return
> config.macros.newTiddler.onClickNewTiddler(e)\" title=\"Create a new
> tiddler\" accesskey=\"N\" newtitle=\"New Tiddler\" isjournal=\"false\"
> newfocus=\"title\" newtemplate=\"2\">+</a>";
>
> var ah ="<a href=\"javascript:;\" onclick=\"return
> config.macros.newTiddler.onClickNewTiddler()\" title=\"Create a new
> tiddler\" accesskey=\"N\" newtitle=\"New Tiddler\" isjournal=\"false\"
> newfocus=\"title\" newtemplate=\"2\">+</a>";
>
> var ah ="<a href=\"javascript:;\" onclick=\"return
> config.macros.newTiddler.onClickNewTiddler(event)\" title=\"Create a new
> tiddler\" accesskey=\"N\" newtitle=\"New Tiddler\" isjournal=\"false\"
> newfocus=\"title\"
>
> var ah ="<a href=\"javascript:;\" onclick=\"return config.macros.
> newTiddler.createNewTiddlerButton(place,title,params,label,prompt,accessKey,newFocus,isJournal)\"
>
> title=\"Create a new tiddler\" accesskey=\"N\" newtitle=\"New Tiddler\"
> isjournal=\"false\" newfocus=\"title\" newtemplate=\"2\">+</a>";
>
> var ah ="<a href=\"javascript:;\"
> onclick=\"config.macros.newTiddler.onClickNewTiddler(place,title,params,label,prompt,accessKey,newFocus,isJournal)\"
>
> title=\"Create a new tiddler\" accesskey=\"N\" newtitle=\"New Tiddler\"
> isjournal=\"false\" newfocus=\"title\" newtemplate=\"2\">+</a>";
>
--
You received this message because you are subscribed to the Google Groups
"TiddlyWikiDev" 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 http://groups.google.com/group/tiddlywikidev?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.