Webclient: fix menu closing (#532, #534).

It does not happen that 2 menus are open at the same time.

See #532.
See #534.
Webclient: refactor split panel (#543).

Rename SplitPanel variables and functions for better clarity.

See #543.
Webclient: topicmap uses full window height (#543)

There is no dead space at the bottom anymore.

Furthermore: no accidental browser window scrollbars appear.
Formerly this happened with Firefox and Chromium.
Thank you, Malte, for reporting!
=> Can you confirm the problem is now solved?

See #543.
Webclient GUIToolkit: change button API (#532).

BREAKING CHANGE

`dm4c.ui.button()` takes a single `config` argument instead of 4. All are optional. Thus the caller must no longer pass useless `undefined` arguments. Furthermore the button() API is better extendable.

You must transform your plugin code:
{{{
dm4c.ui.button(my_handler, "my label", "my icon", false)
}}}
becomes
{{{
dm4c.ui.button({
    on_click: my_handler,
    label: "my label",
    icon: "my icon",
    is_submit: false
})
}}}

In preparation of 1-click menus.

See #532.
Webclient: 1-click menus (#534).

The menu gesture has fundamentally changed: now we have 1-click menus.

Before:
{{{
Click ---------> Choose ---------> Click
}}}
That is 2 mousedowns and 2 mouseups = 2 clicks

Now:
{{{
Mousedown ---------> Choose ---------> Mouseup
}}}
That is 1 mousedown and 1 mouseup = 1 click

So the effort of the most frequent usage gesture, a menu selection, has reduced by half.

(That's the very gesture I'm familar with by using a Mac.
BTW: how it works on Gnome, KDE, Unity, ...?)

-> What do you think? Do we want keep it this way?

I'm quite happy until it comes to scrolling long menus.

DEVELOPER NOTES

GUIToolkit:
`dm4c.ui.button(config)` accepts another config option:
    `on_mousedown` -- the handler fired on button mousedown (a function).

See #534.
Webclient: combine 1- and 2-click gesture (#534).

Both, the "traditional" 2-click gesture and the new 1-click gesture can be used together.

Each time you use a menu you can do both:
- work just like before, that is click to open a menu, and do another click to select an item.
- or save 1 click by holding the mouse button down, move to the item, and release the button.

This works for both, context menus and stationary menus.

The 2-click gesture is still useful in case of long menus, which are scrollable.

I think, we have the best of "2 worlds" now.

DEVELOPER NOTES

GUIToolkit:
`dm4c.ui.button(config)` accepts another config option:
    `on_mouseup` -- the handler fired on button mouseup (a function).

See #534.
Webclient: refactor type menus (#529).

Creation of the type list is decoupled from creating the menu.

In preparation of "Rightclick in empty canvas should open create menu on canvas" (see #529).

DEVELOPER NOTES

Webclient API:
- `dm4c.type_cache.get_topic_types(filter_func)` is a new method.
- `dm4c.topic_type_list()` is a new method. It returns a list of all the topic types the current user is enabled to create instances of.

BREAKING CHANGES

- `dm4c.type_cache.iterate()` is no longer a public method. Use `get_topic_types()` instead (see above).
- `dm4c.refresh_type_menu()` has changed signature: the optional 2nd paramter is an array of topic types (instead a filter function)
Webclient: "Create" menu on canvas (#529).

Right-clicking the canvas brings up a Create menu with the same topic types as listed in the toolbar's Create menu. The created topic is positioned where the right-click is performed.

The "+1" button near the toolbar's Create menu is gone.

DEVELOPER NOTES

Client-Side Plugin Framework:

Plugins can place disabled items in the topic/association/canvas context menus. They do so in the respective `.._commands` hook by setting a command's `disabled` property to true.

Plugins can add icons to the items in the topic/association/canvas context menus. They do so in the respective `.._commands` hook by setting a command's `icon` property to the (absolute or relative) URL of the icon file.

GUI Toolkit:

Menu items added by the `add_item()` method can have a boolean `disabled` property. If true the menu item appears as disabled in the menu. This works for Menu, ContextMenu, and Combobox.

See #529.
Webclient: keyboard control for menus (#534).

All menus can be controlled via keyboard.
Taken from jQuery UI website:

- ENTER/SPACE: Invoke the focused menu item's action.
- UP: Move focus to the previous menu item.
- DOWN: Move focus to the next menu item.

Typing a letter moves focus to the first item whose title starts with that character. Repeating the same character cycles through matching items. Typing more characters within the one second timer matches those characters.

Disabled items can receive keyboard focus, but do not allow any other interaction.

See #534.
Merge branch 'master' into pax-web