Browse Source

Cleanup for the release:
- removed the old makefile
- removed the website

Nicolas Petton 11 years ago
parent
commit
f389032c5c
10 changed files with 3 additions and 2841 deletions
  1. 0 46
      Makefile
  2. 0 84
      css/documentation.css
  3. 0 75
      css/profstef.css
  4. 0 37
      documentation.html
  5. BIN
      favicon.ico
  6. 3 98
      index.html
  7. 0 797
      js/Documentation.deploy.js
  8. 0 1058
      js/Documentation.js
  9. 0 40
      learn.html
  10. 0 606
      st/Documentation.st

+ 0 - 46
Makefile

@@ -1,46 +0,0 @@
-# Makefile for sub directories
-AMBER = st
-SERVER = server
-REPL = repl
-
-# REST is all except AMBER
-REST = $(SERVER) $(REPL)
-
-# And these are all
-DIRS = $(AMBER) $(REST)
-
-# The sets of directories to do various things in
-BUILDDIRS = $(DIRS:%=build-%)
-INSTALLDIRS = $(AMBER:%=install-%)
-CLEANDIRS = $(REST:%=clean-%)
-CLEANALLDIRS = $(DIRS:%=clean-%)
-
-all: $(BUILDDIRS)
-$(DIRS): $(BUILDDIRS)
-$(BUILDDIRS):
-	$(MAKE) -C $(@:build-%=%)
-
-amber: build-st
-
-# server needs Amber first
-build-server: build-st
-
-install: $(INSTALLDIRS)
-$(INSTALLDIRS):
-	$(MAKE) -C $(@:install-%=%) install
-
-clean: $(CLEANDIRS)
-$(CLEANDIRS): 
-	$(MAKE) -C $(@:clean-%=%) clean
-
-cleanall: $(CLEANALLDIRS) 
-$(CLEANALLDIRS): 
-	$(MAKE) -C $(@:clean-%=%) clean
-
-
-.PHONY: subdirs $(DIRS)
-.PHONY: subdirs $(BUILDDIRS)
-.PHONY: subdirs $(INSTALLDIRS)
-.PHONY: subdirs $(CLEANDIRS)
-.PHONY: subdirs $(CLEANALLDIRS)
-.PHONY: all install clean

+ 0 - 84
css/documentation.css

@@ -1,84 +0,0 @@
-#wrapper {
-    margin-left: 350px;
-    text-align: left;
-}
-
-#header {
-    text-align: left;
-    margin: 20px 0;
-}
-
-#header .left {
-    float: left;
-    margin-right: 20px;
-}
-
-#header h1 {
-    margin: 10px 0;
-}
-
-.documentation {
-    border-top: 1px solid #999;
-}
-
-.documentation a {
-    color: #C71212;
-    cursor: pointer;
-}
-
-.documentation a:hover {
-    color: white;
-    background: #D15E5E;
-    text-decoration: none;
-}
-
-.documentation pre {
-    border-radius: 3px;
-    border: 1px solid #ccc;
-    background: #eee;
-    padding: 5px;
-    margin: 0 20px;
-}
-
-.documentation code {
-    background: #eee;
-    padding: 0 5px;
-}
-
-
-.documentation .menu {
-    position: fixed;
-    left: 0;
-    bottom: 0;
-    top: 0;
-    width: 300px;
-    background: #ddd;
-    overflow-y: scroll;
-}
-
-.documentation .doc_chapter {
-    position: absolute;
-    background: #fafafa;
-    left: 300px;
-    right: 0;
-    padding: 0 20px;
-}
-
-.documentation .doc_chapter a {
-    background: #eae3c6;
-}
-
-.documentation .doc_chapter a:hover {
-    background: #D15E5E;
-    color: white;
-}
-
-.documentation .doc_chapter .links {
-    border-top: 1px solid #999;
-    margin-top: 10px;
-    padding-top: 10px;
-}
-
-.documentation .doc_chapter h2 {
-    border-bottom: 1px solid #999;
-}

+ 0 - 75
css/profstef.css

