├── .gitignore ├── component.json ├── specs └── bespoke-blackout_spec.js ├── dist ├── bespoke-blackout.min.js └── bespoke-blackout.js ├── package.json ├── LICENSE ├── README.md ├── demo ├── style.css └── index.html ├── src └── bespoke-blackout.js ├── grunt.js └── libs ├── bespoke └── bespoke.js ├── es5-shim └── es5-shim.js └── sinon └── sinon.js /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | _SpecRunner.html 4 | -------------------------------------------------------------------------------- /component.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bespoke-blackout.js", 3 | "version": "0.0.1", 4 | "main": "./dist/bespoke-blackout.min.js", 5 | "ignore": [ 6 | "**/.*" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /specs/bespoke-blackout_spec.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | "use strict"; 3 | 4 | describe("bespoke-blackout", function() { 5 | 6 | it("should be awesome", function() { 7 | // 8 | }); 9 | }); 10 | 11 | }()); 12 | -------------------------------------------------------------------------------- /dist/bespoke-blackout.min.js: -------------------------------------------------------------------------------- 1 | /*! bespoke-blackout v0.0.1 © 2013 Luis Nell, Licensed MIT */ 2 | !function(e){var t=66,n=87,r=function(){var e=!1,r=document.createElement("div");r.id="bespoke-blackout",r.style.display="none",r.style.position="absolute",r.style.left=r.style.top="0",r.style.zindex=255,document.body.appendChild(r),window.addEventListener("keydown",function(i){if(!!e||i.which!==t&&i.which!==n){if(i.which===27||i.which===13||i.which===t||i.which===n)r.style.display="none",e=!1,i.preventDefault()}else e=!0,r.style.background=i.which===t?"#000":"#fff",r.style.display="block",r.style.width=window.innerWidth+"px",r.style.height=window.innerHeight+"px",i.preventDefault()}),window.addEventListener("resize",function(){if(!e)return;r.style.width=window.innerWidth+"px",r.style.height=window.innerHeight+"px"})};e.plugins.blackout=r}(bespoke); -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bespoke-blackout", 3 | "title": "bespoke-blackout", 4 | "version": "0.0.1", 5 | "description": "Black (or white) out the screen function for Bespoke", 6 | "author": { 7 | "name": "Luis Nell", 8 | "url": "http://www.twitter.com/originell" 9 | }, 10 | "engines": { 11 | "node": ">= 0.8.0" 12 | }, 13 | "scripts": { 14 | "test": "grunt jasmine" 15 | }, 16 | "repository": { 17 | "type": "git", 18 | "url": "git://github.com/originell/bespoke-blackout.git" 19 | }, 20 | "devDependencies": { 21 | "grunt": "~0.3.17", 22 | "grunt-jasmine-runner": "~0.6.0", 23 | "temporary": "0.0.5" 24 | }, 25 | "licenses": [ 26 | { 27 | "type": "MIT", 28 | "url": "http://luis.mit-license.org/" 29 | } 30 | ], 31 | "keywords": [ 32 | "presentation", 33 | "html5", 34 | "keynote", 35 | "powerpoint" 36 | ] 37 | } 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright © 2013 Luis Nell 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 5 | 6 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 7 | 8 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # bespoke-blackout 2 | 3 | ### Black- or White-out for [Bespoke.js](https://github.com/markdalgleish/bespoke.js) 4 | 5 | **B**lack or **W**hite out the current screen, as is possible in professional 6 | presentation programs. 7 | 8 | ## Download 9 | 10 | Download the [production version][min] or the [development version][max]. 11 | 12 | [min]: https://raw.github.com/originell/bespoke-blackout/master/dist/bespoke-blackout.min.js 13 | [max]: https://raw.github.com/originell/bespoke-blackout/master/dist/bespoke-blackout.js 14 | 15 | ## Basic Usage 16 | 17 | First, include both `bespoke.js` and `bespoke-blackout.js` in your page. 18 | 19 | Then, simply include the plugin when initing bespoke 20 | 21 | bespoke.horizontal.from('article', { 22 | blackout: true 23 | }); 24 | 25 | Press `b` to blackout the screen, or `w` to whiteout. 26 | 27 | In order to show your presentation again, just press `ESC`, `Return` or either 28 | `b` or `w` again. 29 | 30 | 31 | ## Questions? 32 | 33 | Contact me on GitHub or Twitter: [@originell](http://twitter.com/originell) 34 | 35 | ## License 36 | 37 | Copyright 2013, Luis Nell 38 | This content is released under the MIT license 39 | http://luis.mit-license.org/ 40 | -------------------------------------------------------------------------------- /demo/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: helvetica, arial, sans-serif; 3 | font-size: 16px; 4 | line-height: 28px; 5 | } 6 | 7 | * { 8 | box-sizing: border-box; 9 | -moz-box-sizing: border-box; 10 | margin: 0; 11 | padding: 0; 12 | color: #303030; 13 | } 14 | 15 | h1 { 16 | height: 25px; 17 | width: 640px; 18 | position: absolute; 19 | top: 50%; 20 | left: 50%; 21 | margin-left: -322px; 22 | margin-top: -210px; 23 | font-size: 32px; 24 | letter-spacing: -1px; 25 | } 26 | 27 | section { 28 | display: none; 29 | } 30 | 31 | .bespoke-parent { 32 | position: absolute; 33 | top: 0; 34 | bottom: 0; 35 | left: 0; 36 | right: 0; 37 | } 38 | 39 | .bespoke-slide { 40 | width: 640px; 41 | height: 320px; 42 | position: absolute; 43 | top: 50%; 44 | margin-top: -160px; 45 | left: 50%; 46 | margin-left: -320px; 47 | } 48 | 49 | section.bespoke-slide { 50 | -webkit-transition: all .3s ease; 51 | -moz-transition: all .3s ease; 52 | -ms-transition: all .3s ease; 53 | -o-transition: all .3s ease; 54 | transition: all .3s ease; 55 | display: block; 56 | } 57 | 58 | .bespoke-inactive { 59 | opacity: 0; 60 | } 61 | 62 | .bespoke-active { 63 | opacity: 1; 64 | } 65 | -------------------------------------------------------------------------------- /src/bespoke-blackout.js: -------------------------------------------------------------------------------- 1 | !(function(bespoke) { 2 | var BLACK_KEYCODE = 66, // b key 3 | WHITE_KEYCODE = 87; // w key 4 | 5 | var plugin = function() { 6 | var shown = false, 7 | overlay = document.createElement('div'); 8 | 9 | overlay.id = 'bespoke-blackout'; 10 | overlay.style.display = 'none'; 11 | overlay.style.position = 'absolute'; 12 | overlay.style.left = overlay.style.top = '0'; 13 | overlay.style.zindex = 255; 14 | document.body.appendChild(overlay); 15 | 16 | window.addEventListener('keydown', function(e) { 17 | if (!shown && 18 | (e.which === BLACK_KEYCODE || e.which === WHITE_KEYCODE)) { 19 | shown = true; 20 | overlay.style.background = e.which === BLACK_KEYCODE ? '#000' : '#fff'; 21 | overlay.style.display = 'block'; 22 | overlay.style.width = window.innerWidth + 'px'; 23 | overlay.style.height = window.innerHeight + 'px'; 24 | e.preventDefault(); 25 | } else if (e.which === 27 || e.which === 13 || 26 | e.which === BLACK_KEYCODE || 27 | e.which === WHITE_KEYCODE) { 28 | overlay.style.display = 'none'; 29 | shown = false; 30 | e.preventDefault(); 31 | } 32 | }); 33 | 34 | /* Sometimes it happens to me that I'm falling out of OSX fullscreen 35 | * mode by pressing ESC too often. This should keep everything 36 | * blacked/whiten out :) */ 37 | window.addEventListener('resize', function() { 38 | if (!shown) { 39 | return; 40 | } 41 | overlay.style.width = window.innerWidth + 'px'; 42 | overlay.style.height = window.innerHeight + 'px'; 43 | }); 44 | }; 45 | 46 | bespoke.plugins.blackout = plugin; 47 | 48 | }(bespoke)); 49 | -------------------------------------------------------------------------------- /dist/bespoke-blackout.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * bespoke-blackout v0.0.1 3 | * 4 | * Copyright 2013, Luis Nell 5 | * This content is released under the MIT license 6 | * http://luis.mit-license.org/ 7 | */ 8 | 9 | !(function(bespoke) { 10 | var BLACK_KEYCODE = 66, // b key 11 | WHITE_KEYCODE = 87; // w key 12 | 13 | var plugin = function() { 14 | var shown = false, 15 | overlay = document.createElement('div'); 16 | 17 | overlay.id = 'bespoke-blackout'; 18 | overlay.style.display = 'none'; 19 | overlay.style.position = 'absolute'; 20 | overlay.style.left = overlay.style.top = '0'; 21 | overlay.style.zindex = 255; 22 | document.body.appendChild(overlay); 23 | 24 | window.addEventListener('keydown', function(e) { 25 | if (!shown && 26 | (e.which === BLACK_KEYCODE || e.which === WHITE_KEYCODE)) { 27 | shown = true; 28 | overlay.style.background = e.which === BLACK_KEYCODE ? '#000' : '#fff'; 29 | overlay.style.display = 'block'; 30 | overlay.style.width = window.innerWidth + 'px'; 31 | overlay.style.height = window.innerHeight + 'px'; 32 | e.preventDefault(); 33 | } else if (e.which === 27 || e.which === 13 || 34 | e.which === BLACK_KEYCODE || 35 | e.which === WHITE_KEYCODE) { 36 | overlay.style.display = 'none'; 37 | shown = false; 38 | e.preventDefault(); 39 | } 40 | }); 41 | 42 | /* Sometimes it happens to me that I'm falling out of OSX fullscreen 43 | * mode by pressing ESC too often. This should keep everything 44 | * blacked/whiten out :) */ 45 | window.addEventListener('resize', function() { 46 | if (!shown) { 47 | return; 48 | } 49 | overlay.style.width = window.innerWidth + 'px'; 50 | overlay.style.height = window.innerHeight + 'px'; 51 | }); 52 | }; 53 | 54 | bespoke.plugins.blackout = plugin; 55 | 56 | }(bespoke)); 57 | -------------------------------------------------------------------------------- /grunt.js: -------------------------------------------------------------------------------- 1 | /*global module:false*/ 2 | module.exports = function(grunt) { 3 | 'use strict'; 4 | 5 | grunt.loadNpmTasks('grunt-jasmine-runner'); 6 | 7 | // Project configuration. 8 | grunt.initConfig({ 9 | pkg: '', 10 | meta: { 11 | banner: '/*!\n' + 12 | ' * <%= pkg.title || pkg.name %> v<%= pkg.version %>\n' + 13 | '<% if (pkg.homepage) { %> * <%= pkg.homepage %>\n<% } %>' + 14 | ' *\n' + 15 | ' * Copyright <%= grunt.template.today("yyyy") %>, <%= pkg.author.name %>\n' + 16 | ' * This content is released under the' + 17 | ' <%= _.pluck(pkg.licenses, "type").join(", ") %> license<%= pkg.licenses.length === 1 ? "" : "s" %>\n' + 18 | ' * <%= _.pluck(pkg.licenses, "url").join(", ") %>\n' + 19 | ' */', 20 | microbanner: '/*! <%= pkg.title || pkg.name %> v<%= pkg.version %> ' + 21 | '© <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>, ' + 22 | 'Licensed <%= _.pluck(pkg.licenses, "type").join(", ") %> */' 23 | }, 24 | concat: { 25 | dist: { 26 | src: ['', '.js>'], 27 | dest: 'dist/<%= pkg.name %>.js' 28 | } 29 | }, 30 | min: { 31 | dist: { 32 | src: ['', ''], 33 | dest: 'dist/<%= pkg.name %>.min.js' 34 | } 35 | }, 36 | jasmine: { 37 | src: ['libs/**/*.js', 'src/**/*.js'], 38 | specs: 'specs/**/*Spec.js' 39 | }, 40 | lint: { 41 | files: ['grunt.js', 'src/**/*.js', 'specs/**/*.js', 'demo/**/*.js'] 42 | }, 43 | watch: { 44 | files: '', 45 | tasks: 'lint jasmine' 46 | }, 47 | jshint: { 48 | options: { 49 | curly: true, 50 | eqeqeq: true, 51 | immed: true, 52 | latedef: true, 53 | newcap: true, 54 | noarg: true, 55 | sub: true, 56 | undef: true, 57 | boss: true, 58 | eqnull: true, 59 | expr: true, 60 | browser: true, 61 | trailing: true, 62 | unused: true, 63 | es5: true, 64 | strict: false, 65 | maxcomplexity: 4, 66 | maxparams: 5, 67 | maxdepth: 2 68 | }, 69 | globals: { 70 | bespoke: true, 71 | describe: true, 72 | it: true, 73 | xit: true, 74 | expect: true, 75 | beforeEach: true, 76 | afterEach: true, 77 | runs: true, 78 | waitsFor: true, 79 | sinon: true 80 | } 81 | }, 82 | uglify: {} 83 | }); 84 | 85 | // Default task. 86 | grunt.registerTask('default', 'lint jasmine concat min'); 87 | 88 | }; 89 | -------------------------------------------------------------------------------- /libs/bespoke/bespoke.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bespoke.js v0.1.1 3 | * 4 | * Copyright 2013, Mark Dalgleish 5 | * This content is released under the MIT license 6 | * http://mit-license.org/markdalgleish 7 | */ 8 | 9 | (function(moduleName, window, document) { 10 | var from = function(selector, selectedPlugins) { 11 | var parent = document.querySelector(selector), 12 | slides = [].slice.call(parent.children, 0), 13 | activeSlide = slides[0], 14 | deckListeners = {}, 15 | 16 | activate = function(index) { 17 | if (!slides[index]) { 18 | return; 19 | } 20 | 21 | fire(deckListeners, 'deactivate', { 22 | slide: activeSlide, 23 | index: slides.indexOf(activeSlide) 24 | }); 25 | 26 | activeSlide = slides[index]; 27 | 28 | slides.map(deactivate); 29 | 30 | fire(deckListeners, 'activate', { 31 | slide: activeSlide, 32 | index: index 33 | }); 34 | 35 | addClass(activeSlide, 'active'); 36 | removeClass(activeSlide, 'inactive'); 37 | }, 38 | 39 | deactivate = function(slide, index) { 40 | var offset = index - slides.indexOf(activeSlide), 41 | offsetClass = offset > 0 ? 'after' : 'before'; 42 | 43 | ['before(-\\d+)?', 'after(-\\d+)?', 'active', 'inactive'].map(removeClass.bind(null, slide)); 44 | 45 | slide !== activeSlide && 46 | ['inactive', offsetClass, offsetClass + '-' + Math.abs(offset)].map(addClass.bind(null, slide)); 47 | }, 48 | 49 | slide = function(index) { 50 | fire(deckListeners, 'slide', { 51 | slide: slides[index], 52 | index: index 53 | }) && activate(index); 54 | }, 55 | 56 | next = function() { 57 | var nextSlideIndex = slides.indexOf(activeSlide) + 1; 58 | 59 | fire(deckListeners, 'next', { 60 | slide: activeSlide, 61 | index: slides.indexOf(activeSlide) 62 | }) && activate(nextSlideIndex); 63 | }, 64 | 65 | prev = function() { 66 | var prevSlideIndex = slides.indexOf(activeSlide) - 1; 67 | 68 | fire(deckListeners, 'prev', { 69 | slide: activeSlide, 70 | index: slides.indexOf(activeSlide) 71 | }) && activate(prevSlideIndex); 72 | }, 73 | 74 | deck = { 75 | on: on.bind(null, deckListeners), 76 | off: off.bind(null, deckListeners), 77 | fire: fire.bind(null, deckListeners), 78 | slide: slide, 79 | next: next, 80 | prev: prev, 81 | parent: parent, 82 | slides: slides 83 | }; 84 | 85 | addClass(parent, 'parent'); 86 | 87 | slides.map(function(slide) { 88 | addClass(slide, 'slide'); 89 | }); 90 | 91 | Object.keys(selectedPlugins || {}).map(function(pluginName) { 92 | var config = selectedPlugins[pluginName]; 93 | config && plugins[pluginName](deck, config === true ? {} : config); 94 | }); 95 | 96 | activate(0); 97 | 98 | decks.push(deck); 99 | 100 | return deck; 101 | }, 102 | 103 | decks = [], 104 | 105 | bespokeListeners = {}, 106 | 107 | on = function(listeners, eventName, callback) { 108 | (listeners[eventName] || (listeners[eventName] = [])).push(callback); 109 | }, 110 | 111 | off = function(listeners, eventName, callback) { 112 | listeners[eventName] = (listeners[eventName] || []).filter(function(listener) { 113 | return listener !== callback; 114 | }); 115 | }, 116 | 117 | fire = function(listeners, eventName, payload) { 118 | return (listeners[eventName] || []) 119 | .concat((listeners !== bespokeListeners && bespokeListeners[eventName]) || []) 120 | .reduce(function(notCancelled, callback) { 121 | return notCancelled && callback(payload) !== false; 122 | }, true); 123 | }, 124 | 125 | addClass = function(el, cls) { 126 | el.classList.add(moduleName + '-' + cls); 127 | }, 128 | 129 | removeClass = function(el, cls) { 130 | el.className = el.className 131 | .replace(new RegExp(moduleName + '-' + cls +'(\\s|$)', 'g'), ' ') 132 | .replace(/^\s+|\s+$/g, ''); 133 | }, 134 | 135 | callOnAllInstances = function(method) { 136 | return function(arg) { 137 | decks.map(function(deck) { 138 | deck[method].call(null, arg); 139 | }); 140 | }; 141 | }, 142 | 143 | bindPlugin = function(pluginName) { 144 | return { 145 | from: function(selector, selectedPlugins) { 146 | (selectedPlugins = selectedPlugins || {})[pluginName] = true; 147 | return from(selector, selectedPlugins); 148 | } 149 | }; 150 | }, 151 | 152 | makePluginForAxis = function(axis) { 153 | return function(deck) { 154 | var startPosition, 155 | delta; 156 | 157 | document.addEventListener('keydown', function(e) { 158 | var key = e.which; 159 | 160 | if (axis === 'X') { 161 | key === 37 && deck.prev(); 162 | (key === 32 || key === 39) && deck.next(); 163 | } else { 164 | key === 38 && deck.prev(); 165 | (key === 32 || key === 40) && deck.next(); 166 | } 167 | }); 168 | 169 | deck.parent.addEventListener('touchstart', function(e) { 170 | if (e.touches.length) { 171 | startPosition = e.touches[0]['page' + axis]; 172 | delta = 0; 173 | } 174 | }); 175 | 176 | deck.parent.addEventListener('touchmove', function(e) { 177 | if (e.touches.length) { 178 | e.preventDefault(); 179 | delta = e.touches[0]['page' + axis] - startPosition; 180 | } 181 | }); 182 | 183 | deck.parent.addEventListener('touchend', function() { 184 | Math.abs(delta) > 50 && (delta > 0 ? deck.prev() : deck.next()); 185 | }); 186 | }; 187 | }, 188 | 189 | plugins = { 190 | horizontal: makePluginForAxis('X'), 191 | vertical: makePluginForAxis('Y') 192 | }; 193 | 194 | window[moduleName] = { 195 | from: from, 196 | slide: callOnAllInstances('slide'), 197 | next: callOnAllInstances('next'), 198 | prev: callOnAllInstances('prev'), 199 | horizontal: bindPlugin('horizontal'), 200 | vertical: bindPlugin('vertical'), 201 | on: on.bind(null, bespokeListeners), 202 | off: off.bind(null, bespokeListeners), 203 | plugins: plugins 204 | }; 205 | 206 | }('bespoke', this, document)); -------------------------------------------------------------------------------- /demo/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | bespoke-blackout demo 6 | 7 | 8 | 9 |
10 |
11 |

