Skip to content

Commit

Permalink
Merge branch 'release/1.4.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
Lionel Laské committed Sep 23, 2020
2 parents f0dca5b + b75e6f7 commit c030438
Show file tree
Hide file tree
Showing 2,012 changed files with 271,789 additions and 56,539 deletions.
63 changes: 62 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,68 @@ 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.3.0] - 2020-03-27
## [1.4.0] - 2020-03-23
### Added
- Fraction activity #205
- Implode activity #710
- Planets activity
- Chess activity
- Curriculum activity
- MindMath activity
- Vote activity
- Tangram activity
- Simon mode game in TamTam activity #686
- Vue.js activity template
- Activity Development Tutorial in Vue.js
- Duplicate action on Journal entries
- ES6 compatibility for activities (except modules)
- Support autologoff mode for Electron and Sugarizer OS
- Support for native Android app in activities.json
- Join shared activity in one click in neighborhood view

### Changed
- Improve Presence palette UI, now handle list of users and disconnection
- Improve Sugarizer spiral in home view #579
- Localize and standardize activities title

### Fixed
- Falabracman activity don't detect win condition for restarted game #723
- Falabracman only accepts a specific letter in case of repeated letters in a word #725
- Speak Text button hides text under it in speak activity #727
- Video Viewer shows tutorial for a feature not available #731
- Labyrinth shows tutorial for functions not available on small screens #733
- Blockrain tutorial overflows off screen on smaller screens #736
- Get Things Done can't handle multiple lines #741
- Stop button not visible in Scratch activity on small screens #715
- Wrong title of network button in Memorize activity #745
- Text not showing under erase button in qr-code activity #700
- Food Chain tutorial off screen in small resolutions #752
- Food Chain activity palette behind canvas #754
- Awkward placement of Labyrinth canvas tutorial #758
- Stopwatch activity palette text not visible #756
- Tutorial button hidden on login screens #697
- Pomodoro timer resets on break change #750
- Awkward positioning of contents in the searchfield of video viewer activity #761
- Size and speed palettes of game of life activity don't works on touch screen #766
- Speech and Face Palettes of speak activity doesn't work on touch screen #764
- Keyboard overlaps input fields on Android #739
- Alignment of help button in some activities #777
- Presence palette implementation in Memorize is non standard #374
- Splitbar in toolbar of Clock activity are half sized in Chrome #789
- Wrong title of blinker button in Game Of Life activity #792
- Alert "user already exists" should come earlier #580
- Wrong song is play on slow device/connection in TamTam activity #803
- Removed resize option in Shared Notes
- When connected to server, activities get shared automatically #810
- Private button in presence palette shares the activity #811
- Export palette in Write activity pop at the wrong place #807
- Last One Loses activity is unplayable after sharing without second player #815
- Spinner on first screen is at the bottom of the screen
- Countries and view palettes pop at the wrong place in Constellation activity
- Timer in chess activity stops on inactive tabs #828


## [1.3.0] - 2020-03-28
### Added
- Calligra activity
- Falabracman activity
Expand Down
12 changes: 8 additions & 4 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
As all Open Source software, contributions to Sugarizer are welcome.

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.
A good way to start to contribute is testing and trying Sugarizer to find some issues. If you find one, don't be shy, submit your issue [here](https://github.com/llaske/Sugarizer/issues) by giving the maximum information on it, specifically detailed steps to reproduce it. We will check your issue and ask your more information if needed.

