unity-design team mailing list archive
-
unity-design team
-
Mailing list archive
-
Message #10056
making web applications look native
Hi all,
I have been doing a bit of tinkering with the webapps system, I want to
get Ubuntu desktop integration into a bunch of open source business
applications (things you install locally rather than hosted services)
like OpenERP, vtiger, OwnCloud, Alfresco, Redmine, OSticket, elgg etc.
etc. these wouldn't be done via the locally installed user scripts, but
by putting the code into the upstream project, or having a module to
install on the web server that provides it. I made a start on HUD
integration for OpenERP and learned a few things.
1) You can't give the web app relative URLs. When you init the
integration you need to pass a full absolute URL, you also need to set
the homepage parameter using protocol and port or it will default to
port 80, so your init function looks more like this:
window.Unity.init({name: "OpenERP",
iconUrl:
window.location.protocol+'//'+window.location.host+"/sale/static/src/img/icon.png",
onInit:unityReady,
homepage:window.location.protocol+'//'+window.location.host});
2) In Chromium the external object isn't ready early enough when running
javascript in the page, you need to pause before doing window.Unity =
external.getUnityObject(1);
3) The documentation doesn't work. This is bad.
http://developer.ubuntu.com/api/ubuntu-12.04/javascript/index.html is
lovely documentation, but flat out wrong. The examples don't work now,
most trivial of which is the showNotification method, which now
requires three parameters (third being the icon)so
Unity.Notification.showNotification("Attention", "Lorem ipsum dolor sit
amet"); is invalid and the examples on the page do not work any more. We
have to not do this. When calling external.getUnityObject(1) we should
be getting back a static API that never breaks (or at least always
accepts function calls that were documented in that version) because we
are passing in a version number - this is what it is for. If we are
going to break the API like this then it becomes really hard for
upstream projects to integrate with the desktop. The desktop
notification API also broke in an undocumented way, which is why things
like gm-notify don't work any more.
4) Generating the callback for the HUD integration involves some dark
magic that hides in utils.js in the installed webapps, it writes a
literal javascript function into the DOM and then using eval to create
it in the page context as a function that can be called back. This works
great, but wow.
5) I want to make the web application look cosmetically like it is a
part of the Ubuntu desktop. We don't really have a style guide or
reference application, but one thing I did think of doing was changing
some of the colours to harmonise with the chameleon colour of the
launcher. It would be great to expose on the Unity javascript object the
hex colour of the launcher - so in javascript I could do something like
$('body').css('background-color',window.Unity.chameleoncolor)
Alan.
--
I work at http://libertus.co.uk
Follow ups