@@ -1,75 +0,0 @@
-html,body {
-	margin: 0;
-	padding: 0;
-	font: 14px "Helvetica Neue", "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, sans-serif;
-	line-height: 1.5;
-	color: #444;
-}
-
-/* Fonts */
-
-h1, h2, h3 {
-    font-family: 'Istok Web';
-    font-weight: normal;
-    color: #442905;
-    line-height: 1.2;
-}
-
-h1 {
-    text-align: center;
-    font-weight: bold;
-    text-shadow: 0px 1px 1px #FFF;
-}
-
-
-.main {
-    width: 900px;
-    margin: 0;
-    border: 0;
-    text-align: center;
-    margin: 0 auto;
-}
-
-.main img {
-    margin: 30px 0;
-}
-
-a#back {
-    color: #666;
-    padding: 20px 0;
-}
-
-#tutorial {
-    padding: 20px 40px;
-    margin: 30px 0;
-    text-align: left;
-    border: 12px solid #aaa;
-    border-radius: 8px;
-    -webkit-border-radius: 8px;
-    -moz-border-radius: 8px;
-}
-
-#tutorial .CodeMirror-scroll {
-    overflow: auto;
-    height: auto;
-}
-
-#footer .main {
-    	border-top: 1px dashed #bbb;
-	padding-top: 10px;
-}
-
-#footer p {
-	text-align: center;
-	line-height: 1em;
-	color: #aaa;
-}
-
-#footer a {
-	color: #3faae1;
-	text-decoration: none;
-}
-
-#footer a:hover {
-	text-decoration: underline;
-}

+ 0 - 37
documentation.html

@@ -1,37 +0,0 @@
-<!DOCTYPE html> 
-<html> 
-  <head> 
-    <title>Amber Smalltalk - Documentation</title> 
-    <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
-    <meta name="author" content="Nicolas Petton" /> 
-    <link rel="stylesheet" type="text/css" href='css/style.css' /> 
-    <link rel="stylesheet" type="text/css" href='css/documentation.css' /> 
-    <link type="image/x-icon" rel="shortcut icon" href="/favicon.ico"/> 
-    <link href='http://fonts.googleapis.com/css?family=Istok+Web' rel='stylesheet' type='text/css'> 
-    <script type='text/javascript' src='js/amber.js'></script> 
-    <script type='text/javascript' src='js/lib/showdown.js'></script> 
-  </head> 
-  <body> 
-    
-    <div id="wrapper"> 
-      
-      <div id="header"> 
-	<img class="left" src="images/amber_small.png"/> 
-	<div class="left">
-	  <h1>Amber Smalltalk - documentation</h1>
-	  <h2>Version 0.10</h2>
-	</div>
-	<div class="clear"></div>
-      <ul id="tabs"> 
-	<li><a href="./index.html">Overview</a></li> · 
-	<li><a href="./learn.html">Learn</a></li> ·
-	<li><a href="./documentation.html">Documentation</a></li> ·
-	<li><a target="_blank" target="_blank" href="https://github.com/NicolasPetton/amber">Source</a></li> 
-      </ul> 
-      
-      <div class="clear"></div> 
-    </div>
-    <script type='text/javascript'> loadAmber({files: ['Documentation.js']}) </script> 
-    
-  </body> 
-</html> 

BIN
favicon.ico


+ 3 - 98
index.html

@@ -1,109 +1,14 @@
 <!DOCTYPE html> 
 <html> 
+
   <head> 
     <title>Amber Smalltalk</title> 
     <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
     <meta name="author" content="Nicolas Petton" /> 
-    <link rel="stylesheet" type="text/css" href='css/style.css' /> 
-    <link type="image/x-icon" rel="shortcut icon" href="/favicon.ico"/> 
-    <link href='http://fonts.googleapis.com/css?family=Istok+Web' rel='stylesheet' type='text/css'> 
     <script type='text/javascript' src='js/amber.js'></script> 
-    <script type='text/javascript' src='js/lib/showdown.js'></script> 
   </head> 
+
   <body> 
