JS-Macro to transclude the input of a field with regex-replacements.

68 views
Skip to first unread message

Jan

unread,
Jul 11, 2019, 2:29:23 PM7/11/19
to TiddlyWiki
Hello 
based on an idea of LinOneTwo I tried to build a macro to do replacements while transcluding the text-content of a field.
This macro shall replace all "/n[[" for "/n/n:[[" and shall be applied to a a field called dialogue.
This is one step to build a scene-editor which can properly format dialogue.
Unfortunately it does not show the result when calling it <$macrocall $name="dialogue" text={{!!dialogue}}/> but produces a tender red alert.
How do you do something like this correctly?

(The code can be tested on http://szen.io/dia/ )

Thanks for help!
Jan

/*\
title: $:/core/modules/macros/Dialogue.js
type: application/javascript
module-type: macro
Making some replacements in Textinputs
\*/

(function(){
   /*jslint node: true, browser: true */
   /*global $tw: false */
   "use strict";

/*
Information about this macro
*/
  exports.name = 'dialogue';
  exports.params = [{ name: 'text', defalue: '' }];
/*
Run the macro
*/
(function() {
  exports.run = function(text) {
    return text
      .split("/n[[")
      .filter(it => it)
      .join("/n/n:[[");
  };
})();

Mark S.

unread,
Jul 11, 2019, 4:23:49 PM7/11/19
to TiddlyWiki
You seem to have wrapped the function in another function. This seems to "work"

/*\
title: $:/core/modules/macros/Dialogue.js
type: application/javascript
module-type: macro
Making some replacements in Textinputs
\*/


(function(){
   
/*jslint node: true, browser: true */
   
/*global $tw: false */
   
"use strict";

/*
Information about this macro
*/

  exports
.name = 'dialogue';

  exports
.params = [{ name: 'text'  }];

/*
Run the macro
*/

  exports
.run = function(text) {
   
return  text
     
.split("/n[[")
     
.filter(it => it)
     
.join("/n/n:[[");

 
} ;

})();


By "work" I mean it runs without an error. But I'm not sure it does what you want yet. Good luck!

Jan

unread,
Jul 11, 2019, 7:48:53 PM7/11/19
to tiddl...@googlegroups.com
Hi Mark,
you are right in both dimensions: It does not throw the error-alert anymore...but it apparently does nothing else either.
It should turn a link (containing the name of the role) at the beinning of the Line in editmode into a descriptive list
 <dt>[[Rolename]]</dt> which in Wikisyntax can be indicatet by /n/n:[[Rolename]].

Sorry for the difficulites to express this correctly.
I fear that this markup is already parsed when inserting the text with  {{!!dialogue}}-field so that it actually does not find any /n or[[.

Thanks!
--
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.com.
To post to this group, send email to tiddl...@googlegroups.com.
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/ea6b6fa3-4066-488e-9121-f030c38a85a7%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Mark S.

unread,
Jul 11, 2019, 8:08:40 PM7/11/19
to TiddlyWiki
Ah, there we go. it's "\n" not "/n".

There are other tweaks. I think the \n on the first [[ might be getting trimmed off.

Good luck!
To unsubscribe from this group and stop receiving emails from it, send an email to tiddl...@googlegroups.com.

Jan

unread,
Jul 12, 2019, 3:59:07 AM7/12/19
to tiddl...@googlegroups.com
Hi Mark!
Thanks, the desired colons :-) now are there!  But all \n seem to be eaten, even the double \n\n which should make a linebreak.

You can see the test here http://szen.io/dia/  which I hope can explain a little what I am trying to achive.

I changed it the function to
  exports.run = function(text) {
    return  text
      .split("\n[[")
      .join("\n:[[");
    return  text
      .split("\n")
      .join("\n\n");
 } ;

because I would like all \newlines to be doublenewlines to make the markup like !/*/# work at the beginning of all lines.

Thanks again!
Jan


To unsubscribe from this group and stop receiving emails from it, send an email to tiddlywiki+...@googlegroups.com.

To post to this group, send email to tiddl...@googlegroups.com.
Visit this group at https://groups.google.com/group/tiddlywiki.

BJ

unread,
Jul 12, 2019, 7:47:38 AM7/12/19
to TiddlyWiki
Hi Jan,
for this to work you need double lines before and after the macro:

<div class=dialogue>


<$macrocall $name="dialogue" text={{!!dialogue}}/>

</div>



and I think you return value needs to be like this:


exports.run = function(text) {
      text
= text.split("\n[[").join("\n:[[");
     
return text.split("\n").join("\n\n");
} ;



Jan

unread,
Jul 12, 2019, 6:56:31 PM7/12/19
to tiddl...@googlegroups.com
Hi BJ! Hi Mark!
What a difference two breaks make! Great thanks, I would never have found that trick! I think the rest now is getting the CSS right!
I will have to do some work until I can show the Editor I need this for.

Best wishes Jan
To unsubscribe from this group and stop receiving emails from it, send an email to tiddlywiki+...@googlegroups.com.

To post to this group, send email to tiddl...@googlegroups.com.
Visit this group at https://groups.google.com/group/tiddlywiki.
Reply all
Reply to author
Forward
0 new messages