My favorites | Sign in
Project Home Wiki Issues Source
Search
for
WorkingWithGoogleGadgets  
A guide to using and authoring basic gadgets for use on Google Code
Gadgets
Updated Mar 14, 2011 by apa...@google.com

Working with Google Gadgets

Introduction

In 2008 we launched gadget support throughout our project hosting service, allowing users to add gadgets to any wiki or project homepage. This guide aims to provide a starting point for both using and authoring simple gadgets within your own projects.

Using existing gadgets

A number of specialized gadgets have already been created for project hosting, with some being listed on our InterestingDeveloperGadgets page. The Project Feeds section of each project also provides a list of custom gadgets (see our support project as an example). You can also find thousands of non-developer specific gadgets at http://www.google.com/ig/directory .

Gadgets can be added to any wiki or project home page using our new <wiki:gadget...> syntax. For example, the gadget found at:

http://google-code-project-hosting-gadgets.googlecode.com/svn/trunk/examples/issueupdates_example.xml

Can be added using the following code:

<wiki:gadget url="http://google-code-project-hosting-gadgets.googlecode.com/svn/trunk/examples/issueupdates_example.xml" up_projectName="support" />

Resulting in the following:

In this case, the up_projectName attribute is a configuration option specific to this gadget used to control which project's information is displayed.

Creating your own gadgets

Google Gadgets are simple HTML and Javascript applications that can be embedded in webpages and other apps. From the developer perspective, they're normally small XML files used to wrap HTML, with metadata used by the gadgets API. Full documentation can be found on the Gadgets API homepage, but below are two simple examples.

Hello, world!

Taken from the Getting Started guide, the following is an example of a simple gadget that simply displayed "Hello, world!"

<?xml version="1.0" encoding="UTF-8" ?> 
<Module>
  <ModulePrefs title="hello world example" /> 
  <Content type="html">
     <![CDATA[ 
       Hello, world!
     ]]>
  </Content> 
</Module>

Embedding a remote URL

You can also use Gadgets to display the contents of a remote page.

<?xml version="1.0" encoding="UTF-8" ?> 
<Module>
  <ModulePrefs title="remote content example" />
  <Content type="url" href="http://code.google.com" />
</Module>

You can also specify dimensions for your gadget in your actual wiki syntax:

<wiki:gadget url="..." width="540" height="400" />

Advantages of type=html over type=url

type=html gadgets have a few advantages over type=url gadgets:

  • They cache very well. The IFRAME that renders the gadget on the browser is cached by the browser, so subsequent views of the gadget by users who have seen the gadgets do not incur any additional HTTP hits.
  • If you use the _IG_Fetch...() or Gadgets.io proxies, those responses are also cached by the browser. This means even dynamic gadgets have excellent load performance while still being customizable.
  • type=url gadgets incur a redundant HTTP call to the Gadget renderer, which increases latency.
  • They generally are better supported by the APIs than type=url gadgets.

In some cases, this means that you need to rewrite some of your functionality, but the effort is usually minimal. Plus, by using APIs to fetch your data rather than just generating HTML, you are creating APIs that other people can use to create mashups for developers.

Gracefully Degrade

Gadgets can render in a variety of containers. Some of them have different end-user expectations than others:

  • iGoogle users expect to be able to customize their gadget.
  • Google Code Wiki viewers do not expect to customize the gadget; instead, it is up to the page owner to customize the gadget for the viewer (by passing in user prefs).

When you code your gadget, code with both use cases in mind. Your iGoogle users will appreciate the ability to customize the gadget through a familiar interface (the "edit settings" menu).

If you try to call prefs.set() and the gadget is being rendered on the Wiki, you'll get an exception because that is not a supported feature on Google Code. Therefore, be sure to code your gadget such that it works well in both iGoogle and Google Code. There is a simple way to determine if your gadget is on iGoogle: write some JavaScript that searches document.location for "synd=ig". If that's present, you know it is safe to call prefs.set().

Use Standard Preference Names

Google Code users will use a syntax that looks like this:

<wiki:gadget url="..." up_pref1="val1" up_pref2="val2"/> 

To make life easier on users of the Wiki, please use a standard user pref name for the project name. Example:

<UserPref name="projectName" display_name="Project Name" default_value="no_project_selected" />

If you use something other than projectName, users would have to inspect your gadget to figure out what the variable is. Here's an example:

<wiki:gadget url="..." up_projectName="google-web-toolkit"/> 