bespoke-blackout

12 |

Press b or w to either black out or white out

13 |

the screen.

14 |

Press ESC, Return or either one of b or w to show

15 |

your content again.

16 |


Demo HTML & CSS stolen from bespoke-spotlight.

17 |
18 |
19 |

Abu Rawash

20 |

Abu Rawash is the site of Egypt's most northerly pyramid (other than the ruins of Lepsius pyramid number one) the mostly ruined Pyramid of Djedefre, son and successor of Khufu. Originally it was thought that this pyramid had never been completed, but the current archaeological consensus is that not only was it completed, but that it was originally about the same size as the Pyramid of Menkaure, which would have placed it among the half-dozen or so largest pyramids in Egypt.

21 |

Its location adjacent to a major crossroads made it an easy source of stone. Quarrying — which began in Roman times — has left little apart from about 15 courses of stone superimposed upon the natural hillock that formed part of the pyramid's core. A small adjacent satellite pyramid is in a better state of preservation.

22 |
23 |
24 |

Giza

25 |

Giza is the location of the Pyramid of Khufu (also known as the "Great Pyramid" and the "Pyramid of Cheops"); the somewhat smaller Pyramid of Khafre (or Kephren); the relatively modest-sized Pyramid of Menkaure (or Mykerinus), along with a number of smaller satellite edifices known as "Queen's pyramids"; and the Great Sphinx.

