Merge branch 'develop' into gilbert-ext4
authorJoseph Spiros <joseph.spiros@ithinksw.com>
Fri, 4 Nov 2011 23:05:56 +0000 (19:05 -0400)
committerJoseph Spiros <joseph.spiros@ithinksw.com>
Fri, 4 Nov 2011 23:05:56 +0000 (19:05 -0400)
* develop: (137 commits)
  Added include_package_data option to setup.py to ensure MANIFEST.in is actually heeded.
  Edited the READMEs and documentation to be cleaner and more consistent.
  Bumped version number to 0.9.1 in preparation for release.
  Tweaked manifest file. Removed a bunch of hackery from setup.py in favor of setuptools.find_packages, since we're using setuptools anyway. Addresses bug #177.
  Abstracted email resetting during the email change process onto the AccountForm. Addresses bug #173.
  This will include non *.py files in our distribution for setup.py, easy_install, pip, &c. purposes.
  Removed python requirement line from setup.py, since easy_install and pip can't do anything with it and will choke on it for e.g. pypy.
  Correction to waldo login view to pass the request into the login_form for GET requests as well.
  Added release notes for 0.9.1.
  Merged the contribution information from the ithinksw.org philo wiki into the documentation.
  Removed philo.models.Tag entry from the docs.
  Incremented version number to 0.9.1rc and cleaned up README a tiny bit.
  Tweaked AttributeMapper._fill_cache to also store values on the Attribute instance itself. Made everything about AttributeMapper._fill_cache lazier.
  Lazy-eval the values of AttributeValues instead of loading them all during AttributeMapper._fill_cache.
  Removed Node.render_to_response select_related call since it is not clearly more efficient. Delayed page evaluation in FeedView.page_view to the end of the inner function.
  Added a 'contributing' page to the philo docs. This is meant primarily as an initial effort, which can be expanded upon more later.
  Corrections to Blog.entry_tags to use taggit APIs. Tweaks to penfield migration 0005 because of South issue 428 (and some incorrect filters obscured by that issue.)
  Minor correction to EmbedWidget.js to handle window names with dashes.
  Overrides TemplateField widget on admin container forms instead of on the ModelAdmin.
  Reverted TemplateField parent to models.TextField and moved EmbedWidget into philo.admin.widgets. Added EmbedWidget use on the appropriate ModelAdmins. Cleaned up ContentletAdmin and ContentReferenceAdmin.
  ...

536 files changed:
.gitmodules [new file with mode: 0644]
README
README.markdown
philo/contrib/gilbert/README [new file with mode: 0644]
philo/contrib/gilbert/__init__.py [new file with mode: 0644]
philo/contrib/gilbert/admin.py [new file with mode: 0644]
philo/contrib/gilbert/exceptions.py [new file with mode: 0644]
philo/contrib/gilbert/extdirect/__init__.py [new file with mode: 0644]
philo/contrib/gilbert/extdirect/core.py [new file with mode: 0644]
philo/contrib/gilbert/extdirect/forms.py [new file with mode: 0644]
philo/contrib/gilbert/gilbert.py [new file with mode: 0644]
philo/contrib/gilbert/models.py [new file with mode: 0644]
philo/contrib/gilbert/plugins/__init__.py [new file with mode: 0644]
philo/contrib/gilbert/plugins/auth.py [new file with mode: 0644]
philo/contrib/gilbert/plugins/base.py [new file with mode: 0644]
philo/contrib/gilbert/plugins/models.py [new file with mode: 0644]
philo/contrib/gilbert/sites.py [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/extjs [new submodule]
philo/contrib/gilbert/static/gilbert/fugue-icons [new submodule]
philo/contrib/gilbert/static/gilbert/gilbert.js [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/lib/app.js [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/lib/models.js [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/lib/plugins.js [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/lib/ui/forms.js [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/lib/ui/ui.js [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/lib/ui/windows.js [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/README.markdown [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/config.rb [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/murano/css/murano.css [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/btn/arrv.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/btn/c/Down.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/btn/c/Normal.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/btn/c/Over.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/btn/c/Pressed.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/btn/left-over.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/btn/left.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/btn/menu.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/btn/right-over.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/btn/right.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/btn/split.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/btn/splith.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/btn/splitv.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/btn/whole/Down.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/btn/whole/Normal.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/btn/whole/Over.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/btn/whole/Pressed.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/fills/30b.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/fills/30w.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/fills/70w.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/fills/80b.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/form/checked.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/form/field.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/form/field.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/form/radioed.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/form/unchecked.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/form/unradioed.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/gloss/gloss.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/gloss/gloss.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/gloss/light-gloss.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/gradients/30white-to-trans.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/gradients/dark-inner-shadow.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/grid/col-move-bottom.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/grid/col-move-top.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/grid/row-editor-btns.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/icons/balloon.png [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/murano/images/icons/cross.png [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/murano/images/icons/d-first.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/icons/d-last.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/icons/d-next.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/icons/d-prev.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/icons/d-refresh.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/icons/exclamation.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/icons/exclamation32.png [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/murano/images/icons/first.png [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/murano/images/icons/information.png [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/murano/images/icons/last.png [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/murano/images/icons/next.png [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/murano/images/icons/no.png [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/murano/images/icons/prev.png [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/murano/images/icons/refresh.png [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/murano/images/icons/yes.png [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/murano/images/listview/az.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/listview/cols.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/listview/header.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/listview/headerdrop.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/listview/listview-sort-asc.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/listview/listview-sort-desc.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/listview/sort-asc.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/listview/sort-desc.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/listview/za.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/load.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/menu/arrow.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/menu/arrow.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/mini/mini-bottom.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/mini/mini-left.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/mini/mini-right.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/mini/mini-top.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/progress.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/resizable/e.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/resizable/n.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/resizable/ne.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/resizable/nw.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/resizable/s.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/resizable/se.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/resizable/sw.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/resizable/w.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/scroller/l.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/scroller/r.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/slider/h.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/slider/thumbh.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/slider/thumbv.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/slider/v.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/30-b.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/30-w.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/30w.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/30white-to-trans.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/70w.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/80-b.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/?.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/arrow buttons.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/btn.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/check.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/col-move-bottom.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/col-move-top.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/dark-inner-shadow.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/exclamation.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/grad-height-25.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/h.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/light-gloss.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/listview-sort.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/listviewheader.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/mini.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/progress.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/resizable corner.psd [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/resizable long.psd [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/row-editor-btns.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/scroller.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/sort.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/tabs.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/tb-sprite.psd [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/tb.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/thumbh.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/thumbv.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/tools.psd [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/tooltip-invalid.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/tooltip.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/triggers/blank.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/triggers/blank.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/triggers/clear.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/triggers/date.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/triggers/drop.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/triggers/search.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/v.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/window-dark.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/window.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/src/x.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tab/c/Bottom.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tab/c/Top.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tab/close.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tab/l/Bottom.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tab/l/Top.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tab/r/Bottom.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tab/r/Top.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tb-sprite.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tb.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tools.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tree/arrows.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tree/drop-add.png [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/murano/images/tree/drop-between.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tree/drop-no.png [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/murano/images/tree/drop-over.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tree/drop-under.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tree/drop-yes.png [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-end-minus-nl.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-end-minus.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-end-plus-nl.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-end-plus.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-end.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-line.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-minus-nl.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-minus.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-plus-nl.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-plus.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tree/folder-open.png [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/murano/images/tree/folder.png [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/murano/images/tree/leaf.png [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/murano/images/tree/loading.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tree/s.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/trigger/blank.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/trigger/clear.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/trigger/date.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/trigger/drop.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/trigger/search.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tt/bc.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tt/bl.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tt/br.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tt/c.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tt/i-bc.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tt/i-bl.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tt/i-br.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tt/i-c.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tt/i-ml.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tt/i-mr.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tt/i-tc.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tt/i-tl.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tt/i-tr.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tt/ml.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tt/mr.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tt/tc.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tt/tl.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/tt/tr.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/windowdark/bc.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/windowdark/bl.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/windowdark/br.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/windowdark/c.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/windowdark/l.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/windowdark/r.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/windowdark/tc.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/windowdark/tl.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/windowdark/tr.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/windowlight/bc.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/windowlight/bl.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/windowlight/br.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/windowlight/c.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/windowlight/l.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/windowlight/r.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/windowlight/tc.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/windowlight/tl.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/images/windowlight/tr.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/boundlist/trigger-arrow.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/btn-group/btn-group-default-framed-corners.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/btn-group/btn-group-default-framed-notitle-corners.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/btn-group/btn-group-default-framed-notitle-sides.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/btn-group/btn-group-default-framed-sides.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/btn/arrv.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/btn/left-over.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/btn/left.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/btn/menu.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/btn/right-over.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/btn/right.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/btn/splith.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/btn/splitv.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/button/arrow.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/button/btn.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/button/group-cs.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/button/group-lr.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/button/group-tb.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow-b-noline.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow-b.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow-bo.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow-light.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow-noline.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow-o.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/datepicker/datepicker-footer-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/datepicker/datepicker-footer-bg.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/datepicker/datepicker-header-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/datepicker/datepicker-header-bg.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/dd/drop-add.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/dd/drop-no.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/dd/drop-yes.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/editor/tb-sprite.gif [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/murano/img/editor/tb-sprite.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/form-invalid-tip/form-invalid-tip-default-corners.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/form-invalid-tip/form-invalid-tip-default-sides.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/form/checked.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/form/exclamation.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/form/radioed.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/form/spinner-small.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/form/spinner.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/form/trigger-blank.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/form/trigger-clear.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/form/trigger-date.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/form/trigger-drop.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/form/trigger-search.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/form/trigger-tpl.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/form/unchecked.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/form/unradioed.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/arrow-left-white.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/arrow-right-white.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/cell-special-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/cell-special-bg.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/cell-special-selected-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/cell-special-selected-bg.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/checked.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/col-move-bottom.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/col-move-top.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/column-header-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/column-header-bg.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/column-header-over-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/column-header-over-bg.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/columns.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/dd-insert-arrow-left.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/dd-insert-arrow-left.png [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/murano/img/grid/dd-insert-arrow-right.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/dd-insert-arrow-right.png [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/murano/img/grid/dirty.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/done.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/drop-no.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/drop-yes.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/footer-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/grid-blue-hd.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/grid-blue-split.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/grid-hrow.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/grid-loading.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/grid-split.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/grid-vista-hd.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/grid3-hd-btn.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/grid3-hrow-over.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/grid3-hrow.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/grid3-rowheader.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/group-by.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/group-collapse.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/group-expand-sprite.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/group-expand.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/hd-pop.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/hmenu-asc.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/hmenu-desc.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/hmenu-lock.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/hmenu-lock.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/hmenu-unlock.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/hmenu-unlock.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/invalid_line.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/loading.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/mso-hd.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/nowait.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/page-first-disabled.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/page-first.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/page-last-disabled.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/page-last.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/page-next-disabled.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/page-next.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/page-prev-disabled.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/page-prev.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/pick-button.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/property-cell-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/property-cell-selected-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/refresh-disabled.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/refresh.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/row-check-sprite.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/row-expand-sprite.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/row-over.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/row-sel.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/sort-hd.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/sort_asc.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/sort_desc.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/unchecked.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/grid/wait.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/layout/mini-bottom.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/layout/mini-left.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/layout/mini-right.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/layout/mini-top.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/loading.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/menu/checked.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/menu/group-checked.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/menu/item-over.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/menu/menu-parent.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/menu/menu.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/menu/unchecked.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-bottom-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-bottom-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-bottom-corners.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-bottom-sides.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-bottom-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-left-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-left-corners.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-left-sides.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-right-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-right-corners.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-right-sides.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-top-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-top-corners.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-top-sides.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-left-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-left-corners.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-left-sides.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-right-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-right-corners.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-right-sides.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-top-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-top-corners.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-top-sides.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-left-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-right-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-top-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel/panel-default-framed-corners.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/panel/panel-default-framed-sides.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/progress/progress-default-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/shared/blue-loading.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/shared/btn-left.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/shared/btn-right.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/shared/calendar.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/shared/glass-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/shared/hd-sprite.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/shared/icon-error.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/shared/icon-info.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/shared/icon-question.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/shared/icon-warning.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/shared/large-loading.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/shared/loading-balls.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/shared/shadow-c.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/shared/shadow-lr.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/shared/shadow.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/shared/warning.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/sizer/e.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/sizer/n.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/sizer/ne.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/sizer/nw.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/sizer/s.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/sizer/se.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/sizer/sw.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/sizer/w.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-bg.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-thumb.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-thumb.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-v-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-v-bg.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-v-thumb.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-v-thumb.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/src/triggericons/icons.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/src/triggericons/spinners.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/src/triggers/blank.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/src/triggers/blank.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/src/triggers/clear.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/src/triggers/date.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/src/triggers/drop.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/src/triggers/search.opacity [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tab-bar/l.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tab-bar/r.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tab/tab-close.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tip/tip-corners.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tip/tip-sides.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/toolbar/more.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/toolbar/scroll-left.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/toolbar/scroll-right.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/toolbar/toolbar-default-bg.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tools/tool-sprites.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/arrows.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-above.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-add.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-append.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-below.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-between.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-no.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-over.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-under.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-yes.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-end-minus-nl.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-end-minus.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-end-plus-nl.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-end-plus.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-end.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-line.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-minus-nl.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-minus.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-plus-nl.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-plus.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/folder-open.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/folder.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/leaf.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/loading.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/tree/s.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/triggericons/Frame 4.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/triggericons/chev.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/triggericons/clear.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/triggericons/date.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/triggericons/search.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/triggericons/spinner-down.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/triggericons/spinner-up.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/triggericons/spinners.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/triggericons/time.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/util/splitter/mini-bottom.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/util/splitter/mini-left.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/util/splitter/mini-right.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/util/splitter/mini-top.png [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-bottom-corners.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-bottom-sides.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-left-corners.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-left-sides.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-right-corners.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-right-sides.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-top-corners.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-top-sides.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/window/window-default-corners.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/img/window/window-default-sides.gif [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/_core.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/_functions.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/_init.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/_mixins.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/_variables.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_all.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_button.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_datepicker.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_form.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_grid.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_icons.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_menu.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_panel.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_progress_bar.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_scroller.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_sizer.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_splitter.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_tab.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_toolbar.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_tooltip.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_tree.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_window.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/form/_htmleditor.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/form/_slider.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/form/_triggers.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/overrides/_accordion.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/murano/sass/murano/overrides/_all.scss [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/plugins/auth.js [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/plugins/models.js [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/superboxselect/SuperBoxSelect.js [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/superboxselect/clear.png [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/superboxselect/close.png [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/superboxselect/expand.png [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/superboxselect/superboxselect-gray-extend.css [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/superboxselect/superboxselect.css [new file with mode: 0755]
philo/contrib/gilbert/static/gilbert/wallpaper.README [new file with mode: 0644]
philo/contrib/gilbert/static/gilbert/wallpaper.jpg [new file with mode: 0644]
philo/contrib/gilbert/templates/gilbert/api.js [new file with mode: 0644]
philo/contrib/gilbert/templates/gilbert/base.html [new file with mode: 0644]
philo/contrib/gilbert/templates/gilbert/icons.css [new file with mode: 0644]
philo/contrib/gilbert/templates/gilbert/index.html [new file with mode: 0644]
philo/contrib/gilbert/templates/gilbert/login.html [new file with mode: 0644]
philo/contrib/penfield/gilbert.py [new file with mode: 0644]
philo/gilbert.py [new file with mode: 0644]
philo/hacks.py [new file with mode: 0644]

diff --git a/.gitmodules b/.gitmodules
new file mode 100644 (file)
index 0000000..9a42445
--- /dev/null
@@ -0,0 +1,6 @@
+[submodule "philo/contrib/gilbert/static/gilbert/extjs"]
+       path = philo/contrib/gilbert/static/gilbert/extjs
+       url = git://git.ithinksw.org/extjs.git
+[submodule "philo/contrib/gilbert/static/gilbert/fugue-icons"]
+       path = philo/contrib/gilbert/static/gilbert/fugue-icons
+       url = git://git.ithinksw.org/fugue-icons.git
diff --git a/README b/README
index 630ea76..abf3a35 100644 (file)
--- a/README
+++ b/README
@@ -15,5 +15,6 @@ After installing philo and mptt on your PYTHONPATH, make sure to complete the fo
 2. Add 'philo' and 'mptt' to settings.INSTALLED_APPS.
 3. Include 'philo.urls' somewhere in your urls.py file.
 4. Optionally add a root node to your current Site.
+5. (philo.contrib.gilbert) Add 'django.core.context_processors.request' to settings.TEMPLATE_CONTEXT_PROCESSORS.
 
 Philo should be ready to go! All that's left is to learn more <http://docs.philocms.org/> and contribute <http://docs.philocms.org/en/latest/contribute.html>.
index 77ebb65..30856dc 100644 (file)
@@ -16,5 +16,6 @@ After installing philo and mptt on your PYTHONPATH, make sure to complete the fo
 2. Add 'philo' and 'mptt' to settings.INSTALLED_APPS.
 3. Include 'philo.urls' somewhere in your urls.py file.
 4. Optionally add a root node to your current Site.
+5. (philo.contrib.gilbert) Add 'django.core.context_processors.request' to settings.TEMPLATE_CONTEXT_PROCESSORS.
 
 Philo should be ready to go! All that's left is to [learn more](http://docs.philocms.org/) and [contribute](http://docs.philocms.org/en/latest/contribute.html).
diff --git a/philo/contrib/gilbert/README b/philo/contrib/gilbert/README
new file mode 100644 (file)
index 0000000..6763313
--- /dev/null
@@ -0,0 +1 @@
+Gilbert requires Django 1.3+.
\ No newline at end of file
diff --git a/philo/contrib/gilbert/__init__.py b/philo/contrib/gilbert/__init__.py
new file mode 100644 (file)
index 0000000..de7dbc1
--- /dev/null
@@ -0,0 +1,24 @@
+__version__ = 'alpha'
+
+
+from philo.contrib.gilbert.sites import GilbertSite, site
+
+
+def autodiscover():
+       import copy
+       from django.conf import settings
+       from django.utils.importlib import import_module
+       from django.utils.module_loading import module_has_submodule
+       
+       for app in settings.INSTALLED_APPS:
+               mod = import_module(app)
+               try:
+                       before_import_model_routers = copy.copy(site.model_routers)
+                       before_import_core_router = copy.copy(site.core_router)
+                       import_module('%s.gilbert' % app)
+               except:
+                       site.model_routers = before_import_model_routers
+                       site.core_router = before_import_core_router
+                       
+                       if module_has_submodule(mod, 'gilbert'):
+                               raise
\ No newline at end of file
diff --git a/philo/contrib/gilbert/admin.py b/philo/contrib/gilbert/admin.py
new file mode 100644 (file)
index 0000000..af46cb8
--- /dev/null
@@ -0,0 +1,4 @@
+from django.contrib.admin import site
+from .models import UserPreferences
+
+site.register(UserPreferences)
\ No newline at end of file
diff --git a/philo/contrib/gilbert/exceptions.py b/philo/contrib/gilbert/exceptions.py
new file mode 100644 (file)
index 0000000..6c4fe17
--- /dev/null
@@ -0,0 +1,26 @@
+class AlreadyRegistered(Exception):
+       pass
+
+
+class NotRegistered(Exception):
+       pass
+
+
+class ExtException(Exception):
+       """ Base class for all Ext.Direct-related exceptions. """
+       pass
+
+
+class InvalidExtMethod(ExtException):
+       """ Indicate that a function cannot be an Ext.Direct method. """
+       pass
+
+
+class NotExtAction(ExtException):
+       """ Indicate that an object is not an Ext.Direct action. """
+       pass
+
+
+class NotExtMethod(ExtException):
+       """ Indicate that a function is not an Ext.Direct method. """
+       pass
\ No newline at end of file
diff --git a/philo/contrib/gilbert/extdirect/__init__.py b/philo/contrib/gilbert/extdirect/__init__.py
new file mode 100644 (file)
index 0000000..ff48f94
--- /dev/null
@@ -0,0 +1,2 @@
+from .core import *
+from .forms import *
\ No newline at end of file
diff --git a/philo/contrib/gilbert/extdirect/core.py b/philo/contrib/gilbert/extdirect/core.py
new file mode 100644 (file)
index 0000000..f0a4e2a
--- /dev/null
@@ -0,0 +1,637 @@
+from django.db.models import Q
+from django.http import HttpResponse
+from django.utils import simplejson as json
+from django.utils.encoding import smart_str
+from django.views.debug import ExceptionReporter
+from inspect import isclass, ismethod, isfunction, getmembers, getargspec
+from traceback import format_tb
+from abc import ABCMeta, abstractproperty
+from collections import Callable, Sized, Mapping
+import sys, datetime
+
+
+# __all__ = ('ext_action', 'ext_method', 'is_ext_action', 'is_ext_method', 'ExtAction', 'ExtMethod')
+
+
+class ExtRequest(object):
+       """
+       Represents a single Ext.Direct request along with the :class:`django.http.HttpRequest` it originates from.
+       
+       .. note::
+               
+               Passes undefined attribute accesses through to the underlying :class:`django.http.HttpRequest`.
+       
+       """
+       
+       @classmethod
+       def parse(cls, request, object_hook=None):
+               """
+               Parses Ext.Direct request(s) from the originating HTTP request.
+               
+               :arg request: the originating HTTP request
+               :type request: :class:`django.http.HttpRequest`
+               :returns: list of :class:`ExtRequest` instances
+               
+               """
+               
+               requests = []
+               
+               if request.META['CONTENT_TYPE'].startswith('application/x-www-form-urlencoded') or request.META['CONTENT_TYPE'].startswith('multipart/form-data'):
+                       requests.append(cls(request,
+                               type = request.POST.get('extType'),
+                               tid = request.POST.get('extTID'),
+                               action = request.POST.get('extAction'),
+                               method = request.POST.get('extMethod'),
+                               data = request.POST.get('extData', None),
+                               upload = True if request.POST.get('extUpload', False) in (True, 'true', 'True') else False,
+                               form_request = True,
+                       ))
+               else:
+                       decoded_requests = json.loads(request.raw_post_data, object_hook=object_hook)
+                       if type(decoded_requests) is dict:
+                               decoded_requests = [decoded_requests]
+                       for inner_request in decoded_requests:
+                               requests.append(cls(request,
+                                       type = inner_request.get('type'),
+                                       tid = inner_request.get('tid'),
+                                       action = inner_request.get('action'),
+                                       method = inner_request.get('method'),
+                                       data = inner_request.get('data', None),
+                               ))
+               
+               return requests
+       
+       def __init__(self, request, type, tid, action, method, data, upload=False, form_request=False):
+               """
+               :arg request: the originating HTTP request
+               :type request: :class:`django.http.HttpRequest`
+               :arg type: Ext.Direct request type
+               :type type: str
+               :arg tid: Ext.Direct transaction identifier
+               :type tid: str
+               :arg action: Ext.Direct action name
+               :type action: str
+               :arg method: Ext.Direct method name
+               :type method: str
+               :arg data: Ext.Direct method arguments
+               :type data: list
+               :arg upload: request includes uploaded file(s)
+               :type upload: bool
+               :arg form_request: request made by form submission
+               :type form_request: bool
+               
+               """
+               
+               self.type = type
+               self.tid = tid
+               self.request = request
+               self.action = action
+               self.method = method
+               self.data = data if data is not None else []
+               self.upload = upload
+               self.form_request = form_request
+       
+       def __getattr__(self, key):
+               try:
+                       return getattr(self.request, key)
+               except:
+                       raise AttributeError
+
+
+class ExtMethod(Callable, Sized):
+       """
+       Wraps a (previously :meth:`decorated <ExtMethod.decorate>`) function as an Ext.Direct method.
+       
+       """
+       
+       @classmethod
+       def decorate(cls, function=None, name=None, form_handler=False):
+               """
+               Applies metadata to function identifying it as wrappable, or returns a decorator for doing the same::
+               
+                       @ExtMethod.decorate
+                       def method(self, request):
+                               pass
+                       
+                       @ExtMethod.decorate(name='custom_name', form_handler=True)
+                       def form_handler_with_custom_name(self, request):
+                               pass
+               
+               Intended for use on methods of classes already decorated by :meth:`ExtAction.decorate`.
+               
+               :arg name: custom Ext.Direct method name
+               :type name: str
+               :arg form_handler: function handles form submissions
+               :type form_handler: bool
+               :returns: function with metadata applied
+               
+               """
+               
+               def setter(function):
+                       setattr(function, '_ext_method', True)
+                       setattr(function, '_ext_method_form_handler', form_handler)
+                       if name is not None:
+                               setattr(function, '_ext_method_name', name)
+                       return function
+               if function is not None:
+                       return setter(function)
+               return setter
+       
+       @classmethod
+       def validate(cls, function):
+               """
+               Validates that function has been :meth:`decorated <ExtMethod.decorate>` and is therefore wrappable.
+               
+               """
+               
+               return getattr(function, '_ext_method', False)
+       
+       def __init__(self, function):
+               """
+               :arg function: function to wrap
+               :type function: callable
+               
+               If the function accepts variable positional arguments, the Ext.Direct method argument count will be increased by one for acceptance of a list.
+               
+               Similarly, if the function accepts variable keyword arguments, the argument count will be increased by one for acceptance of a dictionary.
+               
+               .. warning::
+                       
+                       Wrapped functions **must** accept at least one positional argument (in addition to self if function is a method): the :class:`ExtRequest` that caused the invocation.
+               
+               .. warning::
+                       
+                       Wrapped functions identified as handling form submissions **must** return a tuple containing:
+                       
+                       * a boolean indicating success or failure
+                       * a dictionary of fields mapped to errors, if any, or None
+               
+               """
+               self.function = function
+               self.form_handler = getattr(function, '_ext_method_form_handler', False)
+               self.name = getattr(function, '_ext_method_name', function.__name__)
+               
+               argspec = getargspec(self.function)
+               len_ = len(argspec.args)
+               
+               if len_ >= 2 and ismethod(self.function):
+                       len_ -= 2
+               elif len_ >= 1 and not ismethod(self.function):
+                       len_ -= 1
+               else:
+                       raise TypeError('%s cannot be wrapped as an Ext.Direct method as it does not take an ExtRequest as its first positional argument')
+               
+               if argspec.varargs is not None:
+                       len_ += 1
+                       self.accepts_varargs = True
+               else:
+                       self.accepts_varargs = False
+               
+               if argspec.keywords is not None:
+                       len_ += 1
+                       self.accepts_keywords = True
+               else:
+                       self.accepts_keywords = False
+               
+               self.len = len_
+       
+       @property
+       def spec(self):
+               return {
+                       'name': self.name,
+                       'len': self.len,
+                       'formHandler': self.form_handler
+               }
+       
+       def __len__(self):
+               return self.len
+       
+       def __call__(self, request):
+               """
+               Invoke the wrapped function using the provided :class:`ExtRequest` and return the raw result.
+               
+               :arg request: the :class:`ExtRequest`
+               
+               :raises TypeError: the request did not provide the required number of arguments
+               :raises Exception: the (form handling) function did not return a valid result for a form submission request
+               
+               """
+               
+               args = request.data
+               args_len = len(args)
+               
+               if args_len != self.len:
+                       raise TypeError('%s takes exactly %i arguments (%i given)' % (self.name, self.len, args_len))
+               
+               keywords = {}
+               if self.accepts_keywords:
+                       keywords = dict([(smart_str(k, 'ascii'), v) for k,v in args.pop().items()])
+               
+               varargs = []
+               if self.accepts_varargs:
+                       varargs = args.pop()
+               
+               result = self.function(request, *(args + varargs), **keywords)
+               
+               if self.form_handler:
+                       try:
+                               new_result = {
+                                       'success': result[0],
+                                       'errors': result[1],
+                               }
+                               if len(result) > 2:
+                                       new_result['pk'] = result[2]
+                               
+                               if new_result['success']:
+                                       del new_result['errors']
+                               
+                               result = new_result
+                       except:
+                               raise Exception # pick a better one
+               
+               return result
+
+
+ext_method = ExtMethod.decorate
+"""
+Convenience alias for :meth:`ExtMethod.decorate`.
+
+"""
+
+
+is_ext_method = ExtMethod.validate
+"""
+Convenience alias for :meth:`ExtMethod.validate`.
+
+"""
+
+
+class ExtAction(Callable, Mapping):
+       """
+       Wraps a (previously :meth:`decorated <ExtAction.decorate>`) object as an Ext.Direct action.
+       
+       """
+       
+       method_class = ExtMethod
+       """
+       The :class:`ExtMethod` subclass used when wrapping the wrapped object's members.
+       
+       """
+       
+       @classmethod
+       def decorate(cls, obj=None, name=None):
+               """
+               Applies metadata to obj identifying it as wrappable, or returns a decorator for doing the same::
+               
+                       @ExtAction.decorate
+                       class MyAction(object):
+                               pass
+                       
+                       @ExtAction.decorate(name='GoodAction')
+                       class BadAction(object):
+                               pass
+               
+               Intended for use on classes with member functions (methods) already decorated with :meth:`ExtMethod.decorate`.
+               
+               :arg name: custom Ext.Direct action name
+               :type name: str
+               :returns: obj with metadata applied
+               
+               """
+               
+               def setter(obj):
+                       setattr(obj, '_ext_action', True)
+                       if name is not None:
+                               setattr(obj, '_ext_action_name', name)
+                       return obj
+               if obj is not None:
+                       return setter(obj)
+               return setter
+       
+       @classmethod
+       def validate(cls, obj):
+               """
+               Validates that obj has been :meth:`decorated <ExtAction.decorate>` and is therefore wrappable.
+               
+               """
+               
+               return getattr(obj, '_ext_action', False)
+       
+       def __init__(self, obj):
+               self.obj = obj
+               self.name = getattr(obj, '_ext_action_name', obj.__name__ if isclass(obj) else obj.__class__.__name__)
+               self._methods = None
+       
+       @property
+       def methods(self):
+               if not self._methods:
+                       self._methods = dict((method.name, method) for method in (self.method_class(member) for name, member in getmembers(self.obj, self.method_class.validate)))
+               return self._methods
+       
+       def __len__(self):
+               return len(self.methods)
+       
+       def __iter__(self):
+               return iter(self.methods)
+       
+       def __getitem__(self, name):
+               return self.methods[name]
+               
+       @property
+       def spec(self):
+               """
+               Returns a tuple containing:
+                       
+                       * the action name
+                       * a list of :class:`method specs <ExtMethod.spec>`
+               
+               Used internally by :class:`providers <ExtProvider>` to construct an Ext.Direct provider spec.
+               
+               """
+               
+               return self.name, list(method.spec for method in self.itervalues())
+       
+       def __call__(self, request):
+               return self[request.method](request)
+
+
+ext_action = ExtAction.decorate
+"""
+Convenience alias for :meth:`ExtAction.decorate`.
+
+"""
+
+
+is_ext_action = ExtAction.validate
+"""
+Convenience alias for :meth:`ExtAction.validate`.
+
+"""
+
+
+class ExtResponse(object):
+       """
+       Abstract base class for responses to :class:`requests <ExtRequest>`.
+       
+       """
+       __metaclass__ = ABCMeta
+       
+       @abstractproperty
+       def as_ext(self):
+               raise NotImplementedError
+
+
+class ExtResult(ExtResponse):
+       """
+       Represents a successful response to a :class:`request <ExtRequest>`.
+       
+       """
+       
+       def __init__(self, request, result):
+               """
+               :arg request: the originating Ext.Direct request
+               :type request: :class:`ExtRequest`
+               :arg result: the raw result
+               
+               """
+               self.request = request
+               self.result = result
+       
+       @property
+       def as_ext(self):
+               return {
+                       'type': self.request.type,
+                       'tid': self.request.tid,
+                       'action': self.request.action,
+                       'method': self.request.method,
+                       'result': self.result
+               }
+
+
+class ExtException(ExtResponse):
+       """
+       Represents an exception raised by an unsuccessful response to a :class:`request <ExtRequest>`.
+       
+       .. warning::
+               
+               If :data:`django.conf.settings.DEBUG` is True, information about which exception was raised and where it was raised (including a traceback in both plain text and HTML) will be provided to the client.
+       
+       """
+       
+       def __init__(self, request, exc_info):
+               """
+               
+               """
+               self.request = request
+               self.exc_info = exc_info
+       
+       @property
+       def as_ext(self):
+               from django.conf import settings
+               if settings.DEBUG:
+                       reporter = ExceptionReporter(self.request.request, *self.exc_info)
+                       return {
+                               'type': 'exception',
+                               'tid': self.request.tid,
+                               'message': '%s: %s' % (self.exc_info[0], self.exc_info[1]),
+                               'where': format_tb(self.exc_info[2])[0],
+                               'identifier': '%s.%s' % (self.exc_info[0].__module__, self.exc_info[0].__name__),
+                               'html': reporter.get_traceback_html()
+                       }
+               else:
+                       return {
+                               'type': 'exception',
+                               'tid': self.request.tid
+                       }
+
+
+class ExtProvider(Callable, Mapping):
+       """
+       Abstract base class for Ext.Direct provider implementations.
+       
+       """
+       
+       __metaclass__ = ABCMeta
+       
+       result_class = ExtResult
+       """
+       The :class:`ExtResponse` subclass used to represent the results of a successful Ext.Direct method invocation.
+       
+       """
+       
+       exception_class = ExtException
+       """
+       The :class:`ExtResponse` subclass used to represent the exception raised during an unsuccessful Ext.Direct method invocation.
+       
+       """
+       
+       @abstractproperty
+       def namespace(self):
+               """
+               The Ext.Direct provider namespace.
+               
+               """
+               raise NotImplementedError
+       
+       @abstractproperty
+       def url(self):
+               """
+               The Ext.Direct provider url.
+               
+               """
+               raise NotImplementedError
+       
+       @abstractproperty
+       def type(self):
+               """
+               The Ext.Direct provider type.
+               
+               """
+               raise NotImplementedError
+       
+       @abstractproperty
+       def actions(self):
+               """
+               The dictionary of action names and :class:`ExtAction` instances handled by the provider.
+               
+               """
+               raise NotImplementedError
+       
+       def __len__(self):
+               return len(self.actions)
+       
+       def __iter__(self):
+               return iter(self.actions)
+       
+       def __getitem__(self, name):
+               return self.actions[name]
+       
+       @property
+       def spec(self):
+               return {
+                       'namespace': self.namespace,
+                       'url': self.url,
+                       'type': self.type,
+                       'actions': dict(action.spec for action in self.itervalues())
+               }
+       
+       def __call__(self, request):
+               """
+               Returns a :class:`response <ExtResponse>` to the :class:`request <ExtRequest>`.
+               
+               """
+               try:
+                       return self.result_class(request=request, result=self[request.action](request))
+               except Exception:
+                       return self.exception_class(request=request, exc_info=sys.exc_info())
+
+
+class ExtRouter(ExtProvider):
+       """
+       A :class:`provider <ExtProvider>` base class with an implementation capable of handling the complete round-trip from a :class:`django.http.HttpRequest` to a :class:`django.http.HttpResponse`.
+       
+       """
+       
+       __metaclass__ = ABCMeta
+       
+       request_class = ExtRequest
+       """
+       The :class:`ExtRequest` subclass used parse and to represent the individual Ext.Direct requests within a :class:`django.http.HttpRequest`.
+       
+       """
+       
+       @classmethod
+       def json_object_hook(cls, obj):
+               if obj.get('q_object', False):
+                       return Q._new_instance(obj['children'], obj['connector'], obj['negated'])
+               return obj
+       
+       @classmethod
+       def json_default(cls, obj):
+               from django.forms.models import ModelChoiceIterator
+               from django.db.models.query import ValuesListQuerySet
+               from django.utils.functional import Promise
+               
+               if isinstance(obj, ExtResponse):
+                       return obj.as_ext
+               elif isinstance(obj, datetime.datetime):
+                       obj = obj.replace(microsecond=0)
+                       return obj.isoformat(' ')
+               elif isinstance(obj, ModelChoiceIterator) or isinstance(obj, ValuesListQuerySet):
+                       return list(obj)
+               elif isinstance(obj, Promise):
+                       return unicode(obj)
+               elif isinstance(obj, Q):
+                       return {
+                               'q_object': True,
+                               'connector': obj.connector,
+                               'negated': obj.negated,
+                               'children': obj.children
+                       }
+               else:
+                       raise TypeError, 'Object of type %s with value of %s is not JSON serializable' % (type(obj), repr(obj))
+       
+       def render_to_response(self, request):
+               """
+               Returns a :class:`django.http.HttpResponse` containing the :class:`response(s) <ExtResponse>` to the :class:`request(s) <ExtRequest>` in the provided :class:`django.http.HttpRequest`.
+               
+               """
+               
+               from django.conf import settings
+               
+               requests = self.request_class.parse(request, object_hook=self.json_object_hook)
+               responses = []
+               html_response = False
+               
+               for request in requests:
+                       if request.form_request and request.upload:
+                               html_response = True
+                       responses.append(self(request))
+               
+               response = responses[0] if len(responses) == 1 else responses
+               json_response = json.dumps(responses, default=self.json_default)
+               
+               if html_response:
+                       return HttpResponse('<html><body><textarea>%s</textarea></body></html>' % json_response)
+               return HttpResponse(json_response, content_type='application/json; charset=%s' % settings.DEFAULT_CHARSET)
+
+
+class SimpleExtRouter(ExtRouter):
+       """
+       A simple concrete :class:`router <ExtRouter>` implementation.
+       
+       """
+       
+       def __init__(self, namespace, url, actions=None, type='remoting'):
+               """
+               :arg namespace: the Ext.Direct provider namespace
+               :type namespace: str
+               :arg url: the Ext.Direct provider url
+               :type url: str
+               :arg actions: the dictionary of action names and :class:`ExtAction` instances handled by the provider
+               :type actions: dict
+               :arg type: the Ext.Direct provider type
+               :type type: str
+               
+               """
+               
+               self._type = type
+               self._namespace = namespace
+               self._url = url
+               self._actions = actions if actions is not None else {}
+       
+       @property
+       def namespace(self):
+               return self._namespace
+       
+       @property
+       def url(self):
+               return self._url
+       
+       @property
+       def type(self):
+               return self._type
+       
+       @property
+       def actions(self):
+               return self._actions
\ No newline at end of file
diff --git a/philo/contrib/gilbert/extdirect/forms.py b/philo/contrib/gilbert/extdirect/forms.py
new file mode 100644 (file)
index 0000000..ca757c3
--- /dev/null
@@ -0,0 +1,305 @@
+import os.path
+from django.forms.widgets import Widget, TextInput, PasswordInput, HiddenInput, MultipleHiddenInput, FileInput, Textarea, DateInput, DateTimeInput, TimeInput, CheckboxInput, Select, NullBooleanSelect, SelectMultiple, RadioSelect, CheckboxSelectMultiple, MultiWidget, SplitHiddenDateTimeWidget
+from django.forms.forms import BaseForm, BoundField
+from django.forms.fields import FileField
+from django.forms.models import ModelForm, ModelChoiceField, ModelMultipleChoiceField
+from django.db.models import ForeignKey, ManyToManyField, Q
+from django.utils.encoding import force_unicode
+from philo.utils import ContentTypeLimiter
+from philo.hacks import Category
+
+
+# The "categories" in this module are listed in reverse order, because I wasn't able to ensure that they'd all take effect otherwise...
+
+
+#still to do: SplitHiddenDateTimeWidget
+
+
+class MultiWidget(MultiWidget):
+       __metaclass__ = Category
+       
+       def render_extdirect(self, name, data):
+               if not isinstance(data, list):
+                       data = self.decompress(data)
+               
+               specs = []
+               for i, widget in enumerate(self.widgets):
+                       try:
+                               widget_data = data[i]
+                       except IndexError:
+                               widget_data = None
+                       specs.extend(widget.render_extdirect(name + '_%s' % i, widget_data))
+               return specs
+
+
+#still to do: RadioSelect, CheckboxSelectMultiple
+
+
+class SelectMultiple(SelectMultiple):
+       __metaclass__ = Category
+       extdirect_xtype = 'superboxselect'
+       
+       def render_extdirect(self, name, data):
+               if self.choices:
+                       store = [choice for choice in self.choices if choice[0]]
+               else:
+                       store = []
+               spec = {
+                       'name': name,
+                       'value': data,
+                       'store': store,
+                       'xtype': self.extdirect_xtype,
+                       'forceFormValue': False
+               }
+               if not spec['value']:
+                       del spec['value']
+               return [spec]
+
+
+class NullBooleanSelect(NullBooleanSelect):
+       __metaclass__ = Category
+       
+       def render_extdirect(self, name, data):
+               try:
+                       data = {True: u'2', False: u'3', u'2': u'2', u'3': u'3'}[data]
+               except KeyError:
+                       data = u'1'
+               return super(NullBooleanSelect, self).render_extdirect(name, data)
+
+
+class Select(Select):
+       __metaclass__ = Category
+       extdirect_xtype = 'combo'
+       
+       def render_extdirect(self, name, data):
+               if self.choices:
+                       store = [choice for choice in self.choices if choice[0]]
+               else:
+                       store = []
+               spec = {
+                       'hiddenName': name,
+                       'hiddenValue': data,
+                       'value': data,
+                       'xtype': self.extdirect_xtype,
+                       'store': store,
+                       'editable': False,
+                       'disableKeyFilter': True,
+                       'forceSelection': True,
+                       'triggerAction': 'all',
+               }
+               if not spec['value']:
+                       del spec['value']
+               return [spec]
+
+
+class CheckboxInput(CheckboxInput):
+       __metaclass__ = Category
+       extdirect_xtype = 'checkbox'
+       
+       def render_extdirect(self, name, data):
+               data = bool(data)
+               specs = super(CheckboxInput, self).render_extdirect(name, data)
+               specs[0]['checked'] = data
+               return specs
+
+
+class DateTimeInput(DateTimeInput):
+       __metaclass__ = Category
+       extdirect_xtype = 'gilbertdatetimefield'
+
+
+class TimeInput(TimeInput):
+       __metaclass__ = Category
+       extdirect_xtype = 'timefield'
+
+
+class DateInput(DateInput):
+       __metaclass__ = Category
+       extdirect_xtype = 'datefield'
+
+
+class Textarea(Textarea):
+       __metaclass__ = Category
+       extdirect_xtype = 'textarea'
+
+
+class FileInput(FileInput):
+       __metaclass__ = Category
+       extdirect_xtype = 'fileuploadfield'
+       
+       def render_extdirect(self, name, data):
+               if data is not None:
+                       data = os.path.split(data.name)[1]
+               return super(FileInput, self).render_extdirect(name, data)
+
+
+class MultipleHiddenInput(MultipleHiddenInput):
+       __metaclass__ = Category
+       extdirect_xtype = 'hidden'
+       
+       def render_extdirect(self, name, data):
+               if data is None:
+                       data = []
+               return [specs.extend(super(MultipleHiddenInput, self).render_extdirect(name, data)) for datum in data]
+
+
+class HiddenInput(HiddenInput):
+       __metaclass__ = Category
+       extdirect_xtype = 'hidden'
+
+
+class PasswordInput(PasswordInput):
+       __metaclass__ = Category
+       extdirect_xtype = 'textfield'
+       
+       def render_extdirect(self, name, data):
+               specs = super(PasswordInput, self).render_extdirect(name, data)
+               specs[0]['inputType'] = self.input_type
+               return specs
+
+
+class TextInput(TextInput):
+       __metaclass__ = Category
+       extdirect_xtype = 'textfield'
+
+
+class Widget(Widget):
+       __metaclass__ = Category
+       extdirect_xtype = None
+       
+       def render_extdirect(self, name, data):
+               if not self.extdirect_xtype:
+                       raise NotImplementedError
+               spec = {
+                       'name': name,
+                       'value': data,
+                       'xtype': self.extdirect_xtype
+               }
+               if not spec['value']:
+                       del spec['value']
+               return [spec]
+
+
+class BoundField(BoundField):
+       __metaclass__ = Category
+       
+       def as_hidden_extdirect(self, only_initial=False):
+               return self.as_widget_extdirect(self.field.hidden_widget(), only_initial)
+       
+       def as_widget_extdirect(self, widget=None, only_initial=False):
+               if not widget:
+                       widget = self.field.widget
+                       standard_widget = True
+               else:
+                       standard_widget = False
+               
+               if not self.form.is_bound:
+                       data = self.form.initial.get(self.name, self.field.initial)
+                       if callable(data):
+                               data = data()
+               else:
+                       if isinstance(self.field, FileField) and self.data is None:
+                               data = self.form.initial.get(self.name, self.field.initial)
+                       else:
+                               data = self.data
+               data = self.field.prepare_value(data)
+               
+               if not only_initial:
+                       name = self.html_name
+               else:
+                       name = self.html_initial_name
+               
+               specs = widget.render_extdirect(name, data)
+               
+               if standard_widget and isinstance(self.field, ModelChoiceField):
+                       limit_choices_to = None
+                       
+                       if isinstance(self.form, ModelForm):
+                               model = self.form._meta.model
+                               model_fields = model._meta.fields + model._meta.many_to_many
+                               
+                               for model_field in model_fields:
+                                       if model_field.name == self.name and (isinstance(model_field, ForeignKey) or isinstance(model_field, ManyToManyField)):
+                                               limit_choices_to = model_field.rel.limit_choices_to
+                                               if limit_choices_to is None:
+                                                       limit_choices_to = {}
+                                               elif isinstance(limit_choices_to, ContentTypeLimiter):
+                                                       limit_choices_to = limit_choices_to.q_object()
+                                               elif not isinstance(limit_choices_to, dict):
+                                                       limit_choices_to = None # can't support other objects with add_to_query methods
+                                               break
+                       
+                       if limit_choices_to is not None:
+                               specs[0]['model_filters'] = limit_choices_to
+                       else:
+                               specs[0]['model_filters'] = {
+                                       'pk__in': self.field.queryset.values_list('pk', flat=True)
+                               }
+                               
+                       specs[0]['model_app_label'] = self.field.queryset.model._meta.app_label
+                       specs[0]['model_name'] = self.field.queryset.model._meta.object_name
+                       
+                       if isinstance(self.field, ModelMultipleChoiceField):
+                               specs[0]['xtype'] = 'gilbertmodelmultiplechoicefield'
+                       else:
+                               specs[0]['xtype'] = 'gilbertmodelchoicefield'
+                               specs[0]['backup_store'] = specs[0]['store']
+                               del specs[0]['store']
+               
+               return specs
+                       
+       def as_extdirect(self):
+               if self.field.show_hidden_initial:
+                       return self.as_widget_extdirect() + self.as_hidden_extdirect(only_initial=True)
+               return self.as_widget_extdirect()
+
+
+class BaseForm(BaseForm):
+       __metaclass__ = Category
+       
+       def as_extdirect(self):
+               fields = []
+               
+               for bound_field in self:
+                       if bound_field.label:
+                               label = bound_field.label
+                       else:
+                               label = ''
+                       
+                       if bound_field.field.help_text:
+                               help_text = bound_field.field.help_text
+                       else:
+                               help_text = ''
+                       
+                       specs = bound_field.as_extdirect()
+                       
+                       if len(specs) < 1:
+                               continue
+                       
+                       if len(specs) > 1:
+                               specs = [{
+                                       'xtype': 'compositefield',
+                                       'items': specs
+                               }]
+                       
+                       if label:
+                               specs[0]['fieldLabel'] = label
+                       if help_text:
+                               specs[0]['help_text'] = help_text
+                       
+                       fields.extend(specs)
+               
+               if isinstance(self, ModelForm):
+                       pk = self.instance.pk
+                       if pk is not None:
+                               fields.append({
+                                       'name': 'pk',
+                                       'value': pk,
+                                       'xtype': 'hidden'
+                               })
+               
+               return {
+                       'items': fields,
+                       'labelSeparator': self.label_suffix,
+                       'fileUpload': self.is_multipart()
+               }
\ No newline at end of file
diff --git a/philo/contrib/gilbert/gilbert.py b/philo/contrib/gilbert/gilbert.py
new file mode 100644 (file)
index 0000000..b7f8253
--- /dev/null
@@ -0,0 +1,6 @@
+from . import site
+from django.contrib.auth.models import User, Group
+
+
+site.register_model(User, icon_name='user')
+site.register_model(Group, icon_name='users')
\ No newline at end of file
diff --git a/philo/contrib/gilbert/models.py b/philo/contrib/gilbert/models.py
new file mode 100644 (file)
index 0000000..08ed4f5
--- /dev/null
@@ -0,0 +1,8 @@
+from django.db import models
+from django.contrib.auth.models import User
+from philo.models.fields import JSONField
+
+
+class UserPreferences(models.Model):
+       user = models.OneToOneField(User, related_name='gilbert_userpreferences')
+       preferences = JSONField(default=dict())
\ No newline at end of file
diff --git a/philo/contrib/gilbert/plugins/__init__.py b/philo/contrib/gilbert/plugins/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/philo/contrib/gilbert/plugins/auth.py b/philo/contrib/gilbert/plugins/auth.py
new file mode 100644 (file)
index 0000000..d0c514b
--- /dev/null
@@ -0,0 +1,72 @@
+from django.conf import settings
+from django.contrib.auth import logout
+from django.contrib.auth.forms import PasswordChangeForm
+from .base import Plugin
+from ..extdirect import ext_action, ext_method
+from ..models import UserPreferences
+
+
+@ext_action(name='auth')
+class Auth(Plugin):
+       @property
+       def index_js_urls(self):
+               return super(Auth, self).index_js_urls + [
+                       settings.STATIC_URL + 'gilbert/plugins/auth.js',
+               ]
+       
+       @property
+       def icon_names(self):
+               return super(Auth, self).icon_names + [
+                       'user-silhouette',
+                       'mask',
+                       'key--pencil',
+                       'door-open-out',
+               ]
+       
+       @ext_method
+       def whoami(self, request):
+               user = request.user
+               return user.get_full_name() or user.username
+       
+       @ext_method
+       def logout(self, request):
+               logout(request)
+               return True
+       
+       @ext_method
+       def get_passwd_form(self, request):
+               return PasswordChangeForm(request.user).as_extdirect()
+       
+       @ext_method(form_handler=True)
+       def save_passwd_form(self, request):
+               form = PasswordChangeForm(request.user, data=request.POST)
+               if form.is_valid():
+                       form.save()
+                       return True, None
+               else:
+                       return False, form.errors
+       
+       @ext_method
+       def get_preferences(self, request):
+               user_preferences, created = UserPreferences.objects.get_or_create(user=request.user)
+               
+               return user_preferences.preferences
+       
+       @ext_method
+       def set_preferences(self, request, preferences):
+               user_preferences, created = UserPreferences.objects.get_or_create(user=request.user)
+               user_preferences.preferences = preferences
+               
+               user_preferences.save()
+               return True
+       
+       @ext_method
+       def get_preference(self, request, key):
+               preferences = self.get_preferences(request)
+               return preferences.get(key, None)
+       
+       @ext_method
+       def set_preference(self, request, key, value):
+               preferences = self.get_preferences(request)
+               preferences[key] = value
+               return self.set_preferences(request, preferences)
\ No newline at end of file
diff --git a/philo/contrib/gilbert/plugins/base.py b/philo/contrib/gilbert/plugins/base.py
new file mode 100644 (file)
index 0000000..2be851b
--- /dev/null
@@ -0,0 +1,23 @@
+from ..extdirect import ext_action
+
+
+@ext_action
+class Plugin(object):
+       def __init__(self, site):
+               self.site = site
+       
+       @property
+       def index_css_urls(self):
+               return []
+       
+       @property
+       def index_js_urls(self):
+               return []
+       
+       @property
+       def index_extrahead(self):
+               return ''
+       
+       @property
+       def icon_names(self):
+               return []
\ No newline at end of file
diff --git a/philo/contrib/gilbert/plugins/models.py b/philo/contrib/gilbert/plugins/models.py
new file mode 100644 (file)
index 0000000..ee13989
--- /dev/null
@@ -0,0 +1,386 @@
+from django.conf import settings
+from django.contrib.admin.util import lookup_field, label_for_field, display_for_field, NestedObjects
+from django.core.exceptions import PermissionDenied
+from django.db import router
+from django.db.models import Q
+from django.db.models.fields.related import ManyToOneRel
+from django.db.models.fields.files import FieldFile, ImageFieldFile, FileField
+from django.forms.models import ModelForm, modelform_factory
+from django.template.defaultfilters import capfirst
+from django.utils import simplejson as json
+from django.utils.encoding import smart_unicode
+from .base import Plugin
+from ..extdirect import ext_action, ext_method
+import operator
+
+
+@ext_action(name='models')
+class Models(Plugin):
+       """
+       Plugin providing model-related UI and functionality on the client
+       side.
+       
+       """
+       
+       @property
+       def index_js_urls(self):
+               return super(Models, self).index_js_urls + [
+                       settings.STATIC_URL + 'gilbert/extjs/examples/ux/SearchField.js',
+                       settings.STATIC_URL + 'gilbert/plugins/models.js',
+               ]
+       
+       @property
+       def icon_names(self):
+               return super(Models, self).icon_names + [
+                       'databases',
+                       'database',
+                       'plus',
+                       'minus',
+                       'gear',
+                       'pencil',
+                       'database-import',
+                       'block',
+               ]
+
+
+@ext_action
+class ModelAdmin(Plugin):
+       """
+       Default ModelAdmin class used by Sites to expose a model-centric API
+       on the client side.
+       
+       """
+       
+       form = ModelForm
+       icon_name = 'block'
+       search_fields = ()
+       data_columns = ('__unicode__',)
+       data_editable_columns = ()
+       
+       def __init__(self, site, model):
+               super(ModelAdmin, self).__init__(site)
+               self.model = model
+               self.model_meta = model._meta
+       
+       @classmethod
+       def data_serialize_model_instance(cls, obj):
+               return {
+                       'app_label': obj._meta.app_label,
+                       'name': obj._meta.module_name,
+                       'pk': obj.pk,
+                       '__unicode__': unicode(obj),
+               }
+       
+       @classmethod
+       def data_serialize_field_value(cls, field, value):
+               if field is None:
+                       #return smart_unicode(value)
+                       return value
+               if isinstance(field.rel, ManyToOneRel):
+                       if value is not None:
+                               return cls.data_serialize_model_instance(value)
+               elif isinstance(value, FieldFile):
+                       new_value = {
+                               'path': value.path,
+                               'url': value.url,
+                               'size': value.size,
+                       }
+                       if isinstance(value, ImageFieldFile):
+                               new_value.update({
+                                       'width': value.width,
+                                       'height': value.height,
+                               })
+               else:
+                       return value
+       
+       @property
+       def sortable_fields(self):
+               return [field.name for field in self.model_meta.fields]
+       
+       @property
+       def data_fields(self):
+               fields = ['pk', '__unicode__']
+               fields.extend(self.data_columns)
+               fields.extend(field.name for field in self.model_meta.fields)
+               return tuple(set(fields))
+       
+       @property
+       def data_fields_spec(self):
+               spec = []
+               for field_name in self.data_fields:
+                       field_spec = {
+                               'name': field_name,
+                       }
+                       if field_name in [field.name for field in self.model_meta.fields if isinstance(field.rel, ManyToOneRel)]:
+                               field_spec['type'] = 'gilbertmodelforeignkey'
+                       elif field_name in [field.name for field in self.model_meta.fields if isinstance(field, FileField)]:
+                               field_spec['type'] = 'gilbertmodelfilefield'
+                       spec.append(field_spec)
+               return spec
+       
+       @property
+       def data_columns_spec(self):
+               spec = []
+               
+               for field_name in self.data_columns:
+                       column = {
+                               'dataIndex': field_name,
+                               'sortable': False,
+                               'editable': False,
+                       }
+                       header, attr = label_for_field(field_name, self.model, model_admin=self, return_attr=True)
+                       column['header'] = capfirst(header)
+                       if (field_name in self.sortable_fields) or (getattr(attr, 'admin_order_field', None) in self.sortable_fields):
+                               column['sortable'] = True
+                       if field_name in self.data_editable_columns:
+                               column['editable'] = True
+                       if field_name in [field.name for field in self.model_meta.fields if isinstance(field.rel, ManyToOneRel)]:
+                               column['xtype'] = 'foreignkeycolumn'
+                       spec.append(column)
+               return spec
+       
+       @property
+       def data_columns_spec_json(self):
+               return json.dumps(self.data_columns_spec)
+       
+       @property
+       def icon_names(self):
+               return super(ModelAdmin, self).icon_names + [
+                       self.icon_name
+               ]
+       
+       @ext_method
+       def has_permission(self, request):
+               return self.has_read_permission(request) or self.has_add_permission(request)
+       
+       @ext_method
+       def has_read_permission(self, request):
+               return self.has_change_permission(request)
+       
+       @ext_method
+       def has_add_permission(self, request):
+               return request.user.has_perm(self.model_meta.app_label + '.' + self.model_meta.get_add_permission())
+       
+       @ext_method
+       def has_change_permission(self, request):
+               return request.user.has_perm(self.model_meta.app_label + '.' + self.model_meta.get_change_permission())
+       
+       @ext_method
+       def has_delete_permission(self, request):
+               return request.user.has_perm(self.model_meta.app_label + '.' + self.model_meta.get_delete_permission())
+       
+       @ext_method
+       def all(self, request):
+               if not self.has_read_permission(request):
+                       raise PermissionDenied
+               return self.model._default_manager.all()
+       
+       def queryset(self, request):
+               return self.model._default_manager.get_query_set()
+       
+       @ext_method
+       def filter(self, request, **kwargs):
+               if not self.has_read_permission(request):
+                       raise PermissionDenied
+               return self.queryset(request).filter(**kwargs)
+       
+       @ext_method
+       def get(self, request, **kwargs):
+               if not self.has_read_permission(request):
+                       raise PermissionDenied
+               return self.queryset(request).values().get(**kwargs)
+       
+       @property
+       def form_class(self):
+               return modelform_factory(self.model, form=self.form)
+       
+       @ext_method
+       def get_form(self, request, **kwargs):
+               if len(kwargs) > 0:
+                       instance = self.model._default_manager.all().get(**kwargs)
+               else:
+                       if not self.has_add_permission(request):
+                               raise PermissionDenied
+                       instance = None
+               
+               if (instance and not self.has_change_permission(request)) or not self.has_add_permission(request):
+                       raise PermissionDenied
+               
+               return self.form_class(instance=instance).as_extdirect()
+       
+       @ext_method(form_handler=True)
+       def save_form(self, request):
+               if 'pk' in request.POST:
+                       try:
+                               instance = self.model._default_manager.all().get(pk=request.POST['pk'])
+                       except ObjectDoesNotExist:
+                               instance = None
+               else:
+                       instance = None
+               
+               if (instance and not self.has_change_permission(request)) or not self.has_add_permission(request):
+                       raise PermissionDenied
+               
+               form = self.form_class(request.POST, request.FILES, instance=instance)
+               
+               if form.is_valid():
+                       saved = form.save()
+                       return True, None, saved.pk
+               else:
+                       return False, form.errors
+       
+       def data_serialize_object(self, obj):
+               row = {}
+               for field_name in self.data_fields:
+                       result = None
+                       try:
+                               field, attr, value = lookup_field(field_name, obj, self)
+                       except (AttributeError, ObjectDoesNotExist):
+                               pass
+                       else:
+                               result = self.data_serialize_field_value(field, value)
+                       row[field_name] = result
+               return row
+       
+       @property
+       def data_metadata(self):
+               return {
+                       'idProperty': 'pk',
+                       'root': 'root',
+                       'totalProperty': 'total',
+                       'successProperty': 'success',
+                       'fields': self.data_fields_spec,
+               }
+       
+       def data_serialize_queryset(self, queryset, params=None):
+               serialized = {
+                       'metaData': self.data_metadata,
+                       'root': [],
+                       'total': queryset.count(),
+                       'success': True,
+               }
+               
+               if params is not None:
+                       if 'sort' in params:
+                               order_by = params['sort']
+                               if order_by in self.data_fields:
+                                       if order_by not in self.sortable_fields:
+                                               try:
+                                                       if hasattr(self, order_by):
+                                                               attr = getattr(self, order_by)
+                                                       else:
+                                                               attr = getattr(self.model, order_by)
+                                                       order_by = attr.admin_order_field
+                                               except AttributeError:
+                                                       order_by = None
+                                       if order_by is not None:
+                                               if params.get('dir', 'ASC') == 'DESC':
+                                                       order_by = '-' + order_by
+                                               serialized['metaData']['sortInfo'] = {
+                                                       'field': params['sort'],
+                                                       'direction': params.get('dir', 'ASC'),
+                                               }
+                                               queryset = queryset.order_by(order_by)
+                       if 'start' in params:
+                               start = params['start']
+                               serialized['metaData']['start'] = start
+                               if 'limit' in params:
+                                       limit = params['limit']
+                                       serialized['metaData']['limit'] = limit
+                                       queryset = queryset[start:(start+limit)]
+                               else:
+                                       queryset = queryset[start:]
+               
+               for obj in queryset:
+                       serialized['root'].append(self.data_serialize_object(obj))
+               
+               return serialized
+       
+       @ext_method
+       def data_read(self, request, **params):
+               if not self.has_read_permission(request):
+                       raise PermissionDenied
+               
+               queryset = self.model._default_manager.all()
+               query = params.pop('query', None)
+               filters = params.pop('filters', None)
+               
+               if filters:
+                       if isinstance(filters, Q):
+                               queryset = queryset.filter(filters)
+                       elif isinstance(filters, dict):
+                               queryset = queryset.filter(**filters)
+                       else:
+                               raise TypeError('Invalid filters parameter')
+               
+               def construct_search(field_name):
+                       if field_name.startswith('^'):
+                               return "%s__istartswith" % field_name[1:]
+                       elif field_name.startswith('='):
+                               return "%s__iexact" % field_name[1:]
+                       elif field_name.startswith('@'):
+                               return "%s__search" % field_name[1:]
+                       else:
+                               return "%s__icontains" % field_name
+               
+               if self.search_fields and query:
+                       for word in query.split():
+                               or_queries = [Q(**{construct_search(str(field_name)): word}) for field_name in self.search_fields]
+                               queryset = queryset.filter(reduce(operator.or_, or_queries))
+                       for field_name in self.search_fields:
+                               if '__' in field_name:
+                                       queryset = queryset.distinct()
+                                       break
+               
+               return self.data_serialize_queryset(queryset, params)
+       
+       @ext_method
+       def data_create(self, request, **kwargs):
+               if not self.has_add_permission(request):
+                       raise PermissionDenied
+               
+               return kwargs
+       
+       @ext_method
+       def data_update(self, request, **kwargs):
+               if not self.has_change_permission(request):
+                       raise PermissionDenied
+               
+               return kwargs
+       
+       @ext_method
+       def data_destroy(self, request, **params):
+               if not self.has_delete_permission(request):
+                       raise PermissionDenied
+               
+               pks = params['root']
+               
+               if type(pks) is not list:
+                       pks = [pks]
+               
+               for pk in pks:
+                       if type(pk) is dict:
+                               pk = pk['pk']
+                       obj = self.model._default_manager.all().get(pk=pk)
+                       obj.delete()
+               
+               return {
+                       'metaData': self.data_metadata,
+                       'success': True,
+                       'root': list(),
+               }
+       
+       @ext_method
+       def data_destroy_consequences(self, request, pks):
+               if not self.has_delete_permission(request):
+                       raise PermissionDenied
+               
+               if type(pks) is not list:
+                       pks = [pks]
+               objs = [self.model._default_manager.all().get(pk=pk) for pk in pks]
+               
+               using = router.db_for_write(self.model)
+               collector = NestedObjects(using=using)
+               collector.collect(objs)
+               
+               return collector.nested(self.data_serialize_model_instance)
\ No newline at end of file
diff --git a/philo/contrib/gilbert/sites.py b/philo/contrib/gilbert/sites.py
new file mode 100644 (file)
index 0000000..3d07a84
--- /dev/null
@@ -0,0 +1,238 @@
+from django.conf import settings
+from django.contrib.auth import authenticate, login
+from django.core.context_processors import csrf
+from django.conf.urls.defaults import url, patterns, include
+from django.core.urlresolvers import reverse
+from django.db.models.base import ModelBase
+from django.forms.models import model_to_dict
+from django.http import HttpResponse, HttpResponseRedirect
+from django.shortcuts import render_to_response
+from django.template import RequestContext
+from django.utils import simplejson as json
+from django.utils.datastructures import SortedDict
+from django.views.decorators.cache import never_cache
+from philo.utils import fattr
+from . import __version__ as gilbert_version
+from .exceptions import AlreadyRegistered, NotRegistered
+from .extdirect import ExtAction, ExtRouter
+from .plugins.auth import Auth
+from .plugins.models import Models, ModelAdmin
+from inspect import getargspec
+from functools import partial, update_wrapper
+import sys, os, datetime
+
+
+
+__all__ = ('GilbertSite', 'site')
+
+
+class CoreRouter(ExtRouter):
+       def __init__(self, site):
+               self.site = site
+               self._actions = {}
+       
+       @property
+       def namespace(self):
+               return 'Gilbert.api.plugins'
+       
+       @property
+       def url(self):
+               return reverse('%s:router' % self.site.namespace, current_app=self.site.app_name)
+       
+       @property
+       def type(self):
+               return 'remoting'
+       
+       @property
+       def actions(self):
+               return self._actions
+       
+       @property
+       def plugins(self):
+               return list(action.obj for action in self._actions.itervalues())
+       
+       def register_plugin(self, plugin):
+               action = ExtAction(plugin)
+               self._actions[action.name] = action
+
+
+class ModelRouter(ExtRouter):
+       def __init__(self, site, app_label):
+               self.site = site
+               self.app_label = app_label
+               self._actions = {}
+       
+       @property
+       def namespace(self):
+               return 'Gilbert.api.models.%s' % self.app_label
+       
+       @property
+       def url(self):
+               return reverse('%s:model_router' % self.site.namespace, current_app=self.site.app_name, kwargs={'app_label': self.app_label})
+       
+       @property
+       def type(self):
+               return 'remoting'
+       
+       @property
+       def actions(self):
+               return self._actions
+       
+       @property
+       def models(self):
+               return dict((name, action.obj) for name, action in self._actions.iteritems())
+       
+       def register_admin(self, name, admin):
+               action = ExtAction(admin)
+               action.name = name
+               self._actions[action.name] = action
+
+
+class GilbertSite(object):
+       version = gilbert_version
+       
+       def __init__(self, namespace='gilbert', app_name='gilbert', title=None):
+               self.namespace = namespace
+               self.app_name = app_name
+               if title is None:
+                       self.title = getattr(settings, 'GILBERT_TITLE', 'Gilbert')
+               else:
+                       self.title = title
+               
+               self.core_router = CoreRouter(self)
+               self.model_routers = SortedDict()
+               
+               self.register_plugin(Models)
+               self.register_plugin(Auth)
+       
+       def register_plugin(self, plugin):
+               self.core_router.register_plugin(plugin(self))
+       
+       def register_model(self, model_or_iterable, admin_class=ModelAdmin, **admin_attrs):
+               if isinstance(model_or_iterable, ModelBase):
+                       model_or_iterable = [model_or_iterable]
+               for model in model_or_iterable:
+                       app_label = model._meta.app_label
+                       name = model._meta.object_name
+                       
+                       if app_label not in self.model_routers:
+                               self.model_routers[app_label] = ModelRouter(self, app_label)
+                       router = self.model_routers[app_label]
+                       
+                       if admin_attrs:
+                               admin_attrs['__module__'] = __name__
+                               admin_class = type('%sAdmin' % model.__name__, (admin_class,), admin_attrs)
+                       
+                       router.register_admin(name, admin_class(self, model))
+       
+       def has_permission(self, request):
+               return request.user.is_active and request.user.is_staff
+       
+       def protected_view(self, view, login_page=True, cacheable=False):
+               def inner(request, *args, **kwargs):
+                       if not self.has_permission(request):
+                               if login_page:
+                                       return self.login(request)
+                               else:
+                                       return HttpResponse(status=403)
+                       return view(request, *args, **kwargs)
+               if not cacheable:
+                       inner = never_cache(inner)
+               return update_wrapper(inner, view)
+       
+       @property
+       def urls(self):
+               urlpatterns = patterns('',
+                       url(r'^$', self.protected_view(self.index), name='index'),
+                       url(r'^api.js$', self.protected_view(self.api, login_page=False), name='api'),
+                       url(r'^icons.css$', self.protected_view(self.icons, login_page=False), name='icons'),
+                       url(r'^router$', self.protected_view(self.router, login_page=False), name='router'),
+                       url(r'^router/models/(?P<app_label>\w+)$', self.protected_view(self.router, login_page=False), name='model_router'),
+               )
+               return (urlpatterns, self.app_name, self.namespace)
+       
+       def login(self, request):
+               context = {
+                       'gilbert': self,
+                       'form_url': request.get_full_path(),
+               }
+               context.update(csrf(request))
+               
+               if request.POST:
+                       if request.session.test_cookie_worked():
+                               request.session.delete_test_cookie()
+                               username = request.POST.get('username', None)
+                               password = request.POST.get('password', None)
+                               user = authenticate(username=username, password=password)
+                               if user is not None:
+                                       if user.is_active and user.is_staff:
+                                               login(request, user)
+                                               return HttpResponseRedirect(request.get_full_path())
+                                       else:
+                                               context.update({
+                                                       'error_message_short': 'Not staff',
+                                                       'error_message': 'You do not have access to this page.',
+                                               })
+                               else:
+                                       context.update({
+                                               'error_message_short': 'Invalid credentials',
+                                               'error_message': 'Unable to authenticate using the provided credentials. Please try again.',
+                                       })
+                       else:
+                               context.update({
+                                       'error_message_short': 'Cookies disabled',
+                                       'error_message': 'Please enable cookies, reload this page, and try logging in again.',
+                               })
+               
+               request.session.set_test_cookie()
+               return render_to_response('gilbert/login.html', context, context_instance=RequestContext(request))
+       
+       def index(self, request):
+               return render_to_response('gilbert/index.html', {
+                       'gilbert': self,
+                       'plugins': self.core_router.plugins # needed as the template language will not traverse callables
+               }, context_instance=RequestContext(request))
+       
+       def api(self, request):
+               providers = []
+               model_registry = {}
+               
+               for app_label, router in self.model_routers.items():
+                       if request.user.has_module_perms(app_label):
+                               providers.append(router.spec)
+                               model_registry[app_label] = dict((model_name, admin) for model_name, admin in router.models.items() if admin.has_permission(request))
+               
+               providers.append(self.core_router.spec)
+               
+               context = {
+                       'gilbert': self,
+                       'providers': [json.dumps(provider, separators=(',', ':')) for provider in providers],
+                       'model_registry': model_registry,
+               }
+               context.update(csrf(request))
+               
+               return render_to_response('gilbert/api.js', context, mimetype='text/javascript')
+       
+       def icons(self, request):
+               icon_names = []
+               
+               for plugin in self.core_router.plugins:
+                       icon_names.extend(plugin.icon_names)
+               
+               for router in self.model_routers.values():
+                       for admin in router.models.values():
+                               icon_names.extend(admin.icon_names)
+               
+               return render_to_response('gilbert/icons.css', {
+                       'icon_names': set(icon_names),
+                       'STATIC_URL': settings.STATIC_URL
+               }, mimetype='text/css')
+       
+       def router(self, request, app_label=None, extra_context=None):
+               if app_label is None:
+                       return self.core_router.render_to_response(request)
+               else:
+                       return self.model_routers[app_label].render_to_response(request)
+
+
+site = GilbertSite()
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/extjs b/philo/contrib/gilbert/static/gilbert/extjs
new file mode 160000 (submodule)
index 0000000..3789b52
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit 3789b528d8dd8aad4558e38e22d775bcab1cbd36
diff --git a/philo/contrib/gilbert/static/gilbert/fugue-icons b/philo/contrib/gilbert/static/gilbert/fugue-icons
new file mode 160000 (submodule)
index 0000000..764abbe
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit 764abbef432ef8a7333a58ca21b0ef6ef0a80b1a
diff --git a/philo/contrib/gilbert/static/gilbert/gilbert.js b/philo/contrib/gilbert/static/gilbert/gilbert.js
new file mode 100644 (file)
index 0000000..663776c
--- /dev/null
@@ -0,0 +1,10 @@
+Ext.override(String, {
+       
+       capfirst: function () {
+               return this.substr(0, 1).toUpperCase() + this.substr(1);
+       },
+       
+});
+
+
+Gilbert = new Gilbert.lib.app.Application(Gilbert);
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/lib/app.js b/philo/contrib/gilbert/static/gilbert/lib/app.js
new file mode 100644 (file)
index 0000000..b21455d
--- /dev/null
@@ -0,0 +1,353 @@
+Ext.ns('Gilbert.lib.app')
+
+
+Gilbert.lib.app.Desktop = Ext.extend(Ext.Panel, {
+       
+       constructor: function(application, config) {
+               var application = this.application = application;
+               Gilbert.lib.app.Desktop.superclass.constructor.call(this, Ext.applyIf(config||{}, {
+                       region: 'center',
+                       border: false,
+                       padding: '5px',
+                       bodyStyle: 'background: none;',
+               }));
+       },
+       
+});
+
+
+Gilbert.lib.app.MainMenu = Ext.extend(Ext.Toolbar, {
+       
+       constructor: function(application, config) {
+               var application = this.application = application;
+               Gilbert.lib.app.MainMenu.superclass.constructor.call(this, Ext.applyIf(config||{}, {
+                       region: 'north',
+                       autoHeight: true,
+                       items: [
+                               {
+                                       xtype: 'tbtext',
+                                       text: '<span style="font-weight: bolder; text-transform: uppercase;">Gilbert</span>',
+                               },
+                               {
+                                       xtype: 'tbseparator',
+                               },
+                       ],
+               }));
+       },
+       
+});
+
+
+Gilbert.lib.app.TaskBar = Ext.extend(Ext.Toolbar, {
+       
+       constructor: function(application, config) {
+               var application = this.application = application;
+               Gilbert.lib.app.TaskBar.superclass.constructor.call(this, Ext.applyIf(config||{}, {
+                       region: 'south',
+                       enableOverflow: true,
+                       autoHeight: true,
+                       items: [],
+                       plugins: [
+                               new Ext.ux.ToolbarReorderer({
+                                       defaultReorderable: true,
+                               }),
+                       ],
+               }));
+       },
+       
+       get_button_for_window: function(win) {
+               return this.find('represented_window', win)[0];
+       },
+       
+       default_button_handler: function(button) {
+               var win = button.represented_window;
+               if (this.active_window === win) {
+                       win.minimize();
+               } else {
+                       win.show();
+               }
+       },
+       
+       register_window: function(win) {
+               win.on('show', this.window_shown, this);
+               win.on('hide', this.window_hidden, this);
+               win.on('minimize', this.window_minimize, this);
+               win.on('deactivate', this.window_deactivated, this);
+               win.on('activate', this.window_activated, this);
+               win.on('titlechange', this.window_titlechanged, this);
+               win.on('iconchange', this.window_iconchanged, this);
+               
+               var button = new Ext.Button({
+                       text: win.title,
+                       iconCls: win.iconCls,
+                       enableToggle: true,
+                       allowDepress: false,
+                       width: 200,
+                       hidden: true,
+               });
+               button.represented_window = win;
+               button.setHandler(this.default_button_handler, this);
+               
+               this.add(button);
+               
+               win.on('destroy', this.window_destroyed, this);
+       },
+       
+       window_destroyed: function(win) {
+               this.remove(this.get_button_for_window(win));
+               this.application.do_layout();
+       },
+       
+       window_shown: function(win) {
+               if (this.minimizing_window !== win) {
+                       this.get_button_for_window(win).show();
+                       this.application.do_layout();
+               }
+       },
+       
+       window_hidden: function(win) {
+               if (this.minimizing_window !== win) {
+                       this.get_button_for_window(win).hide();
+                       this.application.do_layout();
+               }
+       },
+       
+       window_minimize: function(win) {
+               var button = this.get_button_for_window(win);
+               
+               this.minimizing_window = win;
+               win.hide(button.el, function () {
+                       this.minimizing_window = undefined;
+                       
+                       win.minimized = true;
+                       button.setText('<i>'+win.title+'</i>');
+                       button.setHandler(function (button) {
+                               var win = button.represented_window;
+                               
+                               win.minimized = false;
+                               button.setText(win.title);
+                               button.setHandler(this.default_button_handler, this);
+                               
+                               this.minimizing_window = win;
+                               win.show(button.el, function () {
+                                       this.minimizing_window = undefined;
+                               }, this);
+                       }, this);
+               }, this);
+       },
+       
+       window_deactivated: function(win) {
+               var button = this.get_button_for_window(win);
+               button.toggle(false);
+               button.setText(win.title);
+               
+               if (this.active_window === win) {
+                       this.active_window = undefined;
+               }
+       },
+       
+       window_activated: function(win) {
+               var button = this.get_button_for_window(win);
+               button.toggle(true);
+               button.setText('<b>'+win.title+'</b>');
+               
+               this.active_window = win;
+       },
+       
+       window_titlechanged: function(win) {
+               var button = this.get_button_for_window(win);
+               if (win.minimized) {
+                       button.setText('<i>'+win.title+'</i>');
+               } else {
+                       button.setText(win.title);
+               }
+       },
+       
+       window_iconchanged: function(win) {
+               var button = this.get_button_for_window(win);
+               button.setIconClass(win.iconCls);
+       },
+       
+});
+
+
+Gilbert.lib.app.Application = Ext.extend(Ext.util.Observable, {
+       
+       constructor: function (config) {
+               
+               this.models = {};
+               this.plugins = {};
+               
+               Ext.apply(this, config, {
+                       renderTo: Ext.getBody(),
+               });
+               
+               Gilbert.lib.app.Application.superclass.constructor.call(this);
+               
+               this.addEvents({
+                       'ready': true,
+                       'model_registered': true,
+                       'plugin_registered': true,
+                       'window_created': true,
+               });
+               
+               Ext.onReady(this.pre_init.createDelegate(this));
+       },
+       
+       pre_init: function () {
+               var outer = this;
+               
+               Gilbert.api.plugins.auth.get_preference('gilbert.background', function (background) {
+                       if (background) {
+                               outer.renderTo.setStyle('background', background);
+                       }
+               });
+               Gilbert.api.plugins.auth.get_preference('gilbert.theme', function (theme) {
+                       if (theme) {
+                               outer._set_theme(theme);
+                       }
+                       outer.init();
+               });
+       },
+       
+       _set_theme: function(theme) {
+               var link_element = document.getElementById('gilbert.theme.' + theme);
+               if (link_element) {
+                       Ext.each(document.getElementsByClassName('gilbert.theme'), function (theme_element) {
+                               if (theme_element != link_element) {
+                                       theme_element.disabled = true;
+                               } else {
+                                       theme_element.disabled = false;
+                               }
+                       });
+               }
+       },
+       
+       init: function () {
+               Ext.QuickTips.init();
+               
+               var desktop = this.desktop = new Gilbert.lib.app.Desktop();
+               var mainmenu = this.mainmenu = new Gilbert.lib.app.MainMenu(this);
+               var taskbar = this.taskbar = new Gilbert.lib.app.TaskBar(this);
+               var viewport = this.viewport = new Ext.Viewport({
+                       renderTo: this.renderTo,
+                       layout: 'border',
+                       items: [
+                               this.mainmenu,
+                               this.desktop,
+                               this.taskbar,
+                       ],
+               });
+               
+               var windows = this.windows = new Ext.WindowGroup();
+               
+               Ext.Direct.on('exception', function (exception) {
+                       if (exception.code == Ext.Direct.exceptions.TRANSPORT) {
+                               if (exception.xhr.status == 403) {
+                                       window.alert('You have been unexpectedly logged out.');
+                                       window.location.reload(true);
+                               }
+                       }
+                       if (exception.html) {
+                               var win = this.create_window({
+                                       width: 400,
+                                       height: 300,
+                                       maximizable: true,
+                                       minimizable: false,
+                                       modal: true,
+                                       html_source: exception.html,
+                               }, Gilbert.lib.ui.HTMLWindow);
+                               win.show();
+                       }
+               }, this);
+               
+               var initial_plugins = this.plugins;
+               this.plugins = {};
+               
+               Ext.iterate(initial_plugins, function (name, plugin, plugins) {
+                       this.register_plugin(name, plugin);
+               }, this);
+               
+               this.do_layout();
+               
+               this.renderTo.on('contextmenu', Ext.emptyFn, null, {preventDefault: true});
+               
+               window.onbeforeunload = function (event) {
+                       var notice = 'You will lose all unsaved changes and windows.';
+                       var event = event || window.event;
+                       if (event) {
+                               event.returnValue = notice;
+                       }
+               
+                       return notice;
+               };
+               
+               this.fireEvent('ready', this);
+       },
+       
+       create_window: function(config, cls) {
+               var win = new(cls||Ext.Window)(Ext.applyIf(config||{},{
+                       renderTo: this.desktop.el,
+                       manager: this.windows,
+                       minimizable: true,
+                       constrainHeader: true,
+               }));
+               
+               win.render(this.desktop.el);
+               if (win.modal) {
+                       win.on('show', function () {
+                               this.mainmenu.hide();
+                               this.taskbar.hide();
+                               this.do_layout();
+                       }, this);
+                       win.on('hide', function () {
+                               this.taskbar.show();
+                               this.mainmenu.show();
+                               this.do_layout();
+                       }, this);
+                       win.on('close', function () {
+                               this.taskbar.show();
+                               this.mainmenu.show();
+                               this.do_layout();
+                       }, this);
+               } else {
+                       win.setPosition(Math.floor(Math.random() * ((this.desktop.getInnerWidth() - win.width) - 1)), Math.floor(Math.random() * ((this.desktop.getInnerHeight() - win.height) - 1)));
+               }
+               this.taskbar.register_window(win);
+               this.fireEvent('window_created', win);
+               return win;
+       },
+       
+       do_layout: function() {
+               this.mainmenu.doLayout();
+               this.taskbar.doLayout();
+               this.viewport.doLayout();
+       },
+       
+       register_plugin: function (name, plugin) {
+               if (plugin.init(this) != false) {
+                       this.plugins[name] = plugin;
+                       this.fireEvent('plugin_registered', name, plugin, this);
+               }
+       },
+       
+       get_plugin: function (name) {
+               return this.plugins[name];
+       },
+       
+       register_model: function (app_label, name, model) {
+               if (!this.models[app_label]) {
+                       this.models[app_label] = {};
+               }
+               this.models[app_label][name] = model;
+               this.fireEvent('model_registered', name, model, this);
+       },
+       
+       get_model: function (app_label, name) {
+               if (!this.models[app_label]) {
+                       return undefined;
+               }
+               return this.models[app_label][name];
+       },
+       
+});
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/lib/models.js b/philo/contrib/gilbert/static/gilbert/lib/models.js
new file mode 100644 (file)
index 0000000..427f92d
--- /dev/null
@@ -0,0 +1,87 @@
+Ext.ns('Gilbert.lib.models');
+
+
+Gilbert.lib.models.Model = Ext.extend(Object, {
+       
+       constructor: function (config) {
+               Ext.apply(this, config);
+               this.drag_drop_group = 'Gilbert.lib.models.Model(' + this.app_label + ',' + this.name + ') ';
+       },
+       
+       create_reader: function (config) {
+               return new Ext.data.JsonReader(Ext.applyIf(config||{}, {}));
+       },
+       
+       create_writer: function (config) {
+               return new Ext.data.JsonWriter(Ext.applyIf(config||{}, {
+                       encode: false,
+               }));
+       },
+       
+       create_proxy: function (config) {
+               return new Ext.data.DirectProxy(Ext.applyIf(config||{},{
+                       paramsAsHash: true,
+                       api: {
+                               read: this.api.data_read,
+                               create: this.api.data_create,
+                               update: this.api.data_update,
+                               destroy: this.api.data_destroy,
+                       },
+               }));
+       },
+       
+       create_store: function (config) {
+               return new Ext.data.Store(Ext.applyIf(config||{},{
+                       proxy: this.create_proxy(),
+                       reader: this.create_reader(),
+                       writer: this.create_writer(),
+                       remoteSort: true,
+               }));
+       },
+       
+});
+
+
+Gilbert.lib.models.ModelInstance = Ext.extend(Object, {
+       
+       constructor: function (model, pk, __unicode__) {
+               this.model = model;
+               this.pk = pk;
+               this.__unicode__ = __unicode__
+       },
+       
+});
+
+
+Ext.data.Types.GILBERTMODELFOREIGNKEY = {
+       
+       convert: function (v, data) {
+               if (v) {
+                       return new Gilbert.lib.models.ModelInstance(Gilbert.get_model(v.app_label, v.name), v.pk, v.__unicode__);
+               } else {
+                       return null;
+               }
+       },
+       
+       sortType: Ext.data.SortTypes.none,
+       
+       type: 'gilbertmodelforeignkey',
+       
+}
+
+
+Ext.data.Types.GILBERTMODELFILEFIELD = {
+       
+       convert: function (v, data) {
+               if (v) {
+                       return v.url;
+               } else {
+                       return null;
+               }
+       },
+       
+       sortType: Ext.data.SortTypes.none,
+       
+       type: 'gilbertmodelfilefield',
+       
+}
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/lib/plugins.js b/philo/contrib/gilbert/static/gilbert/lib/plugins.js
new file mode 100644 (file)
index 0000000..66ff46f
--- /dev/null
@@ -0,0 +1,14 @@
+Ext.ns('Gilbert.lib.plugins');
+
+
+Gilbert.lib.plugins.Plugin = Ext.extend(Object, {
+       
+       constructor: function (config) {
+               Ext.apply(this, config);
+       },
+       
+       init: function (application) {
+               var application = this.application = application;
+       }
+       
+});
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/lib/ui/forms.js b/philo/contrib/gilbert/static/gilbert/lib/ui/forms.js
new file mode 100644 (file)
index 0000000..ca7f4e6
--- /dev/null
@@ -0,0 +1,963 @@
+Ext.ns('Gilbert.lib.ui.forms');
+
+
+Gilbert.lib.ui.forms.ClearableComboBox = Ext.extend(Ext.form.ComboBox, {
+       
+       initComponent: function () {
+               Gilbert.lib.ui.forms.ClearableComboBox.superclass.initComponent.call(this);
+               
+               this.triggerConfig = {
+                       tag: 'span',
+                       cls: 'x-form-twin-triggers',
+                       cn: [
+                               {
+                                       tag: 'img',
+                                       src: Ext.BLANK_IMAGE_URL,
+                                       alt: '',
+                                       cls: 'x-form-trigger x-form-clear-trigger', 
+                               },
+                               {
+                                       tag: 'img',
+                                       src: Ext.BLANK_IMAGE_URL,
+                                       alt: '',
+                                       cls: 'x-form-trigger ' + this.triggerClass,
+                               },
+                       ],
+               };
+       },
+       
+       afterRender: function () {
+               Gilbert.lib.ui.forms.ClearableComboBox.superclass.afterRender.call(this);
+               
+               if (this.value && this.allowBlank) {
+                       this.triggers[0].show();
+               } else {
+                       this.triggers[0].hide();
+               }
+       },
+       
+       initTrigger: function () {
+               Ext.form.TwinTriggerField.prototype.initTrigger.call(this);
+       },
+       
+       getTriggerWidth: function () {
+               Ext.form.TwinTriggerField.prototype.getTriggerWidth.call(this);
+       },
+       
+       onTrigger2Click: function () {
+               this.onTriggerClick();
+       },
+       
+       onTrigger1Click: function () {
+               this.clearValue();
+               this.triggers[0].hide();
+       },
+       
+       setValue: function (v) {
+               Gilbert.lib.ui.forms.ClearableComboBox.superclass.setValue.call(this, v);
+               
+               if (this.value && this.allowBlank) {
+                       this.triggers[0].show();
+               } else {
+                       this.triggers[0].hide();
+               }
+       },
+       
+       onDestroy: function () {
+               Ext.destroy(this.triggers);
+               
+               Gilbert.lib.ui.forms.ClearableComboBox.superclass.onDestroy.call(this);
+       },
+       
+});
+Ext.reg('gilbertclearablecombo', Gilbert.lib.ui.forms.ClearableComboBox);
+
+
+Gilbert.lib.ui.forms.ModelChoiceField = Ext.extend(Gilbert.lib.ui.forms.ClearableComboBox, {
+       
+       model_app_label: undefined,
+       
+       model_name: undefined,
+       
+       model_filters: {},
+       
+       initComponent: function () {
+               if (!this.model) {
+                       this.model = Gilbert.get_model(this.model_app_label, this.model_name);
+               }
+               if (!this.store) {
+                       if (!this.model && this.backup_store) {
+                               this.store = this.backup_store;
+                       } else if (this.model) {
+                               this.store = this.model.create_store({
+                                       baseParams: {
+                                               filters: this.model_filters,
+                                       },
+                               });
+                               this.valueField = 'pk';
+                               this.displayField = '__unicode__';
+                       
+                               this.on('beforequery', function () {
+                                       delete this.lastQuery;
+                               }, this);
+                               this.store.on('load', function (store, records, options) {
+                                       this.store_loaded = true;
+                               }, this, {single: true});
+                               this.store.load();
+                               
+                               this.on('render', function () {
+                                       var outer = this;
+                                       this.dropTarget = new Ext.dd.DropTarget(this.el, {
+                                               ddGroup: outer.model.drag_drop_group,
+                                               notifyEnter: function (source, e, data) {
+                                                       outer.el.highlight();
+                                                       return Ext.dd.DropTarget.prototype.notifyEnter.call(this);
+                                               },
+                                               notifyDrop: function (source, e, data) {
+                                                       outer.setValue(data.selections[0].id);
+                                                       return true;
+                                               },
+                                       });
+                               }, this);
+                       }
+               }
+               Gilbert.lib.ui.forms.ModelChoiceField.superclass.initComponent.call(this);
+       },
+       
+       setValue: function (v) {
+               if (this.model && !this.store_loaded) {
+                       this.el.dom.value = this.loadingText;
+                       this.store.on('load', this.setValue.createDelegate(this, [v]), null, {single: true});
+                       return;
+               }
+               return Gilbert.lib.ui.forms.ModelChoiceField.superclass.setValue.call(this, v);
+       }
+       
+});
+Ext.reg('gilbertmodelchoicefield', Gilbert.lib.ui.forms.ModelChoiceField);
+
+
+Gilbert.lib.ui.forms.MultipleChoiceField = Ext.extend(Ext.ux.form.SuperBoxSelect, {});
+Ext.reg('gilbertmultiplechoicefield', Gilbert.lib.ui.forms.MultipleChoiceField);
+
+
+Gilbert.lib.ui.forms.ModelMultipleChoiceField = Ext.extend(Gilbert.lib.ui.forms.MultipleChoiceField, {});
+Ext.reg('gilbertmodelmultiplechoicefield', Gilbert.lib.ui.forms.ModelMultipleChoiceField);
+
+
+/*
+Gilbert.lib.ui.DateTimeField is derived from revision 813 of Ext.ux.form.DateTime by Ing. Jozef SakáloÅ¡ as posted at http://extjs.com/forum/showthread.php?t=22661. 
+It, and the original, is licensed under the GNU LGPL version 3.0 (http://www.gnu.org/licenses/lgpl.html).
+*/
+
+/**
+ * Creates new DateTimeField
+ * @constructor
+ * @param {Object} config A config object
+ */
+Gilbert.lib.ui.DateTimeField = Ext.extend(Ext.form.Field, {
+       /**
+        * @cfg {Function} dateValidator A custom validation function to be called during date field
+        * validation (defaults to null)
+        */
+       dateValidator: null
+       /**
+        * @cfg {String/Object} defaultAutoCreate DomHelper element spec
+        * Let superclass to create hidden field instead of textbox. Hidden will be submittend to server
+        */
+       ,
+       defaultAutoCreate: {
+               tag: 'input',
+               type: 'hidden'
+       }
+       /**
+        * @cfg {String} dtSeparator Date - Time separator. Used to split date and time (defaults to ' ' (space))
+        */
+       ,
+       dtSeparator: ' '
+       /**
+        * @cfg {String} hiddenFormat Format of datetime used to store value in hidden field
+        * and submitted to server (defaults to 'Y-m-d H:i:s' that is mysql format)
+        */
+       ,
+       hiddenFormat: 'Y-m-d H:i:s'
+       /**
+        * @cfg {Boolean} otherToNow Set other field to now() if not explicly filled in (defaults to true)
+        */
+       ,
+       otherToNow: true
+       /**
+        * @cfg {Boolean} emptyToNow Set field value to now on attempt to set empty value.
+        * If it is true then setValue() sets value of field to current date and time (defaults to false)
+        */
+       /**
+        * @cfg {String} timePosition Where the time field should be rendered. 'right' is suitable for forms
+        * and 'below' is suitable if the field is used as the grid editor (defaults to 'right')
+        */
+       ,
+       timePosition: 'right'
+       // valid values:'below', 'right'
+       /**
+        * @cfg {Function} timeValidator A custom validation function to be called during time field
+        * validation (defaults to null)
+        */
+       ,
+       timeValidator: null
+       /**
+        * @cfg {Number} timeWidth Width of time field in pixels (defaults to 100)
+        */
+       ,
+       timeWidth: 100
+       /**
+        * @cfg {String} dateFormat Format of DateField. Can be localized. (defaults to 'm/y/d')
+        */
+       ,
+       dateFormat: 'm/d/y'
+       /**
+        * @cfg {String} timeFormat Format of TimeField. Can be localized. (defaults to 'g:i A')
+        */
+       ,
+       timeFormat: 'g:i A'
+       /**
+        * @cfg {Object} dateConfig Config for DateField constructor.
+        */
+       /**
+        * @cfg {Object} timeConfig Config for TimeField constructor.
+        */
+
+       // {{{
+       /**
+        * @private
+        * creates DateField and TimeField and installs the necessary event handlers
+        */
+       ,
+       initComponent: function() {
+               // call parent initComponent
+               Gilbert.lib.ui.DateTimeField.superclass.initComponent.call(this);
+               
+               // create DateField
+               var dateConfig = Ext.apply({},
+               {
+                       id: this.id + '-date'
+                       ,
+                       format: this.dateFormat || Ext.form.DateField.prototype.format
+                       ,
+                       width: this.timeWidth
+                       ,
+                       selectOnFocus: this.selectOnFocus
+                       ,
+                       validator: this.dateValidator
+                       ,
+                       listeners: {
+                               blur: {
+                                       scope: this,
+                                       fn: this.onBlur
+                               }
+                               ,
+                               focus: {
+                                       scope: this,
+                                       fn: this.onFocus
+                               }
+                       }
+               },
+               this.dateConfig);
+               this.df = new Ext.form.DateField(dateConfig);
+               this.df.ownerCt = this;
+               delete(this.dateFormat);
+               
+               // create TimeField
+               var timeConfig = Ext.apply({},
+               {
+                       id: this.id + '-time'
+                       ,
+                       format: this.timeFormat || Ext.form.TimeField.prototype.format
+                       ,
+                       width: this.timeWidth
+                       ,
+                       selectOnFocus: this.selectOnFocus
+                       ,
+                       validator: this.timeValidator
+                       ,
+                       listeners: {
+                               blur: {
+                                       scope: this,
+                                       fn: this.onBlur
+                               }
+                               ,
+                               focus: {
+                                       scope: this,
+                                       fn: this.onFocus
+                               }
+                       }
+               },
+               this.timeConfig);
+               this.tf = new Ext.form.TimeField(timeConfig);
+               this.tf.ownerCt = this;
+               delete(this.timeFormat);
+               
+               // relay events
+               this.relayEvents(this.df, ['focus', 'specialkey', 'invalid', 'valid']);
+               this.relayEvents(this.tf, ['focus', 'specialkey', 'invalid', 'valid']);
+               
+               this.on('specialkey', this.onSpecialKey, this);
+               
+       }
+       // eo function initComponent
+       // }}}
+       // {{{
+       /**
+        * @private
+        * Renders underlying DateField and TimeField and provides a workaround for side error icon bug
+        */
+       ,
+       onRender: function(ct, position) {
+               // don't run more than once
+               if (this.isRendered) {
+                       return;
+               }
+               
+               // render underlying hidden field
+               Gilbert.lib.ui.DateTimeField.superclass.onRender.call(this, ct, position);
+               
+               // render DateField and TimeField
+               // create bounding table
+               var t;
+               if ('below' === this.timePosition) {
+                       t = Ext.DomHelper.append(ct, {
+                               tag: 'table',
+                               style: 'border-collapse:collapse',
+                               children: [
+                               {
+                                       tag: 'tr',
+                                       children: [{
+                                               tag: 'td',
+                                               style: 'padding-bottom:1px',
+                                               cls: 'ux-datetime-date'
+                                       }]
+                               }
+                               ,
+                               {
+                                       tag: 'tr',
+                                       children: [{
+                                               tag: 'td',
+                                               cls: 'ux-datetime-time'
+                                       }]
+                               }
+                               ]
+                       },
+                       true);
+               }
+               else {
+                       t = Ext.DomHelper.append(ct, {
+                               tag: 'table',
+                               style: 'border-collapse:collapse',
+                               children: [
+                               {
+                                       tag: 'tr',
+                                       children: [
+                                       {
+                                               tag: 'td',
+                                               style: 'padding-right:4px',
+                                               cls: 'ux-datetime-date'
+                                       },
+                                       {
+                                               tag: 'td',
+                                               cls: 'ux-datetime-time'
+                                       }
+                                       ]
+                               }
+                               ]
+                       },
+                       true);
+               }
+               
+               this.tableEl = t;
+               this.wrap = t.wrap({
+                       cls: 'x-form-field-wrap'
+               });
+               //                this.wrap = t.wrap();
+               this.wrap.on("mousedown", this.onMouseDown, this, {
+                       delay: 10
+               });
+               
+               // render DateField & TimeField
+               this.df.render(t.child('td.ux-datetime-date'));
+               this.tf.render(t.child('td.ux-datetime-time'));
+               
+               // workaround for IE trigger misalignment bug
+               // see http://extjs.com/forum/showthread.php?p=341075#post341075
+               //                if(Ext.isIE && Ext.isStrict) {
+               //                        t.select('input').applyStyles({top:0});
+               //                }
+               this.df.el.swallowEvent(['keydown', 'keypress']);
+               this.tf.el.swallowEvent(['keydown', 'keypress']);
+               
+               // create icon for side invalid errorIcon
+               if ('side' === this.msgTarget) {
+                       var elp = this.el.findParent('.x-form-element', 10, true);
+                       if (elp) {
+                               this.errorIcon = elp.createChild({
+                                       cls: 'x-form-invalid-icon'
+                               });
+                       }
+                       
+                       var o = {
+                               errorIcon: this.errorIcon
+                               ,
+                               msgTarget: 'side'
+                               ,
+                               alignErrorIcon: this.alignErrorIcon.createDelegate(this)
+                       };
+                       Ext.apply(this.df, o);
+                       Ext.apply(this.tf, o);
+                       //                        this.df.errorIcon = this.errorIcon;
+                       //                        this.tf.errorIcon = this.errorIcon;
+               }
+               
+               // setup name for submit
+               this.el.dom.name = this.hiddenName || this.name || this.id;
+               
+               // prevent helper fields from being submitted
+               this.df.el.dom.removeAttribute("name");
+               this.tf.el.dom.removeAttribute("name");
+               
+               // we're rendered flag
+               this.isRendered = true;
+               
+               // update hidden field
+               this.updateHidden();
+               
+       }
+       // eo function onRender
+       // }}}
+       // {{{
+       /**
+        * @private
+        */
+       ,
+       adjustSize: Ext.BoxComponent.prototype.adjustSize
+       // }}}
+       // {{{
+       /**
+        * @private
+        */
+       ,
+       alignErrorIcon: function() {
+               this.errorIcon.alignTo(this.tableEl, 'tl-tr', [2, 0]);
+       }
+       // }}}
+       // {{{
+       /**
+        * @private initializes internal dateValue
+        */
+       ,
+       initDateValue: function() {
+               this.dateValue = this.otherToNow ? new Date() : new Date(1970, 0, 1, 0, 0, 0);
+       }
+       // }}}
+       // {{{
+       /**
+        * Calls clearInvalid on the DateField and TimeField
+        */
+       ,
+       clearInvalid: function() {
+               this.df.clearInvalid();
+               this.tf.clearInvalid();
+       }
+       // eo function clearInvalid
+       // }}}
+       // {{{
+       /**
+        * Calls markInvalid on both DateField and TimeField
+        * @param {String} msg Invalid message to display
+        */
+       ,
+       markInvalid: function(msg) {
+               this.df.markInvalid(msg);
+               this.tf.markInvalid(msg);
+       }
+       // eo function markInvalid
+       // }}}
+       // {{{
+       /**
+        * @private
+        * called from Component::destroy. 
+        * Destroys all elements and removes all listeners we've created.
+        */
+       ,
+       beforeDestroy: function() {
+               if (this.isRendered) {
+                       //                        this.removeAllListeners();
+                       this.wrap.removeAllListeners();
+                       this.wrap.remove();
+                       this.tableEl.remove();
+                       this.df.destroy();
+                       this.tf.destroy();
+               }
+       }
+       // eo function beforeDestroy
+       // }}}
+       // {{{
+       /**
+        * Disable this component.
+        * @return {Ext.Component} this
+        */
+       ,
+       disable: function() {
+               if (this.isRendered) {
+                       this.df.disabled = this.disabled;
+                       this.df.onDisable();
+                       this.tf.onDisable();
+               }
+               this.disabled = true;
+               this.df.disabled = true;
+               this.tf.disabled = true;
+               this.fireEvent("disable", this);
+               return this;
+       }
+       // eo function disable
+       // }}}
+       // {{{
+       /**
+        * Enable this component.
+        * @return {Ext.Component} this
+        */
+       ,
+       enable: function() {
+               if (this.rendered) {
+                       this.df.onEnable();
+                       this.tf.onEnable();
+               }
+               this.disabled = false;
+               this.df.disabled = false;
+               this.tf.disabled = false;
+               this.fireEvent("enable", this);
+               return this;
+       }
+       // eo function enable
+       // }}}
+       // {{{
+       /**
+        * @private Focus date filed
+        */
+       ,
+       focus: function() {
+               this.df.focus();
+       }
+       // eo function focus
+       // }}}
+       // {{{
+       /**
+        * @private
+        */
+       ,
+       getPositionEl: function() {
+               return this.wrap;
+       }
+       // }}}
+       // {{{
+       /**
+        * @private
+        */
+       ,
+       getResizeEl: function() {
+               return this.wrap;
+       }
+       // }}}
+       // {{{
+       /**
+        * @return {Date/String} Returns value of this field
+        */
+       ,
+       getValue: function() {
+               // create new instance of date
+               return this.dateValue ? new Date(this.dateValue) : '';
+       }
+       // eo function getValue
+       // }}}
+       // {{{
+       /**
+        * @return {Boolean} true = valid, false = invalid
+        * @private Calls isValid methods of underlying DateField and TimeField and returns the result
+        */
+       ,
+       isValid: function() {
+               var valid = true;
+               var msg = "Both fields must be supplied."
+               if (!(this.df.isValid() && this.tf.isValid())) valid = false;
+               if (Boolean(this.df.getValue()) != Boolean(this.tf.getValue())) {
+                       valid = false;
+                       if (!this.df.getValue()){
+                               if (!(this.tf.hasFocus || this.df.hasFocus)) this.df.markInvalid(msg);
+                       } else {
+                               if (!(this.tf.hasFocus || this.df.hasFocus)) this.tf.markInvalid(msg);
+                       };
+               };
+               return valid;
+       }
+       // eo function isValid
+       // }}}
+       // {{{
+       /**
+        * Returns true if this component is visible
+        * @return {boolean} 
+        */
+       ,
+       isVisible: function() {
+               return this.df.rendered && this.df.getActionEl().isVisible();
+       }
+       // eo function isVisible
+       // }}}
+       // {{{
+       /** 
+        * @private Handles blur event
+        */
+       ,
+       onBlur: function(f) {
+               // called by both DateField and TimeField blur events
+               // revert focus to previous field if clicked in between
+               if (this.wrapClick) {
+                       f.focus();
+                       this.wrapClick = false;
+               }
+               
+               // update underlying value
+               if (f === this.df) {
+                       this.updateDate();
+               }
+               else {
+                       this.updateTime();
+               }
+               this.updateHidden();
+               
+               this.validate();
+               
+               // fire events later
+               (function() {
+                       if (!this.df.hasFocus && !this.tf.hasFocus) {
+                               var v = this.getValue();
+                               if (String(v) !== String(this.startValue)) {
+                                       this.fireEvent("change", this, v, this.startValue);
+                               }
+                               this.hasFocus = false;
+                               this.fireEvent('blur', this);
+                       }
+               }).defer(100, this);
+               
+       }
+       // eo function onBlur
+       // }}}
+       // {{{
+       /**
+        * @private Handles focus event
+        */
+       ,
+       onFocus: function() {
+               if (!this.hasFocus) {
+                       this.hasFocus = true;
+                       this.startValue = this.getValue();
+                       this.fireEvent("focus", this);
+               }
+       }
+       // }}}
+       // {{{
+       /**
+        * @private Just to prevent blur event when clicked in the middle of fields
+        */
+       ,
+       onMouseDown: function(e) {
+               if (!this.disabled) {
+                       this.wrapClick = 'td' === e.target.nodeName.toLowerCase();
+               }
+       }
+       // }}}
+       // {{{
+       /**
+        * @private
+        * Handles Tab and Shift-Tab events
+        */
+       ,
+       onSpecialKey: function(t, e) {
+               var key = e.getKey();
+               if (key === e.TAB) {
+                       if (t === this.df && !e.shiftKey) {
+                               e.stopEvent();
+                               this.tf.focus();
+                       }
+                       if (t === this.tf && e.shiftKey) {
+                               e.stopEvent();
+                               this.df.focus();
+                       }
+                       this.updateValue();
+               }
+               // otherwise it misbehaves in editor grid
+               if (key === e.ENTER) {
+                       this.updateValue();
+               }
+               
+       }
+       // eo function onSpecialKey
+       // }}}
+       // {{{
+       /**
+        * Resets the current field value to the originally loaded value 
+        * and clears any validation messages. See Ext.form.BasicForm.trackResetOnLoad
+        */
+       ,
+       reset: function() {
+               this.df.setValue(this.originalValue);
+               this.tf.setValue(this.originalValue);
+       }
+       // eo function reset
+       // }}}
+       // {{{
+       /**
+        * @private Sets the value of DateField
+        */
+       ,
+       setDate: function(date) {
+               this.df.setValue(date);
+       }
+       // eo function setDate
+       // }}}
+       // {{{
+       /** 
+        * @private Sets the value of TimeField
+        */
+       ,
+       setTime: function(date) {
+               this.tf.setValue(date);
+       }
+       // eo function setTime
+       // }}}
+       // {{{
+       /**
+        * @private
+        * Sets correct sizes of underlying DateField and TimeField
+        * With workarounds for IE bugs
+        */
+       ,
+       setSize: function(w, h) {
+               if (!w) {
+                       return;
+               }
+               if ('below' === this.timePosition) {
+                       this.df.setSize(w, h);
+                       this.tf.setSize(w, h);
+                       if (Ext.isIE) {
+                               this.df.el.up('td').setWidth(w);
+                               this.tf.el.up('td').setWidth(w);
+                       }
+               }
+               else {
+                       this.df.setSize(w - this.timeWidth - 4, h);
+                       this.tf.setSize(this.timeWidth, h);
+                       
+                       if (Ext.isIE) {
+                               this.df.el.up('td').setWidth(w - this.timeWidth - 4);
+                               this.tf.el.up('td').setWidth(this.timeWidth);
+                       }
+               }
+       }
+       // eo function setSize
+       // }}}
+       // {{{
+       /**
+        * @param {Mixed} val Value to set
+        * Sets the value of this field
+        */
+       ,
+       setValue: function(val) {
+               if (!val && true === this.emptyToNow) {
+                       this.setValue(new Date());
+                       return;
+               }
+               else if (!val) {
+                       this.setDate('');
+                       this.setTime('');
+                       this.updateValue();
+                       return;
+               }
+               if ('number' === typeof val) {
+                       val = new Date(val);
+               }
+               else if ('string' === typeof val && this.hiddenFormat) {
+                       val = Date.parseDate(val, this.hiddenFormat);
+               }
+               val = val ? val: new Date(1970, 0, 1, 0, 0, 0);
+               var da;
+               if (val instanceof Date) {
+                       this.setDate(val);
+                       this.setTime(val);
+                       this.dateValue = new Date(Ext.isIE ? val.getTime() : val);
+               }
+               else {
+                       da = val.split(this.dtSeparator);
+                       this.setDate(da[0]);
+                       if (da[1]) {
+                               if (da[2]) {
+                                       // add am/pm part back to time
+                                       da[1] += da[2];
+                               }
+                               this.setTime(da[1]);
+                       }
+               }
+               this.updateValue();
+       }
+       // eo function setValue
+       // }}}
+       // {{{
+       /**
+        * Hide or show this component by boolean
+        * @return {Ext.Component} this
+        */
+       ,
+       setVisible: function(visible) {
+               if (visible) {
+                       this.df.show();
+                       this.tf.show();
+               } else {
+                       this.df.hide();
+                       this.tf.hide();
+               }
+               return this;
+       }
+       // eo function setVisible
+       // }}}
+       //{{{
+       ,
+       show: function() {
+               return this.setVisible(true);
+       }
+       // eo function show
+       //}}}
+       //{{{
+       ,
+       hide: function() {
+               return this.setVisible(false);
+       }
+       // eo function hide
+       //}}}
+       // {{{
+       /**
+        * @private Updates the date part
+        */
+       ,
+       updateDate: function() {
+               
+               var d = this.df.getValue();
+               if (d) {
+                       if (! (this.dateValue instanceof Date)) {
+                               this.initDateValue();
+                       }
+                       this.dateValue.setMonth(0);
+                       // because of leap years
+                       this.dateValue.setFullYear(d.getFullYear());
+                       this.dateValue.setMonth(d.getMonth(), d.getDate());
+                       //                        this.dateValue.setDate(d.getDate());
+               }
+               else {
+                       this.dateValue = '';
+               }
+       }
+       // eo function updateDate
+       // }}}
+       // {{{
+       /**
+        * @private
+        * Updates the time part
+        */
+       ,
+       updateTime: function() {
+               var t = this.tf.getValue();
+               if (t && !(t instanceof Date)) {
+                       t = Date.parseDate(t, this.tf.format);
+               }
+               if (t && !this.df.getValue()) {
+                       this.initDateValue();
+               }
+               if (this.dateValue instanceof Date) {
+                       if (t) {
+                               this.dateValue.setHours(t.getHours());
+                               this.dateValue.setMinutes(t.getMinutes());
+                               this.dateValue.setSeconds(t.getSeconds());
+                       }
+                       else {
+                               this.dateValue.setHours(0);
+                               this.dateValue.setMinutes(0);
+                               this.dateValue.setSeconds(0);
+                       }
+               }
+       }
+       // eo function updateTime
+       // }}}
+       // {{{
+       /**
+        * @private Updates the underlying hidden field value
+        */
+       ,
+       updateHidden: function() {
+               if (this.isRendered) {
+                       var value = this.dateValue instanceof Date ? this.dateValue.format(this.hiddenFormat) : '';
+                       this.el.dom.value = value;
+               }
+       }
+       // }}}
+       // {{{
+       /**
+        * @private Updates all of Date, Time and Hidden
+        */
+       ,
+       updateValue: function() {
+               
+               this.updateDate();
+               this.updateTime();
+               this.updateHidden();
+               
+               return;
+       }
+       // eo function updateValue
+       // }}}
+       // {{{
+       /**
+        * @return {Boolean} true = valid, false = invalid
+        * calls validate methods of DateField and TimeField
+        */
+       ,
+       validate: function() {
+               var valid = true;
+               var msg = "Both fields must be supplied."
+               if (!(this.df.validate() && this.tf.validate())) valid = false;
+               if (Boolean(this.df.getValue()) != Boolean(this.tf.getValue())) {
+                       valid = false;
+                       if (!this.df.getValue()){
+                               if (!(this.tf.hasFocus || this.df.hasFocus)) this.df.markInvalid(msg);
+                       } else {
+                               if (!(this.tf.hasFocus || this.df.hasFocus)) this.tf.markInvalid(msg);
+                       };
+               };
+               return valid;
+       }
+       // eo function validate
+       // }}}
+       // {{{
+       /**
+        * Returns renderer suitable to render this field
+        * @param {Object} Column model config
+        */
+       ,
+       renderer: function(field) {
+               var format = field.editor.dateFormat || Gilbert.lib.ui.DateTimeField.prototype.dateFormat;
+               format += ' ' + (field.editor.timeFormat || Gilbert.lib.ui.DateTimeField.prototype.timeFormat);
+               var renderer = function(val) {
+                       var retval = Ext.util.Format.date(val, format);
+                       return retval;
+               };
+               return renderer;
+       }
+       // eo function renderer
+       // }}}
+});
+// eo extend
+// register xtype
+Ext.reg('gilbertdatetimefield', Gilbert.lib.ui.DateTimeField);
diff --git a/philo/contrib/gilbert/static/gilbert/lib/ui/ui.js b/philo/contrib/gilbert/static/gilbert/lib/ui/ui.js
new file mode 100644 (file)
index 0000000..9abe372
--- /dev/null
@@ -0,0 +1,44 @@
+Ext.ns('Gilbert.lib.ui');
+
+
+Gilbert.lib.ui.DjangoForm = Ext.extend(Ext.FormPanel, {
+       initComponent: function () {
+               /*if (this.djangoFields) {
+                       this.initDjangoForm();
+               }*/
+               Gilbert.lib.ui.DjangoForm.superclass.initComponent.call(this);
+       },
+/*     initDjangoForm: function () {
+               this.items = this.items || [];
+               Ext.each(this.djangoFields, this.addDjangoField, this);
+       },
+       addDjangoField: function(field, index, all) {
+               this.items.push(Gilbert.lib.ui.DjangoFormHelper.get_field_converter(field.type)(field));
+       },*/
+});
+
+
+Gilbert.lib.ui.HTMLWindow = Ext.extend(Ext.Window, {
+       html_source: undefined,
+       onRender: function() {
+               if (this.html_source) {
+                       this.bodyCfg = {
+                               tag: 'iframe',
+                               cls: this.bodyCls,
+                       };
+                       Gilbert.lib.ui.HTMLWindow.superclass.onRender.apply(this, arguments);
+                       var iframe = this.body.dom;
+                       var doc = iframe.document;
+                       if (iframe.contentDocument) {
+                               doc = iframe.contentDocument;
+                       } else if (iframe.contentWindow) {
+                               doc = iframe.contentWindow.document;
+                       }
+                       doc.open();
+                       doc.writeln(this.html_source);
+                       doc.close();
+               } else {
+                       Gilbert.lib.ui.HTMLWindow.superclass.onRender.apply(this, arguments);
+               }
+       }
+});
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/lib/ui/windows.js b/philo/contrib/gilbert/static/gilbert/lib/ui/windows.js
new file mode 100644 (file)
index 0000000..f60eb11
--- /dev/null
@@ -0,0 +1,41 @@
+Gilbert.lib.ui.DjangoForm = Ext.extend(Ext.FormPanel, {
+       initComponent: function () {
+               /*if (this.djangoFields) {
+                       this.initDjangoForm();
+               }*/
+               Gilbert.lib.ui.DjangoForm.superclass.initComponent.call(this);
+       },
+/*     initDjangoForm: function () {
+               this.items = this.items || [];
+               Ext.each(this.djangoFields, this.addDjangoField, this);
+       },
+       addDjangoField: function(field, index, all) {
+               this.items.push(Gilbert.lib.ui.DjangoFormHelper.get_field_converter(field.type)(field));
+       },*/
+});
+
+
+Gilbert.lib.ui.HTMLWindow = Ext.extend(Ext.Window, {
+       html_source: undefined,
+       onRender: function() {
+               if (this.html_source) {
+                       this.bodyCfg = {
+                               tag: 'iframe',
+                               cls: this.bodyCls,
+                       };
+                       Gilbert.lib.ui.HTMLWindow.superclass.onRender.apply(this, arguments);
+                       var iframe = this.body.dom;
+                       var doc = iframe.document;
+                       if (iframe.contentDocument) {
+                               doc = iframe.contentDocument;
+                       } else if (iframe.contentWindow) {
+                               doc = iframe.contentWindow.document;
+                       }
+                       doc.open();
+                       doc.writeln(this.html_source);
+                       doc.close();
+               } else {
+                       Gilbert.lib.ui.HTMLWindow.superclass.onRender.apply(this, arguments);
+               }
+       }
+});
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/README.markdown b/philo/contrib/gilbert/static/gilbert/murano/README.markdown
new file mode 100644 (file)
index 0000000..c7ae774
--- /dev/null
@@ -0,0 +1,18 @@
+Murano
+------
+
+Murano is a glassy theme for Ext JS 4.
+
+Using Murano
+============
+
+Include ```path/to/murano/css/murano.css``` in place of the default Ext JS stylesheet, usually named ```ext-all.css```. Works with Ext JS 4.x.
+
+Modifying Murano
+================
+
+Editing Murano requires [Compass][].
+
+To edit Murano for contribution or your own use, you will need to update ```$ext_path``` in config.rb and run ```compass watch``` or ```compass compile``` from this directory.
+
+[Compass]:http://compass-style.org/
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/config.rb b/philo/contrib/gilbert/static/gilbert/murano/config.rb
new file mode 100755 (executable)
index 0000000..45ef6c7
--- /dev/null
@@ -0,0 +1,25 @@
+# $ext_path: This should be the path of where the ExtJS SDK is installed
+# Generally this will be in a lib/extjs folder in your applications root
+# <root>/lib/extjs
+$ext_path = "../extjs"
+
+project_path = File.dirname(__FILE__)
+
+# sass_path: the directory your Sass files are in. THIS file should also be in the Sass folder
+# Generally this will be in a resources/sass folder
+# <root>/resources/sass
+sass_path = File.join(project_path, 'sass')
+
+# css_path: the directory you want your CSS files to be.
+# Generally this is a folder in the parent directory of your Sass files
+# <root>/resources/css
+css_path = File.join(project_path, "css")
+
+# output_style: The output style for your compiled CSS
+# nested, expanded, compact, compressed
+# More information can be found here http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#output_style
+output_style = :nested
+environment = :development
+
+# We need to load in the Ext4 themes folder, which includes all it's default styling, images, variables and mixins
+load File.join(project_path, $ext_path, 'resources', 'themes')
diff --git a/philo/contrib/gilbert/static/gilbert/murano/css/murano.css b/philo/contrib/gilbert/static/gilbert/murano/css/murano.css
new file mode 100644 (file)
index 0000000..d598fcf
--- /dev/null
@@ -0,0 +1,3557 @@
+/* BASE VARIABLES *
+ * -------------- */
+/* PANEL VARIABLES *
+ * --------------- */
+/* WINDOW VARIABLES *
+ * ---------------- */
+/* line 4, ../sass/murano/_core.scss */
+html, body {
+  background: #444; }
+
+/* line 8, ../sass/murano/_core.scss */
+body {
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); }
+
+/* WAT IS THIS I DON'T EVEN  *
+ * ------------------------- */
+/* line 15, ../sass/murano/_core.scss */
+.x-border-layout-ct {
+  background: transparent !important; }
+
+/* line 19, ../sass/murano/_core.scss */
+.x-css-shadow {
+  display: none !important; }
+
+/* line 23, ../sass/murano/_core.scss */
+.x-tool img {
+  background-image: url("../img/tools/tool-sprites.png") !important; }
+
+/* line 27, ../sass/murano/_core.scss */
+.x-layout-split-left {
+  background: url("../img/util/splitter/mini-left.png") no-repeat top right !important; }
+
+/* line 31, ../sass/murano/_core.scss */
+.x-layout-split-right {
+  background: url("../img/util/splitter/mini-right.png") no-repeat top left !important; }
+
+/* line 35, ../sass/murano/_core.scss */
+.x-layout-split-top {
+  background: url("../img/util/splitter/mini-bottom.png") no-repeat top left !important; }
+
+/* line 39, ../sass/murano/_core.scss */
+.x-layout-split-bottom {
+  background: url("../img/util/splitter/mini-top.png") no-repeat top left !important; }
+
+/* line 44, ../sass/murano/_core.scss */
+.x-splitter-collapsed .x-layout-split-left {
+  background: url("../img/util/splitter/mini-right.png") no-repeat top left !important; }
+/* line 48, ../sass/murano/_core.scss */
+.x-splitter-collapsed .x-layout-split-right {
+  background: url("../img/util/splitter/mini-left.png") no-repeat top right !important; }
+/* line 52, ../sass/murano/_core.scss */
+.x-splitter-collapsed .x-layout-split-top {
+  background: url("../img/util/splitter/mini-top.png") no-repeat top left !important; }
+/* line 56, ../sass/murano/_core.scss */
+.x-splitter-collapsed .x-layout-split-bottom {
+  background: url("../img/util/splitter/mini-bottom.png") no-repeat top left !important; }
+
+/* VARIABLES THAT $include-default: false; DOES NOT GET RID OF *
+ * ----------------------------------------------------------- */
+/* line 1, ../sass/murano/components/_panel.scss */
+.x-panel {
+  background: rgba(0, 0, 0, 0.85);
+  overflow: hidden;
+  position: relative;
+  margin-top: 0; }
+
+/* line 10, ../sass/murano/components/_panel.scss */
+.x-panel .x-panel .x-panel-body, .x-window .x-panel .x-panel-body {
+  background: #222; }
+
+/* line 16, ../sass/murano/components/_panel.scss */
+.x-panel-header {
+  background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255, 255, 255, 0.25)), color-stop(50%, rgba(255, 255, 255, 0.15)), color-stop(50%, rgba(255, 255, 255, 0)), color-stop(100%, rgba(255, 255, 255, 0)));
+  background: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background: -moz-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background: -o-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background: linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  -moz-box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.35);
+  -webkit-box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.35);
+  -o-box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.35);
+  box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.35);
+  border-top: 1px solid #FFF;
+  line-height: 24px;
+  height: 24px;
+  padding: 0 3px 0 6px; }
+
+/* line 25, ../sass/murano/components/_panel.scss */
+.x-panel-header-vertical {
+  background: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(255, 255, 255, 0.25)), color-stop(50%, rgba(255, 255, 255, 0.15)), color-stop(50%, rgba(255, 255, 255, 0)), color-stop(100%, rgba(255, 255, 255, 0)));
+  background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background: -moz-linear-gradient(left, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background: -o-linear-gradient(left, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background: linear-gradient(left, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%); }
+
+/* line 29, ../sass/murano/components/_panel.scss */
+.x-panel-body {
+  position: relative;
+  padding: 0; }
+
+/* FRAMED PANEL
+ * ------------ */
+/* line 36, ../sass/murano/components/_panel.scss */
+.x-panel-default-framed {
+  border: 1px solid rgba(255, 255, 255, 0.5);
+  border-top-color: white;
+  -moz-border-radius: 6px 6px 0 0;
+  -webkit-border-radius: 6px 6px 0 0;
+  -o-border-radius: 6px 6px 0 0;
+  -ms-border-radius: 6px 6px 0 0;
+  -khtml-border-radius: 6px 6px 0 0;
+  border-radius: 6px 6px 0 0; }
+
+/* line 42, ../sass/murano/components/_panel.scss */
+.x-panel-default-framed .x-panel-header {
+  border-top: 0;
+  -moz-border-radius: 6px 6px 0 0;
+  -webkit-border-radius: 6px 6px 0 0;
+  -o-border-radius: 6px 6px 0 0;
+  -ms-border-radius: 6px 6px 0 0;
+  -khtml-border-radius: 6px 6px 0 0;
+  border-radius: 6px 6px 0 0;
+  margin-top: 1px;
+  margin-left: 1px;
+  margin-right: 1px; }
+
+/* MASKED PANEL
+ * ------------ */
+/* line 55, ../sass/murano/components/_panel.scss */
+.x-mask-msg {
+  background: #333333 !important;
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255, 255, 255, 0.25)), color-stop(50%, rgba(255, 255, 255, 0.15)), color-stop(50%, rgba(255, 255, 255, 0)), color-stop(100%, rgba(255, 255, 255, 0))) !important;
+  background-image: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%) !important;
+  background-image: -moz-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%) !important;
+  background-image: -o-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%) !important;
+  background-image: linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%) !important;
+  -moz-border-radius: 4px;
+  -webkit-border-radius: 4px;
+  -o-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -khtml-border-radius: 4px;
+  border-radius: 4px;
+  -moz-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.75);
+  -webkit-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.75);
+  -o-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.75);
+  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.75);
+  border: 1px solid #333333 !important;
+  border-top: 1px solid #888888 !important; }
+  /* line 62, ../sass/murano/components/_panel.scss */
+  .x-mask-msg div {
+    background-color: black !important;
+    -moz-border-radius: 3px;
+    -webkit-border-radius: 3px;
+    -o-border-radius: 3px;
+    -ms-border-radius: 3px;
+    -khtml-border-radius: 3px;
+    border-radius: 3px;
+    border: 1px solid #333333 !important;
+    border-bottom: 1px solid #888888 !important;
+    color: #cccccc !important; }
+
+/* line 1, ../sass/murano/components/_window.scss */
+.x-window {
+  background: rgba(0, 0, 0, 0.85);
+  -moz-border-radius: 6px 6px 0 0;
+  -webkit-border-radius: 6px 6px 0 0;
+  -o-border-radius: 6px 6px 0 0;
+  -ms-border-radius: 6px 6px 0 0;
+  -khtml-border-radius: 6px 6px 0 0;
+  border-radius: 6px 6px 0 0;
+  -moz-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.425), 0 3px 8px 0 rgba(0, 0, 0, 0.35), 0 0 0 1px rgba(0, 0, 0, 0.425) inset;
+  -webkit-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.425), 0 3px 8px 0 rgba(0, 0, 0, 0.35), 0 0 0 1px rgba(0, 0, 0, 0.425) inset;
+  -o-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.425), 0 3px 8px 0 rgba(0, 0, 0, 0.35), 0 0 0 1px rgba(0, 0, 0, 0.425) inset;
+  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.425), 0 3px 8px 0 rgba(0, 0, 0, 0.35), 0 0 0 1px rgba(0, 0, 0, 0.425) inset;
+  border: 1px solid rgba(255, 255, 255, 0.5);
+  border-top-color: white; }
+
+/* line 9, ../sass/murano/components/_window.scss */
+.x-window-header {
+  background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255, 255, 255, 0.25)), color-stop(50%, rgba(255, 255, 255, 0.15)), color-stop(50%, rgba(255, 255, 255, 0)), color-stop(100%, rgba(255, 255, 255, 0)));
+  background: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background: -moz-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background: -o-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background: linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  -moz-border-radius: 6px 6px 0 0;
+  -webkit-border-radius: 6px 6px 0 0;
+  -o-border-radius: 6px 6px 0 0;
+  -ms-border-radius: 6px 6px 0 0;
+  -khtml-border-radius: 6px 6px 0 0;
+  border-radius: 6px 6px 0 0;
+  -moz-box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.35);
+  -webkit-box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.35);
+  -o-box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.35);
+  box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.35);
+  padding: 0 3px 0 6px;
+  line-height: 24px;
+  height: 24px; }
+
+/* line 18, ../sass/murano/components/_window.scss */
+.x-window-body {
+  position: relative;
+  padding: 0;
+  background-color: rgba(0, 0, 0, 0.1); }
+
+/* line 1, ../sass/murano/components/_button.scss */
+button {
+  margin: 0;
+  padding: 0;
+  background: none;
+  border-width: 0; }
+
+/* line 8, ../sass/murano/components/_button.scss */
+.x-btn, .x-btn-pressed {
+  background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255, 255, 255, 0.25)), color-stop(50%, rgba(255, 255, 255, 0.15)), color-stop(50%, rgba(255, 255, 255, 0)), color-stop(100%, rgba(255, 255, 255, 0)));
+  background: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background: -moz-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background: -o-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background: linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  -moz-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.213);
+  -webkit-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.213);
+  -o-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.213);
+  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.213);
+  -moz-border-radius: 2px;
+  -webkit-border-radius: 2px;
+  -o-border-radius: 2px;
+  -ms-border-radius: 2px;
+  -khtml-border-radius: 2px;
+  border-radius: 2px;
+  background-color: rgba(0, 0, 0, 0.425);
+  border: 1px solid rgba(255, 255, 255, 0.3);
+  border-top-color: rgba(255, 255, 255, 0.5);
+  border-bottom-color: rgba(255, 255, 255, 0.05);
+  margin-top: 1px;
+  margin-bottom: 1px;
+  position: relative;
+  white-space: nowrap;
+  display: inline-block;
+  padding: 2px; }
+  /* line 24, ../sass/murano/components/_button.scss */
+  .x-btn em, .x-btn-pressed em {
+    display: block; }
+
+/* line 29, ../sass/murano/components/_button.scss */
+.x-btn-over {
+  border-color: #066cd1;
+  border-top-color: #439ffa;
+  border-bottom-color: #05529f; }
+
+/* line 35, ../sass/murano/components/_button.scss */
+.x-btn-pressed {
+  background-color: rgba(255, 255, 255, 0.2);
+  border-color: rgba(255, 255, 255, 0.2);
+  border-top-color: rgba(255, 255, 255, 0.4);
+  border-bottom-color: rgba(255, 255, 255, 0.1); }
+
+/* line 43, ../sass/murano/components/_button.scss */
+.x-btn-menu-active {
+  background: rgba(0, 0, 0, 0.5);
+  -moz-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5) inset, 0 0 0 1px rgba(0, 0, 0, 0.213);
+  -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5) inset, 0 0 0 1px rgba(0, 0, 0, 0.213);
+  -o-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5) inset, 0 0 0 1px rgba(0, 0, 0, 0.213);
+  box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5) inset, 0 0 0 1px rgba(0, 0, 0, 0.213);
+  border: 1px solid rgba(255, 255, 255, 0.5); }
+
+/* line 49, ../sass/murano/components/_button.scss */
+.x-btn-inner {
+  display: block;
+  padding: 0 5px;
+  color: white;
+  background-repeat: no-repeat; }
+
+/* different sizes */
+/* line 63, ../sass/murano/components/_button.scss */
+.x-btn-noicon .x-btn-inner, .x-btn-default-icon .x-btn-inner, .x-btn-icon-text-left .x-btn-inner, .x-btn-icon-text-right .x-btn-inner {
+  line-height: 16px; }
+
+/* line 69, ../sass/murano/components/_button.scss */
+.x-btn-default-medium-noicon .x-btn-inner, .x-btn-default-medium-icon-text-left .x-btn-inner, .x-btn-default-medium-icon-text-right .x-btn-inner {
+  line-height: 24px; }
+
+/* line 75, ../sass/murano/components/_button.scss */
+.x-btn-default-large-noicon .x-btn-inner, .x-btn-default-large-icon-text-left .x-btn-inner, .x-btn-default-large-icon-text-right .x-btn-inner {
+  line-height: 32px; }
+
+/* icons
+ * ----- */
+/* icon only */
+/* line 85, ../sass/murano/components/_button.scss */
+.x-btn-default-small-icon .x-btn-inner, .x-btn-icon .x-btn-inner {
+  padding: 0;
+  width: 16px;
+  height: 16px; }
+
+/* line 90, ../sass/murano/components/_button.scss */
+.x-btn-default-medium-icon .x-btn-inner {
+  padding: 0;
+  width: 24px;
+  height: 24px; }
+
+/* line 95, ../sass/murano/components/_button.scss */
+.x-btn-default-large-icon .x-btn-inner {
+  padding: 0;
+  width: 32px;
+  height: 32px; }
+
+/* text w/ icon left */
+/* line 103, ../sass/murano/components/_button.scss */
+.x-btn-icon-text-left {
+  background-position: 0 center; }
+
+/* line 107, ../sass/murano/components/_button.scss */
+.x-btn-icon-text-left .x-btn-inner {
+  padding-left: 18px; }
+
+/* line 110, ../sass/murano/components/_button.scss */
+.x-btn-default-medium-icon-text-left .x-btn-inner {
+  padding-left: 26px; }
+
+/* line 113, ../sass/murano/components/_button.scss */
+.x-btn-default-large-icon-text-left .x-btn-inner {
+  padding-left: 34px; }
+
+/* text w/ icon top */
+/* line 119, ../sass/murano/components/_button.scss */
+.x-btn-icon-text-top .x-btn-inner {
+  background-position: center 2px; }
+
+/* line 122, ../sass/murano/components/_button.scss */
+.x-btn-default-small-icon-text-top .x-btn-inner {
+  padding-top: 18px; }
+
+/* line 125, ../sass/murano/components/_button.scss */
+.x-btn-default-medium-icon-text-top .x-btn-inner {
+  padding-top: 26px; }
+
+/* line 128, ../sass/murano/components/_button.scss */
+.x-btn-default-large-icon-text-top .x-btn-inner {
+  padding-top: 34px; }
+
+/* text w/ icon right */
+/* line 134, ../sass/murano/components/_button.scss */
+.x-btn-icon-text-right .x-btn-inner {
+  background-position: right center; }
+
+/* line 137, ../sass/murano/components/_button.scss */
+.x-btn-default-small-icon-text-right .x-btn-inner {
+  padding-right: 18px; }
+
+/* line 140, ../sass/murano/components/_button.scss */
+.x-btn-default-medium-icon-text-right .x-btn-inner {
+  padding-right: 26px; }
+
+/* line 143, ../sass/murano/components/_button.scss */
+.x-btn-default-large-icon-text-right .x-btn-inner {
+  padding-right: 34px; }
+
+/* text w/ icon bottom */
+/* line 149, ../sass/murano/components/_button.scss */
+.x-btn-icon-text-bottom .x-btn-inner {
+  background-position: center bottom; }
+
+/* line 152, ../sass/murano/components/_button.scss */
+.x-btn-default-small-icon-text-bottom .x-btn-inner {
+  padding-bottom: 16px; }
+
+/* line 155, ../sass/murano/components/_button.scss */
+.x-btn-default-medium-icon-text-bottom .x-btn-inner {
+  padding-bottom: 24px; }
+
+/* line 158, ../sass/murano/components/_button.scss */
+.x-btn-default-large-icon-text-bottom .x-btn-inner {
+  padding-bottom: 32px; }
+
+/* arrow on right */
+/* line 163, ../sass/murano/components/_button.scss */
+.x-btn-arrow-right {
+  padding-right: 14px;
+  background: transparent url("../img/btn/menu.png") right center no-repeat; }
+
+/* arrow on botton */
+/* line 169, ../sass/murano/components/_button.scss */
+.x-btn-arrow-bottom {
+  padding-bottom: 14px;
+  background: transparent url("../img/btn/menu.png") center bottom no-repeat; }
+
+/* split on right */
+/* line 176, ../sass/murano/components/_button.scss */
+.x-btn-split-right {
+  padding-right: 16px;
+  background: transparent url("../img/btn/splith.png") right center no-repeat;
+  display: block; }
+
+/* split on bottom */
+/* line 184, ../sass/murano/components/_button.scss */
+.x-btn-split-bottom {
+  padding-bottom: 16px;
+  background: transparent url("../img/btn/splitv.png") center bottom no-repeat;
+  display: block; }
+
+/* line 1, ../sass/murano/components/_grid.scss */
+.x-grid-view {
+  position: relative;
+  overflow: hidden; }
+
+/* line 6, ../sass/murano/components/_grid.scss */
+.x-grid-header-ct {
+  background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #cccccc), color-stop(100%, #aaaaaa));
+  background: -webkit-linear-gradient(top, #cccccc, #aaaaaa);
+  background: -moz-linear-gradient(top, #cccccc, #aaaaaa);
+  background: -o-linear-gradient(top, #cccccc, #aaaaaa);
+  background: linear-gradient(top, #cccccc, #aaaaaa);
+  -moz-box-shadow: 0 1px 0 0 #999999;
+  -webkit-box-shadow: 0 1px 0 0 #999999;
+  -o-box-shadow: 0 1px 0 0 #999999;
+  box-shadow: 0 1px 0 0 #999999; }
+
+/* line 11, ../sass/murano/components/_grid.scss */
+.x-column-header {
+  border-top: 1px solid #DDD;
+  padding: 2px 5px;
+  color: #222;
+  text-shadow: 0 1px 0 #FFF;
+  white-space: nowrap;
+  border-right: 1px solid rgba(0, 0, 0, 0.1); }
+
+/* line 20, ../sass/murano/components/_grid.scss */
+.x-column-header {
+  overflow: hidden; }
+  /* line 22, ../sass/murano/components/_grid.scss */
+  .x-column-header .x-column-header-trigger {
+    display: none;
+    background: transparent url("../img/triggericons/spinner-down.png") center 6px no-repeat;
+    width: 20px; }
+  /* line 28, ../sass/murano/components/_grid.scss */
+  .x-column-header-over .x-column-header-trigger, .x-column-header-open .x-column-header-trigger {
+    display: block;
+    background-color: #AAA;
+    border-left: 1px solid #FFF;
+    border-right: 1px solid #888; }
+
+/* line 38, ../sass/murano/components/_grid.scss */
+.x-column-header-sort-DESC, .x-column-header-sort-ASC {
+  border-top: 1px solid #BBB;
+  background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #aaaaaa), color-stop(100%, #888888));
+  background: -webkit-linear-gradient(top, #aaaaaa, #888888);
+  background: -moz-linear-gradient(top, #aaaaaa, #888888);
+  background: -o-linear-gradient(top, #aaaaaa, #888888);
+  background: linear-gradient(top, #aaaaaa, #888888);
+  -moz-box-shadow: 0 1px 0 0 #777777;
+  -webkit-box-shadow: 0 1px 0 0 #777777;
+  -o-box-shadow: 0 1px 0 0 #777777;
+  box-shadow: 0 1px 0 0 #777777;
+  text-shadow: 0 1px 0 #DDD; }
+
+/* line 45, ../sass/murano/components/_grid.scss */
+.x-column-header-trigger {
+  width: 14px;
+  height: 100%;
+  position: absolute;
+  top: 0;
+  right: 0; }
+
+/* line 54, ../sass/murano/components/_grid.scss */
+.x-grid-table {
+  font-size: inherit;
+  border-collapse: separate;
+  border-spacing: 0;
+  table-layout: fixed; }
+  /* line 59, ../sass/murano/components/_grid.scss */
+  .x-grid-table td, .x-grid-table th {
+    overflow: hidden;
+    text-align: left;
+    white-space: nowrap;
+    vertical-align: top; }
+
+/* line 66, ../sass/murano/components/_grid.scss */
+.x-grid-cell-inner {
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  padding: 3px 6px; }
+
+/* line 75, ../sass/murano/components/_grid.scss */
+.x-grid-row td {
+  border-top: 1px solid transparent;
+  border-bottom: 1px solid transparent; }
+
+/* line 81, ../sass/murano/components/_grid.scss */
+.x-grid-row-alt {
+  background: rgba(255, 255, 255, 0.1); }
+  /* line 83, ../sass/murano/components/_grid.scss */
+  .x-grid-row-alt td {
+    border-top: 1px solid rgba(255, 255, 255, 0.05);
+    border-bottom: 1px solid rgba(255, 255, 255, 0.05); }
+
+/* line 90, ../sass/murano/components/_grid.scss */
+.x-grid-row-over td {
+  background: rgba(255, 255, 255, 0.05); }
+
+/* line 95, ../sass/murano/components/_grid.scss */
+.x-grid-row-selected {
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255, 255, 255, 0.25)), color-stop(50%, rgba(255, 255, 255, 0.15)), color-stop(50%, rgba(255, 255, 255, 0)), color-stop(100%, rgba(255, 255, 255, 0)));
+  background-image: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background-image: -moz-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background-image: -o-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background-image: linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background-color: #000; }
+  /* line 98, ../sass/murano/components/_grid.scss */
+  .x-grid-row-selected td {
+    border-top: 1px solid #1286f8;
+    border-bottom: 1px solid #066cd1; }
+
+/* line 104, ../sass/murano/components/_grid.scss */
+.x-grid-resize-marker {
+  background: #FFF;
+  width: 1px;
+  position: absolute; }
+
+/* line 112, ../sass/murano/components/_grid.scss */
+.x-grid-row-editor {
+  position: absolute !important;
+  z-index: 1;
+  zoom: 1;
+  overflow: visible !important; }
+  /* line 120, ../sass/murano/components/_grid.scss */
+  .x-grid-row-editor .x-form-display-field {
+    padding-top: 0; }
+  /* line 124, ../sass/murano/components/_grid.scss */
+  .x-grid-row-editor .x-panel-body {
+    border-top: 1px solid #066cd1 !important;
+    border-bottom: 1px solid #066cd1 !important;
+    border-left: none !important;
+    border-right: none !important; }
+
+/* line 137, ../sass/murano/components/_grid.scss */
+.x-grid-row-editor .x-form-text {
+  padding-left: 2px; }
+
+/* line 143, ../sass/murano/components/_grid.scss */
+.x-grid-editor .x-form-cb-wrap {
+  text-align: center; }
+
+/* line 148, ../sass/murano/components/_grid.scss */
+.x-grid-row-editor-buttons {
+  position: absolute;
+  bottom: -31px;
+  padding: 4px;
+  width: 200px;
+  height: 32px;
+  background: #222;
+  -moz-border-radius: 0 0 4px 4px;
+  -webkit-border-radius: 0 0 4px 4px;
+  -o-border-radius: 0 0 4px 4px;
+  -ms-border-radius: 0 0 4px 4px;
+  -khtml-border-radius: 0 0 4px 4px;
+  border-radius: 0 0 4px 4px;
+  border-bottom: 1px solid #066cd1;
+  border-left: 1px solid #066cd1;
+  border-right: 1px solid #066cd1; }
+  /* line 162, ../sass/murano/components/_grid.scss */
+  .x-strict .x-grid-row-editor-buttons {
+    width: 192px;
+    height: 24px; }
+
+/* line 169, ../sass/murano/components/_grid.scss */
+.x-grid-row-editor-errors ul {
+  margin-left: 5px; }
+/* line 172, ../sass/murano/components/_grid.scss */
+.x-grid-row-editor-errors li {
+  list-style: disc;
+  margin-left: 15px; }
+
+/* line 1, ../sass/murano/components/_toolbar.scss */
+.x-toolbar {
+  background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #222222), color-stop(10%, #444444), color-stop(90%, #666666), color-stop(100%, #444444));
+  background: -webkit-linear-gradient(top, #222222 0%, #444444 10%, #666666 90%, #444444 100%);
+  background: -moz-linear-gradient(top, #222222 0%, #444444 10%, #666666 90%, #444444 100%);
+  background: -o-linear-gradient(top, #222222 0%, #444444 10%, #666666 90%, #444444 100%);
+  background: linear-gradient(top, #222222 0%, #444444 10%, #666666 90%, #444444 100%);
+  padding: 3px 0; }
+
+/* line 7, ../sass/murano/components/_toolbar.scss */
+.x-toolbar-item {
+  margin-left: 3px;
+  margin-right: 3px;
+  white-space: nowrap; }
+
+/* line 14, ../sass/murano/components/_toolbar.scss */
+.x-toolbar-text {
+  font-size: 11px;
+  margin-left: 10px;
+  white-space: nowrap; }
+
+/* line 20, ../sass/murano/components/_toolbar.scss */
+.x-toolbar-separator {
+  border-right: 1px solid rgba(255, 255, 255, 0.25);
+  border-left: 1px solid rgba(0, 0, 0, 0.25);
+  height: 14px; }
+
+/* line 26, ../sass/murano/components/_toolbar.scss */
+.x-toolbar-separator-vertical {
+  width: 100%;
+  height: 0;
+  border-top: 1px solid rgba(0, 0, 0, 0.25);
+  border-bottom: 1px solid rgba(255, 255, 255, 0.25);
+  margin: 9px 0; }
+
+/* line 2, ../sass/murano/components/form/_htmleditor.scss */
+.x-html-editor-wrap {
+  border: 1px solid black; }
+  /* line 5, ../sass/murano/components/form/_htmleditor.scss */
+  .x-html-editor-wrap .x-toolbar {
+    border-top-width: 0;
+    border-left-width: 0;
+    border-right-width: 0; }
+  /* line 11, ../sass/murano/components/form/_htmleditor.scss */
+  .x-html-editor-wrap textarea {
+    background-color: white; }
+
+/* line 16, ../sass/murano/components/form/_htmleditor.scss */
+.x-html-editor-tb .x-btn-inner {
+  display: block;
+  width: 16px;
+  padding: 0;
+  height: 16px;
+  margin: 4px 2px;
+  background: transparent url("../img/editor/tb-sprite.png") no-repeat; }
+
+/* line 26, ../sass/murano/components/form/_htmleditor.scss */
+.x-html-editor-tb .x-edit-bold,
+.x-menu-item img.x-edit-bold {
+  background-position: 0 0;
+  background-image: url("../img/editor/tb-sprite.png"); }
+
+/* line 32, ../sass/murano/components/form/_htmleditor.scss */
+.x-html-editor-tb .x-edit-italic,
+.x-menu-item img.x-edit-italic {
+  background-position: -16px 0;
+  background-image: url("../img/editor/tb-sprite.png"); }
+
+/* line 38, ../sass/murano/components/form/_htmleditor.scss */
+.x-html-editor-tb .x-edit-underline,
+.x-menu-item img.x-edit-underline {
+  background-position: -32px 0;
+  background-image: url("../img/editor/tb-sprite.png"); }
+
+/* line 44, ../sass/murano/components/form/_htmleditor.scss */
+.x-html-editor-tb .x-edit-forecolor,
+.x-menu-item img.x-edit-forecolor {
+  background-position: -160px 0;
+  background-image: url("../img/editor/tb-sprite.png"); }
+
+/* line 50, ../sass/murano/components/form/_htmleditor.scss */
+.x-html-editor-tb .x-edit-backcolor,
+.x-menu-item img.x-edit-backcolor {
+  background-position: -176px 0;
+  background-image: url("../img/editor/tb-sprite.png"); }
+
+/* line 56, ../sass/murano/components/form/_htmleditor.scss */
+.x-html-editor-tb .x-edit-justifyleft,
+.x-menu-item img.x-edit-justifyleft {
+  background-position: -112px 0;
+  background-image: url("../img/editor/tb-sprite.png"); }
+
+/* line 62, ../sass/murano/components/form/_htmleditor.scss */
+.x-html-editor-tb .x-edit-justifycenter,
+.x-menu-item img.x-edit-justifycenter {
+  background-position: -128px 0;
+  background-image: url("../img/editor/tb-sprite.png"); }
+
+/* line 68, ../sass/murano/components/form/_htmleditor.scss */
+.x-html-editor-tb .x-edit-justifyright,
+.x-menu-item img.x-edit-justifyright {
+  background-position: -144px 0;
+  background-image: url("../img/editor/tb-sprite.png"); }
+
+/* line 74, ../sass/murano/components/form/_htmleditor.scss */
+.x-html-editor-tb .x-edit-insertorderedlist,
+.x-menu-item img.x-edit-insertorderedlist {
+  background-position: -80px 0;
+  background-image: url("../img/editor/tb-sprite.png"); }
+
+/* line 80, ../sass/murano/components/form/_htmleditor.scss */
+.x-html-editor-tb .x-edit-insertunorderedlist,
+.x-menu-item img.x-edit-insertunorderedlist {
+  background-position: -96px 0;
+  background-image: url("../img/editor/tb-sprite.png"); }
+
+/* line 86, ../sass/murano/components/form/_htmleditor.scss */
+.x-html-editor-tb .x-edit-increasefontsize,
+.x-menu-item img.x-edit-increasefontsize {
+  background-position: -48px 0;
+  background-image: url("../img/editor/tb-sprite.png"); }
+
+/* line 92, ../sass/murano/components/form/_htmleditor.scss */
+.x-html-editor-tb .x-edit-decreasefontsize,
+.x-menu-item img.x-edit-decreasefontsize {
+  background-position: -64px 0;
+  background-image: url("../img/editor/tb-sprite.png"); }
+
+/* line 98, ../sass/murano/components/form/_htmleditor.scss */
+.x-html-editor-tb .x-edit-sourceedit,
+.x-menu-item img.x-edit-sourceedit {
+  background-position: -192px 0;
+  background-image: url("../img/editor/tb-sprite.png"); }
+
+/* line 104, ../sass/murano/components/form/_htmleditor.scss */
+.x-html-editor-tb .x-edit-createlink,
+.x-menu-item img.x-edit-createlink {
+  background-position: -208px 0;
+  background-image: url("../img/editor/tb-sprite.png"); }
+
+/* line 109, ../sass/murano/components/form/_htmleditor.scss */
+.x-html-editor-tip .x-tip-bd .x-tip-bd-inner {
+  padding: 5px;
+  padding-bottom: 1px; }
+
+/* line 115, ../sass/murano/components/form/_htmleditor.scss */
+.x-html-editor-tb .x-toolbar {
+  position: static !important; }
+/* line 118, ../sass/murano/components/form/_htmleditor.scss */
+.x-html-editor-tb .x-font-select {
+  font-size: 11px; }
+
+/* line 123, ../sass/murano/components/form/_htmleditor.scss */
+.x-html-editor-wrap textarea {
+  border: 0;
+  padding: 3px 2px;
+  overflow: auto; }
+
+/* line 6, ../sass/murano/components/_form.scss */
+.x-form-item {
+  margin-bottom: 6px; }
+
+/* line 10, ../sass/murano/components/_form.scss */
+.x-form-item-body, .x-form-item-label-left {
+  float: left;
+  position: relative; }
+
+/* line 15, ../sass/murano/components/_form.scss */
+.x-form-text {
+  background: #444;
+  -moz-box-shadow: 0 5px 8px 0 rgba(0, 0, 0, 0.35) inset, 0 1px 0 0 rgba(255, 255, 255, 0.35), 0 0 0 1px rgba(255, 255, 255, 0.05) inset;
+  -webkit-box-shadow: 0 5px 8px 0 rgba(0, 0, 0, 0.35) inset, 0 1px 0 0 rgba(255, 255, 255, 0.35), 0 0 0 1px rgba(255, 255, 255, 0.05) inset;
+  -o-box-shadow: 0 5px 8px 0 rgba(0, 0, 0, 0.35) inset, 0 1px 0 0 rgba(255, 255, 255, 0.35), 0 0 0 1px rgba(255, 255, 255, 0.05) inset;
+  box-shadow: 0 5px 8px 0 rgba(0, 0, 0, 0.35) inset, 0 1px 0 0 rgba(255, 255, 255, 0.35), 0 0 0 1px rgba(255, 255, 255, 0.05) inset;
+  border: 1px solid #000;
+  color: #FFF;
+  color: #FFF;
+  padding: 0 3px; }
+
+/* line 24, ../sass/murano/components/_form.scss */
+.x-form-text:focus, .x-form-trigger-wrap-focus .x-form-text {
+  outline: none;
+  background: #666; }
+
+/* line 29, ../sass/murano/components/_form.scss */
+input.x-form-text {
+  height: 21px; }
+
+/* line 32, ../sass/murano/components/_form.scss */
+.x-form-invalid-field {
+  background: #700; }
+
+/* line 35, ../sass/murano/components/_form.scss */
+.x-form-invalid-icon {
+  text-indent: -9999px; }
+
+/* line 38, ../sass/murano/components/_form.scss */
+.x-form-invalid-icon ul {
+  display: none; }
+
+/* line 42, ../sass/murano/components/_form.scss */
+.x-form-checkbox, .x-form-radio {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  outline: 0;
+  height: 16px;
+  width: 16px; }
+
+/* line 50, ../sass/murano/components/_form.scss */
+.x-form-checkbox {
+  background: url("../img/form/unchecked.png"); }
+
+/* line 53, ../sass/murano/components/_form.scss */
+.x-form-cb-checked .x-form-checkbox {
+  background: url("../img/form/checked.png"); }
+
+/* line 57, ../sass/murano/components/_form.scss */
+.x-form-radio {
+  background: url("../img/form/unradioed.png"); }
+
+/* line 60, ../sass/murano/components/_form.scss */
+.x-form-cb-checked .x-form-radio {
+  background: url("../img/form/radioed.png"); }
+
+/* line 64, ../sass/murano/components/_form.scss */
+.x-form-cb-label-after {
+  margin-left: 3px; }
+
+/* line 68, ../sass/murano/components/_form.scss */
+.x-form-invalid-icon {
+  width: 20px;
+  height: 19px;
+  float: left;
+  background: url("../img/form/exclamation.png") right center no-repeat; }
+
+/* line 76, ../sass/murano/components/_form.scss */
+.x-form-field, .x-form-display-field {
+  float: left;
+  margin: 0; }
+
+/* line 82, ../sass/murano/components/_form.scss */
+.x-fieldset {
+  border: 1px solid #666;
+  padding: 10px;
+  margin-bottom: 10px; }
+
+/* line 87, ../sass/murano/components/_form.scss */
+.x-fieldset-header {
+  white-space: nowrap;
+  padding: 0 5px; }
+
+/* line 91, ../sass/murano/components/_form.scss */
+.x-fieldset-header-text {
+  float: left; }
+
+/* line 94, ../sass/murano/components/_form.scss */
+.x-fieldset-header .x-tool, .x-fieldset-header .x-form-item {
+  float: left;
+  margin-right: 3px; }
+
+/* line 98, ../sass/murano/components/_form.scss */
+.x-fieldset-collapsed {
+  border-width: 1px 1px 0 1px !important;
+  padding-bottom: 0px !important;
+  border-left-color: transparent;
+  border-right-color: transparent; }
+
+/* line 105, ../sass/murano/components/_form.scss */
+.x-boundlist, .x-menu {
+  background: #000;
+  border: 1px solid #333; }
+
+/* line 110, ../sass/murano/components/_form.scss */
+.x-boundlist-floating {
+  -moz-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.35);
+  -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.35);
+  -o-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.35);
+  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.35); }
+
+/* line 113, ../sass/murano/components/_form.scss */
+.x-boundlist-item {
+  padding: 1px 4px;
+  border: 1px solid transparent;
+  margin: 1px;
+  -moz-border-radius: 5px;
+  -webkit-border-radius: 5px;
+  -o-border-radius: 5px;
+  -ms-border-radius: 5px;
+  -khtml-border-radius: 5px;
+  border-radius: 5px; }
+  /* line 118, ../sass/murano/components/_form.scss */
+  .x-boundlist-item-over {
+    border: 1px solid #1286f8;
+    background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #1286f8), color-stop(100%, #066cd1));
+    background-image: -webkit-linear-gradient(#1286f8, #066cd1);
+    background-image: -moz-linear-gradient(#1286f8, #066cd1);
+    background-image: -o-linear-gradient(#1286f8, #066cd1);
+    background-image: linear-gradient(#1286f8, #066cd1);
+    -moz-box-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.15) inset;
+    -webkit-box-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.15) inset;
+    -o-box-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.15) inset;
+    box-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.15) inset; }
+
+/* line 124, ../sass/murano/components/_form.scss */
+.x-boundlist-selected {
+  border: 1px solid #066cd1;
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #066cd1), color-stop(100%, #05529f));
+  background-image: -webkit-linear-gradient(#066cd1, #05529f);
+  background-image: -moz-linear-gradient(#066cd1, #05529f);
+  background-image: -o-linear-gradient(#066cd1, #05529f);
+  background-image: linear-gradient(#066cd1, #05529f);
+  -moz-box-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.15) inset;
+  -webkit-box-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.15) inset;
+  -o-box-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.15) inset;
+  box-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.15) inset; }
+
+/* line 7, ../sass/murano/components/form/_triggers.scss */
+.x-form-trigger-wrap {
+  float: left;
+  -moz-box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.35);
+  -webkit-box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.35);
+  -o-box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.35);
+  box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.35);
+  overflow: hidden;
+  border: 1px solid #000;
+  border-left: 0;
+  -moz-border-radius: 0 4px 4px 0;
+  -webkit-border-radius: 0 4px 4px 0;
+  -o-border-radius: 0 4px 4px 0;
+  -ms-border-radius: 0 4px 4px 0;
+  -khtml-border-radius: 0 4px 4px 0;
+  border-radius: 0 4px 4px 0; }
+
+/* line 17, ../sass/murano/components/form/_triggers.scss */
+.x-form-trigger-wrap .x-form-spinner-up {
+  height: 10px;
+  -moz-border-radius: 0 3px 0 0;
+  -webkit-border-radius: 0 3px 0 0;
+  -o-border-radius: 0 3px 0 0;
+  -ms-border-radius: 0 3px 0 0;
+  -khtml-border-radius: 0 3px 0 0;
+  border-radius: 0 3px 0 0;
+  background: #666666 url("../img/triggericons/spinner-up.png") center top no-repeat;
+  border-bottom: 1px solid #444; }
+  /* line 22, ../sass/murano/components/form/_triggers.scss */
+  .x-form-trigger-wrap .x-form-spinner-up-over {
+    background-color: #999; }
+/* line 26, ../sass/murano/components/form/_triggers.scss */
+.x-form-trigger-wrap .x-form-spinner-down {
+  height: 9px;
+  border-top: none;
+  -moz-border-radius: 0 0 3px 0;
+  -webkit-border-radius: 0 0 3px 0;
+  -o-border-radius: 0 0 3px 0;
+  -ms-border-radius: 0 0 3px 0;
+  -khtml-border-radius: 0 0 3px 0;
+  border-radius: 0 0 3px 0;
+  background: #555555 url("../img/triggericons/spinner-down.png") center top no-repeat;
+  border-top: 1px solid #888; }
+  /* line 32, ../sass/murano/components/form/_triggers.scss */
+  .x-form-trigger-wrap .x-form-spinner-down-over {
+    background-color: #888;
+    border-color: #888; }
+
+/* line 39, ../sass/murano/components/form/_triggers.scss */
+.x-form-trigger-wrap-focus .x-form-spinner-up {
+  background-color: #999; }
+/* line 42, ../sass/murano/components/form/_triggers.scss */
+.x-form-trigger-wrap-focus .x-form-spinner-down {
+  background-color: #888; }
+
+/* line 48, ../sass/murano/components/form/_triggers.scss */
+.x-form-trigger-wrap-focus .x-form-trigger {
+  background-color: #AAA;
+  border-color: #AAA; }
+  /* line 51, ../sass/murano/components/form/_triggers.scss */
+  .x-form-trigger-wrap-focus .x-form-trigger-click {
+    background-color: #888;
+    border-color: #888; }
+
+/* line 58, ../sass/murano/components/form/_triggers.scss */
+.x-form-trigger {
+  -moz-border-radius: 0 3px 3px 0;
+  -webkit-border-radius: 0 3px 3px 0;
+  -o-border-radius: 0 3px 3px 0;
+  -ms-border-radius: 0 3px 3px 0;
+  -khtml-border-radius: 0 3px 3px 0;
+  border-radius: 0 3px 3px 0;
+  width: 16px;
+  height: 19px;
+  float: left;
+  background-color: #666;
+  border: 1px solid #666; }
+  /* line 65, ../sass/murano/components/form/_triggers.scss */
+  .x-form-trigger-over {
+    background-color: #AAA;
+    border-color: #AAA; }
+  /* line 69, ../sass/murano/components/form/_triggers.scss */
+  .x-form-trigger-click {
+    background-color: #888;
+    border-color: #888; }
+
+/* line 76, ../sass/murano/components/form/_triggers.scss */
+.x-form-clear-trigger {
+  -moz-border-radius: 0;
+  -webkit-border-radius: 0;
+  -o-border-radius: 0;
+  -ms-border-radius: 0;
+  -khtml-border-radius: 0;
+  border-radius: 0;
+  border-right-color: #888; }
+
+/* line 2, ../sass/murano/components/form/_triggers.scss */
+.x-form-arrow-trigger {
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(0, 0, 0, 0.2)), color-stop(100%, rgba(0, 0, 0, 0))), -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255, 255, 255, 0.25)), color-stop(50%, rgba(255, 255, 255, 0.15)), color-stop(50%, rgba(255, 255, 255, 0)), color-stop(100%, rgba(255, 255, 255, 0))), url("../img/triggericons/chev.png");
+  background-image: -webkit-linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0)), -webkit-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%), url("../img/triggericons/chev.png");
+  background-image: -moz-linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0)), -moz-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%), url("../img/triggericons/chev.png");
+  background-image: -o-linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0)), -o-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%), url("../img/triggericons/chev.png");
+  background-image: linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0)), linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%), url("../img/triggericons/chev.png"); }
+
+/* line 2, ../sass/murano/components/form/_triggers.scss */
+.x-form-time-trigger {
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(0, 0, 0, 0.2)), color-stop(100%, rgba(0, 0, 0, 0))), -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255, 255, 255, 0.25)), color-stop(50%, rgba(255, 255, 255, 0.15)), color-stop(50%, rgba(255, 255, 255, 0)), color-stop(100%, rgba(255, 255, 255, 0))), url("../img/triggericons/time.png");
+  background-image: -webkit-linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0)), -webkit-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%), url("../img/triggericons/time.png");
+  background-image: -moz-linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0)), -moz-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%), url("../img/triggericons/time.png");
+  background-image: -o-linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0)), -o-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%), url("../img/triggericons/time.png");
+  background-image: linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0)), linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%), url("../img/triggericons/time.png"); }
+
+/* line 2, ../sass/murano/components/form/_triggers.scss */
+.x-form-date-trigger {
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(0, 0, 0, 0.2)), color-stop(100%, rgba(0, 0, 0, 0))), -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255, 255, 255, 0.25)), color-stop(50%, rgba(255, 255, 255, 0.15)), color-stop(50%, rgba(255, 255, 255, 0)), color-stop(100%, rgba(255, 255, 255, 0))), url("../img/triggericons/date.png");
+  background-image: -webkit-linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0)), -webkit-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%), url("../img/triggericons/date.png");
+  background-image: -moz-linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0)), -moz-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%), url("../img/triggericons/date.png");
+  background-image: -o-linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0)), -o-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%), url("../img/triggericons/date.png");
+  background-image: linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0)), linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%), url("../img/triggericons/date.png"); }
+
+/* line 2, ../sass/murano/components/form/_triggers.scss */
+.x-form-clear-trigger {
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(0, 0, 0, 0.2)), color-stop(100%, rgba(0, 0, 0, 0))), -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255, 255, 255, 0.25)), color-stop(50%, rgba(255, 255, 255, 0.15)), color-stop(50%, rgba(255, 255, 255, 0)), color-stop(100%, rgba(255, 255, 255, 0))), url("../img/triggericons/clear.png");
+  background-image: -webkit-linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0)), -webkit-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%), url("../img/triggericons/clear.png");
+  background-image: -moz-linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0)), -moz-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%), url("../img/triggericons/clear.png");
+  background-image: -o-linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0)), -o-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%), url("../img/triggericons/clear.png");
+  background-image: linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0)), linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%), url("../img/triggericons/clear.png"); }
+
+/* line 2, ../sass/murano/components/form/_triggers.scss */
+.x-form-search-trigger {
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(0, 0, 0, 0.2)), color-stop(100%, rgba(0, 0, 0, 0))), -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255, 255, 255, 0.25)), color-stop(50%, rgba(255, 255, 255, 0.15)), color-stop(50%, rgba(255, 255, 255, 0)), color-stop(100%, rgba(255, 255, 255, 0))), url("../img/triggericons/search.png");
+  background-image: -webkit-linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0)), -webkit-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%), url("../img/triggericons/search.png");
+  background-image: -moz-linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0)), -moz-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%), url("../img/triggericons/search.png");
+  background-image: -o-linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0)), -o-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%), url("../img/triggericons/search.png");
+  background-image: linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0)), linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%), url("../img/triggericons/search.png"); }
+
+/* line 1, ../sass/murano/components/form/_slider.scss */
+.x-slider {
+  border: 1px solid #000;
+  -moz-border-radius: 6px;
+  -webkit-border-radius: 6px;
+  -o-border-radius: 6px;
+  -ms-border-radius: 6px;
+  -khtml-border-radius: 6px;
+  border-radius: 6px;
+  background: #333;
+  overflow: hidden;
+  position: relative; }
+
+/* line 9, ../sass/murano/components/form/_slider.scss */
+.x-slider-thumb {
+  height: 8px;
+  width: 8px;
+  -moz-border-radius: 5px;
+  -webkit-border-radius: 5px;
+  -o-border-radius: 5px;
+  -ms-border-radius: 5px;
+  -khtml-border-radius: 5px;
+  border-radius: 5px;
+  border: 1px solid #DDD;
+  background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #aaaaaa), color-stop(100%, #cccccc));
+  background: -webkit-linear-gradient(#aaaaaa, #cccccc);
+  background: -moz-linear-gradient(#aaaaaa, #cccccc);
+  background: -o-linear-gradient(#aaaaaa, #cccccc);
+  background: linear-gradient(#aaaaaa, #cccccc);
+  position: absolute;
+  -moz-box-shadow: 0 0 3px 0 rgba(0, 0, 0, 0.35);
+  -webkit-box-shadow: 0 0 3px 0 rgba(0, 0, 0, 0.35);
+  -o-box-shadow: 0 0 3px 0 rgba(0, 0, 0, 0.35);
+  box-shadow: 0 0 3px 0 rgba(0, 0, 0, 0.35); }
+
+/* line 19, ../sass/murano/components/form/_slider.scss */
+.x-slider-thumb-over {
+  border-color: #FFF;
+  background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #cccccc), color-stop(100%, #ffffff));
+  background: -webkit-linear-gradient(#cccccc, #ffffff);
+  background: -moz-linear-gradient(#cccccc, #ffffff);
+  background: -o-linear-gradient(#cccccc, #ffffff);
+  background: linear-gradient(#cccccc, #ffffff); }
+
+/* line 24, ../sass/murano/components/form/_slider.scss */
+.x-slider-horz {
+  -moz-box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.15), 0 2px 5px 0 rgba(0, 0, 0, 0.25) inset;
+  -webkit-box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.15), 0 2px 5px 0 rgba(0, 0, 0, 0.25) inset;
+  -o-box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.15), 0 2px 5px 0 rgba(0, 0, 0, 0.25) inset;
+  box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.15), 0 2px 5px 0 rgba(0, 0, 0, 0.25) inset;
+  height: 10px; }
+  /* line 27, ../sass/murano/components/form/_slider.scss */
+  .x-slider-horz .x-slider-end {
+    padding-right: 12px;
+    height: 10px; }
+  /* line 31, ../sass/murano/components/form/_slider.scss */
+  .x-slider-horz .x-slider-inner {
+    height: 10px; }
+  /* line 34, ../sass/murano/components/form/_slider.scss */
+  .x-slider-horz .x-slider-thumb {
+    margin-left: 5px; }
+
+/* line 39, ../sass/murano/components/form/_slider.scss */
+.x-slider-vert {
+  -moz-box-shadow: 1px 0 0 0 rgba(255, 255, 255, 0.15), 2px 0 5px 0 rgba(0, 0, 0, 0.25) inset;
+  -webkit-box-shadow: 1px 0 0 0 rgba(255, 255, 255, 0.15), 2px 0 5px 0 rgba(0, 0, 0, 0.25) inset;
+  -o-box-shadow: 1px 0 0 0 rgba(255, 255, 255, 0.15), 2px 0 5px 0 rgba(0, 0, 0, 0.25) inset;
+  box-shadow: 1px 0 0 0 rgba(255, 255, 255, 0.15), 2px 0 5px 0 rgba(0, 0, 0, 0.25) inset;
+  width: 10px; }
+  /* line 42, ../sass/murano/components/form/_slider.scss */
+  .x-slider-vert .x-slider-inner {
+    width: 10px; }
+  /* line 45, ../sass/murano/components/form/_slider.scss */
+  .x-slider-vert .x-slider-end {
+    padding-bottom: 10px;
+    width: 10px; }
+  /* line 49, ../sass/murano/components/form/_slider.scss */
+  .x-slider-vert .x-slider-thumb {
+    margin-top: 4px;
+    margin-bottom: 4px; }
+
+/* line 1, ../sass/murano/components/_tab.scss */
+.x-tab {
+  -moz-border-radius: 3px 3px 0 0;
+  -webkit-border-radius: 3px 3px 0 0;
+  -o-border-radius: 3px 3px 0 0;
+  -ms-border-radius: 3px 3px 0 0;
+  -khtml-border-radius: 3px 3px 0 0;
+  border-radius: 3px 3px 0 0;
+  border: 1px solid rgba(255, 255, 255, 0.15);
+  border-top: 1px solid rgba(255, 255, 255, 0.5);
+  border-bottom: none;
+  background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255, 255, 255, 0.25)), color-stop(50%, rgba(255, 255, 255, 0.15)), color-stop(50%, rgba(255, 255, 255, 0)), color-stop(100%, rgba(255, 255, 255, 0)));
+  background: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background: -moz-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background: -o-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background: linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background-color: #000;
+  margin-top: 2px;
+  margin-left: 4px;
+  -moz-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.5);
+  -webkit-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.5);
+  -o-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.5);
+  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.5);
+  padding: 3px 5px 6px 5px;
+  white-space: nowrap; }
+  /* line 13, ../sass/murano/components/_tab.scss */
+  .x-tab button {
+    color: #CCC;
+    text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.75); }
+
+/* line 21, ../sass/murano/components/_tab.scss */
+.x-tab-over {
+  border-color: #066cd1;
+  border-top-color: #439ffa; }
+  /* line 24, ../sass/murano/components/_tab.scss */
+  .x-tab-over button {
+    color: #FFF; }
+
+/* line 29, ../sass/murano/components/_tab.scss */
+.x-tab-active {
+  border-color: rgba(255, 255, 255, 0.35);
+  border-top-color: #FFF;
+  z-index: 3;
+  -moz-box-shadow: none;
+  -webkit-box-shadow: none;
+  -o-box-shadow: none;
+  box-shadow: none; }
+  /* line 32, ../sass/murano/components/_tab.scss */
+  .x-tab-active button {
+    color: #FFF; }
+
+/* line 39, ../sass/murano/components/_tab.scss */
+.x-tab button {
+  height: 14px;
+  line-height: 14px; }
+
+/* line 44, ../sass/murano/components/_tab.scss */
+.x-tab em {
+  display: block;
+  padding: 0 3px; }
+
+/* line 49, ../sass/murano/components/_tab.scss */
+.x-tab-closable em {
+  padding-right: 15px; }
+
+/* line 53, ../sass/murano/components/_tab.scss */
+.x-tab-close-btn {
+  position: absolute;
+  top: 3px;
+  right: 3px;
+  width: 11px;
+  height: 11px;
+  background: url("../img/tab/tab-close.png");
+  text-indent: -119988px; }
+
+/* line 63, ../sass/murano/components/_tab.scss */
+.x-tab-bar-strip {
+  z-index: 2;
+  border-top: 1px solid rgba(255, 255, 255, 0.35);
+  border-bottom: 1px solid rgba(255, 255, 255, 0.35);
+  margin-top: -1px;
+  height: 4px;
+  background: #000;
+  position: relative; }
+
+/* line 73, ../sass/murano/components/_tab.scss */
+.x-box-scroller {
+  width: 18px !important;
+  height: 22px !important; }
+
+/* line 78, ../sass/murano/components/_tab.scss */
+.x-tabbar-scroll-left {
+  background: url("../img/tab-bar/l.png") !important; }
+  /* line 80, ../sass/murano/components/_tab.scss */
+  .x-tabbar-scroll-left-hover {
+    background-position: left center !important; }
+  /* line 83, ../sass/murano/components/_tab.scss */
+  .x-tabbar-scroll-left-disabled {
+    background-position: left top !important; }
+
+/* line 89, ../sass/murano/components/_tab.scss */
+.x-tabbar-scroll-right {
+  background: url("../img/tab-bar/r.png") !important; }
+  /* line 91, ../sass/murano/components/_tab.scss */
+  .x-tabbar-scroll-right-hover {
+    background-position: left center !important; }
+  /* line 94, ../sass/murano/components/_tab.scss */
+  .x-tabbar-scroll-right-disabled {
+    background-position: left top !important; }
+
+/* line 99, ../sass/murano/components/_tab.scss */
+.x-tab-inner {
+  display: block; }
+  /* line 101, ../sass/murano/components/_tab.scss */
+  .x-tab-icon-text-left .x-tab-inner {
+    padding-left: 20px;
+    background-repeat: no-repeat;
+    background-position: left top; }
+
+/* line 1, ../sass/murano/components/_tooltip.scss */
+.x-tip, .x-form-invalid-tip {
+  background-color: #05529f;
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255, 255, 255, 0.25)), color-stop(50%, rgba(255, 255, 255, 0.15)), color-stop(50%, rgba(255, 255, 255, 0)), color-stop(100%, rgba(255, 255, 255, 0)));
+  background-image: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background-image: -moz-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background-image: -o-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background-image: linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  padding: 4px;
+  -moz-border-radius: 5px;
+  -webkit-border-radius: 5px;
+  -o-border-radius: 5px;
+  -ms-border-radius: 5px;
+  -khtml-border-radius: 5px;
+  border-radius: 5px;
+  -moz-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.7), 0 0 0 1px rgba(255, 255, 255, 0.25) inset;
+  -webkit-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.7), 0 0 0 1px rgba(255, 255, 255, 0.25) inset;
+  -o-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.7), 0 0 0 1px rgba(255, 255, 255, 0.25) inset;
+  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.7), 0 0 0 1px rgba(255, 255, 255, 0.25) inset; }
+
+/* line 9, ../sass/murano/components/_tooltip.scss */
+.x-form-invalid-tip {
+  background-color: #800000; }
+
+/* line 13, ../sass/murano/components/_tooltip.scss */
+.x-tip-header {
+  font-weight: bold; }
+
+/* line 17, ../sass/murano/components/_tooltip.scss */
+.x-tip-body {
+  position: relative; }
+
+/* line 1, ../sass/murano/components/_progress_bar.scss */
+.x-progress {
+  position: relative;
+  height: 16px;
+  border: 1px solid #000;
+  text-align: center;
+  text-shadow: none;
+  -moz-border-radius: 10px;
+  -webkit-border-radius: 10px;
+  -o-border-radius: 10px;
+  -ms-border-radius: 10px;
+  -khtml-border-radius: 10px;
+  border-radius: 10px;
+  overflow: hidden;
+  background: #333;
+  -moz-box-shadow: 0 3px 5px 0 rgba(0, 0, 0, 0.35) inset, 0 1px 0 0 rgba(255, 255, 255, 0.25);
+  -webkit-box-shadow: 0 3px 5px 0 rgba(0, 0, 0, 0.35) inset, 0 1px 0 0 rgba(255, 255, 255, 0.25);
+  -o-box-shadow: 0 3px 5px 0 rgba(0, 0, 0, 0.35) inset, 0 1px 0 0 rgba(255, 255, 255, 0.25);
+  box-shadow: 0 3px 5px 0 rgba(0, 0, 0, 0.35) inset, 0 1px 0 0 rgba(255, 255, 255, 0.25);
+  padding: 1px 0;
+  font-size: 10px;
+  text-transform: uppercase;
+  letter-spacing: 1px; }
+
+/* line 16, ../sass/murano/components/_progress_bar.scss */
+.x-progress-bar {
+  background: #FFF;
+  position: absolute;
+  left: 0;
+  top: 0;
+  height: 14px;
+  border: 1px solid #666;
+  -moz-border-radius: 10px;
+  -webkit-border-radius: 10px;
+  -o-border-radius: 10px;
+  -ms-border-radius: 10px;
+  -khtml-border-radius: 10px;
+  border-radius: 10px;
+  background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #444444), color-stop(100%, #666666));
+  background: -webkit-linear-gradient(#444444, #666666);
+  background: -moz-linear-gradient(#444444, #666666);
+  background: -o-linear-gradient(#444444, #666666);
+  background: linear-gradient(#444444, #666666);
+  -moz-box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.5);
+  -webkit-box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.5);
+  -o-box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.5);
+  box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.5);
+  overflow: hidden; }
+
+/* line 29, ../sass/murano/components/_progress_bar.scss */
+.x-progress-text {
+  color: #FFF;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.35); }
+
+/* line 34, ../sass/murano/components/_progress_bar.scss */
+.x-progress-text-back {
+  color: #999; }
+
+/* line 1, ../sass/murano/components/_datepicker.scss */
+.x-datepicker {
+  background-color: #000;
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #333333), color-stop(100%, #000000));
+  background-image: -webkit-linear-gradient(#333333, #000000);
+  background-image: -moz-linear-gradient(#333333, #000000);
+  background-image: -o-linear-gradient(#333333, #000000);
+  background-image: linear-gradient(#333333, #000000);
+  border-left: 1px solid #000;
+  border-right: 1px solid #000; }
+
+/* line 7, ../sass/murano/components/_datepicker.scss */
+.x-datepicker-prev, .x-datepicker-next {
+  position: absolute;
+  top: 8px;
+  left: 5px; }
+  /* line 11, ../sass/murano/components/_datepicker.scss */
+  .x-datepicker-prev a, .x-datepicker-next a {
+    display: block;
+    height: 15px;
+    width: 15px;
+    background: url("../img/shared/btn-left.png"); }
+
+/* line 18, ../sass/murano/components/_datepicker.scss */
+.x-datepicker-next {
+  right: 5px;
+  left: auto; }
+  /* line 21, ../sass/murano/components/_datepicker.scss */
+  .x-datepicker-next a {
+    background: url("../img/shared/btn-right.png"); }
+
+/* line 25, ../sass/murano/components/_datepicker.scss */
+.x-datepicker-header, .x-datepicker-footer {
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #333333), color-stop(100%, #111111));
+  background-image: -webkit-linear-gradient(#333333, #111111);
+  background-image: -moz-linear-gradient(#333333, #111111);
+  background-image: -o-linear-gradient(#333333, #111111);
+  background-image: linear-gradient(#333333, #111111);
+  border-bottom: 1px solid #000;
+  border-top: 1px solid #444;
+  padding: 3px 28px;
+  text-align: center; }
+
+/* line 32, ../sass/murano/components/_datepicker.scss */
+.x-datepicker-inner {
+  font-size: inherit;
+  margin-bottom: 0;
+  width: 100%;
+  table-layout: fixed; }
+  /* line 36, ../sass/murano/components/_datepicker.scss */
+  .x-datepicker-inner th, .x-datepicker-inner td {
+    text-align: center; }
+  /* line 39, ../sass/murano/components/_datepicker.scss */
+  .x-datepicker-inner thead {
+    border-top: 1px solid #777;
+    color: #CCC;
+    background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #666666), color-stop(100%, #444444));
+    background-image: -webkit-linear-gradient(#666666, #444444);
+    background-image: -moz-linear-gradient(#666666, #444444);
+    background-image: -o-linear-gradient(#666666, #444444);
+    background-image: linear-gradient(#666666, #444444);
+    border-bottom: 1px solid #222; }
+
+/* line 48, ../sass/murano/components/_datepicker.scss */
+.x-datepicker-inner a {
+  display: block;
+  text-decoration: none;
+  color: #CCC;
+  border: 1px solid transparent; }
+  /* line 53, ../sass/murano/components/_datepicker.scss */
+  .x-datepicker-inner a em, .x-datepicker-inner a span {
+    display: block; }
+  /* line 56, ../sass/murano/components/_datepicker.scss */
+  .x-datepicker-inner a em {
+    border: 1px solid transparent; }
+
+/* line 60, ../sass/murano/components/_datepicker.scss */
+.x-datepicker-prevday a {
+  color: #666; }
+
+/* line 63, ../sass/murano/components/_datepicker.scss */
+.x-datepicker-today span {
+  background-color: #555;
+  -moz-border-radius: 2px;
+  -webkit-border-radius: 2px;
+  -o-border-radius: 2px;
+  -ms-border-radius: 2px;
+  -khtml-border-radius: 2px;
+  border-radius: 2px; }
+
+/* line 67, ../sass/murano/components/_datepicker.scss */
+.x-datepicker-selected a {
+  border-color: rgba(0, 0, 0, 0.25); }
+  /* line 69, ../sass/murano/components/_datepicker.scss */
+  .x-datepicker-selected a em {
+    border-color: #066cd1;
+    border-top-color: #439ffa;
+    border-bottom-color: #05529f; }
+  /* line 74, ../sass/murano/components/_datepicker.scss */
+  .x-datepicker-selected a span {
+    background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255, 255, 255, 0.25)), color-stop(50%, rgba(255, 255, 255, 0.15)), color-stop(50%, rgba(255, 255, 255, 0)), color-stop(100%, rgba(255, 255, 255, 0)));
+    background-image: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+    background-image: -moz-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+    background-image: -o-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+    background-image: linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+    color: #FFF;
+    -moz-border-radius: 0;
+    -webkit-border-radius: 0;
+    -o-border-radius: 0;
+    -ms-border-radius: 0;
+    -khtml-border-radius: 0;
+    border-radius: 0; }
+
+/* line 81, ../sass/murano/components/_datepicker.scss */
+.x-monthpicker {
+  background: #000;
+  font-size: 11px; }
+  /* line 83, ../sass/murano/components/_datepicker.scss */
+  .x-monthpicker a {
+    text-decoration: none;
+    color: #CCC; }
+
+/* line 89, ../sass/murano/components/_datepicker.scss */
+.x-monthpicker-years {
+  width: 88px;
+  float: right; }
+
+/* line 93, ../sass/murano/components/_datepicker.scss */
+.x-monthpicker-months {
+  width: 87px;
+  float: left;
+  border-right: 1px solid #444; }
+
+/* line 98, ../sass/murano/components/_datepicker.scss */
+.x-monthpicker-item {
+  width: 43px;
+  float: left;
+  margin: 4px 0;
+  text-align: center; }
+  /* line 103, ../sass/murano/components/_datepicker.scss */
+  .x-monthpicker-item a {
+    display: block;
+    border: 1px solid transparent;
+    margin: 0 3px;
+    padding: 2px 0;
+    -moz-border-radius: 3px;
+    -webkit-border-radius: 3px;
+    -o-border-radius: 3px;
+    -ms-border-radius: 3px;
+    -khtml-border-radius: 3px;
+    border-radius: 3px; }
+    /* line 106, ../sass/murano/components/_datepicker.scss */
+    .x-monthpicker-item a:hover {
+      background-color: #333; }
+  /* line 113, ../sass/murano/components/_datepicker.scss */
+  .x-monthpicker-item .x-monthpicker-selected {
+    background-color: #333;
+    border: 1px solid #555;
+    border-top-color: #999;
+    border-bottom-color: #444;
+    background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255, 255, 255, 0.25)), color-stop(50%, rgba(255, 255, 255, 0.15)), color-stop(50%, rgba(255, 255, 255, 0)), color-stop(100%, rgba(255, 255, 255, 0)));
+    background-image: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+    background-image: -moz-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+    background-image: -o-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+    background-image: linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+    color: #FFF; }
+
+/* line 122, ../sass/murano/components/_datepicker.scss */
+.x-monthpicker-yearnav-prev, .x-monthpicker-yearnav-next {
+  margin: 6px 12px 6px 15px;
+  float: left;
+  display: block;
+  height: 15px;
+  width: 15px;
+  background: url("../img/shared/btn-left.png"); }
+
+/* line 130, ../sass/murano/components/_datepicker.scss */
+.x-monthpicker-yearnav-next {
+  background: url("../img/shared/btn-right.png"); }
+
+/* line 133, ../sass/murano/components/_datepicker.scss */
+.x-monthpicker .x-btn, .x-monthpicker .x-btn-pressed {
+  width: 80px;
+  float: left;
+  margin: 4px; }
+
+/* line 138, ../sass/murano/components/_datepicker.scss */
+.x-monthpicker-buttons {
+  border-top: 1px solid #777;
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #666666), color-stop(100%, #444444));
+  background-image: -webkit-linear-gradient(#666666, #444444);
+  background-image: -moz-linear-gradient(#666666, #444444);
+  background-image: -o-linear-gradient(#666666, #444444);
+  background-image: linear-gradient(#666666, #444444);
+  padding: 2px 1px;
+  overflow: hidden;
+  *zoom: 1; }
+
+/* line 145, ../sass/murano/components/_datepicker.scss */
+.x-datepicker-footer {
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #666666), color-stop(100%, #444444));
+  background-image: -webkit-linear-gradient(#666666, #444444);
+  background-image: -moz-linear-gradient(#666666, #444444);
+  background-image: -o-linear-gradient(#666666, #444444);
+  background-image: linear-gradient(#666666, #444444);
+  border-top-color: #777;
+  border-bottom-color: #222; }
+
+/* line 1, ../sass/murano/components/_sizer.scss */
+.x-resizable-handle-west {
+  background: transparent url("../img/sizer/w.png") left center no-repeat !important; }
+
+/* line 4, ../sass/murano/components/_sizer.scss */
+.x-resizable-handle-east {
+  background: transparent url("../img/sizer/e.png") right center no-repeat !important; }
+
+/* line 7, ../sass/murano/components/_sizer.scss */
+.x-resizable-handle-north {
+  background: transparent url("../img/sizer/n.png") top center no-repeat !important; }
+
+/* line 10, ../sass/murano/components/_sizer.scss */
+.x-resizable-handle-south {
+  background: transparent url("../img/sizer/s.png") bottom center no-repeat !important; }
+
+/* line 13, ../sass/murano/components/_sizer.scss */
+.x-resizable-handle-northwest {
+  background: transparent url("../img/sizer/nw.png") left top no-repeat !important; }
+
+/* line 16, ../sass/murano/components/_sizer.scss */
+.x-resizable-handle-northeast {
+  background: transparent url("../img/sizer/ne.png") right top no-repeat !important; }
+
+/* line 19, ../sass/murano/components/_sizer.scss */
+.x-resizable-handle-southwest {
+  background: transparent url("../img/sizer/sw.png") left bottom no-repeat !important; }
+
+/* line 22, ../sass/murano/components/_sizer.scss */
+.x-resizable-handle-southeast {
+  background: transparent url("../img/sizer/se.png") right bottom no-repeat !important; }
+
+/* line 10, ../sass/murano/components/_tree.scss */
+.x-tree-panel .x-grid-row-selected {
+  background-color: #000;
+  color: #FFF; }
+  /* line 13, ../sass/murano/components/_tree.scss */
+  .x-tree-panel .x-grid-row-selected td {
+    -moz-box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.1);
+    -webkit-box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.1);
+    -o-box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.1);
+    box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.1); }
+
+/* line 19, ../sass/murano/components/_tree.scss */
+.x-tree-no-lines .x-tree-elbow {
+  background-color: transparent; }
+
+/* line 23, ../sass/murano/components/_tree.scss */
+.x-tree-no-lines .x-tree-elbow-end {
+  background-color: transparent; }
+
+/* line 27, ../sass/murano/components/_tree.scss */
+.x-tree-no-lines .x-tree-elbow-line {
+  background-color: transparent; }
+
+/* line 32, ../sass/murano/components/_tree.scss */
+.x-tree-arrows .x-tree-elbow-plus {
+  background: transparent no-repeat 0 0; }
+
+/* line 36, ../sass/murano/components/_tree.scss */
+.x-tree-arrows .x-tree-elbow-end-plus {
+  background: transparent no-repeat 0 0; }
+
+/* line 40, ../sass/murano/components/_tree.scss */
+.x-tree-arrows .x-tree-elbow-end-minus {
+  background: transparent no-repeat -16px 0; }
+
+/* line 44, ../sass/murano/components/_tree.scss */
+.x-tree-arrows .x-tree-elbow-minus {
+  background: transparent no-repeat -16px 0; }
+
+/* line 48, ../sass/murano/components/_tree.scss */
+.x-tree-arrows .x-tree-elbow {
+  background-color: transparent !important; }
+
+/* line 52, ../sass/murano/components/_tree.scss */
+.x-tree-arrows .x-tree-elbow-end {
+  background-color: transparent !important; }
+
+/* line 56, ../sass/murano/components/_tree.scss */
+.x-tree-arrows .x-tree-elbow-line {
+  background-color: transparent !important; }
+
+/* line 62, ../sass/murano/components/_tree.scss */
+.x-tree-arrows .x-tree-expander-over .x-tree-elbow-plus,
+.x-tree-arrows .x-tree-expander-over .x-tree-elbow-end-plus {
+  background-position: -32px 0; }
+
+/* line 67, ../sass/murano/components/_tree.scss */
+.x-tree-arrows .x-tree-expander-over .x-tree-elbow-minus,
+.x-tree-arrows .x-tree-expander-over .x-tree-elbow-end-minus {
+  background-position: -48px 0; }
+
+/* line 72, ../sass/murano/components/_tree.scss */
+.x-tree-arrows .x-grid-tree-node-expanded .x-tree-elbow-plus,
+.x-tree-arrows .x-grid-tree-node-expanded .x-tree-elbow-end-plus {
+  background-position: -16px 0; }
+
+/* line 77, ../sass/murano/components/_tree.scss */
+.x-tree-arrows .x-grid-tree-node-expanded .x-tree-expander-over .x-tree-elbow-plus,
+.x-tree-arrows .x-grid-tree-node-expanded .x-tree-expander-over .x-tree-elbow-end-plus {
+  background-position: -48px 0; }
+
+/* line 84, ../sass/murano/components/_tree.scss */
+.x-tree-elbow-plus,
+.x-tree-elbow-minus,
+.x-tree-elbow-end-plus,
+.x-tree-elbow-end-minus {
+  cursor: pointer; }
+
+/* line 90, ../sass/murano/components/_tree.scss */
+.x-tree-lines .x-tree-elbow {
+  background-image: url("../img/tree/elbow.gif"); }
+/* line 94, ../sass/murano/components/_tree.scss */
+.x-tree-lines .x-tree-elbow-end {
+  background-image: url("../img/tree/elbow-end.gif"); }
+/* line 98, ../sass/murano/components/_tree.scss */
+.x-tree-lines .x-tree-elbow-plus {
+  background-image: url("../../fugue-icons/icons-shadowless/plus-small-white.png"); }
+/* line 103, ../sass/murano/components/_tree.scss */
+.x-tree-lines .x-tree-elbow-end-plus {
+  background-image: url("../../fugue-icons/icons-shadowless/plus-small-white.png"); }
+/* line 108, ../sass/murano/components/_tree.scss */
+.x-tree-lines .x-grid-tree-node-expanded .x-tree-elbow-plus {
+  background-image: url("../../fugue-icons/icons-shadowless/minus-small-white.png"); }
+/* line 113, ../sass/murano/components/_tree.scss */
+.x-tree-lines .x-grid-tree-node-expanded .x-tree-elbow-end-plus {
+  background-image: url("../../fugue-icons/icons-shadowless/minus-small-white.png"); }
+/* line 118, ../sass/murano/components/_tree.scss */
+.x-tree-lines .x-tree-elbow-line {
+  background-image: url("../img/tree/elbow-line.gif"); }
+
+/* line 125, ../sass/murano/components/_tree.scss */
+.x-tree-no-lines .x-tree-elbow-plus,
+.x-tree-no-lines .x-tree-elbow-end-plus {
+  background-image: url("../img/tree/elbow-plus-nl.gif"); }
+/* line 130, ../sass/murano/components/_tree.scss */
+.x-tree-no-lines .x-grid-tree-node-expanded .x-tree-elbow-plus,
+.x-tree-no-lines .x-grid-tree-node-expanded .x-tree-elbow-end-plus {
+  background-image: url("../img/tree/elbow-end-minus-nl.gif"); }
+
+/* line 139, ../sass/murano/components/_tree.scss */
+.x-tree-arrows .x-tree-elbow-plus,
+.x-tree-arrows .x-tree-elbow-minus,
+.x-tree-arrows .x-tree-elbow-end-plus,
+.x-tree-arrows .x-tree-elbow-end-minus {
+  background-image: url("../img/tree/arrows.gif"); }
+
+/* line 144, ../sass/murano/components/_tree.scss */
+.x-tree-icon {
+  margin-right: 3px; }
+
+/* line 153, ../sass/murano/components/_tree.scss */
+.x-tree-elbow,
+.x-tree-elbow-end,
+.x-tree-elbow-plus,
+.x-tree-elbow-end-plus,
+.x-tree-elbow-empty,
+.x-tree-elbow-line {
+  height: 16px;
+  width: 16px; }
+
+/* line 158, ../sass/murano/components/_tree.scss */
+.x-tree-icon-leaf {
+  width: 16px;
+  background-image: url("../../fugue-icons/icons-shadowless/leaf.png"); }
+
+/* line 163, ../sass/murano/components/_tree.scss */
+.x-tree-icon-parent {
+  width: 16px;
+  background-image: url("../../fugue-icons/icons-shadowless/folder-horizontal.png"); }
+
+/* line 168, ../sass/murano/components/_tree.scss */
+.x-grid-tree-node-expanded .x-tree-icon-parent {
+  background-image: url("../../fugue-icons/icons-shadowless/folder-horizontal-open.png"); }
+
+/* line 172, ../sass/murano/components/_tree.scss */
+.x-grid-rowbody {
+  padding: 0; }
+
+/* line 176, ../sass/murano/components/_tree.scss */
+.x-tree-panel .x-grid-cell-inner {
+  padding: 0px; }
+
+/* line 180, ../sass/murano/components/_tree.scss */
+.x-tree-panel .x-grid-row .x-grid-cell {
+  border: none; }
+
+/* line 184, ../sass/murano/components/_tree.scss */
+.x-tree-panel .x-grid-row .x-grid-cell-inner {
+  height: 16px;
+  line-height: 16px;
+  vertical-align: middle;
+  cursor: pointer; }
+  /* line 191, ../sass/murano/components/_tree.scss */
+  .x-tree-panel .x-grid-row .x-grid-cell-inner img {
+    float: left; }
+
+/* line 197, ../sass/murano/components/_tree.scss */
+.x-ie .x-tree-panel .x-grid-row .x-grid-cell-inner {
+  white-space: normal; }
+
+/* line 203, ../sass/murano/components/_tree.scss */
+.x-tree-checkbox {
+  float: left;
+  margin: 2px 3px 0 0;
+  display: block;
+  width: 16px;
+  height: 16px;
+  background: url('../img/url("../img/form/unchecked.png")') no-repeat;
+  overflow: hidden;
+  padding: 0;
+  border: 0; }
+  /* line 215, ../sass/murano/components/_tree.scss */
+  .x-tree-checkbox::-moz-focus-inner {
+    padding: 0;
+    border: 0; }
+
+/* Hack for IE; causes alignment problem in IE9 standards mode so exclude that */
+/* line 223, ../sass/murano/components/_tree.scss */
+.x-nbr.x-ie .x-tree-checkbox {
+  font-size: 0; }
+
+/* line 228, ../sass/murano/components/_tree.scss */
+.x-tree-checkbox-checked {
+  background: url('../img/url("../img/form/checked.png")') no-repeat; }
+
+/* line 233, ../sass/murano/components/_tree.scss */
+.x-tree-panel .x-grid-cell-inner {
+  border-width: 0 !important; }
+
+/* line 240, ../sass/murano/components/_tree.scss */
+.x-gecko .x-tree-panel .x-grid-row .x-grid-cell-inner {
+  line-height: 14px; }
+
+/* line 246, ../sass/murano/components/_tree.scss */
+.x-tree-drop-ok-append .x-dd-drop-icon {
+  background-image: url("../img/tree/drop-append.gif"); }
+
+/* line 250, ../sass/murano/components/_tree.scss */
+.x-tree-drop-ok-above .x-dd-drop-icon {
+  background-image: url("../img/tree/drop-above.gif"); }
+
+/* line 254, ../sass/murano/components/_tree.scss */
+.x-tree-drop-ok-below .x-dd-drop-icon {
+  background-image: url("../img/tree/drop-below.gif"); }
+
+/* line 258, ../sass/murano/components/_tree.scss */
+.x-tree-drop-ok-between .x-dd-drop-icon {
+  background-image: url("../img/tree/drop-between.gif"); }
+
+/* line 262, ../sass/murano/components/_tree.scss */
+.x-grid-tree-loading .x-tree-icon {
+  background-image: url("../img/tree/loading.gif"); }
+
+/* line 266, ../sass/murano/components/_tree.scss */
+.x-tree-ddindicator {
+  height: 1px;
+  border-width: 1px 0px 0px;
+  border-style: dotted;
+  border-color: green; }
+
+/* line 273, ../sass/murano/components/_tree.scss */
+.x-grid-tree-loading span {
+  font-style: italic;
+  color: #444444; }
+
+/* line 278, ../sass/murano/components/_tree.scss */
+.x-tree-animator-wrap {
+  overflow: hidden; }
+
+/* line 1, ../sass/murano/components/_menu.scss */
+.x-menu {
+  -moz-box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.35);
+  -webkit-box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.35);
+  -o-box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.35);
+  box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.35);
+  white-space: nowrap; }
+
+/* line 7, ../sass/murano/components/_menu.scss */
+.x-menu-body {
+  position: absolute; }
+
+/* line 11, ../sass/murano/components/_menu.scss */
+.x-menu-item {
+  padding: 2px; }
+
+/* line 15, ../sass/murano/components/_menu.scss */
+.x-menu-item-link {
+  padding: 4px;
+  border: 1px solid transparent;
+  -moz-border-radius: 5px;
+  -webkit-border-radius: 5px;
+  -o-border-radius: 5px;
+  -ms-border-radius: 5px;
+  -khtml-border-radius: 5px;
+  border-radius: 5px;
+  text-decoration: none;
+  display: block;
+  color: #FFF; }
+
+/* line 24, ../sass/murano/components/_menu.scss */
+.x-menu-item-active .x-menu-item-link {
+  border-color: #066cd1;
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #066cd1), color-stop(100%, #05529f));
+  background-image: -webkit-linear-gradient(#066cd1, #05529f);
+  background-image: -moz-linear-gradient(#066cd1, #05529f);
+  background-image: -o-linear-gradient(#066cd1, #05529f);
+  background-image: linear-gradient(#066cd1, #05529f);
+  -moz-box-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.15) inset;
+  -webkit-box-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.15) inset;
+  -o-box-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.15) inset;
+  box-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.15) inset; }
+
+/* line 30, ../sass/murano/components/_menu.scss */
+.x-menu-item-icon {
+  width: 16px;
+  height: 16px;
+  margin-right: 5px;
+  float: left; }
+
+/* line 38, ../sass/murano/components/_menu.scss */
+.x-menu-item-unchecked .x-menu-item-icon {
+  background: url("../img/form/unchecked.png"); }
+/* line 41, ../sass/murano/components/_menu.scss */
+.x-menu-item-unchecked .x-menu-group-icon {
+  background: url("../img/form/unradioed.png"); }
+
+/* line 46, ../sass/murano/components/_menu.scss */
+.x-menu-item-checked .x-menu-item-icon {
+  background: url("../img/form/checked.png"); }
+/* line 49, ../sass/murano/components/_menu.scss */
+.x-menu-item-checked .x-menu-group-icon {
+  background: url("../img/form/radioed.png"); }
+
+/* line 54, ../sass/murano/components/_menu.scss */
+.x-menu-item-separator {
+  height: 0;
+  padding: 0;
+  margin: 3px 9px 3px 10px;
+  border-bottom: 1px solid rgba(255, 255, 255, 0.25); }
+
+/* line 3, ../sass/murano/components/_scroller.scss */
+.x-scroller {
+  border: none !important; }
+  /* line 5, ../sass/murano/components/_scroller.scss */
+  .x-scroller::-webkit-scrollbar {
+    width: 16px;
+    height: 16px; }
+    /* line 8, ../sass/murano/components/_scroller.scss */
+    .x-scroller::-webkit-scrollbar-track {
+      background: transparent; }
+    /* line 11, ../sass/murano/components/_scroller.scss */
+    .x-scroller::-webkit-scrollbar-track-piece:start {
+      margin-left: 1px;
+      margin-top: 1px; }
+    /* line 15, ../sass/murano/components/_scroller.scss */
+    .x-scroller::-webkit-scrollbar-track-piece:end {
+      margin-right: 1px;
+      margin-bottom: 1px; }
+    /* line 19, ../sass/murano/components/_scroller.scss */
+    .x-scroller::-webkit-scrollbar-thumb {
+      border: 1px solid #000;
+      background-color: #666666;
+      -moz-border-radius: 8px;
+      -webkit-border-radius: 8px;
+      -o-border-radius: 8px;
+      -ms-border-radius: 8px;
+      -khtml-border-radius: 8px;
+      border-radius: 8px;
+      -moz-box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.35) inset, 0 -1px 0 0 black inset;
+      -webkit-box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.35) inset, 0 -1px 0 0 black inset;
+      -o-box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.35) inset, 0 -1px 0 0 black inset;
+      box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.35) inset, 0 -1px 0 0 black inset; }
+      /* line 24, ../sass/murano/components/_scroller.scss */
+      .x-scroller::-webkit-scrollbar-thumb:hover {
+        background-color: #737373; }
+      /* line 27, ../sass/murano/components/_scroller.scss */
+      .x-scroller::-webkit-scrollbar-thumb:active {
+        background-color: gray; }
+
+/* line 34, ../sass/murano/components/_scroller.scss */
+.x-scroller-vertical::-webkit-scrollbar-thumb {
+  background-image: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(255, 255, 255, 0.25)), color-stop(50%, rgba(255, 255, 255, 0.15)), color-stop(50%, rgba(255, 255, 255, 0)), color-stop(100%, rgba(255, 255, 255, 0)));
+  background-image: -webkit-linear-gradient(left, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background-image: -moz-linear-gradient(left, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background-image: -o-linear-gradient(left, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background-image: linear-gradient(left, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%); }
+
+/* line 37, ../sass/murano/components/_scroller.scss */
+.x-scroller-horizontal::-webkit-scrollbar-thumb {
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255, 255, 255, 0.25)), color-stop(50%, rgba(255, 255, 255, 0.15)), color-stop(50%, rgba(255, 255, 255, 0)), color-stop(100%, rgba(255, 255, 255, 0)));
+  background-image: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background-image: -moz-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background-image: -o-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
+  background-image: linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%); }
+
+/* line 1, ../sass/murano/components/_splitter.scss */
+.x-splitter {
+  background-color: #000; }
+
+/* line 1, ../sass/murano/components/_icons.scss */
+.x-tbar-page-prev {
+  background: transparent url("../../fugue-icons/icons-shadowless/control-180.png") center center no-repeat; }
+
+/* line 4, ../sass/murano/components/_icons.scss */
+.x-tbar-page-first {
+  background: transparent url("../../fugue-icons/icons-shadowless/control-stop-180.png") center center no-repeat; }
+
+/* line 7, ../sass/murano/components/_icons.scss */
+.x-tbar-page-next {
+  background: transparent url("../../fugue-icons/icons-shadowless/control.png") center center no-repeat; }
+
+/* line 10, ../sass/murano/components/_icons.scss */
+.x-tbar-page-last {
+  background: transparent url("../../fugue-icons/icons-shadowless/control-stop.png") center center no-repeat; }
+
+/* line 13, ../sass/murano/components/_icons.scss */
+.x-tbar-loading {
+  background: transparent url("../../fugue-icons/icons-shadowless/arrow-circle-double-135.png") center center no-repeat; }
+
+/**
+ * @var {string} $prefix 
+ * The prefix to be applied to all CSS selectors. If this is changed, it must also be changed in your 
+ * JavaScript application.
+ */
+/**
+ * @var {string} $theme-name 
+ * The name of the theme. This must match the the output directory of the images.
+ * (defaults to 'default')
+ */
+/**
+ * @var {boolean/string} $relative-image-path-for-uis 
+ * True to use a relative image path for all new UIs. If true, the path will be "../images/".
+ * It can also be a string of the path value.
+ * It defaults to false, which means it will look for the images in the ExtJS SDK folder.
+ */
+/**
+ * @var {string} $font-family 
+ * The default font-family to be used throughout the theme.
+ */
+/**
+ * @var {string} $base-gradient 
+ * The base gradient to be used throughout the theme.
+ */
+/**
+ * @var {color} $base-color
+ * The base color to be used throughout the theme.
+ */
+/**
+ * @var {boolean} $include-ie
+ * True to include Internet Explorer specific rules
+ */
+/**
+ * @var {boolean} $include-ff
+ * True to include Firefox specific rules
+ */
+/**
+ * @var {boolean} $include-chrome
+ * True to include Chrome specific rules
+ */
+/**
+ * @var {boolean} $include-safari
+ * True to include Safari specific rules
+ */
+/**
+ * @var {boolean} $include-opera
+ * True to include Opera specific rules
+ */
+/**
+ * @var {boolean} $include-webkit
+ * True to include Webkit specific rules
+ */
+/**
+ * @var {boolean} $compile-all
+ * True to copile all CSS, even if above include rules are false
+ */
+/**
+ * @var {boolean} $scope-reset-css
+ * True to scope the reset CSS within the $prefix variable.
+ */
+/**
+ * @var {color} $css-shadow-background-color
+ * The base color for CSS shadows
+ */
+/**
+ * Toolbar buttons
+ */
+/**
+ * @class Ext.form.*
+ */
+/**
+ * @class Ext.form.field.Base
+ */
+/**
+ * @class Ext.form.field.TextArea
+ */
+/**
+ * @class Ext.form.Label
+ */
+/**
+ * @class Ext.form.field.Checkbox
+ */
+/**
+ * @class Ext.form.field.Radio
+ */
+/**
+ * Error messages
+ */
+/**
+ * Trigger Field
+ */
+/**
+ * Fieldsets
+ */
+/**
+ * @mixin background-gradient
+ * 
+ * @param {Color} $background-color The background color of the gradient
+ * @param {String/List} $type The type of gradient to be used. Can either be a String which is a predefined gradient, or it can
+ *                            can be a list of color_stops. If none is set, it will still set the `background-color` to the $background-color.
+ * @param {String} $direction The direction of the gradient. Can either me `top` or `left`. (defaults to `top`)
+ */
+/* line 69, ../../extjs/resources/themes/stylesheets/ext4/default/core/_reset.scss */
+html, body, div, dl, dt, dd, ul, ol, li, h1, h2, h3,
+h4, h5, h6, pre, code, form, fieldset, legend,
+input, textarea, p, blockquote, th, td {
+  margin: 0;
+  padding: 0; }
+
+/* line 74, ../../extjs/resources/themes/stylesheets/ext4/default/core/_reset.scss */
+table {
+  border-collapse: collapse;
+  border-spacing: 0; }
+
+/* line 79, ../../extjs/resources/themes/stylesheets/ext4/default/core/_reset.scss */
+fieldset, img {
+  border: 0; }
+
+/* line 84, ../../extjs/resources/themes/stylesheets/ext4/default/core/_reset.scss */
+address, caption, cite, code,
+dfn, em, strong, th, var {
+  font-style: normal;
+  font-weight: normal; }
+
+/* line 89, ../../extjs/resources/themes/stylesheets/ext4/default/core/_reset.scss */
+li {
+  list-style: none; }
+
+/* line 93, ../../extjs/resources/themes/stylesheets/ext4/default/core/_reset.scss */
+caption, th {
+  text-align: left; }
+
+/* line 97, ../../extjs/resources/themes/stylesheets/ext4/default/core/_reset.scss */
+h1, h2, h3, h4, h5, h6 {
+  font-size: 100%; }
+
+/* line 102, ../../extjs/resources/themes/stylesheets/ext4/default/core/_reset.scss */
+q:before,
+q:after {
+  content: ""; }
+
+/* line 106, ../../extjs/resources/themes/stylesheets/ext4/default/core/_reset.scss */
+abbr, acronym {
+  border: 0;
+  font-variant: normal; }
+
+/* line 111, ../../extjs/resources/themes/stylesheets/ext4/default/core/_reset.scss */
+sup {
+  vertical-align: text-top; }
+
+/* line 115, ../../extjs/resources/themes/stylesheets/ext4/default/core/_reset.scss */
+sub {
+  vertical-align: text-bottom; }
+
+/* line 119, ../../extjs/resources/themes/stylesheets/ext4/default/core/_reset.scss */
+input, textarea, select {
+  font-family: inherit;
+  font-size: inherit;
+  font-weight: inherit; }
+
+/* line 125, ../../extjs/resources/themes/stylesheets/ext4/default/core/_reset.scss */
+*:focus {
+  outline: none; }
+
+/* line 131, ../../extjs/resources/themes/stylesheets/ext4/default/core/_reset.scss */
+.x-border-box .x-reset,
+.x-border-box .x-reset * {
+  box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  -ms-box-sizing: border-box;
+  -webkit-box-sizing: border-box; }
+
+/* line 1, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+body {
+  color: white;
+  font-size: 12px;
+  font-family: "Lucida Grande", "Lucida Sans", Tahoma, Verdana, sans-serif; }
+
+/* line 7, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-clear {
+  overflow: hidden;
+  clear: both;
+  height: 0;
+  width: 0;
+  font-size: 0;
+  line-height: 0; }
+
+/* line 16, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-layer {
+  position: absolute;
+  overflow: hidden;
+  zoom: 1; }
+
+/* line 22, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-shim {
+  position: absolute;
+  left: 0;
+  top: 0;
+  overflow: hidden;
+  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
+  opacity: 0; }
+
+/* line 30, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-hide-display {
+  display: none !important; }
+
+/* line 34, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-hide-visibility {
+  visibility: hidden !important; }
+
+/* line 38, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-item-disabled {
+  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)";
+  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);
+  opacity: 0.4; }
+
+/* line 42, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-ie6 .x-item-disabled {
+  filter: none; }
+
+/* line 47, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-hidden,
+.x-hide-offsets {
+  display: block !important;
+  position: absolute !important;
+  left: -10000px !important;
+  top: -10000px !important; }
+
+/* line 54, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-hide-nosize {
+  height: 0 !important;
+  width: 0 !important; }
+
+/* line 59, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-masked-relative {
+  position: relative; }
+
+/* line 65, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-ie6 .x-masked select,
+.x-ie6.x-body-masked select {
+  visibility: hidden !important; }
+
+/* line 71, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-css-shadow {
+  position: absolute;
+  -moz-border-radius: 5px 5px;
+  -webkit-border-radius: 5px 5px;
+  -o-border-radius: 5px 5px;
+  -ms-border-radius: 5px 5px;
+  -khtml-border-radius: 5px 5px;
+  border-radius: 5px 5px; }
+
+/* line 76, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-ie-shadow {
+  background-color: #777;
+  display: none;
+  position: absolute;
+  overflow: hidden;
+  zoom: 1; }
+
+/* line 84, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-frame-shadow {
+  display: none;
+  position: absolute;
+  overflow: hidden; }
+
+/* line 90, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-frame-shadow * {
+  overflow: hidden; }
+
+/* line 94, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-frame-shadow * {
+  padding: 0;
+  border: 0;
+  margin: 0;
+  clear: none;
+  zoom: 1; }
+
+/* top  bottom */
+/* line 104, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-frame-shadow .xstc,
+.x-frame-shadow .xsbc {
+  height: 6px;
+  float: left; }
+
+/* line 109, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-frame-shadow .xsc {
+  width: 100%; }
+
+/* line 113, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-frame-shadow .xsml {
+  background: transparent repeat-y 0 0; }
+
+/* line 117, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-frame-shadow .xsmr {
+  background: transparent repeat-y -6px 0; }
+
+/* line 121, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-frame-shadow .xstl {
+  background: transparent no-repeat 0 0; }
+
+/* line 125, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-frame-shadow .xstc {
+  background: transparent repeat-x 0 -30px; }
+
+/* line 129, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-frame-shadow .xstr {
+  background: transparent repeat-x 0 -18px; }
+
+/* line 133, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-frame-shadow .xsbl {
+  background: transparent no-repeat 0 -12px; }
+
+/* line 137, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-frame-shadow .xsbc {
+  background: transparent repeat-x 0 -36px; }
+
+/* line 141, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-frame-shadow .xsbr {
+  background: transparent repeat-x 0 -6px; }
+
+/* line 149, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-frame-shadow .xstl,
+.x-frame-shadow .xstc,
+.x-frame-shadow .xstr,
+.x-frame-shadow .xsbl,
+.x-frame-shadow .xsbc,
+.x-frame-shadow .xsbr {
+  width: 6px;
+  height: 6px;
+  float: left;
+  background-image: url('../extjs/resources/themes/images/default/shared/shadow.png'); }
+
+/* line 157, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-frame-shadow .xsml,
+.x-frame-shadow .xsmr {
+  width: 6px;
+  float: left;
+  height: 100%;
+  background-image: url('../extjs/resources/themes/images/default/shared/shadow-lr.png'); }
+
+/* line 164, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-frame-shadow .xsmc {
+  float: left;
+  height: 100%;
+  background-image: url('../extjs/resources/themes/images/default/shared/shadow-c.png'); }
+
+/* line 171, ../../extjs/resources/themes/stylesheets/ext4/default/core/_core.scss */
+.x-frame-shadow .xst,
+.x-frame-shadow .xsb {
+  height: 6px;
+  overflow: hidden;
+  width: 100%; }
+
+/* line 1, ../../extjs/resources/themes/stylesheets/ext4/default/util/_focus.scss */
+.x-focus-element {
+  position: absolute;
+  top: -10px;
+  left: -10px;
+  width: 0px;
+  height: 0px; }
+
+/* line 9, ../../extjs/resources/themes/stylesheets/ext4/default/util/_focus.scss */
+.x-focus-frame {
+  position: absolute;
+  left: 0px;
+  top: 0px;
+  z-index: 100000000;
+  width: 0px;
+  height: 0px; }
+
+/* line 21, ../../extjs/resources/themes/stylesheets/ext4/default/util/_focus.scss */
+.x-focus-frame-top,
+.x-focus-frame-bottom,
+.x-focus-frame-left,
+.x-focus-frame-right {
+  position: absolute;
+  top: 0px;
+  left: 0px; }
+
+/* line 28, ../../extjs/resources/themes/stylesheets/ext4/default/util/_focus.scss */
+.x-focus-frame-top,
+.x-focus-frame-bottom {
+  border-top: solid 2px #15428b;
+  height: 2px; }
+
+/* line 34, ../../extjs/resources/themes/stylesheets/ext4/default/util/_focus.scss */
+.x-focus-frame-left,
+.x-focus-frame-right {
+  border-left: solid 2px #15428b;
+  width: 2px; }
+
+/**
+  * @class Ext.Button
+  * Used to create the base structure of an Ext.Button
+  */
+/**
+ * @mixin extjs-btn-group-ui
+ * @class Ext.ButtonGroup
+ */
+/**
+  * @class Ext.menu.*
+  */
+/**
+  * @class Ext.Panel
+  * Used to create the base structure of an Ext.Panel
+  */
+/**
+  * @class Ext.Panel
+  * Used to create a visual theme for an Ext.Panel
+  */
+/**
+ * @mixin ext-toolbar-ui
+ * @class Ext.toolbar.Toolbar
+ * @param {String} $ui The name of the UI
+ * @param {Color} $background-color The background color of the toolbar (defaults to transparent)
+ * @param {Gradient/color-stops} $background-gradient The background gradient of the toolbar (defaults to null)
+ * @param {Color} $border-color The border color of the toolbar (defaults to null)
+ */
+/**
+  * @class Ext.Window
+  * Used to create a visual theme for an Ext.Panel
+  */
+/**
+  * @class Ext.tab.Bar
+  */
+/**
+  * @class Ext.Tab
+  */
+/**
+  * @class Ext.LoadMask
+  * Component used to mask a component
+  */
+/* line 5, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_loadmask.scss */
+.x-mask {
+  z-index: 100;
+  position: absolute;
+  top: 0;
+  left: 0;
+  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
+  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);
+  opacity: 0.5;
+  width: 100%;
+  height: 100%;
+  zoom: 1;
+  background: #cccccc; }
+
+/* line 21, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_loadmask.scss */
+.x-mask-msg {
+  z-index: 20001;
+  position: absolute;
+  top: 0;
+  left: 0;
+  padding: 2px;
+  border: 1px solid;
+  border-color: #99bbe8;
+  background-image: none;
+  background-color: #dfe8f6; }
+  /* line 40, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_loadmask.scss */
+  .x-mask-msg div {
+    padding: 5px 10px 5px 25px;
+    background-image: url('../extjs/resources/themes/images/default/grid/loading.gif');
+    background-repeat: no-repeat;
+    background-position: 5px center;
+    cursor: wait;
+    border: 1px solid #a3bad9;
+    background-color: #eeeeee;
+    color: #222222;
+    font: normal 11px "Lucida Grande", "Lucida Sans", Tahoma, Verdana, sans-serif; }
+
+/**
+ * @mixin extjs-progress-ui
+ */
+/**
+ * W3C Suggested Default style sheet for HTML 4
+ * http://www.w3.org/TR/CSS21/sample.html
+ */
+/* line 7, ../../extjs/resources/themes/stylesheets/ext4/default/util/_dragdrop.scss */
+.x-dd-drag-repair .x-dd-drag-ghost {
+  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)";
+  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=60);
+  opacity: 0.6; }
+/* line 11, ../../extjs/resources/themes/stylesheets/ext4/default/util/_dragdrop.scss */
+.x-dd-drag-repair .x-dd-drop-icon {
+  display: none; }
+
+/* line 16, ../../extjs/resources/themes/stylesheets/ext4/default/util/_dragdrop.scss */
+.x-dd-drag-ghost {
+  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=85)";
+  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=85);
+  opacity: 0.85;
+  padding: 5px;
+  padding-left: 20px;
+  white-space: nowrap;
+  color: #000;
+  font: normal 11px "Lucida Grande", "Lucida Sans", Tahoma, Verdana, sans-serif;
+  border: 1px solid;
+  border-color: #ddd #bbb #bbb #ddd;
+  background-color: #fff; }
+
+/* line 33, ../../extjs/resources/themes/stylesheets/ext4/default/util/_dragdrop.scss */
+.x-dd-drop-icon {
+  position: absolute;
+  top: 3px;
+  left: 3px;
+  display: block;
+  width: 16px;
+  height: 16px;
+  background-color: transparent;
+  background-position: center;
+  background-repeat: no-repeat;
+  z-index: 1; }
+
+/* line 50, ../../extjs/resources/themes/stylesheets/ext4/default/util/_dragdrop.scss */
+.x-view-selector {
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 0;
+  background-color: #c3daf9;
+  border: 1px dotted #3399bb;
+  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
+  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);
+  opacity: 0.5;
+  zoom: 1; }
+
+/* line 65, ../../extjs/resources/themes/stylesheets/ext4/default/util/_dragdrop.scss */
+.x-dd-drop-nodrop .x-dd-drop-icon {
+  background-image: url('../extjs/resources/themes/images/default/dd/drop-no.gif'); }
+
+/* line 69, ../../extjs/resources/themes/stylesheets/ext4/default/util/_dragdrop.scss */
+.x-dd-drop-ok .x-dd-drop-icon {
+  background-image: url('../extjs/resources/themes/images/default/dd/drop-yes.gif'); }
+
+/* line 73, ../../extjs/resources/themes/stylesheets/ext4/default/util/_dragdrop.scss */
+.x-dd-drop-ok-add .x-dd-drop-icon {
+  background-image: url('../extjs/resources/themes/images/default/dd/drop-add.gif'); }
+
+/* line 2, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-handle {
+  position: absolute;
+  z-index: 100;
+  font-size: 1px;
+  line-height: 6px;
+  overflow: hidden;
+  zoom: 1;
+  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
+  opacity: 0;
+  background-color: #fff; }
+
+/* line 19, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-handle-east {
+  width: 6px;
+  height: 100%;
+  right: 0;
+  top: 0; }
+
+/* line 28, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-over .x-resizable-handle-east {
+  cursor: e-resize; }
+
+/* line 33, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-handle-south {
+  width: 100%;
+  height: 6px;
+  left: 0;
+  bottom: 0; }
+
+/* line 42, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-over .x-resizable-handle-south {
+  cursor: s-resize; }
+
+/* line 47, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-handle-west {
+  width: 6px;
+  height: 100%;
+  left: 0;
+  top: 0; }
+
+/* line 56, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-over .x-resizable-handle-west {
+  cursor: w-resize; }
+
+/* line 61, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-handle-north {
+  width: 100%;
+  height: 6px;
+  left: 0;
+  top: 0; }
+
+/* line 70, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-over .x-resizable-handle-north {
+  cursor: n-resize; }
+
+/* line 75, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-handle-southeast {
+  width: 6px;
+  height: 6px;
+  right: 0;
+  bottom: 0;
+  z-index: 101; }
+
+/* line 86, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-over .x-resizable-handle-southeast {
+  cursor: se-resize; }
+
+/* line 91, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-handle-northwest {
+  width: 6px;
+  height: 6px;
+  left: 0;
+  top: 0;
+  z-index: 101; }
+
+/* line 102, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-over .x-resizable-handle-northwest {
+  cursor: nw-resize; }
+
+/* line 107, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-handle-northeast {
+  width: 6px;
+  height: 6px;
+  right: 0;
+  top: 0;
+  z-index: 101; }
+
+/* line 118, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-over .x-resizable-handle-northeast {
+  cursor: ne-resize; }
+
+/* line 123, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-handle-southwest {
+  width: 6px;
+  height: 6px;
+  left: 0;
+  bottom: 0;
+  z-index: 101; }
+
+/* line 134, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-over .x-resizable-handle-southwest {
+  cursor: sw-resize; }
+
+/*IE rounding error*/
+/* line 141, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-ie .x-resizable-handle-east {
+  margin-right: -1px;
+  /*IE rounding error*/ }
+/* line 145, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-ie .x-resizable-handle-south {
+  margin-bottom: -1px; }
+
+/* line 150, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-over .x-resizable-handle, .x-resizable-pinned .x-resizable-handle {
+  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
+  opacity: 1; }
+
+/* line 154, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-window .x-window-handle {
+  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
+  opacity: 0; }
+
+/* line 158, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-window-collapsed .x-window-handle {
+  display: none; }
+
+/* line 162, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-proxy {
+  border: 1px dashed #3b5a82;
+  position: absolute;
+  left: 0;
+  top: 0;
+  overflow: hidden;
+  z-index: 50000; }
+
+/* line 171, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-overlay {
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  display: none;
+  z-index: 200000;
+  background-color: #fff;
+  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
+  opacity: 0; }
+
+/* line 191, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-over .x-resizable-handle-east,
+.x-resizable-over .x-resizable-handle-west,
+.x-resizable-pinned .x-resizable-handle-east,
+.x-resizable-pinned .x-resizable-handle-west {
+  background-position: left;
+  background-image: url('../extjs/resources/themes/images/default/sizer/e-handle.gif'); }
+/* line 197, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-over .x-resizable-handle-south,
+.x-resizable-over .x-resizable-handle-north,
+.x-resizable-pinned .x-resizable-handle-south,
+.x-resizable-pinned .x-resizable-handle-north {
+  background-position: top;
+  background-image: url('../extjs/resources/themes/images/default/sizer/s-handle.gif'); }
+/* line 202, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-over .x-resizable-handle-southeast,
+.x-resizable-pinned .x-resizable-handle-southeast {
+  background-position: top left;
+  background-image: url('../extjs/resources/themes/images/default/sizer/se-handle.gif'); }
+/* line 207, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-over .x-resizable-handle-northwest,
+.x-resizable-pinned .x-resizable-handle-northwest {
+  background-position: bottom right;
+  background-image: url('../extjs/resources/themes/images/default/sizer/nw-handle.gif'); }
+/* line 212, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-over .x-resizable-handle-northeast,
+.x-resizable-pinned .x-resizable-handle-northeast {
+  background-position: bottom left;
+  background-image: url('../extjs/resources/themes/images/default/sizer/ne-handle.gif'); }
+/* line 217, ../../extjs/resources/themes/stylesheets/ext4/default/util/_resizable.scss */
+.x-resizable-over .x-resizable-handle-southwest,
+.x-resizable-pinned .x-resizable-handle-southwest {
+  background-position: top right;
+  background-image: url('../extjs/resources/themes/images/default/sizer/sw-handle.gif'); }
+
+/* line 3, ../../extjs/resources/themes/stylesheets/ext4/default/util/_splitter.scss */
+.x-splitter .x-collapse-el {
+  position: absolute;
+  cursor: pointer;
+  background-color: transparent;
+  background-repeat: no-repeat !important; }
+
+/* line 14, ../../extjs/resources/themes/stylesheets/ext4/default/util/_splitter.scss */
+.x-layout-split-left,
+.x-layout-split-right {
+  top: 50%;
+  margin-top: -17px;
+  width: 5px;
+  height: 35px; }
+
+/* line 24, ../../extjs/resources/themes/stylesheets/ext4/default/util/_splitter.scss */
+.x-layout-split-top,
+.x-layout-split-bottom {
+  left: 50%;
+  width: 35px;
+  height: 5px;
+  margin-left: -17px; }
+
+/* line 33, ../../extjs/resources/themes/stylesheets/ext4/default/util/_splitter.scss */
+.x-layout-split-left {
+  background: url('../extjs/resources/themes/images/default/util/splitter/mini-left.gif') no-repeat top right; }
+
+/* line 37, ../../extjs/resources/themes/stylesheets/ext4/default/util/_splitter.scss */
+.x-layout-split-right {
+  background: url('../extjs/resources/themes/images/default/util/splitter/mini-right.gif') no-repeat top left; }
+
+/* line 41, ../../extjs/resources/themes/stylesheets/ext4/default/util/_splitter.scss */
+.x-layout-split-top {
+  background: url('../extjs/resources/themes/images/default/util/splitter/mini-top.gif') no-repeat top left; }
+
+/* line 45, ../../extjs/resources/themes/stylesheets/ext4/default/util/_splitter.scss */
+.x-layout-split-bottom {
+  background: url('../extjs/resources/themes/images/default/util/splitter/mini-bottom.gif') no-repeat top left; }
+
+/* line 50, ../../extjs/resources/themes/stylesheets/ext4/default/util/_splitter.scss */
+.x-splitter-collapsed .x-layout-split-left {
+  background: url('../extjs/resources/themes/images/default/util/splitter/mini-right.gif') no-repeat top left; }
+/* line 54, ../../extjs/resources/themes/stylesheets/ext4/default/util/_splitter.scss */
+.x-splitter-collapsed .x-layout-split-right {
+  background: url('../extjs/resources/themes/images/default/util/splitter/mini-left.gif') no-repeat top right; }
+/* line 58, ../../extjs/resources/themes/stylesheets/ext4/default/util/_splitter.scss */
+.x-splitter-collapsed .x-layout-split-top {
+  background: url('../extjs/resources/themes/images/default/util/splitter/mini-bottom.gif') no-repeat top left; }
+/* line 62, ../../extjs/resources/themes/stylesheets/ext4/default/util/_splitter.scss */
+.x-splitter-collapsed .x-layout-split-bottom {
+  background: url('../extjs/resources/themes/images/default/util/splitter/mini-top.gif') no-repeat top left; }
+
+/* line 67, ../../extjs/resources/themes/stylesheets/ext4/default/util/_splitter.scss */
+.x-splitter-horizontal {
+  cursor: e-resize;
+  cursor: row-resize;
+  font-size: 1px; }
+
+/* line 72, ../../extjs/resources/themes/stylesheets/ext4/default/util/_splitter.scss */
+.x-splitter-vertical {
+  cursor: e-resize;
+  cursor: col-resize;
+  font-size: 1px; }
+
+/* line 77, ../../extjs/resources/themes/stylesheets/ext4/default/util/_splitter.scss */
+.x-splitter-collapsed {
+  cursor: default; }
+
+/* line 81, ../../extjs/resources/themes/stylesheets/ext4/default/util/_splitter.scss */
+.x-splitter-active {
+  z-index: 4;
+  font-size: 1px;
+  background-color: #b4b4b4;
+  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";
+  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
+  opacity: 0.8; }
+
+/* line 88, ../../extjs/resources/themes/stylesheets/ext4/default/util/_splitter.scss */
+.x-splitter-active .x-collapse-el {
+  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
+  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=30);
+  opacity: 0.3; }
+
+/* line 93, ../../extjs/resources/themes/stylesheets/ext4/default/util/_splitter.scss */
+.x-proxy-el {
+  position: absolute;
+  background: #b4b4b4;
+  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";
+  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
+  opacity: 0.8; }
+
+/* line 2, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-docked {
+  position: absolute;
+  z-index: 1; }
+
+/**
+  * Dock Layouts
+  * @todo move this somewhere else?
+  */
+/* line 11, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-docked-top {
+  border-bottom-width: 0 !important; }
+
+/* line 15, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-docked-bottom {
+  border-top-width: 0 !important; }
+
+/* line 19, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-docked-left {
+  border-right-width: 0 !important; }
+
+/* line 23, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-docked-right {
+  border-left-width: 0 !important; }
+
+/* line 27, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-docked-noborder-top {
+  border-top-width: 0 !important; }
+
+/* line 31, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-docked-noborder-right {
+  border-right-width: 0 !important; }
+
+/* line 35, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-docked-noborder-bottom {
+  border-bottom-width: 0 !important; }
+
+/* line 39, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-docked-noborder-left {
+  border-left-width: 0 !important; }
+
+/* line 43, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-box-inner {
+  overflow: hidden;
+  zoom: 1;
+  position: relative;
+  left: 0;
+  top: 0; }
+
+/* line 53, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-box-item {
+  position: absolute !important;
+  left: 0;
+  top: 0; }
+
+/* line 60, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-box-layout-ct,
+.x-border-layout-ct {
+  overflow: hidden;
+  zoom: 1; }
+
+/* line 65, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-overflow-hidden {
+  overflow: hidden !important; }
+
+/* line 69, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-inline-children > * {
+  display: inline-block !important; }
+
+/* line 73, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-abs-layout-item {
+  position: absolute; }
+
+/* line 77, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-border-layout-ct {
+  background-color: #dfe8f6; }
+
+/* line 81, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-border-region-slide-in {
+  z-index: 5; }
+
+/* line 85, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-region-collapsed-placeholder {
+  z-index: 4; }
+
+/* line 89, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-accordion-hd .x-panel-header-text {
+  color: black;
+  font-weight: normal; }
+
+/* line 94, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-accordion-hd {
+  background: #d9e7f8 !important;
+  -moz-box-shadow: inset 0 0 0 0 #d9e7f8;
+  -webkit-box-shadow: inset 0 0 0 0 #d9e7f8;
+  -o-box-shadow: inset 0 0 0 0 #d9e7f8;
+  box-shadow: inset 0 0 0 0 #d9e7f8; }
+  /* line 98, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+  .x-accordion-hd .x-tool-collapse-top,
+  .x-accordion-hd .x-tool-collapse-right,
+  .x-accordion-hd .x-tool-collapse-bottom,
+  .x-accordion-hd .x-tool-collapse-left {
+    background-position: 0 -255px; }
+  /* line 105, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+  .x-accordion-hd .x-tool-expand-top,
+  .x-accordion-hd .x-tool-expand-right,
+  .x-accordion-hd .x-tool-expand-bottom,
+  .x-accordion-hd .x-tool-expand-left {
+    background-position: 0 -240px; }
+  /* line 113, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+  .x-accordion-hd .x-tool-over .x-tool-collapse-top,
+  .x-accordion-hd .x-tool-over .x-tool-collapse-right,
+  .x-accordion-hd .x-tool-over .x-tool-collapse-bottom,
+  .x-accordion-hd .x-tool-over .x-tool-collapse-left {
+    background-position: -15px -255px; }
+  /* line 122, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+  .x-accordion-hd .x-tool-over .x-tool-expand-top,
+  .x-accordion-hd .x-tool-over .x-tool-expand-right,
+  .x-accordion-hd .x-tool-over .x-tool-expand-bottom,
+  .x-accordion-hd .x-tool-over .x-tool-expand-left {
+    background-position: -15px -240px; }
+
+/* line 131, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-accordion-hd {
+  border-width: 1px 0 1px 0 !important;
+  padding: 4px 5px 5px 5px;
+  border-top-color: #f3f7fb !important; }
+
+/* line 137, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-accordion-body {
+  border-width: 0 !important; }
+
+/* line 141, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-accordion-hd-sibling-expanded {
+  border-top-color: #99bbe8 !important;
+  -moz-box-shadow: inset 0 1px 0 0 #f3f7fb;
+  -webkit-box-shadow: inset 0 1px 0 0 #f3f7fb;
+  -o-box-shadow: inset 0 1px 0 0 #f3f7fb;
+  box-shadow: inset 0 1px 0 0 #f3f7fb; }
+
+/* line 146, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-accordion-hd-last-collapsed {
+  border-bottom-color: #d9e7f8 !important; }
+
+/* line 155, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-frame-tl,
+.x-frame-tr,
+.x-frame-tc,
+.x-frame-bl,
+.x-frame-br,
+.x-frame-bc {
+  overflow: hidden;
+  background-repeat: no-repeat; }
+
+/* line 161, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-frame-tc,
+.x-frame-bc {
+  background-repeat: repeat-x; }
+
+/* line 165, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-frame-mc {
+  position: relative;
+  background-repeat: repeat-x;
+  overflow: hidden; }
+
+/* line 174, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-box-scroller-left {
+  float: left;
+  height: 100%;
+  z-index: 5; }
+  /* line 181, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+  .x-box-scroller-left .x-toolbar-scroll-left,
+  .x-box-scroller-left .x-tabbar-scroll-left {
+    width: 18px;
+    position: relative;
+    cursor: pointer;
+    height: 20px;
+    background: url('../extjs/resources/themes/images/default/tab-bar/scroll-left.gif') transparent no-repeat -18px 0; }
+  /* line 188, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+  .x-box-scroller-left .x-toolbar-scroll-left-hover {
+    background-position: 0 0; }
+  /* line 192, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+  .x-box-scroller-left .x-toolbar-scroll-left-disabled,
+  .x-box-scroller-left .x-tabbar-scroll-left-disabled {
+    background-position: -18px 0;
+    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
+    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);
+    opacity: 0.5; }
+  /* line 197, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+  .x-box-scroller-left .x-toolbar-scroll-left {
+    background-image: url('../extjs/resources/themes/images/default/toolbar/scroll-left.gif');
+    background-position: -14px 0; }
+  /* line 201, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+  .x-box-scroller-left .x-toolbar-scroll-left-hover {
+    background-position: 0 0; }
+  /* line 204, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+  .x-box-scroller-left .x-toolbar-scroll-left-disabled {
+    background-position: -14px 0; }
+  /* line 208, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+  .x-box-scroller-left .x-toolbar-scroll-left {
+    width: 14px;
+    height: 22px;
+    border-bottom: 1px solid #8db2e3; }
+
+/* line 216, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-horizontal-box-overflow-body {
+  float: left; }
+
+/* line 219, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-box-scroller-right {
+  float: right;
+  height: 100%;
+  z-index: 5; }
+  /* line 226, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+  .x-box-scroller-right .x-toolbar-scroll-right,
+  .x-box-scroller-right .x-tabbar-scroll-right {
+    width: 18px;
+    position: relative;
+    cursor: pointer;
+    height: 20px;
+    background: url('../extjs/resources/themes/images/default/tab-bar/scroll-right.gif') transparent no-repeat 0 0; }
+  /* line 233, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+  .x-box-scroller-right .x-toolbar-scroll-right-hover {
+    background-position: -18px 0; }
+  /* line 237, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+  .x-box-scroller-right .x-toolbar-scroll-right-disabled,
+  .x-box-scroller-right .x-tabbar-scroll-right-disabled {
+    background-position: 0 0;
+    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
+    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);
+    opacity: 0.5; }
+  /* line 242, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+  .x-box-scroller-right .x-toolbar-scroll-right {
+    background-image: url('../extjs/resources/themes/images/default/toolbar/scroll-right.gif'); }
+  /* line 245, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+  .x-box-scroller-right .x-toolbar-scroll-right-hover {
+    background-position: -14px 0; }
+  /* line 248, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+  .x-box-scroller-right .x-toolbar-scroll-right-disabled {
+    background-position: 0 0; }
+  /* line 252, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+  .x-box-scroller-right .x-toolbar-scroll-right {
+    width: 14px;
+    height: 22px;
+    border-bottom: 1px solid #8db2e3; }
+
+/* line 262, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-box-scroller-top .x-box-scroller {
+  line-height: 0;
+  font-size: 0; }
+/* line 266, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-box-scroller-top .x-menu-scroll-top {
+  background: url('../extjs/resources/themes/images/default/layout/mini-top.gif') transparent no-repeat center center;
+  height: 8px;
+  cursor: pointer; }
+
+/* line 273, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-box-scroller-bottom .x-box-scroller {
+  line-height: 0;
+  font-size: 0; }
+/* line 277, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-box-scroller-bottom .x-menu-scroll-bottom {
+  background: url('../extjs/resources/themes/images/default/layout/mini-bottom.gif') transparent no-repeat center center;
+  height: 8px;
+  cursor: pointer; }
+
+/* line 284, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-box-menu-right {
+  float: right;
+  padding-right: 2px; }
+
+/* line 289, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-column {
+  float: left; }
+
+/* line 293, ../../extjs/resources/themes/stylesheets/ext4/default/layout/_layout.scss */
+.x-ie6 .x-column {
+  display: inline;
+  /*prevent IE6 double-margin bug*/ }
+
+/* line 2, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool {
+  height: 15px; }
+  /* line 5, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+  .x-tool img {
+    overflow: hidden;
+    width: 15px;
+    height: 15px;
+    cursor: pointer;
+    background-color: transparent;
+    background-repeat: no-repeat;
+    background-image: url('../extjs/resources/themes/images/default/tools/tool-sprites.gif');
+    margin: 0; }
+
+/* line 23, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-panel-header-horizontal .x-tool,
+.x-window-header-horizontal .x-tool {
+  margin-left: 2px; }
+
+/* line 30, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-panel-header-vertical .x-tool,
+.x-window-header-vertical .x-tool {
+  margin-bottom: 2px; }
+
+/* line 35, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-placeholder {
+  visibility: hidden; }
+
+/* line 39, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-toggle {
+  background-position: 0 -60px; }
+
+/* line 44, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-toggle {
+  background-position: -15px -60px; }
+
+/* line 51, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-panel-collapsed .x-tool-toggle,
+.x-fieldset-collapsed .x-tool-toggle {
+  background-position: 0 -75px; }
+/* line 56, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-panel-collapsed .x-tool-over .x-tool-toggle,
+.x-fieldset-collapsed .x-tool-over .x-tool-toggle {
+  background-position: -15px -75px; }
+
+/* line 62, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-close {
+  background-position: 0 0; }
+
+/* line 66, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-minimize {
+  background-position: 0 -15px; }
+
+/* line 70, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-maximize {
+  background-position: 0 -30px; }
+
+/* line 74, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-restore {
+  background-position: 0 -45px; }
+
+/* line 78, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-gear {
+  background-position: 0 -90px; }
+
+/* line 82, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-prev {
+  background-position: 0 -105px; }
+
+/* line 86, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-next {
+  background-position: 0 -120px; }
+
+/* line 90, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-pin {
+  background-position: 0 -135px; }
+
+/* line 94, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-unpin {
+  background-position: 0 -150px; }
+
+/* line 98, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-right {
+  background-position: 0 -165px; }
+
+/* line 102, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-left {
+  background-position: 0 -180px; }
+
+/* line 106, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-help {
+  background-position: 0 -300px; }
+
+/* line 110, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-save {
+  background-position: 0 -285px; }
+
+/* line 114, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-search {
+  background-position: 0 -270px; }
+
+/* line 118, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-minus {
+  background-position: 0 -255px; }
+
+/* line 122, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-plus {
+  background-position: 0 -240px; }
+
+/* line 126, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-refresh {
+  background-position: 0 -225px; }
+
+/* line 130, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-up {
+  background-position: 0 -210px; }
+
+/* line 134, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-down {
+  background-position: 0 -195px; }
+
+/* line 138, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-move {
+  background-position: 0 -375px; }
+
+/* line 142, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-resize {
+  background-position: 0 -360px; }
+
+/* line 146, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-collapse {
+  background-position: 0 -345px; }
+
+/* line 150, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-expand {
+  background-position: 0 -330px; }
+
+/* line 154, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-print {
+  background-position: 0 -315px; }
+
+/* line 159, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-expand-bottom,
+.x-tool-collapse-bottom {
+  background-position: 0 -195px; }
+
+/* line 164, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-expand-top,
+.x-tool-collapse-top {
+  background-position: 0 -210px; }
+
+/* line 169, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-expand-left,
+.x-tool-collapse-left {
+  background-position: 0 -180px; }
+
+/* line 174, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-expand-right,
+.x-tool-collapse-right {
+  background-position: 0 -165px; }
+
+/* line 179, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-close {
+  background-position: -15px 0; }
+/* line 183, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-minimize {
+  background-position: -15px -15px; }
+/* line 187, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-maximize {
+  background-position: -15px -30px; }
+/* line 191, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-restore {
+  background-position: -15px -45px; }
+/* line 195, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-gear {
+  background-position: -15px -90px; }
+/* line 199, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-prev {
+  background-position: -15px -105px; }
+/* line 203, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-next {
+  background-position: -15px -120px; }
+/* line 207, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-pin {
+  background-position: -15px -135px; }
+/* line 211, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-unpin {
+  background-position: -15px -150px; }
+/* line 215, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-right {
+  background-position: -15px -165px; }
+/* line 219, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-left {
+  background-position: -15px -180px; }
+/* line 223, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-down {
+  background-position: -15px -195px; }
+/* line 227, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-up {
+  background-position: -15px -210px; }
+/* line 231, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-refresh {
+  background-position: -15px -225px; }
+/* line 235, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-plus {
+  background-position: -15px -240px; }
+/* line 239, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-minus {
+  background-position: -15px -255px; }
+/* line 243, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-search {
+  background-position: -15px -270px; }
+/* line 247, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-save {
+  background-position: -15px -285px; }
+/* line 251, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-help {
+  background-position: -15px -300px; }
+/* line 255, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-print {
+  background-position: -15px -315px; }
+/* line 259, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-expand {
+  background-position: -15px -330px; }
+/* line 263, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-collapse {
+  background-position: -15px -345px; }
+/* line 267, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-resize {
+  background-position: -15px -360px; }
+/* line 271, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-move {
+  background-position: -15px -375px; }
+/* line 276, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-expand-bottom,
+.x-tool-over .x-tool-collapse-bottom {
+  background-position: -15px -195px; }
+/* line 281, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-expand-top,
+.x-tool-over .x-tool-collapse-top {
+  background-position: -15px -210px; }
+/* line 286, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-expand-left,
+.x-tool-over .x-tool-collapse-left {
+  background-position: -15px -180px; }
+/* line 291, ../../extjs/resources/themes/stylesheets/ext4/default/util/_tool.scss */
+.x-tool-over .x-tool-expand-right,
+.x-tool-over .x-tool-collapse-right {
+  background-position: -15px -165px; }
+
+/* line 2, ../../extjs/resources/themes/stylesheets/ext4/default/util/_scroller.scss */
+.x-horizontal-scroller-present .x-grid-body {
+  border-bottom: none; }
+
+/* line 6, ../../extjs/resources/themes/stylesheets/ext4/default/util/_scroller.scss */
+.x-vertical-scroller-present .x-grid-body {
+  border-right: none; }
+
+/* line 10, ../../extjs/resources/themes/stylesheets/ext4/default/util/_scroller.scss */
+.x-scroller-vertical {
+  overflow-x: hidden;
+  overflow-y: scroll;
+  border: 1px solid #99bbe8;
+  border-top-color: #c5c5c5; }
+
+/* line 18, ../../extjs/resources/themes/stylesheets/ext4/default/util/_scroller.scss */
+.x-scroller-horizontal {
+  overflow-y: hidden;
+  overflow-x: scroll;
+  border: 1px solid #99bbe8; }
+
+/* line 6, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+.x-html {
+  /* Begin bidirectionality settings (do not change) */ }
+  /* line 32, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html html,
+  .x-html address,
+  .x-html blockquote,
+  .x-html body,
+  .x-html dd,
+  .x-html div,
+  .x-html dl,
+  .x-html dt,
+  .x-html fieldset,
+  .x-html form,
+  .x-html frame, .x-html frameset,
+  .x-html h1,
+  .x-html h2,
+  .x-html h3,
+  .x-html h4,
+  .x-html h5,
+  .x-html h6,
+  .x-html noframes,
+  .x-html ol,
+  .x-html p,
+  .x-html ul,
+  .x-html center,
+  .x-html dir,
+  .x-html hr,
+  .x-html menu,
+  .x-html pre {
+    display: block; }
+  /* line 33, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html li {
+    display: list-item;
+    list-style: disc; }
+  /* line 34, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html head {
+    display: none; }
+  /* line 35, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html table {
+    display: table; }
+  /* line 36, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html tr {
+    display: table-row; }
+  /* line 37, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html thead {
+    display: table-header-group; }
+  /* line 38, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html tbody {
+    display: table-row-group; }
+  /* line 39, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html tfoot {
+    display: table-footer-group; }
+  /* line 40, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html col {
+    display: table-column; }
+  /* line 41, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html colgroup {
+    display: table-column-group; }
+  /* line 43, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html td,
+  .x-html th {
+    display: table-cell; }
+  /* line 44, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html caption {
+    display: table-caption; }
+  /* line 45, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html th {
+    font-weight: bolder;
+    text-align: center; }
+  /* line 46, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html caption {
+    text-align: center; }
+  /* line 47, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html body {
+    margin: 8px; }
+  /* line 48, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html h1 {
+    font-size: 2em;
+    margin: .67em 0; }
+  /* line 49, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html h2 {
+    font-size: 1.5em;
+    margin: .75em 0; }
+  /* line 50, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html h3 {
+    font-size: 1.17em;
+    margin: .83em 0; }
+  /* line 60, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html h4,
+  .x-html p,
+  .x-html blockquote,
+  .x-html ul,
+  .x-html fieldset,
+  .x-html form,
+  .x-html ol,
+  .x-html dl,
+  .x-html dir,
+  .x-html menu {
+    margin: 1.12em 0; }
+  /* line 61, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html h5 {
+    font-size: .83em;
+    margin: 1.5em 0; }
+  /* line 62, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html h6 {
+    font-size: .75em;
+    margin: 1.67em 0; }
+  /* line 70, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html h1,
+  .x-html h2,
+  .x-html h3,
+  .x-html h4,
+  .x-html h5,
+  .x-html h6,
+  .x-html b,
+  .x-html strong {
+    font-weight: bolder; }
+  /* line 71, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html blockquote {
+    margin-left: 40px;
+    margin-right: 40px; }
+  /* line 76, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html i,
+  .x-html cite,
+  .x-html em,
+  .x-html var,
+  .x-html address {
+    font-style: italic; }
+  /* line 81, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html pre,
+  .x-html tt,
+  .x-html code,
+  .x-html kbd,
+  .x-html samp {
+    font-family: monospace; }
+  /* line 82, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html pre {
+    white-space: pre; }
+  /* line 86, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html button,
+  .x-html textarea,
+  .x-html input,
+  .x-html select {
+    display: inline-block; }
+  /* line 87, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html big {
+    font-size: 1.17em; }
+  /* line 90, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html small,
+  .x-html sub,
+  .x-html sup {
+    font-size: .83em; }
+  /* line 91, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html sub {
+    vertical-align: sub; }
+  /* line 92, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html sup {
+    vertical-align: super; }
+  /* line 93, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html table {
+    border-spacing: 2px; }
+  /* line 96, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html thead,
+  .x-html tbody,
+  .x-html tfoot {
+    vertical-align: middle; }
+  /* line 98, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html td,
+  .x-html th {
+    vertical-align: inherit; }
+  /* line 101, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html s,
+  .x-html strike,
+  .x-html del {
+    text-decoration: line-through; }
+  /* line 102, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html hr {
+    border: 1px inset; }
+  /* line 107, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html ol,
+  .x-html ul,
+  .x-html dir,
+  .x-html menu,
+  .x-html dd {
+    margin-left: 40px; }
+  /* line 108, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html ul, .x-html menu, .x-html dir {
+    list-style-type: disc; }
+  /* line 109, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html ol {
+    list-style-type: decimal; }
+  /* line 113, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html ol ul,
+  .x-html ul ol,
+  .x-html ul ul,
+  .x-html ol ol {
+    margin-top: 0;
+    margin-bottom: 0; }
+  /* line 115, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html u,
+  .x-html ins {
+    text-decoration: underline; }
+  /* line 116, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html br:before {
+    content: "\A"; }
+  /* line 117, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html :before, .x-html :after {
+    white-space: pre-line; }
+  /* line 118, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html center {
+    text-align: center; }
+  /* line 119, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html :link, .x-html :visited {
+    text-decoration: underline; }
+  /* line 120, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html :focus {
+    outline: invert dotted thin; }
+  /* line 123, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html BDO[DIR="ltr"] {
+    direction: ltr;
+    unicode-bidi: bidi-override; }
+  /* line 124, ../../extjs/resources/themes/stylesheets/ext4/default/widgets/_html.scss */
+  .x-html BDO[DIR="rtl"] {
+    direction: rtl;
+    unicode-bidi: bidi-override; }
+
+/* line 1, ../sass/murano/overrides/_accordion.scss */
+.x-accordion-hd {
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255, 255, 255, 0.25)), color-stop(50%, rgba(255, 255, 255, 0.15)), color-stop(50%, rgba(255, 255, 255, 0)), color-stop(100%, rgba(255, 255, 255, 0))) !important;
+  background-image: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%) !important;
+  background-image: -moz-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%) !important;
+  background-image: -o-linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%) !important;
+  background-image: linear-gradient(top, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%) !important;
+  background-color: #666666 !important;
+  padding: 0 5px;
+  border-top: 1px solid #999999 !important;
+  border-bottom: 1px solid #555555 !important; }
+  /* line 2, ../sass/murano/overrides/_accordion.scss */
+  .x-accordion-hd .x-panel-header-text {
+    color: white !important;
+    text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.35); }
+  /* line 11, ../sass/murano/overrides/_accordion.scss */
+  .x-accordion-hd .x-tool {
+    top: 3px !important; }
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/btn/arrv.png b/philo/contrib/gilbert/static/gilbert/murano/images/btn/arrv.png
new file mode 100644 (file)
index 0000000..66fdce0
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/btn/arrv.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/btn/c/Down.png b/philo/contrib/gilbert/static/gilbert/murano/images/btn/c/Down.png
new file mode 100644 (file)
index 0000000..d0225fb
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/btn/c/Down.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/btn/c/Normal.png b/philo/contrib/gilbert/static/gilbert/murano/images/btn/c/Normal.png
new file mode 100644 (file)
index 0000000..42e9981
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/btn/c/Normal.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/btn/c/Over.png b/philo/contrib/gilbert/static/gilbert/murano/images/btn/c/Over.png
new file mode 100644 (file)
index 0000000..a5a716d
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/btn/c/Over.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/btn/c/Pressed.png b/philo/contrib/gilbert/static/gilbert/murano/images/btn/c/Pressed.png
new file mode 100644 (file)
index 0000000..aa168a3
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/btn/c/Pressed.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/btn/left-over.png b/philo/contrib/gilbert/static/gilbert/murano/images/btn/left-over.png
new file mode 100644 (file)
index 0000000..7ef8f67
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/btn/left-over.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/btn/left.png b/philo/contrib/gilbert/static/gilbert/murano/images/btn/left.png
new file mode 100644 (file)
index 0000000..b0dc68c
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/btn/left.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/btn/menu.png b/philo/contrib/gilbert/static/gilbert/murano/images/btn/menu.png
new file mode 100644 (file)
index 0000000..4993084
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/btn/menu.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/btn/right-over.png b/philo/contrib/gilbert/static/gilbert/murano/images/btn/right-over.png
new file mode 100644 (file)
index 0000000..2cb9783
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/btn/right-over.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/btn/right.png b/philo/contrib/gilbert/static/gilbert/murano/images/btn/right.png
new file mode 100644 (file)
index 0000000..4e68d26
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/btn/right.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/btn/split.png b/philo/contrib/gilbert/static/gilbert/murano/images/btn/split.png
new file mode 100644 (file)
index 0000000..a5402b7
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/btn/split.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/btn/splith.png b/philo/contrib/gilbert/static/gilbert/murano/images/btn/splith.png
new file mode 100644 (file)
index 0000000..a5402b7
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/btn/splith.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/btn/splitv.png b/philo/contrib/gilbert/static/gilbert/murano/images/btn/splitv.png
new file mode 100644 (file)
index 0000000..82970e9
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/btn/splitv.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/btn/whole/Down.png b/philo/contrib/gilbert/static/gilbert/murano/images/btn/whole/Down.png
new file mode 100644 (file)
index 0000000..c55c6f0
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/btn/whole/Down.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/btn/whole/Normal.png b/philo/contrib/gilbert/static/gilbert/murano/images/btn/whole/Normal.png
new file mode 100644 (file)
index 0000000..d4756a4
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/btn/whole/Normal.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/btn/whole/Over.png b/philo/contrib/gilbert/static/gilbert/murano/images/btn/whole/Over.png
new file mode 100644 (file)
index 0000000..fb22b68
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/btn/whole/Over.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/btn/whole/Pressed.png b/philo/contrib/gilbert/static/gilbert/murano/images/btn/whole/Pressed.png
new file mode 100644 (file)
index 0000000..153be02
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/btn/whole/Pressed.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/fills/30b.png b/philo/contrib/gilbert/static/gilbert/murano/images/fills/30b.png
new file mode 100644 (file)
index 0000000..f030b53
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/fills/30b.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/fills/30w.png b/philo/contrib/gilbert/static/gilbert/murano/images/fills/30w.png
new file mode 100644 (file)
index 0000000..494c8bb
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/fills/30w.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/fills/70w.png b/philo/contrib/gilbert/static/gilbert/murano/images/fills/70w.png
new file mode 100644 (file)
index 0000000..b9fa366
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/fills/70w.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/fills/80b.png b/philo/contrib/gilbert/static/gilbert/murano/images/fills/80b.png
new file mode 100644 (file)
index 0000000..8a6b4eb
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/fills/80b.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/form/checked.png b/philo/contrib/gilbert/static/gilbert/murano/images/form/checked.png
new file mode 100644 (file)
index 0000000..f22d0ff
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/form/checked.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/form/field.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/form/field.opacity
new file mode 100644 (file)
index 0000000..62576dd
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/form/field.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/form/field.png b/philo/contrib/gilbert/static/gilbert/murano/images/form/field.png
new file mode 100644 (file)
index 0000000..33767b4
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/form/field.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/form/radioed.png b/philo/contrib/gilbert/static/gilbert/murano/images/form/radioed.png
new file mode 100644 (file)
index 0000000..1db47e8
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/form/radioed.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/form/unchecked.png b/philo/contrib/gilbert/static/gilbert/murano/images/form/unchecked.png
new file mode 100644 (file)
index 0000000..259deac
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/form/unchecked.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/form/unradioed.png b/philo/contrib/gilbert/static/gilbert/murano/images/form/unradioed.png
new file mode 100644 (file)
index 0000000..6db37df
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/form/unradioed.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/gloss/gloss.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/gloss/gloss.opacity
new file mode 100644 (file)
index 0000000..e0425c7
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/gloss/gloss.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/gloss/gloss.png b/philo/contrib/gilbert/static/gilbert/murano/images/gloss/gloss.png
new file mode 100644 (file)
index 0000000..af1ec9b
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/gloss/gloss.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/gloss/light-gloss.png b/philo/contrib/gilbert/static/gilbert/murano/images/gloss/light-gloss.png
new file mode 100644 (file)
index 0000000..e9444e5
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/gloss/light-gloss.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/gradients/30white-to-trans.png b/philo/contrib/gilbert/static/gilbert/murano/images/gradients/30white-to-trans.png
new file mode 100644 (file)
index 0000000..cbc8ff2
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/gradients/30white-to-trans.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/gradients/dark-inner-shadow.png b/philo/contrib/gilbert/static/gilbert/murano/images/gradients/dark-inner-shadow.png
new file mode 100644 (file)
index 0000000..0636daa
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/gradients/dark-inner-shadow.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/grid/col-move-bottom.png b/philo/contrib/gilbert/static/gilbert/murano/images/grid/col-move-bottom.png
new file mode 100644 (file)
index 0000000..cab866d
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/grid/col-move-bottom.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/grid/col-move-top.png b/philo/contrib/gilbert/static/gilbert/murano/images/grid/col-move-top.png
new file mode 100644 (file)
index 0000000..3de7621
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/grid/col-move-top.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/grid/row-editor-btns.png b/philo/contrib/gilbert/static/gilbert/murano/images/grid/row-editor-btns.png
new file mode 100644 (file)
index 0000000..a267203
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/grid/row-editor-btns.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/icons/balloon.png b/philo/contrib/gilbert/static/gilbert/murano/images/icons/balloon.png
new file mode 100755 (executable)
index 0000000..dff9e47
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/icons/balloon.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/icons/cross.png b/philo/contrib/gilbert/static/gilbert/murano/images/icons/cross.png
new file mode 100755 (executable)
index 0000000..e559d44
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/icons/cross.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/icons/d-first.png b/philo/contrib/gilbert/static/gilbert/murano/images/icons/d-first.png
new file mode 100644 (file)
index 0000000..62bb6b6
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/icons/d-first.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/icons/d-last.png b/philo/contrib/gilbert/static/gilbert/murano/images/icons/d-last.png
new file mode 100644 (file)
index 0000000..a45d9d2
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/icons/d-last.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/icons/d-next.png b/philo/contrib/gilbert/static/gilbert/murano/images/icons/d-next.png
new file mode 100644 (file)
index 0000000..669df8b
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/icons/d-next.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/icons/d-prev.png b/philo/contrib/gilbert/static/gilbert/murano/images/icons/d-prev.png
new file mode 100644 (file)
index 0000000..e8f4683
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/icons/d-prev.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/icons/d-refresh.png b/philo/contrib/gilbert/static/gilbert/murano/images/icons/d-refresh.png
new file mode 100644 (file)
index 0000000..d18dbf9
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/icons/d-refresh.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/icons/exclamation.png b/philo/contrib/gilbert/static/gilbert/murano/images/icons/exclamation.png
new file mode 100644 (file)
index 0000000..c088a26
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/icons/exclamation.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/icons/exclamation32.png b/philo/contrib/gilbert/static/gilbert/murano/images/icons/exclamation32.png
new file mode 100755 (executable)
index 0000000..51fde5a
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/icons/exclamation32.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/icons/first.png b/philo/contrib/gilbert/static/gilbert/murano/images/icons/first.png
new file mode 100755 (executable)
index 0000000..a6930a1
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/icons/first.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/icons/information.png b/philo/contrib/gilbert/static/gilbert/murano/images/icons/information.png
new file mode 100755 (executable)
index 0000000..01184cc
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/icons/information.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/icons/last.png b/philo/contrib/gilbert/static/gilbert/murano/images/icons/last.png
new file mode 100755 (executable)
index 0000000..8c63819
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/icons/last.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/icons/next.png b/philo/contrib/gilbert/static/gilbert/murano/images/icons/next.png
new file mode 100755 (executable)
index 0000000..195a9d7
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/icons/next.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/icons/no.png b/philo/contrib/gilbert/static/gilbert/murano/images/icons/no.png
new file mode 100755 (executable)
index 0000000..1f33a1b
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/icons/no.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/icons/prev.png b/philo/contrib/gilbert/static/gilbert/murano/images/icons/prev.png
new file mode 100755 (executable)
index 0000000..79558ab
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/icons/prev.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/icons/refresh.png b/philo/contrib/gilbert/static/gilbert/murano/images/icons/refresh.png
new file mode 100755 (executable)
index 0000000..1c56055
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/icons/refresh.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/icons/yes.png b/philo/contrib/gilbert/static/gilbert/murano/images/icons/yes.png
new file mode 100755 (executable)
index 0000000..46c0a29
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/icons/yes.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/listview/az.png b/philo/contrib/gilbert/static/gilbert/murano/images/listview/az.png
new file mode 100644 (file)
index 0000000..60ecb93
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/listview/az.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/listview/cols.png b/philo/contrib/gilbert/static/gilbert/murano/images/listview/cols.png
new file mode 100644 (file)
index 0000000..4393cca
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/listview/cols.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/listview/header.png b/philo/contrib/gilbert/static/gilbert/murano/images/listview/header.png
new file mode 100644 (file)
index 0000000..bec2aca
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/listview/header.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/listview/headerdrop.png b/philo/contrib/gilbert/static/gilbert/murano/images/listview/headerdrop.png
new file mode 100644 (file)
index 0000000..fe001e8
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/listview/headerdrop.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/listview/listview-sort-asc.png b/philo/contrib/gilbert/static/gilbert/murano/images/listview/listview-sort-asc.png
new file mode 100644 (file)
index 0000000..d11b3e2
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/listview/listview-sort-asc.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/listview/listview-sort-desc.png b/philo/contrib/gilbert/static/gilbert/murano/images/listview/listview-sort-desc.png
new file mode 100644 (file)
index 0000000..627a7d9
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/listview/listview-sort-desc.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/listview/sort-asc.png b/philo/contrib/gilbert/static/gilbert/murano/images/listview/sort-asc.png
new file mode 100644 (file)
index 0000000..c77105b
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/listview/sort-asc.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/listview/sort-desc.png b/philo/contrib/gilbert/static/gilbert/murano/images/listview/sort-desc.png
new file mode 100644 (file)
index 0000000..75e171e
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/listview/sort-desc.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/listview/za.png b/philo/contrib/gilbert/static/gilbert/murano/images/listview/za.png
new file mode 100644 (file)
index 0000000..0c2333d
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/listview/za.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/load.gif b/philo/contrib/gilbert/static/gilbert/murano/images/load.gif
new file mode 100644 (file)
index 0000000..5fe9ccf
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/load.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/menu/arrow.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/menu/arrow.opacity
new file mode 100644 (file)
index 0000000..ef80ff9
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/menu/arrow.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/menu/arrow.png b/philo/contrib/gilbert/static/gilbert/murano/images/menu/arrow.png
new file mode 100644 (file)
index 0000000..f79ebbc
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/menu/arrow.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/mini/mini-bottom.png b/philo/contrib/gilbert/static/gilbert/murano/images/mini/mini-bottom.png
new file mode 100644 (file)
index 0000000..11ae079
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/mini/mini-bottom.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/mini/mini-left.png b/philo/contrib/gilbert/static/gilbert/murano/images/mini/mini-left.png
new file mode 100644 (file)
index 0000000..1fe6f7e
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/mini/mini-left.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/mini/mini-right.png b/philo/contrib/gilbert/static/gilbert/murano/images/mini/mini-right.png
new file mode 100644 (file)
index 0000000..d090c0a
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/mini/mini-right.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/mini/mini-top.png b/philo/contrib/gilbert/static/gilbert/murano/images/mini/mini-top.png
new file mode 100644 (file)
index 0000000..32f0de8
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/mini/mini-top.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/progress.png b/philo/contrib/gilbert/static/gilbert/murano/images/progress.png
new file mode 100644 (file)
index 0000000..d55db12
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/progress.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/resizable/e.png b/philo/contrib/gilbert/static/gilbert/murano/images/resizable/e.png
new file mode 100644 (file)
index 0000000..1d4d6d4
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/resizable/e.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/resizable/n.png b/philo/contrib/gilbert/static/gilbert/murano/images/resizable/n.png
new file mode 100644 (file)
index 0000000..6ac64c9
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/resizable/n.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/resizable/ne.png b/philo/contrib/gilbert/static/gilbert/murano/images/resizable/ne.png
new file mode 100644 (file)
index 0000000..c57ab8e
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/resizable/ne.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/resizable/nw.png b/philo/contrib/gilbert/static/gilbert/murano/images/resizable/nw.png
new file mode 100644 (file)
index 0000000..52262a7
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/resizable/nw.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/resizable/s.png b/philo/contrib/gilbert/static/gilbert/murano/images/resizable/s.png
new file mode 100644 (file)
index 0000000..6ac64c9
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/resizable/s.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/resizable/se.png b/philo/contrib/gilbert/static/gilbert/murano/images/resizable/se.png
new file mode 100644 (file)
index 0000000..109cf8d
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/resizable/se.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/resizable/sw.png b/philo/contrib/gilbert/static/gilbert/murano/images/resizable/sw.png
new file mode 100644 (file)
index 0000000..9b91ce1
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/resizable/sw.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/resizable/w.png b/philo/contrib/gilbert/static/gilbert/murano/images/resizable/w.png
new file mode 100644 (file)
index 0000000..1d4d6d4
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/resizable/w.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/scroller/l.png b/philo/contrib/gilbert/static/gilbert/murano/images/scroller/l.png
new file mode 100644 (file)
index 0000000..5c43d0d
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/scroller/l.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/scroller/r.png b/philo/contrib/gilbert/static/gilbert/murano/images/scroller/r.png
new file mode 100644 (file)
index 0000000..c6111ef
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/scroller/r.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/slider/h.png b/philo/contrib/gilbert/static/gilbert/murano/images/slider/h.png
new file mode 100644 (file)
index 0000000..5ce04c0
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/slider/h.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/slider/thumbh.png b/philo/contrib/gilbert/static/gilbert/murano/images/slider/thumbh.png
new file mode 100644 (file)
index 0000000..9c11f82
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/slider/thumbh.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/slider/thumbv.png b/philo/contrib/gilbert/static/gilbert/murano/images/slider/thumbv.png
new file mode 100644 (file)
index 0000000..9c7419c
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/slider/thumbv.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/slider/v.png b/philo/contrib/gilbert/static/gilbert/murano/images/slider/v.png
new file mode 100644 (file)
index 0000000..72c816c
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/slider/v.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/30-b.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/30-b.opacity
new file mode 100644 (file)
index 0000000..869cec5
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/30-b.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/30-w.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/30-w.opacity
new file mode 100644 (file)
index 0000000..c2ce599
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/30-w.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/30w.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/30w.opacity
new file mode 100644 (file)
index 0000000..35b9066
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/30w.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/30white-to-trans.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/30white-to-trans.opacity
new file mode 100644 (file)
index 0000000..a3ceb55
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/30white-to-trans.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/70w.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/70w.opacity
new file mode 100644 (file)
index 0000000..718ca1d
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/70w.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/80-b.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/80-b.opacity
new file mode 100644 (file)
index 0000000..d4c7378
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/80-b.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/?.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/?.opacity
new file mode 100644 (file)
index 0000000..9e51720
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/?.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/arrow buttons.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/arrow buttons.opacity
new file mode 100644 (file)
index 0000000..1dc866d
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/arrow buttons.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/btn.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/btn.opacity
new file mode 100644 (file)
index 0000000..79387cb
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/btn.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/check.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/check.opacity
new file mode 100644 (file)
index 0000000..9835a54
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/check.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/col-move-bottom.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/col-move-bottom.opacity
new file mode 100644 (file)
index 0000000..8d5a7e0
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/col-move-bottom.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/col-move-top.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/col-move-top.opacity
new file mode 100644 (file)
index 0000000..62b579e
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/col-move-top.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/dark-inner-shadow.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/dark-inner-shadow.opacity
new file mode 100644 (file)
index 0000000..2422c28
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/dark-inner-shadow.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/exclamation.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/exclamation.opacity
new file mode 100644 (file)
index 0000000..09cfd0c
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/exclamation.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/grad-height-25.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/grad-height-25.opacity
new file mode 100644 (file)
index 0000000..4a16036
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/grad-height-25.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/h.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/h.opacity
new file mode 100644 (file)
index 0000000..cb738c5
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/h.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/light-gloss.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/light-gloss.opacity
new file mode 100644 (file)
index 0000000..0dd03ec
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/light-gloss.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/listview-sort.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/listview-sort.opacity
new file mode 100644 (file)
index 0000000..ab60087
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/listview-sort.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/listviewheader.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/listviewheader.opacity
new file mode 100644 (file)
index 0000000..853b4d8
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/listviewheader.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/mini.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/mini.opacity
new file mode 100644 (file)
index 0000000..3ba2b37
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/mini.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/progress.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/progress.opacity
new file mode 100644 (file)
index 0000000..81d4904
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/progress.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/resizable corner.psd b/philo/contrib/gilbert/static/gilbert/murano/images/src/resizable corner.psd
new file mode 100644 (file)
index 0000000..822db29
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/resizable corner.psd differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/resizable long.psd b/philo/contrib/gilbert/static/gilbert/murano/images/src/resizable long.psd
new file mode 100644 (file)
index 0000000..074b076
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/resizable long.psd differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/row-editor-btns.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/row-editor-btns.opacity
new file mode 100644 (file)
index 0000000..040f298
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/row-editor-btns.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/scroller.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/scroller.opacity
new file mode 100644 (file)
index 0000000..6f9ee31
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/scroller.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/sort.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/sort.opacity
new file mode 100644 (file)
index 0000000..e33424c
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/sort.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/tabs.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/tabs.opacity
new file mode 100644 (file)
index 0000000..974441e
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/tabs.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/tb-sprite.psd b/philo/contrib/gilbert/static/gilbert/murano/images/src/tb-sprite.psd
new file mode 100644 (file)
index 0000000..9f0ec67
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/tb-sprite.psd differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/tb.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/tb.opacity
new file mode 100644 (file)
index 0000000..d307ca0
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/tb.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/thumbh.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/thumbh.opacity
new file mode 100644 (file)
index 0000000..6909c40
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/thumbh.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/thumbv.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/thumbv.opacity
new file mode 100644 (file)
index 0000000..64c1a5c
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/thumbv.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/tools.psd b/philo/contrib/gilbert/static/gilbert/murano/images/src/tools.psd
new file mode 100644 (file)
index 0000000..a69c09f
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/tools.psd differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/tooltip-invalid.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/tooltip-invalid.opacity
new file mode 100644 (file)
index 0000000..dcfcb81
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/tooltip-invalid.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/tooltip.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/tooltip.opacity
new file mode 100644 (file)
index 0000000..0264045
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/tooltip.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/triggers/blank.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/triggers/blank.opacity
new file mode 100644 (file)
index 0000000..2f124fb
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/triggers/blank.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/triggers/blank.png b/philo/contrib/gilbert/static/gilbert/murano/images/src/triggers/blank.png
new file mode 100644 (file)
index 0000000..983fdff
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/triggers/blank.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/triggers/clear.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/triggers/clear.opacity
new file mode 100644 (file)
index 0000000..a51a849
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/triggers/clear.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/triggers/date.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/triggers/date.opacity
new file mode 100644 (file)
index 0000000..ce54557
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/triggers/date.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/triggers/drop.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/triggers/drop.opacity
new file mode 100644 (file)
index 0000000..f7065e1
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/triggers/drop.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/triggers/search.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/triggers/search.opacity
new file mode 100644 (file)
index 0000000..01c7e9b
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/triggers/search.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/v.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/v.opacity
new file mode 100644 (file)
index 0000000..81a092d
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/v.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/window-dark.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/window-dark.opacity
new file mode 100644 (file)
index 0000000..1d4cde2
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/window-dark.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/window.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/window.opacity
new file mode 100644 (file)
index 0000000..644311c
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/window.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/src/x.opacity b/philo/contrib/gilbert/static/gilbert/murano/images/src/x.opacity
new file mode 100644 (file)
index 0000000..da05b1f
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/src/x.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tab/c/Bottom.png b/philo/contrib/gilbert/static/gilbert/murano/images/tab/c/Bottom.png
new file mode 100644 (file)
index 0000000..f12c35b
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tab/c/Bottom.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tab/c/Top.png b/philo/contrib/gilbert/static/gilbert/murano/images/tab/c/Top.png
new file mode 100644 (file)
index 0000000..0d9880c
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tab/c/Top.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tab/close.png b/philo/contrib/gilbert/static/gilbert/murano/images/tab/close.png
new file mode 100644 (file)
index 0000000..7139a96
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tab/close.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tab/l/Bottom.png b/philo/contrib/gilbert/static/gilbert/murano/images/tab/l/Bottom.png
new file mode 100644 (file)
index 0000000..1a6f7c0
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tab/l/Bottom.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tab/l/Top.png b/philo/contrib/gilbert/static/gilbert/murano/images/tab/l/Top.png
new file mode 100644 (file)
index 0000000..9bbe709
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tab/l/Top.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tab/r/Bottom.png b/philo/contrib/gilbert/static/gilbert/murano/images/tab/r/Bottom.png
new file mode 100644 (file)
index 0000000..0e16744
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tab/r/Bottom.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tab/r/Top.png b/philo/contrib/gilbert/static/gilbert/murano/images/tab/r/Top.png
new file mode 100644 (file)
index 0000000..85ea39d
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tab/r/Top.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tb-sprite.png b/philo/contrib/gilbert/static/gilbert/murano/images/tb-sprite.png
new file mode 100644 (file)
index 0000000..d4e4c53
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tb-sprite.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tb.png b/philo/contrib/gilbert/static/gilbert/murano/images/tb.png
new file mode 100644 (file)
index 0000000..01a80d9
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tb.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tools.png b/philo/contrib/gilbert/static/gilbert/murano/images/tools.png
new file mode 100644 (file)
index 0000000..53540f0
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tools.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tree/arrows.gif b/philo/contrib/gilbert/static/gilbert/murano/images/tree/arrows.gif
new file mode 100644 (file)
index 0000000..2683463
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tree/arrows.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tree/drop-add.png b/philo/contrib/gilbert/static/gilbert/murano/images/tree/drop-add.png
new file mode 100755 (executable)
index 0000000..49746a1
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tree/drop-add.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tree/drop-between.gif b/philo/contrib/gilbert/static/gilbert/murano/images/tree/drop-between.gif
new file mode 100644 (file)
index 0000000..5c6c09d
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tree/drop-between.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tree/drop-no.png b/philo/contrib/gilbert/static/gilbert/murano/images/tree/drop-no.png
new file mode 100755 (executable)
index 0000000..1f33a1b
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tree/drop-no.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tree/drop-over.gif b/philo/contrib/gilbert/static/gilbert/murano/images/tree/drop-over.gif
new file mode 100644 (file)
index 0000000..30d1ca7
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tree/drop-over.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tree/drop-under.gif b/philo/contrib/gilbert/static/gilbert/murano/images/tree/drop-under.gif
new file mode 100644 (file)
index 0000000..85f66b1
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tree/drop-under.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tree/drop-yes.png b/philo/contrib/gilbert/static/gilbert/murano/images/tree/drop-yes.png
new file mode 100755 (executable)
index 0000000..46c0a29
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tree/drop-yes.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-end-minus-nl.gif b/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-end-minus-nl.gif
new file mode 100644 (file)
index 0000000..0f2f2fd
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-end-minus-nl.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-end-minus.gif b/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-end-minus.gif
new file mode 100644 (file)
index 0000000..e8995a9
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-end-minus.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-end-plus-nl.gif b/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-end-plus-nl.gif
new file mode 100644 (file)
index 0000000..095afc4
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-end-plus-nl.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-end-plus.gif b/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-end-plus.gif
new file mode 100644 (file)
index 0000000..6049b9a
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-end-plus.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-end.gif b/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-end.gif
new file mode 100644 (file)
index 0000000..f24ddee
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-end.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-line.gif b/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-line.gif
new file mode 100644 (file)
index 0000000..75e6da4
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-line.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-minus-nl.gif b/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-minus-nl.gif
new file mode 100644 (file)
index 0000000..0f2f2fd
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-minus-nl.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-minus.gif b/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-minus.gif
new file mode 100644 (file)
index 0000000..df410a0
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-minus.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-plus-nl.gif b/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-plus-nl.gif
new file mode 100644 (file)
index 0000000..095afc4
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-plus-nl.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-plus.gif b/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-plus.gif
new file mode 100644 (file)
index 0000000..4fe31a3
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow-plus.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow.gif b/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow.gif
new file mode 100644 (file)
index 0000000..b8f4208
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tree/elbow.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tree/folder-open.png b/philo/contrib/gilbert/static/gilbert/murano/images/tree/folder-open.png
new file mode 100755 (executable)
index 0000000..dc05885
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tree/folder-open.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tree/folder.png b/philo/contrib/gilbert/static/gilbert/murano/images/tree/folder.png
new file mode 100755 (executable)
index 0000000..87ff120
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tree/folder.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tree/leaf.png b/philo/contrib/gilbert/static/gilbert/murano/images/tree/leaf.png
new file mode 100755 (executable)
index 0000000..8b17b3c
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tree/leaf.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tree/loading.gif b/philo/contrib/gilbert/static/gilbert/murano/images/tree/loading.gif
new file mode 100644 (file)
index 0000000..5fe9ccf
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tree/loading.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tree/s.gif b/philo/contrib/gilbert/static/gilbert/murano/images/tree/s.gif
new file mode 100644 (file)
index 0000000..1d11fa9
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tree/s.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/trigger/blank.png b/philo/contrib/gilbert/static/gilbert/murano/images/trigger/blank.png
new file mode 100644 (file)
index 0000000..165ba02
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/trigger/blank.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/trigger/clear.png b/philo/contrib/gilbert/static/gilbert/murano/images/trigger/clear.png
new file mode 100644 (file)
index 0000000..a7c97bf
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/trigger/clear.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/trigger/date.png b/philo/contrib/gilbert/static/gilbert/murano/images/trigger/date.png
new file mode 100644 (file)
index 0000000..6fdaa3f
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/trigger/date.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/trigger/drop.png b/philo/contrib/gilbert/static/gilbert/murano/images/trigger/drop.png
new file mode 100644 (file)
index 0000000..5a8a8b2
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/trigger/drop.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/trigger/search.png b/philo/contrib/gilbert/static/gilbert/murano/images/trigger/search.png
new file mode 100644 (file)
index 0000000..f878e02
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/trigger/search.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tt/bc.png b/philo/contrib/gilbert/static/gilbert/murano/images/tt/bc.png
new file mode 100644 (file)
index 0000000..f2022df
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tt/bc.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tt/bl.png b/philo/contrib/gilbert/static/gilbert/murano/images/tt/bl.png
new file mode 100644 (file)
index 0000000..fad7b21
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tt/bl.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tt/br.png b/philo/contrib/gilbert/static/gilbert/murano/images/tt/br.png
new file mode 100644 (file)
index 0000000..217491d
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tt/br.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tt/c.png b/philo/contrib/gilbert/static/gilbert/murano/images/tt/c.png
new file mode 100644 (file)
index 0000000..70f3d1d
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tt/c.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-bc.png b/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-bc.png
new file mode 100644 (file)
index 0000000..eb124df
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-bc.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-bl.png b/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-bl.png
new file mode 100644 (file)
index 0000000..7c7721f
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-bl.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-br.png b/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-br.png
new file mode 100644 (file)
index 0000000..19aaad9
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-br.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-c.png b/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-c.png
new file mode 100644 (file)
index 0000000..b23e939
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-c.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-ml.png b/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-ml.png
new file mode 100644 (file)
index 0000000..34d3f1a
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-ml.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-mr.png b/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-mr.png
new file mode 100644 (file)
index 0000000..6dbacc3
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-mr.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-tc.png b/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-tc.png
new file mode 100644 (file)
index 0000000..3b55ecf
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-tc.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-tl.png b/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-tl.png
new file mode 100644 (file)
index 0000000..12fa555
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-tl.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-tr.png b/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-tr.png
new file mode 100644 (file)
index 0000000..bc6e3bf
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tt/i-tr.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tt/ml.png b/philo/contrib/gilbert/static/gilbert/murano/images/tt/ml.png
new file mode 100644 (file)
index 0000000..4bebef2
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tt/ml.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tt/mr.png b/philo/contrib/gilbert/static/gilbert/murano/images/tt/mr.png
new file mode 100644 (file)
index 0000000..23aebdd
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tt/mr.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tt/tc.png b/philo/contrib/gilbert/static/gilbert/murano/images/tt/tc.png
new file mode 100644 (file)
index 0000000..2108682
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tt/tc.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tt/tl.png b/philo/contrib/gilbert/static/gilbert/murano/images/tt/tl.png
new file mode 100644 (file)
index 0000000..0d86302
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tt/tl.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/tt/tr.png b/philo/contrib/gilbert/static/gilbert/murano/images/tt/tr.png
new file mode 100644 (file)
index 0000000..70d0cc9
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/tt/tr.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/bc.png b/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/bc.png
new file mode 100644 (file)
index 0000000..a2bfead
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/bc.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/bl.png b/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/bl.png
new file mode 100644 (file)
index 0000000..5a6ce5b
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/bl.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/br.png b/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/br.png
new file mode 100644 (file)
index 0000000..bbde5b2
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/br.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/c.png b/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/c.png
new file mode 100644 (file)
index 0000000..8a6b4eb
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/c.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/l.png b/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/l.png
new file mode 100644 (file)
index 0000000..af70f5f
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/l.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/r.png b/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/r.png
new file mode 100644 (file)
index 0000000..bf77670
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/r.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/tc.png b/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/tc.png
new file mode 100644 (file)
index 0000000..8c65fb1
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/tc.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/tl.png b/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/tl.png
new file mode 100644 (file)
index 0000000..c253ea5
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/tl.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/tr.png b/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/tr.png
new file mode 100644 (file)
index 0000000..b371422
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/windowdark/tr.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/bc.png b/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/bc.png
new file mode 100644 (file)
index 0000000..0ce7973
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/bc.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/bl.png b/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/bl.png
new file mode 100644 (file)
index 0000000..e2f5bbf
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/bl.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/br.png b/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/br.png
new file mode 100644 (file)
index 0000000..9ed3c34
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/br.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/c.png b/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/c.png
new file mode 100644 (file)
index 0000000..bcf4ec9
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/c.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/l.png b/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/l.png
new file mode 100644 (file)
index 0000000..e85f76e
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/l.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/r.png b/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/r.png
new file mode 100644 (file)
index 0000000..36cc2a3
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/r.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/tc.png b/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/tc.png
new file mode 100644 (file)
index 0000000..ea82da9
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/tc.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/tl.png b/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/tl.png
new file mode 100644 (file)
index 0000000..ff1586f
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/tl.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/tr.png b/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/tr.png
new file mode 100644 (file)
index 0000000..42087c6
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/images/windowlight/tr.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/boundlist/trigger-arrow.png b/philo/contrib/gilbert/static/gilbert/murano/img/boundlist/trigger-arrow.png
new file mode 100644 (file)
index 0000000..11daac3
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/boundlist/trigger-arrow.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/btn-group/btn-group-default-framed-corners.gif b/philo/contrib/gilbert/static/gilbert/murano/img/btn-group/btn-group-default-framed-corners.gif
new file mode 100644 (file)
index 0000000..70f2dd4
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/btn-group/btn-group-default-framed-corners.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/btn-group/btn-group-default-framed-notitle-corners.gif b/philo/contrib/gilbert/static/gilbert/murano/img/btn-group/btn-group-default-framed-notitle-corners.gif
new file mode 100644 (file)
index 0000000..70f2dd4
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/btn-group/btn-group-default-framed-notitle-corners.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/btn-group/btn-group-default-framed-notitle-sides.gif b/philo/contrib/gilbert/static/gilbert/murano/img/btn-group/btn-group-default-framed-notitle-sides.gif
new file mode 100644 (file)
index 0000000..44a9334
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/btn-group/btn-group-default-framed-notitle-sides.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/btn-group/btn-group-default-framed-sides.gif b/philo/contrib/gilbert/static/gilbert/murano/img/btn-group/btn-group-default-framed-sides.gif
new file mode 100644 (file)
index 0000000..ebe97b7
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/btn-group/btn-group-default-framed-sides.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/btn/arrv.png b/philo/contrib/gilbert/static/gilbert/murano/img/btn/arrv.png
new file mode 100644 (file)
index 0000000..66fdce0
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/btn/arrv.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/btn/left-over.png b/philo/contrib/gilbert/static/gilbert/murano/img/btn/left-over.png
new file mode 100644 (file)
index 0000000..7ef8f67
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/btn/left-over.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/btn/left.png b/philo/contrib/gilbert/static/gilbert/murano/img/btn/left.png
new file mode 100644 (file)
index 0000000..b0dc68c
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/btn/left.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/btn/menu.png b/philo/contrib/gilbert/static/gilbert/murano/img/btn/menu.png
new file mode 100644 (file)
index 0000000..6099f47
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/btn/menu.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/btn/right-over.png b/philo/contrib/gilbert/static/gilbert/murano/img/btn/right-over.png
new file mode 100644 (file)
index 0000000..2cb9783
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/btn/right-over.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/btn/right.png b/philo/contrib/gilbert/static/gilbert/murano/img/btn/right.png
new file mode 100644 (file)
index 0000000..4e68d26
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/btn/right.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/btn/splith.png b/philo/contrib/gilbert/static/gilbert/murano/img/btn/splith.png
new file mode 100644 (file)
index 0000000..a5402b7
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/btn/splith.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/btn/splitv.png b/philo/contrib/gilbert/static/gilbert/murano/img/btn/splitv.png
new file mode 100644 (file)
index 0000000..82970e9
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/btn/splitv.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/button/arrow.gif b/philo/contrib/gilbert/static/gilbert/murano/img/button/arrow.gif
new file mode 100644 (file)
index 0000000..3ab4f71
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/button/arrow.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/button/btn.gif b/philo/contrib/gilbert/static/gilbert/murano/img/button/btn.gif
new file mode 100644 (file)
index 0000000..06b404d
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/button/btn.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/button/group-cs.gif b/philo/contrib/gilbert/static/gilbert/murano/img/button/group-cs.gif
new file mode 100644 (file)
index 0000000..3d1dca8
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/button/group-cs.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/button/group-lr.gif b/philo/contrib/gilbert/static/gilbert/murano/img/button/group-lr.gif
new file mode 100644 (file)
index 0000000..7c549f9
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/button/group-lr.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/button/group-tb.gif b/philo/contrib/gilbert/static/gilbert/murano/img/button/group-tb.gif
new file mode 100644 (file)
index 0000000..adeb0a4
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/button/group-tb.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow-b-noline.gif b/philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow-b-noline.gif
new file mode 100644 (file)
index 0000000..a4220ee
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow-b-noline.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow-b.gif b/philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow-b.gif
new file mode 100644 (file)
index 0000000..84b6470
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow-b.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow-bo.gif b/philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow-bo.gif
new file mode 100644 (file)
index 0000000..548700b
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow-bo.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow-light.gif b/philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow-light.gif
new file mode 100644 (file)
index 0000000..08783c9
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow-light.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow-noline.gif b/philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow-noline.gif
new file mode 100644 (file)
index 0000000..0953eab
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow-noline.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow-o.gif b/philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow-o.gif
new file mode 100644 (file)
index 0000000..89c70f3
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow-o.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow.gif b/philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow.gif
new file mode 100644 (file)
index 0000000..8940774
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/button/s-arrow.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/datepicker/datepicker-footer-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/datepicker/datepicker-footer-bg.gif
new file mode 100644 (file)
index 0000000..ea3026a
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/datepicker/datepicker-footer-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/datepicker/datepicker-footer-bg.png b/philo/contrib/gilbert/static/gilbert/murano/img/datepicker/datepicker-footer-bg.png
new file mode 100644 (file)
index 0000000..c062d0d
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/datepicker/datepicker-footer-bg.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/datepicker/datepicker-header-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/datepicker/datepicker-header-bg.gif
new file mode 100644 (file)
index 0000000..ee316fb
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/datepicker/datepicker-header-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/datepicker/datepicker-header-bg.png b/philo/contrib/gilbert/static/gilbert/murano/img/datepicker/datepicker-header-bg.png
new file mode 100644 (file)
index 0000000..45d74d7
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/datepicker/datepicker-header-bg.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/dd/drop-add.gif b/philo/contrib/gilbert/static/gilbert/murano/img/dd/drop-add.gif
new file mode 100644 (file)
index 0000000..b22cd14
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/dd/drop-add.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/dd/drop-no.gif b/philo/contrib/gilbert/static/gilbert/murano/img/dd/drop-no.gif
new file mode 100644 (file)
index 0000000..08d0833
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/dd/drop-no.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/dd/drop-yes.gif b/philo/contrib/gilbert/static/gilbert/murano/img/dd/drop-yes.gif
new file mode 100644 (file)
index 0000000..8aacb30
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/dd/drop-yes.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/editor/tb-sprite.gif b/philo/contrib/gilbert/static/gilbert/murano/img/editor/tb-sprite.gif
new file mode 100755 (executable)
index 0000000..fb70577
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/editor/tb-sprite.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/editor/tb-sprite.png b/philo/contrib/gilbert/static/gilbert/murano/img/editor/tb-sprite.png
new file mode 100644 (file)
index 0000000..d4e4c53
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/editor/tb-sprite.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/form-invalid-tip/form-invalid-tip-default-corners.gif b/philo/contrib/gilbert/static/gilbert/murano/img/form-invalid-tip/form-invalid-tip-default-corners.gif
new file mode 100644 (file)
index 0000000..a16f169
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/form-invalid-tip/form-invalid-tip-default-corners.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/form-invalid-tip/form-invalid-tip-default-sides.gif b/philo/contrib/gilbert/static/gilbert/murano/img/form-invalid-tip/form-invalid-tip-default-sides.gif
new file mode 100644 (file)
index 0000000..bd64f32
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/form-invalid-tip/form-invalid-tip-default-sides.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/form/checked.png b/philo/contrib/gilbert/static/gilbert/murano/img/form/checked.png
new file mode 100644 (file)
index 0000000..f22d0ff
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/form/checked.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/form/exclamation.png b/philo/contrib/gilbert/static/gilbert/murano/img/form/exclamation.png
new file mode 100644 (file)
index 0000000..c088a26
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/form/exclamation.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/form/radioed.png b/philo/contrib/gilbert/static/gilbert/murano/img/form/radioed.png
new file mode 100644 (file)
index 0000000..1db47e8
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/form/radioed.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/form/spinner-small.gif b/philo/contrib/gilbert/static/gilbert/murano/img/form/spinner-small.gif
new file mode 100644 (file)
index 0000000..e70f8d8
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/form/spinner-small.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/form/spinner.gif b/philo/contrib/gilbert/static/gilbert/murano/img/form/spinner.gif
new file mode 100644 (file)
index 0000000..1e323bf
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/form/spinner.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/form/trigger-blank.png b/philo/contrib/gilbert/static/gilbert/murano/img/form/trigger-blank.png
new file mode 100644 (file)
index 0000000..578d81f
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/form/trigger-blank.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/form/trigger-clear.png b/philo/contrib/gilbert/static/gilbert/murano/img/form/trigger-clear.png
new file mode 100644 (file)
index 0000000..a7c97bf
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/form/trigger-clear.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/form/trigger-date.png b/philo/contrib/gilbert/static/gilbert/murano/img/form/trigger-date.png
new file mode 100644 (file)
index 0000000..6fdaa3f
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/form/trigger-date.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/form/trigger-drop.png b/philo/contrib/gilbert/static/gilbert/murano/img/form/trigger-drop.png
new file mode 100644 (file)
index 0000000..5a8a8b2
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/form/trigger-drop.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/form/trigger-search.png b/philo/contrib/gilbert/static/gilbert/murano/img/form/trigger-search.png
new file mode 100644 (file)
index 0000000..f878e02
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/form/trigger-search.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/form/trigger-tpl.gif b/philo/contrib/gilbert/static/gilbert/murano/img/form/trigger-tpl.gif
new file mode 100644 (file)
index 0000000..e3701a3
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/form/trigger-tpl.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/form/unchecked.png b/philo/contrib/gilbert/static/gilbert/murano/img/form/unchecked.png
new file mode 100644 (file)
index 0000000..259deac
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/form/unchecked.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/form/unradioed.png b/philo/contrib/gilbert/static/gilbert/murano/img/form/unradioed.png
new file mode 100644 (file)
index 0000000..6db37df
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/form/unradioed.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/arrow-left-white.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/arrow-left-white.gif
new file mode 100644 (file)
index 0000000..63088f5
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/arrow-left-white.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/arrow-right-white.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/arrow-right-white.gif
new file mode 100644 (file)
index 0000000..e9e0678
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/arrow-right-white.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/cell-special-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/cell-special-bg.gif
new file mode 100644 (file)
index 0000000..d76ffbc
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/cell-special-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/cell-special-bg.png b/philo/contrib/gilbert/static/gilbert/murano/img/grid/cell-special-bg.png
new file mode 100644 (file)
index 0000000..0bcc236
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/cell-special-bg.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/cell-special-selected-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/cell-special-selected-bg.gif
new file mode 100644 (file)
index 0000000..f1da867
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/cell-special-selected-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/cell-special-selected-bg.png b/philo/contrib/gilbert/static/gilbert/murano/img/grid/cell-special-selected-bg.png
new file mode 100644 (file)
index 0000000..500c3bd
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/cell-special-selected-bg.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/checked.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/checked.gif
new file mode 100644 (file)
index 0000000..fad5893
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/checked.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/col-move-bottom.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/col-move-bottom.gif
new file mode 100644 (file)
index 0000000..cc1e473
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/col-move-bottom.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/col-move-top.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/col-move-top.gif
new file mode 100644 (file)
index 0000000..58ff32c
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/col-move-top.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/column-header-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/column-header-bg.gif
new file mode 100644 (file)
index 0000000..5895dba
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/column-header-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/column-header-bg.png b/philo/contrib/gilbert/static/gilbert/murano/img/grid/column-header-bg.png
new file mode 100644 (file)
index 0000000..b181a47
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/column-header-bg.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/column-header-over-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/column-header-over-bg.gif
new file mode 100644 (file)
index 0000000..54c1294
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/column-header-over-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/column-header-over-bg.png b/philo/contrib/gilbert/static/gilbert/murano/img/grid/column-header-over-bg.png
new file mode 100644 (file)
index 0000000..3f20649
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/column-header-over-bg.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/columns.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/columns.gif
new file mode 100644 (file)
index 0000000..2d3a823
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/columns.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/dd-insert-arrow-left.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/dd-insert-arrow-left.gif
new file mode 100644 (file)
index 0000000..5d923b2
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/dd-insert-arrow-left.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/dd-insert-arrow-left.png b/philo/contrib/gilbert/static/gilbert/murano/img/grid/dd-insert-arrow-left.png
new file mode 100755 (executable)
index 0000000..5dc6967
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/dd-insert-arrow-left.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/dd-insert-arrow-right.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/dd-insert-arrow-right.gif
new file mode 100644 (file)
index 0000000..8d154db
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/dd-insert-arrow-right.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/dd-insert-arrow-right.png b/philo/contrib/gilbert/static/gilbert/murano/img/grid/dd-insert-arrow-right.png
new file mode 100755 (executable)
index 0000000..b1a1819
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/dd-insert-arrow-right.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/dirty.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/dirty.gif
new file mode 100644 (file)
index 0000000..4f217a4
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/dirty.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/done.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/done.gif
new file mode 100644 (file)
index 0000000..a937cb2
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/done.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/drop-no.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/drop-no.gif
new file mode 100644 (file)
index 0000000..31a332b
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/drop-no.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/drop-yes.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/drop-yes.gif
new file mode 100644 (file)
index 0000000..926010e
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/drop-yes.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/footer-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/footer-bg.gif
new file mode 100644 (file)
index 0000000..126120f
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/footer-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid-blue-hd.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid-blue-hd.gif
new file mode 100644 (file)
index 0000000..862094e
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid-blue-hd.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid-blue-split.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid-blue-split.gif
new file mode 100644 (file)
index 0000000..5286f58
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid-blue-split.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid-hrow.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid-hrow.gif
new file mode 100644 (file)
index 0000000..6374104
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid-hrow.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid-loading.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid-loading.gif
new file mode 100644 (file)
index 0000000..d112c54
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid-loading.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid-split.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid-split.gif
new file mode 100644 (file)
index 0000000..c76a16e
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid-split.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid-vista-hd.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid-vista-hd.gif
new file mode 100644 (file)
index 0000000..d097263
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid-vista-hd.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid3-hd-btn.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid3-hd-btn.gif
new file mode 100644 (file)
index 0000000..2112607
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid3-hd-btn.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid3-hrow-over.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid3-hrow-over.gif
new file mode 100644 (file)
index 0000000..f9c07af
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid3-hrow-over.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid3-hrow.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid3-hrow.gif
new file mode 100644 (file)
index 0000000..8d459a3
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid3-hrow.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid3-rowheader.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid3-rowheader.gif
new file mode 100644 (file)
index 0000000..2799b45
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/grid3-rowheader.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/group-by.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/group-by.gif
new file mode 100644 (file)
index 0000000..d6075bb
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/group-by.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/group-collapse.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/group-collapse.gif
new file mode 100644 (file)
index 0000000..495bb05
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/group-collapse.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/group-expand-sprite.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/group-expand-sprite.gif
new file mode 100644 (file)
index 0000000..9c1653b
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/group-expand-sprite.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/group-expand.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/group-expand.gif
new file mode 100644 (file)
index 0000000..a33ac30
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/group-expand.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/hd-pop.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/hd-pop.gif
new file mode 100644 (file)
index 0000000..eb8ba79
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/hd-pop.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/hmenu-asc.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/hmenu-asc.gif
new file mode 100644 (file)
index 0000000..8917e0e
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/hmenu-asc.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/hmenu-desc.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/hmenu-desc.gif
new file mode 100644 (file)
index 0000000..f26b7c2
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/hmenu-desc.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/hmenu-lock.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/hmenu-lock.gif
new file mode 100644 (file)
index 0000000..1596126
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/hmenu-lock.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/hmenu-lock.png b/philo/contrib/gilbert/static/gilbert/murano/img/grid/hmenu-lock.png
new file mode 100644 (file)
index 0000000..8b81e7f
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/hmenu-lock.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/hmenu-unlock.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/hmenu-unlock.gif
new file mode 100644 (file)
index 0000000..af59cf9
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/hmenu-unlock.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/hmenu-unlock.png b/philo/contrib/gilbert/static/gilbert/murano/img/grid/hmenu-unlock.png
new file mode 100644 (file)
index 0000000..9dd5df3
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/hmenu-unlock.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/invalid_line.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/invalid_line.gif
new file mode 100644 (file)
index 0000000..fb7e0f3
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/invalid_line.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/loading.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/loading.gif
new file mode 100644 (file)
index 0000000..e846e1d
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/loading.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/mso-hd.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/mso-hd.gif
new file mode 100644 (file)
index 0000000..669f3cf
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/mso-hd.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/nowait.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/nowait.gif
new file mode 100644 (file)
index 0000000..4c5862c
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/nowait.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/page-first-disabled.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/page-first-disabled.gif
new file mode 100644 (file)
index 0000000..1e02c41
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/page-first-disabled.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/page-first.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/page-first.gif
new file mode 100644 (file)
index 0000000..d84f41a
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/page-first.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/page-last-disabled.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/page-last-disabled.gif
new file mode 100644 (file)
index 0000000..8697067
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/page-last-disabled.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/page-last.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/page-last.gif
new file mode 100644 (file)
index 0000000..3df5c2b
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/page-last.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/page-next-disabled.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/page-next-disabled.gif
new file mode 100644 (file)
index 0000000..90a7756
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/page-next-disabled.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/page-next.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/page-next.gif
new file mode 100644 (file)
index 0000000..9601635
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/page-next.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/page-prev-disabled.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/page-prev-disabled.gif
new file mode 100644 (file)
index 0000000..37154d6
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/page-prev-disabled.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/page-prev.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/page-prev.gif
new file mode 100644 (file)
index 0000000..eb70cf8
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/page-prev.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/pick-button.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/pick-button.gif
new file mode 100644 (file)
index 0000000..6957924
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/pick-button.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/property-cell-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/property-cell-bg.gif
new file mode 100644 (file)
index 0000000..77d029f
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/property-cell-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/property-cell-selected-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/property-cell-selected-bg.gif
new file mode 100644 (file)
index 0000000..1dfe9a6
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/property-cell-selected-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/refresh-disabled.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/refresh-disabled.gif
new file mode 100644 (file)
index 0000000..607800b
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/refresh-disabled.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/refresh.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/refresh.gif
new file mode 100644 (file)
index 0000000..110f684
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/refresh.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/row-check-sprite.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/row-check-sprite.gif
new file mode 100644 (file)
index 0000000..6101164
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/row-check-sprite.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/row-expand-sprite.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/row-expand-sprite.gif
new file mode 100644 (file)
index 0000000..6f4d874
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/row-expand-sprite.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/row-over.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/row-over.gif
new file mode 100644 (file)
index 0000000..b288e38
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/row-over.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/row-sel.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/row-sel.gif
new file mode 100644 (file)
index 0000000..98209e6
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/row-sel.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/sort-hd.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/sort-hd.gif
new file mode 100644 (file)
index 0000000..45e545f
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/sort-hd.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/sort_asc.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/sort_asc.gif
new file mode 100644 (file)
index 0000000..67a2a4c
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/sort_asc.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/sort_desc.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/sort_desc.gif
new file mode 100644 (file)
index 0000000..34db47c
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/sort_desc.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/unchecked.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/unchecked.gif
new file mode 100644 (file)
index 0000000..43823e5
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/unchecked.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/grid/wait.gif b/philo/contrib/gilbert/static/gilbert/murano/img/grid/wait.gif
new file mode 100644 (file)
index 0000000..471c1a4
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/grid/wait.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/layout/mini-bottom.gif b/philo/contrib/gilbert/static/gilbert/murano/img/layout/mini-bottom.gif
new file mode 100644 (file)
index 0000000..c18f9e3
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/layout/mini-bottom.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/layout/mini-left.gif b/philo/contrib/gilbert/static/gilbert/murano/img/layout/mini-left.gif
new file mode 100644 (file)
index 0000000..99f7993
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/layout/mini-left.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/layout/mini-right.gif b/philo/contrib/gilbert/static/gilbert/murano/img/layout/mini-right.gif
new file mode 100644 (file)
index 0000000..5b13c5a
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/layout/mini-right.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/layout/mini-top.gif b/philo/contrib/gilbert/static/gilbert/murano/img/layout/mini-top.gif
new file mode 100644 (file)
index 0000000..a4ca2bb
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/layout/mini-top.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/loading.gif b/philo/contrib/gilbert/static/gilbert/murano/img/loading.gif
new file mode 100644 (file)
index 0000000..da7b866
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/loading.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/menu/checked.gif b/philo/contrib/gilbert/static/gilbert/murano/img/menu/checked.gif
new file mode 100644 (file)
index 0000000..fad5893
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/menu/checked.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/menu/group-checked.gif b/philo/contrib/gilbert/static/gilbert/murano/img/menu/group-checked.gif
new file mode 100644 (file)
index 0000000..d30b3e5
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/menu/group-checked.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/menu/item-over.gif b/philo/contrib/gilbert/static/gilbert/murano/img/menu/item-over.gif
new file mode 100644 (file)
index 0000000..da1f289
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/menu/item-over.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/menu/menu-parent.gif b/philo/contrib/gilbert/static/gilbert/murano/img/menu/menu-parent.gif
new file mode 100644 (file)
index 0000000..1e37562
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/menu/menu-parent.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/menu/menu.gif b/philo/contrib/gilbert/static/gilbert/murano/img/menu/menu.gif
new file mode 100644 (file)
index 0000000..30a2c4b
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/menu/menu.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/menu/unchecked.gif b/philo/contrib/gilbert/static/gilbert/murano/img/menu/unchecked.gif
new file mode 100644 (file)
index 0000000..43823e5
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/menu/unchecked.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-bottom-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-bottom-bg.gif
new file mode 100644 (file)
index 0000000..408066b
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-bottom-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-bottom-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-bottom-bg.gif
new file mode 100644 (file)
index 0000000..ad2113f
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-bottom-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-bottom-corners.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-bottom-corners.gif
new file mode 100644 (file)
index 0000000..5732779
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-bottom-corners.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-bottom-sides.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-bottom-sides.gif
new file mode 100644 (file)
index 0000000..8fe4a8c
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-bottom-sides.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-bottom-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-bottom-bg.gif
new file mode 100644 (file)
index 0000000..4556726
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-bottom-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif
new file mode 100644 (file)
index 0000000..4b1e4a7
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif
new file mode 100644 (file)
index 0000000..6ac7253
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-left-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-left-bg.gif
new file mode 100644 (file)
index 0000000..73a97fd
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-left-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-left-corners.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-left-corners.gif
new file mode 100644 (file)
index 0000000..0c8e78f
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-left-corners.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-left-sides.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-left-sides.gif
new file mode 100644 (file)
index 0000000..785f0e0
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-left-sides.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-right-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-right-bg.gif
new file mode 100644 (file)
index 0000000..3a2f9de
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-right-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-right-corners.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-right-corners.gif
new file mode 100644 (file)
index 0000000..cf884c1
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-right-corners.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-right-sides.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-right-sides.gif
new file mode 100644 (file)
index 0000000..e0ad71c
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-right-sides.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-top-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-top-bg.gif
new file mode 100644 (file)
index 0000000..78f64e4
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-top-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-top-corners.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-top-corners.gif
new file mode 100644 (file)
index 0000000..e7a0bae
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-top-corners.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-top-sides.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-top-sides.gif
new file mode 100644 (file)
index 0000000..672ff47
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-collapsed-top-sides.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-left-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-left-bg.gif
new file mode 100644 (file)
index 0000000..ff78a2b
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-left-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-left-corners.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-left-corners.gif
new file mode 100644 (file)
index 0000000..05207db
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-left-corners.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-left-sides.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-left-sides.gif
new file mode 100644 (file)
index 0000000..aa8b0d7
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-left-sides.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-right-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-right-bg.gif
new file mode 100644 (file)
index 0000000..df72cd3
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-right-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-right-corners.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-right-corners.gif
new file mode 100644 (file)
index 0000000..be1a20f
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-right-corners.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-right-sides.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-right-sides.gif
new file mode 100644 (file)
index 0000000..9eff2e0
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-right-sides.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-top-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-top-bg.gif
new file mode 100644 (file)
index 0000000..810660c
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-top-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-top-corners.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-top-corners.gif
new file mode 100644 (file)
index 0000000..d11139a
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-top-corners.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-top-sides.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-top-sides.gif
new file mode 100644 (file)
index 0000000..1f0a376
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-framed-top-sides.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-left-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-left-bg.gif
new file mode 100644 (file)
index 0000000..381535d
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-left-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-right-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-right-bg.gif
new file mode 100644 (file)
index 0000000..7240859
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-right-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-top-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-top-bg.gif
new file mode 100644 (file)
index 0000000..df8ba35
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel-header/panel-header-default-top-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel/panel-default-framed-corners.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel/panel-default-framed-corners.gif
new file mode 100644 (file)
index 0000000..1f6cc2e
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel/panel-default-framed-corners.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/panel/panel-default-framed-sides.gif b/philo/contrib/gilbert/static/gilbert/murano/img/panel/panel-default-framed-sides.gif
new file mode 100644 (file)
index 0000000..afe0ad9
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/panel/panel-default-framed-sides.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/progress/progress-default-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/progress/progress-default-bg.gif
new file mode 100644 (file)
index 0000000..cb12530
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/progress/progress-default-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/shared/blue-loading.gif b/philo/contrib/gilbert/static/gilbert/murano/img/shared/blue-loading.gif
new file mode 100644 (file)
index 0000000..3bbf639
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/shared/blue-loading.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/shared/btn-left.png b/philo/contrib/gilbert/static/gilbert/murano/img/shared/btn-left.png
new file mode 100644 (file)
index 0000000..b0dc68c
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/shared/btn-left.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/shared/btn-right.png b/philo/contrib/gilbert/static/gilbert/murano/img/shared/btn-right.png
new file mode 100644 (file)
index 0000000..0dd21b9
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/shared/btn-right.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/shared/calendar.gif b/philo/contrib/gilbert/static/gilbert/murano/img/shared/calendar.gif
new file mode 100644 (file)
index 0000000..133cf23
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/shared/calendar.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/shared/glass-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/shared/glass-bg.gif
new file mode 100644 (file)
index 0000000..26fbbae
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/shared/glass-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/shared/hd-sprite.gif b/philo/contrib/gilbert/static/gilbert/murano/img/shared/hd-sprite.gif
new file mode 100644 (file)
index 0000000..42da1ea
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/shared/hd-sprite.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/shared/icon-error.gif b/philo/contrib/gilbert/static/gilbert/murano/img/shared/icon-error.gif
new file mode 100644 (file)
index 0000000..397b655
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/shared/icon-error.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/shared/icon-info.gif b/philo/contrib/gilbert/static/gilbert/murano/img/shared/icon-info.gif
new file mode 100644 (file)
index 0000000..58281c3
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/shared/icon-info.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/shared/icon-question.gif b/philo/contrib/gilbert/static/gilbert/murano/img/shared/icon-question.gif
new file mode 100644 (file)
index 0000000..08abd82
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/shared/icon-question.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/shared/icon-warning.gif b/philo/contrib/gilbert/static/gilbert/murano/img/shared/icon-warning.gif
new file mode 100644 (file)
index 0000000..27ff98b
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/shared/icon-warning.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/shared/large-loading.gif b/philo/contrib/gilbert/static/gilbert/murano/img/shared/large-loading.gif
new file mode 100644 (file)
index 0000000..b36b555
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/shared/large-loading.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/shared/loading-balls.gif b/philo/contrib/gilbert/static/gilbert/murano/img/shared/loading-balls.gif
new file mode 100644 (file)
index 0000000..9ce214b
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/shared/loading-balls.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/shared/shadow-c.png b/philo/contrib/gilbert/static/gilbert/murano/img/shared/shadow-c.png
new file mode 100644 (file)
index 0000000..d435f80
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/shared/shadow-c.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/shared/shadow-lr.png b/philo/contrib/gilbert/static/gilbert/murano/img/shared/shadow-lr.png
new file mode 100644 (file)
index 0000000..bb88b6f
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/shared/shadow-lr.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/shared/shadow.png b/philo/contrib/gilbert/static/gilbert/murano/img/shared/shadow.png
new file mode 100644 (file)
index 0000000..75c0eba
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/shared/shadow.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/shared/warning.gif b/philo/contrib/gilbert/static/gilbert/murano/img/shared/warning.gif
new file mode 100644 (file)
index 0000000..806d4bc
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/shared/warning.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/sizer/e.png b/philo/contrib/gilbert/static/gilbert/murano/img/sizer/e.png
new file mode 100644 (file)
index 0000000..1d4d6d4
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/sizer/e.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/sizer/n.png b/philo/contrib/gilbert/static/gilbert/murano/img/sizer/n.png
new file mode 100644 (file)
index 0000000..6ac64c9
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/sizer/n.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/sizer/ne.png b/philo/contrib/gilbert/static/gilbert/murano/img/sizer/ne.png
new file mode 100644 (file)
index 0000000..c57ab8e
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/sizer/ne.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/sizer/nw.png b/philo/contrib/gilbert/static/gilbert/murano/img/sizer/nw.png
new file mode 100644 (file)
index 0000000..52262a7
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/sizer/nw.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/sizer/s.png b/philo/contrib/gilbert/static/gilbert/murano/img/sizer/s.png
new file mode 100644 (file)
index 0000000..6ac64c9
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/sizer/s.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/sizer/se.png b/philo/contrib/gilbert/static/gilbert/murano/img/sizer/se.png
new file mode 100644 (file)
index 0000000..109cf8d
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/sizer/se.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/sizer/sw.png b/philo/contrib/gilbert/static/gilbert/murano/img/sizer/sw.png
new file mode 100644 (file)
index 0000000..9b91ce1
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/sizer/sw.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/sizer/w.png b/philo/contrib/gilbert/static/gilbert/murano/img/sizer/w.png
new file mode 100644 (file)
index 0000000..1d4d6d4
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/sizer/w.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-bg.gif
new file mode 100644 (file)
index 0000000..fbf3ba8
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-bg.png b/philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-bg.png
new file mode 100644 (file)
index 0000000..b3eaf52
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-bg.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-thumb.gif b/philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-thumb.gif
new file mode 100644 (file)
index 0000000..5ba1dfb
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-thumb.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-thumb.png b/philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-thumb.png
new file mode 100644 (file)
index 0000000..cd654a4
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-thumb.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-v-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-v-bg.gif
new file mode 100644 (file)
index 0000000..0cf8c4b
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-v-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-v-bg.png b/philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-v-bg.png
new file mode 100644 (file)
index 0000000..121450c
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-v-bg.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-v-thumb.gif b/philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-v-thumb.gif
new file mode 100644 (file)
index 0000000..58afe96
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-v-thumb.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-v-thumb.png b/philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-v-thumb.png
new file mode 100644 (file)
index 0000000..7b3d725
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/slider/slider-v-thumb.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/src/triggericons/icons.opacity b/philo/contrib/gilbert/static/gilbert/murano/img/src/triggericons/icons.opacity
new file mode 100644 (file)
index 0000000..793f770
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/src/triggericons/icons.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/src/triggericons/spinners.opacity b/philo/contrib/gilbert/static/gilbert/murano/img/src/triggericons/spinners.opacity
new file mode 100644 (file)
index 0000000..8283c24
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/src/triggericons/spinners.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/src/triggers/blank.opacity b/philo/contrib/gilbert/static/gilbert/murano/img/src/triggers/blank.opacity
new file mode 100644 (file)
index 0000000..c9dc962
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/src/triggers/blank.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/src/triggers/blank.png b/philo/contrib/gilbert/static/gilbert/murano/img/src/triggers/blank.png
new file mode 100644 (file)
index 0000000..983fdff
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/src/triggers/blank.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/src/triggers/clear.opacity b/philo/contrib/gilbert/static/gilbert/murano/img/src/triggers/clear.opacity
new file mode 100644 (file)
index 0000000..a51a849
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/src/triggers/clear.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/src/triggers/date.opacity b/philo/contrib/gilbert/static/gilbert/murano/img/src/triggers/date.opacity
new file mode 100644 (file)
index 0000000..ce54557
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/src/triggers/date.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/src/triggers/drop.opacity b/philo/contrib/gilbert/static/gilbert/murano/img/src/triggers/drop.opacity
new file mode 100644 (file)
index 0000000..f7065e1
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/src/triggers/drop.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/src/triggers/search.opacity b/philo/contrib/gilbert/static/gilbert/murano/img/src/triggers/search.opacity
new file mode 100644 (file)
index 0000000..01c7e9b
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/src/triggers/search.opacity differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tab-bar/l.png b/philo/contrib/gilbert/static/gilbert/murano/img/tab-bar/l.png
new file mode 100644 (file)
index 0000000..5c43d0d
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tab-bar/l.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tab-bar/r.png b/philo/contrib/gilbert/static/gilbert/murano/img/tab-bar/r.png
new file mode 100644 (file)
index 0000000..c6111ef
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tab-bar/r.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tab/tab-close.png b/philo/contrib/gilbert/static/gilbert/murano/img/tab/tab-close.png
new file mode 100644 (file)
index 0000000..7139a96
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tab/tab-close.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tip/tip-corners.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tip/tip-corners.gif
new file mode 100644 (file)
index 0000000..8724870
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tip/tip-corners.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tip/tip-sides.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tip/tip-sides.gif
new file mode 100644 (file)
index 0000000..cf4c2f6
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tip/tip-sides.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/toolbar/more.gif b/philo/contrib/gilbert/static/gilbert/murano/img/toolbar/more.gif
new file mode 100644 (file)
index 0000000..02c2509
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/toolbar/more.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/toolbar/scroll-left.gif b/philo/contrib/gilbert/static/gilbert/murano/img/toolbar/scroll-left.gif
new file mode 100644 (file)
index 0000000..2db8cf5
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/toolbar/scroll-left.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/toolbar/scroll-right.gif b/philo/contrib/gilbert/static/gilbert/murano/img/toolbar/scroll-right.gif
new file mode 100644 (file)
index 0000000..5d5a7ab
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/toolbar/scroll-right.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/toolbar/toolbar-default-bg.gif b/philo/contrib/gilbert/static/gilbert/murano/img/toolbar/toolbar-default-bg.gif
new file mode 100644 (file)
index 0000000..22e3302
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/toolbar/toolbar-default-bg.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tools/tool-sprites.png b/philo/contrib/gilbert/static/gilbert/murano/img/tools/tool-sprites.png
new file mode 100644 (file)
index 0000000..53540f0
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tools/tool-sprites.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/arrows.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/arrows.gif
new file mode 100644 (file)
index 0000000..2683463
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/arrows.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-above.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-above.gif
new file mode 100644 (file)
index 0000000..30d1ca7
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-above.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-add.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-add.gif
new file mode 100644 (file)
index 0000000..b22cd14
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-add.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-append.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-append.gif
new file mode 100644 (file)
index 0000000..b22cd14
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-append.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-below.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-below.gif
new file mode 100644 (file)
index 0000000..85f66b1
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-below.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-between.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-between.gif
new file mode 100644 (file)
index 0000000..5c6c09d
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-between.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-no.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-no.gif
new file mode 100644 (file)
index 0000000..9d9c6a9
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-no.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-over.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-over.gif
new file mode 100644 (file)
index 0000000..30d1ca7
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-over.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-under.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-under.gif
new file mode 100644 (file)
index 0000000..85f66b1
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-under.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-yes.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-yes.gif
new file mode 100644 (file)
index 0000000..8aacb30
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/drop-yes.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-end-minus-nl.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-end-minus-nl.gif
new file mode 100644 (file)
index 0000000..928779e
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-end-minus-nl.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-end-minus.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-end-minus.gif
new file mode 100644 (file)
index 0000000..9a8d727
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-end-minus.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-end-plus-nl.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-end-plus-nl.gif
new file mode 100644 (file)
index 0000000..9f7f698
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-end-plus-nl.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-end-plus.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-end-plus.gif
new file mode 100644 (file)
index 0000000..5943a01
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-end-plus.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-end.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-end.gif
new file mode 100644 (file)
index 0000000..f24ddee
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-end.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-line.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-line.gif
new file mode 100644 (file)
index 0000000..75e6da4
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-line.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-minus-nl.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-minus-nl.gif
new file mode 100644 (file)
index 0000000..928779e
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-minus-nl.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-minus.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-minus.gif
new file mode 100644 (file)
index 0000000..97dcc71
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-minus.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-plus-nl.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-plus-nl.gif
new file mode 100644 (file)
index 0000000..9f7f698
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-plus-nl.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-plus.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-plus.gif
new file mode 100644 (file)
index 0000000..698de47
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow-plus.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow.gif
new file mode 100644 (file)
index 0000000..b8f4208
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/elbow.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/folder-open.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/folder-open.gif
new file mode 100644 (file)
index 0000000..56ba737
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/folder-open.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/folder.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/folder.gif
new file mode 100644 (file)
index 0000000..20412f7
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/folder.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/leaf.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/leaf.gif
new file mode 100644 (file)
index 0000000..445769d
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/leaf.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/loading.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/loading.gif
new file mode 100644 (file)
index 0000000..e846e1d
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/loading.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/tree/s.gif b/philo/contrib/gilbert/static/gilbert/murano/img/tree/s.gif
new file mode 100644 (file)
index 0000000..1d11fa9
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/tree/s.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/Frame 4.png b/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/Frame 4.png
new file mode 100644 (file)
index 0000000..d0393c6
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/Frame 4.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/chev.png b/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/chev.png
new file mode 100644 (file)
index 0000000..bbb1516
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/chev.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/clear.png b/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/clear.png
new file mode 100644 (file)
index 0000000..7f79d94
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/clear.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/date.png b/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/date.png
new file mode 100644 (file)
index 0000000..46c7708
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/date.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/search.png b/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/search.png
new file mode 100644 (file)
index 0000000..057a322
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/search.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/spinner-down.png b/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/spinner-down.png
new file mode 100644 (file)
index 0000000..ff8f27d
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/spinner-down.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/spinner-up.png b/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/spinner-up.png
new file mode 100644 (file)
index 0000000..c49cec1
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/spinner-up.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/spinners.png b/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/spinners.png
new file mode 100644 (file)
index 0000000..af031a4
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/spinners.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/time.png b/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/time.png
new file mode 100644 (file)
index 0000000..c8fbd47
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/triggericons/time.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/util/splitter/mini-bottom.png b/philo/contrib/gilbert/static/gilbert/murano/img/util/splitter/mini-bottom.png
new file mode 100644 (file)
index 0000000..11ae079
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/util/splitter/mini-bottom.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/util/splitter/mini-left.png b/philo/contrib/gilbert/static/gilbert/murano/img/util/splitter/mini-left.png
new file mode 100644 (file)
index 0000000..1fe6f7e
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/util/splitter/mini-left.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/util/splitter/mini-right.png b/philo/contrib/gilbert/static/gilbert/murano/img/util/splitter/mini-right.png
new file mode 100644 (file)
index 0000000..d090c0a
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/util/splitter/mini-right.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/util/splitter/mini-top.png b/philo/contrib/gilbert/static/gilbert/murano/img/util/splitter/mini-top.png
new file mode 100644 (file)
index 0000000..32f0de8
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/util/splitter/mini-top.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-bottom-corners.gif b/philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-bottom-corners.gif
new file mode 100644 (file)
index 0000000..5daef14
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-bottom-corners.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-bottom-sides.gif b/philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-bottom-sides.gif
new file mode 100644 (file)
index 0000000..168a58a
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-bottom-sides.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-left-corners.gif b/philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-left-corners.gif
new file mode 100644 (file)
index 0000000..3c5f242
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-left-corners.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-left-sides.gif b/philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-left-sides.gif
new file mode 100644 (file)
index 0000000..d3346b2
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-left-sides.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-right-corners.gif b/philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-right-corners.gif
new file mode 100644 (file)
index 0000000..853c313
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-right-corners.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-right-sides.gif b/philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-right-sides.gif
new file mode 100644 (file)
index 0000000..8ebb609
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-right-sides.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-top-corners.gif b/philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-top-corners.gif
new file mode 100644 (file)
index 0000000..e5f47d0
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-top-corners.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-top-sides.gif b/philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-top-sides.gif
new file mode 100644 (file)
index 0000000..168a58a
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/window-header/window-header-default-top-sides.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/window/window-default-corners.gif b/philo/contrib/gilbert/static/gilbert/murano/img/window/window-default-corners.gif
new file mode 100644 (file)
index 0000000..efae7da
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/window/window-default-corners.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/img/window/window-default-sides.gif b/philo/contrib/gilbert/static/gilbert/murano/img/window/window-default-sides.gif
new file mode 100644 (file)
index 0000000..39edc88
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/murano/img/window/window-default-sides.gif differ
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano.scss
new file mode 100644 (file)
index 0000000..58b356c
--- /dev/null
@@ -0,0 +1 @@
+@import 'murano/init';
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/_core.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/_core.scss
new file mode 100644 (file)
index 0000000..e580e1d
--- /dev/null
@@ -0,0 +1,68 @@
+$include-default: false;
+$scope-reset-css: false;
+
+html, body{
+       background: #444;
+}
+
+body{
+       text-shadow: 0 -1px 0 rgba(0,0,0,.25);
+}
+
+/* WAT IS THIS I DON'T EVEN  *
+ * ------------------------- */
+
+.x-border-layout-ct{
+       background: transparent !important;
+}
+
+.x-css-shadow{
+       display:none !important;
+}
+
+.x-tool img{
+    background-image: murano-image('tools/tool-sprites.png') !important;
+}
+
+.x-layout-split-left {
+    background: murano-image('util/splitter/mini-left.png') no-repeat top right !important;
+}
+
+.x-layout-split-right {
+    background: murano-image('util/splitter/mini-right.png') no-repeat top left !important;
+}
+
+.x-layout-split-top {
+    background: murano-image('util/splitter/mini-bottom.png') no-repeat top left !important;
+}
+
+.x-layout-split-bottom {
+    background: murano-image('util/splitter/mini-top.png') no-repeat top left !important;
+}
+
+.x-splitter-collapsed {
+    .x-layout-split-left {
+        background: murano-image('util/splitter/mini-right.png') no-repeat top left !important;
+    }
+
+    .x-layout-split-right {
+        background: murano-image('util/splitter/mini-left.png') no-repeat top right !important;
+    }
+
+    .x-layout-split-top {
+        background: murano-image('util/splitter/mini-top.png') no-repeat top left !important;
+    }
+
+    .x-layout-split-bottom {
+        background: murano-image('util/splitter/mini-bottom.png') no-repeat top left !important;
+    }
+}
+
+
+/* VARIABLES THAT $include-default: false; DOES NOT GET RID OF *
+ * ----------------------------------------------------------- */
+
+$font-family: "Lucida Grande", "Lucida Sans", Tahoma, Verdana, sans-serif;
+$font-size: 12px;
+$color: $base-text-color;
+$datepicker-tool-sprite-image: 'tools/tool-sprites.png';
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/_functions.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/_functions.scss
new file mode 100644 (file)
index 0000000..c50566b
--- /dev/null
@@ -0,0 +1,15 @@
+@function bla($value){
+       @return rgba(0,0,0,$value);
+}
+
+@function wha($value){
+       @return rgba(255,255,255,$value);
+}
+
+@function murano-image($file){
+       @return url("../img/"+$file)
+}
+
+@function fugue-image($file){
+       @return url("../../fugue-icons/icons-shadowless/"+$file)
+}
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/_init.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/_init.scss
new file mode 100644 (file)
index 0000000..4cf6775
--- /dev/null
@@ -0,0 +1,12 @@
+$prefix: 'x-';
+
+@import 'compass',
+               'functions',
+               'variables',
+               'core',
+               'components/all';
+
+
+@import 'ext4/default/all';
+
+@import 'overrides/all';
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/_mixins.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/_mixins.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/_variables.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/_variables.scss
new file mode 100644 (file)
index 0000000..43afcc3
--- /dev/null
@@ -0,0 +1,36 @@
+$gloss-gradient: linear-gradient(top, rgba(255,255,255, .25) 0%, rgba(255,255,255, .15) 50%,rgba(255,255,255, 0) 50%, rgba(255,255,255, 0) 100%);
+$gloss-vertical-gradient: linear-gradient(left, rgba(255,255,255, .25) 0%, rgba(255,255,255, .15) 50%,rgba(255,255,255, 0) 50%, rgba(255,255,255, 0) 100%);
+
+
+/* BASE VARIABLES *
+ * -------------- */
+
+$base-text-color: #FFF;
+
+$base-background-alpha: .85;
+$base-background-color: bla($base-background-alpha);
+
+$base-border-radius-width: 6px;
+
+$base-header-padding: 0 3px 0 6px;
+$base-header-height: 24px;
+$base-body-padding: 0;
+
+$accent-color: #066cd1;
+
+
+/* PANEL VARIABLES *
+ * --------------- */
+
+$panel-background: $base-background-color;
+$panel-header-padding: $base-header-padding;
+$panel-header-height: $base-header-height;
+$panel-body-padding: $base-body-padding;
+
+
+/* WINDOW VARIABLES *
+ * ---------------- */
+
+$window-header-padding: $base-header-padding;
+$window-header-height: $base-header-height;
+$window-body-padding: $base-body-padding;
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_all.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_all.scss
new file mode 100644 (file)
index 0000000..b003963
--- /dev/null
@@ -0,0 +1,18 @@
+@import 'panel',
+               'window',
+               'button',
+               'grid',
+               'toolbar',
+               'form',
+               'form/triggers',
+               'form/slider',
+               'tab',
+               'tooltip',
+               'progress_bar',
+               'datepicker',
+               'sizer',
+               'tree',
+               'menu',
+               'scroller',
+               'splitter',
+               'icons';
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_button.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_button.scss
new file mode 100644 (file)
index 0000000..7348ece
--- /dev/null
@@ -0,0 +1,188 @@
+button{
+       margin:0;
+       padding:0;
+       background:none;
+       border-width:0;
+}
+
+.x-btn{
+       @include background($gloss-gradient);
+       @include box-shadow(0 0 0 1px bla($base-background-alpha*.25));
+       @include border-radius(2px);
+       background-color: bla($base-background-alpha*.5);
+       border:1px solid wha(.3);
+       border-top-color:wha(.5);
+       border-bottom-color:wha(.05);
+       margin:{
+               top:1px;
+               bottom:1px;
+       };
+       position:relative;
+       white-space:nowrap;
+       display:inline-block;
+       padding:2px;
+       em{
+               display:block;
+       }
+}
+
+.x-btn-over{
+       border-color:$accent-color;
+       border-top-color:lighten($accent-color, 20%);
+       border-bottom-color:darken($accent-color, 10%);
+}
+
+.x-btn-pressed{
+       @extend .x-btn;
+       background-color:wha(.2);
+       border-color:wha(.2);
+       border-top-color:wha(.4);
+       border-bottom-color:wha(.1);
+}
+
+.x-btn-menu-active{
+       background: bla(.5);
+       @include box-shadow(0 2px 4px 0 rgba(0,0,0,.5) inset, 0 0 0 1px bla($base-background-alpha*.25));
+       border:1px solid wha(.5);
+}
+
+.x-btn-inner{
+       display:block;
+       padding:0 5px;
+       color:$base-text-color;
+       background-repeat:no-repeat;
+}
+
+$small: 16px;
+$medium: 24px;
+$large: 32px;
+
+/* different sizes */
+
+.x-btn-noicon, .x-btn-default-icon, .x-btn-icon-text-left, .x-btn-icon-text-right{
+       .x-btn-inner{
+               line-height:$small;
+       }
+}
+
+.x-btn-default-medium-noicon, .x-btn-default-medium-icon-text-left, .x-btn-default-medium-icon-text-right{
+       .x-btn-inner{
+               line-height:$medium;
+       }
+}
+
+.x-btn-default-large-noicon, .x-btn-default-large-icon-text-left, .x-btn-default-large-icon-text-right{
+       .x-btn-inner{
+               line-height:$large;
+       }
+}
+
+/* icons
+ * ----- */
+
+/* icon only */
+
+.x-btn-default-small-icon .x-btn-inner, .x-btn-icon .x-btn-inner{
+       padding:0;
+       width:$small;
+       height:$small;
+}
+.x-btn-default-medium-icon .x-btn-inner{
+       padding:0;
+       width:$medium;
+       height:$medium;
+}
+.x-btn-default-large-icon .x-btn-inner{
+       padding:0;
+       width:$large;
+       height:$large;
+}
+
+/* text w/ icon left */
+
+.x-btn-icon-text-left{
+       background-position:0 center;
+}
+
+.x-btn-icon-text-left .x-btn-inner{
+       padding-left:$small+2px;
+}
+.x-btn-default-medium-icon-text-left .x-btn-inner{
+       padding-left:$medium+2px;
+}
+.x-btn-default-large-icon-text-left .x-btn-inner{
+       padding-left:$large+2px;
+}
+
+/* text w/ icon top */
+
+.x-btn-icon-text-top .x-btn-inner{
+       background-position:center 2px;
+}
+.x-btn-default-small-icon-text-top .x-btn-inner{
+       padding-top:$small+2px;
+}
+.x-btn-default-medium-icon-text-top .x-btn-inner{
+       padding-top:$medium+2px;
+}
+.x-btn-default-large-icon-text-top .x-btn-inner{
+       padding-top:$large+2px;
+}
+
+/* text w/ icon right */
+
+.x-btn-icon-text-right .x-btn-inner{
+       background-position: right center;
+}
+.x-btn-default-small-icon-text-right .x-btn-inner{
+       padding-right:$small+2px;
+}
+.x-btn-default-medium-icon-text-right .x-btn-inner{
+       padding-right:$medium+2px;
+}
+.x-btn-default-large-icon-text-right .x-btn-inner{
+       padding-right:$large+2px;
+}
+
+/* text w/ icon bottom */
+
+.x-btn-icon-text-bottom .x-btn-inner{
+       background-position: center bottom;
+}
+.x-btn-default-small-icon-text-bottom .x-btn-inner{
+       padding-bottom:$small;
+}
+.x-btn-default-medium-icon-text-bottom .x-btn-inner{
+       padding-bottom:$medium;
+}
+.x-btn-default-large-icon-text-bottom .x-btn-inner{
+       padding-bottom:$large;
+}
+
+/* arrow on right */
+.x-btn-arrow-right{
+       padding-right:14px;
+       background: transparent murano-image('btn/menu.png') right center no-repeat;
+}
+
+/* arrow on botton */
+.x-btn-arrow-bottom{
+       padding-bottom:14px;
+       background: transparent murano-image('btn/menu.png') center bottom no-repeat;
+}
+
+/* split on right */
+
+.x-btn-split-right{
+       padding-right:16px;
+       background: transparent murano-image('btn/splith.png') right center no-repeat;
+       display:block;
+}
+
+/* split on bottom */
+
+.x-btn-split-bottom{
+       padding-bottom:16px;
+       background: transparent murano-image('btn/splitv.png') center bottom no-repeat;
+       display:block;
+}
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_datepicker.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_datepicker.scss
new file mode 100644 (file)
index 0000000..48b9d61
--- /dev/null
@@ -0,0 +1,149 @@
+.x-datepicker{
+       background-color: #000;
+       @include background-image(linear-gradient(#333, #000));
+       border-left:1px solid #000;
+       border-right:1px solid #000;
+}
+.x-datepicker-prev, .x-datepicker-next{
+       position:absolute;
+       top:8px;
+       left:5px;
+       a{
+               display:block;
+               height:15px;
+               width:15px;
+               background: murano-image('shared/btn-left.png');
+       }
+}
+.x-datepicker-next{
+       right:5px;
+       left:auto;
+       a{
+               background: murano-image('shared/btn-right.png');
+       }
+}
+.x-datepicker-header, .x-datepicker-footer{
+       @include background-image(linear-gradient(#333, #111));
+       border-bottom:1px solid #000;
+       border-top:1px solid #444;
+       padding:3px 28px;
+       text-align:center;
+}
+.x-datepicker-inner{
+       font-size:inherit;
+       margin-bottom:0;
+       width:100%;
+       th, td{
+               text-align:center;
+       }
+       thead{
+               border-top:1px solid #777;
+               color:#CCC;
+               @include background-image(linear-gradient(#666, #444));
+               border-bottom:1px solid #222;
+       }
+       table-layout: fixed;
+}
+
+.x-datepicker-inner a{
+       display:block;
+       text-decoration:none;
+       color:#CCC;
+       border:1px solid transparent;
+       em, span{
+               display:block;
+       }
+       em{
+               border:1px solid transparent;
+       }
+}
+.x-datepicker-prevday a{
+       color: #666;
+}
+.x-datepicker-today span{
+       background-color:#555;
+       @include border-radius(2px);
+}
+.x-datepicker-selected a{
+       border-color:bla(.25);
+       em{
+               border-color:$accent-color;
+               border-top-color:lighten($accent-color, 20%);
+               border-bottom-color:darken($accent-color, 10%);
+       }
+       span{
+               @include background-image($gloss-gradient);
+               color:#FFF;
+               @include border-radius(0);
+       }
+}
+
+.x-monthpicker{
+       background:#000;
+       a{
+               text-decoration:none;
+               color:#CCC;
+       }
+       font-size:11px;
+}
+.x-monthpicker-years{
+       width:88px;
+       float:right;
+}
+.x-monthpicker-months{
+       width:87px;
+       float:left;
+       border-right:1px solid #444;
+}
+.x-monthpicker-item{
+       width:43px;
+       float:left;
+       margin:4px 0;
+       text-align:center;
+       a{
+               display:block;
+               border:1px solid transparent;
+               &:hover{
+                       background-color:#333;
+               }
+               margin:0 3px;
+               padding:2px 0;
+               @include border-radius(3px);
+       }
+       .x-monthpicker-selected{
+               background-color:#333;
+               border:1px solid #555;
+               border-top-color:#999;
+               border-bottom-color:#444;
+               @include background-image($gloss-gradient);
+               color:#FFF;
+       }
+}
+.x-monthpicker-yearnav-prev, .x-monthpicker-yearnav-next{
+       margin:6px 12px 6px 15px;
+       float:left;
+       display:block;
+       height:15px;
+       width:15px;
+       background: murano-image('shared/btn-left.png');
+}
+.x-monthpicker-yearnav-next{
+       background: murano-image('shared/btn-right.png');
+}
+.x-monthpicker .x-btn{
+       width:80px;
+       float:left;
+       margin:4px;
+}
+.x-monthpicker-buttons{
+       border-top:1px solid #777;
+       @include background-image(linear-gradient(#666, #444));
+       padding:2px 1px;
+       @include clearfix;
+}
+
+.x-datepicker-footer{
+       @include background-image(linear-gradient(#666, #444));
+       border-top-color:#777;
+       border-bottom-color:#222;
+}
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_form.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_form.scss
new file mode 100644 (file)
index 0000000..6aca4cd
--- /dev/null
@@ -0,0 +1,128 @@
+$html-editor-border-color: #000;
+$html-editor-background-color: #FFF;
+@import 'form/htmleditor';
+@include extjs-form-htmleditor;
+
+.x-form-item{
+       margin-bottom:6px;
+}
+
+.x-form-item-body, .x-form-item-label-left{
+       float:left;
+       position:relative;
+}
+
+.x-form-text{
+       background:#444;
+       @include box-shadow(0 5px 8px 0 bla(.35) inset, 0 1px 0 0 wha(.35), 0 0 0 1px wha(.05) inset);
+       border:1px solid #000;
+       color:#FFF;
+       color:#FFF;
+       padding:0 3px;
+}
+
+.x-form-text:focus, .x-form-trigger-wrap-focus .x-form-text{
+       outline:none;
+       background:#666;
+}
+
+input.x-form-text{
+       height:21px;
+}
+.x-form-invalid-field{
+       background:#700;
+}
+.x-form-invalid-icon{
+       text-indent:-9999px;
+}
+.x-form-invalid-icon ul{
+       display:none;
+}
+
+.x-form-checkbox, .x-form-radio{
+       @include reset-box-model;
+       @include reset-focus;
+       height:16px;
+       width:16px;
+       
+}
+
+.x-form-checkbox{
+       background: murano-image('form/unchecked.png');
+}
+.x-form-cb-checked .x-form-checkbox{
+       background: murano-image('form/checked.png');
+}
+
+.x-form-radio{
+       background: murano-image('form/unradioed.png');
+}
+.x-form-cb-checked .x-form-radio{
+       background: murano-image('form/radioed.png');
+}
+
+.x-form-cb-label-after{
+       margin-left:3px;
+}
+
+.x-form-invalid-icon{
+       width:20px;
+       height:19px;
+       float:left;
+       background: murano-image('form/exclamation.png') right center no-repeat;
+}
+
+
+.x-form-field, .x-form-display-field{
+       float:left;
+       margin:0;
+}
+
+
+.x-fieldset{
+       border:1px solid #666;
+       padding:10px;
+       margin-bottom:10px;
+}
+.x-fieldset-header{
+       white-space:nowrap;
+       padding:0 5px;
+}
+.x-fieldset-header-text{
+       float:left;
+}
+.x-fieldset-header .x-tool, .x-fieldset-header .x-form-item{
+       float:left;
+       margin-right:3px;
+}
+.x-fieldset-collapsed{
+       border-width: 1px 1px 0 1px !important;
+       padding-bottom:0px !important;
+       border-left-color:transparent;
+       border-right-color:transparent;
+}
+
+.x-boundlist{
+       background:#000;
+       border:1px solid #333;
+}
+
+.x-boundlist-floating{
+       @include box-shadow(0 1px 3px 0 bla(.35));
+}
+.x-boundlist-item{
+       padding:1px 4px;
+       border:1px solid transparent;
+       margin:1px;
+       @include border-radius(5px);
+       &-over{
+               border:1px solid lighten($accent-color, 10%);
+               @include background-image(linear-gradient(lighten($accent-color, 10%),$accent-color));
+               @include box-shadow(0 -1px 0 0 bla(.15) inset);
+       }
+}
+.x-boundlist-selected{
+       border:1px solid $accent-color;
+       @include background-image(linear-gradient($accent-color,darken($accent-color, 10%)));
+       @include box-shadow(0 -1px 0 0 bla(.15) inset);
+}
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_grid.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_grid.scss
new file mode 100644 (file)
index 0000000..d02f732
--- /dev/null
@@ -0,0 +1,176 @@
+.x-grid-view{
+       position:relative;
+       overflow:hidden;
+}
+
+.x-grid-header-ct{
+       @include background(linear-gradient(top, #ccc, #aaa));
+       @include box-shadow(0 1px 0 0 #999);
+}
+
+.x-column-header{
+       border-top:1px solid #DDD;
+       padding:2px 5px;
+       color:#222;
+       text-shadow:0 1px 0 #FFF;
+       white-space:nowrap;
+       border-right:1px solid bla(.1);
+}
+
+.x-column-header{
+       overflow:hidden;
+       .x-column-header-trigger{
+               display:none;
+               background: transparent murano-image('triggericons/spinner-down.png') center 6px no-repeat;
+               width:20px;
+       }
+       &-over, &-open{
+               .x-column-header-trigger{
+                       display:block;
+                       background-color:#AAA;
+                       border-left:1px solid #FFF;
+                       border-right:1px solid #888;
+               }
+       }
+}
+
+
+.x-column-header-sort-DESC, .x-column-header-sort-ASC{
+       border-top:1px solid #BBB;
+       @include background(linear-gradient(top, #AAA, #888));
+       @include box-shadow(0 1px 0 0 #777);
+       text-shadow:0 1px 0 #DDD;
+}
+
+.x-column-header-trigger{
+       width:14px;
+       height:100%;
+       position:absolute;
+       top:0;
+       right:0;
+}
+
+
+.x-grid-table{
+       font-size:inherit;
+       border-collapse:separate;
+       border-spacing:0;
+       table-layout:fixed;
+       td, th{
+               overflow:hidden;
+               text-align:left;
+               white-space:nowrap;
+               vertical-align:top;
+       }
+}
+.x-grid-cell-inner{
+       white-space:nowrap;
+       overflow:hidden;
+       text-overflow:ellipsis;
+       padding:3px 6px;
+}
+
+
+.x-grid-row{
+       td{
+               border-top:1px solid transparent;
+               border-bottom:1px solid transparent;
+       }
+}
+
+.x-grid-row-alt{
+       background: wha(.1);
+       td{
+               border-top:1px solid wha(.05);
+               border-bottom:1px solid wha(.05);
+       }
+}
+
+.x-grid-row-over{
+       td{
+               background: wha(.05);
+       }
+}
+
+.x-grid-row-selected{
+       @include background-image($gloss-gradient);
+       background-color:#000;
+       td{
+               border-top:1px solid lighten($accent-color, 10%);
+               border-bottom:1px solid $accent-color;
+       }
+}
+
+.x-grid-resize-marker{
+       background:#FFF;
+       width:1px;
+       position:absolute;
+}
+
+
+// Row Editor
+.#{$prefix}grid-row-editor {
+       position: absolute !important;
+       z-index: 1;
+       zoom: 1;
+       overflow: visible !important;
+
+       .#{$prefix}form-field {
+       }
+       .#{$prefix}form-display-field {
+               padding-top: 0;
+       }
+
+       .#{$prefix}panel-body {
+               border:{
+                       top:1px solid $accent-color !important;
+                       bottom:1px solid $accent-color !important;
+                       left:none !important;
+                       right:none !important;
+               };
+       }
+}
+
+// Perfect alignment of input text with cell text
+.#{$prefix}grid-row-editor {
+       // Align input text with text value in cell
+       .#{$prefix}form-text {
+               padding-left: 2px;
+       }
+}
+.#{$prefix}grid-editor {
+       // Align checkboxes input
+       .#{$prefix}form-cb-wrap {
+               text-align: center;
+       }
+}
+
+.#{$prefix}grid-row-editor-buttons {
+               position: absolute;
+               bottom: -31px;
+               padding: 4px;
+               width: 200px;
+               height: 32px;
+               background:#222;
+               @include border-radius(0 0 4px 4px);
+               border:{
+                       bottom: 1px solid $accent-color;
+                       left: 1px solid $accent-color;
+                       right: 1px solid $accent-color;
+               };
+
+               .#{$prefix}strict & {
+                       width: 192px;
+                       height: 24px;
+               }
+       }
+
+       .#{$prefix}grid-row-editor-errors {
+               ul {
+                       margin-left: 5px;
+               }
+               li {
+                       list-style: disc;
+                       margin-left: 15px;
+               }
+       }
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_icons.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_icons.scss
new file mode 100644 (file)
index 0000000..8803d42
--- /dev/null
@@ -0,0 +1,15 @@
+.x-tbar-page-prev{
+       background: transparent fugue-image('control-180.png') center center no-repeat;
+}
+.x-tbar-page-first{
+       background: transparent fugue-image('control-stop-180.png') center center no-repeat;
+}
+.x-tbar-page-next{
+       background: transparent fugue-image('control.png') center center no-repeat;
+}
+.x-tbar-page-last{
+       background: transparent fugue-image('control-stop.png') center center no-repeat;
+}
+.x-tbar-loading{
+       background: transparent fugue-image('arrow-circle-double-135.png') center center no-repeat;
+}
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_menu.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_menu.scss
new file mode 100644 (file)
index 0000000..37965bd
--- /dev/null
@@ -0,0 +1,59 @@
+.x-menu{
+       @include box-shadow(0 1px 4px 0 bla(.35));
+       white-space:nowrap;
+       @extend .x-boundlist;
+}
+
+.x-menu-body{
+       position:absolute;
+}
+
+.x-menu-item{
+       padding:2px;
+}
+
+.x-menu-item-link{
+       padding:4px;
+       border:1px solid transparent;
+       @include border-radius(5px);
+       text-decoration:none;
+       display:block;
+       color:#FFF;
+}
+
+.x-menu-item-active .x-menu-item-link{
+       border-color:$accent-color;
+       @include background-image(linear-gradient($accent-color, darken($accent-color, 10%)));
+       @include box-shadow(0 -1px 0 0 bla(.15) inset);
+}
+
+.x-menu-item-icon{
+       width:16px;
+       height:16px;
+       margin-right:5px;
+       float:left;
+}
+
+.x-menu-item-unchecked{
+       .x-menu-item-icon{
+               background: murano-image('form/unchecked.png');
+       }
+       .x-menu-group-icon{
+               background: murano-image('form/unradioed.png');
+       }
+}
+.x-menu-item-checked{
+       .x-menu-item-icon{
+               background: murano-image('form/checked.png');
+       }
+       .x-menu-group-icon{
+               background: murano-image('form/radioed.png');
+       }
+}
+
+.x-menu-item-separator{
+       height:0;
+       padding:0;
+       margin: 3px 9px 3px 10px;
+       border-bottom:1px solid wha(.25);
+}
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_panel.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_panel.scss
new file mode 100644 (file)
index 0000000..e7c22bf
--- /dev/null
@@ -0,0 +1,69 @@
+.x-panel{
+       background: $panel-background;
+       overflow:hidden;
+       position:relative;
+       margin-top:0;
+}
+
+.x-panel, .x-window{
+       .x-panel {
+               .x-panel-body{
+                       background: #222;
+               }
+       }
+}
+
+.x-panel-header{
+       @include background($gloss-gradient);
+       @include box-shadow(0 1px 0 0 bla(.35));
+       border-top:1px solid #FFF;
+       line-height: $panel-header-height;
+       height: $panel-header-height;
+       padding: $panel-header-padding;
+}
+
+.x-panel-header-vertical{
+       @include background($gloss-vertical-gradient);
+}
+
+.x-panel-body{
+       position:relative;
+       padding: $panel-body-padding;
+}
+
+/* FRAMED PANEL
+ * ------------ */
+.x-panel-default-framed{       
+       border:1px solid wha(.5);
+       border-top-color: wha(1);
+       @include border-radius($base-border-radius-width $base-border-radius-width 0 0);
+}
+
+.x-panel-default-framed .x-panel-header{
+       border-top:0;
+       @include border-radius($base-border-radius-width $base-border-radius-width 0 0);
+       margin:{
+               top:1px;
+               left:1px;
+               right:1px;
+       };
+}
+
+/* MASKED PANEL
+ * ------------ */
+
+.x-mask-msg{
+       background:#333 !important;
+       @include background-image($gloss-gradient !important);
+       @include border-radius(4px);
+       @include box-shadow(0 0 0 1px bla(.75));
+       border:1px solid #333 !important;
+       border-top:1px solid #888 !important;
+       div{
+               background-color:#000 !important;
+               @include border-radius(3px);
+               border:1px solid #333 !important;
+               border-bottom:1px solid #888 !important;
+               color:#CCC !important;
+       }
+}
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_progress_bar.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_progress_bar.scss
new file mode 100644 (file)
index 0000000..2a4efa9
--- /dev/null
@@ -0,0 +1,36 @@
+.x-progress{
+       position:relative;
+       height:16px;
+       border:1px solid #000;
+       text-align:center;
+       text-shadow:none;
+       @include border-radius(10px);
+       overflow:hidden;
+       background:#333;
+       @include box-shadow(0 3px 5px 0 bla(.35) inset, 0 1px 0 0 wha(.25));
+       padding:1px 0;
+       font-size:10px;
+       text-transform:uppercase;
+       letter-spacing:1px;
+}
+.x-progress-bar{
+       background:#FFF;
+       position:absolute;
+       left:0;
+       top:0;
+       height:14px;
+       border:1px solid #666;
+       @include border-radius(10px);
+       @include background(linear-gradient(#444, #666));
+       @include box-shadow(0 0 4px 0 bla(.5));
+       overflow:hidden;
+}
+
+.x-progress-text{
+       color:#FFF;
+       text-shadow:0 -1px 0 bla(.35);
+}
+
+.x-progress-text-back{
+       color:#999;
+}
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_scroller.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_scroller.scss
new file mode 100644 (file)
index 0000000..051383a
--- /dev/null
@@ -0,0 +1,39 @@
+$scroller-thumb-color: #666 !default;
+
+.x-scroller{
+       border:none !important;
+       &::-webkit-scrollbar {
+               width: 16px;
+               height: 16px;
+               &-track{
+                       background:transparent;
+               }
+               &-track-piece:start{
+                       margin-left:1px;
+                       margin-top:1px;
+               }
+               &-track-piece:end{
+                       margin-right:1px;
+                       margin-bottom:1px;
+               }
+               &-thumb{
+                       border:1px solid #000;
+                       background-color:$scroller-thumb-color;
+                       @include border-radius(8px);
+                       @include box-shadow(0 1px 0 0 wha(.35) inset, 0 -1px 0 0 #000 inset);
+                       &:hover{
+                               background-color:lighten($scroller-thumb-color, 5%);
+                       }
+                       &:active{
+                               background-color:lighten($scroller-thumb-color, 10%);
+                       }
+               }
+       }
+}
+
+.x-scroller-vertical::-webkit-scrollbar-thumb{
+       @include background-image($gloss-vertical-gradient);
+}
+.x-scroller-horizontal::-webkit-scrollbar-thumb{
+       @include background-image($gloss-gradient);
+}
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_sizer.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_sizer.scss
new file mode 100644 (file)
index 0000000..7b72e0f
--- /dev/null
@@ -0,0 +1,24 @@
+.x-resizable-handle-west {
+       background: transparent murano-image('sizer/w.png') left center no-repeat !important;
+}
+.x-resizable-handle-east {
+       background: transparent murano-image('sizer/e.png') right center no-repeat !important;
+}
+.x-resizable-handle-north {
+       background: transparent murano-image('sizer/n.png') top center no-repeat !important;
+}
+.x-resizable-handle-south {
+       background: transparent murano-image('sizer/s.png') bottom center no-repeat !important;
+}
+.x-resizable-handle-northwest {
+       background: transparent murano-image('sizer/nw.png') left top no-repeat !important;
+}
+.x-resizable-handle-northeast {
+       background: transparent murano-image('sizer/ne.png') right top no-repeat !important;
+}
+.x-resizable-handle-southwest {
+       background: transparent murano-image('sizer/sw.png') left bottom no-repeat !important;
+}
+.x-resizable-handle-southeast {
+       background: transparent murano-image('sizer/se.png') right bottom no-repeat !important;
+}
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_splitter.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_splitter.scss
new file mode 100644 (file)
index 0000000..f1eac86
--- /dev/null
@@ -0,0 +1,3 @@
+.x-splitter{
+       background-color:#000;
+}
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_tab.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_tab.scss
new file mode 100644 (file)
index 0000000..c073f56
--- /dev/null
@@ -0,0 +1,106 @@
+.x-tab{
+       @include border-radius(3px 3px 0 0);
+       border:1px solid wha(.15);
+       border-top:1px solid wha(.5);
+       border-bottom:none;
+       @include background($gloss-gradient);
+       background-color: #000;
+       margin:{
+               top:2px;
+               left:4px;
+       };
+       @include box-shadow(0 0 0 1px bla(.5));
+       button{
+               color:#CCC;
+               text-shadow: 0 -1px 0 bla(.75);
+       }
+       padding:3px 5px 6px 5px;
+       white-space: nowrap;
+}
+
+.x-tab-over{
+       border-color:$accent-color;
+       border-top-color:lighten($accent-color, 20%);
+       button{
+               color:#FFF;
+       }
+}
+
+.x-tab-active{
+       border-color: wha(.35);
+       border-top-color:#FFF;
+       button{
+               color:#FFF;
+       }
+       z-index:3;
+       @include box-shadow(none);
+}
+
+.x-tab button{
+       height:14px;
+       line-height:14px;
+}
+
+.x-tab em{
+       display:block;
+       padding:0 3px;
+}
+
+.x-tab-closable em{
+       padding-right:15px;
+}
+
+.x-tab-close-btn{
+       position:absolute;
+       top:3px;
+       right:3px;
+       width:11px;
+       height:11px;
+       background: murano-image('tab/tab-close.png');
+       text-indent:-119988px;
+}
+
+.x-tab-bar-strip{
+       z-index:2;
+       border-top:1px solid wha(.35);
+       border-bottom:1px solid wha(.35);
+       margin-top:-1px;
+       height:4px;
+       background:#000;
+       position:relative;
+}
+
+.x-box-scroller{
+       width:18px !important;
+       height:22px !important;
+}
+
+.x-tabbar-scroll-left{
+       background: murano-image('tab-bar/l.png') !important;
+       &-hover{
+               background-position:left center !important;
+       }
+       &-disabled{
+               background-position:left top !important;
+       }
+}
+
+
+.x-tabbar-scroll-right{
+       background: murano-image('tab-bar/r.png') !important;
+       &-hover{
+               background-position:left center !important;
+       }
+       &-disabled{
+               background-position:left top !important;
+       }
+}
+
+.x-tab-inner{
+       display:block;
+       .x-tab-icon-text-left &{
+               padding-left:20px;
+               background-repeat:no-repeat;
+               background-position:left top;
+       }
+}
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_toolbar.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_toolbar.scss
new file mode 100644 (file)
index 0000000..ae09b09
--- /dev/null
@@ -0,0 +1,32 @@
+.x-toolbar{
+//     @include background(linear-gradient(top, #444 0%, #666 10%, #888 90%, #777 100%));
+       @include background(linear-gradient(top, #222 0%, #444 10%, #666 90%, #444 100%));
+       padding:3px 0;
+}
+
+.x-toolbar-item{
+       margin:{
+               left:3px;
+               right:3px;
+       };
+       white-space:nowrap;
+}
+.x-toolbar-text{
+       font-size:11px;
+       margin-left:10px;
+       white-space:nowrap;
+}
+
+.x-toolbar-separator{
+       border-right:1px solid wha(.25);
+       border-left:1px solid bla(.25);
+       height:14px;
+}
+
+.x-toolbar-separator-vertical{
+       width:100%;
+       height:0;
+       border-top:1px solid bla(.25);
+       border-bottom:1px solid wha(.25);
+       margin:9px 0;
+}
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_tooltip.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_tooltip.scss
new file mode 100644 (file)
index 0000000..ff70ffd
--- /dev/null
@@ -0,0 +1,19 @@
+.x-tip, .x-form-invalid-tip{
+       background-color: darken($accent-color, 10%);
+       @include background-image($gloss-gradient);
+       padding:4px;
+       @include border-radius(5px);
+       @include box-shadow(0 0 0 1px bla(.7), 0 0 0 1px wha(.25) inset);
+}
+
+.x-form-invalid-tip{
+       background-color:#800000;
+}
+
+.x-tip-header{
+       font-weight:bold;
+}
+
+.x-tip-body{
+       position:relative;
+}
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_tree.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_tree.scss
new file mode 100644 (file)
index 0000000..4220a2e
--- /dev/null
@@ -0,0 +1,280 @@
+$tree-elbow-height: 16px;
+$tree-elbow-width: 16px;
+$form-checkbox-size: 16px;
+$form-checkbox-image-unchecked: murano-image('form/unchecked.png');
+$form-checkbox-image-checked: murano-image('form/checked.png');
+$include-ie: true;
+$include-ff: true;
+
+.x-tree-panel .x-grid-row{
+       &-selected{
+               background-color:#000;
+               color:#FFF;
+               td{
+                       @include box-shadow(0 0 0 1px wha(.1));
+               }
+       }
+}
+
+.#{$prefix}tree-no-lines .#{$prefix}tree-elbow {
+       background-color: transparent;
+}
+
+.#{$prefix}tree-no-lines .#{$prefix}tree-elbow-end {
+       background-color: transparent;
+}
+
+.#{$prefix}tree-no-lines .#{$prefix}tree-elbow-line {
+       background-color: transparent;
+}
+
+//arrows
+.#{$prefix}tree-arrows .#{$prefix}tree-elbow-plus {
+       background: transparent no-repeat 0 0;
+}
+
+.#{$prefix}tree-arrows .#{$prefix}tree-elbow-end-plus {
+       background: transparent no-repeat 0 0;
+}
+
+.#{$prefix}tree-arrows .#{$prefix}tree-elbow-end-minus {
+       background: transparent no-repeat -16px 0;
+}
+
+.#{$prefix}tree-arrows .#{$prefix}tree-elbow-minus {
+       background: transparent no-repeat -16px 0;
+}
+
+.#{$prefix}tree-arrows .#{$prefix}tree-elbow {
+       background-color: transparent !important;
+}
+
+.#{$prefix}tree-arrows .#{$prefix}tree-elbow-end {
+       background-color: transparent !important;
+}
+
+.#{$prefix}tree-arrows .#{$prefix}tree-elbow-line {
+       background-color: transparent !important;
+}
+
+//elbows
+.#{$prefix}tree-arrows .#{$prefix}tree-expander-over .#{$prefix}tree-elbow-plus,
+.#{$prefix}tree-arrows .#{$prefix}tree-expander-over .#{$prefix}tree-elbow-end-plus {
+       background-position: -32px 0;
+}
+
+.#{$prefix}tree-arrows .#{$prefix}tree-expander-over .#{$prefix}tree-elbow-minus,
+.#{$prefix}tree-arrows .#{$prefix}tree-expander-over .#{$prefix}tree-elbow-end-minus {
+       background-position: -48px 0;
+}
+
+.#{$prefix}tree-arrows .x-grid-tree-node-expanded .#{$prefix}tree-elbow-plus,
+.#{$prefix}tree-arrows .x-grid-tree-node-expanded .#{$prefix}tree-elbow-end-plus {
+       background-position: -16px 0;
+}
+
+.#{$prefix}tree-arrows .x-grid-tree-node-expanded .#{$prefix}tree-expander-over .#{$prefix}tree-elbow-plus,
+.#{$prefix}tree-arrows .x-grid-tree-node-expanded .#{$prefix}tree-expander-over .#{$prefix}tree-elbow-end-plus {
+       background-position: -48px 0;
+}
+
+.#{$prefix}tree-elbow-plus,
+.#{$prefix}tree-elbow-minus,
+.#{$prefix}tree-elbow-end-plus,
+.#{$prefix}tree-elbow-end-minus{
+       cursor: pointer;
+}
+
+//elbows
+.#{$prefix}tree-lines {
+       .#{$prefix}tree-elbow {
+               background-image: murano-image('tree/elbow.gif');
+       }
+       
+       .#{$prefix}tree-elbow-end {
+               background-image: murano-image('tree/elbow-end.gif');
+       }
+
+       .#{$prefix}tree-elbow-plus {
+               // background-image: murano-image('tree/elbow-plus.gif');
+               background-image: fugue-image('plus-small-white.png');
+       }
+
+       .#{$prefix}tree-elbow-end-plus {
+               // background-image: murano-image('tree/elbow-end-plus.gif');
+               background-image: fugue-image('plus-small-white.png');
+       }
+
+       .#{$prefix}grid-tree-node-expanded .#{$prefix}tree-elbow-plus {
+               // background-image: murano-image('tree/elbow-minus.gif');
+               background-image: fugue-image('minus-small-white.png');
+       }
+
+       .#{$prefix}grid-tree-node-expanded .#{$prefix}tree-elbow-end-plus {
+               // background-image: murano-image('tree/elbow-end-minus.gif');
+               background-image: fugue-image('minus-small-white.png');
+       }
+       
+       .#{$prefix}tree-elbow-line {
+               background-image: murano-image('tree/elbow-line.gif');
+       }
+}
+
+.#{$prefix}tree-no-lines {
+       .#{$prefix}tree-elbow-plus,
+       .#{$prefix}tree-elbow-end-plus {
+               background-image: murano-image('tree/elbow-plus-nl.gif');
+       }
+
+       .#{$prefix}grid-tree-node-expanded .#{$prefix}tree-elbow-plus,
+       .#{$prefix}grid-tree-node-expanded .#{$prefix}tree-elbow-end-plus {
+               background-image: murano-image('tree/elbow-end-minus-nl.gif');
+       }
+}
+
+.#{$prefix}tree-arrows {
+       .#{$prefix}tree-elbow-plus,
+       .#{$prefix}tree-elbow-minus,
+       .#{$prefix}tree-elbow-end-plus,
+       .#{$prefix}tree-elbow-end-minus {
+               background-image: murano-image('tree/arrows.gif');
+       }
+}
+
+.#{$prefix}tree-icon {
+       margin-right: 3px;
+}
+
+.#{$prefix}tree-elbow,
+.#{$prefix}tree-elbow-end,
+.#{$prefix}tree-elbow-plus,
+.#{$prefix}tree-elbow-end-plus,
+.#{$prefix}tree-elbow-empty,
+.#{$prefix}tree-elbow-line {
+       height: $tree-elbow-height;
+       width: $tree-elbow-width;
+}
+
+.#{$prefix}tree-icon-leaf {
+       width: $tree-elbow-width;
+       background-image: fugue-image('leaf.png');
+}
+
+.#{$prefix}tree-icon-parent {
+       width: $tree-elbow-width;
+       background-image: fugue-image('folder-horizontal.png');
+}
+
+.#{$prefix}grid-tree-node-expanded .#{$prefix}tree-icon-parent {
+       background-image: fugue-image('folder-horizontal-open.png');
+}
+
+.#{$prefix}grid-rowbody {
+       padding: 0;
+}
+
+.#{$prefix}tree-panel .#{$prefix}grid-cell-inner {
+       padding: 0px;
+}
+
+.#{$prefix}tree-panel .#{$prefix}grid-row .#{$prefix}grid-cell {
+       border: none;
+}
+
+.#{$prefix}tree-panel .#{$prefix}grid-row .#{$prefix}grid-cell-inner {
+       height: $tree-elbow-height;
+       
+       line-height: $tree-elbow-height;
+       vertical-align: middle;
+       cursor: pointer;
+       
+       img {
+               float: left;
+       }
+}
+
+.#{$prefix}ie {
+       .#{$prefix}tree-panel .#{$prefix}grid-row .#{$prefix}grid-cell-inner {
+               white-space: normal;
+       }
+}
+
+
+.#{$prefix}tree-checkbox {
+       float: left;
+       margin: 2px 3px 0 0;
+       display: block;
+
+       width: $form-checkbox-size;
+       height: $form-checkbox-size;
+       background: murano-image($form-checkbox-image-unchecked) no-repeat;
+
+       overflow: hidden;
+       padding: 0;
+       border: 0;
+       &::-moz-focus-inner {
+               padding: 0;
+               border: 0;
+       }
+}
+@if $include-ie {
+       /* Hack for IE; causes alignment problem in IE9 standards mode so exclude that */
+       .#{$prefix}nbr.#{$prefix}ie {
+               .#{$prefix}tree-checkbox {
+                       font-size: 0;
+               }
+       }
+}
+.#{$prefix}tree-checkbox-checked {
+       background: murano-image($form-checkbox-image-checked) no-repeat;
+}
+
+@if $include-ie {
+       .#{$prefix}tree-panel .#{$prefix}grid-cell-inner {
+               border-width: 0 !important;
+       }
+}
+
+@if $include-ff {
+       .#{$prefix}gecko {
+               .#{$prefix}tree-panel .#{$prefix}grid-row .#{$prefix}grid-cell-inner {
+                       line-height: $tree-elbow-height - 2;
+               }
+       }
+}
+
+.#{$prefix}tree-drop-ok-append .#{$prefix}dd-drop-icon {
+       background-image: murano-image('tree/drop-append.gif');
+}
+
+.#{$prefix}tree-drop-ok-above .#{$prefix}dd-drop-icon {
+       background-image: murano-image('tree/drop-above.gif');
+}
+
+.#{$prefix}tree-drop-ok-below .#{$prefix}dd-drop-icon {
+       background-image: murano-image('tree/drop-below.gif');
+}
+
+.#{$prefix}tree-drop-ok-between .#{$prefix}dd-drop-icon {
+       background-image: murano-image('tree/drop-between.gif');
+}
+
+.#{$prefix}grid-tree-loading .#{$prefix}tree-icon {
+       background-image: murano-image('tree/loading.gif');
+}
+
+.#{$prefix}tree-ddindicator {
+       height: 1px;
+       border-width: 1px 0px 0px;
+       border-style: dotted;
+       border-color: green;
+}
+       
+.#{$prefix}grid-tree-loading span {
+        font-style: italic;
+        color: #444444;
+}
+
+.#{$prefix}tree-animator-wrap {
+       overflow: hidden;
+}
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_window.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/_window.scss
new file mode 100644 (file)
index 0000000..687bd2b
--- /dev/null
@@ -0,0 +1,22 @@
+.x-window{
+       background: $base-background-color;
+       @include border-radius($base-border-radius-width $base-border-radius-width 0 0);
+       @include box-shadow(0 0 0 1px bla($base-background-alpha*.5), 0 3px 8px 0 bla(.35), 0 0 0 1px bla($base-background-alpha*.5) inset);
+       border:1px solid wha(.5);
+       border-top-color: wha(1);
+}
+
+.x-window-header{
+       @include background($gloss-gradient);
+       @include border-radius($base-border-radius-width $base-border-radius-width 0 0);
+       @include box-shadow(0 1px 0 0 bla(.35));
+       padding: $window-header-padding;
+       line-height: $window-header-height;
+       height: $window-header-height;
+}
+
+.x-window-body{
+       position:relative;
+       padding: $window-body-padding;
+       background-color:bla(.1);
+}
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/form/_htmleditor.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/form/_htmleditor.scss
new file mode 100644 (file)
index 0000000..351fa16
--- /dev/null
@@ -0,0 +1,128 @@
+@mixin extjs-form-htmleditor {
+       .#{$prefix}html-editor-wrap {
+               border: 1px solid $html-editor-border-color;
+               
+               .#{$prefix}toolbar {
+                       border-top-width: 0;
+                       border-left-width: 0;
+                       border-right-width: 0;
+               }
+               
+               textarea {
+                       background-color: $html-editor-background-color;
+               }
+       }
+
+       .#{$prefix}html-editor-tb .#{$prefix}btn-inner {
+               display:block;
+               width:16px;
+               padding:0;
+               height:16px;
+               margin:4px 2px;
+               background:transparent murano-image('editor/tb-sprite.png') no-repeat;
+       }
+
+       .#{$prefix}html-editor-tb .#{$prefix}edit-bold,
+       .#{$prefix}menu-item img.#{$prefix}edit-bold {
+               background-position:0 0;
+               background-image: murano-image('editor/tb-sprite.png');    
+       }
+
+       .#{$prefix}html-editor-tb .#{$prefix}edit-italic,
+       .#{$prefix}menu-item img.#{$prefix}edit-italic {
+               background-position:-16px 0;
+               background-image: murano-image('editor/tb-sprite.png');
+       }
+
+       .#{$prefix}html-editor-tb .#{$prefix}edit-underline,
+       .#{$prefix}menu-item img.#{$prefix}edit-underline {
+               background-position:-32px 0;
+               background-image: murano-image('editor/tb-sprite.png');
+       }
+
+       .#{$prefix}html-editor-tb .#{$prefix}edit-forecolor,
+       .#{$prefix}menu-item img.#{$prefix}edit-forecolor {
+               background-position:-160px 0;
+               background-image: murano-image('editor/tb-sprite.png');
+       }
+
+       .#{$prefix}html-editor-tb .#{$prefix}edit-backcolor,
+       .#{$prefix}menu-item img.#{$prefix}edit-backcolor {
+               background-position:-176px 0;
+               background-image: murano-image('editor/tb-sprite.png');
+       }
+
+       .#{$prefix}html-editor-tb .#{$prefix}edit-justifyleft,
+       .#{$prefix}menu-item img.#{$prefix}edit-justifyleft {
+               background-position:-112px 0;
+               background-image: murano-image('editor/tb-sprite.png');
+       }
+
+       .#{$prefix}html-editor-tb .#{$prefix}edit-justifycenter,
+       .#{$prefix}menu-item img.#{$prefix}edit-justifycenter {
+               background-position:-128px 0;
+               background-image: murano-image('editor/tb-sprite.png');
+       }
+
+       .#{$prefix}html-editor-tb .#{$prefix}edit-justifyright,
+       .#{$prefix}menu-item img.#{$prefix}edit-justifyright {
+               background-position:-144px 0;
+               background-image: murano-image('editor/tb-sprite.png');
+       }
+
+       .#{$prefix}html-editor-tb .#{$prefix}edit-insertorderedlist,
+       .#{$prefix}menu-item img.#{$prefix}edit-insertorderedlist {
+               background-position:-80px 0;
+               background-image: murano-image('editor/tb-sprite.png');
+       }
+
+       .#{$prefix}html-editor-tb .#{$prefix}edit-insertunorderedlist,
+       .#{$prefix}menu-item img.#{$prefix}edit-insertunorderedlist {
+               background-position:-96px 0;
+               background-image: murano-image('editor/tb-sprite.png');
+       }
+
+       .#{$prefix}html-editor-tb .#{$prefix}edit-increasefontsize,
+       .#{$prefix}menu-item img.#{$prefix}edit-increasefontsize {
+               background-position:-48px 0;
+               background-image: murano-image('editor/tb-sprite.png');
+       }
+
+       .#{$prefix}html-editor-tb .#{$prefix}edit-decreasefontsize,
+       .#{$prefix}menu-item img.#{$prefix}edit-decreasefontsize {
+               background-position:-64px 0;
+               background-image: murano-image('editor/tb-sprite.png');
+       }
+
+       .#{$prefix}html-editor-tb .#{$prefix}edit-sourceedit,
+       .#{$prefix}menu-item img.#{$prefix}edit-sourceedit {
+               background-position:-192px 0;
+               background-image: murano-image('editor/tb-sprite.png');
+       }
+
+       .#{$prefix}html-editor-tb .#{$prefix}edit-createlink,
+       .#{$prefix}menu-item img.#{$prefix}edit-createlink {
+               background-position: -208px 0;
+               background-image: murano-image('editor/tb-sprite.png');
+       }
+
+       .#{$prefix}html-editor-tip .#{$prefix}tip-bd .#{$prefix}tip-bd-inner {
+               padding: 5px;
+               padding-bottom: 1px;
+       }
+
+       .#{$prefix}html-editor-tb {
+               .#{$prefix}toolbar {
+                       position: static !important;
+               }
+               .#{$prefix}font-select {
+                       font-size: 11px;
+               }
+       }
+
+       .x-html-editor-wrap textarea {
+               border: 0;
+               padding: 3px 2px;
+               overflow: auto;
+       }
+}
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/form/_slider.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/form/_slider.scss
new file mode 100644 (file)
index 0000000..8a57c4e
--- /dev/null
@@ -0,0 +1,53 @@
+.x-slider{
+       border:1px solid #000;
+       @include border-radius(6px);
+       background:#333;
+       overflow:hidden;
+       position:relative;
+}
+
+.x-slider-thumb{
+       height:8px;
+       width:8px;
+       @include border-radius(5px);
+       border:1px solid #DDD;
+       @include background(linear-gradient(#AAA, #CCC));
+       position:absolute;
+       @include box-shadow(0 0 3px 0 bla(.35))
+}
+
+.x-slider-thumb-over{
+       border-color:#FFF;
+       @include background(linear-gradient(#CCC, #FFF));
+}
+
+.x-slider-horz{
+       @include box-shadow(0 1px 0 0 wha(.15), 0 2px 5px 0 bla(.25) inset);
+       height:10px;
+       .x-slider-end{
+               padding-right:12px;
+               height:10px;
+       }
+       .x-slider-inner{
+               height:10px;
+       }
+       .x-slider-thumb{
+               margin-left:5px;
+       }
+}
+
+.x-slider-vert{
+       @include box-shadow(1px 0 0 0 wha(.15), 2px 0 5px 0 bla(.25) inset);
+       width:10px;
+       .x-slider-inner{
+               width:10px;
+       }
+       .x-slider-end{
+               padding-bottom:10px;
+               width:10px;
+       }
+       .x-slider-thumb{
+               margin-top:4px;
+               margin-bottom:4px;
+       }
+}
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/form/_triggers.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/components/form/_triggers.scss
new file mode 100644 (file)
index 0000000..57c5c2b
--- /dev/null
@@ -0,0 +1,85 @@
+@mixin trigger($type, $image){
+       .x-form-#{$type}-trigger{
+               @include background-image(linear-gradient(bla(.2), bla(0)), $gloss-gradient, $image);
+       }
+}
+
+.x-form-trigger-wrap{
+       float:left;
+       @include box-shadow(0 1px 0 0 wha(.35));
+       overflow:hidden;
+       border:1px solid #000;
+       border-left:0;
+       @include border-radius(0 4px 4px 0);
+}
+
+.x-form-trigger-wrap{
+       .x-form-spinner-up{
+               height:10px;
+               @include border-radius(0 3px 0 0);
+               background:#666 murano-image('triggericons/spinner-up.png') center top no-repeat;
+               border-bottom:1px solid #444;
+               &-over{
+                       background-color:#999;
+               }
+       }
+       .x-form-spinner-down{
+               height:9px;
+               border-top:none;
+               @include border-radius(0 0 3px 0);
+               background:#555 murano-image('triggericons/spinner-down.png') center top no-repeat;
+               border-top:1px solid #888;
+               &-over{
+                       background-color:#888;
+                       border-color:#888;
+               }
+       }
+}
+.x-form-trigger-wrap-focus{
+       .x-form-spinner-up{
+               background-color:#999;
+       }
+       .x-form-spinner-down{
+               background-color:#888;
+       }
+}
+
+.x-form-trigger-wrap-focus{
+       .x-form-trigger{
+               background-color:#AAA;
+               border-color:#AAA;
+               &-click{
+                       background-color:#888;
+                       border-color:#888;
+               }
+       }
+}
+
+.x-form-trigger{
+       @include border-radius(0 3px 3px 0);
+       width:16px;
+       height:19px;
+       float:left;
+       background-color:#666;
+       border:1px solid #666;
+       &-over{
+               background-color:#AAA;
+               border-color:#AAA;
+       }
+       &-click{
+               background-color:#888;
+               border-color:#888;
+       }
+}
+
+
+.x-form-clear-trigger{
+       @include border-radius(0);
+       border-right-color:#888;
+}
+
+@include trigger(arrow, murano-image('triggericons/chev.png'));
+@include trigger(time, murano-image('triggericons/time.png'));
+@include trigger(date, murano-image('triggericons/date.png'));
+@include trigger(clear, murano-image('triggericons/clear.png'));
+@include trigger(search, murano-image('triggericons/search.png'));
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/overrides/_accordion.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/overrides/_accordion.scss
new file mode 100644 (file)
index 0000000..29d2621
--- /dev/null
@@ -0,0 +1,14 @@
+.x-accordion-hd{
+       .x-panel-header-text{
+               color:#FFF !important;
+               text-shadow:0 -1px 0 bla(.35);
+       }
+       @include background-image($gloss-gradient !important);
+       background-color:#666 !important;
+       padding:0 5px;
+       border-top:1px solid #999 !important;
+       border-bottom:1px solid #555 !important;
+       .x-tool{
+               top:3px !important;
+       }
+}
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/murano/sass/murano/overrides/_all.scss b/philo/contrib/gilbert/static/gilbert/murano/sass/murano/overrides/_all.scss
new file mode 100644 (file)
index 0000000..150475e
--- /dev/null
@@ -0,0 +1 @@
+@import 'accordion';
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/plugins/auth.js b/philo/contrib/gilbert/static/gilbert/plugins/auth.js
new file mode 100644 (file)
index 0000000..97e1785
--- /dev/null
@@ -0,0 +1,140 @@
+Ext.ns('Gilbert.lib.plugins.auth');
+
+
+Gilbert.lib.plugins.auth.Plugin = Ext.extend(Gilbert.lib.plugins.Plugin, {
+       
+       init: function (application) {
+               Gilbert.lib.plugins.auth.Plugin.superclass.init.call(this, application);
+               
+               var outer = this;
+               
+               Gilbert.api.plugins.auth.whoami(function (whoami) {
+                       application.mainmenu.add({
+                               xtype: 'tbfill',
+                       },{
+                               xtype: 'tbseparator',
+                       },{
+                               xtype: 'button',
+                               iconCls: 'icon-user-silhouette',
+                               text: '<span style="font-weight: bolder;">' + whoami + '</span>',
+                               menu: [{
+                                               text: 'Theme',
+                                               iconCls: 'icon-mask',
+                                               menu: outer.build_theme_menu(),
+                                       },{
+                                               xtype: 'menuseparator',
+                                       },{
+                                       text: 'Change password',
+                                       iconCls: 'icon-key--pencil',
+                                       handler: function(button, event) {
+                                               Gilbert.api.plugins.auth.get_passwd_form(function(formspec) {
+                                                       var formspec = formspec;
+                                                       for (var item_index in formspec.items) {
+                                                               var item = formspec.items[item_index];
+                                                               Ext.apply(item, {
+                                                                       anchor: '100%',
+                                                               });
+                                                       }
+                                                       var change_password_form = new Gilbert.lib.ui.DjangoForm(Ext.applyIf({
+                                                               title: 'Change password',
+                                                               header: false,
+                                                               iconCls: 'icon-key--pencil',
+                                                               bodyStyle: 'padding: 10px;',
+                                                               baseCls: 'x-plain',
+                                                               autoScroll: true,
+                                                               api: {
+                                                                       submit: Gilbert.api.plugins.auth.save_passwd_form,
+                                                               },
+                                                       }, formspec));
+                                                       var change_password_window = application.create_window({
+                                                               layout: 'fit',
+                                                               title: change_password_form.title,
+                                                               iconCls: change_password_form.iconCls,
+                                                               bodyStyle: 'padding: 5px; background: solid;',
+                                                               width: 360,
+                                                               height: 240,
+                                                               maximizable: false,
+                                                               items: [change_password_form],
+                                                               bbar: [
+                                                                       '->',
+                                                                       {
+                                                                               text: 'Change password',
+                                                                               iconCls: 'icon-key--pencil',
+                                                                               handler: function(button, event) {
+                                                                                       change_password_form.getForm().submit({
+                                                                                               success: function(form, action) {
+                                                                                                       Ext.MessageBox.alert('Password changed', 'Your password has been changed.');
+                                                                                                       change_password_window.close();
+                                                                                               },
+                                                                                       });
+                                                                               },
+                                                                       }
+                                                               ],
+                                                       });
+                                                       change_password_window.doLayout();
+                                                       change_password_window.show(button.el);
+                                               });
+                                               
+                                       },
+                               },{
+                                       text: 'Log out',
+                                       iconCls: 'icon-door-open-out',
+                                       handler: function(button, event) {
+                                               Gilbert.api.plugins.auth.logout(function(success) {
+                                                       if (success) {
+                                                               window.onbeforeunload = undefined;
+                                                               document.location.reload();
+                                                       } else {
+                                                               Ext.MessageBox.alert('Log out failed', 'You have <strong>not</strong> been logged out. This could mean that your connection with the server has been severed. Please try again.');
+                                                       }
+                                               })
+                                       }
+                               }],
+                       });
+                       application.do_layout();
+               });
+       },
+       
+       build_theme_menu: function () {
+               var application = this.application;
+               
+               var theme_switcher = function (menuitem) {
+                       var theme_name = menuitem.theme_name;
+                       Gilbert.api.plugins.auth.set_preference('gilbert.theme', theme_name, function () {
+                               application._set_theme(theme_name);
+                               application.do_layout();
+                               application.windows.each(function (win) {
+                                       win.doLayout();
+                               });
+                       });
+               };
+               
+               var menu = [];
+               
+               Ext.each(document.getElementsByClassName('gilbert.theme'), function (theme_element) {
+                       var theme_id = theme_element.id;
+                       var theme_name = theme_id.match(/gilbert.theme.(.*)/)[1];
+                       var current_theme = false;
+                       if (!theme_element.disabled) {
+                               current_theme = true;
+                       }
+                       
+                       
+                       menu.push({
+                               text: theme_name.capfirst(),
+                               checked: current_theme,
+                               group: 'theme',
+                               theme_name: theme_name,
+                               handler: theme_switcher,
+                       });
+               });
+               
+               return menu;
+       },
+       
+});
+
+
+Gilbert.on('ready', function (application) {
+       application.register_plugin('auth', new Gilbert.lib.plugins.auth.Plugin());
+});
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/plugins/models.js b/philo/contrib/gilbert/static/gilbert/plugins/models.js
new file mode 100644 (file)
index 0000000..a5b5eed
--- /dev/null
@@ -0,0 +1,527 @@
+Ext.ns('Gilbert.lib.plugins.models.ui');
+
+
+Ext.override(Gilbert.lib.models.Model, {
+       create_new_form: function (callback, config) {
+               var model = this;
+               var config = config;
+               model.api.get_form({}, function (formspec) {
+                       var formspec = formspec;
+                       for (var item_index in formspec.items) {
+                               var item = formspec.items[item_index];
+                               Ext.apply(item, {
+                                       anchor: '100%',
+                               });
+                       }
+                       var form_panel = new Gilbert.lib.ui.DjangoForm(Ext.applyIf(Ext.applyIf(config||{},{
+                               title: 'New '+model.verbose_name,
+                               header: false,
+                               iconCls: 'icon-plus',
+                               baseCls: 'x-plain',
+                               autoScroll: true,
+                               api: {
+                                       submit: model.api.save_form,
+                               },
+                       }), formspec));
+                       callback(form_panel);
+               });
+       },
+       create_edit_form: function (callback, pk, config) {
+               var model = this;
+               var config = config;
+               model.api.get_form({'pk': pk}, function (formspec) {
+                       var formspec = formspec;
+                       for (var item_index in formspec.items) {
+                               var item = formspec.items[item_index];
+                               Ext.apply(item, {
+                                       anchor: '100%',
+                               });
+                       }
+                       callback(new Gilbert.lib.ui.DjangoForm(Ext.applyIf(Ext.applyIf(config||{},{
+                               title: 'Editing '+model.verbose_name.capfirst()+' ('+pk+')',
+                               header: false,
+                               iconCls: 'icon-pencil',
+                               baseCls: 'x-plain',
+                               autoScroll: true,
+                               api: {
+                                       submit: model.api.save_form,
+                               },
+                               baseParams: {
+                                       pk: pk,
+                               },
+                       }), formspec)));
+               });
+       },
+});
+
+
+Gilbert.lib.plugins.models.ui.ForeignKeyColumn = Ext.extend(Ext.grid.Column, {
+       renderer: function(v) {
+               return v.__unicode__
+       }
+})
+
+
+Ext.grid.Column.types['foreignkeycolumn'] = Gilbert.lib.plugins.models.ui.ForeignKeyColumn
+
+
+Gilbert.lib.plugins.models.ui.ModelPanel = Ext.extend(Ext.Panel, {
+       constructor: function (model, plugin, config) {
+               var model = this.model = model;
+               var plugin = this.plugin = plugin;
+               var application = this.application = plugin.application;
+               var outer = this;
+               
+               var store = this.store = model.create_store({
+                       autoLoad: true,
+                       autoDestroy: true,
+                       autoSave: false,
+                       baseParams: {
+                               start: 0,
+                               limit: 25,
+                       },
+               });
+               
+               var grid = this.grid = new Ext.grid.GridPanel({
+                       ddGroup: model.drag_drop_group,
+                       enableDragDrop: true,
+                       loadMask: true,
+                       store: store,
+                       columns: model.columns,
+                       columnLines: true,
+                       stripeRows: true,
+                       viewConfig: {
+                               forceFit: true,
+                       },
+                       selModel: new Ext.grid.RowSelectionModel(),
+                       bbar: new Ext.PagingToolbar({
+                               pageSize: 25,
+                               store: store,
+                               displayInfo: true,
+                               displayMsg: 'Displaying '+model.verbose_name_plural+' {0} - {1} of {2}',
+                               emptyMsg: 'No '+model.verbose_name_plural+' to display',
+                               items: (function () {
+                                       if (model.searchable) {
+                                               return [
+                                                       {
+                                                               xtype: 'tbseparator',
+                                                       },
+                                                       new Ext.ux.form.SearchField({
+                                                               store: store,
+                                                       }),
+                                               ];
+                                       } else {
+                                               return [];
+                                       }
+                               })(),
+                       }),
+               });
+               
+               var new_action = this.new_action = new Ext.Action({
+                       text: 'New ' + model.verbose_name,
+                       iconCls: 'icon-plus',
+                       handler: function () {
+                               plugin.create_instance_window(model, undefined, function (win) {
+                                       win.on('saved', function () {
+                                               store.reload();
+                                       });
+                                       win.show();
+                               });
+                       },
+               });
+               
+               var edit_action = this.edit_action = new Ext.Action({
+                       disabled: true,
+                       text: 'Edit',
+                       iconCls: 'icon-pencil',
+                       handler: function () {
+                               Ext.each(grid.getSelectionModel().getSelections(), function (record, index) {
+                                       plugin.create_instance_window(model, record.id, function (win) {
+                                               win.on('saved', function () {
+                                                       store.reload();
+                                               });
+                                               win.show();
+                                       });
+                               });
+                       }
+               });
+               
+               var delete_action = this.delete_action = new Ext.Action({
+                       disabled: true,
+                       text: 'Delete',
+                       iconCls: 'icon-minus',
+                       handler: function () {
+                               var records = grid.getSelectionModel().getSelections();
+                               var pks = [];
+                               Ext.each(records, function (record, index) {
+                                       pks.push(record.id);
+                               });
+                               model.api.data_destroy_consequences(pks, function (consequences) {
+                                       var convert_consequences_array = function (consequences) {
+                                               var last_parent = consequences[0];
+                                               Ext.each(consequences, function (consequence, index) {
+                                                       if (index != 0) {
+                                                               if (!Ext.isArray(consequence)) {
+                                                                       last_parent = consequence;
+                                                               } else {
+                                                                       last_parent['children'] = convert_consequences_array(consequence);
+                                                                       delete consequences[index];
+                                                               }
+                                                       }
+                                               });
+                                               new_consequences = [];
+                                               Ext.each(consequences, function (consequence) {
+                                                       if (consequence) {
+                                                               var new_consequence = {};
+                                                               if (!consequence['children']) {
+                                                                       new_consequence['leaf'] = true;
+                                                               } else {
+                                                                       new_consequence['leaf'] = false;
+                                                                       new_consequence['children'] = consequence['children'];
+                                                               }
+                                                               var app_label = consequence['app_label'];
+                                                               var name = consequence['name'];
+                                                               var model = Gilbert.get_model(app_label, name);
+                                                               if (model) {
+                                                                       new_consequence['text'] = consequence['__unicode__'];
+                                                                       new_consequence['iconCls'] = model.iconCls;
+                                                               } else {
+                                                                       new_consequence['text'] = '(' + consequence['name'] + ') ' + consequence['__unicode__'];
+                                                                       new_consequence['iconCls'] = 'icon-block';
+                                                               }
+                                                               new_consequence['disabled'] = true;
+                                                               new_consequences.push(new_consequence);
+                                                       }
+                                               });
+                                               return new_consequences;
+                                       };
+                                       
+                                       var new_consequences = convert_consequences_array(consequences);
+                                       var nested_consequences = false;
+                                       for(var i=0;i<new_consequences.length;i++){
+                                               if (!new_consequences[i]['leaf']) {
+                                                       nested_consequences = true;
+                                                       break;
+                                               }
+                                       }
+                                       
+                                       var tree = this.tree = new Ext.tree.TreePanel({
+                                               loader: new Ext.tree.TreeLoader(),
+                                               enableDD: false,
+                                               animate: false,
+                                               trackMouseOver: false,
+                                               autoScroll: true,
+                                               root: {
+                                                       'disabled': true,
+                                                       'text': 'To be deleted',
+                                                       'iconCls': 'icon-minus',
+                                                       'leaf': false,
+                                                       'children': new_consequences,
+                                               },
+                                               useArrows: true,
+                                               rootVisible: false,
+                                               region: 'center',
+                                       });
+                                       
+                                       var consequences_win = application.create_window({
+                                               layout: 'border',
+                                               width: 300,
+                                               height: 300,
+                                               modal: true,
+                                               title: 'Delete ' + model.verbose_name_plural,
+                                               iconCls: 'icon-minus',
+                                               items: [
+                                                       {
+                                                               region: 'north',
+                                                               xtype: 'panel',
+                                                               html: 'Are you sure you want to delete these ' + model.verbose_name_plural + '?' + (nested_consequences ? ' Nested objects will also be deleted.' : ''),
+                                                               bodyStyle: 'padding: 15px;',
+                                                       },
+                                                       tree,
+                                               ],
+                                               bbar: [
+                                                       {
+                                                               xtype: 'button',
+                                                               text: 'Cancel',
+                                                               handler: function () {
+                                                                       consequences_win.close();
+                                                               },
+                                                       },
+                                                       '->',
+                                                       {
+                                                               xtype: 'button',
+                                                               text: 'Delete',
+                                                               handler: function () {
+                                                                       consequences_win.close();
+                                                                       store.remove(records);
+                                                                       store.save();
+                                                                       store.reload();
+                                                               },
+                                                       },
+                                               ],
+                                       });
+                                       
+                                       consequences_win.show();
+                               });
+                       }
+               });
+               
+               grid.on('cellcontextmenu', function (grid, rowIndex, cellIndex, e) {
+                       e.stopEvent();
+                       selmodel = grid.getSelectionModel();
+                       if (!selmodel.isSelected(rowIndex)) {
+                               selmodel.selectRow(rowIndex, false);
+                       }
+                       var contextmenu = new Ext.menu.Menu({
+                               items: [
+                                       edit_action,
+                                       delete_action,
+                               ],
+                       });
+                       contextmenu.showAt(e.xy);
+               });
+               
+               grid.on('rowdblclick', function(grid, rowIndex, e) {
+                       var record = grid.getStore().getAt(rowIndex)
+                       plugin.create_instance_window(model, record.id, function (win) {
+                               win.on('saved', function () {
+                                       store.reload();
+                               });
+                               win.show();
+                       });
+               });
+               
+               grid.getSelectionModel().on('selectionchange', function (selmodel) {
+                       if (selmodel.hasSelection()) {
+                               edit_action.setDisabled(false);
+                               delete_action.setDisabled(false);
+                       } else {
+                               edit_action.setDisabled(true);
+                               delete_action.setDisabled(true);
+                       }
+               });
+               
+               Gilbert.lib.plugins.models.ui.ModelPanel.superclass.constructor.call(this, Ext.applyIf(config||{}, {
+                       layout: 'fit',
+                       tbar: new Ext.Toolbar({
+                               items: [
+                                       new_action,
+                                       { xtype: 'tbseparator' },
+                                       edit_action,
+                                       delete_action,
+                                       //'->',
+                                       //{
+                                       //      text: 'Advanced',
+                                       //      iconCls: 'icon-gear',
+                                       //      disabled: true,
+                                       //      menu: [],
+                                       //},
+                               ],
+                       }),
+                       items: [grid],
+               }));
+       },
+});
+
+
+Gilbert.lib.plugins.models.Plugin = Ext.extend(Gilbert.lib.plugins.Plugin, {
+       
+       init: function (application) {
+               Gilbert.lib.plugins.models.Plugin.superclass.init.call(this, application);
+               
+               var new_menu = this.new_menu = new Ext.menu.Menu();
+               var manage_menu = this.manage_menu = new Ext.menu.Menu();
+               
+               application.mainmenu.insert(2, {
+                       xtype: 'button',
+                       iconCls: 'icon-plus',
+                       text: 'New',
+                       menu: new_menu,
+               });
+               
+               application.mainmenu.insert(3, {
+                       xtype: 'button',
+                       iconCls: 'icon-databases',
+                       text: 'Manage',
+                       menu: manage_menu,
+               });
+               
+               application.do_layout();
+               
+               Ext.iterate(application.models, function (app_label, models) {
+                       Ext.iterate(models, function (name, model) {
+                               this.handle_new_model(model);
+                       }, this);
+               }, this);
+               
+               application.on('model_registered', function (model) {
+                       this.handle_new_model(model);
+               }, this);
+               
+               this.instance_windows = {}
+       },
+       
+       handle_new_model: function (model) {
+               var outer = this;
+               model.api.has_add_permission(function (has_add_permission) {
+                       if (has_add_permission) {
+                               outer.add_to_new_menu(model);
+                       }
+               });
+               model.api.has_read_permission(function (has_read_permission) {
+                       if (has_read_permission) {
+                               outer.add_to_manage_menu(model);
+                       }
+               });
+       },
+       
+       add_to_new_menu: function (model) {
+               var outer = this;
+               this.new_menu.add({
+                       text: model.verbose_name.capfirst(),
+                       iconCls: model.iconCls,
+                       model: model,
+                       handler: function (button, event) {
+                               outer.create_instance_window(this.model, undefined, function (win) {
+                                       win.show();
+                               });
+                       },
+               });
+       },
+       
+       add_to_manage_menu: function (model) {
+               var outer = this;
+               this.manage_menu.add({
+                       text: model.verbose_name_plural.capfirst(),
+                       iconCls: model.iconCls,
+                       model: model,
+                       handler: function (button, event) {
+                               var win = outer.create_model_management_window(this.model);
+                               win.show(button.el);
+                       },
+               });
+       },
+       
+       create_model_management_window: function (model, config, cls) {
+               var model = model;
+               var panel = new Gilbert.lib.plugins.models.ui.ModelPanel(model, this);
+               var win = this.application.create_window(Ext.applyIf(config||{},{
+                       layout: 'fit',
+                       title: model.verbose_name_plural.capfirst(),
+                       iconCls: model.iconCls,
+                       width: 640,
+                       height: 320,
+                       maximizable: true,
+                       items: [panel],
+               }), cls);
+               return win;
+       },
+       
+       create_instance_window: function (model, pk, callback, config, cls) {
+               if (pk != undefined) {
+                       var win = this.instance_windows[[model.app_label, model.name, pk]];
+                       if (win != undefined){
+                               win.show();
+                               return;
+                       };
+               };
+               var pk = pk;
+               var callback = callback;
+               var application = this.application;
+               var outer = this;
+               
+               var form_callback = function (form) {
+                       var oldform = form;
+                       var win = application.create_window({
+                               layout: 'fit',
+                               title: form.title,
+                               iconCls: form.iconCls,
+                               bodyStyle: 'padding: 5px; background: solid;',
+                               width: 640,
+                               height: 320,
+                               maximizable: true,
+                               items: [form],
+                               bbar: [
+                                       '->',
+                                       {
+                                               xtype: 'button',
+                                               text: 'Save and Close',
+                                               iconCls: 'icon-database-import',
+                                               handler: function (button) {
+                                                       var loading_mask = new Ext.LoadMask(win.body, {
+                                                               msg: 'Saving...',
+                                                               removeMask: true,
+                                                       });
+                                                       loading_mask.show();
+                                                       win.items.items[0].getForm().submit({
+                                                               success: function (form, action) {
+                                                                       loading_mask.hide();
+                                                                       win.fireEvent('saved');
+                                                                       win.close();
+                                                               },
+                                                               failure: function (form, action) {
+                                                                       loading_mask.hide();
+                                                               },
+                                                       });
+                                               }
+                                       },
+                                       {
+                                               xtype: 'button',
+                                               text: 'Save',
+                                               iconCls: 'icon-database-import',
+                                               handler: function (button) {
+                                                       var loading_mask = new Ext.LoadMask(win.body, {
+                                                               msg: 'Saving...',
+                                                               removeMask: true,
+                                                       });
+                                                       loading_mask.show();
+                                                       win.items.items[0].getForm().submit({
+                                                               success: function (form, action) {
+                                                                       win.fireEvent('saved');
+                                                                       var pk = action.result.pk;
+                                                                       model.create_edit_form(function (newform) {
+                                                                               win.remove(oldform);
+                                                                               win.add(newform);
+                                                                               loading_mask.hide();
+                                                                               win.setTitle(newform.title);
+                                                                               win.setIconClass(newform.iconCls);
+                                                                               win.doLayout();
+                                                                       }, pk);
+                                                               },
+                                                               failure: function (form, action) {
+                                                                       loading_mask.hide();
+                                                               },
+                                                       });
+                                               },
+                                       },
+                               ],
+                       });
+                       if (pk != undefined) {
+                               outer.instance_windows[[model.app_label, model.name, pk]] = win
+                               win.on('close', function(){
+                                       delete outer.instance_windows[[model.app_label, model.name, pk]];
+                               });
+                       }
+                       win.addEvents({
+                               'saved': true,
+                       });
+                       callback(win);
+               };
+
+               if (pk) {
+                       model.create_edit_form(form_callback, pk, {
+                               bodyStyle: 'padding: 10px;',
+                       });
+               } else {
+                       model.create_new_form(form_callback, {
+                               bodyStyle: 'padding: 10px;',
+                       });
+               }
+       },
+       
+});
+
+
+Gilbert.on('ready', function (application) {
+       application.register_plugin('models', new Gilbert.lib.plugins.models.Plugin());
+});
diff --git a/philo/contrib/gilbert/static/gilbert/superboxselect/SuperBoxSelect.js b/philo/contrib/gilbert/static/gilbert/superboxselect/SuperBoxSelect.js
new file mode 100755 (executable)
index 0000000..4087666
--- /dev/null
@@ -0,0 +1,1699 @@
+Ext.namespace('Ext.ux.form');\r
+/**\r
+ * <p>SuperBoxSelect is an extension of the ComboBox component that displays selected items as labelled boxes within the form field. As seen on facebook, hotmail and other sites.</p>\r
+ * <p>The SuperBoxSelect component was inspired by the BoxSelect component found here: http://efattal.fr/en/extjs/extuxboxselect/</p>\r
+ * \r
+ * @author <a href="mailto:dan.humphrey@technomedia.co.uk">Dan Humphrey</a>\r
+ * @class Ext.ux.form.SuperBoxSelect\r
+ * @extends Ext.form.ComboBox\r
+ * @constructor\r
+ * @component\r
+ * @version 1.0\r
+ * @license TBA (To be announced)\r
+ * \r
+ */\r
+Ext.ux.form.SuperBoxSelect = function(config) {\r
+    Ext.ux.form.SuperBoxSelect.superclass.constructor.call(this,config);\r
+    this.addEvents(\r
+        /**\r
+         * Fires before an item is added to the component via user interaction. Return false from the callback function to prevent the item from being added.\r
+         * @event beforeadditem\r
+         * @memberOf Ext.ux.form.SuperBoxSelect\r
+         * @param {SuperBoxSelect} this\r
+         * @param {Mixed} value The value of the item to be added\r
+         */\r
+        'beforeadditem',\r
+\r
+        /**\r
+         * Fires after a new item is added to the component.\r
+         * @event additem\r
+         * @memberOf Ext.ux.form.SuperBoxSelect\r
+         * @param {SuperBoxSelect} this\r
+         * @param {Mixed} value The value of the item which was added\r
+         * @param {Record} record The store record which was added\r
+         */\r
+        'additem',\r
+\r
+        /**\r
+         * Fires when the allowAddNewData config is set to true, and a user attempts to add an item that is not in the data store.\r
+         * @event newitem\r
+         * @memberOf Ext.ux.form.SuperBoxSelect\r
+         * @param {SuperBoxSelect} this\r
+         * @param {Mixed} value The new item's value\r
+         */\r
+        'newitem',\r
+\r
+        /**\r
+         * Fires when an item's remove button is clicked. Return false from the callback function to prevent the item from being removed.\r
+         * @event beforeremoveitem\r
+         * @memberOf Ext.ux.form.SuperBoxSelect\r
+         * @param {SuperBoxSelect} this\r
+         * @param {Mixed} value The value of the item to be removed\r
+         */\r
+        'beforeremoveitem',\r
+\r
+        /**\r
+         * Fires after an item has been removed.\r
+         * @event removeitem\r
+         * @memberOf Ext.ux.form.SuperBoxSelect\r
+         * @param {SuperBoxSelect} this\r
+         * @param {Mixed} value The value of the item which was removed\r
+         * @param {Record} record The store record which was removed\r
+         */\r
+        'removeitem',\r
+        /**\r
+         * Fires after the component values have been cleared.\r
+         * @event clear\r
+         * @memberOf Ext.ux.form.SuperBoxSelect\r
+         * @param {SuperBoxSelect} this\r
+         */\r
+        'clear'\r
+    );\r
+    \r
+};\r
+/**\r
+ * @private hide from doc gen\r
+ */\r
+Ext.ux.form.SuperBoxSelect = Ext.extend(Ext.ux.form.SuperBoxSelect,Ext.form.ComboBox,{\r
+    /**\r
+     * @cfg {Boolean} allowAddNewData When set to true, allows items to be added (via the setValueEx and addItem methods) that do not already exist in the data store. Defaults to false.\r
+     */\r
+    allowAddNewData: false,\r
+\r
+    /**\r
+     * @cfg {Boolean} backspaceDeletesLastItem When set to false, the BACKSPACE key will focus the last selected item. When set to true, the last item will be immediately deleted. Defaults to true.\r
+     */\r
+    backspaceDeletesLastItem: true,\r
+\r
+    /**\r
+     * @cfg {String} classField The underlying data field that will be used to supply an additional class to each item.\r
+     */\r
+    classField: null,\r
+\r
+    /**\r
+     * @cfg {String} clearBtnCls An additional class to add to the in-field clear button.\r
+     */\r
+    clearBtnCls: '',\r
+\r
+    /**\r
+     * @cfg {String/XTemplate} displayFieldTpl A template for rendering the displayField in each selected item. Defaults to null.\r
+     */\r
+    displayFieldTpl: null,\r
+\r
+    /**\r
+     * @cfg {String} extraItemCls An additional css class to apply to each item.\r
+     */\r
+    extraItemCls: '',\r
+\r
+    /**\r
+     * @cfg {String/Object/Function} extraItemStyle Additional css style(s) to apply to each item. Should be a valid argument to Ext.Element.applyStyles.\r
+     */\r
+    extraItemStyle: '',\r
+\r
+    /**\r
+     * @cfg {String} expandBtnCls An additional class to add to the in-field expand button.\r
+     */\r
+    expandBtnCls: '',\r
+\r
+    /**\r
+     * @cfg {Boolean} fixFocusOnTabSelect When set to true, the component will not lose focus when a list item is selected with the TAB key. Defaults to true.\r
+     */\r
+    fixFocusOnTabSelect: true,\r
+    \r
+     /**\r
+     * @cfg {Boolean} forceFormValue When set to true, the component will always return a value to the parent form getValues method, and when the parent form is submitted manually. Defaults to false, meaning the component will only be included in the parent form submission (or getValues) if at least 1 item has been selected.  \r
+     */\r
+    forceFormValue: true,\r
+    /**\r
+     * @cfg {Number} itemDelimiterKey The key code which terminates keying in of individual items, and adds the current\r
+     * item to the list. Defaults to the ENTER key.\r
+     */\r
+    itemDelimiterKey: Ext.EventObject.ENTER,    \r
+    /**\r
+     * @cfg {Boolean} navigateItemsWithTab When set to true the tab key will navigate between selected items. Defaults to true.\r
+     */\r
+    navigateItemsWithTab: true,\r
+\r
+    /**\r
+     * @cfg {Boolean} pinList When set to true the select list will be pinned to allow for multiple selections. Defaults to true.\r
+     */\r
+    pinList: true,\r
+\r
+    /**\r
+     * @cfg {Boolean} preventDuplicates When set to true unique item values will be enforced. Defaults to true.\r
+     */\r
+    preventDuplicates: true,\r
+    \r
+    /**\r
+     * @cfg {String} queryValuesDelimiter Used to delimit multiple values queried from the server when mode is remote.\r
+     */\r
+    queryValuesDelimiter: '|',\r
+    \r
+    /**\r
+     * @cfg {String} queryValuesIndicator A request variable that is sent to the server (as true) to indicate that we are querying values rather than display data (as used in autocomplete) when mode is remote.\r
+     */\r
+    queryValuesIndicator: 'valuesqry',\r
+\r
+    /**\r
+     * @cfg {Boolean} removeValuesFromStore When set to true, selected records will be removed from the store. Defaults to true.\r
+     */\r
+    removeValuesFromStore: true,\r
+\r
+    /**\r
+     * @cfg {String} renderFieldBtns When set to true, will render in-field buttons for clearing the component, and displaying the list for selection. Defaults to true.\r
+     */\r
+    renderFieldBtns: true,\r
+\r
+    /**\r
+     * @cfg {Boolean} stackItems When set to true, the items will be stacked 1 per line. Defaults to false which displays the items inline.\r
+     */\r
+    stackItems: false,\r
+\r
+    /**\r
+     * @cfg {String} styleField The underlying data field that will be used to supply additional css styles to each item.\r
+     */\r
+    styleField : null,\r
+    \r
+     /**\r
+     * @cfg {Boolean} supressClearValueRemoveEvents When true, the removeitem event will not be fired for each item when the clearValue method is called, or when the clear button is used. Defaults to false.\r
+     */\r
+    supressClearValueRemoveEvents : false,\r
+    \r
+    /**\r
+     * @cfg {String/Boolean} validationEvent The event that should initiate field validation. Set to false to disable automatic validation (defaults to 'blur').\r
+     */\r
+       validationEvent : 'blur',\r
+       \r
+    /**\r
+     * @cfg {String} valueDelimiter The delimiter to use when joining and splitting value arrays and strings.\r
+     */\r
+    valueDelimiter: ',',\r
+    initComponent:function() {\r
+       Ext.apply(this, {\r
+            items           : new Ext.util.MixedCollection(false),\r
+            usedRecords     : new Ext.util.MixedCollection(false),\r
+            addedRecords       : [],\r
+            remoteLookup       : [],\r
+            hideTrigger     : true,\r
+            grow            : false,\r
+            resizable       : false,\r
+            multiSelectMode : false,\r
+            preRenderValue  : null\r
+        });\r
+        \r
+        if(this.transform){\r
+            this.doTransform();\r
+        }\r
+        if(this.forceFormValue){\r
+               this.items.on({\r
+                  add: this.manageNameAttribute,\r
+                  remove: this.manageNameAttribute,\r
+                  clear: this.manageNameAttribute,\r
+                  scope: this\r
+               });\r
+        }\r
+        \r
+        Ext.ux.form.SuperBoxSelect.superclass.initComponent.call(this);\r
+        if(this.mode === 'remote' && this.store){\r
+               this.store.on('load', this.onStoreLoad, this);\r
+        }\r
+    },\r
+    onRender:function(ct, position) {\r
+       var h = this.hiddenName;\r
+       this.hiddenName = null;\r
+        Ext.ux.form.SuperBoxSelect.superclass.onRender.call(this, ct, position);\r
+        this.hiddenName = h;\r
+        this.manageNameAttribute();\r
+       \r
+        var extraClass = (this.stackItems === true) ? 'x-superboxselect-stacked' : '';\r
+        if(this.renderFieldBtns){\r
+            extraClass += ' x-superboxselect-display-btns';\r
+        }\r
+        this.el.removeClass('x-form-text').addClass('x-superboxselect-input-field');\r
+        \r
+        this.wrapEl = this.el.wrap({\r
+            tag : 'ul'\r
+        });\r
+        \r
+        this.outerWrapEl = this.wrapEl.wrap({\r
+            tag : 'div',\r
+            cls: 'x-form-text x-superboxselect ' + extraClass\r
+        });\r
+       \r
+        this.inputEl = this.el.wrap({\r
+            tag : 'li',\r
+            cls : 'x-superboxselect-input'\r
+        });\r
+        \r
+        if(this.renderFieldBtns){\r
+            this.setupFieldButtons().manageClearBtn();\r
+        }\r
+        \r
+        this.setupFormInterception();\r
+    },\r
+    onStoreLoad : function(store, records, options){\r
+       //accomodating for bug in Ext 3.0.0 where options.params are empty\r
+       var q = options.params[this.queryParam] || store.baseParams[this.queryParam] || "",\r
+               isValuesQuery = options.params[this.queryValuesIndicator] || store.baseParams[this.queryValuesIndicator];\r
+       \r
+       if(this.removeValuesFromStore){\r
+               this.store.each(function(record) {\r
+                               if(this.usedRecords.containsKey(record.get(this.valueField))){\r
+                                       this.store.remove(record);\r
+                               }\r
+                       }, this);\r
+       }\r
+       //queried values\r
+       if(isValuesQuery){\r
+               var params = q.split(this.queryValuesDelimiter);\r
+               Ext.each(params,function(p){\r
+                       this.remoteLookup.remove(p);\r
+                       var rec = this.findRecord(this.valueField,p);\r
+                       if(rec){\r
+                               this.addRecord(rec);\r
+                       }\r
+               },this);\r
+               \r
+               if(this.setOriginal){\r
+                       this.setOriginal = false;\r
+                       this.originalValue = this.getValue();\r
+               }\r
+       }\r
+\r
+       //queried display (autocomplete) & addItem\r
+       if(q !== '' && this.allowAddNewData){\r
+               Ext.each(this.remoteLookup,function(r){\r
+                       if(typeof r == "object" && r[this.displayField] == q){\r
+                               this.remoteLookup.remove(r);\r
+                                       if(records.length && records[0].get(this.displayField) === q) {\r
+                                               this.addRecord(records[0]);\r
+                                               return;\r
+                                       }\r
+                                       var rec = this.createRecord(r);\r
+                                       this.store.add(rec);\r
+                               this.addRecord(rec);\r
+                               this.addedRecords.push(rec); //keep track of records added to store\r
+                               (function(){\r
+                                       if(this.isExpanded()){\r
+                                               this.collapse();\r
+                                       }\r
+                               }).defer(10,this);\r
+                               return;\r
+                       }\r
+               },this);\r
+       }\r
+       \r
+       var toAdd = [];\r
+       if(q === ''){\r
+               Ext.each(this.addedRecords,function(rec){\r
+                       if(this.preventDuplicates && this.usedRecords.containsKey(rec.get(this.valueField))){\r
+                                       return;                         \r
+                       }\r
+                       toAdd.push(rec);\r
+                       \r
+               },this);\r
+               \r
+       }else{\r
+               var re = new RegExp(Ext.escapeRe(q) + '.*','i');\r
+               Ext.each(this.addedRecords,function(rec){\r
+                       if(this.preventDuplicates && this.usedRecords.containsKey(rec.get(this.valueField))){\r
+                                       return;                         \r
+                       }\r
+                       if(re.test(rec.get(this.displayField))){\r
+                               toAdd.push(rec);\r
+                       }\r
+               },this);\r
+           }\r
+       this.store.add(toAdd);\r
+       this.store.sort(this.displayField, 'ASC');\r
+       \r
+               if(this.store.getCount() === 0 && this.isExpanded()){\r
+                       this.collapse();\r
+               }\r
+               \r
+       },\r
+    doTransform : function() {\r
+       var s = Ext.getDom(this.transform), transformValues = [];\r
+            if(!this.store){\r
+                this.mode = 'local';\r
+                var d = [], opts = s.options;\r
+                for(var i = 0, len = opts.length;i < len; i++){\r
+                    var o = opts[i], oe = Ext.get(o),\r
+                        value = oe.getAttributeNS(null,'value') || '',\r
+                        cls = oe.getAttributeNS(null,'className') || '',\r
+                        style = oe.getAttributeNS(null,'style') || '';\r
+                    if(o.selected) {\r
+                        transformValues.push(value);\r
+                    }\r
+                    d.push([value, o.text, cls, typeof(style) === "string" ? style : style.cssText]);\r
+                }\r
+                this.store = new Ext.data.SimpleStore({\r
+                    'id': 0,\r
+                    fields: ['value', 'text', 'cls', 'style'],\r
+                    data : d\r
+                });\r
+                Ext.apply(this,{\r
+                    valueField: 'value',\r
+                    displayField: 'text',\r
+                    classField: 'cls',\r
+                    styleField: 'style'\r
+                });\r
+            }\r
+           \r
+            if(transformValues.length){\r
+                this.value = transformValues.join(',');\r
+            }\r
+    },\r
+    setupFieldButtons : function(){\r
+        this.buttonWrap = this.outerWrapEl.createChild({\r
+            cls: 'x-superboxselect-btns'\r
+        });\r
+        \r
+        this.buttonClear = this.buttonWrap.createChild({\r
+            tag:'div',\r
+            cls: 'x-superboxselect-btn-clear ' + this.clearBtnCls\r
+        });\r
+        \r
+        this.buttonExpand = this.buttonWrap.createChild({\r
+            tag:'div',\r
+            cls: 'x-superboxselect-btn-expand ' + this.expandBtnCls\r
+        });\r
+        \r
+        this.initButtonEvents();\r
+        \r
+        return this;\r
+    },\r
+    initButtonEvents : function() {\r
+        this.buttonClear.addClassOnOver('x-superboxselect-btn-over').on('click', function(e) {\r
+            e.stopEvent();\r
+            if (this.disabled) {\r
+                return;\r
+            }\r
+            this.clearValue();\r
+            this.el.focus();\r
+        }, this);\r
+\r
+        this.buttonExpand.addClassOnOver('x-superboxselect-btn-over').on('click', function(e) {\r
+            e.stopEvent();\r
+            if (this.disabled) {\r
+                return;\r
+            }\r
+            if (this.isExpanded()) {\r
+                this.multiSelectMode = false;\r
+            } else if (this.pinList) {\r
+                this.multiSelectMode = true;\r
+            }\r
+            this.onTriggerClick();\r
+        }, this);\r
+    },\r
+    removeButtonEvents : function() {\r
+        this.buttonClear.removeAllListeners();\r
+        this.buttonExpand.removeAllListeners();\r
+        return this;\r
+    },\r
+    clearCurrentFocus : function(){\r
+        if(this.currentFocus){\r
+            this.currentFocus.onLnkBlur();\r
+            this.currentFocus = null;\r
+        }  \r
+        return this;        \r
+    },\r
+    initEvents : function() {\r
+        var el = this.el;\r
+\r
+        el.on({\r
+            click   : this.onClick,\r
+            focus   : this.clearCurrentFocus,\r
+            blur    : this.onBlur,\r
+\r
+            keydown : this.onKeyDownHandler,\r
+            keyup   : this.onKeyUpBuffered,\r
+\r
+            scope   : this\r
+        });\r
+\r
+        this.on({\r
+            collapse: this.onCollapse,\r
+            expand: this.clearCurrentFocus,\r
+            scope: this\r
+        });\r
+\r
+        this.wrapEl.on('click', this.onWrapClick, this);\r
+        this.outerWrapEl.on('click', this.onWrapClick, this);\r
+        \r
+        this.inputEl.focus = function() {\r
+            el.focus();\r
+        };\r
+\r
+        Ext.ux.form.SuperBoxSelect.superclass.initEvents.call(this);\r
+\r
+        Ext.apply(this.keyNav, {\r
+            tab: function(e) {\r
+                if (this.fixFocusOnTabSelect && this.isExpanded()) {\r
+                    e.stopEvent();\r
+                    el.blur();\r
+                    this.onViewClick(false);\r
+                    this.focus(false, 10);\r
+                    return true;\r
+                }\r
+\r
+                this.onViewClick(false);\r
+                if (el.dom.value !== '') {\r
+                    this.setRawValue('');\r
+                }\r
+\r
+                return true;\r
+            },\r
+\r
+            down: function(e) {\r
+                if (!this.isExpanded() && !this.currentFocus) {\r
+                    this.onTriggerClick();\r
+                } else {\r
+                    this.inKeyMode = true;\r
+                    this.selectNext();\r
+                }\r
+            },\r
+\r
+            enter: function(){}\r
+        });\r
+    },\r
+\r
+    onClick: function() {\r
+        this.clearCurrentFocus();\r
+        this.collapse();\r
+        this.autoSize();\r
+    },\r
+\r
+    beforeBlur: Ext.form.ComboBox.superclass.beforeBlur,\r
+\r
+    onFocus: function() {\r
+        this.outerWrapEl.addClass(this.focusClass);\r
+\r
+        Ext.ux.form.SuperBoxSelect.superclass.onFocus.call(this);\r
+    },\r
+\r
+    onBlur: function() {\r
+        this.outerWrapEl.removeClass(this.focusClass);\r
+\r
+        this.clearCurrentFocus();\r
+\r
+        if (this.el.dom.value !== '') {\r
+            this.applyEmptyText();\r
+            this.autoSize();\r
+        }\r
+\r
+        Ext.ux.form.SuperBoxSelect.superclass.onBlur.call(this);\r
+    },\r
+\r
+    onCollapse: function() {\r
+       this.view.clearSelections();\r
+        this.multiSelectMode = false;\r
+    },\r
+\r
+    onWrapClick: function(e) {\r
+        e.stopEvent();\r
+        this.collapse();\r
+        this.el.focus();\r
+        this.clearCurrentFocus();\r
+    },\r
+    markInvalid : function(msg) {\r
+        var elp, t;\r
+\r
+        if (!this.rendered || this.preventMark ) {\r
+            return;\r
+        }\r
+        this.outerWrapEl.addClass(this.invalidClass);\r
+        msg = msg || this.invalidText;\r
+\r
+        switch (this.msgTarget) {\r
+            case 'qtip':\r
+                Ext.apply(this.el.dom, {\r
+                    qtip    : msg,\r
+                    qclass  : 'x-form-invalid-tip'\r
+                });\r
+                Ext.apply(this.wrapEl.dom, {\r
+                    qtip    : msg,\r
+                    qclass  : 'x-form-invalid-tip'\r
+                });\r
+                if (Ext.QuickTips) { // fix for floating editors interacting with DND\r
+                    Ext.QuickTips.enable();\r
+                }\r
+                break;\r
+            case 'title':\r
+                this.el.dom.title = msg;\r
+                this.wrapEl.dom.title = msg;\r
+                this.outerWrapEl.dom.title = msg;\r
+                break;\r
+            case 'under':\r
+                if (!this.errorEl) {\r
+                    elp = this.getErrorCt();\r
+                    if (!elp) { // field has no container el\r
+                        this.el.dom.title = msg;\r
+                        break;\r
+                    }\r
+                    this.errorEl = elp.createChild({cls:'x-form-invalid-msg'});\r
+                    this.errorEl.setWidth(elp.getWidth(true) - 20);\r
+                }\r
+                this.errorEl.update(msg);\r
+                Ext.form.Field.msgFx[this.msgFx].show(this.errorEl, this);\r
+                break;\r
+            case 'side':\r
+                if (!this.errorIcon) {\r
+                    elp = this.getErrorCt();\r
+                    if (!elp) { // field has no container el\r
+                        this.el.dom.title = msg;\r
+                        break;\r
+                    }\r
+                    this.errorIcon = elp.createChild({cls:'x-form-invalid-icon'});\r
+                }\r
+                this.alignErrorIcon();\r
+                Ext.apply(this.errorIcon.dom, {\r
+                    qtip    : msg,\r
+                    qclass  : 'x-form-invalid-tip'\r
+                });\r
+                this.errorIcon.show();\r
+                this.on('resize', this.alignErrorIcon, this);\r
+                break;\r
+            default:\r
+                t = Ext.getDom(this.msgTarget);\r
+                t.innerHTML = msg;\r
+                t.style.display = this.msgDisplay;\r
+                break;\r
+        }\r
+        this.fireEvent('invalid', this, msg);\r
+    },\r
+    clearInvalid : function(){\r
+        if(!this.rendered || this.preventMark){ // not rendered\r
+            return;\r
+        }\r
+        this.outerWrapEl.removeClass(this.invalidClass);\r
+        switch(this.msgTarget){\r
+            case 'qtip':\r
+                this.el.dom.qtip = '';\r
+                this.wrapEl.dom.qtip ='';\r
+                break;\r
+            case 'title':\r
+                this.el.dom.title = '';\r
+                this.wrapEl.dom.title = '';\r
+                this.outerWrapEl.dom.title = '';\r
+                break;\r
+            case 'under':\r
+                if(this.errorEl){\r
+                    Ext.form.Field.msgFx[this.msgFx].hide(this.errorEl, this);\r
+                }\r
+                break;\r
+            case 'side':\r
+                if(this.errorIcon){\r
+                    this.errorIcon.dom.qtip = '';\r
+                    this.errorIcon.hide();\r
+                    this.un('resize', this.alignErrorIcon, this);\r
+                }\r
+                break;\r
+            default:\r
+                var t = Ext.getDom(this.msgTarget);\r
+                t.innerHTML = '';\r
+                t.style.display = 'none';\r
+                break;\r
+        }\r
+        this.fireEvent('valid', this);\r
+    },\r
+    alignErrorIcon : function(){\r
+        if(this.wrap){\r
+            this.errorIcon.alignTo(this.wrap, 'tl-tr', [Ext.isIE ? 5 : 2, 3]);\r
+        }\r
+    },\r
+    expand : function(){\r
+        if (this.isExpanded() || !this.hasFocus) {\r
+            return;\r
+        }\r
+        this.list.alignTo(this.outerWrapEl, this.listAlign).show();\r
+        this.innerList.setOverflow('auto'); // necessary for FF 2.0/Mac\r
+        Ext.getDoc().on({\r
+            mousewheel: this.collapseIf,\r
+            mousedown: this.collapseIf,\r
+            scope: this\r
+        });\r
+        this.fireEvent('expand', this);\r
+    },\r
+    restrictHeight : function(){\r
+        var inner = this.innerList.dom,\r
+            st = inner.scrollTop, \r
+            list = this.list;\r
+        \r
+        inner.style.height = '';\r
+        \r
+        var pad = list.getFrameWidth('tb')+(this.resizable?this.handleHeight:0)+this.assetHeight,\r
+            h = Math.max(inner.clientHeight, inner.offsetHeight, inner.scrollHeight),\r
+            ha = this.getPosition()[1]-Ext.getBody().getScroll().top,\r
+            hb = Ext.lib.Dom.getViewHeight()-ha-this.getSize().height,\r
+            space = Math.max(ha, hb, this.minHeight || 0)-list.shadowOffset-pad-5;\r
+        \r
+        h = Math.min(h, space, this.maxHeight);\r
+        this.innerList.setHeight(h);\r
+\r
+        list.beginUpdate();\r
+        list.setHeight(h+pad);\r
+        list.alignTo(this.outerWrapEl, this.listAlign);\r
+        list.endUpdate();\r
+        \r
+        if(this.multiSelectMode){\r
+            inner.scrollTop = st;\r
+        }\r
+    },\r
+    \r
+    validateValue: function(val){\r
+        if(this.items.getCount() === 0){\r
+             if(this.allowBlank){\r
+                 this.clearInvalid();\r
+                 return true;\r
+             }else{\r
+                 this.markInvalid(this.blankText);\r
+                 return false;\r
+             }\r
+        }\r
+        \r
+        this.clearInvalid();\r
+        return true;\r
+    },\r
+\r
+    manageNameAttribute :  function(){\r
+       if(this.items.getCount() === 0 && this.forceFormValue){\r
+          this.el.dom.setAttribute('name', this.hiddenName || this.name);\r
+       }else{\r
+               this.el.dom.removeAttribute('name');\r
+       }\r
+    },\r
+    setupFormInterception : function(){\r
+        var form;\r
+        this.findParentBy(function(p){ \r
+            if(p.getForm){\r
+                form = p.getForm();\r
+            }\r
+        });\r
+        if(form){\r
+               \r
+               var formGet = form.getValues;\r
+            form.getValues = function(asString){\r
+                this.el.dom.disabled = true;\r
+                var oldVal = this.el.dom.value;\r
+                this.setRawValue('');\r
+                var vals = formGet.call(form);\r
+                this.el.dom.disabled = false;\r
+                this.setRawValue(oldVal);\r
+                if(this.forceFormValue && this.items.getCount() === 0){\r
+                       vals[this.name] = '';\r
+                }\r
+                return asString ? Ext.urlEncode(vals) : vals ;\r
+            }.createDelegate(this);\r
+        }\r
+    },\r
+    onResize : function(w, h, rw, rh) {\r
+        var reduce = Ext.isIE6 ? 4 : Ext.isIE7 ? 1 : Ext.isIE8 ? 1 : 0;\r
+        if(this.wrapEl){\r
+            this._width = w;\r
+            this.outerWrapEl.setWidth(w - reduce);\r
+            if (this.renderFieldBtns) {\r
+                reduce += (this.buttonWrap.getWidth() + 20);\r
+                this.wrapEl.setWidth(w - reduce);\r
+        }\r
+        }\r
+        Ext.ux.form.SuperBoxSelect.superclass.onResize.call(this, w, h, rw, rh);\r
+        this.autoSize();\r
+    },\r
+    onEnable: function(){\r
+        Ext.ux.form.SuperBoxSelect.superclass.onEnable.call(this);\r
+        this.items.each(function(item){\r
+            item.enable();\r
+        });\r
+        if (this.renderFieldBtns) {\r
+            this.initButtonEvents();\r
+        }\r
+    },\r
+    onDisable: function(){\r
+        Ext.ux.form.SuperBoxSelect.superclass.onDisable.call(this);\r
+        this.items.each(function(item){\r
+            item.disable();\r
+        });\r
+        if(this.renderFieldBtns){\r
+            this.removeButtonEvents();\r
+        }\r
+    },\r
+    /**\r
+     * Clears all values from the component.\r
+     * @methodOf Ext.ux.form.SuperBoxSelect\r
+     * @name clearValue\r
+     * @param {Boolean} supressRemoveEvent [Optional] When true, the 'removeitem' event will not fire for each item that is removed.    \r
+     */\r
+    clearValue : function(supressRemoveEvent){\r
+        Ext.ux.form.SuperBoxSelect.superclass.clearValue.call(this);\r
+        this.preventMultipleRemoveEvents = supressRemoveEvent || this.supressClearValueRemoveEvents || false;\r
+       this.removeAllItems();\r
+       this.preventMultipleRemoveEvents = false;\r
+        this.fireEvent('clear',this);\r
+        return this;\r
+    },\r
+    onKeyUp : function(e) {\r
+        if (this.editable !== false && (!e.isSpecialKey() || e.getKey() === e.BACKSPACE) && e.getKey() !== this.itemDelimiterKey && (!e.hasModifier() || e.shiftKey)) {\r
+            this.lastKey = e.getKey();\r
+            this.dqTask.delay(this.queryDelay);\r
+        }        \r
+    },\r
+    onKeyDownHandler : function(e,t) {\r
+               \r
+        var toDestroy,nextFocus,idx;\r
+        if ((e.getKey() === e.DELETE || e.getKey() === e.SPACE) && this.currentFocus){\r
+            e.stopEvent();\r
+            toDestroy = this.currentFocus;\r
+            this.on('expand',function(){this.collapse();},this,{single: true});\r
+            idx = this.items.indexOfKey(this.currentFocus.key);\r
+            \r
+            this.clearCurrentFocus();\r
+            \r
+            if(idx < (this.items.getCount() -1)){\r
+                nextFocus = this.items.itemAt(idx+1);\r
+            }\r
+            \r
+            toDestroy.preDestroy(true);\r
+            if(nextFocus){\r
+                (function(){\r
+                    nextFocus.onLnkFocus();\r
+                    this.currentFocus = nextFocus;\r
+                }).defer(200,this);\r
+            }\r
+        \r
+            return true;\r
+        }\r
+        \r
+        var val = this.el.dom.value, it, ctrl = e.ctrlKey;\r
+        if(e.getKey() === this.itemDelimiterKey){\r
+            e.stopEvent();\r
+            if (val !== "") {\r
+                if (ctrl || !this.isExpanded())  {  //ctrl+enter for new items\r
+                       this.view.clearSelections();\r
+                    this.collapse();\r
+                    this.setRawValue('');\r
+                    this.fireEvent('newitem', this, val);\r
+                }\r
+                else {\r
+                       this.onViewClick();\r
+                    //removed from 3.0.1\r
+                    if(this.unsetDelayCheck){\r
+                        this.delayedCheck = true;\r
+                        this.unsetDelayCheck.defer(10, this);\r
+                    }\r
+                }\r
+            }else{\r
+                if(!this.isExpanded()){\r
+                    return;\r
+                }\r
+                this.onViewClick();\r
+                //removed from 3.0.1\r
+                if(this.unsetDelayCheck){\r
+                    this.delayedCheck = true;\r
+                    this.unsetDelayCheck.defer(10, this);\r
+                }\r
+            }\r
+            return true;\r
+        }\r
+        \r
+        if(val !== '') {\r
+            this.autoSize();\r
+            return;\r
+        }\r
+        \r
+        //select first item\r
+        if(e.getKey() === e.HOME){\r
+            e.stopEvent();\r
+            if(this.items.getCount() > 0){\r
+                this.collapse();\r
+                it = this.items.get(0);\r
+                it.el.focus();\r
+                \r
+            }\r
+            return true;\r
+        }\r
+        //backspace remove\r
+        if(e.getKey() === e.BACKSPACE){\r
+            e.stopEvent();\r
+            if(this.currentFocus) {\r
+                toDestroy = this.currentFocus;\r
+                this.on('expand',function(){\r
+                    this.collapse();\r
+                },this,{single: true});\r
+                \r
+                idx = this.items.indexOfKey(toDestroy.key);\r
+                \r
+                this.clearCurrentFocus();\r
+                if(idx < (this.items.getCount() -1)){\r
+                    nextFocus = this.items.itemAt(idx+1);\r
+                }\r
+                \r
+                toDestroy.preDestroy(true);\r
+                \r
+                if(nextFocus){\r
+                    (function(){\r
+                        nextFocus.onLnkFocus();\r
+                        this.currentFocus = nextFocus;\r
+                    }).defer(200,this);\r
+                }\r
+                \r
+                return;\r
+            }else{\r
+                it = this.items.get(this.items.getCount() -1);\r
+                if(it){\r
+                    if(this.backspaceDeletesLastItem){\r
+                        this.on('expand',function(){this.collapse();},this,{single: true});\r
+                        it.preDestroy(true);\r
+                    }else{\r
+                        if(this.navigateItemsWithTab){\r
+                            it.onElClick();\r
+                        }else{\r
+                            this.on('expand',function(){\r
+                                this.collapse();\r
+                                this.currentFocus = it;\r
+                                this.currentFocus.onLnkFocus.defer(20,this.currentFocus);\r
+                            },this,{single: true});\r
+                        }\r
+                    }\r
+                }\r
+                return true;\r
+            }\r
+        }\r
+        \r
+        if(!e.isNavKeyPress()){\r
+            this.multiSelectMode = false;\r
+            this.clearCurrentFocus();\r
+            return;\r
+        }\r
+        //arrow nav\r
+        if(e.getKey() === e.LEFT || (e.getKey() === e.UP && !this.isExpanded())){\r
+            e.stopEvent();\r
+            this.collapse();\r
+            //get last item\r
+            it = this.items.get(this.items.getCount()-1);\r
+            if(this.navigateItemsWithTab){ \r
+                //focus last el\r
+                if(it){\r
+                    it.focus(); \r
+                }\r
+            }else{\r
+                //focus prev item\r
+                if(this.currentFocus){\r
+                    idx = this.items.indexOfKey(this.currentFocus.key);\r
+                    this.clearCurrentFocus();\r
+                    \r
+                    if(idx !== 0){\r
+                        this.currentFocus = this.items.itemAt(idx-1);\r
+                        this.currentFocus.onLnkFocus();\r
+                    }\r
+                }else{\r
+                    this.currentFocus = it;\r
+                    if(it){\r
+                        it.onLnkFocus();\r
+                    }\r
+                }\r
+            }\r
+            return true;\r
+        }\r
+        if(e.getKey() === e.DOWN){\r
+            if(this.currentFocus){\r
+                this.collapse();\r
+                e.stopEvent();\r
+                idx = this.items.indexOfKey(this.currentFocus.key);\r
+                if(idx == (this.items.getCount() -1)){\r
+                    this.clearCurrentFocus.defer(10,this);\r
+                }else{\r
+                    this.clearCurrentFocus();\r
+                    this.currentFocus = this.items.itemAt(idx+1);\r
+                    if(this.currentFocus){\r
+                        this.currentFocus.onLnkFocus();\r
+                    }\r
+                }\r
+                return true;\r
+            }\r
+        }\r
+        if(e.getKey() === e.RIGHT){\r
+            this.collapse();\r
+            it = this.items.itemAt(0);\r
+            if(this.navigateItemsWithTab){ \r
+                //focus first el\r
+                if(it){\r
+                    it.focus(); \r
+                }\r
+            }else{\r
+                if(this.currentFocus){\r
+                    idx = this.items.indexOfKey(this.currentFocus.key);\r
+                    this.clearCurrentFocus();\r
+                    if(idx < (this.items.getCount() -1)){\r
+                        this.currentFocus = this.items.itemAt(idx+1);\r
+                        if(this.currentFocus){\r
+                            this.currentFocus.onLnkFocus();\r
+                        }\r
+                    }\r
+                }else{\r
+                    this.currentFocus = it;\r
+                    if(it){\r
+                        it.onLnkFocus();\r
+                    }\r
+                }\r
+            }\r
+        }\r
+    },\r
+    onKeyUpBuffered : function(e){\r
+        if(!e.isNavKeyPress()){\r
+            this.autoSize();\r
+        }\r
+    },\r
+    reset :  function(){\r
+       this.killItems();\r
+        Ext.ux.form.SuperBoxSelect.superclass.reset.call(this);\r
+        this.addedRecords = [];\r
+        this.autoSize().setRawValue('');\r
+    },\r
+    applyEmptyText : function(){\r
+               this.setRawValue('');\r
+        if(this.items.getCount() > 0){\r
+            this.el.removeClass(this.emptyClass);\r
+            this.setRawValue('');\r
+            return this;\r
+        }\r
+        if(this.rendered && this.emptyText && this.getRawValue().length < 1){\r
+            this.setRawValue(this.emptyText);\r
+            this.el.addClass(this.emptyClass);\r
+        }\r
+        return this;\r
+    },\r
+    /**\r
+     * @private\r
+     * \r
+     * Use clearValue instead\r
+     */\r
+    removeAllItems: function(){\r
+       this.items.each(function(item){\r
+            item.preDestroy(true);\r
+        },this);\r
+        this.manageClearBtn();\r
+        return this;\r
+    },\r
+    killItems : function(){\r
+       this.items.each(function(item){\r
+            item.kill();\r
+        },this);\r
+        this.resetStore();\r
+        this.items.clear();\r
+        this.manageClearBtn();\r
+        return this;\r
+    },\r
+    resetStore: function(){\r
+        this.store.clearFilter();\r
+        if(!this.removeValuesFromStore){\r
+            return this;\r
+        }\r
+        this.usedRecords.each(function(rec){\r
+            this.store.add(rec);\r
+        },this);\r
+        this.usedRecords.clear();\r
+        this.sortStore();\r
+        return this;\r
+    },\r
+    sortStore: function(){\r
+        var ss = this.store.getSortState();\r
+        if(ss && ss.field){\r
+            this.store.sort(ss.field, ss.direction);\r
+        }\r
+        return this;\r
+    },\r
+    getCaption: function(dataObject){\r
+        if(typeof this.displayFieldTpl === 'string') {\r
+            this.displayFieldTpl = new Ext.XTemplate(this.displayFieldTpl);\r
+        }\r
+        var caption, recordData = dataObject instanceof Ext.data.Record ? dataObject.data : dataObject;\r
+      \r
+        if(this.displayFieldTpl) {\r
+            caption = this.displayFieldTpl.apply(recordData);\r
+        } else if(this.displayField) {\r
+            caption = recordData[this.displayField];\r
+        }\r
+        \r
+        return caption;\r
+    },\r
+    addRecord : function(record) {\r
+        var display = record.data[this.displayField],\r
+            caption = this.getCaption(record),\r
+            val = record.data[this.valueField],\r
+            cls = this.classField ? record.data[this.classField] : '',\r
+            style = this.styleField ? record.data[this.styleField] : '';\r
+\r
+        if (this.removeValuesFromStore) {\r
+            this.usedRecords.add(val, record);\r
+            this.store.remove(record);\r
+        }\r
+        \r
+        this.addItemBox(val, display, caption, cls, style);\r
+        this.fireEvent('additem', this, val, record);\r
+    },\r
+    createRecord : function(recordData){\r
+        if(!this.recordConstructor){\r
+            var recordFields = [\r
+                {name: this.valueField},\r
+                {name: this.displayField}\r
+            ];\r
+            if(this.classField){\r
+                recordFields.push({name: this.classField});\r
+            }\r
+            if(this.styleField){\r
+                recordFields.push({name: this.styleField});\r
+            }\r
+            this.recordConstructor = Ext.data.Record.create(recordFields);\r
+        }\r
+        return new this.recordConstructor(recordData);\r
+    },\r
+    /**\r
+     * Adds an array of items to the SuperBoxSelect component if the {@link #Ext.ux.form.SuperBoxSelect-allowAddNewData} config is set to true.\r
+     * @methodOf Ext.ux.form.SuperBoxSelect\r
+     * @name addItem\r
+     * @param {Array} newItemObjects An Array of object literals containing the property names and values for an item. The property names must match those specified in {@link #Ext.ux.form.SuperBoxSelect-displayField}, {@link #Ext.ux.form.SuperBoxSelect-valueField} and {@link #Ext.ux.form.SuperBoxSelect-classField} \r
+     */\r
+    addItems : function(newItemObjects){\r
+       if (Ext.isArray(newItemObjects)) {\r
+                       Ext.each(newItemObjects, function(item) {\r
+                               this.addItem(item);\r
+                       }, this);\r
+               } else {\r
+                       this.addItem(newItemObjects);\r
+               }\r
+    },\r
+    /**\r
+     * Adds a new non-existing item to the SuperBoxSelect component if the {@link #Ext.ux.form.SuperBoxSelect-allowAddNewData} config is set to true.\r
+     * This method should be used in place of addItem from within the newitem event handler.\r
+     * @methodOf Ext.ux.form.SuperBoxSelect\r
+     * @name addNewItem\r
+     * @param {Object} newItemObject An object literal containing the property names and values for an item. The property names must match those specified in {@link #Ext.ux.form.SuperBoxSelect-displayField}, {@link #Ext.ux.form.SuperBoxSelect-valueField} and {@link #Ext.ux.form.SuperBoxSelect-classField} \r
+     */\r
+    addNewItem : function(newItemObject){\r
+       this.addItem(newItemObject,true);\r
+    },\r
+    /**\r
+     * Adds an item to the SuperBoxSelect component if the {@link #Ext.ux.form.SuperBoxSelect-allowAddNewData} config is set to true.\r
+     * @methodOf Ext.ux.form.SuperBoxSelect\r
+     * @name addItem\r
+     * @param {Object} newItemObject An object literal containing the property names and values for an item. The property names must match those specified in {@link #Ext.ux.form.SuperBoxSelect-displayField}, {@link #Ext.ux.form.SuperBoxSelect-valueField} and {@link #Ext.ux.form.SuperBoxSelect-classField} \r
+     */\r
+    addItem : function(newItemObject, /*hidden param*/ forcedAdd){\r
+        \r
+        var val = newItemObject[this.valueField];\r
+\r
+        if(this.disabled) {\r
+            return false;\r
+        }\r
+        if(this.preventDuplicates && this.hasValue(val)){\r
+            return;\r
+        }\r
+        \r
+        //use existing record if found\r
+        var record = this.findRecord(this.valueField, val);\r
+        if (record) {\r
+            this.addRecord(record);\r
+            return;\r
+        } else if (!this.allowAddNewData) { // else it's a new item\r
+            return;\r
+        }\r
+        \r
+        if(this.mode === 'remote'){\r
+               this.remoteLookup.push(newItemObject); \r
+               this.doQuery(val,false,false,forcedAdd);\r
+               return;\r
+        }\r
+        \r
+        var rec = this.createRecord(newItemObject);\r
+        this.store.add(rec);\r
+        this.addRecord(rec);\r
+        \r
+        return true;\r
+    },\r
+    addItemBox : function(itemVal,itemDisplay,itemCaption, itemClass, itemStyle) {\r
+        var hConfig, parseStyle = function(s){\r
+            var ret = '';\r
+            if(typeof s == 'function'){\r
+                ret = s.call();\r
+            }else if(typeof s == 'object'){\r
+                for(var p in s){\r
+                    ret+= p +':'+s[p]+';';\r
+                }\r
+            }else if(typeof s == 'string'){\r
+                ret = s + ';';\r
+            }\r
+            return ret;\r
+        }, itemKey = Ext.id(null,'sbx-item'), box = new Ext.ux.form.SuperBoxSelectItem({\r
+            owner: this,\r
+            disabled: this.disabled,\r
+            renderTo: this.wrapEl,\r
+            cls: this.extraItemCls + ' ' + itemClass,\r
+            style: parseStyle(this.extraItemStyle) + ' ' + itemStyle,\r
+            caption: itemCaption,\r
+            display: itemDisplay,\r
+            value:  itemVal,\r
+            key: itemKey,\r
+            listeners: {\r
+                'remove': function(item){\r
+                    if(this.fireEvent('beforeremoveitem',this,item.value) === false){\r
+                        return;\r
+                    }\r
+                    this.items.removeKey(item.key);\r
+                    if(this.removeValuesFromStore){\r
+                        if(this.usedRecords.containsKey(item.value)){\r
+                            this.store.add(this.usedRecords.get(item.value));\r
+                            this.usedRecords.removeKey(item.value);\r
+                            this.sortStore();\r
+                            if(this.view){\r
+                                this.view.render();\r
+                            }\r
+                        }\r
+                    }\r
+                    if(!this.preventMultipleRemoveEvents){\r
+                       this.fireEvent.defer(250,this,['removeitem',this,item.value, this.findInStore(item.value)]);\r
+                    }\r
+                },\r
+                destroy: function(){\r
+                    this.collapse();\r
+                    this.autoSize().manageClearBtn().validateValue();\r
+                },\r
+                scope: this\r
+            }\r
+        });\r
+        box.render();\r
+        \r
+        hConfig = {\r
+            tag :'input', \r
+            type :'hidden', \r
+            value : itemVal,\r
+            name : (this.hiddenName || this.name)\r
+        };\r
+        \r
+        if(this.disabled){\r
+               Ext.apply(hConfig,{\r
+                  disabled : 'disabled'\r
+               })\r
+        }\r
+        box.hidden = this.el.insertSibling(hConfig,'before');\r
+\r
+        this.items.add(itemKey,box);\r
+        this.applyEmptyText().autoSize().manageClearBtn().validateValue();\r
+    },\r
+    manageClearBtn : function() {\r
+        if (!this.renderFieldBtns || !this.rendered) {\r
+            return this;\r
+        }\r
+        var cls = 'x-superboxselect-btn-hide';\r
+        if (this.items.getCount() === 0) {\r
+            this.buttonClear.addClass(cls);\r
+        } else {\r
+            this.buttonClear.removeClass(cls);\r
+        }\r
+        return this;\r
+    },\r
+    findInStore : function(val){\r
+        var index = this.store.find(this.valueField, val);\r
+        if(index > -1){\r
+            return this.store.getAt(index);\r
+        }\r
+        return false;\r
+    },\r
+    /**\r
+     * Returns a String value containing a concatenated list of item values. The list is concatenated with the {@link #Ext.ux.form.SuperBoxSelect-valueDelimiter}.\r
+     * @methodOf Ext.ux.form.SuperBoxSelect\r
+     * @name getValue\r
+     * @return {String} a String value containing a concatenated list of item values. \r
+     */\r
+    getValue : function() {\r
+        var ret = [];\r
+        this.items.each(function(item){\r
+            ret.push(item.value);\r
+        });\r
+        return ret.join(this.valueDelimiter);\r
+    },\r
+    /**\r
+     * Returns an Array of item objects containing the {@link #Ext.ux.form.SuperBoxSelect-displayField}, {@link #Ext.ux.form.SuperBoxSelect-valueField}, {@link #Ext.ux.form.SuperBoxSelect-classField} and {@link #Ext.ux.form.SuperBoxSelect-styleField} properties.\r
+     * @methodOf Ext.ux.form.SuperBoxSelect\r
+     * @name getValueEx\r
+     * @return {Array} an array of item objects. \r
+     */\r
+    getValueEx : function() {\r
+        var ret = [];\r
+        this.items.each(function(item){\r
+            var newItem = {};\r
+            newItem[this.valueField] = item.value;\r
+            newItem[this.displayField] = item.display;\r
+            if(this.classField){\r
+                newItem[this.classField] = item.cls || '';\r
+            }\r
+            if(this.styleField){\r
+                newItem[this.styleField] = item.style || '';\r
+            }\r
+            ret.push(newItem);\r
+        },this);\r
+        return ret;\r
+    },\r
+    // private\r
+    initValue : function(){\r
\r
+        Ext.ux.form.SuperBoxSelect.superclass.initValue.call(this);\r
+        if(this.mode === 'remote') {\r
+               this.setOriginal = true;\r
+        }\r
+    },\r
+    /**\r
+     * Sets the value of the SuperBoxSelect component.\r
+     * @methodOf Ext.ux.form.SuperBoxSelect\r
+     * @name setValue\r
+     * @param {String|Array} value An array of item values, or a String value containing a delimited list of item values. (The list should be delimited with the {@link #Ext.ux.form.SuperBoxSelect-valueDelimiter) \r
+     */\r
+    setValue : function(value){\r
+        if(!this.rendered){\r
+            this.value = value;\r
+            return;\r
+        }\r
+            \r
+        this.removeAllItems().resetStore();\r
+        this.remoteLookup = [];\r
+        \r
+        if(Ext.isEmpty(value)){\r
+               return;\r
+        }\r
+        \r
+        var values = value;\r
+        if(!Ext.isArray(value)){\r
+            value = '' + value;\r
+            values = value.split(this.valueDelimiter); \r
+        }\r
+        \r
+        Ext.each(values,function(val){\r
+            var record = this.findRecord(this.valueField, val);\r
+            if(record){\r
+                this.addRecord(record);\r
+            }else if(this.mode === 'remote'){\r
+                               this.remoteLookup.push(val);                    \r
+            }\r
+        },this);\r
+        \r
+        if(this.mode === 'remote'){\r
+               var q = this.remoteLookup.join(this.queryValuesDelimiter); \r
+               this.doQuery(q,false, true); //3rd param to specify a values query\r
+        }\r
+        \r
+    },\r
+    /**\r
+     * Sets the value of the SuperBoxSelect component, adding new items that don't exist in the data store if the {@link #Ext.ux.form.SuperBoxSelect-allowAddNewData} config is set to true.\r
+     * @methodOf Ext.ux.form.SuperBoxSelect\r
+     * @name setValue\r
+     * @param {Array} data An Array of item objects containing the {@link #Ext.ux.form.SuperBoxSelect-displayField}, {@link #Ext.ux.form.SuperBoxSelect-valueField} and {@link #Ext.ux.form.SuperBoxSelect-classField} properties.  \r
+     */\r
+    setValueEx : function(data){\r
+        this.removeAllItems().resetStore();\r
+        \r
+        if(!Ext.isArray(data)){\r
+            data = [data];\r
+        }\r
+        this.remoteLookup = [];\r
+        \r
+        if(this.allowAddNewData && this.mode === 'remote'){ // no need to query\r
+            Ext.each(data, function(d){\r
+               var r = this.findRecord(this.valueField, d[this.valueField]) || this.createRecord(d);\r
+                this.addRecord(r);\r
+            },this);\r
+            return;\r
+        }\r
+        \r
+        Ext.each(data,function(item){\r
+            this.addItem(item);\r
+        },this);\r
+    },\r
+    /**\r
+     * Returns true if the SuperBoxSelect component has a selected item with a value matching the 'val' parameter.\r
+     * @methodOf Ext.ux.form.SuperBoxSelect\r
+     * @name hasValue\r
+     * @param {Mixed} val The value to test.\r
+     * @return {Boolean} true if the component has the selected value, false otherwise.\r
+     */\r
+    hasValue: function(val){\r
+        var has = false;\r
+        this.items.each(function(item){\r
+            if(item.value == val){\r
+                has = true;\r
+                return false;\r
+            }\r
+        },this);\r
+        return has;\r
+    },\r
+    onSelect : function(record, index) {\r
+       if (this.fireEvent('beforeselect', this, record, index) !== false){\r
+            var val = record.data[this.valueField];\r
+            \r
+            if(this.preventDuplicates && this.hasValue(val)){\r
+                return;\r
+            }\r
+            \r
+            this.setRawValue('');\r
+            this.lastSelectionText = '';\r
+            \r
+            if(this.fireEvent('beforeadditem',this,val) !== false){\r
+                this.addRecord(record);\r
+            }\r
+            if(this.store.getCount() === 0 || !this.multiSelectMode){\r
+                this.collapse();\r
+            }else{\r
+                this.restrictHeight();\r
+            }\r
+       }\r
+    },\r
+    onDestroy : function() {\r
+        this.items.purgeListeners();\r
+        this.killItems();\r
+        if (this.renderFieldBtns) {\r
+            Ext.destroy(\r
+                this.buttonClear,\r
+                this.buttonExpand,\r
+                this.buttonWrap\r
+            );\r
+        }\r
+\r
+        Ext.destroy(\r
+            this.inputEl,\r
+            this.wrapEl,\r
+            this.outerWrapEl\r
+        );\r
+\r
+        Ext.ux.form.SuperBoxSelect.superclass.onDestroy.call(this);\r
+    },\r
+    autoSize : function(){\r
+        if(!this.rendered){\r
+            return this;\r
+        }\r
+        if(!this.metrics){\r
+            this.metrics = Ext.util.TextMetrics.createInstance(this.el);\r
+        }\r
+        var el = this.el,\r
+            v = el.dom.value,\r
+            d = document.createElement('div');\r
+\r
+        if(v === "" && this.emptyText && this.items.getCount() < 1){\r
+            v = this.emptyText;\r
+        }\r
+        d.appendChild(document.createTextNode(v));\r
+        v = d.innerHTML;\r
+        d = null;\r
+        v += "&#160;";\r
+        var w = Math.max(this.metrics.getWidth(v) +  24, 24);\r
+        if(typeof this._width != 'undefined'){\r
+            w = Math.min(this._width, w);\r
+        }\r
+        this.el.setWidth(w);\r
+        \r
+        if(Ext.isIE){\r
+            this.el.dom.style.top='0';\r
+        }\r
+        return this;\r
+    },\r
+    doQuery : function(q, forceAll,valuesQuery, forcedAdd){\r
+        q = Ext.isEmpty(q) ? '' : q;\r
+        var qe = {\r
+            query: q,\r
+            forceAll: forceAll,\r
+            combo: this,\r
+            cancel:false\r
+        };\r
+        if(this.fireEvent('beforequery', qe)===false || qe.cancel){\r
+            return false;\r
+        }\r
+        q = qe.query;\r
+        forceAll = qe.forceAll;\r
+        if(forceAll === true || (q.length >= this.minChars) || valuesQuery && !Ext.isEmpty(q)){\r
+            if(this.lastQuery !== q || forcedAdd){\r
+               this.lastQuery = q;\r
+                if(this.mode == 'local'){\r
+                    this.selectedIndex = -1;\r
+                    if(forceAll){\r
+                        this.store.clearFilter();\r
+                    }else{\r
+                        this.store.filter(this.displayField, q);\r
+                    }\r
+                    this.onLoad();\r
+                }else{\r
+                       \r
+                    this.store.baseParams[this.queryParam] = q;\r
+                    this.store.baseParams[this.queryValuesIndicator] = valuesQuery;\r
+                    this.store.load({\r
+                        params: this.getParams(q)\r
+                    });\r
+                    if(!forcedAdd){\r
+                        this.expand();\r
+                    }\r
+                }\r
+            }else{\r
+                this.selectedIndex = -1;\r
+                this.onLoad();\r
+            }\r
+        }\r
+    }\r
+});\r
+Ext.reg('superboxselect', Ext.ux.form.SuperBoxSelect);\r
+/*\r
+ * @private\r
+ */\r
+Ext.ux.form.SuperBoxSelectItem = function(config){\r
+    Ext.apply(this,config);\r
+    Ext.ux.form.SuperBoxSelectItem.superclass.constructor.call(this); \r
+};\r
+/*\r
+ * @private\r
+ */\r
+Ext.ux.form.SuperBoxSelectItem = Ext.extend(Ext.ux.form.SuperBoxSelectItem,Ext.Component, {\r
+    initComponent : function(){\r
+        Ext.ux.form.SuperBoxSelectItem.superclass.initComponent.call(this); \r
+    },\r
+    onElClick : function(e){\r
+        var o = this.owner;\r
+        o.clearCurrentFocus().collapse();\r
+        if(o.navigateItemsWithTab){\r
+            this.focus();\r
+        }else{\r
+            o.el.dom.focus();\r
+            var that = this;\r
+            (function(){\r
+                this.onLnkFocus();\r
+                o.currentFocus = this;\r
+            }).defer(10,this);\r
+        }\r
+    },\r
+    \r
+    onLnkClick : function(e){\r
+        if(e) {\r
+            e.stopEvent();\r
+        }\r
+        this.preDestroy();\r
+        if(!this.owner.navigateItemsWithTab){\r
+            this.owner.el.focus();\r
+        }\r
+    },\r
+    onLnkFocus : function(){\r
+        this.el.addClass("x-superboxselect-item-focus");\r
+        this.owner.outerWrapEl.addClass("x-form-focus");\r
+    },\r
+    \r
+    onLnkBlur : function(){\r
+        this.el.removeClass("x-superboxselect-item-focus");\r
+        this.owner.outerWrapEl.removeClass("x-form-focus");\r
+    },\r
+    \r
+    enableElListeners : function() {\r
+        this.el.on('click', this.onElClick, this, {stopEvent:true});\r
+       \r
+        this.el.addClassOnOver('x-superboxselect-item x-superboxselect-item-hover');\r
+    },\r
+\r
+    enableLnkListeners : function() {\r
+        this.lnk.on({\r
+            click: this.onLnkClick,\r
+            focus: this.onLnkFocus,\r
+            blur:  this.onLnkBlur,\r
+            scope: this\r
+        });\r
+    },\r
+    \r
+    enableAllListeners : function() {\r
+        this.enableElListeners();\r
+        this.enableLnkListeners();\r
+    },\r
+    disableAllListeners : function() {\r
+        this.el.removeAllListeners();\r
+        this.lnk.un('click', this.onLnkClick, this);\r
+        this.lnk.un('focus', this.onLnkFocus, this);\r
+        this.lnk.un('blur', this.onLnkBlur, this);\r
+    },\r
+    onRender : function(ct, position){\r
+        \r
+        Ext.ux.form.SuperBoxSelectItem.superclass.onRender.call(this, ct, position);\r
+        \r
+        var el = this.el;\r
+        if(el){\r
+            el.remove();\r
+        }\r
+        \r
+        this.el = el = ct.createChild({ tag: 'li' }, ct.last());\r
+        el.addClass('x-superboxselect-item');\r
+        \r
+        var btnEl = this.owner.navigateItemsWithTab ? ( Ext.isSafari ? 'button' : 'a') : 'span';\r
+        var itemKey = this.key;\r
+        \r
+        Ext.apply(el, {\r
+            focus: function(){\r
+                var c = this.down(btnEl +'.x-superboxselect-item-close');\r
+                if(c){\r
+                       c.focus();\r
+                }\r
+            },\r
+            preDestroy: function(){\r
+                this.preDestroy();\r
+            }.createDelegate(this)\r
+        });\r
+        \r
+        this.enableElListeners();\r
+\r
+        el.update(this.caption);\r
+\r
+        var cfg = {\r
+            tag: btnEl,\r
+            'class': 'x-superboxselect-item-close',\r
+            tabIndex : this.owner.navigateItemsWithTab ? '0' : '-1'\r
+        };\r
+        if(btnEl === 'a'){\r
+            cfg.href = '#';\r
+        }\r
+        this.lnk = el.createChild(cfg);\r
+        \r
+        \r
+        if(!this.disabled) {\r
+            this.enableLnkListeners();\r
+        }else {\r
+            this.disableAllListeners();\r
+        }\r
+        \r
+        this.on({\r
+            disable: this.disableAllListeners,\r
+            enable: this.enableAllListeners,\r
+            scope: this\r
+        });\r
+\r
+        this.setupKeyMap();\r
+    },\r
+    setupKeyMap : function(){\r
+        this.keyMap = new Ext.KeyMap(this.lnk, [\r
+            {\r
+                key: [\r
+                    Ext.EventObject.BACKSPACE, \r
+                    Ext.EventObject.DELETE, \r
+                    Ext.EventObject.SPACE\r
+                ],\r
+                fn: this.preDestroy,\r
+                scope: this\r
+            }, {\r
+                key: [\r
+                    Ext.EventObject.RIGHT,\r
+                    Ext.EventObject.DOWN\r
+                ],\r
+                fn: function(){\r
+                    this.moveFocus('right');\r
+                },\r
+                scope: this\r
+            },\r
+            {\r
+                key: [Ext.EventObject.LEFT,Ext.EventObject.UP],\r
+                fn: function(){\r
+                    this.moveFocus('left');\r
+                },\r
+                scope: this\r
+            },\r
+            {\r
+                key: [Ext.EventObject.HOME],\r
+                fn: function(){\r
+                    var l = this.owner.items.get(0).el.focus();\r
+                    if(l){\r
+                        l.el.focus();\r
+                    }\r
+                },\r
+                scope: this\r
+            },\r
+            {\r
+                key: [Ext.EventObject.END],\r
+                fn: function(){\r
+                    this.owner.el.focus();\r
+                },\r
+                scope: this\r
+            },\r
+            {\r
+                key: Ext.EventObject.ENTER,\r
+                fn: function(){\r
+                }\r
+            }\r
+        ]);\r
+        this.keyMap.stopEvent = true;\r
+    },\r
+    moveFocus : function(dir) {\r
+        var el = this.el[dir == 'left' ? 'prev' : 'next']() || this.owner.el;\r
+       \r
+        el.focus.defer(100,el);\r
+    },\r
+\r
+    preDestroy : function(supressEffect) {\r
+       if(this.fireEvent('remove', this) === false){\r
+               return;\r
+           }   \r
+       var actionDestroy = function(){\r
+            if(this.owner.navigateItemsWithTab){\r
+                this.moveFocus('right');\r
+            }\r
+            this.hidden.remove();\r
+            this.hidden = null;\r
+            this.destroy();\r
+        };\r
+        \r
+        if(supressEffect){\r
+            actionDestroy.call(this);\r
+        } else {\r
+            this.el.hide({\r
+                duration: 0.2,\r
+                callback: actionDestroy,\r
+                scope: this\r
+            });\r
+        }\r
+        return this;\r
+    },\r
+    kill : function(){\r
+       this.hidden.remove();\r
+        this.hidden = null;\r
+        this.purgeListeners();\r
+        this.destroy();\r
+    },\r
+    onDisable : function() {\r
+       if(this.hidden){\r
+           this.hidden.dom.setAttribute('disabled', 'disabled');\r
+       }\r
+       this.keyMap.disable();\r
+       Ext.ux.form.SuperBoxSelectItem.superclass.onDisable.call(this);\r
+    },\r
+    onEnable : function() {\r
+       if(this.hidden){\r
+           this.hidden.dom.removeAttribute('disabled');\r
+       }\r
+       this.keyMap.enable();\r
+       Ext.ux.form.SuperBoxSelectItem.superclass.onEnable.call(this);\r
+    },\r
+    onDestroy : function() {\r
+        Ext.destroy(\r
+            this.lnk,\r
+            this.el\r
+        );\r
+        \r
+        Ext.ux.form.SuperBoxSelectItem.superclass.onDestroy.call(this);\r
+    }\r
+});
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/superboxselect/clear.png b/philo/contrib/gilbert/static/gilbert/superboxselect/clear.png
new file mode 100755 (executable)
index 0000000..0052e5f
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/superboxselect/clear.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/superboxselect/close.png b/philo/contrib/gilbert/static/gilbert/superboxselect/close.png
new file mode 100755 (executable)
index 0000000..0245558
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/superboxselect/close.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/superboxselect/expand.png b/philo/contrib/gilbert/static/gilbert/superboxselect/expand.png
new file mode 100755 (executable)
index 0000000..52d7fe6
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/superboxselect/expand.png differ
diff --git a/philo/contrib/gilbert/static/gilbert/superboxselect/superboxselect-gray-extend.css b/philo/contrib/gilbert/static/gilbert/superboxselect/superboxselect-gray-extend.css
new file mode 100755 (executable)
index 0000000..c376da6
--- /dev/null
@@ -0,0 +1,24 @@
+@charset "utf-8";\r
+.x-superboxselect {position:relative; height: auto !important; margin: 0px; overflow: hidden; padding:2px; display:block; outline: none !important;}\r
+.x-superboxselect ul {overflow: hidden; cursor: text;}\r
+.x-superboxselect-display-btns {padding-right: 33px !important;}\r
+.x-superboxselect-btns {position: absolute; right: 1px; top: 0; overflow:hidden; padding:2px;}\r
+.x-superboxselect-btns div {float: left; width: 16px; height: 16px; margin-top: 4px;}\r
+.x-superboxselect-btn-clear {background: url(clear.png) no-repeat scroll left 0px;}\r
+.x-superboxselect-btn-expand {background: url(expand.png) no-repeat scroll left 0px;}\r
+.x-superboxselect-btn-over {background-position: left -16px}\r
+.x-superboxselect-btn-hide {display:none;}\r
+.x-superboxselect li {float: left; margin: 1px 1px 2px 1px; padding: 0;line-height: 18px;}\r
+.x-superboxselect-stacked li {float: none !important;}\r
+.x-superboxselect-input input { border: none; outline: none; margin-top: 4px; margin-bottom: 4px;}\r
+body.ext-ie .x-superboxselect-input input {background: none; border: none; margin-top: 3px;}\r
+.x-superboxselect-item {position: relative; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px; o-border-radius: 6px; khtml-border-radius: 6px; border: 1px solid #d7d7d7; background-color: #e7e7e7; padding: 1px 15px 1px 5px !important; }\r
+body.ext-ie7 .x-superboxselect-item {margin: 2px 1px 2px 1px; line-height: 1.2em; padding: 2px 17px 4px 5px !important;}\r
+body.ext-ie6 .x-superboxselect-item {margin: 2px 1px 2px 1px; line-height: 1.2em; padding: 2px 19px 4px 5px !important;}\r
+.x-superboxselect-item-hover {background: #cdcdcd; border: 1px solid #949494;}\r
+.x-superboxselect-item-focus {border-color: #8b8b8b; background: #8b8b8b; color: #fff;}\r
+.x-superboxselect-item-close {background: url(close.png) no-repeat scroll left 0px; border: none; cursor: default; font-size: 1px; height: 16px;padding:0; position: absolute; right: 0px; top: 2px; width: 13px;display:block;cursor:pointer;}\r
+\r
+.x-superboxselect-item-close:hover, .x-superboxselect-item-close:active  { background-position: left -12px;}\r
+.x-superboxselect-item-focus .x-superboxselect-item-close{ background-position: left -24px}\r
+.x-item-disabled .x-superboxselect-item-close{ background-position: left -36px}
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/superboxselect/superboxselect.css b/philo/contrib/gilbert/static/gilbert/superboxselect/superboxselect.css
new file mode 100755 (executable)
index 0000000..d1cb001
--- /dev/null
@@ -0,0 +1,25 @@
+@charset "utf-8";\r
+.x-superboxselect {position:relative; height: auto !important; margin: 0px; overflow: hidden; padding:2px; display:block; outline: none !important;}\r
+.x-superboxselect input[disabled] {background-color: transparent;};\r
+.x-superboxselect ul {overflow: hidden; cursor: text;}\r
+.x-superboxselect-display-btns {padding-right: 33px !important;}\r
+.x-superboxselect-btns {position: absolute; right: 1px; top: 0; overflow:hidden; padding:2px;}\r
+.x-superboxselect-btns div {float: left; width: 16px; height: 16px; margin-top: 4px;}\r
+.x-superboxselect-btn-clear {background: url(clear.png) no-repeat scroll left 0px;}\r
+.x-superboxselect-btn-expand {background: url(expand.png) no-repeat scroll left 0px;}\r
+.x-superboxselect-btn-over {background-position: left -16px}\r
+.x-superboxselect-btn-hide {display:none;}\r
+.x-superboxselect li {float: left; margin: 1px 1px 2px 1px; padding: 0;line-height: 18px;}\r
+.x-superboxselect-stacked li {float: none !important;}\r
+.x-superboxselect-input input { border: none; outline: none; margin-top: 4px; margin-bottom: 4px;}\r
+body.ext-ie .x-superboxselect-input input {background: none; border: none; margin-top: 3px;}\r
+.x-superboxselect-item {position: relative; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px; o-border-radius: 6px; khtml-border-radius: 6px; border: 1px solid #CAD8F3; background-color: #DEE7F8; padding: 1px 15px 1px 5px !important; }\r
+body.ext-ie7 .x-superboxselect-item {margin: 2px 1px 2px 1px; line-height: 1.2em; padding: 2px 17px 4px 5px !important;}\r
+body.ext-ie6 .x-superboxselect-item {margin: 2px 1px 2px 1px; line-height: 1.2em; padding: 2px 19px 4px 5px !important;}\r
+.x-superboxselect-item-hover {background: #BBCEF1; border: 1px solid #6D95E0;}\r
+.x-superboxselect-item-focus {border-color: #598BEC; background: #598BEC; color: #fff;}\r
+.x-superboxselect-item-close {background: url(close.png) no-repeat scroll left 0px; border: none; cursor: default; font-size: 1px; height: 16px;padding:0; position: absolute; right: 0px; top: 2px; width: 13px;display:block;cursor:pointer;}\r
+\r
+.x-superboxselect-item-close:hover, .x-superboxselect-item-close:active  { background-position: left -12px;}\r
+.x-superboxselect-item-focus .x-superboxselect-item-close{ background-position: left -24px}\r
+.x-item-disabled .x-superboxselect-item-close{ background-position: left -36px}
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/wallpaper.README b/philo/contrib/gilbert/static/gilbert/wallpaper.README
new file mode 100644 (file)
index 0000000..a14fe2e
--- /dev/null
@@ -0,0 +1 @@
+The source of the default wallpaper.jpg is http://webtreats.mysitemyway.com/tileable-classic-nebula-space-patterns/
\ No newline at end of file
diff --git a/philo/contrib/gilbert/static/gilbert/wallpaper.jpg b/philo/contrib/gilbert/static/gilbert/wallpaper.jpg
new file mode 100644 (file)
index 0000000..6188914
Binary files /dev/null and b/philo/contrib/gilbert/static/gilbert/wallpaper.jpg differ
diff --git a/philo/contrib/gilbert/templates/gilbert/api.js b/philo/contrib/gilbert/templates/gilbert/api.js
new file mode 100644 (file)
index 0000000..4281d66
--- /dev/null
@@ -0,0 +1,74 @@
+Ext.Ajax.on('beforerequest', function (connection, options) {
+       if (!(/^http:.*/.test(options.url) || /^https:.*/.test(options.url))) {
+               options.headers = Ext.apply(options.headers||{}, {
+                       'X-CSRFToken': '{{ csrf_token }}',
+               });
+       }
+});
+
+
+Ext.ns('Gilbert.api');
+{% for provider in providers %}Ext.Direct.addProvider({{ provider|safe }});{% endfor %}
+
+
+Gilbert.on('ready', function (application) {{% for app_label, models in model_registry.items %}{% for name, admin in models.items %}
+       application.register_model('{{ app_label }}', '{{ name }}', new Gilbert.lib.models.Model({
+               app_label: '{{ app_label }}',
+               name: '{{ name }}',
+               verbose_name: '{{ admin.model_meta.verbose_name }}',
+               verbose_name_plural: '{{ admin.model_meta.verbose_name_plural }}',
+               searchable: {% if admin.search_fields %}true{% else %}false{% endif %},
+               columns: {{ admin.data_columns_spec_json|safe }},
+               iconCls: 'icon-{{ admin.icon_name }}',
+               api: Gilbert.api.models.{{ app_label }}.{{ name }},
+       }));
+{% endfor %}{% endfor %}});
+
+
+Gilbert.on('ready', function (application) {
+       application.register_plugin('_about_window', {
+               init: function(application) {
+                       var application = this.application = application;
+                       
+                       var plugin = this;
+                       
+                       application.mainmenu.remove(application.mainmenu.items.items[0]);
+                       
+                       application.mainmenu.insert(0, {
+                               xtype: 'button',
+                               text: '<span style="font-weight: bolder; text-transform: uppercase;">{{ gilbert.title|safe }}</span>',
+                               handler: function(button, event) {
+                                       plugin.showAbout(button);
+                               },
+                       });
+               },
+               showAbout: function(sender) {
+                       var application = this.application;
+                       
+                       if (!this.about_window) {
+                               var about_window = this.about_window = application.create_window({
+                                       height: 176,
+                                       width: 284,
+                                       header: false,
+                                       html: '<h1>{{ gilbert.title|safe }}</h1><h2>Version {{ gilbert.version|safe }}</h2><div id="credits">{{ gilbert.credits|safe }}</div>',
+                                       bodyStyle: 'background: none; font-size: larger; line-height: 1.4em; text-align: center;',
+                                       modal: true,
+                                       closeAction: 'hide',
+                                       closable: false,
+                                       resizable: false,
+                                       draggable: false,
+                                       minimizable: false,
+                                       fbar: [{
+                                               text: 'OK',
+                                               handler: function(button, event) {
+                                                       about_window.hide();
+                                               }
+                                       }],
+                                       defaultButton: 0,
+                               });
+                       }
+                       this.about_window.show();
+                       this.about_window.focus();
+               },
+       });
+});
\ No newline at end of file
diff --git a/philo/contrib/gilbert/templates/gilbert/base.html b/philo/contrib/gilbert/templates/gilbert/base.html
new file mode 100644 (file)
index 0000000..fb9ba44
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>{% block head %}
+       <title>{% block title %}{{ gilbert.title }}{% endblock %}</title>
+       
+       {% block css %}
+       <link rel="stylesheet" type="text/css" class="gilbert.theme" id="gilbert.theme.murano" title="murano" href="{{ STATIC_URL }}gilbert/murano/css/murano.css"{% if request.GET.theme and request.GET.theme != 'murano' %} disabled="disabled"{% endif %} />
+       <link rel="stylesheet" type="text/css" class="gilbert.theme" id="gilbert.theme.access" title="access" href="{{ STATIC_URL }}gilbert/extjs/resources/css/ext-all-access.css"{% if request.GET.theme != 'access' %} disabled="disabled"{% endif %} />
+       <link rel="stylesheet" type="text/css" class="gilbert.theme" id="gilbert.theme.blue" title="blue" href="{{ STATIC_URL }}gilbert/extjs/resources/css/ext-all.css"{% if request.GET.theme != 'blue' %} disabled="disabled"{% endif %} />
+       {% endblock %}
+       
+       {% block js %}
+       <script type="text/javascript" src="{{ STATIC_URL }}gilbert/extjs/adapter/ext/ext-base.js"></script>
+       {% if request.GET.debug %}
+       <script type="text/javascript" src="{{ STATIC_URL }}gilbert/extjs/ext-all-debug.js"></script>
+       {% else %}
+       <script type="text/javascript" src="{{ STATIC_URL }}gilbert/extjs/ext-all.js"></script>
+       {% endif %}
+       <script type="text/javascript">
+               Ext.BLANK_IMAGE_URL = '{{ STATIC_URL }}gilbert/extjs/resources/images/default/s.gif';
+       </script>
+       {% endblock %}
+       
+       {% block extrahead %}
+       {% endblock %}
+       
+{% endblock %}</head>
+<body style="background-image: url({{ STATIC_URL }}gilbert/wallpaper.jpg);">{% block body %}{% endblock %}</body>
+</html>
diff --git a/philo/contrib/gilbert/templates/gilbert/icons.css b/philo/contrib/gilbert/templates/gilbert/icons.css
new file mode 100644 (file)
index 0000000..677d7eb
--- /dev/null
@@ -0,0 +1,5 @@
+{% for icon_name in icon_names %}
+.icon-{{ icon_name }} {
+       background: url({{ STATIC_URL }}gilbert/fugue-icons/icons-shadowless/{{ icon_name }}.png) 0 no-repeat !important;
+}
+{% endfor %}
\ No newline at end of file
diff --git a/philo/contrib/gilbert/templates/gilbert/index.html b/philo/contrib/gilbert/templates/gilbert/index.html
new file mode 100644 (file)
index 0000000..b45a2b8
--- /dev/null
@@ -0,0 +1,45 @@
+{% extends 'gilbert/base.html' %}
+
+{% block css %}{{ block.super }}
+       <link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}gilbert/extjs/examples/ux/fileuploadfield/css/fileuploadfield.css" />
+       <link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}gilbert/superboxselect/superboxselect.css" />
+       <link rel="stylesheet" type="text/css" href="{% url gilbert:icons %}" />
+       
+       {% for router in gilbert.model_routers.values %}{% for admin in router.models.values %}{% for css_url in admin.index_css_urls %}
+       <link rel="stylesheet" type="text/css" href="{{ css_url }}" />
+       {% endfor %}{% endfor %}{% endfor %}
+       
+       {% for plugin in plugins %}{% for css_url in plugin.index_css_urls %}
+       <link rel="stylesheet" type="text/css" href="{{ css_url }}" />
+       {% endfor %}{% endfor %}
+{% endblock %}
+       
+{% block js %}{{ block.super }}
+       <script type="text/javascript" src="{{ STATIC_URL }}gilbert/extjs/examples/ux/FieldLabeler.js"></script>
+       <script type="text/javascript" src="{{ STATIC_URL }}gilbert/extjs/examples/ux/fileuploadfield/FileUploadField.js"></script>
+       <script type="text/javascript" src="{{ STATIC_URL }}gilbert/superboxselect/SuperBoxSelect.js"></script>
+       <script type="text/javascript" src="{{ STATIC_URL }}gilbert/extjs/examples/ux/Reorderer.js"></script>
+       <script type="text/javascript" src="{{ STATIC_URL }}gilbert/extjs/examples/ux/ToolbarReorderer.js"></script>
+       
+       <script type="text/javascript" src="{{ STATIC_URL }}gilbert/lib/app.js"></script>
+       <script type="text/javascript" src="{{ STATIC_URL }}gilbert/lib/models.js"></script>
+       <script type="text/javascript" src="{{ STATIC_URL }}gilbert/lib/plugins.js"></script>
+       <script type="text/javascript" src="{{ STATIC_URL }}gilbert/lib/ui/forms.js"></script>
+       <script type="text/javascript" src="{{ STATIC_URL }}gilbert/lib/ui/windows.js"></script>
+       <script type="text/javascript" src="{{ STATIC_URL }}gilbert/gilbert.js"></script>
+       
+       <script type="text/javascript" src="{% url gilbert:api %}"></script>
+       
+       {% for router in gilbert.model_routers.values %}{% for admin in router.models.values %}{% for js_url in admin.index_js_urls %}
+       <script type="text/javascript" src="{{ js_url }}"></script>
+       {% endfor %}{% endfor %}{% endfor %}
+       
+       {% for plugin in plugins %}{% for js_url in plugin.index_js_urls %}
+       <script type="text/javascript" src="{{ js_url }}"></script>
+       {% endfor %}{% endfor %}
+{% endblock %}
+       
+{% block extrahead %}
+       {% for router in gilbert.model_routers.values %}{% for admin in router.models.values %}{{ admin.index_extrahead }}{% endfor %}{% endfor %}
+       {% for plugin in plugins %}{{ plugin.index_extrahead }}{% endfor %}
+{% endblock %}
\ No newline at end of file
diff --git a/philo/contrib/gilbert/templates/gilbert/login.html b/philo/contrib/gilbert/templates/gilbert/login.html
new file mode 100644 (file)
index 0000000..0041ff7
--- /dev/null
@@ -0,0 +1,101 @@
+{% extends 'gilbert/base.html' %}
+
+{% block css %}{{ block.super }}
+       <link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}gilbert/extjs/examples/ux/statusbar/css/statusbar.css" />
+       <style type="text/css">
+               .icon-door-open-in {
+                       background: url({{ STATIC_URL }}gilbert/fugue-icons/icons-shadowless/door-open-in.png) no-repeat !important;
+               }
+               .x-statusbar .x-status-error {
+                       cursor: help;
+                       background-image: url({{ STATIC_URL }}gilbert/fugue-icons/icons-shadowless/exclamation-red.png) !important;
+               }
+       </style>
+{% endblock %}
+
+{% block js %}{{ block.super }}
+       <script type="text/javascript" src="{{ STATIC_URL }}gilbert/extjs/examples/ux/statusbar/StatusBar.js"></script>
+       <script type="text/javascript" charset="utf-8">
+               Ext.onReady(function () {
+                       
+                       var login_form = new Ext.FormPanel({
+                               border: false,{% if request.GET.theme %}
+                               bodyStyle: 'padding: 10px',{% else %}
+                               bodyStyle: 'padding: 0px 10px 0px;',{% endif %}
+                               items: [
+                                       {
+                                               xtype: 'hidden',
+                                               name: 'csrfmiddlewaretoken',
+                                               value: '{{ csrf_token }}',
+                                       },
+                                       {
+                                               xtype: 'textfield',
+                                               anchor: '100%',
+                                               fieldLabel: 'Username',
+                                               name: 'username',
+                                       },
+                                       {
+                                               xtype: 'textfield',
+                                               inputType: 'password',
+                                               anchor: '100%',
+                                               fieldLabel: 'Password',
+                                               name: 'password',
+                                       }
+                               ],
+                               url: '{{ form_url }}',
+                               standardSubmit: true,
+                               keys: [
+                                       {
+                                               key: [Ext.EventObject.ENTER],
+                                               handler: function () {
+                                                       var form = login_form.getForm();
+                                                       form.submit();
+                                               },
+                                       },
+                               ],
+                       });
+                       
+                       var login_status_bar = window.status_bar = new Ext.ux.StatusBar({
+                               items: [
+                                       {
+                                               xtype: 'button',
+                                               text: 'Log in',
+                                               iconCls: 'icon-door-open-in',
+                                               handler: function () {
+                                                       var form = login_form.getForm();
+                                                       form.submit();
+                                               },
+                                       },
+                               ],
+                       });
+                       var login_window = new Ext.Window({
+                               header: false,
+                               closable: false,
+                               resizable: false,
+                               draggable: false,
+                               frame: true,
+                               autoHeight: true,
+                               width: 320,
+                               items: login_form,
+                               bbar: login_status_bar,
+                       });
+                       
+                       login_window.show();
+                       {% if error_message %}
+                       login_status_bar.setStatus({
+                               iconCls: 'x-status-error',
+                               text: '{{ error_message_short }}',
+                       });
+                       
+                       new Ext.ToolTip({
+                               target: login_status_bar.statusEl.el,
+                               anchor: 'top',
+                               title: '{{ error_message_short }}',
+                               html: '{{ error_message }}',
+                       });
+                       
+                       Ext.QuickTips.init();
+                       {% endif %}
+               });
+       </script>
+{% endblock %}
\ No newline at end of file
diff --git a/philo/contrib/penfield/gilbert.py b/philo/contrib/penfield/gilbert.py
new file mode 100644 (file)
index 0000000..e6e8251
--- /dev/null
@@ -0,0 +1,21 @@
+from .models import Blog, BlogEntry, BlogView, NewsletterArticle, NewsletterIssue, Newsletter, NewsletterView
+from philo.contrib.gilbert import site
+from philo.contrib.gilbert.plugins.models import ModelAdmin
+
+
+class BlogAdmin(ModelAdmin):
+       search_fields = ('title',)
+
+
+class BlogEntryAdmin(ModelAdmin):
+       search_fields = ('title', 'content',)
+       data_columns = ('title', 'author', 'blog', 'date',)
+
+
+site.register_model(Blog, BlogAdmin, icon_name='blog')
+site.register_model(BlogEntry, BlogEntryAdmin, icon_name='document-snippet')
+site.register_model(BlogView, icon_name='application-blog')
+site.register_model(NewsletterArticle, icon_name='document-snippet')
+site.register_model(NewsletterIssue, icon_name='newspaper')
+site.register_model(Newsletter, icon_name='newspapers')
+site.register_model(NewsletterView, icon_name='application')
\ No newline at end of file
diff --git a/philo/gilbert.py b/philo/gilbert.py
new file mode 100644 (file)
index 0000000..f59a0a2
--- /dev/null
@@ -0,0 +1,11 @@
+from philo.models import Tag, Collection, Node, Redirect, File, Template, Page
+from philo.contrib.gilbert import site
+
+
+site.register_model(Tag, icon_name='tag-label', data_columns=('name', 'slug'), data_editable_columns=('name', 'slug'))
+site.register_model(Collection, icon_name='box')
+site.register_model(Node, icon_name='node')
+site.register_model(Redirect, icon_name='arrow-switch')
+site.register_model(File, icon_name='document-binary')
+site.register_model(Page, icon_name='document-globe')
+site.register_model(Template, icon_name='document-template')
\ No newline at end of file
diff --git a/philo/hacks.py b/philo/hacks.py
new file mode 100644 (file)
index 0000000..038f6f5
--- /dev/null
@@ -0,0 +1,69 @@
+class Category(type):
+       """
+       Adds attributes to an existing class.
+       
+       """
+       
+       replace_attrs = False
+       dunder_attrs = False
+       never_attrs = ('__module__', '__metaclass__')
+       
+       def __new__(cls, name, bases, attrs):
+               if len(bases) != 1:
+                       raise AttributeError('%s: "%s" cannot add methods to more than one class.' % (cls.__name__, name))
+               
+               base = bases[0]
+               
+               for attr, value in attrs.iteritems():
+                       if attr in cls.never_attrs:
+                               continue
+                       if not cls.dunder_attrs and attr.startswith('__'):
+                               continue
+                       if not cls.replace_attrs and hasattr(base, attr):
+                               continue
+                       setattr(base, attr, value)
+               
+               return base
+
+
+class MonkeyPatch(type):
+       """
+       Similar to Category, except it will replace attributes.
+       
+       """
+       
+       replace_attrs = True
+       dunder_attrs = Category.dunder_attrs
+       never_attrs = Category.never_attrs
+       
+       unpatches = {}
+       
+       @classmethod
+       def unpatched(cls, klass, name):
+               try:
+                       return cls.unpatches[klass][name]
+               except:
+                       return getattr(klass, name)
+       
+       def __new__(cls, name, bases, attrs):
+               if len(bases) != 1:
+                       raise AttributeError('%s: "%s" cannot patch more than one class.' % (cls.__name__, name))
+               
+               base = bases[0]
+               
+               for attr, value in attrs.iteritems():
+                       if attr in cls.never_attrs:
+                               continue
+                       if not cls.dunder_attrs and attr.startswith('__'):
+                               continue
+                       if hasattr(base, attr):
+                               if not cls.replace_attrs:
+                                       continue
+                               else:
+                                       if base not in cls.unpatches:
+                                               cls.unpatches[base] = {}
+                                       cls.unpatches[base][attr] = getattr(base, attr)
+                       
+                       setattr(base, attr, value)
+               
+               return base
\ No newline at end of file