-    
-    <a href="http://github.com/NicolasPetton/amber"><img style="position: absolute; top: 0; left: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_left_orange_ff7600.png" alt="Fork me on GitHub"></a>
-    
-    <div id="wrapper"> 
-      
-      <div id="header"> 
-	<div class="main"> 
-	  <div class="logo"> 
-	    <img src="images/amber.png"/> 
-	  </div> 
-	  
-	  <ul id="tabs"> 
-	    <li><a href="./index.html">Overview</a></li> · 
-	    <li><a href="./learn.html">Learn</a></li> ·
-	    <li><a href="./documentation.html">Documentation</a></li> ·
-	    <li><a target="_blank" target="_blank" href="https://github.com/NicolasPetton/amber">Source</a></li> 
-	  </ul> 
-	  
-	  <div class="clear"></div> 
-	  
-	</div> 
-      </div> 
-      
-      <div class="teaser"> 
-	<div class="main"> 
-	  <h1>Welcome aboard!</h1> 
-	  <div class="column">
-	    <h2>What is Amber?</h2>
-	    <p>Amber, formerly known as Jtalk, is an implementation of the Smalltalk-80 language. It is designed to make client-side development faster and easier. It allows developers to write client-side heavy web applications in Smalltalk. </p> 
-	    <p>Amber includes an integrated development environment with a class browser, workspace, transcript, object inspector and debugger.</p> 
-	    <p>Amber is written in itself, including the compiler, and compiles into efficient JavaScript, mapping one-to-one with the JS equivalent.</p> 
-	    <h2>Give it a try!</h2>
-	    <p><b>Try a <button onClick="smalltalk.Browser._open()"> Class browser</button> right now!</b></p> 
-	  </div> 
-	  <div class="column">
-	    <h2>Getting started</h2>
-	    <p>The <a href="https://github.com/NicolasPetton/amber/wiki">Wiki on GitHub</a> includes a <a href="https://github.com/NicolasPetton/amber/wiki/Getting-started">Getting started</a> tutorial for OSX, Linux and Windows.</p>
-	    <p>If you're new to Smalltalk, You can learn it online with <a href="http://amber-lang.net/learn.html">ProfStef</a>.</p>
-	    <h2>Join the community</h2>
-	    <ul>
-	      <li><a href="http://amber-lang.net">Amber's website</a></li>
-	      <li><a href="https://github.com/NicolasPetton/amber/wiki">Wiki on GitHub</a></li>
-	      <li><a href="http://groups.google.com/group/amber-lang">Mailing list</a></li>
-	      <li>Join us on IRC at #amber-lang on Freenode</li>
-	    </ul>
-	  </div>
-	  <div class="clear"></div> 
-	</div> 
-	
-	
-      </div> 
-      
-      <div id="content"> 
-	<div class="main"> 
-	  <div class="box"> 
-	    <h2>Client-side usage</h2> 
-	    <div class="content"> 
-	      <p>Load the full Amber Smalltalk environment with the IDE in your page:</p> 
-	      
-	      <code><pre>&lt;script src="js/amber.js" type="text/javascript"&gt;&lt;/script&gt;
-		  &lt;script type="text/javascript"&gt; loadAmber()&lt;/script&gt;</pre></code>
-	    </div> 
-	    
-	    
-	    <p>Or the deployment JavaScript file only (without the Smalltalk sources, parser, compiler and IDE):</p>
-	    <code><pre>&lt;script src="js/amber.js" type="text/javascript"&gt;&lt;/script&gt;
-		&lt;script type="text/javascript"&gt; loadAmber({deploy: true})&lt;/script&gt;</pre></code>
-	  </div> 
-	  
-	  <div class="box last examples"> 
-	    <h2>Examples</h2> 
-	    <div class="content"> 
-	      <ul>
-		<li>
-		  <a href="examples/presentation/index.html">
-		    <img src="images/presentation.png" alt="ESUG 2011 presentation"/>
-		  </a>
-		</li>
-		<li>
-		  <a href="examples/twitterwall/index.html">
-		    <img src="images/twitterwall.png" alt="Twitter Wall"/>
-		  </a>
-		</li>
-		<div class="clear"></div>
-	      </ul>
-	    </div> 
-	  </div> 
-	  
-	</div> 
-      </div> 
-    </div> 
-    
-    <script type='text/javascript'> loadAmber() </script> 
-    
+    <script type='text/javascript'> loadAmber({ready: function() {smalltalk.Browser._open()}}) </script> 
   </body> 
 </html> 

File diff suppressed because it is too large
+ 0 - 797
js/Documentation.deploy.js


File diff suppressed because it is too large
+ 0 - 1058
js/Documentation.js


+ 0 - 40
learn.html