26 |

Of the three, only Khafre's pyramid retains part of its original polished limestone casing, near its apex. This pyramid appears larger than the adjacent Khufu pyramid by virtue of its more elevated location, and the steeper angle of inclination of its construction — it is, in fact, smaller in both height and volume.

27 |

The Giza Necropolis has been a popular tourist destination since antiquity, and was popularized in Hellenistic times when the Great Pyramid was listed by Antipater of Sidon as one of the Seven Wonders of the World. Today it is the only one of those wonders still in existence.

28 |
29 |
30 |

Zawyet el-Aryan

31 |

This site, halfway between Giza and Abu Sir, is the location for two unfinished Old Kingdom pyramids. The northern structure's owner is believed to be the Pharaoh Nebka, while the southern structure is attributed to the Third Dynasty Pharaoh Khaba, also known as Hudjefa, successor to Sekhemkhet. Khaba's four-year tenure as pharaoh more than likely explains the similar premature truncation of his step pyramid. Today it is approximately twenty meters high; had it been completed it is likely to have exceeded 40.

32 |
33 |
34 |

Abu Sir

35 |

There are a total of fourteen pyramids at this site, which served as the main royal necropolis during the Fifth Dynasty. The quality of construction of the Abu Sir pyramids is inferior to those of the Fourth Dynasty — perhaps signaling a decrease in royal power or a less vibrant economy. They are smaller than their predecessors, and are built of low-quality local limestone.

