|
@@ -70,7 +70,7 @@ Widget subclass: #Presentation
|
|
|
!Presentation methodsFor: 'accessing'!
|
|
|
|
|
|
title
|
|
|
- ^'Slides'
|
|
|
+ ^ self class title.
|
|
|
!
|
|
|
|
|
|
author
|
|
@@ -117,24 +117,6 @@ style
|
|
|
|
|
|
!Presentation methodsFor: 'actions'!
|
|
|
|
|
|
-reload
|
|
|
- '#slides' asJQuery remove.
|
|
|
- '#tools' asJQuery remove.
|
|
|
- self initSlides.
|
|
|
- self appendToJQuery: 'body' asJQuery.
|
|
|
- self checkHash
|
|
|
-!
|
|
|
-
|
|
|
-setup
|
|
|
- Presentation setCurrent: self.
|
|
|
- (window jQuery: document) ready: [
|
|
|
- self appendToJQuery: 'body' asJQuery.
|
|
|
- self
|
|
|
- setKeybindings;
|
|
|
- checkHashChange;
|
|
|
- checkHash].
|
|
|
-!
|
|
|
-
|
|
|
nextSlide
|
|
|
| next |
|
|
|
self currentSlide ifNotNil: [
|
|
@@ -161,18 +143,6 @@ previousSlide
|
|
|
next ifNotNil: [currentSlide := next. next show]]
|
|
|
!
|
|
|
|
|
|
-setKeybindings
|
|
|
- (window jQuery: document) keyup: [:e || node |
|
|
|
- node := e target nodeName asLowercase.
|
|
|
- (node = 'textarea' or: [node = 'input']) ifFalse: [
|
|
|
- e keyCode = 39 ifTrue: [self nextSlide].
|
|
|
- e keyCode = 37 ifTrue: [self previousSlide]]]
|
|
|
-!
|
|
|
-
|
|
|
-checkHashChange
|
|
|
- (window jQuery: window) bind: 'hashchange' do: [self checkHash]
|
|
|
-!
|
|
|
-
|
|
|
checkHash
|
|
|
| hash slide |
|
|
|
hash := document location hash replace: '^#' with: ''.
|
|
@@ -195,9 +165,6 @@ renderOn: html
|
|
|
html style
|
|
|
type: 'text/css';
|
|
|
with: self style.
|
|
|
- html div
|
|
|
- id: 'tools';
|
|
|
- with: [self renderToolsOn: html].
|
|
|
html div
|
|
|
id: 'slides';
|
|
|
with: [self renderSlidesOn: html]
|
|
@@ -208,41 +175,24 @@ renderSlidesOn: html
|
|
|
each renderOn: html].
|
|
|
currentSlide ifNil: [currentSlide := self slides first].
|
|
|
self showCurrentSlide
|
|
|
-!
|
|
|
-
|
|
|
-renderToolsOn: html
|
|
|
- html a
|
|
|
- with: 'IDE';
|
|
|
- onClick: [TabManager current open].
|
|
|
- html a
|
|
|
- with: 'Reload';
|
|
|
- onClick: [self reload].
|
|
|
- html a
|
|
|
- with: '←';
|
|
|
- onClick: [self previousSlide].
|
|
|
- html a
|
|
|
- with: '→';
|
|
|
- onClick: [self nextSlide]
|
|
|
! !
|
|
|
|
|
|
Presentation class instanceVariableNames: 'current'!
|
|
|
|
|
|
-!Presentation class methodsFor: 'initialization'!
|
|
|
+!Presentation class methodsFor: 'accessing'!
|
|
|
|
|
|
-initialize
|
|
|
- self isConcrete ifTrue: [self setup]
|
|
|
+concretePresentations
|
|
|
+ ^ self allSubclasses select: [:aPresentationClass| aPresentationClass isConcrete]
|
|
|
!
|
|
|
|
|
|
-setup
|
|
|
- self new setup
|
|
|
-!
|
|
|
+title
|
|
|
+ ^ 'Slides'
|
|
|
+! !
|
|
|
|
|
|
-setCurrent: aSlides
|
|
|
- current := aSlides
|
|
|
-!
|
|
|
+!Presentation class methodsFor: 'enumerating'!
|
|
|
|
|
|
-current
|
|
|
- ^current
|
|
|
+concretePresentationsDo: aBlockWithArg
|
|
|
+ self concretePresentations do: aBlockWithArg.
|
|
|
! !
|
|
|
|
|
|
!Presentation class methodsFor: 'testing'!
|
|
@@ -257,10 +207,6 @@ Presentation subclass: #ESUG2011Presentation
|
|
|
|
|
|
!ESUG2011Presentation methodsFor: 'accessing'!
|
|
|
|
|
|
-title
|
|
|
- ^'Jtalk'
|
|
|
-!
|
|
|
-
|
|
|
description
|
|
|
^'ESUG 2011, Edinburgh'
|
|
|
!
|
|
@@ -557,35 +503,6 @@ body {
|
|
|
padding: 0 5px;
|
|
|
}
|
|
|
|
|
|
-#tools {
|
|
|
- z-index: 1;
|
|
|
- position: fixed;
|
|
|
- top: 0;
|
|
|
- left: 50%;
|
|
|
- margin-left: -150px;
|
|
|
- width: 300px;
|
|
|
- padding: 5px;
|
|
|
- border-radius: 5px;
|
|
|
- -moz-border-radius: 5px;
|
|
|
- -webkit-border-radius: 5px;
|
|
|
- background: #333;
|
|
|
- opacity: 0.3;
|
|
|
- color: #eee;
|
|
|
-}
|
|
|
-
|
|
|
-#tools a {
|
|
|
- font-weight: bold;
|
|
|
- color: #eee;
|
|
|
- text-decoration: none;
|
|
|
- cursor: pointer;
|
|
|
- padding: 0 2px;
|
|
|
- font-size: 14px;
|
|
|
-}
|
|
|
-
|
|
|
-#tools:hover {
|
|
|
- opacity: 0.8;
|
|
|
-}
|
|
|
-
|
|
|
.slide {
|
|
|
|
|
|
}
|
|
@@ -594,6 +511,12 @@ body {
|
|
|
|
|
|
ESUG2011Presentation class instanceVariableNames: 'current'!
|
|
|
|
|
|
+!ESUG2011Presentation class methodsFor: 'accessing'!
|
|
|
+
|
|
|
+title
|
|
|
+ ^'Jtalk'
|
|
|
+! !
|
|
|
+
|
|
|
!ESUG2011Presentation class methodsFor: 'testing'!
|
|
|
|
|
|
isConcrete
|
|
@@ -1156,3 +1079,163 @@ renderSlideOn: html
|
|
|
html span class: 'blue'; with: 'Enyo'].
|
|
|
! !
|
|
|
|
|
|
+Widget subclass: #PresentationNavigator
|
|
|
+ instanceVariableNames: 'presentationBrush currentPresentation'
|
|
|
+ category: 'Presentation'!
|
|
|
+
|
|
|
+!PresentationNavigator methodsFor: 'accessing'!
|
|
|
+
|
|
|
+currentPresentation: aPresentation
|
|
|
+ currentPresentation := aPresentation.
|
|
|
+!
|
|
|
+
|
|
|
+currentPresentation
|
|
|
+ ^ currentPresentation ifNil: [currentPresentation := Presentation concretePresentations first new].
|
|
|
+!
|
|
|
+
|
|
|
+style
|
|
|
+ ^ '
|
|
|
+#navigator {
|
|
|
+ z-index: 1;
|
|
|
+ position: fixed;
|
|
|
+ top: 0;
|
|
|
+ left: 50%;
|
|
|
+ margin-left: -150px;
|
|
|
+ padding: 5px;
|
|
|
+ border-radius: 5px;
|
|
|
+ -moz-border-radius: 5px;
|
|
|
+ -webkit-border-radius: 5px;
|
|
|
+ background: #333;
|
|
|
+ opacity: 0.3;
|
|
|
+ color: #eee;
|
|
|
+}
|
|
|
+
|
|
|
+#navigator a {
|
|
|
+ font-weight: bold;
|
|
|
+ color: #eee;
|
|
|
+ text-decoration: none;
|
|
|
+ cursor: pointer;
|
|
|
+ padding: 0 2px;
|
|
|
+ font-size: 14px;
|
|
|
+}
|
|
|
+
|
|
|
+#navigator:hover {
|
|
|
+ opacity: 0.8;
|
|
|
+}
|
|
|
+'
|
|
|
+! !
|
|
|
+
|
|
|
+!PresentationNavigator methodsFor: 'callbacks'!
|
|
|
+
|
|
|
+selectPresentation: aPresentationClass
|
|
|
+ self currentPresentation: aPresentationClass new.
|
|
|
+ self renderCurrentPresentation.
|
|
|
+!
|
|
|
+
|
|
|
+selectPresentationNamed: aString
|
|
|
+ self selectPresentation: (Smalltalk current at: aString)
|
|
|
+!
|
|
|
+
|
|
|
+previousSlide
|
|
|
+ self currentPresentation previousSlide
|
|
|
+!
|
|
|
+
|
|
|
+nextSlide
|
|
|
+ self currentPresentation nextSlide
|
|
|
+!
|
|
|
+
|
|
|
+reload
|
|
|
+ self currentPresentation: self currentPresentation class new.
|
|
|
+ self renderCurrentPresentation.
|
|
|
+! !
|
|
|
+
|
|
|
+!PresentationNavigator methodsFor: 'hash'!
|
|
|
+
|
|
|
+checkHash
|
|
|
+ self currentPresentation checkHash
|
|
|
+!
|
|
|
+
|
|
|
+checkHashChange
|
|
|
+ (window jQuery: window) bind: 'hashchange' do: [self checkHash]
|
|
|
+! !
|
|
|
+
|
|
|
+!PresentationNavigator methodsFor: 'keybindings'!
|
|
|
+
|
|
|
+setKeybindings
|
|
|
+ (window jQuery: document) keyup: [:e || node |
|
|
|
+ node := e target nodeName asLowercase.
|
|
|
+ (node = 'textarea' or: [node = 'input']) ifFalse: [
|
|
|
+ e keyCode = 39 ifTrue: [self nextSlide].
|
|
|
+ e keyCode = 37 ifTrue: [self previousSlide]]]
|
|
|
+! !
|
|
|
+
|
|
|
+!PresentationNavigator methodsFor: 'rendering'!
|
|
|
+
|
|
|
+renderToolsOn: html
|
|
|
+ html a
|
|
|
+ with: 'IDE';
|
|
|
+ onClick: [TabManager current open].
|
|
|
+ html a
|
|
|
+ with: 'Reload';
|
|
|
+ onClick: [self reload].
|
|
|
+ html a
|
|
|
+ with: '←';
|
|
|
+ onClick: [self previousSlide].
|
|
|
+ html a
|
|
|
+ with: '→';
|
|
|
+ onClick: [self nextSlide].
|
|
|
+!
|
|
|
+
|
|
|
+renderPresentationSelectOn: html
|
|
|
+ html select
|
|
|
+ onChange: [:anEvent | self selectPresentationNamed: anEvent target value];
|
|
|
+ with: [ Presentation concretePresentationsDo: [:aPresentationClass |
|
|
|
+ html option
|
|
|
+ value: aPresentationClass name;
|
|
|
+ with: aPresentationClass title ] ].
|
|
|
+!
|
|
|
+
|
|
|
+open
|
|
|
+ (window jQuery: document) ready: [
|
|
|
+ self
|
|
|
+ appendToJQuery: 'body' asJQuery;
|
|
|
+ setKeybindings;
|
|
|
+ checkHashChange.
|
|
|
+ ].
|
|
|
+!
|
|
|
+
|
|
|
+renderOn: html
|
|
|
+ html style
|
|
|
+ type: 'text/css';
|
|
|
+ with: self style.
|
|
|
+ html div
|
|
|
+ id: 'navigator';
|
|
|
+ with: [ self
|
|
|
+ renderToolsOn: html;
|
|
|
+ renderPresentationSelectOn: html ].
|
|
|
+
|
|
|
+ presentationBrush := html div
|
|
|
+ id: 'presentation';
|
|
|
+ yourself.
|
|
|
+
|
|
|
+ self renderCurrentPresentation.
|
|
|
+!
|
|
|
+
|
|
|
+renderCurrentPresentation
|
|
|
+ presentationBrush contents: [:html |
|
|
|
+ self currentPresentation
|
|
|
+ renderOn: html;
|
|
|
+ checkHash.
|
|
|
+ ].
|
|
|
+! !
|
|
|
+
|
|
|
+!PresentationNavigator class methodsFor: 'initialize'!
|
|
|
+
|
|
|
+initialize
|
|
|
+ ^ self open
|
|
|
+!
|
|
|
+
|
|
|
+open
|
|
|
+ ^ self new open
|
|
|
+! !
|
|
|
+
|