* support also partial cubemap/fallback images: backgroundColor for missing face(s)
* extend multires/generate.py to cylindrical input and partial panoramas
* fixed a few typos in new help strings of generate.py
* Missing cubemap faces now need to be defined as null in the configuration
* made generate.py strict again on existing output directory, printing descriptive error message
* replaced unsafe eval by ast.literal_eval in generate.py
* a couple of minor improvements regarding 'undefined' in libpannellum.js
* made generate.py allow existing output directory in debug mode
for convenience, no need to delete output directory every time while testing
* prevent display of out-of-range areas of partial (cylindrical) panoramas
by adaping min/may yaw and max horizontal fov, this no background (empty space) shown
* improvements as requested: made view restrictions optional, etc.
* extend documentation to describe new avoidShowingBackground option
It never stops calling `animateMove`, if `pitch`, `yaw`, or `hfov` has not been changed.
Since we may have callback function, `animateMove` has to be called anyway, even if we don't actually need to animate movement. That's why equality of start and end positions is checked here, but not in `setPitch`, `setYaw`, and `setHfov`.
It's a common situation to remove an event listener inside its definition. Like this:
```javascript
viewer.on('load', function foo() {
//code
viewer.off('load', foo);
});
```
In this case `off` function removes the item from `externalEventListeners` array, while looping through this array may be not finished in `fireEvent` function. A reverse iteration fixes it.
Since we'd like to fire listeners in the order they were added, we need to use `externalEventListeners[type].length - i` index.