36 |

The three major pyramids are those of Niuserre (which is also the most intact), Neferirkare Kakai and Sahure. The site is also home to the incomplete Pyramid of Neferefre. All of the major pyramids at Abu Sir were built as step pyramids, although the largest of them — the Pyramid of Neferirkare Kakai — is believed to have originally been built as a step pyramid some 70 metres high and then later transformed into a "true" pyramid by having its steps filled in with loose masonry.

37 |
38 |
39 |

Saqqara

40 |

Major pyramids located here include the Step Pyramid of Djoser — generally identified as the world's oldest substantial monumental structure to be built of finished stone — the Pyramid of Merykare, the Pyramid of Userkaf and the Pyramid of Teti. Also at Saqqara is the Pyramid of Unas, which retains a pyramid causeway that is one of the best-preserved in Egypt. This pyramid was also the subject of one of the earliest known restoration attempts, conducted by a son of Ramesses II. Saqqara is also the location of the incomplete step pyramid of Djoser's successor Sekhemkhet, known as the Buried Pyramid. Archaeologists believe that had this pyramid been completed it would have been larger than Djoser's.

41 |
42 |
43 |

Dahshur

44 |

This area is arguably the most important pyramid field in Egypt outside Giza and Saqqara, although until 1996 the site was inaccessible due to its location within a military base, and was relatively unknown outside archaeological circles.

