RSence 2.2

RSence 2.2 stable milestone has been reached.
Added by Juha-Jarmo Heinonen almost 3 years ago


No known bugs. Recommended update for all users.

Changelog to the client since RSence 2.1.11

Added, replaced or major changes:

  • CoffeeScript support (and some classes have been rewritten in CoffeeScript)
  • ELEM is rewritten in CoffeeScript and has many new features
  • High-level SVG classes, used like the traditional basic DOM element-based classes:
    - SVGControl is the top-level intregration handler. Inherits from HControl and handles the graphics objects created as subviews.
    - Integration classes using SVGControl as a parent via the SVGItemBase factory: SVGRect, SVGCicrle, SVGEllipse (SVGOval), SVGLine, SVGPolyLine (SVGPolyline), SVGPolygon, SVGGroup, SVGPath
    - Each integration class uses its own geometrical constructor and use common options for setting fill, stroke, color and such.
  • HSearchField added: A text field for searching.
  • HLabel added: A text field for viewing the label; not a control, it's a view, thus lighter weight than HStringView, that looks the same otherwise.
  • GUITreeTabItem; takes a GUITree to render in a tab. Re-renders when the value is changed (useful for binding dynamic YAML GUITrees into values, etc).
  • HLocale, which is a central interface for locale-dependant settings, like language strings and date/time/number formatting.
  • GUITrees are now in final 1.0 format:
    - Support for instance id's via the "id" argument, accessible via @app.getViewById
    - Support for instance names via the "name" argument, accessible via @app.getViewsByName
    - Syntax refined, common options can be specified at the top level
    - Supports post-construct calling instences via the "call" argument.
    - Automatic handling of class constructors based on the ancestry of the class (apps vs views vs controls vs other classes).
    - Fully backwards compatible all the way to 0.1
  • Client is packaged by default into a single library called "rsence.js". It's no longer big by modern standards and removes the hassle of managing client dependencies and latency of loading multiple packages. This can be controlled by the boot_lib setting.
  • HTimeSheet (and HTimeSheetItem) has been rewritten.
  • HListItemControl added for handling list items at a top level instead of implementing the rougher HListItems valueresponder.
  • HValueAction class added. Use for binding values to perform custom actions on changes. Specify the target parent object method name to call (or a property to change) as valueAction in the options, when a value change event happens.
  • Menu classes added:
    - HMiniMenu is a half-height pulldown menu to be usually used inside other components.
    - HPopupMenu is a full-height pulldown menu.


  • IE6 is no longer actively supported. If someone still wants to take on that job, please contact us.
  • files are no longer needed. For temporarily disabled js packages, the "disabled" tag file is still honored.

Other changes:

  • Better error handling
  • If the lostActiveState event method returns false on the currently active control, the active control is not changed.
  • The HTimeSheetEditor is no longer included.
  • HClickButton has configurable options for clickOnValue and clickOffValue
  • HSlider has a new option: "roundValue", which is a boolean for rounding the result. Defaults to false.
  • HTextControl (and defived classes) have a new boolean option: focusOnCreate. Defaults to false.
  • HClass features added:
    - hasAncestor method returns true, if the argument class object is an ancestor of the class object called.
    - ancestors array of ancestor classes
  • HView has new methods added for determining relationship between two views or controls:
    - isChildOf method
    - isParentOf method
    - isSiblingOf method
  • HView has new methods added for setting attributes of named elements similarly to styles:
    - setAttrOfPart is like setStyleOfPart
    - attrOfPart is like styleOfPart
  • Other new methods in HView:
    - getLocaleString returns a named string via HLocale
    - elemOfPart returns the named element for low-level handling
  • Various bug fixes and smaller changes

Changelog to the server since RSence 2.1.11

  • CoffeeScript compilation support transparently basically everywhere where only straight JS was available before.
  • The default address bound is now instead of
  • client_autoreload is now the default setting; all browser windows of all sessions are automatically reloaded, when apps are changed.
  • Startup times have been improved
  • Method for compiling coffeescript strings into js, to be used where msg.reply is used for js: src )
  • GUITree YAML files are searched inside a plugin bundle at the following locations (where "foo" is the example name of the plugin): foo.yaml, guy.yaml, gui/foo.yaml, gui/main.yaml
  • The command-line tool has been refactored and has many new features
  • PID and log filenames are configurable
  • Sessions are automatically saved on even intervals, configurable with the autosave_interval setting and can be disabled by setting it 0
  • Support for more HTTP request types: HEAD, OPTIONS, DELETE, TRACE and CONNECT in addition to GET and POST. Each are handled in similar fashion by using Servlet plugins.
  • The session managment supports sessions for Servlet plugins. The session is supplied as the third argument to the request handlers, which was present before, but not implemented.
  • When sessions are expired or invalid, the client is just reloaded with a minimal message in normal mode. In verbose and debug modes, the "Session is Invalid" prompt is still displayed.
  • Better session dumping handling and more session-related event method calls to plugins:
    - dump_ses is delegated before dumping a session to disk. The receivers receive a session hash, not a msg
    - dump_ses_id is delegated before dumping a session to disk. The receivers receive just the session id.
    - load_ses is delegated after loading loading a dumped session from disk. The receivers receive just the session id.
    - expire_ses is delegated before when a session has expired just before it's deleted. The receivers receive a session hash, not a msg
    - expire_ses_id is delegated before when a session has expired just before it's deleted. The receivers receive just the session id.