Also, by using a user pref value for specifying gadget customizations, your gadget becomes more portable across the different ways that gadgets can be embedded:

Use the Asset Proxy

Referring to images, .css, or .js files directly from your gadget can cause performance or load problems. Instead, take advantage of the gadgets asset proxy by prefixing all your static URLs with /gadgets/proxy?url=. Here's an example:

<img border="0"
src="/gadgets/proxy?url=http://igoogleinfogadget.googlecode.com/svn/trunk/img_fallback/content_start.gif"
/>

You can use the same trick for CSS background-image: url(), <script src=...>, etc. You can also use the gadgets.io.getProxyUrl() method to compute the proxy URLs dynamically, which is useful for any content loaded via JavaScript, AJAX, jQuery.load(), etc.

Publishing your gadgets

Hosting gadgets on Google Code

It's also possible to host your gadgets directly out of your project hosting repository. As in the example above, the file:

http://google-code-project-hosting-gadgets.googlecode.com/svn/trunk/examples/issueupdates_example.xml

Is just a normal file stored in google-code-project-hosting-gadgets's svn repository, and can be referenced using:

<wiki:gadget url="http://google-code-project-hosting-gadgets.googlecode.com/svn/trunk/examples/issueupdates_example.xml" />

If you do plan on hosting your gadget and related resources out of your source repository, though, ensure that all of your resource calls go through gadget.io.getProxyUrl or gadget.io.makeRequest. Gadgets themselves are cached, but direct links to files within your repository can lead to a significant decrease in performance.

Testing Your Gadget

You should test your gadget in the following places:

Test in multiple browsers, and be sure to use Firebug with error reporting enabled when interacting with your gadget.

Promote the Gadget From Your Site

To promote the gadget for use on iGoogle: See Add to Google - Information for Publishers. You can also add the gadget pre-customized:

http://www.google.com/ig/add?moduleurl=http://www.google.com/ig/modules/horoscope.xml&up_sign=Capricorn

To promote the gadget for embedding on arbitrary 3rd party web sites, use the creator. You can link to the creator by constructing a URL as follows:

http://www.gmodules.com/ig/creator?url=http://www.google.com/ig/modules/horoscope.xml&up_sign=Taurus

Note that the &up= variables only accept characters

Promote your Gadgets in the iGoogle Directory

Follow the instructions at http://www.google.com/ig/submit to add your gadget to the directory. Be sure to include descriptive metadata so that your gadget can be found more easily.

Integrating other Google products

Gadgets also allow for tighter integration with other Google products. Google Docs, for example, outputs iframed content that can be adapted into gadgets, while Youtube provides Flash embed codes that can be embedded in a normal HTML gadget.

Google Docs Forms and Presentations

Using Google Docs it's possible to create simple and customizable feedback forms, then embed them within any webpage. Taking the embed code provided by Google Docs:

<iframe src="http://spreadsheets.google.com/embeddedform?key=pcei2KUN61t4vbuSjTGjzNw" width="310" height="566" frameborder="0" marginheight="0" marginwidth="0">Loading...</iframe>

We can convert the content the iframe into a gadget:

<?xml version="1.0" encoding="UTF-8" ?> 
<Module>
  <ModulePrefs title="Gadget Form Example" />
  <Content type="url" href="http://spreadsheets.google.com/embeddedform?key=pcei2KUN61t4vbuSjTGjzNw" />
</Module>

Then reference it within our project home page or a wiki page:

<wiki:gadget url="..." width="310" height="566" />

Similar embed codes are provided for presentations as well, allowing presentations to be inserted alongside their related wiki documentation.

Embedding YouTube videos

It's now possible to embed videos directly using our new video gadget, which currently handles both YouTube and Google Video content:

<wiki:gadget url="http://code.google.com/p/google-code-project-hosting-gadgets/source/browse/trunk/video/gcVideo.xml" up_video="..." />

There is also a short hand wiki tag for embedding videos. For more information, refer to the WikiSyntax documentation.

Google Groups

MarkMail's Gadget Builder provides step-by-step tool for generating gadgets for any Google Group based on simple search term.

Google Moderator

Google Moderator allows users to submit feedback and vote on feedback from others. You can use it as a way of collecting basic input beyond the issue tracker. Create a series for your project first, and then put the URL of that series in the gadget code:

