From e44a7e37b6c7b5961adaffc62b9042b8d442938e Mon Sep 17 00:00:00 2001
From: mensonge
Date: Thu, 13 Nov 2008 09:49:11 +0000
Subject: New feature: basic Ajax suggestion for tags and implementation of
Dojo toolkit
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@151 b3834d28-1941-0410-a4f8-b48e95affb8f
---
includes/js/dojox/presentation/README | 72 +++
includes/js/dojox/presentation/_base.js | 557 +++++++++++++++++++++
includes/js/dojox/presentation/resources/Show.css | 100 ++++
.../presentation/resources/Show.css.commented.css | 110 ++++
includes/js/dojox/presentation/resources/Show.html | 12 +
.../js/dojox/presentation/resources/Slide.html | 4 +
.../js/dojox/presentation/resources/icons/down.png | Bin 0 -> 469 bytes
.../js/dojox/presentation/resources/icons/next.png | Bin 0 -> 470 bytes
.../js/dojox/presentation/resources/icons/prev.png | Bin 0 -> 460 bytes
.../js/dojox/presentation/resources/icons/up.png | Bin 0 -> 464 bytes
includes/js/dojox/presentation/tests/_ext1.html | 21 +
.../presentation/tests/test_presentation.html | 162 ++++++
12 files changed, 1038 insertions(+)
create mode 100644 includes/js/dojox/presentation/README
create mode 100644 includes/js/dojox/presentation/_base.js
create mode 100644 includes/js/dojox/presentation/resources/Show.css
create mode 100644 includes/js/dojox/presentation/resources/Show.css.commented.css
create mode 100644 includes/js/dojox/presentation/resources/Show.html
create mode 100644 includes/js/dojox/presentation/resources/Slide.html
create mode 100644 includes/js/dojox/presentation/resources/icons/down.png
create mode 100644 includes/js/dojox/presentation/resources/icons/next.png
create mode 100644 includes/js/dojox/presentation/resources/icons/prev.png
create mode 100644 includes/js/dojox/presentation/resources/icons/up.png
create mode 100644 includes/js/dojox/presentation/tests/_ext1.html
create mode 100644 includes/js/dojox/presentation/tests/test_presentation.html
(limited to 'includes/js/dojox/presentation')
diff --git a/includes/js/dojox/presentation/README b/includes/js/dojox/presentation/README
new file mode 100644
index 0000000..4be60f5
--- /dev/null
+++ b/includes/js/dojox/presentation/README
@@ -0,0 +1,72 @@
+-------------------------------------------------------------------------------
+dojox.presentation
+-------------------------------------------------------------------------------
+Version 0.9
+Release date: 10/31/2007
+-------------------------------------------------------------------------------
+Project state:
+experimental
+-------------------------------------------------------------------------------
+Credits
+ pete higgins (dante)
+-------------------------------------------------------------------------------
+
+Project description
+
+This is the presentation base class. It provides a mechanism for various
+display-oriented tasks. It includes a powerpoint-esque engine [prototype].
+The SlideShow aspect of this project has been deprecated and lives now
+in dojox.image project.
+
+-------------------------------------------------------------------------------
+
+Dependencies:
+
+dojox.presentation requires both Dojo Base, Dojo FX Core, and Dijit system(s).
+
+-------------------------------------------------------------------------------
+
+Documentation
+
+See the Dojo API tool (http://dojotoolkit.org/api)
+
+-------------------------------------------------------------------------------
+
+Installation instructions
+
+This package is self-contained, but needs Dijit sytem.
+
+Grab the following from the Dojo SVN Repository:
+
+svn co http://svn.dojotoolkit.org/dojo/dojox/trunk/presentation*
+svn co http://svn.dojotoolkit.org/dojo/dijit/*
+
+into your:
+/dojo root folder [checkout/release root]
+
+and require in dependancies via dojo.require('dojox.presentation');
+
+see /dojox/presentation/tests/test_presentation.html for example usage, but
+basically the structure is this:
+
+presentation />
+ Slide />
+ Slide />
+ Text Outside of Part is Static
+ Part />
+ Part />
+ Action forPart/>
+ Action forPart/>
+ Slide href="remote.html" />
+ Slide />
+ Part />
+ Action forPart/>
+/presentation>
+
+NOTE: project marked experimental, and API has a planned deprecation. To
+participate in the formation of the new presentation class, visit
+the dojotoolkit forums at:
+
+http://dojotoolkit.org/forums
+
+
diff --git a/includes/js/dojox/presentation/_base.js b/includes/js/dojox/presentation/_base.js
new file mode 100644
index 0000000..2077a4e
--- /dev/null
+++ b/includes/js/dojox/presentation/_base.js
@@ -0,0 +1,557 @@
+if(!dojo._hasResource["dojox.presentation._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.presentation._base"] = true;
+dojo.provide("dojox.presentation._base");
+dojo.experimental("dojox.presentation");
+
+dojo.require("dijit._Widget");
+dojo.require("dijit._Container");
+dojo.require("dijit._Templated");
+dojo.require("dijit.layout.StackContainer");
+dojo.require("dijit.layout.ContentPane");
+dojo.require("dojo.fx");
+
+dojo.declare("dojox.presentation.Deck", [ dijit.layout.StackContainer, dijit._Templated ], {
+ // summary:
+ // dojox.presentation class
+ // basic powerpoint esque engine for handling transitons and control
+ // in a page-by-page and part-by-part way
+ //
+ // FIXME: parsing part(s)/widget(s) in href="" Slides not working
+ // TODO: make auto actions progress.
+ // FIXME: Safari keydown/press/up listener not working.
+ // noClick=true prevents progression of slides in that broweser
+ //
+ // fullScreen: Boolean
+ // unsupported (that i know of) just yet. Default it to take control
+ // of window. Would be nice to be able to contain presentation in a
+ // styled container, like StackContainer ... theoretically possible.
+ // [and may not need this variable?]
+ fullScreen: true,
+
+ // useNav: Boolean
+ // true to allow navigation popup, false to disallow
+ useNav: true,
+
+ // navDuration: Integer
+ // time in MS fadein/out of popup nav [default: 250]
+ navDuration: 250,
+
+ // noClick: Boolean
+ // if true, prevents _any_ click events to propagate actions
+ // (limiting control to keyboard and/or action.on="auto" or action.delay=""
+ // actions.
+ noClick: false,
+
+ // setHash: Boolean
+ // if true, window location bar will get a #link to slide for direct
+ // access to a particular slide number.
+ setHash: true,
+
+ // just to over-ride:
+ templateString: null,
+ templateString:"
\n\t
\n\t
\n\t\t\n\t\t\n\t\t\n\t
\n\t
\n\t\n
\n",
+
+ // nextIcon: String
+ // icon for navigation "next" button
+ nextIcon: dojo.moduleUrl('dojox.presentation','resources/icons/next.png'),
+
+ // prevIcon: String
+ // icon for navigation "previous" button
+ prevIcon: dojo.moduleUrl('dojox.presentation','resources/icons/prev.png'),
+
+ _navOpacMin: 0,
+ _navOpacMax: 0.85,
+ _slideIndex: 0,
+
+ // Private:
+ _slides: [],
+ _navShowing: true,
+ _inNav: false,
+
+ startup: function(){
+ // summary: connect to the various handlers and controls for this presention
+ this.inherited(arguments);
+
+ if(this.useNav){
+ this._hideNav();
+ }else{
+ this.showNav.style.display = "none";
+ }
+
+ this.connect(document,'onclick', '_onEvent');
+ this.connect(document,'onkeypress', '_onEvent');
+
+ // only if this.fullScreen == true?
+ this.connect(window, 'onresize', '_resizeWindow');
+ this._resizeWindow();
+
+ this._updateSlides();
+
+ this._readHash();
+ this._setHash();
+ },
+
+ moveTo: function(/* Integer */ number){
+ // summary: jump to slide based on param
+ var slideIndex = number - 1;
+
+ if(slideIndex < 0)
+ slideIndex = 0;
+
+ if(slideIndex > this._slides.length - 1)
+ slideIndex = this._slides.length - 1;
+
+ this._gotoSlide(slideIndex);
+ },
+
+ onMove: function (number){
+ // summary: stub function? TODOC: ?
+ },
+
+ nextSlide: function(/*Event*/ evt){
+ // summary: transition to the next slide.
+ if (!this.selectedChildWidget.isLastChild) {
+ this._gotoSlide(this._slideIndex+1);
+ }
+ if (evt) { evt.stopPropagation(); }
+ },
+
+ previousSlide: function(/*Event*/ evt){
+ // summary: transition to the previous slide
+ if (!this.selectedChildWidget.isFirstChild) {
+
+ this._gotoSlide(this._slideIndex-1);
+
+ } else { this.selectedChildWidget._reset(); }
+ if (evt) { evt.stopPropagation();}
+ },
+
+ getHash: function(id){
+ // summary: get the current hash to set in localtion
+ return this.id+"_SlideNo_"+id;
+ },
+
+ _hideNav: function(evt){
+ // summary: hides navigation
+ if(this._navAnim){ this._navAnim.stop(); }
+ this._navAnim = dojo.animateProperty({
+ node:this.showNav,
+ duration:this.navDuration,
+ properties: {
+ opacity: { end:this._navOpacMin }
+ }
+ }).play();
+ },
+
+ _showNav: function(evt){
+ // summary: shows navigation
+ if(this._navAnim){ this._navAnim.stop(); }
+ this._navAnim = dojo.animateProperty({
+ node:this.showNav,
+ duration:this.navDuration,
+ properties: {
+ opacity: { end:this._navOpacMax }
+ }
+ }).play();
+ },
+
+ _handleNav: function(evt){
+ // summary: does nothing? _that_ seems useful.
+ evt.stopPropagation();
+ },
+
+ _updateSlides: function(){
+ // summary:
+ // populate navigation select list with refs to slides call this
+ // if you add a node to your presentation dynamically.
+ this._slides = this.getChildren();
+ if(this.useNav){
+ // populate the select box with top-level slides
+ var i=0;
+ dojo.forEach(this._slides,dojo.hitch(this,function(slide){
+ i++;
+ var tmp = this._option.cloneNode(true);
+ tmp.text = slide.title+" ("+i+") ";
+ this._option.parentNode.insertBefore(tmp,this._option);
+ }));
+ if(this._option.parentNode){
+ this._option.parentNode.removeChild(this._option);
+ }
+ // dojo._destroyElement(this._option);
+ }
+ },
+
+ _onEvent: function(/* Event */ evt){
+ // summary:
+ // main presentation function, determines next 'best action' for a
+ // specified event.
+ var _node = evt.target;
+ var _type = evt.type;
+
+ if(_type == "click" || _type == "change"){
+ if(_node.index && _node.parentNode == this.select){
+ this._gotoSlide(_node.index);
+ }else if(_node == this.select){
+ this._gotoSlide(_node.selectedIndex);
+ }else{
+ if (this.noClick || this.selectedChildWidget.noClick || this._isUnclickable(evt)) return;
+ this.selectedChildWidget._nextAction(evt);
+ }
+ }else if(_type=="keydown" || _type == "keypress"){
+
+ // FIXME: safari doesn't report keydown/keypress?
+
+ var key = (evt.charCode == dojo.keys.SPACE ? dojo.keys.SPACE : evt.keyCode);
+ switch(key){
+ case dojo.keys.DELETE:
+ case dojo.keys.BACKSPACE:
+ case dojo.keys.LEFT_ARROW:
+ case dojo.keys.UP_ARROW:
+ case dojo.keys.PAGE_UP:
+ case 80: // key 'p'
+ this.previousSlide(evt);
+ break;
+
+ case dojo.keys.ENTER:
+ case dojo.keys.SPACE:
+ case dojo.keys.RIGHT_ARROW:
+ case dojo.keys.DOWN_ARROW:
+ case dojo.keys.PAGE_DOWN:
+ case 78: // key 'n'
+ this.selectedChildWidget._nextAction(evt);
+ break;
+
+ case dojo.keys.HOME: this._gotoSlide(0);
+ }
+ }
+ this._resizeWindow();
+ evt.stopPropagation();
+ },
+
+ _gotoSlide: function(/* Integer */ slideIndex){
+ // summary: goes to slide
+ this.selectChild(this._slides[slideIndex]);
+ this.selectedChildWidget._reset();
+
+ this._slideIndex = slideIndex;
+
+ if(this.useNav){
+ this.select.selectedIndex = slideIndex;
+ }
+
+ if(this.setHash){
+ this._setHash();
+ }
+ this.onMove(this._slideIndex+1);
+ },
+
+ _isUnclickable: function(/* Event */ evt){
+ // summary: returns true||false base of a nodes click-ability
+ var nodeName = evt.target.nodeName.toLowerCase();
+ // TODO: check for noClick='true' in target attrs & return true
+ // TODO: check for relayClick='true' in target attrs & return false
+ switch(nodeName){
+ case 'a' :
+ case 'input' :
+ case 'textarea' : return true; break;
+ }
+ return false;
+ },
+
+ _readHash: function(){
+ var th = window.location.hash;
+ if (th.length && this.setHash) {
+ var parts = (""+window.location).split(this.getHash(''));
+ if(parts.length>1){
+ this._gotoSlide(parseInt(parts[1])-1);
+ }
+ }
+ },
+
+ _setHash: function(){
+ // summary: sets url #mark to direct slide access
+ if(this.setHash){
+ var slideNo = this._slideIndex+1;
+ window.location.href = "#"+this.getHash(slideNo);
+ }
+ },
+
+ _resizeWindow: function(/*Event*/ evt){
+ // summary: resize this and children to fix this window/container
+
+ // only if this.fullScreen?
+ dojo.body().style.height = "auto";
+ var wh = dijit.getViewport();
+ var h = Math.max(
+ document.documentElement.scrollHeight || dojo.body().scrollHeight,
+ wh.h);
+ var w = wh.w;
+ this.selectedChildWidget.domNode.style.height = h +'px';
+ this.selectedChildWidget.domNode.style.width = w +'px';
+ },
+
+ _transition: function(newWidget,oldWidget){
+ // summary: over-ride stackcontainers _transition method
+ // but atm, i find it to be ugly with not way to call
+ // _showChild() without over-riding it too. hopefull
+ // basic toggles in superclass._transition will be available
+ // in dijit, and this won't be necessary.
+ var anims = [];
+ if(oldWidget){
+ /*
+ anims.push(dojo.fadeOut({ node: oldWidget.domNode,
+ duration:250,
+ onEnd: dojo.hitch(this,function(){
+ this._hideChild(oldWidget);
+ })
+ }));
+ */
+ this._hideChild(oldWidget);
+ }
+ if(newWidget){
+ /*
+ anims.push(dojo.fadeIn({
+ node:newWidget.domNode, start:0, end:1,
+ duration:300,
+ onEnd: dojo.hitch(this,function(){
+ this._showChild(newWidget);
+ newWidget._reset();
+ })
+ })
+ );
+ */
+ this._showChild(newWidget);
+ newWidget._reset();
+ }
+ //dojo.fx.combine(anims).play();
+ }
+});
+
+dojo.declare(
+ "dojox.presentation.Slide",
+ [dijit.layout.ContentPane,dijit._Contained,dijit._Container,dijit._Templated],
+ {
+ // summary:
+ // a Comonent of a dojox.presentation, and container for each 'Slide'
+ // made up of direct HTML (no part/action relationship), and dojox.presentation.Part(s),
+ // and their attached Actions.
+
+ // templatPath: String
+ // make a ContentPane templated, and style the 'titleNode'
+ templateString:"
\n\t
${title}
\n\t\n
\n",
+
+ // title: String
+ // string to insert into titleNode, title of Slide
+ title: "",
+
+ // inherited from ContentPane FIXME: don't seem to work ATM?
+ refreshOnShow: true,
+ preLoad: false,
+ doLayout: true,
+ parseContent: true,
+
+ // noClick: Boolean
+ // true on slide tag prevents clicking, false allows
+ // (can also be set on base presentation for global control)
+ noClick: false,
+
+ // private holders:
+ _parts: [],
+ _actions: [],
+ _actionIndex: 0,
+ _runningDelay: false,
+
+ startup: function(){
+ // summary: setup this slide with actions and components (Parts)
+ this.inherited(arguments);
+ this.slideTitleText.innerHTML = this.title;
+ var children = this.getChildren();
+ this._actions = [];
+ dojo.forEach(children,function(child){
+ var tmpClass = child.declaredClass.toLowerCase();
+ switch(tmpClass){
+ case "dojox.presentation.part" : this._parts.push(child); break;
+ case "dojox.presentation.action" : this._actions.push(child); break;
+ }
+ },this);
+ },
+
+
+ _nextAction: function(evt){
+ // summary: gotoAndPlay current cached action
+ var tmpAction = this._actions[this._actionIndex] || 0;
+ if (tmpAction){
+ // is this action a delayed action? [auto? thoughts?]
+ if(tmpAction.on == "delay"){
+ this._runningDelay = setTimeout(
+ dojo.hitch(tmpAction,"_runAction"),tmpAction.delay
+ );
+ console.debug('started delay action',this._runningDelay);
+ }else{
+ tmpAction._runAction();
+ }
+
+ // FIXME: it gets hairy here. maybe runAction should
+ // call _actionIndex++ onEnd? if a delayed action is running, do
+ // we want to prevent action++?
+ var tmpNext = this._getNextAction();
+ this._actionIndex++;
+
+ if(tmpNext.on == "delay"){
+ // FIXME: yeah it looks like _runAction() onend should report
+ // _actionIndex++
+ console.debug('started delay action',this._runningDelay);
+ setTimeout(dojo.hitch(tmpNext,"_runAction"),tmpNext.delay);
+ }
+ }else{
+ // no more actions in this slide
+ this.getParent().nextSlide(evt);
+ }
+ },
+
+ _getNextAction: function(){
+ // summary: returns the _next action in this sequence
+ return this._actions[this._actionIndex+1] || 0;
+ },
+
+ _reset: function(){
+ // summary: set action chain back to 0 and re-init each Part
+ this._actionIndex = [0];
+ dojo.forEach(this._parts,function(part){
+ part._reset();
+ },this);
+ }
+});
+
+dojo.declare("dojox.presentation.Part", [dijit._Widget,dijit._Contained], {
+ // summary:
+ // a node in a presentation.Slide that inherits control from a
+ // dojox.presentation.Action
+ // can be any element type, and requires styling before parsing
+ //
+ // as: String
+ // like an ID, attach to Action via (part) as="" / (action) forSlide="" tags
+ // this should be unique identifier?
+ as: "",
+
+ // startVisible: boolean
+ // true to leave in page on slide startup/reset
+ // false to hide on slide startup/reset
+ startVisible: false,
+
+ // isShowing: Boolean,
+ // private holder for _current_ state of Part
+ _isShowing: false,
+
+ postCreate: function(){
+ // summary: override and init() this component
+ this._reset();
+ },
+
+ _reset: function(){
+ // summary: set part back to initial calculate state
+ // these _seem_ backwards, but quickToggle flips it
+ this._isShowing =! this.startVisible;
+ this._quickToggle();
+ },
+
+ _quickToggle: function(){
+ // summary: ugly [unworking] fix to test setting state of component
+ // before/after an animation. display:none prevents fadeIns?
+ if(this._isShowing){
+ dojo.style(this.domNode,'display','none');
+ dojo.style(this.domNode,'visibility','hidden');
+ dojo.style(this.domNode,'opacity',0);
+ }else{
+ dojo.style(this.domNode,'display','');
+ dojo.style(this.domNode,'visibility','visible');
+ dojo.style(this.domNode,'opacity',1);
+ }
+ this._isShowing =! this._isShowing;
+ }
+});
+
+dojo.declare("dojox.presentation.Action", [dijit._Widget,dijit._Contained], {
+ // summary:
+ // a widget to attach to a dojox.presentation.Part to control
+ // it's properties based on an inherited chain of events ...
+ //
+ //
+ // on: String
+ // FIXME: only 'click' supported ATM. plans include on="delay",
+ // on="end" of="", and on="auto". those should make semantic sense
+ // to you.
+ on: 'click',
+
+ // forSlide: String
+ // attach this action to a dojox.presentation.Part with a matching 'as' attribute
+ forSlide: "",
+
+ // toggle: String
+ // will toggle attached [matching] node(s) via forSlide/as relationship(s)
+ toggle: 'fade',
+
+ // delay: Integer
+ //
+ delay: 0,
+
+ // duration: Integer
+ // default time in MS to run this action effect on it's 'forSlide' node
+ duration: 1000,
+
+ // private holders:
+ _attached: [],
+ _nullAnim: false,
+
+ _runAction: function(){
+ // summary: runs this action on attached node(s)
+
+ var anims = [];
+ // executes the action for each attached 'Part'
+ dojo.forEach(this._attached,function(node){
+ // FIXME: this is ugly, and where is toggle class? :(
+ var dir = (node._isShowing) ? "Out" : "In";
+ // node._isShowing =! node._isShowing;
+ //var _anim = dojox.fx[ this.toggle ? this.toggle+dir : "fade"+dir]({
+ var _anim = dojo.fadeIn({
+ node:node.domNode,
+ duration: this.duration,
+ beforeBegin: dojo.hitch(node,"_quickToggle")
+ });
+ anims.push(_anim);
+ },this);
+ var _anim = dojo.fx.combine(anims);
+ if(_anim){ _anim.play(); }
+ },
+
+ _getSiblingsByType: function(/* String */ declaredClass){
+ // summary: quick replacement for getChildrenByType("class"), but in
+ // a child here ... so it's getSiblings. courtesy bill in #dojo
+ // could be moved into parent, and just call this.getChildren(),
+ // which makes more sense.
+ var siblings = dojo.filter( this.getParent().getChildren(), function(widget){
+ return widget.declaredClass==declaredClass;
+ }
+ );
+ return siblings; // dijit._Widget
+ },
+
+ postCreate: function(){
+ // summary: run this once, should this be startup: function()?
+
+ this.inherited(arguments);
+ // prevent actions from being visible, _always_
+ dojo.style(this.domNode,"display","none");
+ var parents = this._getSiblingsByType('dojox.presentation.Part');
+ // create a list of "parts" we are attached to via forSlide/as
+ this._attached = [];
+ dojo.forEach(parents,function(parentPart){
+ if(this.forSlide == parentPart.as){
+ this._attached.push(parentPart);
+ }
+ },this);
+ }
+
+});
+
+}
diff --git a/includes/js/dojox/presentation/resources/Show.css b/includes/js/dojox/presentation/resources/Show.css
new file mode 100644
index 0000000..8610675
--- /dev/null
+++ b/includes/js/dojox/presentation/resources/Show.css
@@ -0,0 +1,100 @@
+@media screen {
+ html, body {
+ margin: 0px;
+ padding: 0px;
+ }
+
+ h1.showTitle {
+ margin:0;
+ margin-left:0;
+ padding:0;
+ font-size: 60px;
+ background:transparent;
+ border-bottom:1px solid #000;
+ }
+ p, li {
+ font-size: 17pt;
+ }
+ .dojoShowNav {
+ border-top:1px solid #ccc;
+ background: #ededed;
+ overflow: hidden;
+ position: absolute;
+ bottom: 0px;
+ left: 0px;
+ width: 100%;
+ text-align: center;
+ z-index:420;
+ padding:0;
+ margin-bttom:5px; height:34px;
+ }
+ .dojoShowNav img { cursor:pointer; }
+
+ .dojoShowSlide {
+
+ }
+ .dojoShowNav option { font:6pt; color:#333; }
+ .dojoShowNav select {
+ margin: 0px;
+ color: #999;
+ margin-top: 5px;
+ padding: 2px;
+ border: 1px solid #ccc;
+ -moz-border-radius:6pt 6pt;
+ }
+ .dojoShowHider {
+ height: 5px;
+ overflow: hidden;
+ width: 100%;
+ z-index:421;
+ }
+ .dojoShowPrint {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+ width:100%;
+ }
+ .dojoShowBody {
+ background:#fff url('../../../dijit/themes/tundra/images/testBodyBg.gif') repeat-x top left;
+ padding:10px;
+ }
+ .dojoShow {
+ width:100%; height:100%;
+ overflow:hidden;
+ }
+}
+@media print {
+ .dojoShow {
+ display: none !important;
+ }
+ .dojoShowPrint {
+ display: block !important;
+ }
+ .dojoShowPrintSlide {
+ border: 1px solid #aaa;
+ padding: 10px;
+ margin-bottom: 15px;
+ }
+ .dojoShowPrintSlide, ul {
+ page-break-inside: avoid;
+ }
+ h1 {
+ margin-top: 0;
+ page-break-after: avoid;
+ }
+}
+.dojoShowSlideTitle {
+ height: 100px;
+ width:100%;
+ display:block;
+ background-color: #ededed;
+ border-bottom:1px solid #666;
+}
+.dojoShowSlideTitle h1 {
+ margin-top: 0;
+
+}
+.dojoShowSlideBody {
+ margin: 15px;
+ background:#fff url('../../../dijit/themes/tundra/images/testBodyBg.gif') repeat-x top left;
+}
diff --git a/includes/js/dojox/presentation/resources/Show.css.commented.css b/includes/js/dojox/presentation/resources/Show.css.commented.css
new file mode 100644
index 0000000..ee205e4
--- /dev/null
+++ b/includes/js/dojox/presentation/resources/Show.css.commented.css
@@ -0,0 +1,110 @@
+@media screen {
+ html, body {
+ margin: 0px;
+ padding: 0px;
+ }
+
+ h1.showTitle {
+ margin:0;
+ margin-left:0;
+ padding:0;
+ font-size: 60px;
+ background:transparent;
+ border-bottom:1px solid #000;
+ }
+
+ p, li {
+ font-size: 17pt;
+ }
+
+ .dojoShowNav {
+ border-top:1px solid #ccc;
+ background: #ededed;
+ overflow: hidden;
+ position: absolute;
+ bottom: 0px;
+ left: 0px;
+ width: 100%;
+ text-align: center;
+ z-index:420;
+ padding:0;
+ margin-bttom:5px; height:34px;
+ }
+
+ .dojoShowNav img { cursor:pointer; }
+
+ .dojoShowSlide {
+ /* width:100%; height:100%; */
+ }
+
+ .dojoShowNav option { font:6pt; color:#333; }
+ .dojoShowNav select {
+ margin: 0px;
+ color: #999;
+ margin-top: 5px;
+ padding: 2px;
+ border: 1px solid #ccc;
+ -moz-border-radius:6pt 6pt;
+ }
+
+ .dojoShowHider {
+ height: 5px;
+ overflow: hidden;
+ width: 100%;
+ z-index:421;
+ }
+ .dojoShowPrint {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+ width:100%;
+ }
+
+ .dojoShowBody {
+ background:#fff url('../../../dijit/themes/tundra/images/testBodyBg.gif') repeat-x top left;
+ padding:10px;
+ }
+
+ .dojoShow {
+ width:100%; height:100%;
+ overflow:hidden;
+ }
+}
+
+@media print {
+ .dojoShow {
+ display: none !important;
+ }
+ .dojoShowPrint {
+ display: block !important;
+ }
+ .dojoShowPrintSlide {
+ border: 1px solid #aaa;
+ padding: 10px;
+ margin-bottom: 15px;
+ }
+ .dojoShowPrintSlide, ul {
+ page-break-inside: avoid;
+ }
+ h1 {
+ margin-top: 0;
+ page-break-after: avoid;
+ }
+}
+
+.dojoShowSlideTitle {
+ height: 100px;
+ width:100%;
+ display:block;
+ background-color: #ededed;
+ border-bottom:1px solid #666;
+}
+.dojoShowSlideTitle h1 {
+ margin-top: 0;
+ /* line-height: 100px;
+ margin-left: 30px; */
+}
+.dojoShowSlideBody {
+ margin: 15px;
+ background:#fff url('../../../dijit/themes/tundra/images/testBodyBg.gif') repeat-x top left;
+}
diff --git a/includes/js/dojox/presentation/resources/Show.html b/includes/js/dojox/presentation/resources/Show.html
new file mode 100644
index 0000000..33672db
--- /dev/null
+++ b/includes/js/dojox/presentation/resources/Show.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/includes/js/dojox/presentation/resources/Slide.html b/includes/js/dojox/presentation/resources/Slide.html
new file mode 100644
index 0000000..dc4627b
--- /dev/null
+++ b/includes/js/dojox/presentation/resources/Slide.html
@@ -0,0 +1,4 @@
+
+
${title}
+
+
diff --git a/includes/js/dojox/presentation/resources/icons/down.png b/includes/js/dojox/presentation/resources/icons/down.png
new file mode 100644
index 0000000..46bf9ba
Binary files /dev/null and b/includes/js/dojox/presentation/resources/icons/down.png differ
diff --git a/includes/js/dojox/presentation/resources/icons/next.png b/includes/js/dojox/presentation/resources/icons/next.png
new file mode 100644
index 0000000..16afa87
Binary files /dev/null and b/includes/js/dojox/presentation/resources/icons/next.png differ
diff --git a/includes/js/dojox/presentation/resources/icons/prev.png b/includes/js/dojox/presentation/resources/icons/prev.png
new file mode 100644
index 0000000..5519eb5
Binary files /dev/null and b/includes/js/dojox/presentation/resources/icons/prev.png differ
diff --git a/includes/js/dojox/presentation/resources/icons/up.png b/includes/js/dojox/presentation/resources/icons/up.png
new file mode 100644
index 0000000..d77816a
Binary files /dev/null and b/includes/js/dojox/presentation/resources/icons/up.png differ
diff --git a/includes/js/dojox/presentation/tests/_ext1.html b/includes/js/dojox/presentation/tests/_ext1.html
new file mode 100644
index 0000000..d56be0e
--- /dev/null
+++ b/includes/js/dojox/presentation/tests/_ext1.html
@@ -0,0 +1,21 @@
+
WARNING:
+
+
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean
+semper sagittis velit. Cras in mi. Duis porta mauris ut ligula. Proin
+porta rutrum lacus. Etiam consequat scelerisque quam. Nulla facilisi.
+Maecenas luctus venenatis nulla. In sit amet dui non mi semper iaculis.
+Sed molestie tortor at ipsum. Morbi dictum rutrum magna. Sed vitae
+risus.
+
+
+
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean
+semper sagittis velit. Cras in mi. Duis porta mauris ut ligula. Proin
+porta rutrum lacus. Etiam consequat scelerisque quam. Nulla facilisi.
+Maecenas luctus venenatis nulla. In sit amet dui non mi semper iaculis.
+Sed molestie tortor at ipsum. Morbi dictum rutrum magna. Sed vitae
+risus.
+