├── .bowerrc ├── .gitignore ├── Procfile ├── README.md ├── bower.json ├── config.xml ├── gulpfile.js ├── hooks ├── README.md ├── after_platform_add │ └── 010_install_plugins.js ├── after_plugin_add │ └── 010_register_plugin.js ├── after_plugin_rm │ └── 010_deregister_plugin.js ├── after_prepare │ ├── 010_add_platform_class.js │ └── 020_remove_sass_from_platforms.js └── before_platform_add │ └── init_directories.js ├── ionic.project ├── package.json ├── scss └── ionic.app.scss └── www ├── css └── style.css ├── img └── ionic.png ├── index.html ├── js └── app.js └── lib ├── angular-animate ├── .bower.json ├── README.md ├── angular-animate.js ├── angular-animate.min.js ├── angular-animate.min.js.map ├── bower.json └── package.json ├── angular-sanitize ├── .bower.json ├── README.md ├── angular-sanitize.js ├── angular-sanitize.min.js ├── angular-sanitize.min.js.map ├── bower.json └── package.json ├── angular-ui-router ├── .bower.json ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── api │ └── angular-ui-router.d.ts ├── bower.json ├── release │ ├── angular-ui-router.js │ └── angular-ui-router.min.js └── src │ ├── common.js │ ├── resolve.js │ ├── state.js │ ├── stateDirectives.js │ ├── stateFilters.js │ ├── templateFactory.js │ ├── urlMatcherFactory.js │ ├── urlRouter.js │ ├── view.js │ ├── viewDirective.js │ └── viewScroll.js ├── angular ├── .bower.json ├── README.md ├── angular-csp.css ├── angular.js ├── angular.min.js ├── angular.min.js.gzip ├── angular.min.js.map ├── bower.json └── package.json ├── ionic ├── .bower.json ├── README.md ├── bower.json ├── css │ ├── ionic.css │ └── ionic.min.css ├── fonts │ ├── ionicons.eot │ ├── ionicons.svg │ ├── ionicons.ttf │ └── ionicons.woff ├── js │ ├── ionic-angular.js │ ├── ionic-angular.min.js │ ├── ionic.bundle.js │ ├── ionic.bundle.min.js │ ├── ionic.js │ └── ionic.min.js └── scss │ ├── _action-sheet.scss │ ├── _animations.scss │ ├── _backdrop.scss │ ├── _badge.scss │ ├── _bar.scss │ ├── _button-bar.scss │ ├── _button.scss │ ├── _checkbox.scss │ ├── _form.scss │ ├── _grid.scss │ ├── _items.scss │ ├── _list.scss │ ├── _loaders.scss │ ├── _loading.scss │ ├── _menu.scss │ ├── _mixins.scss │ ├── _modal.scss │ ├── _platform.scss │ ├── _popover.scss │ ├── _popup.scss │ ├── _progress.scss │ ├── _radio.scss │ ├── _range.scss │ ├── _refresher.scss │ ├── _reset.scss │ ├── _scaffolding.scss │ ├── _select.scss │ ├── _slide-box.scss │ ├── _spinner.scss │ ├── _split-pane.scss │ ├── _tabs.scss │ ├── _toggle.scss │ ├── _transitions.scss │ ├── _type.scss │ ├── _util.scss │ ├── _variables.scss │ ├── ionic.scss │ └── ionicons │ ├── _ionicons-animation.scss │ ├── _ionicons-font.scss │ ├── _ionicons-icons.scss │ ├── _ionicons-variables.scss │ └── ionicons.scss ├── pouchdb ├── .bower.json ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── TESTING.md ├── bin │ ├── add-license.js │ ├── build-all-plugins.sh │ ├── build-plugin.sh │ ├── build-site.js │ ├── dev-server.js │ ├── get-version.js │ ├── publish-site.sh │ ├── release.sh │ ├── repl.js │ ├── run-cordova.sh │ ├── run-couch-master-on-travis.sh │ ├── run-coverage.js │ ├── run-csg-on-travis.sh │ ├── run-test.sh │ ├── test-browser.js │ └── test-node.sh ├── bower.json ├── component.json ├── dist │ ├── pouchdb.idb-alt.js │ ├── pouchdb.idb-alt.min.js │ ├── pouchdb.js │ ├── pouchdb.localstorage.js │ ├── pouchdb.localstorage.min.js │ ├── pouchdb.memory.js │ ├── pouchdb.memory.min.js │ └── pouchdb.min.js ├── docs │ ├── _config.yml │ ├── _data │ │ └── authors.yml │ ├── _guides │ │ ├── async-code.md │ │ ├── attachments.md │ │ ├── bulk-operations.md │ │ ├── changes.md │ │ ├── compact-and-destroy.md │ │ ├── conflicts.md │ │ ├── databases.md │ │ ├── documents.md │ │ ├── index.md │ │ ├── local-documents.md │ │ ├── queries.md │ │ ├── replication.md │ │ ├── setup-couchdb.md │ │ ├── setup-pouchdb.md │ │ └── updating-deleting.md │ ├── _includes │ │ ├── alert_end.html │ │ ├── alert_start.html │ │ ├── anchor.html │ │ ├── api.html │ │ ├── guides_nav.html │ │ ├── iframe.html │ │ ├── img.html │ │ ├── nav.html │ │ ├── nav_item.html │ │ ├── post_details.html │ │ └── social.html │ ├── _layouts │ │ ├── 2ColLeft.html │ │ ├── default.html │ │ ├── guide.html │ │ └── post.html │ ├── _posts │ │ ├── 2014-04-01-pouchdb-2.1.0.md │ │ ├── 2014-04-01-welcome-to-the-pouchdb-blog.md │ │ ├── 2014-04-14-pagination-strategies-with-pouchdb.md │ │ ├── 2014-05-01-pouchdb-2.2.0.md │ │ ├── 2014-05-01-secondary-indexes-have-landed-in-pouchdb.md │ │ ├── 2014-06-01-pouchdb-2.2.3.md │ │ ├── 2014-06-17-12-pro-tips-for-better-code-with-pouchdb.md │ │ ├── 2014-07-25-pouchdb-levels-up.md │ │ ├── 2014-08-12-pouchdb-3.0.0.md │ │ ├── 2014-08-16-pouchdb-3.0.1.md │ │ ├── 2014-08-20-pouchdb-3.0.2.md │ │ ├── 2014-08-29-pouchdb-3.0.3.md │ │ ├── 2014-09-04-pouchdb-3.0.4.md │ │ ├── 2014-09-07-pouchdb-3.0.5.md │ │ ├── 2014-09-22-3.0.6.md │ │ ├── 2014-10-26-10-things-i-learned-from-reading-and-writing-the-pouchdb-source.md │ │ ├── 2014-11-10-3.1.0.md │ │ ├── 2014-11-27-testing-pouchdb.md │ │ ├── 2014-12-04-3.2.0.md │ │ ├── 2014-12-11-the-pains-of-being-async-at-heart.md │ │ ├── 2015-01-05-pouchdb-3.2.1-you-can-always-be-faster.md │ │ ├── 2015-02-03-fix-up-look-sharp.md │ │ └── 2015-02-14-a-quick-one.md │ ├── adapters.md │ ├── api.md │ ├── blog │ │ └── index.html │ ├── errors.md │ ├── external.md │ ├── faq.md │ ├── feed.xml │ ├── getting-started.md │ ├── gql.md │ ├── index.md │ ├── learn.md │ ├── manifest.appcache │ └── static │ │ ├── assets │ │ └── pouchdb-getting-started-todo.zip │ │ ├── favicon.ico │ │ ├── img │ │ ├── apple-indexeddb.png │ │ ├── browser-logos │ │ │ ├── android_32x32.png │ │ │ ├── blackberry_32x32.png │ │ │ ├── chrome-android_32x32.png │ │ │ ├── chrome_32x32.png │ │ │ ├── firefox_32x32.png │ │ │ ├── internet-explorer-tile_32x32.png │ │ │ ├── internet-explorer_32x32.png │ │ │ ├── opera_32x32.png │ │ │ ├── safari-ios_32x32.png │ │ │ └── safari_32x32.png │ │ ├── cors_in_couchdb.png │ │ ├── debug_mode.png │ │ ├── dev_tools.png │ │ ├── fauxton.png │ │ ├── icons.svg │ │ ├── kittens.jpg │ │ ├── kittens_small.jpg │ │ ├── logo.svg │ │ ├── mark.svg │ │ ├── offline_replication.gif │ │ ├── safari_popup.png │ │ ├── screenshots │ │ │ └── todo-1.png │ │ └── travis-screenshot.png │ │ └── less │ │ ├── bootstrap │ │ ├── alerts.less │ │ ├── badges.less │ │ ├── bootstrap.less │ │ ├── breadcrumbs.less │ │ ├── button-groups.less │ │ ├── buttons.less │ │ ├── carousel.less │ │ ├── close.less │ │ ├── code.less │ │ ├── component-animations.less │ │ ├── dropdowns.less │ │ ├── forms.less │ │ ├── glyphicons.less │ │ ├── grid.less │ │ ├── input-groups.less │ │ ├── jumbotron.less │ │ ├── labels.less │ │ ├── list-group.less │ │ ├── media.less │ │ ├── mixins.less │ │ ├── modals.less │ │ ├── navbar.less │ │ ├── navs.less │ │ ├── normalize.less │ │ ├── pager.less │ │ ├── pagination.less │ │ ├── panels.less │ │ ├── popovers.less │ │ ├── print.less │ │ ├── progress-bars.less │ │ ├── responsive-utilities.less │ │ ├── scaffolding.less │ │ ├── tables.less │ │ ├── theme.less │ │ ├── thumbnails.less │ │ ├── tooltip.less │ │ ├── type.less │ │ ├── utilities.less │ │ ├── variables.less │ │ └── wells.less │ │ └── pouchdb │ │ ├── alerts.less │ │ ├── anchors.less │ │ ├── block.less │ │ ├── buttons.less │ │ ├── code.less │ │ ├── header.less │ │ ├── highlight.less │ │ ├── icons.less │ │ ├── logo.less │ │ ├── mixins.less │ │ ├── navs.less │ │ ├── post.less │ │ ├── pouchdb.less │ │ ├── ribbon.less │ │ ├── scaffolding.less │ │ ├── utilities.less │ │ └── variables.less ├── lib │ ├── adapter.js │ ├── adapters │ │ ├── http │ │ │ └── http.js │ │ ├── idb │ │ │ ├── idb-blob-support.js │ │ │ ├── idb-bulk-docs.js │ │ │ ├── idb-constants.js │ │ │ ├── idb-utils.js │ │ │ └── idb.js │ │ ├── leveldb │ │ │ ├── leveldb-transaction.js │ │ │ └── leveldb.js │ │ ├── preferredAdapters-browser.js │ │ ├── preferredAdapters.js │ │ └── websql │ │ │ ├── websql-bulk-docs.js │ │ │ ├── websql-constants.js │ │ │ ├── websql-utils.js │ │ │ └── websql.js │ ├── changes.js │ ├── checkpointer.js │ ├── constructor.js │ ├── deps │ │ ├── ajax.js │ │ ├── blob.js │ │ ├── buffer-browser.js │ │ ├── buffer.js │ │ ├── errors.js │ │ ├── md5.js │ │ ├── migrate.js │ │ ├── parse-doc.js │ │ ├── parse-hex.js │ │ ├── parse-uri.js │ │ ├── request-browser.js │ │ ├── upsert.js │ │ └── uuid.js │ ├── evalFilter.js │ ├── evalView.js │ ├── index.js │ ├── merge.js │ ├── replicate.js │ ├── setup.js │ ├── sync.js │ ├── taskqueue.js │ ├── utils.js │ ├── version-browser.js │ └── version.js ├── package.json └── scripts │ ├── baldrick-test.sh │ ├── bundle-browserify-test.sh │ ├── jenkins-deploy.sh │ └── start_standalone_couch.sh └── underscore ├── .bower.json ├── .eslintrc ├── .gitignore ├── LICENSE ├── README.md ├── bower.json ├── component.json ├── karma.conf-sauce.js ├── karma.conf.js ├── package.json ├── underscore-min.js ├── underscore-min.map └── underscore.js /.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "www/lib" 3 | } 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Specifies intentionally untracked files to ignore when using Git 2 | # http://git-scm.com/docs/gitignore 3 | 4 | node_modules/ 5 | platforms/ 6 | plugins/ 7 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: node index.js -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # IonicOfflineBlog 2 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "WebSpeaks", 3 | "private": "true", 4 | "devDependencies": { 5 | }, 6 | "dependencies": { 7 | "ionic": "driftyco/ionic-bower#1.0.0-rc.0" 8 | "pouchdb": "~3.3.1", 9 | "underscore": "~1.8.2" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | WebSpeaks 4 | 5 | An Ionic Framework and Cordova project. 6 | 7 | 8 | Ionic Framework Team 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | var gulp = require('gulp'); 2 | var gutil = require('gulp-util'); 3 | var bower = require('bower'); 4 | var concat = require('gulp-concat'); 5 | var sass = require('gulp-sass'); 6 | var minifyCss = require('gulp-minify-css'); 7 | var rename = require('gulp-rename'); 8 | var sh = require('shelljs'); 9 | 10 | var paths = { 11 | sass: ['./scss/**/*.scss'] 12 | }; 13 | 14 | gulp.task('default', ['sass']); 15 | 16 | gulp.task('sass', function(done) { 17 | gulp.src('./scss/ionic.app.scss') 18 | .pipe(sass()) 19 | .pipe(gulp.dest('./www/css/')) 20 | .pipe(minifyCss({ 21 | keepSpecialComments: 0 22 | })) 23 | .pipe(rename({ extname: '.min.css' })) 24 | .pipe(gulp.dest('./www/css/')) 25 | .on('end', done); 26 | }); 27 | 28 | gulp.task('watch', function() { 29 | gulp.watch(paths.sass, ['sass']); 30 | }); 31 | 32 | gulp.task('install', ['git-check'], function() { 33 | return bower.commands.install() 34 | .on('log', function(data) { 35 | gutil.log('bower', gutil.colors.cyan(data.id), data.message); 36 | }); 37 | }); 38 | 39 | gulp.task('git-check', function(done) { 40 | if (!sh.which('git')) { 41 | console.log( 42 | ' ' + gutil.colors.red('Git is not installed.'), 43 | '\n Git, the version control system, is required to download Ionic.', 44 | '\n Download git here:', gutil.colors.cyan('http://git-scm.com/downloads') + '.', 45 | '\n Once git is installed, run \'' + gutil.colors.cyan('gulp install') + '\' again.' 46 | ); 47 | process.exit(1); 48 | } 49 | done(); 50 | }); 51 | -------------------------------------------------------------------------------- /hooks/after_platform_add/010_install_plugins.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /** 4 | * Install all plugins listed in package.json 5 | * https://raw.githubusercontent.com/diegonetto/generator-ionic/master/templates/hooks/after_platform_add/install_plugins.js 6 | */ 7 | var exec = require('child_process').exec; 8 | var path = require('path'); 9 | var sys = require('sys'); 10 | 11 | var packageJSON = null; 12 | 13 | try { 14 | packageJSON = require('../../package.json'); 15 | } catch(ex) { 16 | console.log('\nThere was an error fetching your package.json file.') 17 | console.log('\nPlease ensure a valid package.json is in the root of this project\n') 18 | return; 19 | } 20 | 21 | var cmd = process.platform === 'win32' ? 'cordova.cmd' : 'cordova'; 22 | // var script = path.resolve(__dirname, '../../node_modules/cordova/bin', cmd); 23 | 24 | packageJSON.cordovaPlugins = packageJSON.cordovaPlugins || []; 25 | packageJSON.cordovaPlugins.forEach(function (plugin) { 26 | exec('cordova plugin add ' + plugin, function (error, stdout, stderr) { 27 | sys.puts(stdout); 28 | }); 29 | }); 30 | -------------------------------------------------------------------------------- /hooks/after_plugin_add/010_register_plugin.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /** 4 | * Push plugins to cordovaPlugins array after_plugin_add 5 | */ 6 | var fs = require('fs'), 7 | packageJSON = require('../../package.json'), 8 | path = require('path'); 9 | 10 | packageJSON.cordovaPlugins = packageJSON.cordovaPlugins || []; 11 | process.env.CORDOVA_PLUGINS.split(',').forEach(function (plugin) { 12 | var configString, 13 | idRegEx, 14 | id, 15 | pluginXmlPath, 16 | pluginToAdd; 17 | 18 | if(plugin.indexOf('https') != -1 || plugin.indexOf('git') != -1) { 19 | console.log('Installing plugin from url'); 20 | } 21 | 22 | if(plugin.indexOf('/') != -1) { 23 | try { 24 | pluginXmlPath = path.resolve(plugin, 'plugin.xml'); 25 | console.log('got pluginXmlPath:', pluginXmlPath); 26 | if (!fs.existsSync(pluginXmlPath)) { 27 | var errorMessage = ['There was no plugin.xml file found for path: ', pluginXmlPath].join(''); 28 | return; 29 | } 30 | 31 | configString = fs.readFileSync(pluginXmlPath,{encoding: 'utf8'}); 32 | idRegEx = new RegExp(']*id="(.*)"', 'i'); 33 | id = idRegEx.exec(configString)[1] 34 | pluginToAdd = {id: id, locator: plugin}; 35 | } catch(ex) { 36 | console.log('There was an error retrieving the plugin.xml filr from the 010_register_plugin.js hook', ex); 37 | } 38 | } else { 39 | pluginToAdd = plugin; 40 | } 41 | 42 | if(typeof pluginToAdd == 'string' && packageJSON.cordovaPlugins.indexOf(pluginToAdd) == -1) { 43 | packageJSON.cordovaPlugins.push(pluginToAdd); 44 | } else if (typeof pluginToAdd == 'object') { 45 | var pluginExists = false; 46 | packageJSON.cordovaPlugins.forEach(function(checkPlugin) { 47 | if(typeof checkPlugin == 'object' && checkPlugin.id == pluginToAdd.id) { 48 | pluginExists = true; 49 | } 50 | }) 51 | if(!pluginExists) { 52 | packageJSON.cordovaPlugins.push(pluginToAdd); 53 | } 54 | } 55 | }); 56 | 57 | fs.writeFileSync('package.json', JSON.stringify(packageJSON, null, 2)); 58 | -------------------------------------------------------------------------------- /hooks/after_plugin_rm/010_deregister_plugin.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /** 4 | * Remove plugins from cordovaPlugins array after_plugin_rm 5 | */ 6 | var fs = require('fs'); 7 | var packageJSON = require('../../package.json'); 8 | 9 | packageJSON.cordovaPlugins = packageJSON.cordovaPlugins || []; 10 | 11 | process.env.CORDOVA_PLUGINS.split(',').forEach(function (plugin) { 12 | var index = packageJSON.cordovaPlugins.indexOf(plugin); 13 | if (index > -1) { 14 | packageJSON.cordovaPlugins.splice(index, 1); 15 | } else { 16 | //If it didnt find a match, it may be listed as {id,locator} 17 | for(var i = 0, j = packageJSON.cordovaPlugins.length; i < j; i++) { 18 | var packagePlugin = packageJSON.cordovaPlugins[i]; 19 | if(typeof packagePlugin == 'object' && packagePlugin.id == plugin) { 20 | packageJSON.cordovaPlugins.splice(index, 1); 21 | break; 22 | } 23 | } 24 | } 25 | }); 26 | 27 | fs.writeFile('package.json', JSON.stringify(packageJSON, null, 2)); 28 | -------------------------------------------------------------------------------- /hooks/after_prepare/020_remove_sass_from_platforms.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /** 4 | * After prepare, files are copied to the platforms/ios and platforms/android folders. 5 | * Lets clean up some of those files that arent needed with this hook. 6 | */ 7 | var fs = require('fs'); 8 | var path = require('path'); 9 | 10 | var deleteFolderRecursive = function(removePath) { 11 | if( fs.existsSync(removePath) ) { 12 | fs.readdirSync(removePath).forEach(function(file,index){ 13 | var curPath = path.join(removePath, file); 14 | if(fs.lstatSync(curPath).isDirectory()) { // recurse 15 | deleteFolderRecursive(curPath); 16 | } else { // delete file 17 | fs.unlinkSync(curPath); 18 | } 19 | }); 20 | fs.rmdirSync(removePath); 21 | } 22 | }; 23 | 24 | var iosPlatformsDir = path.resolve(__dirname, '../../platforms/ios/www/lib/ionic/scss'); 25 | var androidPlatformsDir = path.resolve(__dirname, '../../platforms/android/assets/www/lib/ionic/scss'); 26 | 27 | deleteFolderRecursive(iosPlatformsDir); 28 | deleteFolderRecursive(androidPlatformsDir); 29 | -------------------------------------------------------------------------------- /hooks/before_platform_add/init_directories.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /** 4 | * On a fresh clone, the local platforms/ and plugins/ directories will be 5 | * missing, so ensure they get created before the first platform is added. 6 | */ 7 | var fs = require('fs'); 8 | var path = require('path'); 9 | 10 | var platformsDir = path.resolve(__dirname, '../../platforms'); 11 | var pluginsDir = path.resolve(__dirname, '../../plugins'); 12 | 13 | try { 14 | fs.mkdirSync(platformsDir, function (err) { 15 | if (err) { console.error(err); } 16 | }); 17 | } catch(ex) {} 18 | 19 | try { 20 | fs.mkdirSync(pluginsDir, function (err) { 21 | if (err) { console.error(err); } 22 | }); 23 | } catch(ex) {} 24 | -------------------------------------------------------------------------------- /ionic.project: -------------------------------------------------------------------------------- 1 | { 2 | "name": "WebSpeaks", 3 | "app_id": "" 4 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "webspeaks", 3 | "version": "1.0.0", 4 | "description": "WebSpeaks: An Ionic project", 5 | "dependencies": { 6 | "gulp": "^3.5.6", 7 | "gulp-concat": "^2.2.0", 8 | "gulp-minify-css": "^0.3.0", 9 | "gulp-rename": "^1.2.0", 10 | "gulp-sass": "^0.7.1", 11 | "relational-pouch": "^1.3.1" 12 | }, 13 | "devDependencies": { 14 | "bower": "^1.3.3", 15 | "gulp-util": "^2.2.14", 16 | "shelljs": "^0.3.0" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /scss/ionic.app.scss: -------------------------------------------------------------------------------- 1 | /* 2 | To customize the look and feel of Ionic, you can override the variables 3 | in ionic's _variables.scss file. 4 | 5 | For example, you might change some of the default colors: 6 | 7 | $light: #fff !default; 8 | $stable: #f8f8f8 !default; 9 | $positive: #387ef5 !default; 10 | $calm: #11c1f3 !default; 11 | $balanced: #33cd5f !default; 12 | $energized: #ffc900 !default; 13 | $assertive: #ef473a !default; 14 | $royal: #886aea !default; 15 | $dark: #444 !default; 16 | */ 17 | 18 | // The path for our ionicons font files, relative to the built CSS in www/css 19 | $ionicons-font-path: "../lib/ionic/fonts" !default; 20 | 21 | // Include all of Ionic 22 | @import "www/lib/ionic/scss/ionic"; 23 | 24 | -------------------------------------------------------------------------------- /www/css/style.css: -------------------------------------------------------------------------------- 1 | .title { 2 | white-space: normal; 3 | text-decoration: none; 4 | color: #00A0B0; 5 | } 6 | .item .description { 7 | color: #8F8F8F; 8 | white-space: normal; 9 | } 10 | .item .footer { 11 | margin-top: 15px; 12 | } 13 | .item .author { 14 | color: #4D4C4C; 15 | font-size: 14px; 16 | } -------------------------------------------------------------------------------- /www/img/ionic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/img/ionic.png -------------------------------------------------------------------------------- /www/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 |

WebSpeaks.in

37 |
38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 |

