I'm using a program that relies on .pod files (FIN Framework) and I wanted to make some of my own .pod files. I did some digging and found out about Fantom, and found the fan build init command for creating pod templates. Now I need to figure out how to create fan files, I tried searching through the documentation but I couldn't figure out where to go for this. Is there a way to compile regular text files to .fan? Sorry for the stupid question.
SlimerDudeWed 14 Apr 2021
Hi Derek,
A .fan file IS a text file!
Multiple .fan files are then compiled into a .pod file (which is a .zip file.)
You can find a couple of basic articles that explain Fantom projects and .pod files here on Alien-Factory.
DerekWed 14 Apr 2021
Thanks for the tutorial! Im trying to build a test pod with a project called hello, but when i run the fan build.fan command based on the documentation here:
(documentation: https://fantom.org/doc/docIntro/HelloWorld#script) (what happened with me: https://i.imgur.com/iBlANgn.png)
The command prompt says no fan source files found and gives me a BUILD FAILED error. I was running off of the hello project's build.fan file.
I created a text file (from notepad, edited the name to have .fan at the end) in the project hello/fan folder, with these contents:
class Main {
static Void main() { echo("hello world #3") }
}
But it doesnt seem to recognize it as a .fan file.
SlimerDudeThu 15 Apr 2021
Hi Derek, you may be mixing up the complex multi-project directories generated from fan build init and the standard project set up as described in How To Setup a Fantom Project.
I would start with a clean empty directory and follow the article, creating the files and dirs manually, taking care over the content of the build.fan script.
DerekMon 19 Apr 2021
Thanks! I followed the tutorial and it worked. Pod is generated. Im trying to get javascript to work in the pod, and I was looking at other existing pods and saw that when I unzipped them there were "js" folders with javascript files in there. I created a js folder in my pod and put a javascript file in my pod, and in the build.fan i put this just like in the documentation:
But upon compiling the pod it doesnt show the js folder or my javascript file. Do you have an idea of what might be the problem? Thanks so much for your help.
HenryMon 19 Apr 2021
Hi Derek!
The jsDirs directory is used for supplying the pod with any native Javascript code/libraries.
By default, when you supply a javascript file within a directory under jsDirs, that javascript - along with any code in your project which is using the @Js facet - will be added to the overall <podname>.js file inside your built pod.
This <podname>.js file contains all of the javascript in the entire project.
This page contains an overview of the cross-compilation of fantom code into javascript and the <podname>.js file.
The reason you may be seeing javascript in a js/ directory inside the pods, will be because those js directories would actually have been built as resDirs, not as jsDirs
Hope this helps :)
DerekMon 19 Apr 2021
Thanks a bunch! That helped. I've got a weird question now. I may not be providing enough information, but I'm trying to get the meta.props file to match a format from another pod I've found, so that when I drop this pod into the .fan folder it will work properly. The meta properties I'm not sure about look like this:
These are more than likely meta generated from items in a resource directory, although it could be a uri you have to specify in the meta - likely related to the Fin Framework, so it may be worth a second opinion on that
Moreover, those properties are standard SkySpark properties for defining extensions (so this question is more suited for the SkySpark forum) - but you can refer to the SkySpark docs on Resource Extensions for details.
In essence, only the ext.name property is important as that defines the name of your extension. In your case, you probably want to set it to:
meta = [
...
...
"ext.name" : "myFantomApp"
]
The icon properties are old skool and aren't used anymore in SkySpark v3 / FinStack v5.
DerekTue 20 Apr 2021
Thanks so much! That worked guys, i now see the pod i made in the program as an extension. My last question for now would be executing the javascript file in the browser. I cant do this normally because i dont have access to changing the pod that generates the <head> and <body> html. Im hoping theres a way to do this through .fan files.
I was looking through the documentation and I found a section on running javascript in the browser (https://fantom.org/doc/docLang/JavaScript), but I'm running into some errors.
test.fan(15,1): Type inference not supported for fields
test.fan(16,1): Expecting type name
Here's the code I wrote (probably messed up a lot):
https://i.imgur.com/9xuQifu.jpg
Also, I'm assuming this is going to run the auto compiled javascript file, I tried doing "out.includeJs(/pod/sys/sys.js)" syntax to get the specific javascript file i created, but it gave me this error:
Unknown type 'out'
Expected identifier, not '.'
Tried including the res portion to see if that would help:
Getting FinStack to load your GonnaBeJs class into the Browser and then call your code when the page loads, or on any other event, requires integration with the FinStack UI / framework. For that I would advise reaching out to J2 Innovations support, as they should be able to guide you down the best supported path.
Derek Wed 14 Apr 2021
I'm using a program that relies on .pod files (FIN Framework) and I wanted to make some of my own .pod files. I did some digging and found out about Fantom, and found the fan build init command for creating pod templates. Now I need to figure out how to create fan files, I tried searching through the documentation but I couldn't figure out where to go for this. Is there a way to compile regular text files to .fan? Sorry for the stupid question.
SlimerDude Wed 14 Apr 2021
Hi Derek,
A
.fan
file IS a text file!Multiple
.fan
files are then compiled into a.pod
file (which is a.zip
file.)You can find a couple of basic articles that explain Fantom projects and
.pod
files here on Alien-Factory.Derek Wed 14 Apr 2021
Thanks for the tutorial! Im trying to build a test pod with a project called
hello
, but when i run the fan build.fan command based on the documentation here:(documentation: https://fantom.org/doc/docIntro/HelloWorld#script) (what happened with me: https://i.imgur.com/iBlANgn.png)
The command prompt says
no fan source files found
and gives me a BUILD FAILED error. I was running off of the hello project's build.fan file.I created a text file (from notepad, edited the name to have .fan at the end) in the project hello/fan folder, with these contents:
class Main {
}
But it doesnt seem to recognize it as a .fan file.
SlimerDude Thu 15 Apr 2021
Hi Derek, you may be mixing up the complex multi-project directories generated from
fan build init
and the standard project set up as described in How To Setup a Fantom Project.I would start with a clean empty directory and follow the article, creating the files and dirs manually, taking care over the content of the
build.fan
script.Derek Mon 19 Apr 2021
Thanks! I followed the tutorial and it worked. Pod is generated. Im trying to get javascript to work in the pod, and I was looking at other existing pods and saw that when I unzipped them there were "js" folders with javascript files in there. I created a js folder in my pod and put a javascript file in my pod, and in the build.fan i put this just like in the documentation:
using build
class Build : BuildPod {
}
But upon compiling the pod it doesnt show the js folder or my javascript file. Do you have an idea of what might be the problem? Thanks so much for your help.
Henry Mon 19 Apr 2021
Hi Derek!
The jsDirs directory is used for supplying the pod with any native Javascript code/libraries.
By default, when you supply a javascript file within a directory under jsDirs, that javascript - along with any code in your project which is using the @Js facet - will be added to the overall <podname>.js file inside your built pod.
This <podname>.js file contains all of the javascript in the entire project.
This page contains an overview of the cross-compilation of fantom code into javascript and the <podname>.js file.
The reason you may be seeing javascript in a js/ directory inside the pods, will be because those js directories would actually have been built as resDirs, not as jsDirs
Hope this helps :)
Derek Mon 19 Apr 2021
Thanks a bunch! That helped. I've got a weird question now. I may not be providing enough information, but I'm trying to get the meta.props file to match a format from another pod I've found, so that when I drop this pod into the .fan folder it will work properly. The meta properties I'm not sure about look like this:
ext.name=finMiscComponents ext.icon24=fan://finMiscComponents/res/img/icon24.png ext.icon72=fan://finMiscComponents/res/img/icon72.png
how do you think I would go about recreating that?
Derek Mon 19 Apr 2021
The program im trying to get this to work with is Fin Framework, if that helps any
Henry Mon 19 Apr 2021
I'm not familiar with the Fin Framework, however I believe the meta.props is all generated from key-value pairs in the "meta" map in the build script.
Here is an example of the meta for a project:
This is more than likely simply a Str:Str
These are more than likely meta generated from items in a resource directory, although it could be a uri you have to specify in the meta - likely related to the Fin Framework, so it may be worth a second opinion on that
https://fantom.org/doc/docLang/Pods#meta
SlimerDude Mon 19 Apr 2021
Hi Derek,
Everything Henry mentioned is correct.
Moreover, those properties are standard SkySpark properties for defining extensions (so this question is more suited for the SkySpark forum) - but you can refer to the SkySpark docs on Resource Extensions for details.
In essence, only the
ext.name
property is important as that defines the name of your extension. In your case, you probably want to set it to:The icon properties are old skool and aren't used anymore in SkySpark v3 / FinStack v5.
Derek Tue 20 Apr 2021
Thanks so much! That worked guys, i now see the pod i made in the program as an extension. My last question for now would be executing the javascript file in the browser. I cant do this normally because i dont have access to changing the pod that generates the <head> and <body> html. Im hoping theres a way to do this through .fan files.
I was looking through the documentation and I found a section on running javascript in the browser (https://fantom.org/doc/docLang/JavaScript), but I'm running into some errors.
test.fan(15,1): Type inference not supported for fields
test.fan(16,1): Expecting type name
Here's the code I wrote (probably messed up a lot):
https://i.imgur.com/9xuQifu.jpg
Also, I'm assuming this is going to run the auto compiled javascript file, I tried doing "out.includeJs(/pod/sys/sys.js)" syntax to get the specific javascript file i created, but it gave me this error:
Tried including the res portion to see if that would help:
res.headers["Content-Type"] = "text/html; charset=utf-8"
out := res.out
but it told me:
Any help would be appreciated.
SlimerDude Wed 21 Apr 2021
Hi Derek,
Getting FinStack to load your
GonnaBeJs
class into the Browser and then call your code when the page loads, or on any other event, requires integration with the FinStack UI / framework. For that I would advise reaching out to J2 Innovations support, as they should be able to guide you down the best supported path.