@@ -1,40 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-    <title>Learn Smalltalk with ProfStef</title>
-    <link href='http://fonts.googleapis.com/css?family=Istok+Web' rel='stylesheet' type='text/css'> 
-    <meta name="author" content="Nicolas Petton">
-    <link rel="stylesheet" type="text/css" href="css/profstef.css">
-    <script type="text/javascript" src="js/amber.js"></script>
-  </head>
-  <body>
-
-    <div class="main">
-      <a id="back" href="./index.html"> &larr; back to main page </a>
-      <img src="images/profstef.png"/>
-      <h1>Hey there! Got 5 minutes? I'm prof Stef and I want to teach you Smalltalk. I promise, it won't take long!</h1> 
-      
-      <div id="tutorial"><h2>Loading...</h2></div>
-      <script> 
-	function loadTutorial() {
-		jQuery('#tutorial').empty();
-		smalltalk.TrySmalltalkWidget._new()._appendToJQuery_(jQuery('#tutorial'));
-	}
-      </script>
-    </div>
-    
-    <div id="footer">
-      <div class="main">
-	<p>Copyright © 2011 <a href="http://www.nicolas-petton.fr/">Nicolas Petton</a>. The content of this website in licensed under <a href="http://creativecommons.org/licenses/by-nc/3.0/">CC-BY-NC 3.0</a>.</p>
-	<p>Amber is an opensource project sponsored by <a href="http://www.objectfusion.fr/">objectfusion</a>.</p>
-      </div> 
-    </div>
-
-    <script type="text/javascript">
-      loadAmber({files: ['TrySmalltalk.js'], prefix: 'examples/trysmalltalk/js', ready: loadTutorial});
-    </script>    
-
-
-  </body>
-</html>

+ 0 - 606
st/Documentation.st