<wiki:gadget url="http://www.google.com/moderator/static/moderator-embed-gadget.xml" 
height="400" width="900" up_url="http://www.google.com/moderator/#15/e=1c1a0&t=1c1a0.40" up_sort="HOT" up_hl="en" />
Comment by DonCovin...@gmail.com, Oct 18, 2009

How do I delete those little Gadgets? I have tried multiple times to delete unwanted gadgets, but after I "hit delete" they reappear when I go to my igoogle page. I need some advice. doncovington@comcast.net

Comment by monto...@gmail.com, Nov 6, 2009

it s very nice way to teach to the student

Comment by recover89, Jan 25, 2010

How about making <wiki:gadget/>'s align-able, like <wiki:gadget align="right" ... />?

Comment by adi...@gmail.com, Mar 16, 2010

怎么其它页面发不了评论只有这里能发啊

这个 wiki 系统是开源的吗?哪里可以看到源代码?

Is this wiki system a open source project? how to get it's source code?

Comment by Stillmem...@gmail.com, Jul 4, 2010

<wiki:gadget url="http://google-code-project-hosting-gadgets.googlecode.com/svn/trunk/examples/issueupdates_example.xml" up_projectName="support" />

Comment by impingdo...@gmail.com, Oct 19, 2010

The following works in IE and Firefox but not in Goolgle Chrome. Is there a way to fix it? http://7.gmodules.com/ig/ifr?url=http://www.google.com/ig/modules/youtube_videos.xml

Vince impingdoing@gmail.com

Comment by moosh.be, Oct 20, 2010

How to include a googledoc "draw" in a wiki page ?

Comment by sstecchz...@gmail.com, Nov 12, 2010

need details

Comment by tinithet...@gmail.com, Feb 20, 2011

hi all I need to develop google gadget that use webservice form another domain i am facing cross domain interaction problem(access denied) when my gadget tries make soap request. To solve this how can i add proxy in google gadget. please some one help me

tinithetiger@gmail.com

Comment by wyldc...@gmail.com, Apr 30, 2011

Feel the need to preview comments in projects hosted here at Google Code Project Hosting? Then check this out: Preview comments - This is basically a hack for comment previewing before you post a comment on a wiki page, rendered using JavaScript?.

This hack is hosted at a project wikignpi, hosted at Google Code Project Hosting :)

Comment by dec.ilum...@gmail.com, Jan 10, 2012

It's a good information. Thank you. Lamparas http://www.dec-iluminacion.com

Comment by kernc...@gmail.com, Jan 30, 2012

It's been a requested feature: Adsense for Project Hosting.

Here's one working solution: http://code.google.com/p/gprojecthosting-adsense/ :-)

Comment by sarafore...@gmail.com, Feb 3, 2012

Every thing is working great. http://www.projectin.eu

Comment by benignja...@gmail.com, Feb 18, 2012

how about...this? # 1 סוב בט ‰ אַ ‰ אַ € ~ אַ ° אַ אַ אַ אַ ¸ אַ € ¹ איך ¬ אַ € ¡אַ € אַ € ° א, אַ א, ז א ™ ~ ג E / \ אַסעגידזשלנפּ - אַ ¡אַ א ¥ ¤ אַ © אַ ª אַ ¬ אַ ¯ ³ אַ אַ אַ אַ † אַז ‰ ¥ âμ אַ 'איך' € אַ ª אַ º אַ | אַ א ¿¬ אַ € | אַ € "א € œ אַ € אַ € ~ אַ ¸ אַ € ¹ א · עאָע E # ™ און 1, ה בטוו |I see you baby and you're looking so good I got a feeling and I think that we should Let's take it outside let's go for a ride Let's do it whatever we want Let's make it a crime let's do it in time Let's do it wherever we want

Let's fuck

I wanna baby and I know that you would I got it baby and I know that you're good Let's do it for sin let's bring in your friends Let's do it whatever we want Let's do it for them let's do it again Let's do it wherever we want

Let's Fuck

Let's go all the way Let's do it all day Let's do it whatever we want Let's turn out the lights Let's do it all night Let's do it as long as we want

Let's fuck Let's do it again Let's do it whatever we want Let's fuck

Comment by jberrygowan@gmail.com, Mar 12, 2012

for new google location web maps more for tomorrow.

Comment by ninascar...@gmail.com, Apr 6, 2012

I need to know what much domain is and where can I find it?

Comment by cjxx...@gmail.com, May 12, 2012

How do I create a wiki table that has new lines in it? such as a list of items in a cell?


Sign in to add a comment
Powered by Google Project Hosting