Then, you could start to contribute by trying to fix some existing issues [here](https://github.com/llaske/Sugarizer/issues).
If you're a developper, 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.

Note than the **master** branch of the repository is for released/stable version, the **dev** branch is for development. So to contribute:
When you think you're ready, you could try to fix some existing issues [here](https://github.com/llaske/Sugarizer/issues). If you find a fix, send a Pull Request, we will be please to review it.

Note than the **master** branch of the repository is for released/stable version, the **dev** branch is for development.

So to send your Pull Request:

* [ ] Clone this repository,
* [ ] Fork the **dev** branch of your new repository,
Expand All @@ -20,4 +24,4 @@ Few rules to respect when you fix an issue:

Please note there is <u>no need to ask permission to work on an issue</u>. 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. These practices allow the competition of ideas and give priority to meritocracy.

Thanks in advance for your contribution.
Thanks in advance for your contribution and to become a member of Sugarizer community!
57 changes: 7 additions & 50 deletions Gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,68 +2,25 @@ module.exports = function(grunt) {

// Project configuration.
grunt.initConfig({
uglify: {
terser: {
options: {
banner: '/*! Sugarizer <%= grunt.template.today("yyyy-mm-dd") %> */\n'
keep_fnames: true
},
dynamic_mappings: {
expand: true,
src: [
'lib/*.js',
'js/*.js',
'activities/Abacus.activity/**/*.js',
'activities/Abecedarium.activity/**/*.js',
'activities/Blockrain.activity/**/*.js',
'activities/Calculate.activity/**/*.js',
'activities/Calligra.activity/lib/*.js', // TODO: js/vue.js don't work
'activities/ChatPrototype.activity/**/*.js',
'activities/Clock.activity/**/*.js',
'activities/ColorMyWorld.activity/**/*.js',
'activities/Constellation.activity/**/*.js',
'activities/Etoys.activity/**/*.js',
'activities/EbookReader.activity/lib/*.js', // TODO: js/vue.js don't work
'activities/Falabracman.activity/**/*.js',
'activities/Flip.activity/**/*.js',
'activities/FoodChain.activity/**/*.js',
'activities/Fototoon.activity/**/*.js',
'activities/GameOfLife.activity/**/*.js',
'activities/Gears.activity/js/*.js', // TODO: lib/gearsketch dont work
'activities/GetThingsDone.activity/**/*.js',
'activities/Gridpaint.activity/**/*.js',
'activities/Jappy.activity/**/*.js',
'activities/LabyrinthJS.activity/**/*.js',
'activities/LastOneLoses.activity/**/*.js',
'activities/Markdown.activity/**/*.js',
'activities/MazeWeb.activity/**/*.js',
'activities/MediaViewer.activity/**/*.js',
'activities/Memorize.activity/**/*.js',
'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',
'activities/Scratch.activity/**/*.js',
'activities/SharedNotes.activity/**/*.js',
'activities/Speak.activity/**/*.js',
'activities/Stopwatch.activity/**/*.js',
'activities/TamTamMicro.activity/**/*.js',
'activities/TankOp.activity/**/*.js',
'activities/TurtleBlocksJS.activity/**/*.js',
'activities/VideoViewer.activity/**/*.js',
'activities/Write.activity/js/*.js', // TODO: lib/quill is in ES6
'activities/XOEditor.activity/**/*.js'
],
dest: 'build/'
'activities/**/*.js'
]
}
}
});

// Load the plugin that provides the "uglify" task.
grunt.loadNpmTasks('grunt-contrib-uglify');
// Load the plugin that provides the "terser" task.
grunt.loadNpmTasks('grunt-terser');

// Default task(s).
grunt.registerTask('default', ['uglify']);
grunt.registerTask('default', ['terser']);

};
13 changes: 12 additions & 1 deletion LICENSE
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,18 @@

END OF TERMS AND CONDITIONS

Copyright Lionel Laské
APPENDIX: How to apply the Apache License to your work.

To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
Expand Down
13 changes: 13 additions & 0 deletions NOTICE
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
Copyright 2013 Lionel Laské

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
24 changes: 12 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

# What is Sugarizer ?

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 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 by more than 2 million children around the world.

Sugarizer runs on every device: from Raspberry Pi computers to Android and iOS phones to tablets and to laptops and desktops.
Sugarizer runs on every device: laptops, desktops, tiny computers, tablets or smartphones.

Sugarizer includes a bunch of pedagogic activities thought for children, see [here](https://sugarizer.org) for more.
Sugarizer includes a large set of pedagogic activities thought for children, see [here](https://sugarizer.org/activities.html) for a full list.

Sugarizer is available as:

Expand Down Expand Up @@ -39,6 +39,7 @@ The Sugarizer desktop application has three possible arguments:

* `--window` to open Sugarizer in a window (instead of fullscreen)
* `--debug` to open Sugarizer with the debug console
* `--logoff` to logoff the previous user if one is connected (unsynchronized content will be lost)
* `--init` to remove all existing Journal and settings (all will be lost)

If you're a developer you could also launch Sugarizer desktop application using [electron](https://github.com/electron/electron). First install Node.js and npm on your computer. See [here](http://nodejs.org/) for more information. Then install electron and specific modules for Sugarizer by running:
Expand Down Expand Up @@ -111,12 +112,12 @@ If you're a developer and you want to learn more about Sugarizer architecture, s

# 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)
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 @@ -161,8 +162,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 Down Expand Up @@ -236,15 +237,14 @@ The [Gruntfile.js](Gruntfile.js) contains tasks settings to build an optimized v

Then install specific component for Sugarizer by running:

npm install --dev
npm install --only=dev

Finally launch:

grunt -v

At the end of the process, the `build` directory will contain the optimized version of each file in a same directory that the initial one, so you could just copy files:
At the end of the process, all JavaScript files in all directories have been replaced by an optimized version.

cp -r build/* .

# Localization

Expand Down Expand Up @@ -282,7 +282,7 @@ Sugarizer settings display a list of all available languages. You need to add yo

French=Français

* Add your string in the [js/dialog.js](dialog.js) file in the create function of the Enyo class Sugar.DialogLanguage. You should give the ISO 639-1 language code and the new string for your language name. For example:
* Add your string in the [js/dialog.js](js/dialog.js) file in the create function of the Enyo class Sugar.DialogLanguage. You should give the ISO 639-1 language code and the new string for your language name. For example:

{code: "fr", icon: null, name: l10n.get("French")},

Expand Down
Loading

0 comments on commit c030438

Please sign in to comment.