@@ -1,606 +0,0 @@
-Smalltalk current createPackage: 'Documentation' properties: #{}!
-Object subclass: #ChapterSelectionAnnouncement
-	instanceVariableNames: 'id'
-	package: 'Documentation'!
-
-!ChapterSelectionAnnouncement methodsFor: 'accessing'!
-
-id
-	^id
-!
-
-id: aString
-	id := aString
-! !
-
-Object subclass: #ClassSelectionAnnouncement
-	instanceVariableNames: 'theClass'
-	package: 'Documentation'!
-
-!ClassSelectionAnnouncement methodsFor: 'accessing'!
-
-theClass
-	^theClass
-!
-
-theClass: aClass
-	theClass := aClass
-! !
-
-!ClassSelectionAnnouncement class methodsFor: 'instance creation'!
-
-on: aClass
-	^self new
-		theClass: aClass;
-		yourself
-! !
-
-Widget subclass: #DocChapter
-	instanceVariableNames: 'title contents parent level'
-	package: 'Documentation'!
-
-!DocChapter methodsFor: 'accessing'!
-
-announcer
-	^DocumentationBuilder current announcer
-!
-
-chapters
-	"A doc chapter can contain sub chapters"
-	^#()
-!
-
-contents
-	^contents ifNil: ['']
-!
-
-contents: aString
-	contents := aString
-!
-
-cssClass
-	^'doc_chapter'
-!
-
-htmlContents
-	^(Showdown at: #converter) new makeHtml: self contents
-!
-
-id
-	"The id is used in url fragments. 
-	It must be unique amoung all chapters"
-	^self title replace: ' ' with: '-'
-!
-
-level
-	^self parent ifNil: [1] ifNotNil: [self parent level +1]
-!
-
-level: anInteger
-	level := anInteger
-!
-
-parent
-	^parent
-!
-
-parent: aChapter
-	parent := aChapter
-!
-
-title
-	^title ifNil: ['']
-!
-
-title: aString
-	title := aString
-! !
-
-!DocChapter methodsFor: 'actions'!
-
-displayChapter: aChapter
-	DocumentationBuilder current widget displayChapter: aChapter
-!
-
-selectChapter: aChapter
-	document location hash: aChapter id
-!
-
-selectClass: aClass
-	DocumentationBuilder current announcer announce: (ClassSelectionAnnouncement on: aClass)
-! !
-
-!DocChapter methodsFor: 'initialization'!
-
-initialize
-	super initialize.
-	self subscribe
-! !
-
-!DocChapter methodsFor: 'rendering'!
-
-renderDocOn: html
-	| div |
-	html h1 with: self title.
-	self renderNavigationOn: html.
-	div := html div class: 'contents'.
-	div asJQuery html: self htmlContents
-!
-
-renderLinksOn: html
-	html ul 
-		class: 'links';
-		with: [
-			self chapters do: [:each |
-				html li with: [
-					html a
-						with: each title;
-						onClick: [self selectChapter: each]]]]
-!
-
-renderNavigationOn: html
-	self parent ifNotNil: [
-		html div 
-			class: 'navigation'; with: [
-				html a
-					with: '← back to ', self parent title;
-					onClick: [self selectChapter: self parent]]]
-!
-
-renderOn: html
-	html div 
-		class: self cssClass;
-		with: [
-			self renderDocOn: html.
-			self renderLinksOn: html]
-! !
-
-!DocChapter methodsFor: 'subscriptions'!
-
-subscribe
-	self announcer on: ChapterSelectionAnnouncement do: [:ann |
-		ann id = self id ifTrue: [self displayChapter: self]]
-! !
-
-DocChapter subclass: #ClassDocChapter
-	instanceVariableNames: 'theClass'
-	package: 'Documentation'!
-
-!ClassDocChapter methodsFor: 'accessing'!
-
-contents
-	^self theClass comment isEmpty
-		ifTrue: [self theClass name, ' is not documented yet.']
-		ifFalse: [self theClass comment]
-!
-
-cssClass
-	^'doc_class ', super cssClass
-!
-
-initializeWithClass: aClass
-	theClass := aClass
-!
-
-theClass
-	^theClass
-!
-
-title
-	^self theClass name
-! !
-
-!ClassDocChapter methodsFor: 'rendering'!
-
-renderLinksOn: html
-	html ul 
-		class: 'links';
-		with: [
-			html li with: [html a
-				with: 'Browse this class';
-				onClick: [Browser openOn: self theClass]]]
-! !
-
-!ClassDocChapter methodsFor: 'subscriptions'!
-
-subscribe
-	super subscribe.
-	self announcer 
-		on: ClassSelectionAnnouncement do: [:ann |
-			ann theClass = self theClass ifTrue: [
-				self selectChapter: self]]
-! !
-
-!ClassDocChapter class methodsFor: 'accessing'!
-
-on: aClass
-	^self basicNew
-		initializeWithClass: aClass;
-		initialize;
-		yourself
-! !
-
-DocChapter subclass: #ClassesIndexChapter
-	instanceVariableNames: ''
-	package: 'Documentation'!
-
-!ClassesIndexChapter methodsFor: 'accessing'!
-
-alphabet
-	^'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-!
-
-cssClass
-	^'index_doc ', super cssClass
-!
-
-title
-	^'Smalltalk classes by index'
-! !
-
-!ClassesIndexChapter methodsFor: 'rendering'!
-
-renderDocOn: html
-	html h1 with: self title.
-	self alphabet do: [:letter || classes |
-		classes := Smalltalk current classes select: [:each | each name first = letter].
-		classes ifNotEmpty: [html h2 with: letter].
-		html ul with: [
-			(classes sorted: [:a :b | a name < b name]) 
-				do: [:each |
-					html li with: [html a 
-						with: each name;
-						onClick: [self selectClass: each]]]]]
-! !
-
-DocChapter subclass: #PackageDocChapter
-	instanceVariableNames: 'package chapters'
-	package: 'Documentation'!
-
-!PackageDocChapter methodsFor: 'accessing'!
-
-chapters
-	^chapters
-!
-
-contents
-	^'Classes in package ', self package name, ':'
-!
-
-package
-	^package
-!
-
-title
-	^'Package ', self package name
-! !
-
-!PackageDocChapter methodsFor: 'initialization'!
-
-initializeWithPackage: aPackage
-	package := aPackage.
-	chapters := (aPackage classes sorted: [:a :b | a name < b name]) collect: [:each |
-		(ClassDocChapter on: each)
-			parent: self;
-			yourself]
-! !
-
-!PackageDocChapter class methodsFor: 'instance creation'!
-
-on: aPackage
-	^self basicNew
-		initializeWithPackage: aPackage;
-		initialize;
-		yourself
-! !
-
-DocChapter subclass: #TutorialsChapter
-	instanceVariableNames: ''
-	package: 'Documentation'!
-
-!TutorialsChapter methodsFor: 'accessing'!
-
-contents
-	^'You can find a list of [Tutorials](https://github.com/amber-smalltalk/amber/wiki/Tutorials) on the [Github wiki](https://github.com/amber-smalltalk/amber/wiki). If you are new to Smalltalk, you can also learn Amber online with [ProfStef](http://www.amber-lang.net/learn.html).'
-!
-
-title
-	^'Tutorials'
-! !
-
-Object subclass: #DocumentationBuilder
-	instanceVariableNames: 'chapters announcer widget'
-	package: 'Documentation'!
-
-!DocumentationBuilder methodsFor: 'accessing'!
-
-announcer
-	^announcer ifNil: [announcer := Announcer new]
-!
-
-chapters
-	^chapters ifNil: [chapters := self buildChapters]
-!
-
-widget
-	^widget ifNil: [widget := DocumentationWidget on: self]
-! !
-
-!DocumentationBuilder methodsFor: 'building'!
-
-build
-	self buildOnJQuery: ('body' asJQuery)
-!
-
-buildChapters
-	^((self class methodDictionary values sorted: [:a :b | a selector < b selector])
-		select: [:each | each category = 'chapters'])
-		collect: [:each | self perform: each selector]
-!
-
-buildOn: aCanvas
-	aCanvas with: self widget.
-	self 
-		checkHashChange;
-		checkHash
-!
-
-buildOnJQuery: aJQuery
-	self buildOn: (HTMLCanvas onJQuery: aJQuery)
-! !
-
-!DocumentationBuilder methodsFor: 'chapters'!
-
-ch1introduction
-	^DocChapter new
-		title: 'Introduction';
-		contents: '
-
-##Amber Smalltalk in a nutshell
-
-Amber is an implementation of the Smalltalk-80 language. It is designed to make client-side web development **faster, easier and more fun** as it allows developers to write HTML5 applications in a live Smalltalk environment!!
-
-Amber is written in itself, including the IDE and the compiler and it runs **directly inside your browser**. The IDE is fairly complete with a class browser, workspace, transcript, unit test runner, object inspectors, cross reference tools and even a debugger.
-
-Noteworthy features:
-
-- Amber is semantically and syntactically very close to [Pharo Smalltalk](http://www.pharo-project.org). Pharo is considered the reference implementation.
-- Amber **seamlessly interacts with JavaScript** and can use its full eco system of libraries without any glue code needed.
-- Amber **has no dependencies** and can be used in any JavaScript runtime, not only inside browsers. An important example is [Node.js](http://nodejs.org).
-- Amber is a live Smalltalk that **compiles incrementally into efficient JavaScript** often mapping one-to-one with JavaScript equivalents.
-- Amber has a **Seaside influenced canvas library** to dynamically generate HTML.
-
-## Why Amber?
-
-- JavaScript is quite a broken language with lots of traps and odd quirks. It is the assembler of the Internet which is cool, but we don''t want to write in it.
-- Amber is a language and environment built for the web. With Amber, client-side web development finally gets the power and productivity that exists in other Smalltalk dialects.
-- Smalltalk has a simple class model with a lightweight syntax for closures, it is in many ways a perfect match for the Good Parts of JavaScript. 
-  Smalltalk stands head and shoulders above most other languages for clarity, conciseness, and human-friendliness.
-  As a language, it is immensely clean and mature, both syntactically and semantically. It is a pure OO language, with objects all the way down.
-- Having a true live & incremental development environment where you can build your application interactively in the browser is unbeatable.
-
-## Disclaimer
-
-This documentation doesn''t aim to teach Smalltalk. 
-Knowledge of Smalltalk is needed to understand the topics covered in this documentation. 
-If you want to learn the Smalltalk language, you can read the excellent [Pharo By Example](http://www.pharobyexample.org) book.
-'
-!
-
-ch2differencesWithOtherSmalltalks
-	^DocChapter new
-		title: 'Differences with other Smalltalks';
-		contents: '
-Amber has some differences with other Smalltalk implementations. This makes porting code a non-trivial thing, but still quite manageable.
-Because it maps Smalltalk constructs one-to-one with the JavaScript equivalent, including Smalltalk classes to JavaScript constructors, the core class library is simplified compared to Pharo Smalltalk.
-And since we want Amber to be useful in building lean browser apps we can''t let it bloat too much.
-
-But apart from missing things other Smalltalks may have, there are also things that are plain different:
-
-- The collection class hierarchy is much simpler compared to most Smalltalk implementations. In part this is because we want to map reasonably well with JavaScript counter parts.
-- As of today, there is no SortedCollection. The size of arrays is dynamic, and they behave like an ordered collection. They can also be sorted with the `#sort*` methods.
-- The `Date` class behaves like the `Date` and `TimeStamp` classes in Pharo Smalltalk. Therefore both `Date today` and `Date now` are valid in Amber.
-- Amber does not have class Character, but `String` does implement some of Character behavior so a single character String can work as a Character.
-- Amber does support **class instance variables**, but not class variables.
-- Amber only has global classes and packages, but not arbitrary objects. Use classes instead like `Smalltalk current` instead of `Smalltalk` etc.
-- Amber does not support pool dictionaries.
-- Amber uses **< ...javascript code... >** to inline JavaScript code and does not have pragmas.
-- Amber does not have class categories. The left side in the browser lists real Packages, but they feel much the same.
-'
-!
-
-ch3GettingStarted
-	^DocChapter new
-		title: 'Getting started';
-		contents: '
-To get started hacking in Amber you can basically take three routes, independent of your platform:
-
-1. Just **try it out directly** at [www.amber-lang.net](http://www.amber-lang.net) - click the **Class browser** button there. But you will **not be able to save any code you write**!! 
-    Still, it works fine for looking at the IDE and playing around. Just **don''t press F5/reload** - it will lose any code you have written.
-2. Download an Amber zip-ball, install [Nodejs](http://www.nodejs.org), fire up the Amber server and then open Amber from localhost - then you **can save code**. Detailed instructions are below!!
-3. Same as above but install git first and get a proper clone from [http://github.com/NicolasPetton/amber](http://github.com/NicolasPetton/amber) instead of a zip/tar-ball. 
-    If you want to **contribute to Amber itself** this is really what you want to do. In fact, in most cases this is what you want to do. It requires installing git first, but it is quite simple - although we leave this bit as an "exercise to the reader" :)
-
-
-## Downloading Amber
-Currently you can download in zip or tar-ball format, either cutting edge or a release. [Downloads are available here](https://github.com/NicolasPetton/amber/archives/amber). 
-
-Unpack wherever you like, but I would rename the directory that is unpacked to something slightly shorter - like say "amber". :)
-And yes, at this point you can double click the index.html file in the amber directory to get the IDE up, but again, **you will not be able to save code**. So please continue below :)
-
-## Installing Node.js
-[Node](http://www.nodejs.org) (for short) is simply the V8 Javascript VM from Google (used in Chrome) hooked together with some hard core C-libraries for doing "evented I/O".
-Basically it''s JavaScript for the server - on asynch steroids. Amber runs fine in Node and we use it for several Amber tools, like amberc (the command line Amber compiler) or the Amber server (see below). 
-There are also several Amber-Node examples to look at if you want to play with running Amber programs server side. **In short - you really want to install Nodejs. :)**
-
-- Installing Node on Linux can be done using your package tool of choice (`apt-get install nodejs` for example) or any other way described at [the download page](http://nodejs.org/#download).
-- Installing Node on MacOS or Windows is probably done best by using the [installers available at Nodejs.org](http://nodejs.org/#download).
-
-## Starting Amber server
-Nicolas has written a minimal webDAV server that is the easiest way to get up and running Amber with the ability to save code. This little server is written in... Amber!! 
-And it runs on top of Node. So to start it up serving your brand new directory tree of sweet Amber you do:
-
-	cd amber	(or whatever you called the directory you unpackaged)
-	./bin/server	(in windows you type `node server\server.js` instead)
-
-It should say it is listening on port 4000. If it does, hooray!! That means both Node and Amber are good. In Windows you might get a question about opening that port in the local firewall - yep, do it!!
-
-## Firing up Amber
-The Amber IDE is written in... Amber. It uses [jQuery](http://jquery.com) and runs right in your browser as a ... well, a web page. 
-We could open it up just using a file url - but the reason we performed the previous steps is so that we can load the IDE web page from a server that can handle PUTs (webDAV) of source code. 
-According to web security Amber can only do PUT back to the same server it was loaded from. Thus we instead want to open it [through our little server now listening on port 4000](http://localhost:4000/index.html).
-Clicking that link and then pressing the **Class browser** should get your Amber IDE running with the ability to commit modified packages locally.
-
-To verify that you can indeed commit now - just select a Package in the browser, like say "Examples" and press the **Commit** button below. **If all goes well nothing happens :)**. 
-So in order to really know if it worked we can check the modified date on the files **amber/st/Examples.st**, **amber/js/Examples.js** and **amber/js/Examples.deploy.js** - they should be brand new.
-
-NOTE: We can use any webDAV server and Apache2 has been used earlier and works fine. But the Amber server is smaller and simpler to start.
-'
-!
-
-ch4Tutorials
-	^TutorialsChapter new
-!
-
-ch5Index
-	^ClassesIndexChapter new
-!
-
-ch6KernelObjects
-	^PackageDocChapter on: (Package named: 'Kernel-Objects')
-!
-
-ch7KernelClasses
-	^PackageDocChapter on: (Package named: 'Kernel-Classes')
-!
-
-ch8KernelCollection
-	^PackageDocChapter on: (Package named: 'Kernel-Collections')
-!
-
-ch9KernelMethods
-	^PackageDocChapter on: (Package named: 'Kernel-Methods')
-! !
-
-!DocumentationBuilder methodsFor: 'routing'!
-
-checkHash
-	| hash presentation |
-	hash := document location hash  replace: '^#' with: ''.
-	self announcer announce: (ChapterSelectionAnnouncement new 
-		id: hash; 
-		yourself)
-!
-
-checkHashChange
-	(window jQuery: window) bind: 'hashchange' do: [self checkHash]
-! !
-
-!DocumentationBuilder methodsFor: 'updating'!
-
-update
-	chapters := nil.
-	announcer := nil.
-	widget := nil.
-	(window jQuery: '.documentation') remove.
-	self build
-! !
-
-DocumentationBuilder class instanceVariableNames: 'current'!
-
-!DocumentationBuilder class methodsFor: 'accessing'!
-
-current
-	^current ifNil: [current := self new]
-! !
-
-!DocumentationBuilder class methodsFor: 'initialization'!
-
-initialize
-	self current build
-! !
-
-Widget subclass: #DocumentationWidget
-	instanceVariableNames: 'builder selectedChapter chapterDiv'
-	package: 'Documentation'!
-
-!DocumentationWidget methodsFor: 'accessing'!
-
-builder
-	^builder
-!
-
-builder: aDocumentationBuilder
-	builder := aDocumentationBuilder
-!
-
-chapters
-	^self builder chapters
-!
-
-selectedChapter
-	^selectedChapter ifNil: [selectedChapter := self chapters first]
-!
-
-selectedChapter: aChapter
-	^selectedChapter := aChapter
-! !
-
-!DocumentationWidget methodsFor: 'actions'!
-
-displayChapter: aChapter
-	self selectedChapter: aChapter.
-	self updateChapterDiv
-!
-
-selectChapter: aChapter
-	document location hash: aChapter id
-! !
-
-!DocumentationWidget methodsFor: 'rendering'!
-
-renderChapterMenu: aChapter on: html
-	html a
-		with: aChapter title;
-		onClick: [
-			self selectChapter: aChapter].
-	html ol with: [
-			aChapter chapters do: [:each |
-				html li with: [
-					self renderChapterMenu: each on: html]]]
-!
-
-renderMenuOn: html
-	html div 
-		class: 'menu';
-		with: [
-			html ol with: [
-				self chapters do: [:each |
-					html li with: [
-						self renderChapterMenu: each on: html]]]]
-!
-
-renderOn: html
-	html div 
-		class: 'documentation';
-		with: [
-			self renderMenuOn: html.
-			chapterDiv := html div.
-			self updateChapterDiv]
-! !
-
-!DocumentationWidget methodsFor: 'updating'!
-
-updateChapterDiv
-	chapterDiv contents: [:html |
-		html with: self selectedChapter]
-! !
-
-!DocumentationWidget class methodsFor: 'instance creation'!
-
-on: aBuilder
-	^self new
-		builder: aBuilder;
-		yourself
-! !
-

Some files were not shown because too many files changed in this diff