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. +

+ + diff --git a/includes/js/dojox/presentation/tests/test_presentation.html b/includes/js/dojox/presentation/tests/test_presentation.html new file mode 100644 index 0000000..d9e86b5 --- /dev/null +++ b/includes/js/dojox/presentation/tests/test_presentation.html @@ -0,0 +1,162 @@ + + + + dojox.presentation - Presentation Mechanism + + + + + + + + + + + + + + +
+
+ +

This is a brief overview of what this presentation widget is capable of.

+ +
... it's new, and completely different, so watch close
+ + + + +
+ +
+

Click, and more text will appear

+ +
+

Lorem something something. I am text, hear me _roar_.

+
+ + +
+ I am here to make sure click-advancing is disabled on normal input type elements: + + +
+ + + +
+
+ +

First You See me ...

+

Then you see ME ...

+

oh yeah!

+ + + + + + +
+ +
+

You cannot click on this page

+

I told you that you can't click ...

+ click here to move the title + + + +
+ +
+

There is a widget in this page:

+

clicking has been stopped on this page to demonstrate the usage ..

+
+ There _should_ be a _Calendar widget here
+
+
+
+ I am a titlepane, you can do cool things with me. + +
+
+

... so I'm providing a next button:

+
+ +
+ +
+

Thanks for watching!

+
+
+ + -- cgit v1.2.3-54-g00ecf