45 |

The southern Pyramid of Snofru, commonly known as the Bent Pyramid, is believed to be the first Egyptian pyramid intended by its builders to be a "true" smooth-sided pyramid from the outset; the earlier pyramid at Meidum had smooth sides in its finished state — but it was conceived and built as a step pyramid, before having its steps filled in and concealed beneath a smooth outer casing.

46 |

As a true smooth-sided structure, the Bent Pyramid was only a partial success — albeit a unique, visually imposing one; it is also the only major Egyptian pyramid to retain a significant proportion of its original smooth outer limestone casing intact. As such it serves as the best contemporary example of how the ancient Egyptians intended their pyramids to look.

47 |
48 |
49 |

Mazghuna

50 |

Located to the south of Dahshur, this area was used in the First Intermediate Period by several kings who constructed their pyramids out of mudbrick.

51 |
52 |
53 |

Lisht

54 |

Two major pyramids are known to have been built at Lisht — those of Amenemhat I and his son, Senusret I. The latter is surrounded by the ruins of ten smaller subsidiary pyramids. One of these subsidiary pyramids is known to be that of Amenemhat's cousin, Khaba II. The site which is in the vicinity of the oasis of Fayyum, midway between Dahshur and Meidum, and about 100 kilometres south of Cairo, is believed to be in the vicinity of the ancient city of Itjtawy (the precise location of which remains unknown), which served as the capital of Egypt during the 12th Dynasty.

55 |
56 |
57 | 58 | 59 | 60 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /libs/es5-shim/es5-shim.js: -------------------------------------------------------------------------------- 1 | // Copyright 2009-2012 by contributors, MIT License 2 | // vim: ts=4 sts=4 sw=4 expandtab 3 | 4 | // Module systems magic dance 5 | (function (definition) { 6 | // RequireJS 7 | if (typeof define == "function") { 8 | define(definition); 9 | // YUI3 10 | } else if (typeof YUI == "function") { 11 | YUI.add("es5", definition); 12 | // CommonJS and