Using Haml & Sass with Eclipse - eclipse

Are there any plugins for eclipse that add syntax highlighting and other niceties for editing Haml and Sass? Google searches only seem to point to a dead project on lucky-dip.net.
Note: it's Sass I'm most interested in. A solution for using just Sass (or something similar to it like less) in Eclipse would suit my needs.
Also, I'm developing for Google App Engine (Java), using the App Engine plugin for Eclipse. So switching to another IDE isn't an option.
Update: So I've got syntax highlighting now using Pascal's answer and I've installed Ruby and Compass to compile sass into css.
However I'm aware that the syntax of sass will be changing with 2.4 so I'd still like to get the Haml and Sass Editors that come with Aptana to work. When I tried to use them they threw an exception and wouldn't display the files. I'd be interested to know if that's because I misconfigured Aptana or is an actual bug in the editors.
I'd also be very interested in any way of compiling Sass that integrated with Ecplise so that I didn't have to run something separate from it. (or a way of putting Sass/Compass in the Ecplise build process.)

Well, what about Aptana? According to the Haml/Saas Syntax Highlighting in Aptana/Eclipse blog post:
Recently, I have been using Haml in
some my Rails projects. It simply
makes your views clean and readable.
One issue I had was syntax
highlighting in my favorite IDE,
Aptana Studio. The Haml syntax
highlighting support has been stopped
a while ago and more issues have
raised after Aptana recent updates.
After some research, I found a
solution posted by Max Kostovetski, a
member of Haml Google group. Now, to
the steps:
Download the following files to your hard drive:>
http://haml.googlegroups.com/web/haml_lexer.lxr
http://haml.googlegroups.com/web/haml.col
http://haml.googlegroups.com/web/sass_lexer.lxr
http://haml.googlegroups.com/web/sass.col
From AptanaEclipse "Window" menu, select "Preferences..."
In the the preferences window, select "Editors" > "Generic Text"
Press "Add..." to add new file extensions: *.haml and *.sass
For each of the new extensions, click it and press "Browse..." to
select the proper lexer file (*.lxr)
For colorization, press "Import..." to import the *.col files
Press "OK"
Enjoy you Haml views
PS: Refer to the original blog post as it provides up-to-date links.
Note: this can be used with the Aptana RadRails Eclipse plugin as well as Aptana Studio
UPDATE: At the time of writing, RadRails and Studio seems to support Haml and Sass so it might now be unnecessary to follow the steps above.
To compile SaaS in an "integrated" way inside Eclipse, you could maybe just use an External Tool (Run > External Tools). Another more elaborated option would be to add a "Program Builder" to your project's Builders like in this blog post. Of course, the described solution would require to be adapted to Saas but the principles behind it seems to apply. Caution: I didn't implement it myself, it's just an idea and I'm not even sure it makes sense.

Notice that latest EclipseColorer actually supports both HAML&SASS. It may be a good alternative choice if you don't need a full featured Aptana IDE, but just looking for an editor.
EclipseColorer also gives you better syntax mixin support: other languages inside of HAML are highlighted with respect of their syntax (mixins for ruby, javascript, css, even sass).

While it doesn't appear that there are any HAML or SASS syntax highlighters yet, you may want to consider doing something along the lines of bringing VIM (which does have support for HAML syntax highlighting) into Eclipse via a few available plugins. Eclim might be a possibility (although, I have not used it - just trying to offer other alternatives).
Another options is to take an already existing Eclipse syntax highlighting plug-in and add syntax highlighting for Sass and/or HAML. Something like the Eclipse Colorer may be worth looking into.

I know this is an old question, but for anyone new to SASS aond Compass like me, I just installed Aptana Studio 3 and it now has support for .scss, .sass, and .haml. Enjoy.

