|
@@ -1,70 +1,148 @@
|
|
Smalltalk current createPackage: 'Presentation' properties: #{}!
|
|
Smalltalk current createPackage: 'Presentation' properties: #{}!
|
|
-Widget subclass: #Slide
|
|
|
|
- instanceVariableNames: 'presentation'
|
|
|
|
|
|
+Widget subclass: #Presentation
|
|
|
|
+ instanceVariableNames: 'currentSlide slides'
|
|
category: 'Presentation'!
|
|
category: 'Presentation'!
|
|
|
|
|
|
-!Slide methodsFor: 'accessing'!
|
|
|
|
|
|
+!Presentation methodsFor: 'accessing'!
|
|
|
|
|
|
-presentation
|
|
|
|
- ^presentation
|
|
|
|
|
|
+title
|
|
|
|
+ ^ self class title.
|
|
!
|
|
!
|
|
|
|
|
|
-presentation: aPresentation
|
|
|
|
- presentation := aPresentation
|
|
|
|
|
|
+author
|
|
|
|
+ ^'John Smith'
|
|
!
|
|
!
|
|
|
|
|
|
-id
|
|
|
|
- ^ self class name
|
|
|
|
|
|
+url
|
|
|
|
+ ^'http://jtalk-project.org'
|
|
!
|
|
!
|
|
|
|
|
|
-cssClass
|
|
|
|
- ^'slide'
|
|
|
|
|
|
+description
|
|
|
|
+ ^'A presentation written in Jtalk'
|
|
!
|
|
!
|
|
|
|
|
|
-backgroundColor
|
|
|
|
- ^'#555'
|
|
|
|
|
|
+email
|
|
|
|
+ ^'john@smith.com'
|
|
!
|
|
!
|
|
|
|
|
|
-title
|
|
|
|
- ^ self id
|
|
|
|
|
|
+slides
|
|
|
|
+ slides ifNil: [self initSlides].
|
|
|
|
+ ^slides
|
|
|
|
+!
|
|
|
|
+
|
|
|
|
+slideClasses
|
|
|
|
+ ^self subclassResponsibility
|
|
|
|
+!
|
|
|
|
+
|
|
|
|
+currentSlide
|
|
|
|
+ ^currentSlide
|
|
|
|
+!
|
|
|
|
+
|
|
|
|
+currentSlide: aSlide
|
|
|
|
+ currentSlide := aSlide
|
|
|
|
+!
|
|
|
|
+
|
|
|
|
+slideTransition
|
|
|
|
+ ^'fade'
|
|
|
|
+!
|
|
|
|
+
|
|
|
|
+style
|
|
|
|
+ "Should return a CSS style"
|
|
|
|
+ ^ ''
|
|
! !
|
|
! !
|
|
|
|
|
|
-!Slide methodsFor: 'actions'!
|
|
|
|
|
|
+!Presentation methodsFor: 'actions'!
|
|
|
|
|
|
-show
|
|
|
|
- self backgroundColor ifNotNil: [
|
|
|
|
- (window jQuery: '#slides') css: 'background' color: self backgroundColor].
|
|
|
|
- (window jQuery: '.slide') hide: self presentation slideTransition options: #() duration: 300.
|
|
|
|
- (window jQuery: '#', self id) show: self presentation slideTransition options: #() duration: 300.
|
|
|
|
|
|
+nextSlide
|
|
|
|
+ | next |
|
|
|
|
+ self currentSlide ifNotNil: [
|
|
|
|
+ next := self slides
|
|
|
|
+ at: (self currentSlideIndex) + 1
|
|
|
|
+ ifAbsent: [nil].
|
|
|
|
+ next ifNotNil: [currentSlide := next. next show]]
|
|
|
|
+!
|
|
|
|
+
|
|
|
|
+showCurrentSlide
|
|
|
|
+ self currentSlide ifNotNil: [
|
|
|
|
+ '.slide' asJQuery hide.
|
|
|
|
+ ('#', self currentSlide id) asJQuery show.
|
|
|
|
+ 'title' asJQuery text: self title, ' - ', self currentSlide id.
|
|
|
|
+ ]
|
|
|
|
+!
|
|
|
|
+
|
|
|
|
+previousSlide
|
|
|
|
+ | next |
|
|
|
|
+ self currentSlide ifNotNil: [
|
|
|
|
+ next := self slides
|
|
|
|
+ at: (self currentSlideIndex) - 1
|
|
|
|
+ ifAbsent: [nil].
|
|
|
|
+ next ifNotNil: [currentSlide := next. next show]]
|
|
|
|
+!
|
|
|
|
+
|
|
|
|
+moveAt: anInteger
|
|
|
|
+ | next |
|
|
|
|
+ next := self slides
|
|
|
|
+ at: anInteger
|
|
|
|
+ ifAbsent: [nil].
|
|
|
|
+ next ifNotNil: [currentSlide := next. next show]
|
|
|
|
+!
|
|
|
|
+
|
|
|
|
+currentSlideIndex
|
|
|
|
+ ^ self slides indexOf: self currentSlide ifAbsent: [1]
|
|
! !
|
|
! !
|
|
|
|
|
|
-!Slide methodsFor: 'rendering'!
|
|
|
|
|
|
+!Presentation methodsFor: 'enumerating'!
|
|
|
|
+
|
|
|
|
+slidesDo: aBlockWithArg
|
|
|
|
+ self slides do: [:aSlide| aBlockWithArg value: aSlide].
|
|
|
|
+! !
|
|
|
|
+
|
|
|
|
+!Presentation methodsFor: 'initialization'!
|
|
|
|
+
|
|
|
|
+initSlides
|
|
|
|
+ slides := self slideClasses collect: [:each | each on: self]
|
|
|
|
+! !
|
|
|
|
+
|
|
|
|
+!Presentation methodsFor: 'rendering'!
|
|
|
|
|
|
renderOn: html
|
|
renderOn: html
|
|
- html div class: self cssClass; id: self id; with: [
|
|
|
|
- self renderSlideOn: html.
|
|
|
|
- self renderMetaOn: html]
|
|
|
|
|
|
+ html style
|
|
|
|
+ type: 'text/css';
|
|
|
|
+ with: self style.
|
|
|
|
+ html div
|
|
|
|
+ id: 'slides';
|
|
|
|
+ with: [self renderSlidesOn: html]
|
|
!
|
|
!
|
|
|
|
|
|
-renderSlideOn: html
|
|
|
|
|
|
+renderSlidesOn: html
|
|
|
|
+ self slides do: [:each |
|
|
|
|
+ each renderOn: html].
|
|
|
|
+ currentSlide ifNil: [currentSlide := self slides first].
|
|
|
|
+ self showCurrentSlide
|
|
|
|
+! !
|
|
|
|
+
|
|
|
|
+Presentation class instanceVariableNames: 'current'!
|
|
|
|
+
|
|
|
|
+!Presentation class methodsFor: 'accessing'!
|
|
|
|
+
|
|
|
|
+concretePresentations
|
|
|
|
+ ^ self allSubclasses select: [:aPresentationClass| aPresentationClass isConcrete]
|
|
!
|
|
!
|
|
|
|
|
|
-renderMetaOn: html
|
|
|
|
- html div
|
|
|
|
- id: 'meta';
|
|
|
|
- with: [
|
|
|
|
- html p class: 'title'; with: self presentation title.
|
|
|
|
- html p class: 'description'; with: self presentation description.
|
|
|
|
- html a class: 'author'; with: self presentation author; href: 'mailto:', self presentation email.
|
|
|
|
- html a class: 'url'; with: self presentation url; href: self presentation url]
|
|
|
|
|
|
+title
|
|
|
|
+ ^ 'Slides'
|
|
! !
|
|
! !
|
|
|
|
|
|
-!Slide class methodsFor: 'instance creation'!
|
|
|
|
|
|
+!Presentation class methodsFor: 'enumerating'!
|
|
|
|
|
|
-on: aPresentation
|
|
|
|
- ^self new
|
|
|
|
- presentation: aPresentation;
|
|
|
|
- yourself
|
|
|
|
|
|
+concretePresentationsDo: aBlockWithArg
|
|
|
|
+ self concretePresentations do: aBlockWithArg.
|
|
|
|
+! !
|
|
|
|
+
|
|
|
|
+!Presentation class methodsFor: 'testing'!
|
|
|
|
+
|
|
|
|
+isConcrete
|
|
|
|
+ ^false
|
|
! !
|
|
! !
|
|
|
|
|
|
Widget subclass: #PresentationNavigator
|
|
Widget subclass: #PresentationNavigator
|
|
@@ -270,150 +348,72 @@ open
|
|
^ self new open
|
|
^ self new open
|
|
! !
|
|
! !
|
|
|
|
|
|
-Widget subclass: #Presentation
|
|
|
|
- instanceVariableNames: 'currentSlide slides'
|
|
|
|
|
|
+Widget subclass: #Slide
|
|
|
|
+ instanceVariableNames: 'presentation'
|
|
category: 'Presentation'!
|
|
category: 'Presentation'!
|
|
|
|
|
|
-!Presentation methodsFor: 'accessing'!
|
|
|
|
-
|
|
|
|
-title
|
|
|
|
- ^ self class title.
|
|
|
|
-!
|
|
|
|
-
|
|
|
|
-author
|
|
|
|
- ^'John Smith'
|
|
|
|
-!
|
|
|
|
-
|
|
|
|
-url
|
|
|
|
- ^'http://jtalk-project.org'
|
|
|
|
-!
|
|
|
|
-
|
|
|
|
-description
|
|
|
|
- ^'A presentation written in Jtalk'
|
|
|
|
-!
|
|
|
|
-
|
|
|
|
-email
|
|
|
|
- ^'john@smith.com'
|
|
|
|
-!
|
|
|
|
-
|
|
|
|
-slides
|
|
|
|
- slides ifNil: [self initSlides].
|
|
|
|
- ^slides
|
|
|
|
-!
|
|
|
|
-
|
|
|
|
-slideClasses
|
|
|
|
- ^self subclassResponsibility
|
|
|
|
-!
|
|
|
|
-
|
|
|
|
-currentSlide
|
|
|
|
- ^currentSlide
|
|
|
|
-!
|
|
|
|
-
|
|
|
|
-currentSlide: aSlide
|
|
|
|
- currentSlide := aSlide
|
|
|
|
-!
|
|
|
|
|
|
+!Slide methodsFor: 'accessing'!
|
|
|
|
|
|
-slideTransition
|
|
|
|
- ^'fade'
|
|
|
|
|
|
+presentation
|
|
|
|
+ ^presentation
|
|
!
|
|
!
|
|
|
|
|
|
-style
|
|
|
|
- "Should return a CSS style"
|
|
|
|
- ^ ''
|
|
|
|
-! !
|
|
|
|
-
|
|
|
|
-!Presentation methodsFor: 'actions'!
|
|
|
|
-
|
|
|
|
-nextSlide
|
|
|
|
- | next |
|
|
|
|
- self currentSlide ifNotNil: [
|
|
|
|
- next := self slides
|
|
|
|
- at: (self currentSlideIndex) + 1
|
|
|
|
- ifAbsent: [nil].
|
|
|
|
- next ifNotNil: [currentSlide := next. next show]]
|
|
|
|
|
|
+presentation: aPresentation
|
|
|
|
+ presentation := aPresentation
|
|
!
|
|
!
|
|
|
|
|
|
-showCurrentSlide
|
|
|
|
- self currentSlide ifNotNil: [
|
|
|
|
- '.slide' asJQuery hide.
|
|
|
|
- ('#', self currentSlide id) asJQuery show.
|
|
|
|
- 'title' asJQuery text: self title, ' - ', self currentSlide id.
|
|
|
|
- ]
|
|
|
|
|
|
+id
|
|
|
|
+ ^ self class name
|
|
!
|
|
!
|
|
|
|
|
|
-previousSlide
|
|
|
|
- | next |
|
|
|
|
- self currentSlide ifNotNil: [
|
|
|
|
- next := self slides
|
|
|
|
- at: (self currentSlideIndex) - 1
|
|
|
|
- ifAbsent: [nil].
|
|
|
|
- next ifNotNil: [currentSlide := next. next show]]
|
|
|
|
|
|
+cssClass
|
|
|
|
+ ^'slide'
|
|
!
|
|
!
|
|
|
|
|
|
-moveAt: anInteger
|
|
|
|
- | next |
|
|
|
|
- next := self slides
|
|
|
|
- at: anInteger
|
|
|
|
- ifAbsent: [nil].
|
|
|
|
- next ifNotNil: [currentSlide := next. next show]
|
|
|
|
|
|
+backgroundColor
|
|
|
|
+ ^'#555'
|
|
!
|
|
!
|
|
|
|
|
|
-currentSlideIndex
|
|
|
|
- ^ self slides indexOf: self currentSlide ifAbsent: [1]
|
|
|
|
-! !
|
|
|
|
-
|
|
|
|
-!Presentation methodsFor: 'enumerating'!
|
|
|
|
-
|
|
|
|
-slidesDo: aBlockWithArg
|
|
|
|
- self slides do: [:aSlide| aBlockWithArg value: aSlide].
|
|
|
|
|
|
+title
|
|
|
|
+ ^ self id
|
|
! !
|
|
! !
|
|
|
|
|
|
-!Presentation methodsFor: 'initialization'!
|
|
|
|
|
|
+!Slide methodsFor: 'actions'!
|
|
|
|
|
|
-initSlides
|
|
|
|
- slides := self slideClasses collect: [:each | each on: self]
|
|
|
|
|
|
+show
|
|
|
|
+ self backgroundColor ifNotNil: [
|
|
|
|
+ (window jQuery: '#slides') css: 'background' color: self backgroundColor].
|
|
|
|
+ (window jQuery: '.slide') hide: self presentation slideTransition options: #() duration: 300.
|
|
|
|
+ (window jQuery: '#', self id) show: self presentation slideTransition options: #() duration: 300.
|
|
! !
|
|
! !
|
|
|
|
|
|
-!Presentation methodsFor: 'rendering'!
|
|
|
|
|
|
+!Slide methodsFor: 'rendering'!
|
|
|
|
|
|
renderOn: html
|
|
renderOn: html
|
|
- html style
|
|
|
|
- type: 'text/css';
|
|
|
|
- with: self style.
|
|
|
|
- html div
|
|
|
|
- id: 'slides';
|
|
|
|
- with: [self renderSlidesOn: html]
|
|
|
|
|
|
+ html div class: self cssClass; id: self id; with: [
|
|
|
|
+ self renderSlideOn: html.
|
|
|
|
+ self renderMetaOn: html]
|
|
!
|
|
!
|
|
|
|
|
|
-renderSlidesOn: html
|
|
|
|
- self slides do: [:each |
|
|
|
|
- each renderOn: html].
|
|
|
|
- currentSlide ifNil: [currentSlide := self slides first].
|
|
|
|
- self showCurrentSlide
|
|
|
|
-! !
|
|
|
|
-
|
|
|
|
-Presentation class instanceVariableNames: 'current'!
|
|
|
|
-
|
|
|
|
-!Presentation class methodsFor: 'accessing'!
|
|
|
|
-
|
|
|
|
-concretePresentations
|
|
|
|
- ^ self allSubclasses select: [:aPresentationClass| aPresentationClass isConcrete]
|
|
|
|
|
|
+renderSlideOn: html
|
|
!
|
|
!
|
|
|
|
|
|
-title
|
|
|
|
- ^ 'Slides'
|
|
|
|
-! !
|
|
|
|
-
|
|
|
|
-!Presentation class methodsFor: 'enumerating'!
|
|
|
|
-
|
|
|
|
-concretePresentationsDo: aBlockWithArg
|
|
|
|
- self concretePresentations do: aBlockWithArg.
|
|
|
|
|
|
+renderMetaOn: html
|
|
|
|
+ html div
|
|
|
|
+ id: 'meta';
|
|
|
|
+ with: [
|
|
|
|
+ html p class: 'title'; with: self presentation title.
|
|
|
|
+ html p class: 'description'; with: self presentation description.
|
|
|
|
+ html a class: 'author'; with: self presentation author; href: 'mailto:', self presentation email.
|
|
|
|
+ html a class: 'url'; with: self presentation url; href: self presentation url]
|
|
! !
|
|
! !
|
|
|
|
|
|
-!Presentation class methodsFor: 'testing'!
|
|
|
|
|
|
+!Slide class methodsFor: 'instance creation'!
|
|
|
|
|
|
-isConcrete
|
|
|
|
- ^false
|
|
|
|
|
|
+on: aPresentation
|
|
|
|
+ ^self new
|
|
|
|
+ presentation: aPresentation;
|
|
|
|
+ yourself
|
|
! !
|
|
! !
|
|
|
|
|
|
Slide subclass: #FOSDEMSlide
|
|
Slide subclass: #FOSDEMSlide
|
|
@@ -1824,6 +1824,19 @@ body {
|
|
-webkit-animation: rotate-horizontal 2s infinite alternate ease-in-out;
|
|
-webkit-animation: rotate-horizontal 2s infinite alternate ease-in-out;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+.slide#FOSDEMContributionsSlide {
|
|
|
|
+ background: white url("esug2011/images/asterix.png") 30px 130px no-repeat;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.slide#FOSDEMContributionsSlide .section {
|
|
|
|
+ margin-left: 250px;
|
|
|
|
+ margin-top: 200px;
|
|
|
|
+ font-family: "Droid Sans";
|
|
|
|
+ font-size: 26px;
|
|
|
|
+ font-weight: bold;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
.slide#ide {
|
|
.slide#ide {
|
|
background: black url("esug2011/images/ide_star_wars.png") center center no-repeat;
|
|
background: black url("esug2011/images/ide_star_wars.png") center center no-repeat;
|
|
}
|
|
}
|
|
@@ -1861,7 +1874,9 @@ slideClasses
|
|
FOSDEMTwitter.
|
|
FOSDEMTwitter.
|
|
FOSDEMCanvasSlide.
|
|
FOSDEMCanvasSlide.
|
|
FOSDEMAmberBackend.
|
|
FOSDEMAmberBackend.
|
|
- FOSDEMREPLSlide
|
|
|
|
|
|
+ FOSDEMREPLSlide.
|
|
|
|
+ FOSDEMCLISlide.
|
|
|
|
+ FOSDEMContributionsSlide
|
|
}
|
|
}
|
|
! !
|
|
! !
|
|
|
|
|
|
@@ -1924,3 +1939,40 @@ renderTweet: tweet on: html
|
|
]
|
|
]
|
|
! !
|
|
! !
|
|
|
|
|
|
|
|
+FOSDEMSlide subclass: #FOSDEMCLISlide
|
|
|
|
+ instanceVariableNames: ''
|
|
|
|
+ category: 'Presentation'!
|
|
|
|
+
|
|
|
|
+!FOSDEMCLISlide methodsFor: 'rendering'!
|
|
|
|
+
|
|
|
|
+renderSlideOn: html
|
|
|
|
+ html h1: 'CLI'.
|
|
|
|
+ html with: 'amberc compiles .st files into node programs !!'.
|
|
|
|
+ self renderCodeSnippetOn: html.
|
|
|
|
+!
|
|
|
|
+
|
|
|
|
+codeSnippet
|
|
|
|
+ ^
|
|
|
|
+'cd examples/nodejs/hello
|
|
|
|
+../../../bin/amberc -m Hello Hello.st Program
|
|
|
|
+node Program.js
|
|
|
|
+
|
|
|
|
+Hello world from Amber in Node.js'
|
|
|
|
+! !
|
|
|
|
+
|
|
|
|
+FOSDEMSlide subclass: #FOSDEMContributionsSlide
|
|
|
|
+ instanceVariableNames: ''
|
|
|
|
+ category: 'Presentation'!
|
|
|
|
+
|
|
|
|
+!FOSDEMContributionsSlide methodsFor: 'rendering'!
|
|
|
|
+
|
|
|
|
+renderSlideOn: html
|
|
|
|
+ html div class: 'section'; with: [
|
|
|
|
+ html p with: [
|
|
|
|
+ html a href: 'http://amber-lang.net'; with: 'amber-lang.net'].
|
|
|
|
+ html p with: [
|
|
|
|
+ html a href: 'https://github.com/NicolasPetton/amber'; with: 'github.com/NicolasPetton/amber'].
|
|
|
|
+ html p with: [
|
|
|
|
+ html a href: 'http://groups.google.com/group/amber-lang'; with: 'groups.google.com/group/amber-lang']]
|
|
|
|
+! !
|
|
|
|
+
|