Daily report: June 5th 2013

My tabbrowser work has now reached a stage where a tab linked to an arbitrary panel can be added to a conversation window, moved around, etc with almost no errors. Context menus and nearly everything else also work fine. I only ran into one pesky error with the zoom manager, caused when the tab is opened in a new window – this.mCurrentBrowser is undefined because the tab doesn’t have one. Debugging that will be a job for tomorrow!

The code has been pushed to the awesometab-experimental branch on my repo. Also I was a bit bored and recorded a demonstration video – here.

Meanwhile, I got default prefs working with my Pastebinner add-on thanks to the good folks at #instantbird.

– Fix the bug mentioned above.
– A lot of cleanup has to be done so that the code is worthy of a check-in.
– Mic suggested I start collecting data to test my sorting algorithm later on – I want to write an add-on for this.
– I need to submit my add-ons to AIO.

Daily report: June 3rd 2013

I forgot to write up yesterday’s report, so this post will cover what I’ve done the past two days.

  • I decided to scrap the idea of having a generic tab to be extended, since tabbrowser-tab has very little conversation-specific code anyway. Now, tabs themselves are fully transparent and there is no need for them to be extended.
  • The conversation binding now extends tabPanel – a generic panel to be added to tabbrowser. Future UIs that want to open in a tab should also extend tabPanel.
  • I moved conversation specific menuitems from tabbrowser to the conversation binding. These are now “injected” into the context menu when it is shown.
  • Code for the above has been pushed (except for the last bit which is awaiting review) to my repo.
  • Aside from this, I worked on an addon – Pastebinner – which pushes any message more than 10 lines long to a pastebin and sends the link as a message. It also adds a “/paste” command using which files can be pastebin’d and sent. I suspect this will be useful throughout GSoC.

Daily report: May 31st 2013

Today I experimented with the abstraction code, ending up with more breakage than functionality.

  • I worked on replacing linkedConversation with linkedPanel, since linkedConversation is mostly used in a way that doesn’t depend on it actually being a conversation.
  • I moved the tab context menu code to the tabbrowser-tab binding. This worked, but didn’t yield very good results. Tab images got a bit broken and there were some mouse event issues.  I decided to move it back to tabbrowser, with the idea that generic tabs which wanted to implement their own context menus could do so by setting unsetting mousethrough="always" – this would show the tab’s particular context menu rather than tabbrowser‘s.
  • I added in a aTabClassName parameter to addGenericTab to allow tab classes other than tabbrowser-tab.

Progress was slow again because I had to decipher a lot of vague/complicated code (e.g. this.parentNode.parentNode.parentNode.parentNode.foo(this)) and wasn’t able to open DOM Inspector until Mook_as mentioned the -inspector command line flag (thanks!).

To-do: make tabbrowser-tab easily extendable and further work on tabtest.xml to be a full proof-of-concept for adding non-conversation tabs.

Daily report: May 30th 2013

With help from #instantbird, I was able to fix yesterday’s bug where Mic was able to open an arbitrary UI in a tab but I wasn’t (with the same code). I had to add the newly created tabtest.xml and tabtest.css to jar.mn. Then everything worked and I was able to open the test UI, the add-on interface, the account manager, etc. in a tab (screenshot). Of course, it was still pretty broken and there were a load of errors from different methods assuming that the tab held a conversation.

  • Mic had a much better way of generating new tabs: create a new command (“/newtab”) instead of clicking the buddy list (new bootstrap.js).
  • I did some research into how best to eliminate the errors and add abstraction. The discussion included moving some of the code in tabbrowser to the tabs themselves.
  • I somehow broke my local tree and decided to do a fresh clone.

Today was slow but I hope to make more progress tomorrow.

Daily report: May 29th 2013

Today GSoC really started to kick in. I started a repo for the project here. As Mic suggested, I started working on getting the tabbrowser to accept tabs that aren’t linked to conversations.

  • As a start, I made a clone of the _addConversation method in tabbrowser.xml, and made some changes to let it add non-conversation content. Here‘s a diff of _addConversation and addGenericTab with Mic’s comments.
  • I then created tabtest.xml and tabtest.css (for binding) in order to test it out.
  • I created a small add-on (bootstrap.js) to add a new tab with the contents of tabtest.xml when the buddy list is clicked. I couldn’t get it to work however.
  • Mic got it to work from the error console using the same code, but we couldn’t figure out what was wrong on my end and decided to debug further tomorrow.


Hello, world!This blog is dedicated to documenting my progress through Google Summer of Code 2013 with Instantbird – a Mozilla based instant messaging client. I will be working on Awesometab – a replacement for the current “Join chat” dialog that aims to be good-looking, efficient, and feature full auto-completion goodness.

My mentor for this project will be Benedikt Pfeifer (Mic on IRC). You can read my proposal’s abstract here.

I’ll be posting daily updates here detailing what I’ve been up to during the day, as well as posts summarizing progress on a weekly basis.

Here’s looking forward to a great summer!