47 | 51 |
52 |
53 | 54 |
55 | 56 |
57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /www/lib/angular-animate/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-animate", 3 | "version": "1.3.6", 4 | "main": "./angular-animate.js", 5 | "ignore": [], 6 | "dependencies": { 7 | "angular": "1.3.6" 8 | }, 9 | "homepage": "https://github.com/angular/bower-angular-animate", 10 | "_release": "1.3.6", 11 | "_resolution": { 12 | "type": "version", 13 | "tag": "v1.3.6", 14 | "commit": "d38c9593911d231cce076c1b64f823e572813214" 15 | }, 16 | "_source": "git://github.com/angular/bower-angular-animate.git", 17 | "_target": "1.3.6", 18 | "_originalSource": "angular-animate" 19 | } -------------------------------------------------------------------------------- /www/lib/angular-animate/README.md: -------------------------------------------------------------------------------- 1 | # packaged angular-animate 2 | 3 | This repo is for distribution on `npm` and `bower`. The source for this module is in the 4 | [main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngAnimate). 5 | Please file issues and pull requests against that repo. 6 | 7 | ## Install 8 | 9 | You can install this package either with `npm` or with `bower`. 10 | 11 | ### npm 12 | 13 | ```shell 14 | npm install angular-animate 15 | ``` 16 | 17 | Add a ` 21 | ``` 22 | 23 | Then add `ngAnimate` as a dependency for your app: 24 | 25 | ```javascript 26 | angular.module('myApp', ['ngAnimate']); 27 | ``` 28 | 29 | Note that this package is not in CommonJS format, so doing `require('angular-animate')` will 30 | return `undefined`. 31 | 32 | ### bower 33 | 34 | ```shell 35 | bower install angular-animate 36 | ``` 37 | 38 | Then add a ` 42 | ``` 43 | 44 | Then add `ngAnimate` as a dependency for your app: 45 | 46 | ```javascript 47 | angular.module('myApp', ['ngAnimate']); 48 | ``` 49 | 50 | ## Documentation 51 | 52 | Documentation is available on the 53 | [AngularJS docs site](http://docs.angularjs.org/api/ngAnimate). 54 | 55 | ## License 56 | 57 | The MIT License 58 | 59 | Copyright (c) 2010-2012 Google, Inc. http://angularjs.org 60 | 61 | Permission is hereby granted, free of charge, to any person obtaining a copy 62 | of this software and associated documentation files (the "Software"), to deal 63 | in the Software without restriction, including without limitation the rights 64 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 65 | copies of the Software, and to permit persons to whom the Software is 66 | furnished to do so, subject to the following conditions: 67 | 68 | The above copyright notice and this permission notice shall be included in 69 | all copies or substantial portions of the Software. 70 | 71 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 72 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 73 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 74 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 75 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 76 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 77 | THE SOFTWARE. 78 | -------------------------------------------------------------------------------- /www/lib/angular-animate/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-animate", 3 | "version": "1.3.6", 4 | "main": "./angular-animate.js", 5 | "ignore": [], 6 | "dependencies": { 7 | "angular": "1.3.6" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /www/lib/angular-animate/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-animate", 3 | "version": "1.3.6", 4 | "description": "AngularJS module for animations", 5 | "main": "angular-animate.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/angular/angular.js.git" 12 | }, 13 | "keywords": [ 14 | "angular", 15 | "framework", 16 | "browser", 17 | "animation", 18 | "client-side" 19 | ], 20 | "author": "Angular Core Team ", 21 | "license": "MIT", 22 | "bugs": { 23 | "url": "https://github.com/angular/angular.js/issues" 24 | }, 25 | "homepage": "http://angularjs.org" 26 | } 27 | -------------------------------------------------------------------------------- /www/lib/angular-sanitize/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-sanitize", 3 | "version": "1.3.6", 4 | "main": "./angular-sanitize.js", 5 | "ignore": [], 6 | "dependencies": { 7 | "angular": "1.3.6" 8 | }, 9 | "homepage": "https://github.com/angular/bower-angular-sanitize", 10 | "_release": "1.3.6", 11 | "_resolution": { 12 | "type": "version", 13 | "tag": "v1.3.6", 14 | "commit": "ccd773f961fa1fadc8d728c45a2635c73d34fb2d" 15 | }, 16 | "_source": "git://github.com/angular/bower-angular-sanitize.git", 17 | "_target": "1.3.6", 18 | "_originalSource": "angular-sanitize" 19 | } -------------------------------------------------------------------------------- /www/lib/angular-sanitize/README.md: -------------------------------------------------------------------------------- 1 | # packaged angular-sanitize 2 | 3 | This repo is for distribution on `npm` and `bower`. The source for this module is in the 4 | [main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngSanitize). 5 | Please file issues and pull requests against that repo. 6 | 7 | ## Install 8 | 9 | You can install this package either with `npm` or with `bower`. 10 | 11 | ### npm 12 | 13 | ```shell 14 | npm install angular-sanitize 15 | ``` 16 | 17 | Add a ` 21 | ``` 22 | 23 | Then add `ngSanitize` as a dependency for your app: 24 | 25 | ```javascript 26 | angular.module('myApp', ['ngSanitize']); 27 | ``` 28 | 29 | Note that this package is not in CommonJS format, so doing `require('angular-sanitize')` will 30 | return `undefined`. 31 | 32 | ### bower 33 | 34 | ```shell 35 | bower install angular-sanitize 36 | ``` 37 | 38 | Add a ` 42 | ``` 43 | 44 | Then add `ngSanitize` as a dependency for your app: 45 | 46 | ```javascript 47 | angular.module('myApp', ['ngSanitize']); 48 | ``` 49 | 50 | ## Documentation 51 | 52 | Documentation is available on the 53 | [AngularJS docs site](http://docs.angularjs.org/api/ngSanitize). 54 | 55 | ## License 56 | 57 | The MIT License 58 | 59 | Copyright (c) 2010-2012 Google, Inc. http://angularjs.org 60 | 61 | Permission is hereby granted, free of charge, to any person obtaining a copy 62 | of this software and associated documentation files (the "Software"), to deal 63 | in the Software without restriction, including without limitation the rights 64 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 65 | copies of the Software, and to permit persons to whom the Software is 66 | furnished to do so, subject to the following conditions: 67 | 68 | The above copyright notice and this permission notice shall be included in 69 | all copies or substantial portions of the Software. 70 | 71 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 72 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 73 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 74 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 75 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 76 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 77 | THE SOFTWARE. 78 | -------------------------------------------------------------------------------- /www/lib/angular-sanitize/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-sanitize", 3 | "version": "1.3.6", 4 | "main": "./angular-sanitize.js", 5 | "ignore": [], 6 | "dependencies": { 7 | "angular": "1.3.6" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /www/lib/angular-sanitize/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-sanitize", 3 | "version": "1.3.6", 4 | "description": "AngularJS module for sanitizing HTML", 5 | "main": "angular-sanitize.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/angular/angular.js.git" 12 | }, 13 | "keywords": [ 14 | "angular", 15 | "framework", 16 | "browser", 17 | "html", 18 | "client-side" 19 | ], 20 | "author": "Angular Core Team ", 21 | "license": "MIT", 22 | "bugs": { 23 | "url": "https://github.com/angular/angular.js/issues" 24 | }, 25 | "homepage": "http://angularjs.org" 26 | } 27 | -------------------------------------------------------------------------------- /www/lib/angular-ui-router/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-ui-router", 3 | "version": "0.2.13", 4 | "main": "./release/angular-ui-router.js", 5 | "dependencies": { 6 | "angular": ">= 1.0.8" 7 | }, 8 | "ignore": [ 9 | "**/.*", 10 | "node_modules", 11 | "bower_components", 12 | "component.json", 13 | "package.json", 14 | "lib", 15 | "config", 16 | "sample", 17 | "test", 18 | "tests", 19 | "ngdoc_assets", 20 | "Gruntfile.js", 21 | "files.js" 22 | ], 23 | "homepage": "https://github.com/angular-ui/ui-router", 24 | "_release": "0.2.13", 25 | "_resolution": { 26 | "type": "version", 27 | "tag": "0.2.13", 28 | "commit": "c3d543aae43d4600512520a0d70723ac31f2cb62" 29 | }, 30 | "_source": "git://github.com/angular-ui/ui-router.git", 31 | "_target": "0.2.13", 32 | "_originalSource": "angular-ui-router" 33 | } -------------------------------------------------------------------------------- /www/lib/angular-ui-router/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright (c) 2014 The AngularUI Team, Karsten Sperling 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /www/lib/angular-ui-router/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-ui-router", 3 | "version": "0.2.13", 4 | "main": "./release/angular-ui-router.js", 5 | "dependencies": { 6 | "angular": ">= 1.0.8" 7 | }, 8 | "ignore": [ 9 | "**/.*", 10 | "node_modules", 11 | "bower_components", 12 | "component.json", 13 | "package.json", 14 | "lib", 15 | "config", 16 | "sample", 17 | "test", 18 | "tests", 19 | "ngdoc_assets", 20 | "Gruntfile.js", 21 | "files.js" 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /www/lib/angular-ui-router/src/stateFilters.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @ngdoc filter 3 | * @name ui.router.state.filter:isState 4 | * 5 | * @requires ui.router.state.$state 6 | * 7 | * @description 8 | * Translates to {@link ui.router.state.$state#methods_is $state.is("stateName")}. 9 | */ 10 | $IsStateFilter.$inject = ['$state']; 11 | function $IsStateFilter($state) { 12 | var isFilter = function (state) { 13 | return $state.is(state); 14 | }; 15 | isFilter.$stateful = true; 16 | return isFilter; 17 | } 18 | 19 | /** 20 | * @ngdoc filter 21 | * @name ui.router.state.filter:includedByState 22 | * 23 | * @requires ui.router.state.$state 24 | * 25 | * @description 26 | * Translates to {@link ui.router.state.$state#methods_includes $state.includes('fullOrPartialStateName')}. 27 | */ 28 | $IncludedByStateFilter.$inject = ['$state']; 29 | function $IncludedByStateFilter($state) { 30 | var includesFilter = function (state) { 31 | return $state.includes(state); 32 | }; 33 | includesFilter.$stateful = true; 34 | return includesFilter; 35 | } 36 | 37 | angular.module('ui.router.state') 38 | .filter('isState', $IsStateFilter) 39 | .filter('includedByState', $IncludedByStateFilter); 40 | -------------------------------------------------------------------------------- /www/lib/angular-ui-router/src/view.js: -------------------------------------------------------------------------------- 1 | 2 | $ViewProvider.$inject = []; 3 | function $ViewProvider() { 4 | 5 | this.$get = $get; 6 | /** 7 | * @ngdoc object 8 | * @name ui.router.state.$view 9 | * 10 | * @requires ui.router.util.$templateFactory 11 | * @requires $rootScope 12 | * 13 | * @description 14 | * 15 | */ 16 | $get.$inject = ['$rootScope', '$templateFactory']; 17 | function $get( $rootScope, $templateFactory) { 18 | return { 19 | // $view.load('full.viewName', { template: ..., controller: ..., resolve: ..., async: false, params: ... }) 20 | /** 21 | * @ngdoc function 22 | * @name ui.router.state.$view#load 23 | * @methodOf ui.router.state.$view 24 | * 25 | * @description 26 | * 27 | * @param {string} name name 28 | * @param {object} options option object. 29 | */ 30 | load: function load(name, options) { 31 | var result, defaults = { 32 | template: null, controller: null, view: null, locals: null, notify: true, async: true, params: {} 33 | }; 34 | options = extend(defaults, options); 35 | 36 | if (options.view) { 37 | result = $templateFactory.fromConfig(options.view, options.params, options.locals); 38 | } 39 | if (result && options.notify) { 40 | /** 41 | * @ngdoc event 42 | * @name ui.router.state.$state#$viewContentLoading 43 | * @eventOf ui.router.state.$view 44 | * @eventType broadcast on root scope 45 | * @description 46 | * 47 | * Fired once the view **begins loading**, *before* the DOM is rendered. 48 | * 49 | * @param {Object} event Event object. 50 | * @param {Object} viewConfig The view config properties (template, controller, etc). 51 | * 52 | * @example 53 | * 54 | *
55 |          * $scope.$on('$viewContentLoading',
56 |          * function(event, viewConfig){
57 |          *     // Access to all the view config properties.
58 |          *     // and one special property 'targetView'
59 |          *     // viewConfig.targetView
60 |          * });
61 |          * 
62 | */ 63 | $rootScope.$broadcast('$viewContentLoading', options); 64 | } 65 | return result; 66 | } 67 | }; 68 | } 69 | } 70 | 71 | angular.module('ui.router.state').provider('$view', $ViewProvider); 72 | -------------------------------------------------------------------------------- /www/lib/angular-ui-router/src/viewScroll.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @ngdoc object 3 | * @name ui.router.state.$uiViewScrollProvider 4 | * 5 | * @description 6 | * Provider that returns the {@link ui.router.state.$uiViewScroll} service function. 7 | */ 8 | function $ViewScrollProvider() { 9 | 10 | var useAnchorScroll = false; 11 | 12 | /** 13 | * @ngdoc function 14 | * @name ui.router.state.$uiViewScrollProvider#useAnchorScroll 15 | * @methodOf ui.router.state.$uiViewScrollProvider 16 | * 17 | * @description 18 | * Reverts back to using the core [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) service for 19 | * scrolling based on the url anchor. 20 | */ 21 | this.useAnchorScroll = function () { 22 | useAnchorScroll = true; 23 | }; 24 | 25 | /** 26 | * @ngdoc object 27 | * @name ui.router.state.$uiViewScroll 28 | * 29 | * @requires $anchorScroll 30 | * @requires $timeout 31 | * 32 | * @description 33 | * When called with a jqLite element, it scrolls the element into view (after a 34 | * `$timeout` so the DOM has time to refresh). 35 | * 36 | * If you prefer to rely on `$anchorScroll` to scroll the view to the anchor, 37 | * this can be enabled by calling {@link ui.router.state.$uiViewScrollProvider#methods_useAnchorScroll `$uiViewScrollProvider.useAnchorScroll()`}. 38 | */ 39 | this.$get = ['$anchorScroll', '$timeout', function ($anchorScroll, $timeout) { 40 | if (useAnchorScroll) { 41 | return $anchorScroll; 42 | } 43 | 44 | return function ($element) { 45 | $timeout(function () { 46 | $element[0].scrollIntoView(); 47 | }, 0, false); 48 | }; 49 | }]; 50 | } 51 | 52 | angular.module('ui.router.state').provider('$uiViewScroll', $ViewScrollProvider); 53 | -------------------------------------------------------------------------------- /www/lib/angular/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular", 3 | "version": "1.3.6", 4 | "main": "./angular.js", 5 | "ignore": [], 6 | "dependencies": {}, 7 | "homepage": "https://github.com/angular/bower-angular", 8 | "_release": "1.3.6", 9 | "_resolution": { 10 | "type": "version", 11 | "tag": "v1.3.6", 12 | "commit": "a525f1199d44c2aa6d69b1900d4a2e950adc5752" 13 | }, 14 | "_source": "git://github.com/angular/bower-angular.git", 15 | "_target": "1.3.6", 16 | "_originalSource": "angular" 17 | } -------------------------------------------------------------------------------- /www/lib/angular/README.md: -------------------------------------------------------------------------------- 1 | # packaged angular 2 | 3 | This repo is for distribution on `npm` and `bower`. The source for this module is in the 4 | [main AngularJS repo](https://github.com/angular/angular.js). 5 | Please file issues and pull requests against that repo. 6 | 7 | ## Install 8 | 9 | You can install this package either with `npm` or with `bower`. 10 | 11 | ### npm 12 | 13 | ```shell 14 | npm install angular 15 | ``` 16 | 17 | Then add a ` 21 | ``` 22 | 23 | Note that this package is not in CommonJS format, so doing `require('angular')` will return `undefined`. 24 | If you're using [Browserify](https://github.com/substack/node-browserify), you can use 25 | [exposify](https://github.com/thlorenz/exposify) to have `require('angular')` return the `angular` 26 | global. 27 | 28 | ### bower 29 | 30 | ```shell 31 | bower install angular 32 | ``` 33 | 34 | Then add a ` 38 | ``` 39 | 40 | ## Documentation 41 | 42 | Documentation is available on the 43 | [AngularJS docs site](http://docs.angularjs.org/). 44 | 45 | ## License 46 | 47 | The MIT License 48 | 49 | Copyright (c) 2010-2012 Google, Inc. http://angularjs.org 50 | 51 | Permission is hereby granted, free of charge, to any person obtaining a copy 52 | of this software and associated documentation files (the "Software"), to deal 53 | in the Software without restriction, including without limitation the rights 54 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 55 | copies of the Software, and to permit persons to whom the Software is 56 | furnished to do so, subject to the following conditions: 57 | 58 | The above copyright notice and this permission notice shall be included in 59 | all copies or substantial portions of the Software. 60 | 61 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 62 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 63 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 64 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 65 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 66 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 67 | THE SOFTWARE. 68 | -------------------------------------------------------------------------------- /www/lib/angular/angular-csp.css: -------------------------------------------------------------------------------- 1 | /* Include this file in your html if you are using the CSP mode. */ 2 | 3 | @charset "UTF-8"; 4 | 5 | [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], 6 | .ng-cloak, .x-ng-cloak, 7 | .ng-hide:not(.ng-hide-animate) { 8 | display: none !important; 9 | } 10 | 11 | ng\:form { 12 | display: block; 13 | } 14 | -------------------------------------------------------------------------------- /www/lib/angular/angular.min.js.gzip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/angular/angular.min.js.gzip -------------------------------------------------------------------------------- /www/lib/angular/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular", 3 | "version": "1.3.6", 4 | "main": "./angular.js", 5 | "ignore": [], 6 | "dependencies": { 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /www/lib/angular/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular", 3 | "version": "1.3.6", 4 | "description": "HTML enhanced for web apps", 5 | "main": "angular.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/angular/angular.js.git" 12 | }, 13 | "keywords": [ 14 | "angular", 15 | "framework", 16 | "browser", 17 | "client-side" 18 | ], 19 | "author": "Angular Core Team ", 20 | "license": "MIT", 21 | "bugs": { 22 | "url": "https://github.com/angular/angular.js/issues" 23 | }, 24 | "homepage": "http://angularjs.org" 25 | } 26 | -------------------------------------------------------------------------------- /www/lib/ionic/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ionic", 3 | "version": "1.0.0-rc.0", 4 | "codename": "neodymium-newt", 5 | "homepage": "https://github.com/driftyco/ionic", 6 | "authors": [ 7 | "Max Lynch ", 8 | "Adam Bradley ", 9 | "Ben Sperry " 10 | ], 11 | "description": "Advanced HTML5 hybrid mobile app development framework.", 12 | "main": [ 13 | "css/ionic.css", 14 | "fonts/*", 15 | "js/ionic.js", 16 | "js/ionic-angular.js" 17 | ], 18 | "keywords": [ 19 | "mobile", 20 | "html5", 21 | "ionic", 22 | "cordova", 23 | "phonegap", 24 | "trigger", 25 | "triggerio", 26 | "angularjs", 27 | "angular" 28 | ], 29 | "license": "MIT", 30 | "private": false, 31 | "dependencies": { 32 | "angular": "1.3.6", 33 | "angular-animate": "1.3.6", 34 | "angular-sanitize": "1.3.6", 35 | "angular-ui-router": "0.2.13" 36 | }, 37 | "_release": "1.0.0-rc.0", 38 | "_resolution": { 39 | "type": "version", 40 | "tag": "v1.0.0-rc.0", 41 | "commit": "1144bb0fa11bdd65d69da8e4a96df14534b678ec" 42 | }, 43 | "_source": "git://github.com/driftyco/ionic-bower.git", 44 | "_target": "1.0.0-rc.0", 45 | "_originalSource": "driftyco/ionic-bower" 46 | } -------------------------------------------------------------------------------- /www/lib/ionic/README.md: -------------------------------------------------------------------------------- 1 | # ionic-bower 2 | 3 | Bower repository for [Ionic Framework](http://github.com/driftyco/ionic) 4 | 5 | ### Usage 6 | 7 | Include `js/ionic.bundle.js` to get ionic and all of its dependencies. 8 | 9 | Alternatively, include the individual ionic files with the dependencies separately. 10 | 11 | ### Versions 12 | 13 | To install the latest stable version, `bower install driftyco/ionic-bower#v1.0.0-beta.13` 14 | 15 | To install the latest nightly release, `bower install driftyco/ionic-bower#master` 16 | -------------------------------------------------------------------------------- /www/lib/ionic/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ionic", 3 | "version": "1.0.0-rc.0", 4 | "codename": "neodymium-newt", 5 | "homepage": "https://github.com/driftyco/ionic", 6 | "authors": [ 7 | "Max Lynch ", 8 | "Adam Bradley ", 9 | "Ben Sperry " 10 | ], 11 | "description": "Advanced HTML5 hybrid mobile app development framework.", 12 | "main": [ 13 | "css/ionic.css", 14 | "fonts/*", 15 | "js/ionic.js", 16 | "js/ionic-angular.js" 17 | ], 18 | "keywords": [ 19 | "mobile", 20 | "html5", 21 | "ionic", 22 | "cordova", 23 | "phonegap", 24 | "trigger", 25 | "triggerio", 26 | "angularjs", 27 | "angular" 28 | ], 29 | "license": "MIT", 30 | "private": false, 31 | "dependencies": { 32 | "angular": "1.3.6", 33 | "angular-animate": "1.3.6", 34 | "angular-sanitize": "1.3.6", 35 | "angular-ui-router": "0.2.13" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /www/lib/ionic/fonts/ionicons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/ionic/fonts/ionicons.eot -------------------------------------------------------------------------------- /www/lib/ionic/fonts/ionicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/ionic/fonts/ionicons.ttf -------------------------------------------------------------------------------- /www/lib/ionic/fonts/ionicons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/ionic/fonts/ionicons.woff -------------------------------------------------------------------------------- /www/lib/ionic/scss/_animations.scss: -------------------------------------------------------------------------------- 1 | 2 | // Slide up from the bottom, used for modals 3 | // ------------------------------- 4 | 5 | .slide-in-up { 6 | @include translate3d(0, 100%, 0); 7 | } 8 | .slide-in-up.ng-enter, 9 | .slide-in-up > .ng-enter { 10 | @include transition(all cubic-bezier(.1, .7, .1, 1) 400ms); 11 | } 12 | .slide-in-up.ng-enter-active, 13 | .slide-in-up > .ng-enter-active { 14 | @include translate3d(0, 0, 0); 15 | } 16 | 17 | .slide-in-up.ng-leave, 18 | .slide-in-up > .ng-leave { 19 | @include transition(all ease-in-out 250ms); 20 | } 21 | 22 | 23 | // Scale Out 24 | // Scale from hero (1 in this case) to zero 25 | // ------------------------------- 26 | 27 | @-webkit-keyframes scaleOut { 28 | from { -webkit-transform: scale(1); opacity: 1; } 29 | to { -webkit-transform: scale(0.8); opacity: 0; } 30 | } 31 | @keyframes scaleOut { 32 | from { transform: scale(1); opacity: 1; } 33 | to { transform: scale(0.8); opacity: 0; } 34 | } 35 | 36 | 37 | // Super Scale In 38 | // Scale from super (1.x) to duper (1 in this case) 39 | // ------------------------------- 40 | 41 | @-webkit-keyframes superScaleIn { 42 | from { -webkit-transform: scale(1.2); opacity: 0; } 43 | to { -webkit-transform: scale(1); opacity: 1 } 44 | } 45 | @keyframes superScaleIn { 46 | from { transform: scale(1.2); opacity: 0; } 47 | to { transform: scale(1); opacity: 1; } 48 | } 49 | -------------------------------------------------------------------------------- /www/lib/ionic/scss/_backdrop.scss: -------------------------------------------------------------------------------- 1 | 2 | .backdrop { 3 | position: fixed; 4 | top: 0; 5 | left: 0; 6 | z-index: $z-index-backdrop; 7 | 8 | width: 100%; 9 | height: 100%; 10 | 11 | background-color: $loading-backdrop-bg-color; 12 | 13 | visibility: hidden; 14 | opacity: 0; 15 | 16 | &.visible { 17 | visibility: visible; 18 | } 19 | &.active { 20 | opacity: 1; 21 | } 22 | 23 | @include transition($loading-backdrop-fadein-duration opacity linear); 24 | } 25 | -------------------------------------------------------------------------------- /www/lib/ionic/scss/_badge.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Badges 4 | * -------------------------------------------------- 5 | */ 6 | 7 | .badge { 8 | @include badge-style($badge-default-bg, $badge-default-text); 9 | z-index: $z-index-badge; 10 | display: inline-block; 11 | padding: 3px 8px; 12 | min-width: 10px; 13 | border-radius: $badge-border-radius; 14 | vertical-align: baseline; 15 | text-align: center; 16 | white-space: nowrap; 17 | font-weight: $badge-font-weight; 18 | font-size: $badge-font-size; 19 | line-height: $badge-line-height; 20 | 21 | &:empty { 22 | display: none; 23 | } 24 | } 25 | 26 | //Be sure to override specificity of rule that 'badge color matches tab color by default' 27 | .tabs .tab-item .badge, 28 | .badge { 29 | &.badge-light { 30 | @include badge-style($badge-light-bg, $badge-light-text); 31 | } 32 | &.badge-stable { 33 | @include badge-style($badge-stable-bg, $badge-stable-text); 34 | } 35 | &.badge-positive { 36 | @include badge-style($badge-positive-bg, $badge-positive-text); 37 | } 38 | &.badge-calm { 39 | @include badge-style($badge-calm-bg, $badge-calm-text); 40 | } 41 | &.badge-assertive { 42 | @include badge-style($badge-assertive-bg, $badge-assertive-text); 43 | } 44 | &.badge-balanced { 45 | @include badge-style($badge-balanced-bg, $badge-balanced-text); 46 | } 47 | &.badge-energized { 48 | @include badge-style($badge-energized-bg, $badge-energized-text); 49 | } 50 | &.badge-royal { 51 | @include badge-style($badge-royal-bg, $badge-royal-text); 52 | } 53 | &.badge-dark { 54 | @include badge-style($badge-dark-bg, $badge-dark-text); 55 | } 56 | } 57 | 58 | // Quick fix for labels/badges in buttons 59 | .button .badge { 60 | position: relative; 61 | top: -1px; 62 | } 63 | -------------------------------------------------------------------------------- /www/lib/ionic/scss/_button-bar.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Button Bar 4 | * -------------------------------------------------- 5 | */ 6 | 7 | .button-bar { 8 | @include display-flex(); 9 | @include flex(1); 10 | width: 100%; 11 | 12 | &.button-bar-inline { 13 | display: block; 14 | width: auto; 15 | 16 | @include clearfix(); 17 | 18 | > .button { 19 | width: auto; 20 | display: inline-block; 21 | float: left; 22 | } 23 | } 24 | } 25 | 26 | .button-bar > .button { 27 | @include flex(1); 28 | display: block; 29 | 30 | overflow: hidden; 31 | 32 | padding: 0 16px; 33 | 34 | width: 0; 35 | 36 | border-width: 1px 0px 1px 1px; 37 | border-radius: 0; 38 | text-align: center; 39 | text-overflow: ellipsis; 40 | white-space: nowrap; 41 | 42 | &:before, 43 | .icon:before { 44 | line-height: 44px; 45 | } 46 | 47 | &:first-child { 48 | border-radius: $button-border-radius 0px 0px $button-border-radius; 49 | } 50 | &:last-child { 51 | border-right-width: 1px; 52 | border-radius: 0px $button-border-radius $button-border-radius 0px; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /www/lib/ionic/scss/_loaders.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Loaders (Spinners) 3 | * -------------------------------------------------- 4 | */ 5 | 6 | svg.loader { 7 | width: 28px; 8 | height: 28px; 9 | stroke: #333; 10 | fill: #333; 11 | } 12 | 13 | .loader-ios, 14 | .loader-ios-small { 15 | 16 | line { 17 | stroke: #69717d; 18 | } 19 | 20 | } 21 | 22 | .loader-android { 23 | 24 | circle { 25 | stroke: #4b8bf4; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /www/lib/ionic/scss/_loading.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Loading 4 | * -------------------------------------------------- 5 | */ 6 | 7 | .loading-container { 8 | position: absolute; 9 | left: 0; 10 | top: 0; 11 | right: 0; 12 | bottom: 0; 13 | 14 | z-index: $z-index-loading; 15 | 16 | @include display-flex(); 17 | @include justify-content(center); 18 | @include align-items(center); 19 | 20 | @include transition(0.2s opacity linear); 21 | visibility: hidden; 22 | opacity: 0; 23 | 24 | &:not(.visible) .icon { 25 | display: none; 26 | } 27 | &.visible { 28 | visibility: visible; 29 | } 30 | &.active { 31 | opacity: 1; 32 | } 33 | 34 | .loading { 35 | padding: $loading-padding; 36 | 37 | border-radius: $loading-border-radius; 38 | background-color: $loading-bg-color; 39 | 40 | color: $loading-text-color; 41 | 42 | text-align: center; 43 | text-overflow: ellipsis; 44 | font-size: $loading-font-size; 45 | 46 | h1, h2, h3, h4, h5, h6 { 47 | color: $loading-text-color; 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /www/lib/ionic/scss/_menu.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Menus 4 | * -------------------------------------------------- 5 | * Side panel structure 6 | */ 7 | 8 | .menu { 9 | position: absolute; 10 | top: 0; 11 | bottom: 0; 12 | z-index: $z-index-menu; 13 | overflow: hidden; 14 | 15 | min-height: 100%; 16 | max-height: 100%; 17 | width: $menu-width; 18 | 19 | background-color: $menu-bg; 20 | 21 | .scroll-content { 22 | z-index: $z-index-menu-scroll-content; 23 | } 24 | 25 | .bar-header { 26 | z-index: $z-index-menu-bar-header; 27 | } 28 | } 29 | 30 | .menu-content { 31 | @include transform(none); 32 | box-shadow: $menu-side-shadow; 33 | } 34 | 35 | .menu-open .menu-content .pane, 36 | .menu-open .menu-content .scroll-content { 37 | pointer-events: none; 38 | } 39 | 40 | .grade-b .menu-content, 41 | .grade-c .menu-content { 42 | @include box-sizing(content-box); 43 | right: -1px; 44 | left: -1px; 45 | border-right: 1px solid #ccc; 46 | border-left: 1px solid #ccc; 47 | box-shadow: none; 48 | } 49 | 50 | .menu-left { 51 | left: 0; 52 | } 53 | 54 | .menu-right { 55 | right: 0; 56 | } 57 | 58 | .aside-open.aside-resizing .menu-right { 59 | display: none; 60 | } 61 | 62 | .menu-animated { 63 | @include transition-transform($menu-animation-speed ease); 64 | } 65 | -------------------------------------------------------------------------------- /www/lib/ionic/scss/_modal.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Modals 4 | * -------------------------------------------------- 5 | * Modals are independent windows that slide in from off-screen. 6 | */ 7 | 8 | .modal-backdrop { 9 | position: fixed; 10 | top: 0; 11 | left: 0; 12 | z-index: $z-index-modal; 13 | width: 100%; 14 | height: 100%; 15 | } 16 | 17 | .modal { 18 | display: block; 19 | position: absolute; 20 | top: 0; 21 | z-index: $z-index-modal; 22 | overflow: hidden; 23 | min-height: 100%; 24 | width: 100%; 25 | background-color: $modal-bg-color; 26 | } 27 | 28 | @media (min-width: $modal-inset-mode-break-point) { 29 | // inset mode is when the modal doesn't fill the entire 30 | // display but instead is centered within a large display 31 | .modal { 32 | top: $modal-inset-mode-top; 33 | right: $modal-inset-mode-right; 34 | bottom: $modal-inset-mode-bottom; 35 | left: $modal-inset-mode-left; 36 | overflow: visible; 37 | min-height: $modal-inset-mode-min-height; 38 | width: (100% - $modal-inset-mode-left - $modal-inset-mode-right); 39 | } 40 | 41 | .modal.ng-leave-active { 42 | bottom: 0; 43 | } 44 | 45 | // remove ios header padding from inset header 46 | .platform-ios.platform-cordova .modal-wrapper .modal{ 47 | .bar-header:not(.bar-subheader) { 48 | height: $bar-height; 49 | > * { 50 | margin-top: 0; 51 | } 52 | } 53 | .tabs-top > .tabs, 54 | .tabs.tabs-top { 55 | top: $bar-height; 56 | } 57 | .has-header, 58 | .bar-subheader { 59 | top: $bar-height; 60 | } 61 | .has-subheader { 62 | top: $bar-height + $bar-subheader-height; 63 | } 64 | .has-tabs-top { 65 | top: $bar-height + $tabs-height; 66 | } 67 | .has-header.has-subheader.has-tabs-top { 68 | top: $bar-height + $bar-subheader-height + $tabs-height; 69 | } 70 | } 71 | 72 | .modal-backdrop { 73 | @include transition(background-color 300ms ease-in-out); 74 | background-color: $modal-backdrop-bg-inactive; 75 | 76 | &.active { 77 | background-color: $modal-backdrop-bg-active; 78 | } 79 | } 80 | } 81 | 82 | // disable clicks on all but the modal 83 | .modal-open { 84 | pointer-events: none; 85 | 86 | .modal, 87 | .modal-backdrop { 88 | pointer-events: auto; 89 | } 90 | // prevent clicks on modal when loading overlay is active though 91 | &.loading-active { 92 | .modal, 93 | .modal-backdrop { 94 | pointer-events: none; 95 | } 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /www/lib/ionic/scss/_platform.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Platform 4 | * -------------------------------------------------- 5 | * Platform specific tweaks 6 | */ 7 | 8 | .platform-ios.platform-cordova { 9 | // iOS has a status bar which sits on top of the header. 10 | // Bump down everything to make room for it. However, if 11 | // if its in Cordova, and set to fullscreen, then disregard the bump. 12 | &:not(.fullscreen) { 13 | .bar-header:not(.bar-subheader) { 14 | height: $bar-height + $ios-statusbar-height; 15 | 16 | &.item-input-inset .item-input-wrapper { 17 | margin-top: 19px !important; 18 | } 19 | 20 | > * { 21 | margin-top: $ios-statusbar-height; 22 | } 23 | } 24 | .tabs-top > .tabs, 25 | .tabs.tabs-top { 26 | top: $bar-height + $ios-statusbar-height; 27 | } 28 | 29 | .has-header, 30 | .bar-subheader { 31 | top: $bar-height + $ios-statusbar-height; 32 | } 33 | .has-subheader { 34 | top: $bar-height + $bar-subheader-height + $ios-statusbar-height; 35 | } 36 | .has-header.has-tabs-top { 37 | top: $bar-height + $tabs-height + $ios-statusbar-height; 38 | } 39 | .has-header.has-subheader.has-tabs-top { 40 | top: $bar-height + $bar-subheader-height + $tabs-height + $ios-statusbar-height; 41 | } 42 | } 43 | &.status-bar-hide { 44 | // Cordova doesn't adjust the body height correctly, this makes up for it 45 | margin-bottom: 20px; 46 | } 47 | } 48 | 49 | @media (orientation:landscape) { 50 | .platform-ios.platform-browser.platform-ipad { 51 | position: fixed; // required for iPad 7 Safari 52 | } 53 | } 54 | 55 | .platform-c:not(.enable-transitions) * { 56 | // disable transitions on grade-c devices (Android 2) 57 | -webkit-transition: none !important; 58 | transition: none !important; 59 | } 60 | -------------------------------------------------------------------------------- /www/lib/ionic/scss/_popup.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Popups 4 | * -------------------------------------------------- 5 | */ 6 | 7 | .popup-container { 8 | position: absolute; 9 | top: 0; 10 | left: 0; 11 | bottom: 0; 12 | right: 0; 13 | background: rgba(0,0,0,0); 14 | 15 | @include display-flex(); 16 | @include justify-content(center); 17 | @include align-items(center); 18 | 19 | z-index: $z-index-popup; 20 | 21 | // Start hidden 22 | visibility: hidden; 23 | &.popup-showing { 24 | visibility: visible; 25 | } 26 | 27 | &.popup-hidden .popup { 28 | @include animation-name(scaleOut); 29 | @include animation-duration($popup-leave-animation-duration); 30 | @include animation-timing-function(ease-in-out); 31 | @include animation-fill-mode(both); 32 | } 33 | 34 | &.active .popup { 35 | @include animation-name(superScaleIn); 36 | @include animation-duration($popup-enter-animation-duration); 37 | @include animation-timing-function(ease-in-out); 38 | @include animation-fill-mode(both); 39 | } 40 | 41 | .popup { 42 | width: $popup-width; 43 | max-width: 100%; 44 | max-height: 90%; 45 | 46 | border-radius: $popup-border-radius; 47 | background-color: $popup-background-color; 48 | 49 | @include display-flex(); 50 | @include flex-direction(column); 51 | } 52 | 53 | input, 54 | textarea { 55 | width: 100%; 56 | } 57 | } 58 | 59 | .popup-head { 60 | padding: 15px 10px; 61 | border-bottom: 1px solid #eee; 62 | text-align: center; 63 | } 64 | .popup-title { 65 | margin: 0; 66 | padding: 0; 67 | font-size: 15px; 68 | } 69 | .popup-sub-title { 70 | margin: 5px 0 0 0; 71 | padding: 0; 72 | font-weight: normal; 73 | font-size: 11px; 74 | } 75 | .popup-body { 76 | padding: 10px; 77 | overflow: scroll; 78 | } 79 | 80 | .popup-buttons { 81 | @include display-flex(); 82 | @include flex-direction(row); 83 | padding: 10px; 84 | min-height: $popup-button-min-height + 20; 85 | 86 | .button { 87 | @include flex(1); 88 | display: block; 89 | min-height: $popup-button-min-height; 90 | border-radius: $popup-button-border-radius; 91 | line-height: $popup-button-line-height; 92 | 93 | margin-right: 5px; 94 | &:last-child { 95 | margin-right: 0px; 96 | } 97 | } 98 | } 99 | 100 | .popup-open { 101 | pointer-events: none; 102 | 103 | &.modal-open .modal { 104 | pointer-events: none; 105 | } 106 | 107 | .popup-backdrop, .popup { 108 | pointer-events: auto; 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /www/lib/ionic/scss/_progress.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Progress 4 | * -------------------------------------------------- 5 | */ 6 | 7 | progress { 8 | display: block; 9 | margin: $progress-margin; 10 | width: $progress-width; 11 | } 12 | -------------------------------------------------------------------------------- /www/lib/ionic/scss/_radio.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Radio Button Inputs 4 | * -------------------------------------------------- 5 | */ 6 | 7 | .item-radio { 8 | padding: 0; 9 | 10 | &:hover { 11 | cursor: pointer; 12 | } 13 | } 14 | 15 | .item-radio .item-content { 16 | /* give some room to the right for the checkmark icon */ 17 | padding-right: $item-padding * 4; 18 | } 19 | 20 | .item-radio .radio-icon { 21 | /* checkmark icon will be hidden by default */ 22 | position: absolute; 23 | top: 0; 24 | right: 0; 25 | z-index: $z-index-item-radio; 26 | visibility: hidden; 27 | padding: $item-padding - 2; 28 | height: 100%; 29 | font-size: 24px; 30 | } 31 | 32 | .item-radio input { 33 | /* hide any radio button inputs elements (the ugly circles) */ 34 | position: absolute; 35 | left: -9999px; 36 | 37 | &:checked ~ .item-content { 38 | /* style the item content when its checked */ 39 | background: #f7f7f7; 40 | } 41 | 42 | &:checked ~ .radio-icon { 43 | /* show the checkmark icon when its checked */ 44 | visibility: visible; 45 | } 46 | } 47 | 48 | // Hack for Android to correctly display the checked item 49 | // http://timpietrusky.com/advanced-checkbox-hack 50 | .platform-android.grade-b .item-radio, 51 | .platform-android.grade-c .item-radio { 52 | -webkit-animation: androidCheckedbugfix infinite 1s; 53 | } 54 | @-webkit-keyframes androidCheckedbugfix { 55 | from { padding: 0; } 56 | to { padding: 0; } 57 | } 58 | -------------------------------------------------------------------------------- /www/lib/ionic/scss/_slide-box.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Slide Box 4 | * -------------------------------------------------- 5 | */ 6 | 7 | .slider { 8 | position: relative; 9 | visibility: hidden; 10 | // Make sure items don't scroll over ever 11 | overflow: hidden; 12 | } 13 | 14 | .slider-slides { 15 | position: relative; 16 | height: 100%; 17 | } 18 | 19 | .slider-slide { 20 | position: relative; 21 | display: block; 22 | float: left; 23 | width: 100%; 24 | height: 100%; 25 | vertical-align: top; 26 | } 27 | 28 | .slider-slide-image { 29 | > img { 30 | width: 100%; 31 | } 32 | } 33 | 34 | .slider-pager { 35 | position: absolute; 36 | bottom: 20px; 37 | z-index: $z-index-slider-pager; 38 | width: 100%; 39 | height: 15px; 40 | text-align: center; 41 | 42 | .slider-pager-page { 43 | display: inline-block; 44 | margin: 0px 3px; 45 | width: 15px; 46 | color: #000; 47 | text-decoration: none; 48 | 49 | opacity: 0.3; 50 | 51 | &.active { 52 | @include transition(opacity 0.4s ease-in); 53 | opacity: 1; 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /www/lib/ionic/scss/_spinner.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Spinners 3 | * -------------------------------------------------- 4 | */ 5 | 6 | .spinner { 7 | svg { 8 | width: $spinner-width; 9 | height: $spinner-height; 10 | } 11 | 12 | stroke: $spinner-default-stroke; 13 | fill: $spinner-default-fill; 14 | 15 | &.spinner-light { 16 | stroke: $spinner-light-stroke; 17 | fill: $spinner-light-fill; 18 | } 19 | &.spinner-stable { 20 | stroke: $spinner-stable-stroke; 21 | fill: $spinner-stable-fill; 22 | } 23 | &.spinner-positive { 24 | stroke: $spinner-positive-stroke; 25 | fill: $spinner-positive-fill; 26 | } 27 | &.spinner-calm { 28 | stroke: $spinner-calm-stroke; 29 | fill: $spinner-calm-fill; 30 | } 31 | &.spinner-balanced { 32 | stroke: $spinner-balanced-stroke; 33 | fill: $spinner-balanced-fill; 34 | } 35 | &.spinner-assertive { 36 | stroke: $spinner-assertive-stroke; 37 | fill: $spinner-assertive-fill; 38 | } 39 | &.spinner-energized { 40 | stroke: $spinner-energized-stroke; 41 | fill: $spinner-energized-fill; 42 | } 43 | &.spinner-royal { 44 | stroke: $spinner-royal-stroke; 45 | fill: $spinner-royal-fill; 46 | } 47 | &.spinner-dark { 48 | stroke: $spinner-dark-stroke; 49 | fill: $spinner-dark-fill; 50 | } 51 | } 52 | 53 | .spinner-android { 54 | stroke: #4b8bf4; 55 | } 56 | 57 | .spinner-ios, 58 | .spinner-ios-small { 59 | stroke: #69717d; 60 | } 61 | 62 | .spinner-spiral { 63 | .stop1 { 64 | stop-color: $spinner-light-fill; 65 | stop-opacity: 0; 66 | } 67 | 68 | &.spinner-light { 69 | .stop1 { 70 | stop-color: $spinner-default-fill; 71 | } 72 | .stop2 { 73 | stop-color: $spinner-light-fill; 74 | } 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /www/lib/ionic/scss/_split-pane.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Split Pane 4 | * -------------------------------------------------- 5 | */ 6 | 7 | .split-pane { 8 | @include display-flex(); 9 | @include align-items(stretch); 10 | width: 100%; 11 | height: 100%; 12 | } 13 | 14 | .split-pane-menu { 15 | @include flex(0, 0, $split-pane-menu-width); 16 | 17 | overflow-y: auto; 18 | width: $split-pane-menu-width; 19 | height: 100%; 20 | border-right: 1px solid $split-pane-menu-border-color; 21 | 22 | @media all and (max-width: 568px) { 23 | border-right: none; 24 | } 25 | } 26 | 27 | .split-pane-content { 28 | @include flex(1, 0, auto); 29 | } 30 | -------------------------------------------------------------------------------- /www/lib/ionic/scss/ionic.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | @import 4 | // Ionicons 5 | "ionicons/ionicons.scss", 6 | 7 | // Variables 8 | "mixins", 9 | "variables", 10 | 11 | // Base 12 | "reset", 13 | "scaffolding", 14 | "type", 15 | 16 | // Components 17 | "action-sheet", 18 | "backdrop", 19 | "bar", 20 | "tabs", 21 | "menu", 22 | "modal", 23 | "popover", 24 | "popup", 25 | "loading", 26 | "items", 27 | "list", 28 | "badge", 29 | "slide-box", 30 | "refresher", 31 | "spinner", 32 | 33 | // Forms 34 | "form", 35 | "checkbox", 36 | "toggle", 37 | "radio", 38 | "range", 39 | "select", 40 | "progress", 41 | 42 | // Buttons 43 | "button", 44 | "button-bar", 45 | 46 | // Util 47 | "grid", 48 | "util", 49 | "platform", 50 | 51 | // Animations 52 | "animations", 53 | "transitions"; 54 | -------------------------------------------------------------------------------- /www/lib/ionic/scss/ionicons/_ionicons-animation.scss: -------------------------------------------------------------------------------- 1 | // Animation Icons 2 | // -------------------------- 3 | 4 | .#{$ionicons-prefix}spin { 5 | -webkit-animation: spin 1s infinite linear; 6 | -moz-animation: spin 1s infinite linear; 7 | -o-animation: spin 1s infinite linear; 8 | animation: spin 1s infinite linear; 9 | } 10 | 11 | @-moz-keyframes spin { 12 | 0% { -moz-transform: rotate(0deg); } 13 | 100% { -moz-transform: rotate(359deg); } 14 | } 15 | @-webkit-keyframes spin { 16 | 0% { -webkit-transform: rotate(0deg); } 17 | 100% { -webkit-transform: rotate(359deg); } 18 | } 19 | @-o-keyframes spin { 20 | 0% { -o-transform: rotate(0deg); } 21 | 100% { -o-transform: rotate(359deg); } 22 | } 23 | @-ms-keyframes spin { 24 | 0% { -ms-transform: rotate(0deg); } 25 | 100% { -ms-transform: rotate(359deg); } 26 | } 27 | @keyframes spin { 28 | 0% { transform: rotate(0deg); } 29 | 100% { transform: rotate(359deg); } 30 | } 31 | 32 | 33 | .#{$ionicons-prefix}loading-a, 34 | .#{$ionicons-prefix}loading-b, 35 | .#{$ionicons-prefix}loading-c, 36 | .#{$ionicons-prefix}loading-d, 37 | .#{$ionicons-prefix}looping, 38 | .#{$ionicons-prefix}refreshing, 39 | .#{$ionicons-prefix}ios7-reloading { 40 | @extend .ion; 41 | // must spin entire element for android 4.3 and below 42 | @extend .#{$ionicons-prefix}spin; 43 | } 44 | 45 | .#{$ionicons-prefix}loading-a { 46 | -webkit-animation-timing-function: steps(8, start); 47 | -moz-animation-timing-function: steps(8, start); 48 | animation-timing-function: steps(8, start); 49 | } 50 | 51 | .#{$ionicons-prefix}loading-a:before { 52 | @extend .#{$ionicons-prefix}load-a:before; 53 | } 54 | 55 | .#{$ionicons-prefix}loading-b:before { 56 | @extend .#{$ionicons-prefix}load-b:before; 57 | } 58 | 59 | .#{$ionicons-prefix}loading-c:before { 60 | @extend .#{$ionicons-prefix}load-c:before; 61 | } 62 | 63 | .#{$ionicons-prefix}loading-d:before { 64 | @extend .#{$ionicons-prefix}load-d:before; 65 | } 66 | 67 | .#{$ionicons-prefix}looping:before { 68 | @extend .#{$ionicons-prefix}loop:before; 69 | } 70 | 71 | .#{$ionicons-prefix}refreshing:before { 72 | @extend .#{$ionicons-prefix}refresh:before; 73 | } 74 | 75 | .#{$ionicons-prefix}ios7-reloading:before { 76 | @extend .#{$ionicons-prefix}ios7-reload:before; 77 | } 78 | -------------------------------------------------------------------------------- /www/lib/ionic/scss/ionicons/_ionicons-font.scss: -------------------------------------------------------------------------------- 1 | // Ionicons Font Path 2 | // -------------------------- 3 | 4 | @font-face { 5 | font-family: $ionicons-font-family; 6 | src:url("#{$ionicons-font-path}/ionicons.eot?v=#{$ionicons-version}"); 7 | src:url("#{$ionicons-font-path}/ionicons.eot?v=#{$ionicons-version}#iefix") format("embedded-opentype"), 8 | url("#{$ionicons-font-path}/ionicons.ttf?v=#{$ionicons-version}") format("truetype"), 9 | url("#{$ionicons-font-path}/ionicons.woff?v=#{$ionicons-version}") format("woff"), 10 | url("#{$ionicons-font-path}/ionicons.svg?v=#{$ionicons-version}#Ionicons") format("svg"); 11 | font-weight: normal; 12 | font-style: normal; 13 | } 14 | 15 | .ion { 16 | display: inline-block; 17 | font-family: $ionicons-font-family; 18 | speak: none; 19 | font-style: normal; 20 | font-weight: normal; 21 | font-variant: normal; 22 | text-transform: none; 23 | text-rendering: auto; 24 | line-height: 1; 25 | -webkit-font-smoothing: antialiased; 26 | -moz-osx-font-smoothing: grayscale; 27 | } -------------------------------------------------------------------------------- /www/lib/ionic/scss/ionicons/ionicons.scss: -------------------------------------------------------------------------------- 1 | @import "ionicons-variables"; 2 | /*! 3 | Ionicons, v2.0.1 4 | Created by Ben Sperry for the Ionic Framework, http://ionicons.com/ 5 | https://twitter.com/benjsperry https://twitter.com/ionicframework 6 | MIT License: https://github.com/driftyco/ionicons 7 | 8 | Android-style icons originally built by Google’s 9 | Material Design Icons: https://github.com/google/material-design-icons 10 | used under CC BY http://creativecommons.org/licenses/by/4.0/ 11 | Modified icons to fit ionicon’s grid from original. 12 | */ 13 | 14 | @import "ionicons-font"; 15 | @import "ionicons-icons"; 16 | -------------------------------------------------------------------------------- /www/lib/pouchdb/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pouchdb", 3 | "version": "3.3.1", 4 | "description": "PouchDB is a pocket-sized database.", 5 | "repo": "daleharvey/pouchdb", 6 | "keywords": [ 7 | "db", 8 | "couchdb", 9 | "pouchdb" 10 | ], 11 | "dependencies": {}, 12 | "development": {}, 13 | "license": "Apache", 14 | "main": "dist/pouchdb.js", 15 | "scripts": [ 16 | "dist/pouchdb.js", 17 | "dist/pouchdb.min.js" 18 | ], 19 | "ignore": [ 20 | "**/.*", 21 | "node_modules", 22 | "bower_components", 23 | "tests", 24 | "vendor", 25 | "npm-debug.log", 26 | "phantomjsdriver.log" 27 | ], 28 | "homepage": "https://github.com/daleharvey/pouchdb", 29 | "_release": "3.3.1", 30 | "_resolution": { 31 | "type": "version", 32 | "tag": "3.3.1", 33 | "commit": "b85430897aec59bfc71d19b9e1f67f3aa3e9d822" 34 | }, 35 | "_source": "git://github.com/daleharvey/pouchdb.git", 36 | "_target": "~3.3.1", 37 | "_originalSource": "pouchdb", 38 | "_direct": true 39 | } -------------------------------------------------------------------------------- /www/lib/pouchdb/README.md: -------------------------------------------------------------------------------- 1 | [PouchDB](http://pouchdb.com/) - The Javascript Database that Syncs 2 | ================================================== 3 | 4 | [![Build Status](https://travis-ci.org/pouchdb/pouchdb.svg)](https://travis-ci.org/pouchdb/pouchdb) 5 | 6 | PouchDB was written to help web developers build applications that work as well offline as well as they do online, applications save data locally so the user can use all the features of an app even while offline and synchronise the data between clients so they have up to date data wherever they go. 7 | 8 | PouchDB is a free open source project, written in Javascript by these [wonderful contributors](https://github.com/daleharvey/pouchdb/graphs/contributors) and inspired by Apache CouchDB. 9 | 10 | Using PouchDB 11 | ------------- 12 | 13 | To get started using PouchDB check out our [Documentation](http://pouchdb.com/learn.html) and the [API Documentation](http://pouchdb.com/api.html). 14 | 15 | 16 | Contributors 17 | ------------ 18 | If you want to get involved then check out the [contributing guide](https://github.com/daleharvey/pouchdb/blob/master/CONTRIBUTING.md) 19 | 20 | Example 21 | ------- 22 | 23 | ```javascript 24 | var db = new PouchDB('dbname'); 25 | 26 | db.put({ 27 | _id: 'dave@gmail.com', 28 | name: 'David', 29 | age: 68 30 | }); 31 | 32 | db.changes().on('change', function() { 33 | console.log('Ch-Ch-Changes'); 34 | }); 35 | 36 | db.replicate.to('http://example.com/mydb'); 37 | ``` 38 | -------------------------------------------------------------------------------- /www/lib/pouchdb/bin/add-license.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | // prepend a license to the beginning of all the output files 4 | 5 | 'use strict'; 6 | 7 | var version = require('../package.json').version; 8 | var fs = require('fs'); 9 | var currentYear = new Date().getFullYear(); 10 | 11 | /* jshint maxlen:100 */ 12 | var comments = { 13 | 14 | 'pouchdb': 'PouchDB ' + version + 15 | '\n' + 16 | '\n(c) 2012-' + currentYear + ' Dale Harvey and the PouchDB team' + 17 | '\nPouchDB may be freely distributed under the Apache license, version 2.0.' + 18 | '\nFor all details and documentation:' + 19 | '\nhttp://pouchdb.com', 20 | 21 | 'pouchdb.idb-alt': 'PouchDB alternative IndexedDB plugin ' + version + 22 | '\nBased on level.js: https://github.com/maxogden/level.js' + 23 | '\n' + 24 | '\n(c) 2012-' + currentYear + ' Dale Harvey and the PouchDB team' + 25 | '\nPouchDB may be freely distributed under the Apache license, version 2.0.' + 26 | '\nFor all details and documentation:' + 27 | '\nhttp://pouchdb.com', 28 | 29 | 'pouchdb.memory': 'PouchDB in-memory plugin ' + version + 30 | '\nBased on MemDOWN: https://github.com/rvagg/memdown' + 31 | '\n' + 32 | '\n(c) 2012-' + currentYear + ' Dale Harvey and the PouchDB team' + 33 | '\nPouchDB may be freely distributed under the Apache license, version 2.0.' + 34 | '\nFor all details and documentation:' + 35 | '\nhttp://pouchdb.com', 36 | 37 | 'pouchdb.localstorage': 'PouchDB localStorage plugin ' + version + 38 | '\nBased on localstorage-down: https://github.com/No9/localstorage-down' + 39 | '\n' + 40 | '\n(c) 2012-' + currentYear + ' Dale Harvey and the PouchDB team' + 41 | '\nPouchDB may be freely distributed under the Apache license, version 2.0.' + 42 | '\nFor all details and documentation:' + 43 | '\nhttp://pouchdb.com' 44 | }; 45 | 46 | Object.keys(comments).forEach(function (name) { 47 | var comment = comments[name]; 48 | comment = comment.replace(/(^|\n)/g, '$1// '); 49 | 50 | var filenames = [name + '.js', name + '.min.js']; 51 | 52 | filenames.forEach(function (filename) { 53 | filename = './dist/' + filename; 54 | var contents = fs.readFileSync(filename); 55 | contents = comment + '\n' + contents; 56 | 57 | fs.writeFileSync(filename, contents); 58 | }); 59 | }); 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /www/lib/pouchdb/bin/build-all-plugins.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | LEVEL_BACKEND=memdown \ 4 | OUTPUT_FILENAME=pouchdb.memory.js \ 5 | ./bin/build-plugin.sh 6 | 7 | LEVEL_BACKEND=localstorage-down \ 8 | OUTPUT_FILENAME=pouchdb.localstorage.js \ 9 | ./bin/build-plugin.sh 10 | 11 | LEVEL_BACKEND=level-js \ 12 | OUTPUT_FILENAME=pouchdb.idb-alt.js \ 13 | ./bin/build-plugin.sh 14 | 15 | UGLIFY=./node_modules/uglify-js/bin/uglifyjs 16 | 17 | $UGLIFY dist/pouchdb.memory.js -mc > dist/pouchdb.memory.min.js 18 | $UGLIFY dist/pouchdb.localstorage.js -mc > dist/pouchdb.localstorage.min.js 19 | $UGLIFY dist/pouchdb.idb-alt.js -mc > dist/pouchdb.idb-alt.min.js -------------------------------------------------------------------------------- /www/lib/pouchdb/bin/build-plugin.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ -z "$LEVEL_BACKEND" ]; then 4 | echo "Error: must specify LEVEL_BACKEND parameter." 5 | exit 1 6 | fi 7 | 8 | if [ -z "$OUTPUT_FILENAME" ]; then 9 | echo "Error: must specify OUTPUT_FILENAME parameter." 10 | exit 1 11 | fi 12 | DEREQUIRE=./node_modules/.bin/derequire 13 | 14 | ./node_modules/.bin/browserify lib/plugins/index.js \ 15 | -r $LEVEL_BACKEND \ 16 | -x pouchdb \ 17 | -r ./lib/plugins/config-$LEVEL_BACKEND.js:adapter-config \ 18 | -r ./lib/plugins/migrate-browser.js:migrate \ 19 | | $DEREQUIRE > ./dist/$OUTPUT_FILENAME 20 | -------------------------------------------------------------------------------- /www/lib/pouchdb/bin/build-site.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | 'use strict'; 4 | 5 | var fs = require('fs'); 6 | 7 | var http_server = require('http-server'); 8 | var execSync = require('exec-sync'); 9 | var mkdirp = require('mkdirp'); 10 | var watchGlob = require('watch-glob'); 11 | 12 | var POUCHDB_CSS = __dirname + '/../docs/static/css/pouchdb.css'; 13 | var POUCHDB_LESS = __dirname + '/../docs/static/less/pouchdb/pouchdb.less'; 14 | 15 | if (!execSync('gem list jekyll -i')) { 16 | console.log('Install Jekyll'); 17 | process.exit(1); 18 | } 19 | 20 | mkdirp.sync(__dirname + '/../docs/static/css'); 21 | 22 | function buildCSS() { 23 | var css = 24 | execSync(__dirname + '/../node_modules/less/bin/lessc ' + POUCHDB_LESS); 25 | fs.writeFileSync(POUCHDB_CSS, css); 26 | console.log('Updated: ', POUCHDB_CSS); 27 | } 28 | 29 | if (!process.env.BUILD) { 30 | watchGlob('docs/static/less/*/*.less', buildCSS); 31 | } 32 | buildCSS(); 33 | 34 | process.chdir('docs'); 35 | 36 | function buildJekyll(path) { 37 | // Dont rebuild on website artifacts being written 38 | if (path && /^_site/.test(path.relative)) { 39 | return; 40 | } 41 | execSync('jekyll build'); 42 | console.log('=> Rebuilt jekyll'); 43 | } 44 | 45 | if (!process.env.BUILD) { 46 | watchGlob('**', buildJekyll); 47 | buildJekyll(); 48 | http_server.createServer({root: '_site', cache: '-1'}).listen(4000); 49 | console.log('Server address: http://0.0.0.0:4000'); 50 | } else { 51 | execSync('jekyll build'); 52 | } 53 | -------------------------------------------------------------------------------- /www/lib/pouchdb/bin/get-version.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 'use strict'; 3 | var version = require('../package.json').version; 4 | var fs = require('fs'); 5 | var file = 'module.exports = "' + version + '";\n'; 6 | fs.writeFileSync('./lib/version-browser.js', file, { 7 | encoding: 'utf8' 8 | }); 9 | -------------------------------------------------------------------------------- /www/lib/pouchdb/bin/publish-site.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Build the website 4 | BUILD=1 npm run build-site 5 | 6 | # Push the site live, requires credentials, open a bug 7 | # if you need to be able to push the site 8 | scp -r docs/_site/* pouchdb@pouchdb.com:/home/pouchdb/www/pouchdb.com/ 9 | -------------------------------------------------------------------------------- /www/lib/pouchdb/bin/release.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #make sure deps are up to date 4 | rm -r node_modules 5 | npm install 6 | 7 | # get current version 8 | VERSION=$(node --eval "console.log(require('./package.json').version);") 9 | 10 | # Build 11 | git checkout -b build 12 | 13 | npm run build 14 | 15 | # Publish npm release with tests/scripts/goodies 16 | npm publish 17 | 18 | # Create git tag, which is also the Bower/Github release 19 | git add dist -f 20 | git add bower.json component.json package.json lib/version-browser.js 21 | git rm -r bin docs scripts tests vendor 22 | 23 | git commit -m "build $VERSION" 24 | 25 | # Tag and push 26 | git tag $VERSION 27 | git push --tags git@github.com:pouchdb/pouchdb.git $VERSION 28 | 29 | # Cleanup 30 | git checkout master 31 | git branch -D build 32 | -------------------------------------------------------------------------------- /www/lib/pouchdb/bin/repl.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 'use strict'; 3 | 4 | var repl = require("repl"); 5 | var utils = require('../lib/utils'); 6 | var prompt = '> '; 7 | var _toPromise = utils.toPromise; // Backup old toPromise method 8 | 9 | function truncate(string, length) { 10 | if (!string) { 11 | return string; 12 | } 13 | if (!length) { 14 | length = 400; 15 | } 16 | 17 | if (string.length > length) { 18 | return string.substring(0, length) + '...'; 19 | } else { 20 | return string; 21 | } 22 | } 23 | 24 | 25 | // A patched toPromise function, to log the results of promise if required. 26 | utils.toPromise = function (func, passPromise) { 27 | var fn = _toPromise(func, passPromise); 28 | 29 | var patchedFn = function () { 30 | var args = Array.prototype.slice.call(arguments); 31 | var promise = fn.apply(this, args); 32 | 33 | function logResult(result, method) { 34 | method = method || 'log'; 35 | 36 | patchedFn._dbInfo.then(function (info) { 37 | console[method]( 38 | "\n==>", patchedFn._dbType, info.db_name, patchedFn._methodName, 39 | "\nargs: " + truncate(JSON.stringify(args)), 40 | "\nresult:", truncate(JSON.stringify(result, null, 2)), 41 | "\n===" 42 | ); 43 | // Might not be the best of ideas. 44 | process.stdout.write(prompt); 45 | }); 46 | } 47 | 48 | if (patchedFn._doPromiseLog && PatchedPouch.doPromiseLog) { 49 | return promise.then(function (result) { 50 | logResult(result); 51 | }, function (err) { 52 | logResult(err, 'error'); 53 | }); 54 | } else { 55 | return promise; 56 | } 57 | }; 58 | 59 | // Few attributres for communcation with PatchedPouch constructor. 60 | patchedFn._isPromisingFunction = true; 61 | patchedFn._doPromiseLog = false; 62 | return patchedFn; 63 | }; 64 | 65 | // Load pouchdb with the patched toPromise 66 | var PouchDB = require('../'); 67 | 68 | // A Patched version of PouchDB - to complement what toPromise logging needs. 69 | function PatchedPouch(name, opts, callback) { 70 | var db = new PouchDB(name, opts, callback); 71 | var excluded = ['info']; 72 | var dbInfo = db.info(); 73 | var dbType = db.type(); 74 | var doPromiseLog = false; 75 | 76 | for (var key in db) { 77 | if (key !== 'info' && typeof db[key] === 'function' && 78 | db[key]._isPromisingFunction) { 79 | 80 | doPromiseLog = excluded.indexOf(key) < 0; 81 | // Update attributes to communicate back to toPromise's logging. 82 | utils.extend(db[key], { 83 | _doPromiseLog: doPromiseLog, 84 | _methodName: key, 85 | _dbInfo: dbInfo, 86 | _dbType: dbType 87 | }); 88 | 89 | } 90 | } 91 | 92 | return db; 93 | } 94 | PatchedPouch.doPromiseLog = true; 95 | 96 | utils.extend(repl.start({ 97 | prompt: prompt 98 | }).context, { 99 | PouchDB: PatchedPouch, 100 | P: PatchedPouch 101 | }); 102 | -------------------------------------------------------------------------------- /www/lib/pouchdb/bin/run-cordova.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [[ -z $CLIENT ]]; then 4 | echo -e "\nUsing default client (android), you can specify with e.g." 5 | echo -e '$CLIENT'"=android" or '$CLIENT'"=ios\n" 6 | CLIENT=android 7 | fi; 8 | 9 | if [[ -z $DEVICE ]]; then 10 | ACTION=emulate 11 | echo -e "\nUsing default "'$DEVICE'"=false, you can also do:" 12 | echo -e '$DEVICE'"=true to run on a real device\n" 13 | else 14 | if [[ $DEVICE -ne 'true' ]]; then 15 | ACTION=emulate 16 | else 17 | ACTION=run 18 | fi; 19 | fi; 20 | 21 | TESTS_DIR=./tests/integration/cordova 22 | 23 | rm -fr $TESTS_DIR/www 24 | mkdir -p $TESTS_DIR/www 25 | 26 | mkdir -p $TESTS_DIR/www/node_modules 27 | cp -r node_modules/mocha node_modules/chai node_modules/es5-shim \ 28 | $TESTS_DIR/www/node_modules 29 | mkdir -p $TESTS_DIR/www/tests/integration 30 | cp -r tests/integration/*{js,html} tests/integration/deps $TESTS_DIR/www/tests/integration 31 | 32 | mkdir -p $TESTS_DIR/www/dist 33 | cp dist/pouchdb*js $TESTS_DIR/www/dist 34 | 35 | ./node_modules/replace/bin/replace.js '' \ 36 | '' \ 37 | $TESTS_DIR/www/tests/integration/index.html 38 | 39 | if [[ ! -z $GREP ]]; then 40 | ./node_modules/replace/bin/replace.js '' \ 41 | "" \ 42 | $TESTS_DIR/www/tests/integration/index.html 43 | fi 44 | 45 | if [[ ! -z $ES5_SHIMS ]]; then 46 | ES5_SHIM=$ES5_SHIMS # synonym 47 | fi 48 | 49 | if [[ ! -z $ES5_SHIM ]]; then 50 | ./node_modules/replace/bin/replace.js '' \ 51 | "" \ 52 | $TESTS_DIR/www/tests/integration/index.html 53 | fi 54 | 55 | if [[ ! -z $COUCH_HOST ]]; then 56 | ./node_modules/replace/bin/replace.js '' \ 57 | "" \ 58 | $TESTS_DIR/www/tests/integration/index.html 59 | fi 60 | 61 | if [[ ! -z $ADAPTER ]]; then 62 | ADAPTERS=$ADAPTER # I know I'm gonna mistype this 63 | fi 64 | 65 | if [[ ! -z $ADAPTERS ]]; then 66 | ./node_modules/replace/bin/replace.js '' \ 67 | "" \ 68 | $TESTS_DIR/www/tests/integration/index.html 69 | fi 70 | 71 | if [[ ! -z $WEINRE_HOST ]]; then 72 | ./node_modules/replace/bin/replace.js '' \ 73 | "" \ 74 | $TESTS_DIR/www/tests/integration/index.html 75 | 76 | fi 77 | 78 | cd $TESTS_DIR 79 | 80 | CORDOVA=../../../node_modules/cordova/bin/cordova 81 | 82 | $CORDOVA platform add $CLIENT 83 | if [[ $($CORDOVA plugin list | grep sqlite) ]]; then 84 | $CORDOVA plugin rm com.phonegap.plugins.sqlite 85 | fi 86 | if [[ $SQLITE_PLUGIN == 'true' ]]; then 87 | $CORDOVA plugin add https://github.com/brodysoft/Cordova-SQLitePlugin 88 | fi 89 | $CORDOVA $ACTION $CLIENT 90 | -------------------------------------------------------------------------------- /www/lib/pouchdb/bin/run-couch-master-on-travis.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | set -x 4 | 5 | CWD=$(pwd) 6 | 7 | # Install deps 8 | sudo apt-get update 9 | sudo apt-get --no-install-recommends -y install \ 10 | build-essential \ 11 | ca-certificates \ 12 | curl \ 13 | erlang-dev \ 14 | erlang-nox \ 15 | git \ 16 | libicu-dev \ 17 | libmozjs185-dev \ 18 | python 19 | 20 | # Rebar isnt in apt 21 | git clone git://github.com/rebar/rebar.git ~/rebar 22 | cd ~/rebar 23 | ./bootstrap 24 | sudo cp ./rebar /usr/local/bin 25 | 26 | # Sweet, build CouchDB 27 | cd .. 28 | git clone https://github.com/apache/couchdb.git ~/couchdb 29 | cd ~/couchdb 30 | ./configure 31 | make 32 | 33 | # All done, run a cluster 34 | python dev/run -n 1 & 35 | 36 | # Lets get rid of this at some point :) 37 | sleep 10 38 | 39 | cd $CWD 40 | -------------------------------------------------------------------------------- /www/lib/pouchdb/bin/run-coverage.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 'use strict'; 3 | 4 | if (!process.env.DASHBOARD_HOST) { 5 | console.log('DASHBOARD_HOST is required'); 6 | process.exit(0); 7 | } 8 | 9 | var spawn = require('child_process').spawn; 10 | var fs = require('fs'); 11 | var request = require('request'); 12 | 13 | var DASHBOARD_HOST = process.env.DASHBOARD_HOST; 14 | 15 | var env = process.env; 16 | env.COVERAGE = 1; 17 | env.stdio = 'inherit'; 18 | 19 | var sp = spawn('npm', ['test'], env); 20 | 21 | sp.on('close', function (code) { 22 | console.log('child process exited with code ' + code); 23 | 24 | var coverage_file = fs.readFileSync('coverage/coverage.json', 'utf-8'); 25 | var coverage_json = JSON.parse(coverage_file); 26 | coverage_json.date = Date.now(); 27 | 28 | var options = { 29 | method: 'POST', 30 | uri: DASHBOARD_HOST + '/coverage_results', 31 | json: coverage_json 32 | }; 33 | 34 | request(options, function (error, response, body) { 35 | if (!error) { 36 | return process.exit(0); 37 | } else { 38 | return process.exit(1); 39 | } 40 | }); 41 | 42 | }); 43 | 44 | -------------------------------------------------------------------------------- /www/lib/pouchdb/bin/run-csg-on-travis.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | set -x 4 | 5 | CWD=$(pwd) 6 | 7 | # Install CSG 8 | curl -o csg.deb http://packages.couchbase.com/releases/couchbase-sync-gateway/1.0.3/couchbase-sync-gateway-community_1.0.3_x86_64.deb 9 | 10 | sudo dpkg -i csg.deb 11 | 12 | # Run CSG 13 | /opt/couchbase-sync-gateway/bin/sync_gateway ./tests/misc/sync-gateway-config.json >sg.log 2>&1 < /dev/null & 14 | 15 | # Lets get rid of this at some point :) 16 | sleep 2 17 | 18 | cd $CWD 19 | -------------------------------------------------------------------------------- /www/lib/pouchdb/bin/run-test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | : ${CLIENT:="node"} 4 | 5 | if [[ ! -z $SERVER ]]; then 6 | if [ "$SERVER" == "pouchdb-server" ]; then 7 | if [[ "$TRAVIS_REPO_SLUG" == "pouchdb/pouchdb" ]]; then 8 | # for pouchdb-server to link to pouchdb, only in travis 9 | rm -fr ./node_modules/pouchdb-server/node_modules/pouchdb 10 | ln -s ../../.. ./node_modules/pouchdb-server/node_modules/pouchdb 11 | fi 12 | export COUCH_HOST='http://127.0.0.1:6984' 13 | echo -e "Starting up pouchdb-server\n" 14 | TESTDIR=./tests/pouchdb_server 15 | rm -rf $TESTDIR && mkdir -p $TESTDIR 16 | if [[ "$SERVER_ADAPTER" == "memory" ]]; then 17 | FLAGS='--in-memory' 18 | else 19 | FLAGS="-d $TESTDIR" 20 | fi 21 | ./node_modules/.bin/pouchdb-server -p 6984 $FLAGS & 22 | export SERVER_PID=$! 23 | sleep 15 # give it a chance to start up 24 | elif [ "$SERVER" == "couchdb-master" ]; then 25 | if [[ "$TRAVIS_REPO_SLUG" == "pouchdb/pouchdb" ]]; then 26 | ./bin/run-couch-master-on-travis.sh 27 | fi 28 | export COUCH_HOST='http://127.0.0.1:15984' 29 | elif [ "$SERVER" == "pouchdb-express-router" ]; then 30 | node ./tests/misc/pouchdb-express-router.js & 31 | export SERVER_PID=$! 32 | sleep 5 33 | export COUCH_HOST='http://127.0.0.1:3000' 34 | elif [ "$SERVER" == "express-pouchdb-minimum" ]; then 35 | node ./tests/misc/express-pouchdb-minimum-for-pouchdb.js & 36 | export SERVER_PID=$! 37 | sleep 5 38 | export COUCH_HOST='http://127.0.0.1:3000' 39 | elif [ "$SERVER" == "sync-gateway" ]; then 40 | if [[ -z $COUCH_HOST ]]; then 41 | export COUCH_HOST='http://127.0.0.1:4985' 42 | fi 43 | if [[ "$TRAVIS_REPO_SLUG" == "pouchdb/pouchdb" ]]; then 44 | ./bin/run-csg-on-travis.sh 45 | fi 46 | node ./tests/misc/sync-gateway-config-server.js & 47 | # not the Sync Gateway pid, the config server pid 48 | export SERVER_PID=$! 49 | else 50 | # I mistype pouchdb-server a lot 51 | echo -e "Unknown SERVER $SERVER. Did you mean pouchdb-server?\n" 52 | exit 1 53 | fi 54 | fi 55 | 56 | if [ "$CLIENT" == "unit" ]; then 57 | npm run test-unit 58 | elif [ "$CLIENT" == "node" ]; then 59 | npm run test-node 60 | elif [ "$CLIENT" == "dev" ]; then 61 | npm run launch-dev-server 62 | else 63 | npm run test-browser 64 | fi 65 | 66 | EXIT_STATUS=$? 67 | if [[ ! -z $SERVER_PID ]]; then 68 | kill $SERVER_PID 69 | fi 70 | exit $EXIT_STATUS 71 | -------------------------------------------------------------------------------- /www/lib/pouchdb/bin/test-node.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | : ${TIMEOUT:=50000} 4 | : ${REPORTER:="spec"} 5 | : ${BAIL:=1} 6 | 7 | if [ $BAIL -eq 1 ]; then 8 | BAIL_OPT="--bail" 9 | else 10 | BAIL_OPT="" 11 | fi 12 | 13 | if [ $PERF ]; then 14 | node tests/performance/index.js 15 | elif [ ! $COVERAGE ]; then 16 | ./node_modules/.bin/mocha \ 17 | $BAIL_OPT \ 18 | --timeout $TIMEOUT \ 19 | --require=./tests/integration/node.setup.js \ 20 | --reporter=$REPORTER \ 21 | --grep=$GREP \ 22 | tests/integration/test.*.js 23 | else 24 | ./node_modules/.bin/istanbul cover ./node_modules/mocha/bin/_mocha -- \ 25 | $BAIL_OPT \ 26 | --timeout $TIMEOUT \ 27 | --require=./tests/integration/node.setup.js \ 28 | --reporter=$REPORTER \ 29 | --grep=$GREP \ 30 | tests/integration/test.*.js 31 | fi 32 | 33 | -------------------------------------------------------------------------------- /www/lib/pouchdb/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pouchdb", 3 | "version": "3.3.1", 4 | "description": "PouchDB is a pocket-sized database.", 5 | "repo": "daleharvey/pouchdb", 6 | "keywords": [ 7 | "db", 8 | "couchdb", 9 | "pouchdb" 10 | ], 11 | "dependencies": {}, 12 | "development": {}, 13 | "license": "Apache", 14 | "main": "dist/pouchdb.js", 15 | "scripts": [ 16 | "dist/pouchdb.js", 17 | "dist/pouchdb.min.js" 18 | ], 19 | "ignore": [ 20 | "**/.*", 21 | "node_modules", 22 | "bower_components", 23 | "tests", 24 | "vendor", 25 | "npm-debug.log", 26 | "phantomjsdriver.log" 27 | ] 28 | } -------------------------------------------------------------------------------- /www/lib/pouchdb/component.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pouchdb", 3 | "version": "3.3.1", 4 | "description": "PouchDB is a pocket-sized database.", 5 | "repo": "daleharvey/pouchdb", 6 | "keywords": [ 7 | "db", 8 | "couchdb", 9 | "pouchdb" 10 | ], 11 | "dependencies": {}, 12 | "development": {}, 13 | "license": "Apache", 14 | "main": "dist/pouchdb.js", 15 | "scripts": [ 16 | "dist/pouchdb.js" 17 | ] 18 | } -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_config.yml: -------------------------------------------------------------------------------- 1 | name: PouchDB 2 | description: PouchDB, the JavaScript Database that Syncs! 3 | url: http://pouchdb.com 4 | highlighter: pygments 5 | markdown: redcarpet 6 | baseurl: 7 | version: 3.3.0 8 | paginate: 5 9 | paginate_path: "blog/page:num" 10 | collections: 11 | guides: 12 | output: true 13 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_data/authors.yml: -------------------------------------------------------------------------------- 1 | - name: Nick Colley 2 | twitter: nickcolley 3 | github: nickcolley 4 | www: http://nickcolley.co.uk 5 | gravatar: d83613912d1a2511a784b99c703bdcf6 6 | 7 | - name: Nolan Lawson 8 | twitter: nolanlawson 9 | github: nolanlawson 10 | www: http://nolanlawson.com 11 | gravatar: c436dec61b906e27c963518d0ef1d972 12 | 13 | - name: Dale Harvey 14 | twitter: daleharvey 15 | github: daleharvey 16 | www: http://arandomurl.com 17 | gravatar: 030451d8cfc268d666bae9a7fe8d10ec 18 | 19 | - name: Calvin Metcalf 20 | twitter: CWMma 21 | github: calvinmetcalf 22 | www: http://calvinmetcalf.com/ 23 | gravatar: e8153037a068f1c32e546f82729a64a5 24 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_guides/local-documents.md: -------------------------------------------------------------------------------- 1 | --- 2 | index: 15 3 | layout: guide 4 | title: Local documents 5 | sidebar: guides_nav.html 6 | --- 7 | 8 | "Local" documents are a special class of documents in PouchDB and CouchDB, which are used for storing local metadata about a database. You might never need them in your own app, but sometimes they can come in handy for advanced use cases. 9 | 10 | Local docs in a nutshell 11 | -------- 12 | 13 | Local docs have the following characteristics: 14 | 15 | * They don't replicate. 16 | * They can't contain attachments. 17 | * They don't appear in `allDocs()`, `changes()`, or `query()`. 18 | * However, you can modify them with `put()`/`remove()`/`bulkDocs()`, and you can fetch them with `get()`. 19 | 20 | So basically, local docs only exist *for that database*, and they don't mix with the "normal" documents. 21 | 22 | To create a local doc, you simply use `'_local/'` as the prefix of the `_id`. This is supported in both CouchDB and PouchDB: 23 | 24 | ```js 25 | db.put({ 26 | _id: '_local/foobar', 27 | someText: 'yo, this is my local doc!' 28 | }).then(function () { 29 | return db.get('_local/foobar'); 30 | }); 31 | ``` 32 | 33 | Advantages of local docs 34 | --------- 35 | 36 | Local docs are useful for small bits of configuration or metadata, which you don't necessarily want to replicate, but which you want to keep in the database anyway. Many PouchDB plugins and core components use local docs. For instance, the replication algorithm uses them to store checkpoints, and map/reduce uses them to keep track of what's been `emit`ted. 37 | 38 | Local docs also have some good performance characteristics compared to regular docs. They don't have a version history, so only the most recent revision is ever stored in the database. This means that `put()`s and `get()`s are faster for local docs than for regular docs, and that local docs tend to take up less space on disk. In a sense, they are auto-compacted, although they take up even less space on disk than documents in a compacted database. 39 | 40 | Regardless, you need to provide the current `_rev` when you update local docs, just like with regular docs. 41 | 42 | Related API documentation 43 | -------- 44 | 45 | * [put()](/api.html#create_document) 46 | * [get()](/api.html#fetch_document) 47 | * [remove()](/api.html#delete_document) 48 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_guides/setup-pouchdb.md: -------------------------------------------------------------------------------- 1 | --- 2 | index: 3 3 | layout: guide 4 | title: Setting up PouchDB 5 | sidebar: guides_nav.html 6 | --- 7 | 8 | 9 | Installing PouchDB is easy. There are a few different ways to do it: 10 | 11 | Direct download 12 | ------ 13 | 14 | Download the latest **pouchdb-{{site.version}}.min.js** from the big green button above. Then in your `index.html`: 15 | 16 | ```html 17 | 18 | ``` 19 | 20 | Bower 21 | ------- 22 | 23 | Run this on the command line: 24 | 25 | ``` 26 | $ bower install pouchdb 27 | ``` 28 | 29 | Then in your `index.html`: 30 | 31 | ```html 32 | 33 | ``` 34 | 35 | npm 36 | ------ 37 | 38 | Run this on the command line: 39 | 40 | ``` 41 | $ npm install pouchdb 42 | ``` 43 | 44 | Then in your `index.html`: 45 | 46 | ```html 47 | 48 | ``` 49 | 50 | jsdelivr CDN 51 | ------ 52 | 53 | Add this to your `index.html`: 54 | 55 | ```html 56 | 57 | ``` 58 | 59 | Node.js 60 | ------- 61 | 62 | Run this on the command line: 63 | 64 | ``` 65 | $ npm install pouchdb 66 | ``` 67 | 68 | Then in your JavaScript: 69 | 70 | ```js 71 | var PouchDB = require('pouchdb'); 72 | ``` 73 | 74 | Next 75 | ------- 76 | 77 | Now that you have PouchDB installed, let's start working with databases. -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_includes/alert_end.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_includes/alert_start.html: -------------------------------------------------------------------------------- 1 | {% if include.variant == "success" %} 2 |
3 | {% elsif include.variant == "warning" %} 4 |
5 | {% elsif include.variant == "danger" %} 6 |
7 | {% else %} 8 |
9 | {% endif %} 10 | 11 |
12 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_includes/anchor.html: -------------------------------------------------------------------------------- 1 | {% if include.class %} 2 | {% assign class = include.class %} 3 | {% else %} 4 | {% assign class = 'h2' %} 5 | {% endif %} 6 |
7 | {{ include.title }} 8 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_includes/api.html: -------------------------------------------------------------------------------- 1 |
  • Create database
  • 2 |
  • Delete database
  • 3 |
  • Create/update doc
  • 4 |
  • Fetch doc
  • 5 |
  • Delete doc
  • 6 |
  • Batch create
  • 7 |
  • Batch fetch
  • 8 |
  • Changes
  • 9 |
  • Replication
  • 10 |
  • Sync
  • 11 |
  • Save attachment
  • 12 |
  • Get attachment
  • 13 |
  • Delete attachment
  • 14 |
  • Query database
  • 15 |
  • View cleanup
  • 16 |
  • Database info
  • 17 |
  • Compaction
  • 18 |
  • Revision diff
  • 19 |
  • Events
  • 20 |
  • Default settings
  • 21 |
  • Plugins
  • 22 |
  • Debug mode
  • 23 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_includes/guides_nav.html: -------------------------------------------------------------------------------- 1 | {% assign guides = (site.guides | sort: 'index') %} 2 | {% for guide in guides %} 3 | {% assign title = guide.title %} 4 | {% if guide.nav %} 5 | {% assign title = guide.nav %} 6 | {% endif %} 7 | {% include nav_item.html path=guide.url text=title %} 8 | {% endfor %} 9 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_includes/iframe.html: -------------------------------------------------------------------------------- 1 |
    2 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_includes/img.html: -------------------------------------------------------------------------------- 1 | {% if include.href %} 2 | {% assign href = include.href %} 3 | {% else %} 4 | {% capture href %}{{ site.baseurl }}/static/img/{{ include.src }}{% endcapture %} 5 | {% endif %} 6 | 7 | 8 | {{ include.alt }} 9 | 10 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_includes/nav.html: -------------------------------------------------------------------------------- 1 | {% include nav_item.html path="/learn.html" text="About PouchDB" %} 2 | {% include nav_item.html path="/getting-started.html" text="Get Started Guide" %} 3 | {% include nav_item.html path="/api.html" text="API" %} 4 | {% include nav_item.html path="/adapters.html" text="Adapters" %} 5 | {% include nav_item.html path="/external.html" text="Plugins" %} 6 | {% include nav_item.html path="/faq.html" text="FAQ" %} 7 | {% include nav_item.html path="/errors.html" text="Common Errors" %} 8 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_includes/nav_item.html: -------------------------------------------------------------------------------- 1 |
  • 2 | {{ include.text }} 3 |
  • 4 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_includes/post_details.html: -------------------------------------------------------------------------------- 1 | {% unless post %} 2 | {% assign post = page %} 3 | {% endunless %} 4 | 5 | {% assign post_author = post.author %} 6 | {% assign post_gravatar = 'http://www.fillmurray.com/82/82' %} 7 | {% assign modified_date = '' %} 8 | 9 | {% for author in site.data.authors %} 10 | {% if author.name == post.author %} 11 | {% if author.twitter %} 12 | {% capture post_author %}{{ post.author }}{% endcapture %} 13 | {% endif %} 14 | {% if author.gravatar %} 15 | {% capture post_gravatar %}https://gravatar.com/avatar/{{ author.gravatar }}{% endcapture %} 16 | {% endif %} 17 | {% endif %} 18 | {% endfor %} 19 | 20 | {% if post.modified_date %} 21 | {% capture modified_date %}Updated: {{ post.modified_date | date_to_long_string }}
    {% endcapture %} 22 | {% endif %} 23 | 24 |
    25 |
    26 | 27 | {{ post.author }} 28 | 29 |
    30 |

    31 | By: {{ post_author }}
    32 | Published: {{ post.date | date_to_long_string }}
    33 | {% if page.url == "/blog/index.html" or page.url contains "/blog/page" or page.url == "/index.html" %} 34 | {{ post.excerpt | strip_html | truncatewords: 30, '' }} 35 | [...] 36 | {% endif %} 37 |

    38 |
    39 |
    40 |
    41 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_includes/social.html: -------------------------------------------------------------------------------- 1 | {% for author in site.data.authors %} 2 | {% if author.name == page.author %} 3 | {% capture author_twitter %}@{{ author.twitter }}{% endcapture %} 4 | {% endif %} 5 | {% endfor %} 6 | View on GitHub 7 | Tweet this article -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_layouts/2ColLeft.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 |
    6 |
    7 |
    8 | 15 | 16 |
    17 | {{content}} 18 |
    19 | 20 |
    21 | 22 |
    23 | 24 |
    25 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_layouts/guide.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: 2ColLeft 3 | --- 4 | {{ content }} 5 | 6 | {% assign guides = (site.guides | sort: 'index') %} 7 | {% for guide in guides %} 8 | {% if page.title == guide.title %} 9 | {% assign prev = guide.index | minus: 2 %} 10 | {% assign next = guide.index %} 11 | 12 | 24 | {% endif %} 25 | {% endfor %} 26 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_layouts/post.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 |
    5 |
    6 |
    7 | {% include post_details.html %} 8 | 9 | {{ content }} 10 |
    11 |
    12 |
    13 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_posts/2014-04-01-pouchdb-2.1.0.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | 4 | title: PouchDB 2.1.0 5 | 6 | author: Dale Harvey 7 | 8 | --- 9 | 10 | [PouchDB 2.1.0](https://github.com/daleharvey/pouchdb/releases/tag/2.1.0) is now released! Please [file issues](https://github.com/daleharvey/pouchdb/issues) or [tell us what you think](https://github.com/daleharvey/pouchdb/blob/master/CONTRIBUTING.md#get-in-touch). We would also like to give a huge thanks to our [new and existing contributors](https://github.com/daleharvey/pouchdb/graphs/contributors?from=2014-03-01&to=2014-04-01). 11 | 12 | {% include alert_start.html variant="warning"%} 13 | This release contains a database migration, which means that once you upgrade you will no longer be able to use previous versions of PouchDB on the same databases. 14 | {% include alert_end.html %} 15 | 16 | ### Major Changes: 17 | 18 | * Website redesign and a new blog ([#1539](http://github.com/daleharvey/pouchdb/issues/1539), [#893](https://github.com/daleharvey/pouchdb/issues/893)) 19 | * Support optional LevelDOWN builds ([#44](http://github.com/daleharvey/pouchdb/issues/44)) 20 | * Replication performance improvements ([#1732](http://github.com/daleharvey/pouchdb/issues/1732)) 21 | * Performance improvements for skip / limit ([#1649](http://github.com/daleharvey/pouchdb/issues/1649)) 22 | * Cache WebSQL databases, fully passing tests in Safari ([#1068](http://github.com/daleharvey/pouchdb/issues/1068)) 23 | * Fix support for unicode in doc ids (WebSQL) ([#1733](http://github.com/daleharvey/pouchdb/issues/1733)) 24 | * Fix for localStorage detection in Chrome Apps ([#1727](http://github.com/daleharvey/pouchdb/issues/1727)) 25 | * Allow overriding of http functions ([#1602](http://github.com/daleharvey/pouchdb/issues/1602)) 26 | * Improve error reporting from replicator ([#1714](http://github.com/daleharvey/pouchdb/issues/1714)) 27 | * Switch to readAsArrayBuffer for IE binary support ([#1667](http://github.com/daleharvey/pouchdb/issues/1667)) 28 | * Add `npm run shell` for quick shell experimenting ([#1610](http://github.com/daleharvey/pouchdb/issues/1610)) 29 | * Ensure we dont lose data when browsers upgrade from WebSQL to IDB ([#1289](http://github.com/daleharvey/pouchdb/issues/1289)) 30 | 31 | ###### [Complete list of changes](https://github.com/daleharvey/pouchdb/compare/2.0.1...2.1.0) 32 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_posts/2014-04-01-welcome-to-the-pouchdb-blog.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | 4 | title: Welcome to the PouchDB blog 5 | 6 | author: Dale Harvey 7 | 8 | --- 9 | 10 | Hello World! Welcome to the newly formed PouchDB blog. PouchDB has been an active community for over 2 years now, with almost everything being run via IRC and Github. As the project grows, we wanted a way to communicate with users about the current state of the PouchDB world. 11 | 12 | We will obviously be posting updates and releases notes for PouchDB releases, but as well as that, we will also be blogging about related projects and technologies within the PouchDB world, such as Service Workers, CouchDB, etc. 13 | 14 | As with the PouchDB source, we would love to invite everyone to contribute. We have [documented the instructions](https://github.com/daleharvey/pouchdb/blob/master/CONTRIBUTING.md#writing-a-pouchdb-blog-post), so please get involved. 15 | 16 | Over the last 4 years PouchDB has had 89 [awesome contributors](https://github.com/daleharvey/pouchdb/graphs/contributors). I would like to give a shout-out to the people who worked together to get this site up and running in such a short time: [nickcolley](https://twitter.com/NickColley), [misosoup](https://twitter.com/misosoup), [zaccolley](https://twitter.com/zaccolley), [nolanlawson](https://twitter.com/nolanlawson) and [virgie](https://github.com/virgie) in particular. 17 | 18 | Happy Pouching. 19 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_posts/2014-05-01-pouchdb-2.2.0.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | 4 | title: PouchDB 2.2.0 5 | 6 | author: Dale Harvey 7 | 8 | --- 9 | 10 | [PouchDB 2.2.0](https://github.com/daleharvey/pouchdb/releases/tag/2.2.0) is now released! Please [file issues](https://github.com/daleharvey/pouchdb/issues) or [tell us what you think](https://github.com/daleharvey/pouchdb/blob/master/CONTRIBUTING.md#get-in-touch). We would also like to give a huge thanks to our [new and existing contributors](https://github.com/daleharvey/pouchdb/graphs/contributors?from=2014-04-01&to=2014-05-01). 11 | 12 | {% include alert_start.html variant="warning"%} 13 | We have removed the ES5 shims from PouchDB. If you require support for older browsers, it can be included from https://github.com/es-shims/es5-shim. 14 | {% include alert_end.html %} 15 | 16 | ### Major Changes: 17 | 18 | * Fix replication for large databases ([#1954](https://github.com/pouchdb/pouchdb/issues/1954)) 19 | * Persistent map/reduce ([#1658](https://github.com/pouchdb/pouchdb/issues/1658)) 20 | * Fix experimental `.sync()` API ([#1696](https://github.com/pouchdb/pouchdb/issues/1696)) 21 | * `.replication()` API switched to an `EventEmitter` ([#1916](https://github.com/pouchdb/pouchdb/issues/1916)) 22 | * `.changes()` API switched to an `EventEmitter` ([#1768](http://github.com/daleharvey/pouchdb/issues/1768)) 23 | * Experimental LevelDB-based LocalStorage adapter ([#44](http://github.com/daleharvey/pouchdb/issues/44)) 24 | * Performance improvements ([#1869](http://github.com/daleharvey/pouchdb/issues/1869), [#1871](http://github.com/daleharvey/pouchdb/issues/1871), [#1889](https://github.com/pouchdb/pouchdb/pull/1889), [#1897](https://github.com/pouchdb/pouchdb/pull/1897), [#1990](https://github.com/pouchdb/pouchdb/issues/1990)) 25 | * Remove ES5 shims ([#1753](http://github.com/daleharvey/pouchdb/issues/1753)) 26 | * Performance tests ([#113](http://github.com/daleharvey/pouchdb/issues/113)) 27 | 28 | 29 | ###### [Complete list of changes](https://github.com/daleharvey/pouchdb/compare/2.1.0...2.2.0) 30 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_posts/2014-06-01-pouchdb-2.2.3.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | 4 | title: PouchDB 2.2.3 5 | 6 | author: Dale Harvey 7 | 8 | --- 9 | 10 | [PouchDB 2.2.3](https://github.com/daleharvey/pouchdb/releases/tag/2.2.3) is now released! Please [file issues](https://github.com/daleharvey/pouchdb/issues) or [tell us what you think](https://github.com/daleharvey/pouchdb/blob/master/CONTRIBUTING.md#get-in-touch). We would also like to give a huge thanks to our [new and existing contributors](https://github.com/daleharvey/pouchdb/graphs/contributors?from=2014-05-01&to=2014-06-01). 11 | 12 | ### Major Changes: 13 | 14 | * Experimental browser adapter plugins ([#2190](http://github.com/daleharvey/pouchdb/issues/2190)) 15 | * Fix Ember.js integration ([#2158](http://github.com/daleharvey/pouchdb/issues/2158)) 16 | * Fix Browserify integration ([#2249](http://github.com/daleharvey/pouchdb/issues/2249), [pouchdb/mapreduce#170](https://github.com/pouchdb/mapreduce/issues/170)) 17 | * Fixes for conflict resolution ([#2072](http://github.com/daleharvey/pouchdb/issues/2072)) 18 | * Better error handling in replication ([#2122](http://github.com/daleharvey/pouchdb/issues/2122)) 19 | * Fix Internet Explorer 10-11 ([#1661](http://github.com/daleharvey/pouchdb/issues/1661), [#2198](http://github.com/daleharvey/pouchdb/issues/2198), [#2132](http://github.com/daleharvey/pouchdb/issues/2132)) 20 | * Fix attachments in Android 4.x ([#1992](http://github.com/daleharvey/pouchdb/issues/1992)) 21 | * Fix LevelDB memory leak, race condition, error messages ([#2250](http://github.com/daleharvey/pouchdb/issues/2250), [#2251](http://github.com/daleharvey/pouchdb/issues/2251), [#2144](http://github.com/daleharvey/pouchdb/issues/2144)) 22 | * Perf improvements for replication in WebSQL & IndexedDB ([#2180](http://github.com/daleharvey/pouchdb/issues/2180), [#2178](http://github.com/daleharvey/pouchdb/issues/2178)) 23 | * Bugfixes for IndexedDB inclusive_end ([#2129](http://github.com/daleharvey/pouchdb/issues/2129)) 24 | * Fix `changes()` memory leak ([#2311](http://github.com/daleharvey/pouchdb/issues/2311)) 25 | 26 | ###### [Complete list of changes](https://github.com/daleharvey/pouchdb/compare/2.2.0...2.2.3) 27 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_posts/2014-08-16-pouchdb-3.0.1.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | 4 | title: PouchDB 3.0.1 5 | 6 | author: Nolan Lawson 7 | 8 | --- 9 | 10 | [PouchDB 3.0.1](https://github.com/pouchdb/pouchdb/releases/tag/3.0.1) is a patch release to fix a migration bug in PouchDB 3.0.0 ([#2456](https://github.com/pouchdb/pouchdb/issues/2456)). Please upgrade your existing users directly from 2.2.3 and do not use 3.0.0. 11 | 12 | This release also contains a small performance boost for `bulkDocs()` ([#2553](https://github.com/pouchdb/pouchdb/issues/2553)). -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_posts/2014-08-20-pouchdb-3.0.2.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | 4 | title: PouchDB 3.0.2 5 | 6 | author: Nolan Lawson 7 | 8 | --- 9 | 10 | [PouchDB 3.0.2](https://github.com/pouchdb/pouchdb/releases/tag/3.0.2) is another small patch release, this time to fix a bug in replication of deleted documents ([#2636](https://github.com/pouchdb/pouchdb/issues/2636)). 11 | 12 | Other fixes: 13 | 14 | * Ensure PouchDB stops writing after replication is over ([#2639](https://github.com/pouchdb/pouchdb/issues/2639)) 15 | * Fix a race condition in LevelDB ([#2631](https://github.com/pouchdb/pouchdb/issues/2631)) 16 | * Allow special URI characters in doc IDs ([#2651](https://github.com/pouchdb/pouchdb/issues/2651)) -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_posts/2014-08-29-pouchdb-3.0.3.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | 4 | title: PouchDB 3.0.3 5 | 6 | author: Nolan Lawson 7 | 8 | --- 9 | 10 | Another week, another PouchDB patch release! 11 | 12 | This week we present [PouchDB 3.0.3](https://github.com/pouchdb/pouchdb/releases/tag/3.0.3), which fixes some ornery issues with replication that were introduced by recent performance optimizations ([#2685](https://github.com/pouchdb/pouchdb/issues/2685)). 13 | 14 | In fact, those performance optimizations have been rolled back. The current implementation appears to be the fastest possible given CouchDB's replication protocol, and the clever tricks introduced in 3.0.0 actually pushed conflicts into CouchDB's revision history, which is bad news for apps that rely on custom conflict resolution. (If you just use the default "pick a random winner," you probably didn't notice anything.) 15 | 16 | And although "custom conflict resolution" may only describe a minority of apps, we felt it's better to be correct 100% of the time than to be speedy. 17 | 18 | ### Dealing with slow replication 19 | 20 | If you experience slow replications after upgrading to 3.0.3, here are some suggestions: 21 | 22 | 1. Avoid CORS if you can, because it uses twice as many HTTP requests. Some tips for doing this: 23 | * If you are using IrisCouch, you can [create a couchapp](https://github.com/couchapp/couchapp) (i.e. let CouchDB serve your HTML/CSS/JS). 24 | * If you are running your own CouchDB, you can set up a reverse proxy with Apache or Nginx that allows you to serve your app and CouchDB from the same domain. Or create a couchapp. 25 | 2. Try using the "every doc is a delta" pattern, as described in [this blog post](http://atypical.net/archive/2014/04/17/understanding-race-induced-conflicts-in-bigcouch) and exemplified in [the delta-pouch plugin](https://github.com/redgeoff/delta-pouch). Your replications will be much faster, because PouchDB is able to use an optimization for generation-1 documents, and in this setup, every document is a generation-1 document. 26 | 3. Otherwise, just minimize the number of documents you create. Or minimize the number of documents you sync to the client. Views can be helpful with this, although the low performance of the `query()` API relative to the `allDocs()` API should be balanced with that. 27 | 28 | ### Other fixes in 3.0.3 29 | 30 | * Auto-compaction is no longer experimental! It's fully supported. ([#2655](https://github.com/pouchdb/pouchdb/issues/2655)) 31 | * `'change'` listeners aren't called after replication is canceled. ([#2478](https://github.com/pouchdb/pouchdb/issues/2478)) 32 | * Bower package is smaller. ([#2659](https://github.com/pouchdb/pouchdb/issues/2659)) -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_posts/2014-09-04-pouchdb-3.0.4.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | 4 | title: PouchDB 3.0.4: Night of the Living Attachments 5 | 6 | author: Calvin Metcalf 7 | 8 | --- 9 | 10 | This week we present [PouchDB 3.0.4](https://github.com/pouchdb/pouchdb/releases/tag/3.0.4), which fixes a bunch of stuff with attachments. Now the kittens generated by the [3.0.0 release](http://pouchdb.com/2014/08/12/pouchdb-3.0.0.html) may be safely stored in Pouch. 11 | 12 | {% include img.html src="kittens_small.jpg" alt="Kittens" %} 13 | 14 | ### Attachmentspalooza 15 | 16 | - In Firefox, different attachments now (correctly) have different MD5 hashes. Previously they were just hashes of the string `'[Object] object'`. With this, we also now check that the hashes we produce are identical to the ones that CouchDB produces (with the exception of plaintext ones due to Erlang being weird and not having ASCII strings) ([#2698](https://github.com/pouchdb/pouchdb/issues/2698)). 17 | - Weirdness in Chrome 37-39 with FileReader and empty blobs is now fixed ([#2713](https://github.com/pouchdb/pouchdb/issues/2713)). 18 | - Fix for [a bug in Chrome 37](https://code.google.com/p/chromium/issues/detail?id=408120) relating to blobs in IndexedDB ([#2701](https://github.com/pouchdb/pouchdb/issues/2701)). 19 | - HTTP pouches now support buffer/blob data in attachments ([#2577](https://github.com/pouchdb/pouchdb/issues/2577)). 20 | 21 | ### Other fixes in 3.0.4 22 | 23 | * When running sync, it only creates one instance for each database ([#2662](https://github.com/pouchdb/pouchdb/pull/2662)). 24 | * Performance improvements for persisted map/reduce, and it also uses less space ([pouchdb/mapreduce#191](https://github.com/pouchdb/mapreduce/pull/191) and [pouchdb/mapreduce#185](https://github.com/pouchdb/mapreduce/issues/185)). 25 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/_posts/2014-09-07-pouchdb-3.0.5.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | 4 | title: PouchDB 3.0.5: Turtles All the Way Down 5 | 6 | author: Nolan Lawson 7 | 8 | --- 9 | 10 | Tonight our fine dining selection is [PouchDB 3.0.5](https://github.com/pouchdb/pouchdb/releases/tag/3.0.5), which fixes some issues with excessive recursion and also `PouchDB.sync` not always working correctly. 11 | 12 | ### PouchDB.sync un-borked ([#2735](https://github.com/pouchdb/pouchdb/issues/2735)) 13 | 14 | You can now call `PouchDB.sync('mydb', 'http://localhost:5984/mydb')` using just the database names. 15 | 16 | Less typing === more win. 17 | 18 | ### No more infinite recursion ([#2543](https://github.com/pouchdb/pouchdb/issues/2543)) 19 | 20 | You can now have as many revisions to your documents as you want, and you'll no longer descend _Inception_-style into a "too much recursion" or "maximum call stack" error. 21 | 22 | We literally wrote [a custom JSON parser](https://github.com/nolanlawson/vuvuzela) to fix this. That's how much we love you. 23 | 24 | ### Notes on excessive revision histories 25 | 26 | The ["infinite recursion" bug](https://github.com/pouchdb/pouchdb/issues/2543) shows up when you have many (> 1000) revisions to the same document. For instance, imagine a text editor that `put()`s a new version of the document for every keystroke. This is fine in traditional databases, but it can be a big problem in PouchDB/CouchDB, because we store the entire history of the database. 27 | 28 | Make no mistake: inifinitely-large revision histories will now work in PouchDB 3.0.5. However, it's a lot like riding a bicycle without a helmet: you _can_ do it, but you probably shouldn't. 29 | 30 | Your mental model for this can be something like Git. Imagine a new `git commit` for every keystroke, and you'll see why it might be a bit problematic. 31 | 32 | ```js 33 | { "text": "The quick brown fox jumps over the lazy doge." } 34 | { "text": "The quick brown fox jumps over the lazy doge" } 35 | { "text": "The quick brown fox jumps over the lazy dog" } 36 | // 37 | // 40 revisions earlier ... 38 | // 39 | { "text": "The q" } 40 | { "text": "The " } 41 | { "text": "The" } 42 | { "text": "Th" } 43 | { "text": "T" } 44 | ``` 45 | 46 | Of course, you can always `compact()` to remove old versions, but this just removes the document data. PouchDB still needs to maintain a permanent tree of the `_rev` hashes in order for the replication algorithm to work properly. If this tree grows excessively, it can bloat your database, whether or not you do compaction. 47 | 48 | What this means is that you should be very careful about updating your documents. Try to update your documents in larger batches, or use a pattern like [delta-pouch](https://github.com/redgeoff/delta-pouch) to avoid creating new revisions altogether. -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/blog/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Blog 4 | --- 5 | 6 |
    7 |
    8 |
    9 | {% for post in paginator.posts %} 10 | 11 | {{ post.title }} 12 | {% include post_details.html %} 13 | 14 | {% endfor %} 15 |
      16 |
    • «
    • 17 | {% for page in (1..paginator.total_pages) %} 18 | {% if page == paginator.page %} 19 |
    • {{page}}
    • 20 | {% elsif page == 1 %} 21 |
    • {{page}}
    • 22 | {% else %} 23 |
    • {{page}}
    • 24 | {% endif %} 25 | {% endfor %} 26 |
    • »
    • 27 |
    28 |
    29 |
    30 |
    31 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/feed.xml: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | 5 | 6 | {{ site.name | xml_escape }} 7 | {% if site.description %}{{ site.description | xml_escape }}{% endif %} 8 | {{ site.url }} 9 | 10 | {% for post in site.posts limit:10 %} 11 | 12 | {{ post.title | xml_escape }} 13 | {% if post.author %} 14 | {{ post.author | xml_escape }} 15 | {% endif %} 16 | {% if post.excerpt %} 17 | {{ post.excerpt | xml_escape }} 18 | {% else %} 19 | {{ post.content | xml_escape }} 20 | {% endif %} 21 | {{ post.date | date: "%a, %d %b %Y %H:%M:%S %z" }} 22 | {{ site.url }}{{ post.url }} 23 | {{ site.url }}{{ post.url }} 24 | 25 | {% endfor %} 26 | 27 | 28 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/manifest.appcache: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | CACHE MANIFEST 5 | # rev {{ site.time }} 6 | 7 | CACHE: 8 | {% for page in site.pages %}{% if page.url != '/manifest.appcache' %}{{ page.url | replace:'index.html','' }}{% endif %} 9 | {% endfor %} 10 | {% for page in site.guides %}{{ page.url | replace:'index.html','' }} 11 | {% endfor %} 12 | {% for page in site.posts %}{{ page.url | replace:'index.html','' }} 13 | {% endfor %} 14 | 15 | /static/css/pouchdb.css 16 | /static/favicon.ico 17 | 18 | http://code.jquery.com/jquery.min.js 19 | http://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js 20 | 21 | http://fonts.googleapis.com/css?family=Lato:400,700|Open+Sans:400,700 22 | http://fonts.gstatic.com/s/lato/v11/8qcEw_nrk_5HEcCpYdJu8BTbgVql8nDJpwnrE27mub0.woff2 23 | http://fonts.gstatic.com/s/lato/v11/MDadn8DQ_3oT6kvnUq_2rxTbgVql8nDJpwnrE27mub0.woff2 24 | http://fonts.gstatic.com/s/lato/v11/rZPI2gHXi8zxUjnybc2ZQFKPGs1ZzpMvnHX-7fPOuAc.woff2 25 | http://fonts.gstatic.com/s/lato/v11/MgNNr5y1C_tIEuLEmicLm1KPGs1ZzpMvnHX-7fPOuAc.woff2 26 | http://fonts.gstatic.com/s/opensans/v10/u-WUoqrET9fUeobQW7jkRZBw1xU1rKptJj_0jans920.woff2 27 | http://fonts.gstatic.com/s/opensans/v10/cJZKeOuBrn4kERxqtaUH3ZBw1xU1rKptJj_0jans920.woff2 28 | http://fonts.gstatic.com/s/opensans/v10/k3k702ZOKiLJc3WVjuplzCYtBUPDK3WL7KRKS_3q7OE.woff2 29 | http://fonts.gstatic.com/s/opensans/v10/k3k702ZOKiLJc3WVjuplzBampu5_7CjHW5spxoeN3Vs.woff2 30 | 31 | /static/img/apple-indexeddb.png 32 | /static/img/cors_in_couchdb.png 33 | /static/img/fauxton.png 34 | /static/img/kittens.jpg 35 | /static/img/logo.svg 36 | /static/img/safari_popup.png 37 | /static/img/dev_tools.png 38 | /static/img/icons.svg 39 | /static/img/kittens_small.jpg 40 | /static/img/mark.svg 41 | /static/img/screenshots/todo-1.png 42 | /static/img/travis-screenshot.png 43 | 44 | /static/img/browser-logos/android_32x32.png 45 | /static/img/browser-logos/chrome-android_32x32.png 46 | /static/img/browser-logos/firefox_32x32.png 47 | /static/img/browser-logos/internet-explorer_32x32.png 48 | /static/img/browser-logos/safari-ios_32x32.png 49 | /static/img/browser-logos/blackberry_32x32.png 50 | /static/img/browser-logos/chrome_32x32.png 51 | /static/img/browser-logos/internet-explorer-tile_32x32.png 52 | /static/img/browser-logos/opera_32x32.png 53 | /static/img/browser-logos/safari_32x32.png 54 | 55 | NETWORK: 56 | * 57 | http://* 58 | https://* -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/assets/pouchdb-getting-started-todo.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/pouchdb/docs/static/assets/pouchdb-getting-started-todo.zip -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/pouchdb/docs/static/favicon.ico -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/img/apple-indexeddb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/pouchdb/docs/static/img/apple-indexeddb.png -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/img/browser-logos/android_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/pouchdb/docs/static/img/browser-logos/android_32x32.png -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/img/browser-logos/blackberry_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/pouchdb/docs/static/img/browser-logos/blackberry_32x32.png -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/img/browser-logos/chrome-android_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/pouchdb/docs/static/img/browser-logos/chrome-android_32x32.png -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/img/browser-logos/chrome_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/pouchdb/docs/static/img/browser-logos/chrome_32x32.png -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/img/browser-logos/firefox_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/pouchdb/docs/static/img/browser-logos/firefox_32x32.png -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/img/browser-logos/internet-explorer-tile_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/pouchdb/docs/static/img/browser-logos/internet-explorer-tile_32x32.png -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/img/browser-logos/internet-explorer_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/pouchdb/docs/static/img/browser-logos/internet-explorer_32x32.png -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/img/browser-logos/opera_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/pouchdb/docs/static/img/browser-logos/opera_32x32.png -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/img/browser-logos/safari-ios_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/pouchdb/docs/static/img/browser-logos/safari-ios_32x32.png -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/img/browser-logos/safari_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/pouchdb/docs/static/img/browser-logos/safari_32x32.png -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/img/cors_in_couchdb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/pouchdb/docs/static/img/cors_in_couchdb.png -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/img/debug_mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/pouchdb/docs/static/img/debug_mode.png -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/img/dev_tools.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/pouchdb/docs/static/img/dev_tools.png -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/img/fauxton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/pouchdb/docs/static/img/fauxton.png -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/img/kittens.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/pouchdb/docs/static/img/kittens.jpg -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/img/kittens_small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/pouchdb/docs/static/img/kittens_small.jpg -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/img/mark.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/img/offline_replication.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/pouchdb/docs/static/img/offline_replication.gif -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/img/safari_popup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/pouchdb/docs/static/img/safari_popup.png -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/img/screenshots/todo-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/pouchdb/docs/static/img/screenshots/todo-1.png -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/img/travis-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webspeaks/IonicOfflineBlog/ff5ee68ef30f3735cb8985feb9907cf478500700/www/lib/pouchdb/docs/static/img/travis-screenshot.png -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/bootstrap/alerts.less: -------------------------------------------------------------------------------- 1 | // 2 | // Alerts 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base styles 7 | // ------------------------- 8 | 9 | .alert { 10 | padding: @alert-padding; 11 | margin-bottom: @line-height-computed; 12 | border: 1px solid transparent; 13 | border-radius: @alert-border-radius; 14 | 15 | // Headings for larger alerts 16 | h4 { 17 | margin-top: 0; 18 | // Specified for the h4 to prevent conflicts of changing @headings-color 19 | color: inherit; 20 | } 21 | // Provide class for links that match alerts 22 | .alert-link { 23 | font-weight: @alert-link-font-weight; 24 | } 25 | 26 | // Improve alignment and spacing of inner content 27 | > p, 28 | > ul { 29 | margin-bottom: 0; 30 | } 31 | > p + p { 32 | margin-top: 5px; 33 | } 34 | } 35 | 36 | // Dismissable alerts 37 | // 38 | // Expand the right padding and account for the close button's positioning. 39 | 40 | .alert-dismissable { 41 | padding-right: (@alert-padding + 20); 42 | 43 | // Adjust close link position 44 | .close { 45 | position: relative; 46 | top: -2px; 47 | right: -21px; 48 | color: inherit; 49 | } 50 | } 51 | 52 | // Alternate styles 53 | // 54 | // Generate contextual modifier classes for colorizing the alert. 55 | 56 | .alert-success { 57 | .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text); 58 | } 59 | .alert-info { 60 | .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text); 61 | } 62 | .alert-warning { 63 | .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text); 64 | } 65 | .alert-danger { 66 | .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text); 67 | } 68 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/bootstrap/badges.less: -------------------------------------------------------------------------------- 1 | // 2 | // Badges 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base classes 7 | .badge { 8 | display: inline-block; 9 | min-width: 10px; 10 | padding: 3px 7px; 11 | font-size: @font-size-small; 12 | font-weight: @badge-font-weight; 13 | color: @badge-color; 14 | line-height: @badge-line-height; 15 | vertical-align: baseline; 16 | white-space: nowrap; 17 | text-align: center; 18 | background-color: @badge-bg; 19 | border-radius: @badge-border-radius; 20 | 21 | // Empty badges collapse automatically (not available in IE8) 22 | &:empty { 23 | display: none; 24 | } 25 | 26 | // Quick fix for badges in buttons 27 | .btn & { 28 | position: relative; 29 | top: -1px; 30 | } 31 | .btn-xs & { 32 | top: 0; 33 | padding: 1px 5px; 34 | } 35 | } 36 | 37 | // Hover state, but only for links 38 | a.badge { 39 | &:hover, 40 | &:focus { 41 | color: @badge-link-hover-color; 42 | text-decoration: none; 43 | cursor: pointer; 44 | } 45 | } 46 | 47 | // Account for counters in navs 48 | a.list-group-item.active > .badge, 49 | .nav-pills > .active > a > .badge { 50 | color: @badge-active-color; 51 | background-color: @badge-active-bg; 52 | } 53 | .nav-pills > li > a > .badge { 54 | margin-left: 3px; 55 | } 56 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/bootstrap/bootstrap.less: -------------------------------------------------------------------------------- 1 | // Core variables and mixins 2 | @import "variables.less"; 3 | @import "mixins.less"; 4 | 5 | // Reset 6 | @import "normalize.less"; 7 | @import "print.less"; 8 | 9 | // Core CSS 10 | @import "scaffolding.less"; 11 | @import "type.less"; 12 | @import "code.less"; 13 | @import "grid.less"; 14 | @import "tables.less"; 15 | @import "forms.less"; 16 | @import "buttons.less"; 17 | 18 | // Components 19 | @import "component-animations.less"; 20 | @import "glyphicons.less"; 21 | @import "dropdowns.less"; 22 | @import "button-groups.less"; 23 | @import "input-groups.less"; 24 | @import "navs.less"; 25 | @import "navbar.less"; 26 | @import "breadcrumbs.less"; 27 | @import "pagination.less"; 28 | @import "pager.less"; 29 | @import "labels.less"; 30 | @import "badges.less"; 31 | @import "jumbotron.less"; 32 | @import "thumbnails.less"; 33 | @import "alerts.less"; 34 | @import "progress-bars.less"; 35 | @import "media.less"; 36 | @import "list-group.less"; 37 | @import "panels.less"; 38 | @import "wells.less"; 39 | @import "close.less"; 40 | 41 | // Components w/ JavaScript 42 | @import "modals.less"; 43 | @import "tooltip.less"; 44 | @import "popovers.less"; 45 | @import "carousel.less"; 46 | 47 | // Utility classes 48 | @import "utilities.less"; 49 | @import "responsive-utilities.less"; 50 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/bootstrap/breadcrumbs.less: -------------------------------------------------------------------------------- 1 | // 2 | // Breadcrumbs 3 | // -------------------------------------------------- 4 | 5 | 6 | .breadcrumb { 7 | padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal; 8 | margin-bottom: @line-height-computed; 9 | list-style: none; 10 | background-color: @breadcrumb-bg; 11 | border-radius: @border-radius-base; 12 | 13 | > li { 14 | display: inline-block; 15 | 16 | + li:before { 17 | content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space 18 | padding: 0 5px; 19 | color: @breadcrumb-color; 20 | } 21 | } 22 | 23 | > .active { 24 | color: @breadcrumb-active-color; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/bootstrap/close.less: -------------------------------------------------------------------------------- 1 | // 2 | // Close icons 3 | // -------------------------------------------------- 4 | 5 | 6 | .close { 7 | float: right; 8 | font-size: (@font-size-base * 1.5); 9 | font-weight: @close-font-weight; 10 | line-height: 1; 11 | color: @close-color; 12 | text-shadow: @close-text-shadow; 13 | .opacity(.2); 14 | 15 | &:hover, 16 | &:focus { 17 | color: @close-color; 18 | text-decoration: none; 19 | cursor: pointer; 20 | .opacity(.5); 21 | } 22 | 23 | // Additional properties for button version 24 | // iOS requires the button element instead of an anchor tag. 25 | // If you want the anchor version, it requires `href="#"`. 26 | button& { 27 | padding: 0; 28 | cursor: pointer; 29 | background: transparent; 30 | border: 0; 31 | -webkit-appearance: none; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/bootstrap/code.less: -------------------------------------------------------------------------------- 1 | // 2 | // Code (inline and block) 3 | // -------------------------------------------------- 4 | 5 | 6 | // Inline and block code styles 7 | code, 8 | kbd, 9 | pre, 10 | samp { 11 | font-family: @font-family-monospace; 12 | } 13 | 14 | // Inline code 15 | code { 16 | padding: 2px 4px; 17 | font-size: 90%; 18 | color: @code-color; 19 | background-color: @code-bg; 20 | white-space: nowrap; 21 | border-radius: @border-radius-base; 22 | } 23 | 24 | // User input typically entered via keyboard 25 | kbd { 26 | padding: 2px 4px; 27 | font-size: 90%; 28 | color: @kbd-color; 29 | background-color: @kbd-bg; 30 | border-radius: @border-radius-small; 31 | box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); 32 | } 33 | 34 | // Blocks of code 35 | pre { 36 | display: block; 37 | padding: ((@line-height-computed - 1) / 2); 38 | margin: 0 0 (@line-height-computed / 2); 39 | font-size: (@font-size-base - 1); // 14px to 13px 40 | line-height: @line-height-base; 41 | word-break: break-all; 42 | word-wrap: break-word; 43 | color: @pre-color; 44 | background-color: @pre-bg; 45 | border: 1px solid @pre-border-color; 46 | border-radius: @border-radius-base; 47 | 48 | // Account for some code outputs that place code tags in pre tags 49 | code { 50 | padding: 0; 51 | font-size: inherit; 52 | color: inherit; 53 | white-space: pre-wrap; 54 | background-color: transparent; 55 | border-radius: 0; 56 | } 57 | } 58 | 59 | // Enable scrollable blocks of code 60 | .pre-scrollable { 61 | max-height: @pre-scrollable-max-height; 62 | overflow-y: scroll; 63 | } 64 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/bootstrap/component-animations.less: -------------------------------------------------------------------------------- 1 | // 2 | // Component animations 3 | // -------------------------------------------------- 4 | 5 | // Heads up! 6 | // 7 | // We don't use the `.opacity()` mixin here since it causes a bug with text 8 | // fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552. 9 | 10 | .fade { 11 | opacity: 0; 12 | .transition(opacity .15s linear); 13 | &.in { 14 | opacity: 1; 15 | } 16 | } 17 | 18 | .collapse { 19 | display: none; 20 | &.in { 21 | display: block; 22 | } 23 | } 24 | .collapsing { 25 | position: relative; 26 | height: 0; 27 | overflow: hidden; 28 | .transition(height .35s ease); 29 | } 30 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/bootstrap/grid.less: -------------------------------------------------------------------------------- 1 | // 2 | // Grid system 3 | // -------------------------------------------------- 4 | 5 | 6 | // Container widths 7 | // 8 | // Set the container width, and override it for fixed navbars in media queries. 9 | 10 | .container { 11 | .container-fixed(); 12 | 13 | @media (min-width: @screen-sm-min) { 14 | width: @container-sm; 15 | } 16 | @media (min-width: @screen-md-min) { 17 | width: @container-md; 18 | } 19 | @media (min-width: @screen-lg-min) { 20 | width: @container-lg; 21 | } 22 | } 23 | 24 | 25 | // Fluid container 26 | // 27 | // Utilizes the mixin meant for fixed width containers, but without any defined 28 | // width for fluid, full width layouts. 29 | 30 | .container-fluid { 31 | .container-fixed(); 32 | } 33 | 34 | 35 | // Row 36 | // 37 | // Rows contain and clear the floats of your columns. 38 | 39 | .row { 40 | .make-row(); 41 | } 42 | 43 | 44 | // Columns 45 | // 46 | // Common styles for small and large grid columns 47 | 48 | .make-grid-columns(); 49 | 50 | 51 | // Extra small grid 52 | // 53 | // Columns, offsets, pushes, and pulls for extra small devices like 54 | // smartphones. 55 | 56 | .make-grid(xs); 57 | 58 | 59 | // Small grid 60 | // 61 | // Columns, offsets, pushes, and pulls for the small device range, from phones 62 | // to tablets. 63 | 64 | @media (min-width: @screen-sm-min) { 65 | .make-grid(sm); 66 | } 67 | 68 | 69 | // Medium grid 70 | // 71 | // Columns, offsets, pushes, and pulls for the desktop device range. 72 | 73 | @media (min-width: @screen-md-min) { 74 | .make-grid(md); 75 | } 76 | 77 | 78 | // Large grid 79 | // 80 | // Columns, offsets, pushes, and pulls for the large desktop device range. 81 | 82 | @media (min-width: @screen-lg-min) { 83 | .make-grid(lg); 84 | } 85 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/bootstrap/jumbotron.less: -------------------------------------------------------------------------------- 1 | // 2 | // Jumbotron 3 | // -------------------------------------------------- 4 | 5 | 6 | .jumbotron { 7 | padding: @jumbotron-padding; 8 | margin-bottom: @jumbotron-padding; 9 | color: @jumbotron-color; 10 | background-color: @jumbotron-bg; 11 | 12 | h1, 13 | .h1 { 14 | color: @jumbotron-heading-color; 15 | } 16 | p { 17 | margin-bottom: (@jumbotron-padding / 2); 18 | font-size: @jumbotron-font-size; 19 | font-weight: 200; 20 | } 21 | 22 | .container & { 23 | border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container 24 | } 25 | 26 | .container { 27 | max-width: 100%; 28 | } 29 | 30 | @media screen and (min-width: @screen-sm-min) { 31 | padding-top: (@jumbotron-padding * 1.6); 32 | padding-bottom: (@jumbotron-padding * 1.6); 33 | 34 | .container & { 35 | padding-left: (@jumbotron-padding * 2); 36 | padding-right: (@jumbotron-padding * 2); 37 | } 38 | 39 | h1, 40 | .h1 { 41 | font-size: (@font-size-base * 4.5); 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/bootstrap/labels.less: -------------------------------------------------------------------------------- 1 | // 2 | // Labels 3 | // -------------------------------------------------- 4 | 5 | .label { 6 | display: inline; 7 | padding: .2em .6em .3em; 8 | font-size: 75%; 9 | font-weight: bold; 10 | line-height: 1; 11 | color: @label-color; 12 | text-align: center; 13 | white-space: nowrap; 14 | vertical-align: baseline; 15 | border-radius: .25em; 16 | 17 | // Add hover effects, but only for links 18 | &[href] { 19 | &:hover, 20 | &:focus { 21 | color: @label-link-hover-color; 22 | text-decoration: none; 23 | cursor: pointer; 24 | } 25 | } 26 | 27 | // Empty labels collapse automatically (not available in IE8) 28 | &:empty { 29 | display: none; 30 | } 31 | 32 | // Quick fix for labels in buttons 33 | .btn & { 34 | position: relative; 35 | top: -1px; 36 | } 37 | } 38 | 39 | // Colors 40 | // Contextual variations (linked labels get darker on :hover) 41 | 42 | .label-default { 43 | .label-variant(@label-default-bg); 44 | } 45 | 46 | .label-primary { 47 | .label-variant(@label-primary-bg); 48 | } 49 | 50 | .label-success { 51 | .label-variant(@label-success-bg); 52 | } 53 | 54 | .label-info { 55 | .label-variant(@label-info-bg); 56 | } 57 | 58 | .label-warning { 59 | .label-variant(@label-warning-bg); 60 | } 61 | 62 | .label-danger { 63 | .label-variant(@label-danger-bg); 64 | } 65 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/bootstrap/media.less: -------------------------------------------------------------------------------- 1 | // Media objects 2 | // Source: http://stubbornella.org/content/?p=497 3 | // -------------------------------------------------- 4 | 5 | 6 | // Common styles 7 | // ------------------------- 8 | 9 | // Clear the floats 10 | .media, 11 | .media-body { 12 | overflow: hidden; 13 | zoom: 1; 14 | } 15 | 16 | // Proper spacing between instances of .media 17 | .media, 18 | .media .media { 19 | margin-top: 15px; 20 | } 21 | .media:first-child { 22 | margin-top: 0; 23 | } 24 | 25 | // For images and videos, set to block 26 | .media-object { 27 | display: block; 28 | } 29 | 30 | // Reset margins on headings for tighter default spacing 31 | .media-heading { 32 | margin: 0 0 5px; 33 | } 34 | 35 | 36 | // Media image alignment 37 | // ------------------------- 38 | 39 | .media { 40 | > .pull-left { 41 | margin-right: 10px; 42 | } 43 | > .pull-right { 44 | margin-left: 10px; 45 | } 46 | } 47 | 48 | 49 | // Media list variation 50 | // ------------------------- 51 | 52 | // Undo default ul/ol styles 53 | .media-list { 54 | padding-left: 0; 55 | list-style: none; 56 | } 57 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/bootstrap/pager.less: -------------------------------------------------------------------------------- 1 | // 2 | // Pager pagination 3 | // -------------------------------------------------- 4 | 5 | 6 | .pager { 7 | padding-left: 0; 8 | margin: @line-height-computed 0; 9 | list-style: none; 10 | text-align: center; 11 | &:extend(.clearfix all); 12 | li { 13 | display: inline; 14 | > a, 15 | > span { 16 | display: inline-block; 17 | padding: 5px 14px; 18 | background-color: @pager-bg; 19 | border: 1px solid @pager-border; 20 | border-radius: @pager-border-radius; 21 | } 22 | 23 | > a:hover, 24 | > a:focus { 25 | text-decoration: none; 26 | background-color: @pager-hover-bg; 27 | } 28 | } 29 | 30 | .next { 31 | > a, 32 | > span { 33 | float: right; 34 | } 35 | } 36 | 37 | .previous { 38 | > a, 39 | > span { 40 | float: left; 41 | } 42 | } 43 | 44 | .disabled { 45 | > a, 46 | > a:hover, 47 | > a:focus, 48 | > span { 49 | color: @pager-disabled-color; 50 | background-color: @pager-bg; 51 | cursor: not-allowed; 52 | } 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/bootstrap/pagination.less: -------------------------------------------------------------------------------- 1 | // 2 | // Pagination (multiple pages) 3 | // -------------------------------------------------- 4 | .pagination { 5 | display: inline-block; 6 | padding-left: 0; 7 | margin: @line-height-computed 0; 8 | border-radius: @border-radius-base; 9 | 10 | > li { 11 | display: inline; // Remove list-style and block-level defaults 12 | > a, 13 | > span { 14 | position: relative; 15 | float: left; // Collapse white-space 16 | padding: @padding-base-vertical @padding-base-horizontal; 17 | line-height: @line-height-base; 18 | text-decoration: none; 19 | color: @pagination-color; 20 | background-color: @pagination-bg; 21 | border: 1px solid @pagination-border; 22 | margin-left: -1px; 23 | } 24 | &:first-child { 25 | > a, 26 | > span { 27 | margin-left: 0; 28 | .border-left-radius(@border-radius-base); 29 | } 30 | } 31 | &:last-child { 32 | > a, 33 | > span { 34 | .border-right-radius(@border-radius-base); 35 | } 36 | } 37 | } 38 | 39 | > li > a, 40 | > li > span { 41 | &:hover, 42 | &:focus { 43 | color: @pagination-hover-color; 44 | background-color: @pagination-hover-bg; 45 | border-color: @pagination-hover-border; 46 | } 47 | } 48 | 49 | > .active > a, 50 | > .active > span { 51 | &, 52 | &:hover, 53 | &:focus { 54 | z-index: 2; 55 | color: @pagination-active-color; 56 | background-color: @pagination-active-bg; 57 | border-color: @pagination-active-border; 58 | cursor: default; 59 | } 60 | } 61 | 62 | > .disabled { 63 | > span, 64 | > span:hover, 65 | > span:focus, 66 | > a, 67 | > a:hover, 68 | > a:focus { 69 | color: @pagination-disabled-color; 70 | background-color: @pagination-disabled-bg; 71 | border-color: @pagination-disabled-border; 72 | cursor: not-allowed; 73 | } 74 | } 75 | } 76 | 77 | // Sizing 78 | // -------------------------------------------------- 79 | 80 | // Large 81 | .pagination-lg { 82 | .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large); 83 | } 84 | 85 | // Small 86 | .pagination-sm { 87 | .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small); 88 | } 89 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/bootstrap/print.less: -------------------------------------------------------------------------------- 1 | // 2 | // Basic print styles 3 | // -------------------------------------------------- 4 | // Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css 5 | 6 | @media print { 7 | 8 | * { 9 | text-shadow: none !important; 10 | color: #000 !important; // Black prints faster: h5bp.com/s 11 | background: transparent !important; 12 | box-shadow: none !important; 13 | } 14 | 15 | a, 16 | a:visited { 17 | text-decoration: underline; 18 | } 19 | 20 | a[href]:after { 21 | content: " (" attr(href) ")"; 22 | } 23 | 24 | abbr[title]:after { 25 | content: " (" attr(title) ")"; 26 | } 27 | 28 | // Don't show links for images, or javascript/internal links 29 | a[href^="javascript:"]:after, 30 | a[href^="#"]:after { 31 | content: ""; 32 | } 33 | 34 | pre, 35 | blockquote { 36 | border: 1px solid #999; 37 | page-break-inside: avoid; 38 | } 39 | 40 | thead { 41 | display: table-header-group; // h5bp.com/t 42 | } 43 | 44 | tr, 45 | img { 46 | page-break-inside: avoid; 47 | } 48 | 49 | img { 50 | max-width: 100% !important; 51 | } 52 | 53 | p, 54 | h2, 55 | h3 { 56 | orphans: 3; 57 | widows: 3; 58 | } 59 | 60 | h2, 61 | h3 { 62 | page-break-after: avoid; 63 | } 64 | 65 | // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245 66 | // Once fixed, we can just straight up remove this. 67 | select { 68 | background: #fff !important; 69 | } 70 | 71 | // Bootstrap components 72 | .navbar { 73 | display: none; 74 | } 75 | .table { 76 | td, 77 | th { 78 | background-color: #fff !important; 79 | } 80 | } 81 | .btn, 82 | .dropup > .btn { 83 | > .caret { 84 | border-top-color: #000 !important; 85 | } 86 | } 87 | .label { 88 | border: 1px solid #000; 89 | } 90 | 91 | .table { 92 | border-collapse: collapse !important; 93 | } 94 | .table-bordered { 95 | th, 96 | td { 97 | border: 1px solid #ddd !important; 98 | } 99 | } 100 | 101 | } 102 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/bootstrap/progress-bars.less: -------------------------------------------------------------------------------- 1 | // 2 | // Progress bars 3 | // -------------------------------------------------- 4 | 5 | 6 | // Bar animations 7 | // ------------------------- 8 | 9 | // WebKit 10 | @-webkit-keyframes progress-bar-stripes { 11 | from { background-position: 40px 0; } 12 | to { background-position: 0 0; } 13 | } 14 | 15 | // Spec and IE10+ 16 | @keyframes progress-bar-stripes { 17 | from { background-position: 40px 0; } 18 | to { background-position: 0 0; } 19 | } 20 | 21 | 22 | 23 | // Bar itself 24 | // ------------------------- 25 | 26 | // Outer container 27 | .progress { 28 | overflow: hidden; 29 | height: @line-height-computed; 30 | margin-bottom: @line-height-computed; 31 | background-color: @progress-bg; 32 | border-radius: @border-radius-base; 33 | .box-shadow(inset 0 1px 2px rgba(0,0,0,.1)); 34 | } 35 | 36 | // Bar of progress 37 | .progress-bar { 38 | float: left; 39 | width: 0%; 40 | height: 100%; 41 | font-size: @font-size-small; 42 | line-height: @line-height-computed; 43 | color: @progress-bar-color; 44 | text-align: center; 45 | background-color: @progress-bar-bg; 46 | .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15)); 47 | .transition(width .6s ease); 48 | } 49 | 50 | // Striped bars 51 | .progress-striped .progress-bar { 52 | #gradient > .striped(); 53 | background-size: 40px 40px; 54 | } 55 | 56 | // Call animation for the active one 57 | .progress.active .progress-bar { 58 | .animation(progress-bar-stripes 2s linear infinite); 59 | } 60 | 61 | 62 | 63 | // Variations 64 | // ------------------------- 65 | 66 | .progress-bar-success { 67 | .progress-bar-variant(@progress-bar-success-bg); 68 | } 69 | 70 | .progress-bar-info { 71 | .progress-bar-variant(@progress-bar-info-bg); 72 | } 73 | 74 | .progress-bar-warning { 75 | .progress-bar-variant(@progress-bar-warning-bg); 76 | } 77 | 78 | .progress-bar-danger { 79 | .progress-bar-variant(@progress-bar-danger-bg); 80 | } 81 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/bootstrap/responsive-utilities.less: -------------------------------------------------------------------------------- 1 | // 2 | // Responsive: Utility classes 3 | // -------------------------------------------------- 4 | 5 | 6 | // IE10 in Windows (Phone) 8 7 | // 8 | // Support for responsive views via media queries is kind of borked in IE10, for 9 | // Surface/desktop in split view and for Windows Phone 8. This particular fix 10 | // must be accompanied by a snippet of JavaScript to sniff the user agent and 11 | // apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at 12 | // our Getting Started page for more information on this bug. 13 | // 14 | // For more information, see the following: 15 | // 16 | // Issue: https://github.com/twbs/bootstrap/issues/10497 17 | // Docs: http://getbootstrap.com/getting-started/#browsers 18 | // Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/ 19 | 20 | @-ms-viewport { 21 | width: device-width; 22 | } 23 | 24 | 25 | // Visibility utilities 26 | .visible-xs, 27 | .visible-sm, 28 | .visible-md, 29 | .visible-lg { 30 | .responsive-invisibility(); 31 | } 32 | 33 | .visible-xs { 34 | @media (max-width: @screen-xs-max) { 35 | .responsive-visibility(); 36 | } 37 | } 38 | .visible-sm { 39 | @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { 40 | .responsive-visibility(); 41 | } 42 | } 43 | .visible-md { 44 | @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { 45 | .responsive-visibility(); 46 | } 47 | } 48 | .visible-lg { 49 | @media (min-width: @screen-lg-min) { 50 | .responsive-visibility(); 51 | } 52 | } 53 | 54 | .hidden-xs { 55 | @media (max-width: @screen-xs-max) { 56 | .responsive-invisibility(); 57 | } 58 | } 59 | .hidden-sm { 60 | @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { 61 | .responsive-invisibility(); 62 | } 63 | } 64 | .hidden-md { 65 | @media (min-width: @screen-md-min) and (max-width: @screen-md-max) { 66 | .responsive-invisibility(); 67 | } 68 | } 69 | .hidden-lg { 70 | @media (min-width: @screen-lg-min) { 71 | .responsive-invisibility(); 72 | } 73 | } 74 | 75 | 76 | // Print utilities 77 | // 78 | // Media queries are placed on the inside to be mixin-friendly. 79 | 80 | .visible-print { 81 | .responsive-invisibility(); 82 | 83 | @media print { 84 | .responsive-visibility(); 85 | } 86 | } 87 | 88 | .hidden-print { 89 | @media print { 90 | .responsive-invisibility(); 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/bootstrap/scaffolding.less: -------------------------------------------------------------------------------- 1 | // 2 | // Scaffolding 3 | // -------------------------------------------------- 4 | 5 | 6 | // Reset the box-sizing 7 | // 8 | // Heads up! This reset may cause conflicts with some third-party widgets. 9 | // For recommendations on resolving such conflicts, see 10 | // http://getbootstrap.com/getting-started/#third-box-sizing 11 | * { 12 | .box-sizing(border-box); 13 | } 14 | *:before, 15 | *:after { 16 | .box-sizing(border-box); 17 | } 18 | 19 | 20 | // Body reset 21 | 22 | html { 23 | font-size: 62.5%; 24 | -webkit-tap-highlight-color: rgba(0,0,0,0); 25 | } 26 | 27 | body { 28 | font-family: @font-family-base; 29 | font-size: @font-size-base; 30 | line-height: @line-height-base; 31 | color: @text-color; 32 | background-color: @body-bg; 33 | } 34 | 35 | // Reset fonts for relevant elements 36 | input, 37 | button, 38 | select, 39 | textarea { 40 | font-family: inherit; 41 | font-size: inherit; 42 | line-height: inherit; 43 | } 44 | 45 | 46 | // Links 47 | 48 | a { 49 | color: @link-color; 50 | text-decoration: none; 51 | 52 | &:hover, 53 | &:focus { 54 | color: @link-hover-color; 55 | text-decoration: underline; 56 | } 57 | 58 | &:focus { 59 | .tab-focus(); 60 | } 61 | } 62 | 63 | 64 | // Figures 65 | // 66 | // We reset this here because previously Normalize had no `figure` margins. This 67 | // ensures we don't break anyone's use of the element. 68 | 69 | figure { 70 | margin: 0; 71 | } 72 | 73 | 74 | // Images 75 | 76 | img { 77 | vertical-align: middle; 78 | } 79 | 80 | // Responsive images (ensure images don't scale beyond their parents) 81 | .img-responsive { 82 | .img-responsive(); 83 | } 84 | 85 | // Rounded corners 86 | .img-rounded { 87 | border-radius: @border-radius-large; 88 | } 89 | 90 | // Image thumbnails 91 | // 92 | // Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`. 93 | .img-thumbnail { 94 | padding: @thumbnail-padding; 95 | line-height: @line-height-base; 96 | background-color: @thumbnail-bg; 97 | border: 1px solid @thumbnail-border; 98 | border-radius: @thumbnail-border-radius; 99 | .transition(all .2s ease-in-out); 100 | 101 | // Keep them at most 100% wide 102 | .img-responsive(inline-block); 103 | } 104 | 105 | // Perfect circle 106 | .img-circle { 107 | border-radius: 50%; // set radius in percents 108 | } 109 | 110 | 111 | // Horizontal rules 112 | 113 | hr { 114 | margin-top: @line-height-computed; 115 | margin-bottom: @line-height-computed; 116 | border: 0; 117 | border-top: 1px solid @hr-border; 118 | } 119 | 120 | 121 | // Only display content to screen readers 122 | // 123 | // See: http://a11yproject.com/posts/how-to-hide-content/ 124 | 125 | .sr-only { 126 | position: absolute; 127 | width: 1px; 128 | height: 1px; 129 | margin: -1px; 130 | padding: 0; 131 | overflow: hidden; 132 | clip: rect(0,0,0,0); 133 | border: 0; 134 | } 135 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/bootstrap/thumbnails.less: -------------------------------------------------------------------------------- 1 | // 2 | // Thumbnails 3 | // -------------------------------------------------- 4 | 5 | 6 | // Mixin and adjust the regular image class 7 | .thumbnail { 8 | display: block; 9 | padding: @thumbnail-padding; 10 | margin-bottom: @line-height-computed; 11 | line-height: @line-height-base; 12 | background-color: @thumbnail-bg; 13 | border: 1px solid @thumbnail-border; 14 | border-radius: @thumbnail-border-radius; 15 | .transition(all .2s ease-in-out); 16 | 17 | > img, 18 | a > img { 19 | &:extend(.img-responsive); 20 | margin-left: auto; 21 | margin-right: auto; 22 | } 23 | 24 | // Add a hover state for linked versions only 25 | a&:hover, 26 | a&:focus, 27 | a&.active { 28 | border-color: @link-color; 29 | } 30 | 31 | // Image captions 32 | .caption { 33 | padding: @thumbnail-caption-padding; 34 | color: @thumbnail-caption-color; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/bootstrap/tooltip.less: -------------------------------------------------------------------------------- 1 | // 2 | // Tooltips 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base class 7 | .tooltip { 8 | position: absolute; 9 | z-index: @zindex-tooltip; 10 | display: block; 11 | visibility: visible; 12 | font-size: @font-size-small; 13 | line-height: 1.4; 14 | .opacity(0); 15 | 16 | &.in { .opacity(@tooltip-opacity); } 17 | &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; } 18 | &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; } 19 | &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; } 20 | &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; } 21 | } 22 | 23 | // Wrapper for the tooltip content 24 | .tooltip-inner { 25 | max-width: @tooltip-max-width; 26 | padding: 3px 8px; 27 | color: @tooltip-color; 28 | text-align: center; 29 | text-decoration: none; 30 | background-color: @tooltip-bg; 31 | border-radius: @border-radius-base; 32 | } 33 | 34 | // Arrows 35 | .tooltip-arrow { 36 | position: absolute; 37 | width: 0; 38 | height: 0; 39 | border-color: transparent; 40 | border-style: solid; 41 | } 42 | .tooltip { 43 | &.top .tooltip-arrow { 44 | bottom: 0; 45 | left: 50%; 46 | margin-left: -@tooltip-arrow-width; 47 | border-width: @tooltip-arrow-width @tooltip-arrow-width 0; 48 | border-top-color: @tooltip-arrow-color; 49 | } 50 | &.top-left .tooltip-arrow { 51 | bottom: 0; 52 | left: @tooltip-arrow-width; 53 | border-width: @tooltip-arrow-width @tooltip-arrow-width 0; 54 | border-top-color: @tooltip-arrow-color; 55 | } 56 | &.top-right .tooltip-arrow { 57 | bottom: 0; 58 | right: @tooltip-arrow-width; 59 | border-width: @tooltip-arrow-width @tooltip-arrow-width 0; 60 | border-top-color: @tooltip-arrow-color; 61 | } 62 | &.right .tooltip-arrow { 63 | top: 50%; 64 | left: 0; 65 | margin-top: -@tooltip-arrow-width; 66 | border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0; 67 | border-right-color: @tooltip-arrow-color; 68 | } 69 | &.left .tooltip-arrow { 70 | top: 50%; 71 | right: 0; 72 | margin-top: -@tooltip-arrow-width; 73 | border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width; 74 | border-left-color: @tooltip-arrow-color; 75 | } 76 | &.bottom .tooltip-arrow { 77 | top: 0; 78 | left: 50%; 79 | margin-left: -@tooltip-arrow-width; 80 | border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; 81 | border-bottom-color: @tooltip-arrow-color; 82 | } 83 | &.bottom-left .tooltip-arrow { 84 | top: 0; 85 | left: @tooltip-arrow-width; 86 | border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; 87 | border-bottom-color: @tooltip-arrow-color; 88 | } 89 | &.bottom-right .tooltip-arrow { 90 | top: 0; 91 | right: @tooltip-arrow-width; 92 | border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; 93 | border-bottom-color: @tooltip-arrow-color; 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/bootstrap/utilities.less: -------------------------------------------------------------------------------- 1 | // 2 | // Utility classes 3 | // -------------------------------------------------- 4 | 5 | 6 | // Floats 7 | // ------------------------- 8 | 9 | .clearfix { 10 | .clearfix(); 11 | } 12 | .center-block { 13 | .center-block(); 14 | } 15 | .pull-right { 16 | float: right !important; 17 | } 18 | .pull-left { 19 | float: left !important; 20 | } 21 | 22 | 23 | // Toggling content 24 | // ------------------------- 25 | 26 | // Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1 27 | .hide { 28 | display: none !important; 29 | } 30 | .show { 31 | display: block !important; 32 | } 33 | .invisible { 34 | visibility: hidden; 35 | } 36 | .text-hide { 37 | .text-hide(); 38 | } 39 | 40 | 41 | // Hide from screenreaders and browsers 42 | // 43 | // Credit: HTML5 Boilerplate 44 | 45 | .hidden { 46 | display: none !important; 47 | visibility: hidden !important; 48 | } 49 | 50 | 51 | // For Affix plugin 52 | // ------------------------- 53 | 54 | .affix { 55 | position: fixed; 56 | } 57 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/bootstrap/wells.less: -------------------------------------------------------------------------------- 1 | // 2 | // Wells 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base class 7 | .well { 8 | min-height: 20px; 9 | padding: 19px; 10 | margin-bottom: 20px; 11 | background-color: @well-bg; 12 | border: 1px solid @well-border; 13 | border-radius: @border-radius-base; 14 | .box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); 15 | blockquote { 16 | border-color: #ddd; 17 | border-color: rgba(0,0,0,.15); 18 | } 19 | } 20 | 21 | // Sizes 22 | .well-lg { 23 | padding: 24px; 24 | border-radius: @border-radius-large; 25 | } 26 | .well-sm { 27 | padding: 9px; 28 | border-radius: @border-radius-small; 29 | } 30 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/pouchdb/alerts.less: -------------------------------------------------------------------------------- 1 | @import "@{bootstrap}/alerts.less"; 2 | 3 | .alert { .clearfix(); } 4 | 5 | .alert-text { .make-xs-column(10); } 6 | 7 | .alert:before { 8 | float: left; 9 | display: block; 10 | content: ''; 11 | height: @alert-before-size; 12 | width: @alert-before-size; 13 | border-radius: 50%; 14 | border: 1px solid; 15 | font-size: @alert-before-size * .75; 16 | font-family: @font-family-monospace; 17 | text-align: center; 18 | line-height: @alert-before-size; 19 | } 20 | 21 | .alert-info:before { 22 | content: @alert-before-info-text; 23 | border-color: @alert-info-border; 24 | background-color: lighten(@alert-info-bg, 3%); 25 | color: @alert-info-text; 26 | } 27 | .alert-success:before { 28 | content: @alert-before-success-text; 29 | border-color: @alert-success-border; 30 | background-color: lighten(@alert-success-bg, 3%); 31 | color: @alert-success-text; 32 | } 33 | .alert-warning:before { 34 | content: @alert-before-warning-text; 35 | border-color: @alert-warning-border; 36 | background-color: lighten(@alert-warning-bg, 3%); 37 | color: @alert-warning-text; 38 | } 39 | .alert-danger:before { 40 | content: @alert-before-danger-text; 41 | border-color: @alert-danger-border; 42 | background-color: lighten(@alert-danger-bg, 3%); 43 | color: @alert-danger-text; 44 | } 45 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/pouchdb/anchors.less: -------------------------------------------------------------------------------- 1 | .anchor { 2 | &.h1, 3 | &.h2, 4 | &.h3, 5 | &.h4, 6 | &.h5, 7 | &.h6 { 8 | display: inline-block; 9 | text-decoration: none; 10 | } 11 | 12 | &::before { 13 | content: '# '; 14 | opacity: .25; 15 | } 16 | &:focus { outline: none; } 17 | } -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/pouchdb/block.less: -------------------------------------------------------------------------------- 1 | .block { 2 | @media (max-width: @screen-md-min) { 3 | > h1, > h2, > h3, > h4, > h5, > h6, 4 | > .h1, > .h2, > .h3, > .h4, > .h5, > .h6, 5 | > p { 6 | text-align: center; 7 | } 8 | > p { 9 | margin: 0 auto; 10 | max-width: 60%; 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/pouchdb/buttons.less: -------------------------------------------------------------------------------- 1 | @import "@{bootstrap}/buttons.less"; 2 | 3 | .btn { 4 | .button-size(@padding-base-vertical; @padding-large-horizontal*2; @font-size-base; @line-height-base; @border-radius-base); 5 | } 6 | 7 | .btn-lg { 8 | .button-size(@padding-large-vertical; @padding-large-horizontal*2; @font-size-large; @line-height-large; @border-radius-large); 9 | } 10 | .btn-sm { 11 | .button-size(@padding-small-vertical; @padding-small-horizontal*2; @font-size-small; @line-height-small; @border-radius-small); 12 | } 13 | .btn-xs { 14 | .button-size(@padding-xs-vertical; @padding-xs-horizontal*2; @font-size-small; @line-height-small; @border-radius-small); 15 | } 16 | 17 | // Social button variants 18 | .btn-github { 19 | .button-variant(@btn-github-color; @btn-github-bg; @btn-github-border); 20 | } 21 | .btn-twitter { 22 | .button-variant(@btn-twitter-color; @btn-twitter-bg; @btn-twitter-border); 23 | } 24 | 25 | @media (max-width: @screen-xs-max) { 26 | .btn { 27 | width: 100%; 28 | } 29 | } -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/pouchdb/code.less: -------------------------------------------------------------------------------- 1 | @import "@{bootstrap}/code.less"; 2 | 3 | pre { 4 | padding-left: @pre-padding; 5 | padding-right: @pre-padding; 6 | } 7 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/pouchdb/header.less: -------------------------------------------------------------------------------- 1 | header { 2 | overflow-x: hidden; 3 | position: relative; 4 | padding: 25px 0; 5 | border-bottom: 2px solid; 6 | border-color: @header-border-color; 7 | background-color: @header-color; 8 | } -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/pouchdb/highlight.less: -------------------------------------------------------------------------------- 1 | .highlight { 2 | pre { 3 | background-color: #3f3f3f; 4 | 5 | border: none; 6 | border-radius: 10px; 7 | } 8 | 9 | code, 10 | pre{ color: #ffffff; } 11 | 12 | .hll { background-color: #3e403d } 13 | .c { color: #75715e } 14 | .err { color: #960050; background-color: #1e0010 } 15 | .k { color: #66d9ef } 16 | .l { color: #ae81ff } 17 | .n { color: #f8f8f2 } 18 | .o { color: #f92672 } 19 | .p { color: #f8f8f2 } 20 | .cm { color: #75715e } 21 | .cp { color: #75715e } 22 | .c1 { color: #75715e } 23 | .cs { color: #75715e } 24 | .ge { font-style: italic } 25 | .gs { font-weight: bold } 26 | .kc { color: #66d9ef } 27 | .kd { color: #66d9ef } 28 | .kn { color: #f92672 } 29 | .kp { color: #66d9ef } 30 | .kr { color: #66d9ef } 31 | .kt { color: #66d9ef } 32 | .ld { color: #e6db74 } 33 | .m { color: #ae81ff } 34 | .s { color: #e6db74 } 35 | .na { color: #a6e22e } 36 | .nb { color: #f8f8f2 } 37 | .nc { color: #a6e22e } 38 | .no { color: #66d9ef } 39 | .nd { color: #a6e22e } 40 | .ni { color: #f8f8f2 } 41 | .ne { color: #a6e22e } 42 | .nf { color: #a6e22e } 43 | .nl { color: #f8f8f2 } 44 | .nn { color: #f8f8f2 } 45 | .nx { color: #6eca97 } 46 | .py { color: #f8f8f2 } 47 | .nt { color: #f92672 } 48 | .nv { color: #f8f8f2 } 49 | .ow { color: #f92672 } 50 | .w { color: #f8f8f2 } 51 | .mf { color: #ae81ff } 52 | .mh { color: #ae81ff } 53 | .mi { color: #ae81ff } 54 | .mo { color: #ae81ff } 55 | .sb { color: #e6db74 } 56 | .sc { color: #e6db74 } 57 | .sd { color: #e6db74 } 58 | .s2 { color: #e6db74 } 59 | .se { color: #ae81ff } 60 | .sh { color: #e6db74 } 61 | .si { color: #e6db74 } 62 | .sx { color: #e6db74 } 63 | .sr { color: #e6db74 } 64 | .s1 { color: #e6db74 } 65 | .ss { color: #e6db74 } 66 | .bp { color: #f8f8f2 } 67 | .vc { color: #f8f8f2 } 68 | .vg { color: #f8f8f2 } 69 | .vi { color: #f8f8f2 } 70 | .il { color: #ae81ff } 71 | } 72 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/pouchdb/icons.less: -------------------------------------------------------------------------------- 1 | .icon { 2 | margin: 0 auto; 3 | margin-top: @grid-gutter-width; 4 | background-image: url("@{img_dir}/icons.svg"); 5 | background-repeat: no-repeat; 6 | 7 | & ~ * { text-align: center; } 8 | 9 | &-twitter, 10 | &-couchdb, 11 | &-github, 12 | &-travis, 13 | &-leveldb, 14 | &-saucelabs { 15 | opacity: .75; 16 | &:hover { opacity: 1; } 17 | } 18 | 19 | &-node { 20 | background-position: 0; 21 | width: 68px; 22 | height: 73px; 23 | } 24 | 25 | &-light { 26 | background-position: -73px -1px; 27 | width: 92px; 28 | height: 85px; 29 | } 30 | 31 | &-learn { 32 | background-position: -170px 0; 33 | width: 92px; 34 | height: 87px; 35 | } 36 | &-open { 37 | background-position: -267px -5px; 38 | width: 111px; 39 | height: 77px; 40 | } 41 | &-twitter { 42 | background-position: -388px -24px; 43 | width: 46px; 44 | height: 39px; 45 | } 46 | &-couchdb { 47 | background-position: -439px -15px; 48 | width: 90px; 49 | height: 57px; 50 | } 51 | &-github { 52 | background-position: -537px -22px; 53 | width: 45px; 54 | height: 43px; 55 | } 56 | &-travis { 57 | background-position: -589px -20px; 58 | width: 45px; 59 | height: 43px; 60 | } 61 | &-leveldb { 62 | background-position: -640px -20px; 63 | width: 40px; 64 | height: 43px; 65 | } 66 | &-saucelabs { 67 | background-position: -686px -22px; 68 | width: 45px; 69 | height: 43px; 70 | } 71 | 72 | @media (max-width: @screen-sm-min) { 73 | &-node, 74 | &-light, 75 | &-learn, 76 | &-open { 77 | height: 70px; 78 | width: 67px; 79 | background-size: 500px; 80 | + * { margin-top: 0; } 81 | } 82 | &-node { 83 | height: 60px; 84 | width: 50px; 85 | background-position: 0 0; 86 | } 87 | &-light { background-position: -50px 0; } 88 | &-learn { background-position: -117px 0; } 89 | &-open { 90 | background-position: -181px 0; 91 | width: 85px; 92 | } 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/pouchdb/logo.less: -------------------------------------------------------------------------------- 1 | .logo { 2 | float: left; 3 | width: @logo-width; 4 | .logo-img, 5 | .logo-type { 6 | float: left; 7 | } 8 | .logo-img { 9 | opacity: .9; 10 | height: @logo-img-height; 11 | margin-top: -@logo-img-height*.2; 12 | width: @logo-img-height*@logo-img-ratio; 13 | background-image: url(@logo-img); 14 | background-size: 100%; 15 | } 16 | .logo-type { 17 | margin-left: 8px; 18 | font-size: 3em; 19 | line-height: 1.1; 20 | text-transform: lowercase; 21 | letter-spacing: -1px; 22 | color: @text-color; 23 | } 24 | &:hover .logo-img { opacity: 1; } 25 | .clearfix(); 26 | } 27 | /** 28 | * When we hit the breakpoint 29 | * Center the logo in the middle 30 | **/ 31 | @media (max-width: @navs-breakpoint-justified) { 32 | .logo { 33 | float: none; 34 | display: block; 35 | margin: auto; 36 | } 37 | } 38 | @media (max-width: @logo-breakpoint) { 39 | .logo { 40 | width: auto; 41 | .logo-img { 42 | display: block; 43 | float: none; 44 | margin: auto; 45 | } 46 | .logo-type { display: none; } 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/pouchdb/mixins.less: -------------------------------------------------------------------------------- 1 | @import "@{bootstrap}/mixins.less"; 2 | 3 | // Intrinsic Ratio Helper 4 | // https://github.com/nickcolley/intrinsic-ratio-less 5 | 6 | 7 | // Intrinsic ratio 8 | .ir(@ratio: 16/9, @width: 100%, @margin: auto) { 9 | position: relative; 10 | margin: @margin; 11 | width: unit(@width, ~'%'); 12 | height: 0; 13 | padding-bottom: unit(@width / @ratio, ~'%'); 14 | > iframe { 15 | position: absolute; 16 | width: 100%; 17 | height: 100%; 18 | border: 0; 19 | } 20 | } 21 | 22 | .iframe-responsive { .ir(); } 23 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/pouchdb/navs.less: -------------------------------------------------------------------------------- 1 | @import "@{bootstrap}/navs.less"; 2 | 3 | .nav-header { 4 | float: right; 5 | > li { min-width: 100px; } 6 | } 7 | .nav-silent { 8 | > li > a { 9 | padding: .1em 0; 10 | color: @text-color; 11 | } 12 | } 13 | 14 | /** 15 | * Sidebar navigation used in learn.html 16 | **/ 17 | .nav-sidebar { 18 | > li.active > a, 19 | > li > a:hover { 20 | color: darken(@brand-primary, 10%); 21 | border-right: 2px solid lighten(@brand-primary, 10%); 22 | padding-right: 10px; 23 | } 24 | } 25 | 26 | @media (max-width: @navs-breakpoint-justified) { 27 | .nav-header { 28 | width: 100%; 29 | > li { 30 | float: none; 31 | display: table-cell; 32 | width: 1%; 33 | min-width: initial; 34 | > a { text-align: center; } 35 | } 36 | } 37 | } 38 | 39 | @media (max-width: @navs-breakpoint-horizontal) { 40 | .nav-header > li:last-child { 41 | float: left; 42 | width: 100%; 43 | } 44 | } 45 | 46 | @media (max-width: @logo-breakpoint) { 47 | .nav-header > li { 48 | float: left; 49 | width: 100%; 50 | } 51 | } 52 | 53 | @media (max-width: @screen-sm-min) { 54 | .nav.nav-sidebar { margin-bottom: 25px; } 55 | .nav-head, 56 | .nav.nav-sidebar { text-align: center; } 57 | } 58 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/pouchdb/post.less: -------------------------------------------------------------------------------- 1 | .post { 2 | margin-top: 10px; 3 | margin-bottom: 40px; 4 | &:last-of-type { margin-bottom: 10px; } 5 | } -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/pouchdb/pouchdb.less: -------------------------------------------------------------------------------- 1 | @bootstrap: "../bootstrap"; 2 | 3 | @import "variables.less"; 4 | 5 | // Mixins 6 | @import "mixins.less"; 7 | 8 | // Reset 9 | @import "@{bootstrap}/normalize.less"; 10 | @import "@{bootstrap}/print.less"; 11 | @import "@{bootstrap}/type.less"; 12 | 13 | @import "@{bootstrap}/normalize.less"; 14 | @import "@{bootstrap}/print.less"; 15 | @import "alerts.less"; 16 | 17 | // Core CSS 18 | @import "scaffolding.less"; 19 | @import "code.less"; 20 | @import "@{bootstrap}/grid.less"; 21 | @import "@{bootstrap}/tables.less"; 22 | 23 | 24 | // Components 25 | @import "@{bootstrap}/media.less"; 26 | @import "@{bootstrap}/pagination.less"; 27 | @import "@{bootstrap}/pager.less"; 28 | 29 | // Utility classes 30 | @import "@{bootstrap}/responsive-utilities.less"; 31 | 32 | // PouchDB Overrides 33 | @import "navs.less"; 34 | @import "buttons.less"; 35 | @import "utilities.less"; 36 | 37 | // PouchDB Specific 38 | @import "highlight.less"; 39 | @import "header.less"; 40 | @import "logo.less"; 41 | @import "anchors.less"; 42 | @import "post.less"; 43 | @import "ribbon.less"; 44 | @import "icons.less"; 45 | @import "block.less"; 46 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/pouchdb/ribbon.less: -------------------------------------------------------------------------------- 1 | .ribbon { 2 | z-index: 1; 3 | position: absolute; 4 | top: 0; right: 0; 5 | padding: .1em 3em; 6 | border: 1px solid rgba(0,0,0,.1); 7 | background-color: @gray-lighter; 8 | color: @text-color; 9 | font-weight: bold; 10 | -webkit-transform: translateX(75%) rotate(45deg) translateX(-30%); 11 | transform: translateX(75%) rotate(45deg) translateX(-30%); 12 | -webkit-transform-origin: top left; 13 | transform-origin: top left; 14 | } -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/pouchdb/scaffolding.less: -------------------------------------------------------------------------------- 1 | @import "@{bootstrap}/scaffolding.less"; 2 | 3 | blockquote { 4 | font-size: 1.1em; 5 | border-left-color: #ddf3e7; 6 | cite { font-size: 1.2em; } 7 | } 8 | 9 | // Temporary fix for Jekyll's P tags all over the place. :/ 10 | p:empty { display: none; } 11 | 12 | .intro, 13 | .infoblocks, 14 | .icons, 15 | .footer { 16 | padding: 20px 0 30px; 17 | } 18 | .page-head { padding: 10px 0 20px; } 19 | 20 | article { padding: 20px 0 75px; } 21 | 22 | .page-head, 23 | .intro, 24 | .blog, 25 | .footer { 26 | background-color: @gray-lighter; 27 | } 28 | 29 | .intro .highlight { margin-top: 2em; } 30 | .icons { border-top: 20px solid @gray-lighter; } 31 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/pouchdb/utilities.less: -------------------------------------------------------------------------------- 1 | @import "@{bootstrap}/utilities.less"; 2 | 3 | .affix { 4 | padding: 1em 0; 5 | position: static; 6 | } 7 | 8 | @media (min-width: @affix-min-width) and (min-height: @affix-min-height) { 9 | 10 | .affix { position: fixed; } 11 | 12 | .affix, 13 | .affix-top { 14 | top: 0; 15 | } 16 | 17 | .affix-top, 18 | .affix-bottom { 19 | position: absolute; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /www/lib/pouchdb/docs/static/less/pouchdb/variables.less: -------------------------------------------------------------------------------- 1 | @import "@{bootstrap}/variables.less"; 2 | 3 | // Base img dir 4 | @img_dir: "../img"; 5 | 6 | // Color 7 | @brand-accent: #fa3649; 8 | @brand-primary: #6ccb99; 9 | @twitter: cornflowerblue; 10 | @github: darkslategray; 11 | 12 | // Social colors 13 | @btn-twitter-color: lighten(@twitter, 25%); 14 | @btn-twitter-bg: @twitter; 15 | @btn-twitter-border: darken(@twitter, 10%); 16 | @btn-github-color: lighten(@github, 50%); 17 | @btn-github-bg: @github; 18 | @btn-github-border: darken(@github, 10%); 19 | 20 | // Scaffolding 21 | @body-bg: #f6f6f6; 22 | @text-color: @gray; 23 | 24 | // Container sizes 25 | @container-large-desktop: ((950px + @grid-gutter-width)); 26 | 27 | // Code 28 | @code-color: darken(@brand-primary, 30%); 29 | @code-bg: lighten(@brand-primary, 30%); 30 | 31 | // Type 32 | @font-family-sans-serif: "Open Sans", Helvetica, Arial, sans-serif; 33 | 34 | @link-color: @brand-accent; 35 | @nav-link-hover-bg: none; 36 | 37 | @headings-font-family: "Lato", Helvetica, Arial, sans-serif; 38 | @header-color: #ffffff; 39 | @header-border-color: #c8c8c8; 40 | 41 | // Logo 42 | @logo-img: '@{img_dir}/mark.svg'; 43 | @logo-fallback-img: '@{img_dir}/mark.png'; 44 | @logo-img-ratio: .78; 45 | @logo-img-height: 70px; 46 | @logo-width: 250px; 47 | // When it gets silly small display only the mark. 48 | @logo-breakpoint: 330px; 49 | 50 | // Navs 51 | 52 | // Switch nav into justified view 53 | @navs-breakpoint-justified: @screen-sm-max; 54 | // Switch nav into horizontal view 55 | @navs-breakpoint-horizontal: 510px; 56 | 57 | // Minimum width and height for fixed sidebars 58 | @affix-min-width: @screen-sm-min; 59 | @affix-min-height: 475px; 60 | 61 | // Alerts 62 | @alert-before-size: 35px; 63 | @alert-before-info-text: 'i'; 64 | @alert-before-success-text: '\2713'; 65 | @alert-before-warning-text: '!'; 66 | @alert-before-danger-text: 'x'; 67 | 68 | // Pre 69 | @pre-padding: 15px; 70 | -------------------------------------------------------------------------------- /www/lib/pouchdb/lib/adapters/idb/idb-blob-support.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var utils = require('../../utils'); 4 | var idbConstants = require('./idb-constants'); 5 | var DETECT_BLOB_SUPPORT_STORE = idbConstants.DETECT_BLOB_SUPPORT_STORE; 6 | 7 | // 8 | // Detect blob support. Chrome didn't support it until version 38. 9 | // In version 37 they had a broken version where PNGs (and possibly 10 | // other binary types) aren't stored correctly, because when you fetch 11 | // them, the content type is always null. 12 | // 13 | // Furthermore, they have some outstanding bugs where blobs occasionally 14 | // are read by FileReader as null, or by ajax as 404s. 15 | // 16 | // Sadly we use the 404 bug to detect the FileReader bug, so if they 17 | // get fixed independently and released in different versions of Chrome, 18 | // then the bug could come back. So it's worthwhile to watch these issues: 19 | // 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916 20 | // FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836 21 | // 22 | function checkBlobSupport(txn, idb) { 23 | return new utils.Promise(function (resolve, reject) { 24 | var blob = utils.createBlob([''], {type: 'image/png'}); 25 | txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key'); 26 | txn.oncomplete = function () { 27 | // have to do it in a separate transaction, else the correct 28 | // content type is always returned 29 | var blobTxn = idb.transaction([DETECT_BLOB_SUPPORT_STORE], 30 | 'readwrite'); 31 | var getBlobReq = blobTxn.objectStore( 32 | DETECT_BLOB_SUPPORT_STORE).get('key'); 33 | getBlobReq.onerror = reject; 34 | getBlobReq.onsuccess = function (e) { 35 | 36 | var storedBlob = e.target.result; 37 | var url = URL.createObjectURL(storedBlob); 38 | 39 | utils.ajax({ 40 | url: url, 41 | cache: true, 42 | binary: true 43 | }, function (err, res) { 44 | if (err && err.status === 405) { 45 | // firefox won't let us do that. but firefox doesn't 46 | // have the blob type bug that Chrome does, so that's ok 47 | resolve(true); 48 | } else { 49 | resolve(!!(res && res.type === 'image/png')); 50 | if (err && err.status === 404) { 51 | utils.explain404('PouchDB is just detecting blob URL support.'); 52 | } 53 | } 54 | URL.revokeObjectURL(url); 55 | }); 56 | }; 57 | }; 58 | }).catch(function () { 59 | return false; // error, so assume unsupported 60 | }); 61 | } 62 | 63 | module.exports = checkBlobSupport; -------------------------------------------------------------------------------- /www/lib/pouchdb/lib/adapters/idb/idb-constants.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | // IndexedDB requires a versioned database structure, so we use the 4 | // version here to manage migrations. 5 | exports.ADAPTER_VERSION = 5; 6 | 7 | // The object stores created for each database 8 | // DOC_STORE stores the document meta data, its revision history and state 9 | // Keyed by document id 10 | exports. DOC_STORE = 'document-store'; 11 | // BY_SEQ_STORE stores a particular version of a document, keyed by its 12 | // sequence id 13 | exports.BY_SEQ_STORE = 'by-sequence'; 14 | // Where we store attachments 15 | exports.ATTACH_STORE = 'attach-store'; 16 | // Where we store many-to-many relations 17 | // between attachment digests and seqs 18 | exports.ATTACH_AND_SEQ_STORE = 'attach-seq-store'; 19 | 20 | // Where we store database-wide meta data in a single record 21 | // keyed by id: META_STORE 22 | exports.META_STORE = 'meta-store'; 23 | // Where we store local documents 24 | exports.LOCAL_STORE = 'local-store'; 25 | // Where we detect blob support 26 | exports.DETECT_BLOB_SUPPORT_STORE = 'detect-blob-support'; -------------------------------------------------------------------------------- /www/lib/pouchdb/lib/adapters/leveldb/leveldb-transaction.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | // similar to an idb or websql transaction object 4 | // designed to be passed around. basically just caches 5 | // things in-memory and then does a big batch() operation 6 | // when you're done 7 | 8 | var utils = require('../../utils'); 9 | 10 | function getCacheFor(transaction, store) { 11 | var prefix = store.prefix(); 12 | var cache = transaction._cache; 13 | var subCache = cache.get(prefix); 14 | if (!subCache) { 15 | subCache = new utils.Map(); 16 | cache.set(prefix, subCache); 17 | } 18 | return subCache; 19 | } 20 | 21 | function LevelTransaction() { 22 | this._batch = []; 23 | this._cache = new utils.Map(); 24 | } 25 | 26 | LevelTransaction.prototype.get = function (store, key, callback) { 27 | var cache = getCacheFor(this, store); 28 | var exists = cache.get(key); 29 | if (exists) { 30 | return process.nextTick(function () { 31 | callback(null, exists); 32 | }); 33 | } else if (exists === null) { // deleted marker 34 | return process.nextTick(function () { 35 | callback({name: 'NotFoundError'}); 36 | }); 37 | } 38 | store.get(key, function (err, res) { 39 | if (err) { 40 | if (err.name === 'NotFoundError') { 41 | cache.set(key, null); 42 | } 43 | return callback(err); 44 | } 45 | cache.set(key, res); 46 | callback(null, res); 47 | }); 48 | }; 49 | 50 | LevelTransaction.prototype.batch = function (batch) { 51 | for (var i = 0, len = batch.length; i < len; i++) { 52 | var operation = batch[i]; 53 | 54 | var cache = getCacheFor(this, operation.prefix); 55 | 56 | if (operation.type === 'put') { 57 | cache.set(operation.key, operation.value); 58 | } else { 59 | cache.set(operation.key, null); 60 | } 61 | } 62 | this._batch = this._batch.concat(batch); 63 | }; 64 | 65 | LevelTransaction.prototype.execute = function (db, callback) { 66 | 67 | var keys = new utils.Set(); 68 | var uniqBatches = []; 69 | 70 | // remove duplicates; last one wins 71 | for (var i = this._batch.length - 1; i >= 0; i--) { 72 | var operation = this._batch[i]; 73 | var lookupKey = operation.prefix.prefix() + '\xff' + operation.key; 74 | if (keys.has(lookupKey)) { 75 | continue; 76 | } 77 | keys.add(lookupKey); 78 | uniqBatches.push(operation); 79 | } 80 | 81 | db.batch(uniqBatches, callback); 82 | }; 83 | 84 | module.exports = LevelTransaction; -------------------------------------------------------------------------------- /www/lib/pouchdb/lib/adapters/preferredAdapters-browser.js: -------------------------------------------------------------------------------- 1 | module.exports = ['idb', 'websql']; -------------------------------------------------------------------------------- /www/lib/pouchdb/lib/adapters/preferredAdapters.js: -------------------------------------------------------------------------------- 1 | module.exports = ['leveldb']; -------------------------------------------------------------------------------- /www/lib/pouchdb/lib/adapters/websql/websql-constants.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | function quote(str) { 4 | return "'" + str + "'"; 5 | } 6 | 7 | exports.ADAPTER_VERSION = 7; // used to manage migrations 8 | 9 | // The object stores created for each database 10 | // DOC_STORE stores the document meta data, its revision history and state 11 | exports.DOC_STORE = quote('document-store'); 12 | // BY_SEQ_STORE stores a particular version of a document, keyed by its 13 | // sequence id 14 | exports.BY_SEQ_STORE = quote('by-sequence'); 15 | // Where we store attachments 16 | exports.ATTACH_STORE = quote('attach-store'); 17 | exports.LOCAL_STORE = quote('local-store'); 18 | exports.META_STORE = quote('metadata-store'); 19 | // where we store many-to-many relations between attachment 20 | // digests and seqs 21 | exports.ATTACH_AND_SEQ_STORE = quote('attach-seq-store'); 22 | 23 | -------------------------------------------------------------------------------- /www/lib/pouchdb/lib/checkpointer.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var utils = require('./utils'); 4 | var pouchCollate = require('pouchdb-collate'); 5 | var collate = pouchCollate.collate; 6 | 7 | function updateCheckpoint(db, id, checkpoint, returnValue) { 8 | return db.get(id).catch(function (err) { 9 | if (err.status === 404) { 10 | if (db.type() === 'http') { 11 | utils.explain404( 12 | 'PouchDB is just checking if a remote checkpoint exists.'); 13 | } 14 | return {_id: id}; 15 | } 16 | throw err; 17 | }).then(function (doc) { 18 | if (returnValue.cancelled) { 19 | return; 20 | } 21 | doc.last_seq = checkpoint; 22 | return db.put(doc); 23 | }); 24 | } 25 | 26 | function Checkpointer(src, target, id, returnValue) { 27 | this.src = src; 28 | this.target = target; 29 | this.id = id; 30 | this.returnValue = returnValue; 31 | } 32 | 33 | Checkpointer.prototype.writeCheckpoint = function (checkpoint) { 34 | var self = this; 35 | return this.updateTarget(checkpoint).then(function () { 36 | return self.updateSource(checkpoint); 37 | }); 38 | }; 39 | 40 | Checkpointer.prototype.updateTarget = function (checkpoint) { 41 | return updateCheckpoint(this.target, this.id, checkpoint, this.returnValue); 42 | }; 43 | 44 | Checkpointer.prototype.updateSource = function (checkpoint) { 45 | var self = this; 46 | if (this.readOnlySource) { 47 | return utils.Promise.resolve(true); 48 | } 49 | return updateCheckpoint(this.src, this.id, checkpoint, this.returnValue) 50 | .catch(function (err) { 51 | var isForbidden = typeof err.status === 'number' && 52 | Math.floor(err.status / 100) === 4; 53 | if (isForbidden) { 54 | self.readOnlySource = true; 55 | return true; 56 | } 57 | throw err; 58 | }); 59 | }; 60 | 61 | Checkpointer.prototype.getCheckpoint = function () { 62 | var self = this; 63 | return self.target.get(self.id).then(function (targetDoc) { 64 | return self.src.get(self.id).then(function (sourceDoc) { 65 | if (collate(targetDoc.last_seq, sourceDoc.last_seq) === 0) { 66 | return sourceDoc.last_seq; 67 | } 68 | return 0; 69 | }, function (err) { 70 | if (err.status === 404 && targetDoc.last_seq) { 71 | return self.src.put({ 72 | _id: self.id, 73 | last_seq: 0 74 | }).then(function () { 75 | return 0; 76 | }, function (err) { 77 | if (err.status === 401) { 78 | self.readOnlySource = true; 79 | return targetDoc.last_seq; 80 | } 81 | return 0; 82 | }); 83 | } 84 | throw err; 85 | }); 86 | }).catch(function (err) { 87 | if (err.status !== 404) { 88 | throw err; 89 | } 90 | return 0; 91 | }); 92 | }; 93 | 94 | module.exports = Checkpointer; 95 | -------------------------------------------------------------------------------- /www/lib/pouchdb/lib/deps/blob.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | //Abstracts constructing a Blob object, so it also works in older 4 | //browsers that don't support the native Blob constructor. (i.e. 5 | //old QtWebKit versions, at least). 6 | function createBlob(parts, properties) { 7 | parts = parts || []; 8 | properties = properties || {}; 9 | try { 10 | return new Blob(parts, properties); 11 | } catch (e) { 12 | if (e.name !== "TypeError") { 13 | throw e; 14 | } 15 | var BlobBuilder = global.BlobBuilder || 16 | global.MSBlobBuilder || 17 | global.MozBlobBuilder || 18 | global.WebKitBlobBuilder; 19 | var builder = new BlobBuilder(); 20 | for (var i = 0; i < parts.length; i += 1) { 21 | builder.append(parts[i]); 22 | } 23 | return builder.getBlob(properties.type); 24 | } 25 | } 26 | 27 | module.exports = createBlob; 28 | 29 | -------------------------------------------------------------------------------- /www/lib/pouchdb/lib/deps/buffer-browser.js: -------------------------------------------------------------------------------- 1 | // hey guess what, we don't need this in the browser 2 | module.exports = {}; -------------------------------------------------------------------------------- /www/lib/pouchdb/lib/deps/buffer.js: -------------------------------------------------------------------------------- 1 | //this soley exists so we can exclude it in browserify 2 | module.exports = Buffer; -------------------------------------------------------------------------------- /www/lib/pouchdb/lib/deps/parse-hex.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | // 4 | // Parsing hex strings. Yeah. 5 | // 6 | // So basically we need this because of a bug in WebSQL: 7 | // https://code.google.com/p/chromium/issues/detail?id=422690 8 | // https://bugs.webkit.org/show_bug.cgi?id=137637 9 | // 10 | // UTF-8 and UTF-16 are provided as separate functions 11 | // for meager performance improvements 12 | // 13 | 14 | function decodeUtf8(str) { 15 | return decodeURIComponent(window.escape(str)); 16 | } 17 | 18 | function hexToInt(charCode) { 19 | // '0'-'9' is 48-57 20 | // 'A'-'F' is 65-70 21 | // SQLite will only give us uppercase hex 22 | return charCode < 65 ? (charCode - 48) : (charCode - 55); 23 | } 24 | 25 | 26 | // Example: 27 | // pragma encoding=utf8; 28 | // select hex('A'); 29 | // returns '41' 30 | function parseHexUtf8(str, start, end) { 31 | var result = ''; 32 | while (start < end) { 33 | result += String.fromCharCode( 34 | (hexToInt(str.charCodeAt(start++)) << 4) | 35 | hexToInt(str.charCodeAt(start++))); 36 | } 37 | return result; 38 | } 39 | 40 | // Example: 41 | // pragma encoding=utf16; 42 | // select hex('A'); 43 | // returns '4100' 44 | // notice that the 00 comes after the 41 (i.e. it's swizzled) 45 | function parseHexUtf16(str, start, end) { 46 | var result = ''; 47 | while (start < end) { 48 | // UTF-16, so swizzle the bytes 49 | result += String.fromCharCode( 50 | (hexToInt(str.charCodeAt(start + 2)) << 12) | 51 | (hexToInt(str.charCodeAt(start + 3)) << 8) | 52 | (hexToInt(str.charCodeAt(start)) << 4) | 53 | hexToInt(str.charCodeAt(start + 1))); 54 | start += 4; 55 | } 56 | return result; 57 | } 58 | 59 | function parseHexString(str, encoding) { 60 | if (encoding === 'UTF-8') { 61 | return decodeUtf8(parseHexUtf8(str, 0, str.length)); 62 | } else { 63 | return parseHexUtf16(str, 0, str.length); 64 | } 65 | } 66 | 67 | module.exports = parseHexString; -------------------------------------------------------------------------------- /www/lib/pouchdb/lib/deps/parse-uri.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | // originally parseUri 1.2.2, now patched by us 4 | // (c) Steven Levithan 5 | // MIT License 6 | var options = { 7 | strictMode: false, 8 | key: ["source", "protocol", "authority", "userInfo", "user", "password", 9 | "host", "port", "relative", "path", "directory", "file", "query", 10 | "anchor"], 11 | q: { 12 | name: "queryKey", 13 | parser: /(?:^|&)([^&=]*)=?([^&]*)/g 14 | }, 15 | parser: { 16 | /* jshint maxlen: false */ 17 | strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/, 18 | loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ 19 | } 20 | }; 21 | function parseUri(str) { 22 | var o = options; 23 | var m = o.parser[o.strictMode ? "strict" : "loose"].exec(str); 24 | var uri = {}; 25 | var i = 14; 26 | 27 | while (i--) { 28 | var key = o.key[i]; 29 | var value = m[i] || ""; 30 | var encoded = ['user', 'password'].indexOf(key) !== -1; 31 | uri[key] = encoded ? decodeURIComponent(value) : value; 32 | } 33 | 34 | uri[o.q.name] = {}; 35 | uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) { 36 | if ($1) { 37 | uri[o.q.name][$1] = $2; 38 | } 39 | }); 40 | 41 | return uri; 42 | } 43 | 44 | 45 | module.exports = parseUri; -------------------------------------------------------------------------------- /www/lib/pouchdb/lib/deps/upsert.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var upsert = require('pouchdb-upsert').upsert; 4 | 5 | module.exports = function (db, doc, diffFun, cb) { 6 | return upsert.call(db, doc, diffFun, cb); 7 | }; 8 | -------------------------------------------------------------------------------- /www/lib/pouchdb/lib/deps/uuid.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // BEGIN Math.uuid.js 4 | 5 | /*! 6 | Math.uuid.js (v1.4) 7 | http://www.broofa.com 8 | mailto:robert@broofa.com 9 | 10 | Copyright (c) 2010 Robert Kieffer 11 | Dual licensed under the MIT and GPL licenses. 12 | */ 13 | 14 | /* 15 | * Generate a random uuid. 16 | * 17 | * USAGE: Math.uuid(length, radix) 18 | * length - the desired number of characters 19 | * radix - the number of allowable values for each character. 20 | * 21 | * EXAMPLES: 22 | * // No arguments - returns RFC4122, version 4 ID 23 | * >>> Math.uuid() 24 | * "92329D39-6F5C-4520-ABFC-AAB64544E172" 25 | * 26 | * // One argument - returns ID of the specified length 27 | * >>> Math.uuid(15) // 15 character ID (default base=62) 28 | * "VcydxgltxrVZSTV" 29 | * 30 | * // Two arguments - returns ID of the specified length, and radix. 31 | * // (Radix must be <= 62) 32 | * >>> Math.uuid(8, 2) // 8 character ID (base=2) 33 | * "01001010" 34 | * >>> Math.uuid(8, 10) // 8 character ID (base=10) 35 | * "47473046" 36 | * >>> Math.uuid(8, 16) // 8 character ID (base=16) 37 | * "098F4D35" 38 | */ 39 | var chars = ( 40 | '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 41 | 'abcdefghijklmnopqrstuvwxyz' 42 | ).split(''); 43 | function getValue(radix) { 44 | return 0 | Math.random() * radix; 45 | } 46 | function uuid(len, radix) { 47 | radix = radix || chars.length; 48 | var out = ''; 49 | var i = -1; 50 | 51 | if (len) { 52 | // Compact form 53 | while (++i < len) { 54 | out += chars[getValue(radix)]; 55 | } 56 | return out; 57 | } 58 | // rfc4122, version 4 form 59 | // Fill in random data. At i==19 set the high bits of clock sequence as 60 | // per rfc4122, sec. 4.1.5 61 | while (++i < 36) { 62 | switch (i) { 63 | case 8: 64 | case 13: 65 | case 18: 66 | case 23: 67 | out += '-'; 68 | break; 69 | case 19: 70 | out += chars[(getValue(16) & 0x3) | 0x8]; 71 | break; 72 | default: 73 | out += chars[getValue(16)]; 74 | } 75 | } 76 | 77 | return out; 78 | } 79 | 80 | 81 | 82 | module.exports = uuid; 83 | 84 | -------------------------------------------------------------------------------- /www/lib/pouchdb/lib/evalFilter.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = evalFilter; 4 | function evalFilter(input) { 5 | /*jshint evil: true */ 6 | return eval([ 7 | '(function () { return ', 8 | input, 9 | ' })()' 10 | ].join('')); 11 | } -------------------------------------------------------------------------------- /www/lib/pouchdb/lib/evalView.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = evalView; 4 | function evalView(input) { 5 | /*jshint evil: true */ 6 | return eval([ 7 | '(function () {', 8 | ' return function (doc) {', 9 | ' var emitted = false;', 10 | ' var emit = function (a, b) {', 11 | ' emitted = true;', 12 | ' };', 13 | ' var view = ' + input + ';', 14 | ' view(doc);', 15 | ' if (emitted) {', 16 | ' return true;', 17 | ' }', 18 | ' }', 19 | '})()' 20 | ].join('\n')); 21 | } -------------------------------------------------------------------------------- /www/lib/pouchdb/lib/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var PouchDB = require('./setup'); 4 | 5 | module.exports = PouchDB; 6 | 7 | PouchDB.ajax = require('./deps/ajax'); 8 | PouchDB.utils = require('./utils'); 9 | PouchDB.Errors = require('./deps/errors'); 10 | PouchDB.replicate = require('./replicate').replicate; 11 | PouchDB.sync = require('./sync'); 12 | PouchDB.version = require('./version'); 13 | var httpAdapter = require('./adapters/http/http'); 14 | PouchDB.adapter('http', httpAdapter); 15 | PouchDB.adapter('https', httpAdapter); 16 | 17 | PouchDB.adapter('idb', require('./adapters/idb/idb')); 18 | PouchDB.adapter('websql', require('./adapters/websql/websql')); 19 | PouchDB.plugin(require('pouchdb-mapreduce')); 20 | 21 | if (!process.browser) { 22 | var ldbAdapter = require('./adapters/leveldb/leveldb'); 23 | PouchDB.adapter('ldb', ldbAdapter); 24 | PouchDB.adapter('leveldb', ldbAdapter); 25 | } 26 | -------------------------------------------------------------------------------- /www/lib/pouchdb/lib/taskqueue.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = TaskQueue; 4 | 5 | function TaskQueue() { 6 | this.isReady = false; 7 | this.failed = false; 8 | this.queue = []; 9 | } 10 | 11 | TaskQueue.prototype.execute = function () { 12 | var d, func; 13 | if (this.failed) { 14 | while ((d = this.queue.shift())) { 15 | if (typeof d === 'function') { 16 | d(this.failed); 17 | continue; 18 | } 19 | func = d.parameters[d.parameters.length - 1]; 20 | if (typeof func === 'function') { 21 | func(this.failed); 22 | } else if (d.name === 'changes' && typeof func.complete === 'function') { 23 | func.complete(this.failed); 24 | } 25 | } 26 | } else if (this.isReady) { 27 | while ((d = this.queue.shift())) { 28 | 29 | if (typeof d === 'function') { 30 | d(); 31 | } else { 32 | d.task = this.db[d.name].apply(this.db, d.parameters); 33 | } 34 | } 35 | } 36 | }; 37 | 38 | TaskQueue.prototype.fail = function (err) { 39 | this.failed = err; 40 | this.execute(); 41 | }; 42 | 43 | TaskQueue.prototype.ready = function (db) { 44 | if (this.failed) { 45 | return false; 46 | } else if (arguments.length === 0) { 47 | return this.isReady; 48 | } 49 | this.isReady = db ? true: false; 50 | this.db = db; 51 | this.execute(); 52 | }; 53 | 54 | TaskQueue.prototype.addTask = function (name, parameters) { 55 | if (typeof name === 'function') { 56 | this.queue.push(name); 57 | if (this.failed) { 58 | this.execute(); 59 | } 60 | } else { 61 | var task = { name: name, parameters: parameters }; 62 | this.queue.push(task); 63 | if (this.failed) { 64 | this.execute(); 65 | } 66 | return task; 67 | } 68 | }; 69 | -------------------------------------------------------------------------------- /www/lib/pouchdb/lib/version-browser.js: -------------------------------------------------------------------------------- 1 | module.exports = "3.3.1"; 2 | -------------------------------------------------------------------------------- /www/lib/pouchdb/lib/version.js: -------------------------------------------------------------------------------- 1 | module.exports = require('../package.json').version; -------------------------------------------------------------------------------- /www/lib/pouchdb/scripts/baldrick-test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -x 2 | 3 | # Run PouchDB test suite, expect a global couchdb command to be installed 4 | # 5 | # Run as: 6 | # 7 | # ./scripts/baldrick-test.sh 8 | 9 | # tmp directory to store CouchDB data files 10 | TMP=./tmp 11 | COUCH_URI_FILE=$TMP/couch.uri 12 | 13 | # Install PouchDB dependancies 14 | npm install 15 | 16 | # Provision a CouchDB instance just for this test 17 | ./scripts/start_standalone_couch.sh $TMP > /dev/null 2>&1 & 18 | COUCH_PID=$! 19 | 20 | # Wait for CouchDB to start by polling for the uri file 21 | # Not nasty at all :) 22 | while [ ! -f $COUCH_URI_FILE ] 23 | do 24 | sleep 2 25 | done 26 | COUCH_HOST=$(cat $COUCH_URI_FILE) 27 | 28 | # Run tests 29 | grunt test --couch-host=$COUCH_HOST 30 | EXIT_STATUS=$? 31 | 32 | # Cleanup 33 | kill $COUCH_PID 34 | 35 | # Make sure we exit with the right status 36 | exit $EXIT_STATUS -------------------------------------------------------------------------------- /www/lib/pouchdb/scripts/bundle-browserify-test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo '' > test.html 4 | echo "" >> test.html 5 | echo "" >> test.html -------------------------------------------------------------------------------- /www/lib/pouchdb/scripts/jenkins-deploy.sh: -------------------------------------------------------------------------------- 1 | ROOT=$(pwd) 2 | 3 | # Build the docs 4 | cd $ROOT/docs 5 | jekyll 6 | 7 | # Publish docs 8 | cp -R $ROOT/docs/_site/* /home/daleharvey/www/pouchdb.com 9 | 10 | # Build 11 | cd $ROOT 12 | npm install 13 | 14 | grunt 15 | grunt spatial 16 | grunt gql 17 | 18 | cp $ROOT/dist/* /home/daleharvey/www/download.pouchdb.com -------------------------------------------------------------------------------- /www/lib/pouchdb/scripts/start_standalone_couch.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | # Start a standalone CouchDB, this is a wrapper around the $ couchdb 4 | # command that will create a standalone instance of CouchDB allowing 5 | # you to easily run serveral servers in parallel, each instance starts 6 | # on an ephemeral port and has a dedicated directory for its data and logs 7 | # use the couch.uri file to locate the host 8 | # 9 | # Run as: 10 | # 11 | # $ ./start_standalone_couch.sh ~/data/instanceId 12 | 13 | COUCH_DIR=$1 14 | 15 | # Make all the directories 16 | mkdir -p $COUCH_DIR/data/views 17 | 18 | # Create a standalone configuration based on the directory 19 | # we are passed in, CouchDB will start on a random port and couch.uri 20 | # will tell us where that is, data is stored within the directory 21 | echo "[httpd] 22 | bind_address = 127.0.0.1 23 | port = 0 24 | 25 | [log] 26 | level = debug 27 | file = $COUCH_DIR/couch.log 28 | 29 | [couchdb] 30 | database_dir = $COUCH_DIR/data 31 | view_index_dir = $COUCH_DIR/data/views 32 | uri_file = $COUCH_DIR/couch.uri" > $COUCH_DIR/couch.ini 33 | 34 | couchdb -a $COUCH_DIR/couch.ini -------------------------------------------------------------------------------- /www/lib/underscore/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "underscore", 3 | "version": "1.8.2", 4 | "main": "underscore.js", 5 | "keywords": [ 6 | "util", 7 | "functional", 8 | "server", 9 | "client", 10 | "browser" 11 | ], 12 | "ignore": [ 13 | "docs", 14 | "test", 15 | "*.yml", 16 | "CNAME", 17 | "index.html", 18 | "favicon.ico", 19 | "CONTRIBUTING.md" 20 | ], 21 | "homepage": "https://github.com/jashkenas/underscore", 22 | "_release": "1.8.2", 23 | "_resolution": { 24 | "type": "version", 25 | "tag": "1.8.2", 26 | "commit": "19db749b190a7cb5a8b7ab1aab42c0e9dc517250" 27 | }, 28 | "_source": "git://github.com/jashkenas/underscore.git", 29 | "_target": "~1.8.2", 30 | "_originalSource": "underscore", 31 | "_direct": true 32 | } -------------------------------------------------------------------------------- /www/lib/underscore/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "node": true, 5 | "amd": true 6 | }, 7 | 8 | "rules": { 9 | "brace-style": [1, "1tbs"], 10 | "curly": [0, "multi"], 11 | "eqeqeq": [1, "smart"], 12 | "max-depth": [1, 4], 13 | "max-params": [1, 5], 14 | "new-cap": 2, 15 | "new-parens": 0, 16 | "no-constant-condition": 0, 17 | "no-div-regex": 1, 18 | "no-else-return": 1, 19 | "no-extra-parens": 1, 20 | "no-floating-decimal": 2, 21 | "no-inner-declarations": 2, 22 | "no-lonely-if": 1, 23 | "no-nested-ternary": 2, 24 | "no-new-object": 0, 25 | "no-new-func": 0, 26 | "no-underscore-dangle": 0, 27 | "quotes": [2, "single", "avoid-escape"], 28 | "radix": 2, 29 | "space-after-keywords": [2, "always"], 30 | "space-in-brackets": [2, "never"], 31 | "space-unary-word-ops": 2, 32 | "strict": 0, 33 | "wrap-iife": 2 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /www/lib/underscore/.gitignore: -------------------------------------------------------------------------------- 1 | raw 2 | node_modules 3 | *.log 4 | *.idea 5 | *.swp 6 | -------------------------------------------------------------------------------- /www/lib/underscore/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative 2 | Reporters & Editors 3 | 4 | Permission is hereby granted, free of charge, to any person 5 | obtaining a copy of this software and associated documentation 6 | files (the "Software"), to deal in the Software without 7 | restriction, including without limitation the rights to use, 8 | copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the 10 | Software is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 18 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 20 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 | OTHER DEALINGS IN THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /www/lib/underscore/README.md: -------------------------------------------------------------------------------- 1 | __ 2 | /\ \ __ 3 | __ __ ___ \_\ \ __ _ __ ____ ___ ___ _ __ __ /\_\ ____ 4 | /\ \/\ \ /' _ `\ /'_ \ /'__`\/\ __\/ ,__\ / ___\ / __`\/\ __\/'__`\ \/\ \ /',__\ 5 | \ \ \_\ \/\ \/\ \/\ \ \ \/\ __/\ \ \//\__, `\/\ \__//\ \ \ \ \ \//\ __/ __ \ \ \/\__, `\ 6 | \ \____/\ \_\ \_\ \___,_\ \____\\ \_\\/\____/\ \____\ \____/\ \_\\ \____\/\_\ _\ \ \/\____/ 7 | \/___/ \/_/\/_/\/__,_ /\/____/ \/_/ \/___/ \/____/\/___/ \/_/ \/____/\/_//\ \_\ \/___/ 8 | \ \____/ 9 | \/___/ 10 | 11 | Underscore.js is a utility-belt library for JavaScript that provides 12 | support for the usual functional suspects (each, map, reduce, filter...) 13 | without extending any core JavaScript objects. 14 | 15 | For Docs, License, Tests, and pre-packed downloads, see: 16 | http://underscorejs.org 17 | 18 | Underscore is an open-sourced component of DocumentCloud: 19 | https://github.com/documentcloud 20 | 21 | Many thanks to our contributors: 22 | https://github.com/jashkenas/underscore/contributors 23 | -------------------------------------------------------------------------------- /www/lib/underscore/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "underscore", 3 | "version": "1.8.2", 4 | "main": "underscore.js", 5 | "keywords": ["util", "functional", "server", "client", "browser"], 6 | "ignore" : ["docs", "test", "*.yml", "CNAME", "index.html", "favicon.ico", "CONTRIBUTING.md"] 7 | } 8 | -------------------------------------------------------------------------------- /www/lib/underscore/component.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "underscore", 3 | "description" : "JavaScript's functional programming helper library.", 4 | "keywords" : ["util", "functional", "server", "client", "browser"], 5 | "repo" : "jashkenas/underscore", 6 | "main" : "underscore.js", 7 | "scripts" : ["underscore.js"], 8 | "version" : "1.8.2", 9 | "license" : "MIT" 10 | } 11 | -------------------------------------------------------------------------------- /www/lib/underscore/karma.conf-sauce.js: -------------------------------------------------------------------------------- 1 | var _ = require('./'); 2 | 3 | // Browsers to run on Sauce Labs platforms 4 | var sauceBrowsers = _.reduce([ 5 | ['firefox', '35'], 6 | ['firefox', '30'], 7 | ['firefox', '20'], 8 | ['firefox', '11'], 9 | ['firefox', '4'], 10 | 11 | ['chrome', '40'], 12 | ['chrome', '35'], 13 | ['chrome', '28'], 14 | 15 | ['internet explorer', '11', 'Windows 8.1'], 16 | ['internet explorer', '10', 'Windows 8'], 17 | ['internet explorer', '9', 'Windows 7'], 18 | // Currently do not work with Karma. 19 | // ['internet explorer', '8', 'Windows 7'], 20 | // ['internet explorer', '7', 'Windows XP'], 21 | // ['internet explorer', '6', 'Windows XP'], 22 | 23 | ['opera', '12'], 24 | ['opera', '11'], 25 | 26 | ['android', '4.3'], 27 | ['android', '4.0'], 28 | 29 | ['safari', '8'], 30 | ['safari', '6'], 31 | ['safari', '7'], 32 | ['safari', '5'] 33 | ], function(memo, platform) { 34 | var label = (platform[0] + '_v' + platform[1]).replace(' ', '_').toUpperCase(); 35 | memo[label] = _.pick({ 36 | 'base': 'SauceLabs', 37 | 'browserName': platform[0], 38 | 'version': platform[1], 39 | 'platform': platform[2] 40 | }, Boolean); 41 | return memo; 42 | }, {}); 43 | 44 | module.exports = function(config) { 45 | if ( !process.env.SAUCE_USERNAME || !process.env.SAUCE_ACCESS_KEY ) { 46 | console.log('Sauce environments not set --- Skipping'); 47 | return process.exit(0); 48 | } 49 | 50 | config.set({ 51 | basePath: '', 52 | frameworks: ['qunit'], 53 | singleRun: true, 54 | 55 | // list of files / patterns to load in the browser 56 | files: [ 57 | 'test/vendor/qunit-extras.js', 58 | 'underscore.js', 59 | 'test/*.js' 60 | ], 61 | // test results reporter to use 62 | reporters: ['dots', 'saucelabs'], 63 | port: 9876, 64 | colors: true, 65 | logLevel: config.LOG_INFO, 66 | sauceLabs: { 67 | build: 'TRAVIS #' + process.env.TRAVIS_BUILD_NUMBER + ' (' + process.env.TRAVIS_BUILD_ID + ')', 68 | startConnect: true, 69 | tunnelIdentifier: process.env.TRAVIS_JOB_NUMBER 70 | }, 71 | 72 | // TODO(vojta): remove once SauceLabs supports websockets. 73 | // This speeds up the capturing a bit, as browsers don't even try to use websocket. 74 | transports: ['xhr-polling'], 75 | captureTimeout: 120000, 76 | customLaunchers: sauceBrowsers 77 | 78 | // Browsers to launch, commented out to prevent karma from starting 79 | // too many concurrent browsers and timing sauce out. 80 | // browsers: _.keys(sauceBrowsers) 81 | }); 82 | }; 83 | -------------------------------------------------------------------------------- /www/lib/underscore/karma.conf.js: -------------------------------------------------------------------------------- 1 | // Note some browser launchers should be installed before using karma start. 2 | 3 | // For example: 4 | // $ npm install karma-firefox-launcher 5 | // $ karma start --browser=Firefox 6 | 7 | // See http://karma-runner.github.io/0.8/config/configuration-file.html 8 | module.exports = function(config) { 9 | config.set({ 10 | basePath: '', 11 | frameworks: ['qunit'], 12 | logLevel: config.LOG_INFO, 13 | port: 9876, 14 | 15 | // list of files / patterns to load in the browser 16 | files: [ 17 | 'test/vendor/qunit-extras.js', 18 | 'underscore.js', 19 | 'test/*.js' 20 | ], 21 | 22 | // Test results reporter to use 23 | // https://npmjs.org/browse/keyword/karma-reporter 24 | reporters: ['progress'], 25 | 26 | // start these browsers 27 | // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher 28 | browsers: ['PhantomJS'], 29 | 30 | // Continuous Integration mode 31 | // if true, Karma captures browsers, runs the tests and exits 32 | singleRun: true 33 | }); 34 | }; -------------------------------------------------------------------------------- /www/lib/underscore/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "underscore", 3 | "description": "JavaScript's functional programming helper library.", 4 | "homepage": "http://underscorejs.org", 5 | "keywords": [ 6 | "util", 7 | "functional", 8 | "server", 9 | "client", 10 | "browser" 11 | ], 12 | "author": "Jeremy Ashkenas ", 13 | "repository": { 14 | "type": "git", 15 | "url": "git://github.com/jashkenas/underscore.git" 16 | }, 17 | "main": "underscore.js", 18 | "version": "1.8.2", 19 | "devDependencies": { 20 | "docco": "*", 21 | "eslint": "0.6.x", 22 | "karma": "~0.12.31", 23 | "karma-qunit": "~0.1.4", 24 | "qunit-cli": "~0.2.0", 25 | "uglify-js": "2.4.x" 26 | }, 27 | "scripts": { 28 | "test": "npm run test-node && npm run lint", 29 | "lint": "eslint underscore.js test/*.js", 30 | "test-node": "qunit-cli test/*.js", 31 | "test-browser": "npm i karma-phantomjs-launcher && ./node_modules/karma/bin/karma start", 32 | "build": "uglifyjs underscore.js -c \"evaluate=false\" --comments \"/ .*/\" -m --source-map underscore-min.map -o underscore-min.js", 33 | "doc": "docco underscore.js" 34 | }, 35 | "license": "MIT", 36 | "files": [ 37 | "underscore.js", 38 | "underscore-min.js", 39 | "underscore-min.map", 40 | "LICENSE" 41 | ] 42 | } 43 | --------------------------------------------------------------------------------