Skip to content

Commit

Permalink
Merge branch 'release/1.2.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
Lionel Laské committed Sep 26, 2019
2 parents e361296 + a6b99d4 commit dd3c58d
Show file tree
Hide file tree
Showing 1,981 changed files with 468,254 additions and 262,207 deletions.
68 changes: 68 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,74 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).

## [1.2.0] - 2019-09-26
### Added
- Write activity
- Constellation activity
- Pomodoro activity
- QR Code for scanning server URL on iOS/Android
- Update to official Scratch 3.3 release
- Support for localization in Scratch
- Improved Exerciser activity: multimedia support, new templates, results detail
- Dynamically generate favicon and title
- Architecture page and schemas
- Tutorial step 7: use journal chooser dialog
- Tutorial step 8: create your own palette
- Use IndexedDB instead of localStorage for storing Journal items content
- Support for TXT/DOC/ODT/PDF files in Journal
- Support for MP3/MP4 files in Journal
- Add export sound to Journal feature in Abecedarium activity
- Add export video to Journal feature in VideoViewer activity
- Click on a PDF in Journal now open a preview window
- Add access to Abecedarium database (image/sound) from Journal Chooser popup
- Allow move/resize of inserted image in Paint activity

### Changed
- Improve consistency about shared palette position in toolbar

### Fixed
- QRCode and Record no longer work on Chrome 71
- Add a delete button in the new idea input field of Labyrinth activity #262
- Increase size of items in StopWatch activity #261
- Save Maze level in Journal #260
- Bad localization for some countries name in Color My World activity #265
- Integrate presence in Labyrinth activity #263
- Improve Record activity to see picture in real time #266
- Allow clicking on Abacus balls to move it #146
- Memorize responsive seems broken on phones #106
- Stopwatch Activity, lap Timings vanish after a few recordings #280
- Turtle Blocks Activity hangs on Android App #185
- Sugarizer OS hang when multiple click on an icon #338
- Message overlaps with user name in Chat Activity #328
- Jappy Activity print preview popup #326
- Toolbar overlap issue in Speak Activity #324
- Smileys not displayed properly in chat prototype activity #322
- Cursor issue in calculator activity on Chrome #318
- Duplicated text in QR Code Activity history #314
- Audio bar not displaying in chrome when opening a audio file #312
- Display language settings in 2 languages #292
- Gear colours are reset on resume #336
- Added Tool tips to Calculate Activity
- Users should be able to send images in chat prototype #330
- No erase button for recordings in Record activity #344
- Order Journal filter by activity name
- Snapcraft version lost context #346
- Snapcraft version don't allow to import/export file into/from Journal #350
- Update home image for TankOp activity
- Grammatical Errors in the Documentation #347
- Now support offline mode on Scratch for iOS
- Camera doesn't work on Record/QRCode activities for Snapcraft version #351
- Add a pause button to the Physics activity #354
- Context is lost the second time in Abecedarium activity #359
- Sound not play on Memorize activity in iOS
- Record activity don't work in Safari #362
- Error in console in Calculate activity when reopen an empty instance #358
- Localize activity name in title
- Activity palette icon has reversed colors
- XOEditor activity generate multiple entries in the Journal #370
- Clear icon in XOEditor activity is not consistent #372


## [1.1.0] - 2019-01-20
### Added
- Desktop version for GNU Linux, MacOS and Windows using electron
Expand Down
6 changes: 4 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
As all Open Source software, contributions to Sugarizer are welcome.

The best way to start is to do the whole [tutorial](docs/tutorial.md). It will give you a good understanding of Sugarizer internal.
The best way to start is to read the [architecture](docs/architecture.md) then to do the whole [tutorial](docs/tutorial.md). It will give you a good understanding of Sugarizer internal.