Aptana causes too many problems for me, so after lots of searching (which turned up this thread), I found
LiClipseText (https://marketplace.eclipse.org/content/liclipsetext)
It is a plugin that provides, amongst other things, syntax highlighting for SASS/SCSS files. It seems to work, and has "Syntax Highlighting (LiClipse, TextMate or SublimeText based)" so is probably quite configurable (I have not played around with it much, but the basic syntax highlighting feature is working for me, which is more than the Eclipse WST CSS editor could do for SCSS files).
It is the open-sourced editor component of the commercial LiClipse plugin (https://marketplace.eclipse.org/content/liclipse) which I have not used.

I found Colorer plugin in Igor's answer interesting, yet I use .scss file extention and it only works for .sass files. Here's how to make it support .scss file extension:
First install the plugin as normal. Select Install New software in Help menu in Eclipse and add the following repository: http://colorer.sf.net/eclipsecolorer. Now select this repository and you should see the Eclipse Colorer install option. There is no drag-install option AFAIK.
After install, goto Colorer plugin folder inside Eclipse's plugin directory. In my case that's eclipse/plugins/net.sf.colorer_0.9.9/. There you'll have to modify 3 files:
colorer/hrc/common.jar
colorer/hrc/proto.hrc
/plugin.xml
Before doing any of the below instruction, please backup all files in the folder in order to restore them if anything goes wrong.
Modifying common.jar
Extract common.jar to an empty folder. This is done as any normal tar.gz file. Once extracted you'll have to modify 2 files in it:
duplicate lines 53 and 53 in inet/haml.hrc and change it to scss. The result should be like below:
<block start='/^((\s\s)*):(sass)/' end='/^\M (\s*$|\y1\s)?! /ix' region='def:Insertion' region01='def:Outlined'
region00='def:PairStart' region10='def:PairEnd' content-priority='low' scheme='sass:sass'/>
<block start='/^((\s\s)*):(scss)/' end='/^\M (\s*$|\y1\s)?! /ix' region='def:Insertion' region01='def:Outlined'
region00='def:PairStart' region10='def:PairEnd' content-priority='low' scheme='scss:scss'/>
now copy inet/sass.hrc to inet/scss.hrc and change the relevant lines. The resulting scss.hrc should be like below:
<?xml version="1.0" encoding='Windows-1251'?>
<!DOCTYPE hrc PUBLIC "-//Cail Lomecb//DTD Colorer HRC take5//EN"
"http://colorer.sf.net/2003/hrc.dtd">
<hrc version="take5" xmlns="http://colorer.sf.net/2003/hrc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://colorer.sf.net/2003/hrc http://colorer.sf.net/2003/hrc.xsd">
<type name="scss">
<annotation>
<documentation>
SCSS Sassy CSS
</documentation>
<contributors><![CDATA[
Igor Russkih irusskih at gmail dot com
]]></contributors>
</annotation>
<region name="ClassSelector" parent="def:TypeKeyword"/>
<region name="IDSelector" parent="def:Keyword"/>
<region name="IncludeMixin" parent="def:Label"/>
<scheme name='PropertyNames'>
<regexp match="/(\$)([\w\d\-]+)/" region='def:Var'/>
<inherit scheme='css:PropertyNames'/>
</scheme>
<scheme name="PropertyWrapper">
<block start="/~/" end="/(:|\s|$)/" scheme="PropertyNames" region10="def:Symbol"/>
<regexp match="/(\$)([\w\d\-]+)/" region='def:Var'/>
<inherit scheme="css:Property"/>
</scheme>
<scheme name="scss">
<!-- property value after colon -->
<block start="/\M([\$\w\d\-]+)\s*(:)/" end="/\M([\x22\x27]|$)/"
scheme="PropertyWrapper" region02="def:Symbol"
/>
<block start="/(:)\s*\M([\w\d\-]+)?/" end="/\M([\x22\x27]|$)/"
scheme="PropertyWrapper" region02="def:Symbol"
/>
<regexp match="/^ \s* \M[\.\#\=\#\!] (?{def:Outlined}[\w\d\-]+ ) /x" />
<regexp match="/ \. (?{ClassSelector}[\w\d\-]+ ) /x" />
<regexp match="/ \# (?{IDSelector}[\w\d\-]+ ) /x" />
<regexp match="/ [\=\+] (?{IncludeMixin}[\w\d\-]+ ) /x" />
<regexp match="/[\(\)&apos;"]/" region='def:Symbol'/>
<regexp match="/\/\/.*$/" region='def:Comment'/>
<regexp match="/\#(import|extend|mixin)/" region='def:Keyword'/>
</scheme>
</type>
</hrc>
<!-- ***** BEGIN LICENSE BLOCK *****
- Version: MPL 1.1/GPL 2.0/LGPL 2.1
-
- The contents of this file are subject to the Mozilla Public License Version
- 1.1 (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
- http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS IS" basis,
- WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- for the specific language governing rights and limitations under the
- License.
-
- The Original Code is the Colorer Library.
-
- The Initial Developer of the Original Code is
- Igor Russkih <irusskih at gmail dot com>
- Portions created by the Initial Developer are Copyright (C) 2010
- the Initial Developer. All Rights Reserved.
-
- Contributor(s):
-
- Alternatively, the contents of this file may be used under the terms of
- either the GNU General Public License Version 2 or later (the "GPL"), or
- the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- in which case the provisions of the GPL or the LGPL are applicable instead
- of those above. If you wish to allow use of your version of this file only
- under the terms of either the GPL or the LGPL, and not to allow others to
- use your version of this file under the terms of the MPL, indicate your
- decision by deleting the provisions above and replace them with the notice
- and other provisions required by the LGPL or the GPL. If you do not delete
- the provisions above, a recipient may use your version of this file under
- the terms of any one of the MPL, the GPL or the LGPL.
-
- ***** END LICENSE BLOCK ***** -->
after this, run the following command in the folder where you extract common.jar to recreate the jar file:
jar cf common.jar *
then substitute the original jar file by this one.
Other files
Now, include scss extension in /plugin.xml line 37:
extensions="xml,xsd,xsl,dtd,hrc,hrd,html,htm,xhtml,rhtml,erb,yml,haml,sass,scss,css,asp,aspx,jsp,fo,svg,dbk,docbook,jhtml,jspf,php,php3,php4,phtml,sgm,sgml,shtm,shtml"
And finally, duplicate lines 200-203 in colorer/hrc/proto.hrc. The result should be like below:
<prototype name="sass" group="inet" description="SASS">
<location link="jar:common.jar!inet/sass.hrc"/>
<filename>/\.(sass)$/i</filename>
</prototype>
<prototype name="scss" group="inet" description="SCSS">
<location link="jar:common.jar!inet/scss.hrc"/>
<filename>/\.(scss)$/i</filename>
</prototype>
After this restart eclipse and you should have syntax highlighting for .scss files.

Related

How to avoid error messages in Eclipse 2020-03 for GWT ui.xml files (Language Server)

In my GWT 2.8 based project Eclipse 2020-03 shows me lots of error message under Markers -> Language Servers
I am sure that these are not errors. For some reason, Eclipse cannot interpret ui.xml files correctly. The application compiles and runs fine:
My eclipse wide settings for XML validation are as follows:
There are not project-specific settings for this
Here is an extract (not the complete source!!!) of one example of a something.ui.xml file. The project contains lots of those files:
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder
xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui"
xmlns:b="urn:import:org.gwtbootstrap3.client.ui"
xmlns:a="urn:import:com.myapp.client.widgets"
ui:generateFormat="com.google.gwt.i18n.rebind.format.PropertiesFormat"
ui:generateKeys="com.google.gwt.i18n.server.keygen.MD5KeyGenerator"
ui:generateLocales="default" >
<ui:with type="com.myapp.resources.text.CommonMessages" field="msgs" />
<ui:with type="com.myapp.resources.text.SummaryMessages" field="sMsgs" />
<b:Modal closable="true" fade="true" dataBackdrop="STATIC" dataKeyboard="true"
b:id="dialog"
ui:field="dialog">
<b:ModalHeader title="{sMsgs.transferOwnership}" />
<b:ModalBody>
<g:HTML><ui:text from="{sMsgs.transferOwnershipDescription}"/></g:HTML>
<b:ListBox
ui:field="userListBox"
multipleSelect="false"
width="100%"
/>
<b:Alert type="DANGER" ui:field="participantWarning">
<b:Icon type="WARNING"/>
<g:HTML><ui:text from="{sMsgs.transferOwnershipNotParticipantWarning}" /></g:HTML>
</b:Alert>
</b:ModalBody>
<b:ModalFooter>
These are the error messages:
Mouseover on the error always shows:
although it is declared above:
[...]
xmlns:b="urn:import:org.gwtbootstrap3.client.ui"
[...]
Import: The application compiles and runs fine. So I just want to suppress those error messages (show in error) as they are not really error messages. :-)
These resources might be helpful:
Why are there multiple Angular language server tabs in my Eclipse console
You can disable this validation by unchecking the box at Eclipse -> Preferences -> Language Servers -> XML.
I had the same problem (Eclipse 2020-06).
Disabling XML Language Server for XML content type worked for me:
By "must be declared", it means declared in a Document Type Definition (DTD) or XML Schema, also known as "grammar".
The line you quoted:
xmlns:b="urn:import:org.gwtbootstrap3.client.ui"
It says there's a namespace "b", but this line has no other meaning. It doesn't, for instance, declare which elements (like Alert) are valid in that namespace.
If you are not worried about validating your XML, and only wish to turn off the error messages, I would suggest you change your options:
No grammar specified: Warning → Ignore
This will stop Eclipse trying to validate the XML against a grammar, but should still show errors for malformed XML (tags closed twice etc.). You can configure this option on a per-project basis, if you prefer.
The alternative would be to provide a DTD or Schema and reference it in the XML. You will probably have to write such a grammar yourself unless gwtbootstrap3 provides one (which I don't think it does).
To clear existing validation errors, you may have to manually delete them.

Installing sass in Netbeans 8.0.2

I know there are questions like this on SO, but none of the given solutions helped me.
I also tried to ask this question on netbeans forum, but they haven't responded to my questions, probably because they just don't know answers.
SO community is a "bit" bigger than the one on the netbeans forum, so I hope I'll get some clue.
I'm trying to get SASS working in Netbeans 8.0.2 (Ubuntu). I installed sass, it sits in /sur/local/bin/sass. I set up this path in NB options. I set up paths in project properties. And... nothing happens when I save a css file. Shouldn't there be at least a warning message if something's wrong?
Yes, I have "generate extra information (debug)" and "open output on error" checked. The path to the sass executable is also correct.
And yes, I also have "compile Sass files on Save" checked.
In project properties / Input and Output fields I tried relative and full urls. I also tried using ${web.root} variable.
I use Netbeans for PHP, but I don't think it matters.
None of these solutions work for me, especially that most of them is for Windows OS:
How to use SASS with Netbeans 8.0.1
Cannot get SASS to output .css file in Netbeans 8.0
Netbeans - installing SASS
Please help, I've been trying to make it working for the last 4 hours :(
Please tell me at least where can I find an error log or something.
Update:
The log says:
INFO [CPOnSaveHook]: processSavedFile called for Sass type on project
/var/www/html/analytics. INFO
[net.sickill.off.netbeans.NetbeansProject]: fileChanged: ignoring
internal file changes INFO
[org.netbeans.modules.css.prep.process.BaseProcessor]: Not compiling,
file /var/www/html/analytics/src/AppBundle/Resources/scss/admin.scss
not matched within current mappings
[Pair[/var/www/html/analytics/src/AppBundle/Resources/scss,/var/www/html/analytics/web/css]]
But as I said: In project properties / Input and Output fields I tried relative and full urls. I also tried using ${web.root} variable.
I solved my problem.
In the project properties -> css properties -> input/output fields there must not be / (a slash) at the beginning. So it should be e.g. "src/AppBundle/Resources/scss" instead of "/src/AppBundle/Resources/scss" And it should not be a full url (like /var/html/www/project...)
Also, using ${web.root} did not work.
I solved may problem. In project properties -> css prepocessor -> uncheck compile sass files on save:

Can not make GWT application work as Chrome packaged app, probably due to CSP

Keep getting CSP errors: "Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self'"
The problem is probably due to HTML files generated by GWT which contain inline JS.
UPD: Changing to manifest version 1 helped, but this is a temporary workaroud, as Chrome 21 complains that it will no longer be supported.
UPD2: <add-linker name="xsiframe" /> does not help either
GWT 2.5.1 has finally fixed this problem. The release notes documenting this are here:
https://developers.google.com/web-toolkit/release-notes#Release_Notes_2_5_1
and they state that:
"Apps built with DirectInstallLinker should work in a page where inline scripts are forbidden (e.g. a Chrome extension)"
This means that it is now possible to use DirectInstallLinker to link your Chrome packaged app in a manner that satisfies the new security requirements of manifest version 2 regarding inline scripts. That is, by using DirectInstallLinker to link your app with GWT 2.5.1 selected as your GWT version, GWT will not place any script elements inline in its generated Javascript, and thus the new manifest version 2 requirement that there be no inline scripts will not be violated.
I have found that SingleScriptLinker also seems to work for my own app; however, Issue 7685 warns against using the SingleScriptLinker because "This generates a $doc.write line which is forbidden in packaged apps." I am using DirectInstallLinker myself.
Here is the Javadoc for DirectInstallLinker:
http://google-web-toolkit.googlecode.com/svn/javadoc/2.5/com/google/gwt/core/linker/DirectInstallLinker.html
To use this linker, you can include the following in your *.gwt.xml file:
<define-linker name="dil" class="com.google.gwt.core.linker.DirectInstallLinker"/>
<add-linker name="dil" />
(dil can be replaced by anything you choose, so long as there are no dashes or other illegal characters).
You will need to select GWT 2.5.1 as your version of GWT. If you're using an older version of GWT in an out-of-date version of Eclipse such as Ganymede (as I was), you'll have to upgrade to at least Helios and then import your project to your new Eclipse environment. The archive URLs for the Google Plugin for Eclipse that can be used for the latest three Eclipse versions can be found here:
https://developers.google.com/eclipse/docs/download
With the above in place, you should be able to set
"manifest_version": 2
in your manifest.json file and not experience any errors due to GWT-generated inline Javascript. This should allow your Chrome Web app to be acceptable to the Chrome Web Store (which now requires manifest version 2 for any new apps or for updates to present apps), so long as there are no other issues.
EDIT: new GWT bug reported: http://code.google.com/p/google-web-toolkit/issues/detail?id=7685, see also http://gwt-code-reviews.appspot.com/1838803/ which is related to this bug
In other words, it looks like, when fixed, you'll simply have to use the DirectInstallLinker (<add-linker name='direct_install'/>).
In the mean time, IIUC, you'd have to extend DirectInstallLinker and:
override getJsInstallLocation to return a copy a installLocaltionIframe.js without the $wnd part
override getModulePrefix to prepend var $wnd = $wnd || window.parent; to what's generated by super.getModulePrefix
I don't know CSP enough to give a complete answer, but the xsiframe linker is "customizable": create a class that extends com.google.gwt.core.linker.CrossSiteIframeLinker and overrides the appropriate methods, then use with a <define-linker> and <add-linker> in your *.gwt.xml.
For instance, getJsInstallLocation defaults to com/google/gwt/core/ext/linker/impl/installLocationIframe.js but there's a com/google/gwt/core/ext/linker/impl/installLocationMainWindows.js alternate implementation.
Similarly (and probably more importantly), getJsInstallScript defaults to com/google/gwt/core/ext/linker/impl/installScriptEarlyDownload.js but there's also a com/google/gwt/core/ext/linker/impl/installScriptDirect.js alternate implementation.
See http://code.google.com/p/google-web-toolkit/source/browse/trunk/dev/core/src/com/google/gwt/core/linker/CrossSiteIframeLinker.java#204, http://code.google.com/p/google-web-toolkit/source/browse/trunk/dev/core/src/com/google/gwt/core/ext/linker/impl/ and http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/gwt/core/Core.gwt.xml
Thanks to Thomas Broyer's advice. I created this GWT Linker. Now my GWT application runs perfectly as an Chrome Application (Tested on Chrome 32 and GWT 2.5.1).
public class CSPCompatibleLinker extends DirectInstallLinker {
#Override
protected String getJsInstallLocation(LinkerContext context) {
return "com/google/gwt/core/ext/linker/impl/installLocationMainWindow.js";
}
}
Dont forget to declare the Linker into your*.gwt.xml file:
<define-linker name="csp" class="com.sfeir.linker.CSPCompatibleLinker"/>
<add-linker name="csp" />
Manifest version 2 does not allow inline scripts. You need to make sure all scripts are linked instead and no JavaScript in HTML elements.

Correctly Configuring Eclipse for Lotus Notes 8.5 Plugin Development

I've reached an impasse trying to get Eclipse configured for Lotus Notes 8.5 Plug-in Development, and am frantically searching for advice on how to do it correctly.
I've searched the Web and found several articles on how to do it, but none of them seem to be working on my machine. (I have not attempted to do it on another machine.)
The machine's configuration is as follows:
Windows 7 Ultimate 64-bit
Intel Core i5 CPU
6 GB RAM
To the best of my knowledge, the following are the prerequisites:
JDK 6 SE (SR 2) (32-bit)
Lotus Notes 8.5.1 Designer (32-bit)
Lotus Expeditor Toolkit 6.2.2 (32-bit) <-- WRONG!!! 6.2.1!!
Eclipse Ganymede (32-bit)
Here are the installation & configuration steps I've taken.
Install the JDK and JRE to c:\java
Modify the computer's PATH environment variable to include C:\java\jdk6\jre\bin.
Extract Eclipse Ganymede to c:\eclipse.
Install Notes to c:\lotus\notes
Install Expeditor to c:\lotus\expeditor
Configure Expeditor as described here.
Configure Eclipse for Notes 8.5 development as described here.
The problem arises when I attempt to create a Client Services project (a plug-in). When I create the plug-in project, and Eclipse starts generating the code, the following are found in the Event Log:
"Unable to satisfy dependency from com.ibm.pvc.tools.composite-feature.feature.group 6.1.2.200801281900 to requiredCapability: org.eclipse.equinox.p2.iu/org.eclipse.equinox.common/[3.2.0,3.3.0)."
InvalidRegistryObjectException thrown in org.eclipse.core.resources. (Occurs multiple times.)
ConcurrentModificationException was thrown in org.eclipse.core resources.
And my favorite: Cannot nest 'C:Lotus/Notes/framework/rcp/eclipse/plugins/com.ibm.esupport.client.product.SSC4TNF_4.0.0.20090925-1604/core' inside library 'C:Lotus/Notes/framework/rcp/eclipse/plugins/com.ibm.esupport.client.product.SSC4TNF_4.0.0.20090925-1604' (This occurs for multiple packages.)
The list of exceptions goes on. I'll provide all I can if they're requested.
Clearly, I'm doing something wrong. It cannot be this difficult (or counter-intuitive) to get these technologies to play together.
Can someone please provide me with information about the correct requirements (prerequisites, et. al.) and how to set them up? This is kind of a mission critical thing, and the developer who originally did this work left no spec for his environment configuration. I'm completely in the dark.
HALP!!!!
EDIT
As pointed out, I'm using Expeditor 6.2.1, not 6.2.2. I verified this by viewing the license in the Expeditor folders, and viewing the contents of the site.xml file:
<site>
<feature id="com.ibm.pvc.tools.composite-feature" patch="false" url="features/com.ibm.pvc.tools.composite-feature_6.2.1.20090918-0145.jar" version="6.2.1.20090918-0145">
<category name="desktop" />
</feature>
<feature id="com.ibm.rcp.win32.devicetools.feature" patch="false" url="features/com.ibm.rcp.win32.devicetools.feature_6.2.1.20090918-0145.jar" version="6.2.1.20090918-0145">
<category name="desktop" />
</feature>
<category-def label="desktop" name="desktop">
<description>Lotus Expeditor Toolkit</description>
</category-def>
</site>
You say you're using Lotus Expeditor Toolkit 6.2.2, yet in the first error message I read "6.1.2.200801281900". This seems odd to me. I read the first error message as: "The 6.1.2 group feature requires Equinox Common 3.2.0 or 3.3.0". Equinox Common for Ganymede is 3.4.x
Also, you may find some of the comments in this link useful...
Edit
I just noticed the error message says [3.2.0,3.3.0). I had assumed the closing parentheses was supposed to be a bracket, but I suppose it might be using range notation, in which case I'd guess it actually means it specifically requires 3.2.x.

FireBreath plugin automatic installation

I wrote a plugin using FireBreath, VS2010, for Windows, all browsers.
In FireBreath documentation I saw that I have to install WiX. I installed it.
I created the project using the automatic fbgen tool so it autmatically created a WiX for me.
I couldn't understand from the doc is waht to do now:
Do I have to edit the generated WiX source file? If yes, what to change there?
What to write in the object tag that will trigger the installation of the msi created?
Or at least say to the user that installation is needed and link him to a download?
10x!
With the WiX Toolkit installed, re-run the prep__.bat file to regenerate the installer project along with the main plugin project. Build the plugin project, then build the installer project named something like {YourPlugin}_WiXInstaller. The msi will be placed in Firebreath's \build\bin\{YourPlugin}\{Configuration} dir ( {Configuration} is Debug, Release, etc).
It's not necessary to edit the WiX file unless you really want to change a specific setting. One thing I can think of is changing the default per-user install to all users. Per-user is usually better because it avoids UAC issues.
Deploying it to the user is a bit trickier. For most browsers, the user must save & run the msi. On IE you can declare an object in the HTML body and point the codebase to a URL containing the plugin:
<object id="pluginid" type="application/x-yourplugin" width="0" height="0" codebase="/YourPlugin.msi" >
<param name="onload" value="pluginLoaded" />
</object>
However IE9's security seems to block MSI's here. It does work if the plugin DLL is used (codebase="/YourPlugin.dll"). This auto-install method only works in IE with signed binaries (unless IE's security options are cranked way down).
Hopefully a discussion thread on the MSI security issue will yield some answers.
Update:
As hinted by Richard / taxilian, an MSI must be packaged within a CAB file in order for IE to install it. Getting the INF right and creating the CAB takes some additional steps as documented by RB. And to add yet another wrinkle, Vista/Win7 do not allow the INF to call any binary outside of the CAB file, so a stub launching app must be used (see this thread and example code posted by Roey towards the bottom).