Then, you could start to contribute by trying to fix some existing issues [here](https://github.com/llaske/Sugarizer/issues).

Expand All @@ -10,4 +10,6 @@ Note than the **master** branch of the repository is for released/stable version
* Update it with your contribution,
* Send a pull request to the repository.

Thanks in advance for your contribution.
Please note there is no need to ask permission to work on an issue. You should check for pull requests linked to an issue you are addressing; if there are none, then assume nobody has done anything. Begin to fix the problem, test, make your commits, push your commits, then make a pull request. Mention an issue number in the pull request, but not the commit message. These practices allow the competition of ideas and give priority to meritocracy.

Thanks in advance for your contribution.
5 changes: 3 additions & 2 deletions Gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ module.exports = function(grunt) {
'activities/ChatPrototype.activity/**/*.js',
'activities/Clock.activity/**/*.js',
'activities/ColorMyWorld.activity/**/*.js',
'activities/Cordova.activity/**/*.js',
'activities/Constellation.activity/**/*.js',
'activities/Etoys.activity/**/*.js',
'activities/EbookReader.activity/lib/*.js', // TODO: js/vue.js don't work
'activities/Flip.activity/**/*.js',
Expand All @@ -38,6 +38,7 @@ module.exports = function(grunt) {
'activities/Moon.activity/**/*.js',
'activities/Paint.activity/**/*.js',
'activities/PhysicsJS.activity/**/*.js',
'activities/Pomodoro.activity/**/*.js',
'activities/QRCode.activity/**/*.js',
'activities/Record.activity/lib/*.js', // TODO: js/recordrtc.js don't work
'activities/Reflection.activity/**/*.js',
Expand All @@ -49,7 +50,7 @@ module.exports = function(grunt) {
'activities/TankOp.activity/**/*.js',
'activities/TurtleBlocksJS.activity/**/*.js',
'activities/VideoViewer.activity/**/*.js',
'activities/WelcomeWeb.activity/**/*.js',
'activities/Write.activity/js/*.js', // TODO: lib/quill is in ES6
'activities/XOEditor.activity/**/*.js'
],
dest: 'build/'
Expand Down
83 changes: 40 additions & 43 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
![](images/sugar_animation.gif)
![](images/sugarizer_logo_with_text.svg)

# What is Sugarizer ?

The [Sugar Learning Platform](https://sugarlabs.org/) is a leading learning platform that began in the famous One Laptop Per Child project.
It is used every day by nearly 3 million children around the world.
Sugarizer is a free/libre learning platform. The Sugarizer UI use ergonomic principles from The [Sugar platform](https://sugarlabs.org/), developed for the One Laptop per Child project and used every day by more than 2 million children around the world.

Sugarizer is a web implementation of the platform and runs on every device - from tiny Raspberry Pi computers to small Android and iOS phones to tablets and to laptops and desktops.
Sugarizer runs on every device: from Raspberry Pi computers to Android and iOS phones to tablets and to laptops and desktops.

Like Sugar, Sugarizer includes a bunch of pedagogic activities thought for children.
Sugarizer includes a bunch of pedagogic activities thought for children, see [here](https://sugarizer.org) for more.

Sugarizer is available as:

* Application: an installable app for every operating system
* Web Application: a web application that runs in modern web browsers

Enjoy the experience and help us reach every child on every device in every country.

# Sugarizer Application

Expand Down Expand Up @@ -59,11 +57,11 @@ You could use Sugarizer desktop arguments using "--" after start. For example:

npm start -- --window

To run **Sugarizer Application from the Web Browser** (GNU Linux/Mac OS/Windows), you should launch it with a special option to enable access to local files.
To run locally **Sugarizer Application into the Web Browser** (GNU Linux/Mac OS/Windows), you should launch it with a special option to enable access to local files.

For **Chrome**, close ALL running instances of Chrome and re-launch it using the command line:

chrome --allow-file-access-from-files index.html
chrome --allow-file-access-from-files index.html

On Windows, you should launch:

Expand All @@ -73,6 +71,12 @@ On Mac OS, you should launch:

open -n /Applications/Google\ Chrome.app --args --allow-file-access-from-files

On Linux, you should launch:

google-chrome-stable --allow-file-access-from-files index.html

> Note: `google-chrome-stable` is the name of Chrome in Ubuntu but it could be different on other distribution, you can get the package-name for Chrome by running `sudo dpkg -l | grep chrome`
For **Firefox**, type in the address bar:

about:config
Expand All @@ -99,15 +103,20 @@ To install your own Sugarizer Server, follow instructions on



# Activities
# Architecture

If you're a developer and you want to learn more about Sugarizer architecture, see the dedicated page [here](docs/architecture.md).


Sugarizer includes a bunch of pedagogic activities.
All activities could be found in the [activities](activities) directory. Each activity has its own subdirectory. So for example, the *Abecedarium* activity is located in [activities/Abecedarium.activity](activities/Abecedarium.activity)

# Activities distribution

All activities could be found in the [activities](../activities) directory. Each activity has its own subdirectory. So for example, the *Abecedarium* activity is located in [activities/Abecedarium.activity](../activities/Abecedarium.activity)

You could distribute Sugarizer with whatever activities you want.
To do that, you first need to adapt the content of the [activities](activities) directory to match your wish: removing activities you don't want to distribute and adding in this directory new activities you want to include.
To do that, you first need to adapt the content of the [activities](../activities) directory to match your wish: removing activities you don't want to distribute and adding in this directory new activities you want to include.

Then you need to update the [activities.json](activities.json) file to reflect your choice.
Then you need to update the [activities.json](../activities.json) file to reflect your choice.
Here an example of this file:

[
Expand Down Expand Up @@ -152,8 +161,8 @@ Remove in this file rows for activities that you want to remove. Add in this fil

Note than:

1. The [activities/ActivityTemplate](activities/ActivityTemplate) directory does not contain a real activity. It's just a template that you could use to create your own activity.
2. The [activities.json](activities.json) is used only by Sugarizer Application, the Web Application relies on the */api/activities* API that dynamically browse the [activities](activities) directory. By the way, it's a good practice to match the content of the activities.json file and the content of the activities directory.
1. The [activities/ActivityTemplate](../activities/ActivityTemplate) directory does not contain a real activity. It's just a template that you could use to create your own activity.
2. The [activities.json](../activities.json) is used only by Sugarizer Application, the Web Application relies on the */api/activities* API that dynamically browse the [activities](../activities) directory. By the way, it's a good practice to match the content of the activities.json file and the content of the activities directory.

# Create your own activity

Expand All @@ -169,6 +178,8 @@ If you're interested to create your own activity, a full tutorial will guide you
* **Step 4**: handle journal and datastore
* **Step 5**: localize the activity
* **Step 6**: handle multi-user with presence
* **Step 7**: use journal chooser dialog
* **Step 8**: create your own palette

Let's start [here](docs/tutorial.md).

Expand All @@ -182,40 +193,22 @@ To run unit tests for Sugarizer Application, run "file:///PathToYourSugarizerRep

Sugarizer Application could be packaged as an Android or iOS application using [Cordova](http://cordova.apache.org/).

To build it, first install Cordova as described [here](http://cordova.apache.org/).

Then create a directory for Sugarizer Cordova and put the content of the git repository in the www directory:

cordova create sugar-cordova
cd sugar-cordova
rm config.xml
rm -fr www
git clone https://github.com/llaske/sugarizer.git www
A dedicated tool named [Sugarizer APK Builder](https://github.com/llaske/sugarizer-apkbuilder) allow you to create the Android packaging without any Android knowledge.

Add the platform you want to add (here Android):
If you want to build it yourself, you could adapt the [source code](https://github.com/llaske/sugarizer-apkbuilder/blob/master/src/make_android.sh) of this tool.

cordova platform add android

Replace the auto generated config.xml file by the Sugarizer one:

cp www/config.xml .

Build the package:

cordova build android

On Android, if you want to generate the Sugarizer OS version, remove the SugarizerOS comment around the `cordova-plugin-sugarizeros` plugin in [config.xml](config.xml) file.

# Reduce package size

The current size of Sugarizer is about 300 Mb. This huge size is related to media content and resources include in two activities:
The current size of Sugarizer is more than 350 Mb. This huge size is related to media content and resources include in three activities:

* **Abecedarium activity**: about 150 Mb
* **Etoys activity**: about 100 Mb
* **Scratch activity**: about 50 Mb

By the way, both activities are able to retrieve the content remotely if its not deployed locally. So, if you want to reduce the Sugarizer package size (specifically for deployment on mobile) you could either remove completely those two activities or just remove the media content of this activities.
By the way, these activities are able to retrieve the content remotely if its not deployed locally. So, if you want to reduce the Sugarizer package size (specifically for deployment on mobile) you could either remove completely those three activities or just remove the media content of these activities.

To remove activities, just remove both activities directory and update [activities.json](activities.json) file as explain above.
To remove activities, just remove these activities directory and update [activities.json](activities.json) file as explain above.

To remove media content for **Abecedarium**, remove directories:

Expand All @@ -224,9 +217,11 @@ To remove media content for **Abecedarium**, remove directories:
* [activities/Abecedarium.activity/audio/es](activities/Abecedarium.activity/audio/es)
* [activities/Abecedarium.activity/images/database](activities/Abecedarium.activity/images/database)

The activity will look for media content on the server referenced in [activities/Abecedarium.activity/config.js](activities/Abecedarium.activity/config.js), by default `http://server.sugarizer.org/activities/Abecedarium.activity/`.
The activity will look for media content on the server referenced in [activities/Abecedarium.activity/database/db_url.json](activities/Abecedarium.activity/database/db_url.json), by default `http://server.sugarizer.org/activities/Abecedarium.activity/`.

To remove resources for **Etoys**, remove directory [activities/Etoys.activity/resources](activities/Etoys.activity/resources) and replace the value `resources/etoys.image` in [activities/Etoys.activity/index.html](activities/Etoys.activity/index.html) by the remote location of the resources, for example `http://server.sugarizer.org/activities/Etoys.activity/resources/etoys.image`.

To remove resources for **Etoys**, remove directory [activities/Etoys.activities/resources](activities/Etoys.activities/resources) and replace the value `resources/etoys.image` in [activities/Etoys.activities/index.html](activities/Etoys.activities/index.html) by the remote location of the resources, for example `http://server.sugarizer.org/activities/Etoys.activity/resources/etoys.image`.
To remove resources for **Scratch**, remove directory [activities/Scratch.activity/static/internal-assets](activities/Scratch.activity/static/internal-assets) and remove the value `class="offlinemode"` in [activities/Scratch.activity/index.html](activities/Scratch.activity/index.html).

# Optimize performance

Expand All @@ -240,7 +235,7 @@ The [Gruntfile.js](Gruntfile.js) contains tasks settings to build an optimized v

Then install specific component for Sugarizer by running:

npm install
npm install --dev

Finally launch:

Expand Down Expand Up @@ -305,4 +300,6 @@ Read [CONTRIBUTING](CONTRIBUTING.md) to learn more about how to contribute to Su

# License

Sugarizer is licensed under the `Apache v2` license. See [LICENSE](LICENSE) for full license text. Most Sugarizer activities use this license too but some could use a different license, check the [activities](activities) directory to be sure.
Sugarizer is licensed under the **Apache-2.0** license. See [LICENSE](LICENSE) for full license text. Most Sugarizer activities use this license too but some use a different license, see [here](docs/licenses.md) for details.

[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
Loading

0 comments on commit dd3c58d

Please sign in to comment.