├── .editorconfig ├── .gitattributes ├── .gitignore ├── .htaccess ├── 404.html ├── LICENSE.txt ├── README.md ├── README.md.bak ├── apple-touch-icon.png ├── browserconfig.xml ├── config ├── conditions.json ├── map.json ├── questions.json └── styles.json ├── crossdomain.xml ├── css ├── colorbrewer.css ├── normalize.css ├── sidebyside.css └── style.css ├── data ├── ca-counties-total.json ├── ca-counties.json ├── censustracts.qgs ├── city-data.geojson ├── lower48.geojson ├── texas-coast-counties.json ├── us-states-points.geojson ├── us-states-pop.geojson ├── us-states.geojson ├── wi-tracts-point.geojson ├── wi-tracts-point.topojson ├── wi-tracts-poly.geojson └── wi-tracts-poly.topojson ├── doc ├── README.md ├── architecture.ai ├── architecture.md └── versions.md ├── favicon.ico ├── humans.txt ├── img ├── .gitignore ├── accordion_arrow.png ├── accordion_arrow.svg ├── architecture.png ├── back.png ├── blankimage.png ├── choropleth.ai ├── dot.ai ├── downarrow.png ├── external-black.png ├── external-blue.png ├── filter.svg ├── finish.png ├── grail.jpg ├── heat.ai ├── icons │ ├── choropleth.png │ ├── dot.png │ ├── downarrow.png │ ├── filter.png │ ├── heat.png │ ├── isarithmic.png │ ├── leftarrow.png │ ├── legend.png │ ├── overlay.png │ ├── pan.png │ ├── proportional-symbol.png │ ├── reexpress.png │ ├── reset.png │ ├── resymbolize.png │ ├── retrieve.png │ ├── rightarrow.png │ ├── search.png │ ├── underlay.png │ ├── uparrow.png │ └── zoom.png ├── isarithm.ai ├── legend.svg ├── loading.gif ├── logo.png ├── next.png ├── pan.svg ├── prop symbol.ai ├── reexpress.svg ├── remove.png ├── reset.svg ├── retrieve.svg ├── search.svg ├── story │ ├── fire.gif │ ├── story_block_1.png │ ├── story_block_2.png │ ├── story_block_3.png │ └── water.gif ├── techniques.ai ├── underlay.svg └── zoom.svg ├── index.html ├── js ├── lib │ ├── backbone-deep-model.js │ ├── backbone.js │ ├── colorbrewer.js │ ├── colorbrewer.json │ ├── d3.js │ ├── fuse.js │ ├── heatmap.js │ ├── jquery-ui │ │ ├── images │ │ │ ├── ui-icons_444444_256x240.png │ │ │ ├── ui-icons_555555_256x240.png │ │ │ ├── ui-icons_777620_256x240.png │ │ │ ├── ui-icons_777777_256x240.png │ │ │ ├── ui-icons_cc0000_256x240.png │ │ │ └── ui-icons_ffffff_256x240.png │ │ ├── jquery-ui.css │ │ ├── jquery-ui.js │ │ ├── jquery-ui.structure.css │ │ └── jquery-ui.theme.css │ ├── jquery.js │ ├── jszip.min.js │ ├── leaflet-heatmap.js │ ├── leaflet-providers.js │ ├── leaflet-side-by-side.js │ ├── leaflet │ │ ├── images │ │ │ ├── filter.png │ │ │ ├── layers-2x.png │ │ │ ├── layers.png │ │ │ ├── marker-icon-2x.png │ │ │ ├── marker-icon.png │ │ │ ├── marker-shadow.png │ │ │ ├── search.png │ │ │ └── search_input.png │ │ ├── leaflet-src.js │ │ ├── leaflet.css │ │ └── leaflet.js │ ├── mapboxgl │ │ ├── mapboxgl.css │ │ └── mapboxgl.js │ ├── modernizr.js │ ├── plugins.js │ ├── simple_statistics.js │ ├── svg-area-heatmap.js │ ├── topojson.js │ ├── turf.js │ └── underscore.js └── modules │ ├── app.js │ ├── m-section.js │ ├── q-section.js │ └── s-section.js ├── mapstudy.png ├── mapstudy.sublime-project ├── mapstudy.sublime-workspace ├── participants ├── p145131382_interactions.csv ├── p280720473_interactions.csv ├── p325139507_interactions.csv ├── p334289510_interactions.csv ├── p577190975_interactions.csv └── p642172187_interactions.csv ├── php ├── PHPMailer │ ├── .gitignore │ ├── .scrutinizer.yml │ ├── .travis.yml │ ├── LICENSE │ ├── PHPMailerAutoload.php │ ├── README.md │ ├── VERSION │ ├── changelog.md │ ├── class.phpmailer.php │ ├── class.phpmaileroauth.php │ ├── class.phpmaileroauthgoogle.php │ ├── class.pop3.php │ ├── class.smtp.php │ ├── composer.json │ ├── composer.lock │ ├── docs │ │ ├── Callback_function_notes.txt │ │ ├── DomainKeys_notes.txt │ │ ├── Note_for_SMTP_debugging.txt │ │ ├── extending.html │ │ ├── faq.html │ │ ├── generatedocs.sh │ │ └── pop3_article.txt │ ├── examples │ │ ├── code_generator.phps │ │ ├── contents.html │ │ ├── contentsutf8.html │ │ ├── exceptions.phps │ │ ├── gmail.phps │ │ ├── gmail_xoauth.phps │ │ ├── images │ │ │ ├── phpmailer.png │ │ │ └── phpmailer_mini.png │ │ ├── index.html │ │ ├── mail.phps │ │ ├── mailing_list.phps │ │ ├── pop_before_smtp.phps │ │ ├── scripts │ │ │ ├── XRegExp.js │ │ │ ├── shAutoloader.js │ │ │ ├── shBrushPhp.js │ │ │ ├── shCore.js │ │ │ └── shLegacy.js │ │ ├── send_file_upload.phps │ │ ├── send_multiple_file_upload.phps │ │ ├── sendmail.phps │ │ ├── signed-mail.phps │ │ ├── smtp.phps │ │ ├── smtp_check.phps │ │ ├── smtp_no_auth.phps │ │ ├── ssl_options.phps │ │ └── styles │ │ │ ├── shCore.css │ │ │ ├── shCoreDefault.css │ │ │ ├── shCoreDjango.css │ │ │ ├── shCoreEclipse.css │ │ │ ├── shCoreEmacs.css │ │ │ ├── shCoreFadeToGrey.css │ │ │ ├── shCoreMDUltra.css │ │ │ ├── shCoreMidnight.css │ │ │ ├── shCoreRDark.css │ │ │ ├── shThemeAppleScript.css │ │ │ ├── shThemeDefault.css │ │ │ ├── shThemeDjango.css │ │ │ ├── shThemeEclipse.css │ │ │ ├── shThemeEmacs.css │ │ │ ├── shThemeFadeToGrey.css │ │ │ ├── shThemeMDUltra.css │ │ │ ├── shThemeMidnight.css │ │ │ ├── shThemeRDark.css │ │ │ ├── shThemeVisualStudio.css │ │ │ └── wrapping.png │ ├── extras │ │ ├── EasyPeasyICS.php │ │ ├── README.md │ │ ├── htmlfilter.php │ │ └── ntlm_sasl_client.php │ ├── get_oauth_token.php │ ├── language │ │ ├── phpmailer.lang-am.php │ │ ├── phpmailer.lang-ar.php │ │ ├── phpmailer.lang-az.php │ │ ├── phpmailer.lang-be.php │ │ ├── phpmailer.lang-bg.php │ │ ├── phpmailer.lang-br.php │ │ ├── phpmailer.lang-ca.php │ │ ├── phpmailer.lang-ch.php │ │ ├── phpmailer.lang-cz.php │ │ ├── phpmailer.lang-de.php │ │ ├── phpmailer.lang-dk.php │ │ ├── phpmailer.lang-el.php │ │ ├── phpmailer.lang-eo.php │ │ ├── phpmailer.lang-es.php │ │ ├── phpmailer.lang-et.php │ │ ├── phpmailer.lang-fa.php │ │ ├── phpmailer.lang-fi.php │ │ ├── phpmailer.lang-fo.php │ │ ├── phpmailer.lang-fr.php │ │ ├── phpmailer.lang-gl.php │ │ ├── phpmailer.lang-he.php │ │ ├── phpmailer.lang-hr.php │ │ ├── phpmailer.lang-hu.php │ │ ├── phpmailer.lang-id.php │ │ ├── phpmailer.lang-it.php │ │ ├── phpmailer.lang-ja.php │ │ ├── phpmailer.lang-ka.php │ │ ├── phpmailer.lang-ko.php │ │ ├── phpmailer.lang-lt.php │ │ ├── phpmailer.lang-lv.php │ │ ├── phpmailer.lang-ms.php │ │ ├── phpmailer.lang-nl.php │ │ ├── phpmailer.lang-no.php │ │ ├── phpmailer.lang-pl.php │ │ ├── phpmailer.lang-pt.php │ │ ├── phpmailer.lang-ro.php │ │ ├── phpmailer.lang-ru.php │ │ ├── phpmailer.lang-se.php │ │ ├── phpmailer.lang-sk.php │ │ ├── phpmailer.lang-sl.php │ │ ├── phpmailer.lang-sr.php │ │ ├── phpmailer.lang-tr.php │ │ ├── phpmailer.lang-uk.php │ │ ├── phpmailer.lang-vi.php │ │ ├── phpmailer.lang-zh.php │ │ └── phpmailer.lang-zh_cn.php │ ├── test │ │ ├── bootstrap.php │ │ ├── fakepopserver.sh │ │ ├── fakesendmail.sh │ │ ├── phpmailerLangTest.php │ │ ├── phpmailerTest.php │ │ ├── runfakepopserver.sh │ │ ├── test_callback.php │ │ └── testbootstrap-dist.php │ └── travis.phpunit.xml.dist ├── data.php ├── interactions.php └── story.php ├── robots.txt ├── setup ├── index.html ├── setup.js └── setup.php ├── tile-wide.png └── tile.png /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | indent_size = 4 8 | indent_style = space 9 | insert_final_newline = true 10 | trim_trailing_whitespace = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Include your project-specific ignores in this file 2 | # Read about how to use .gitignore: https://help.github.com/articles/ignoring-files 3 | 4 | favicon.ai 5 | **/param.php 6 | prepros.cfg 7 | README.html 8 | -------------------------------------------------------------------------------- /404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Page Not Found 6 | 7 | 54 | 55 | 56 |

Page Not Found

57 |

Sorry, but the page you were trying to view does not exist.

58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/apple-touch-icon.png -------------------------------------------------------------------------------- /browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /config/conditions.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "pages": [ 4 | 2, 5 | 6 6 | ], 7 | "weight": 0 8 | }, 9 | { 10 | "pages": [ 11 | 2, 12 | 4, 13 | 6 14 | ], 15 | "weight": 0 16 | }, 17 | { 18 | "pages": [ 19 | 1, 20 | 2, 21 | 3, 22 | 4, 23 | 5, 24 | [ 25 | 6, 26 | 7 27 | ], 28 | 8 29 | ], 30 | "weight": 1 31 | } 32 | ] -------------------------------------------------------------------------------- /config/styles.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "sectionId": "header", 4 | "cssAttributes": { 5 | "background-color": "rgb(186,18,43)" 6 | }, 7 | "logo-url": "img/logo.png", 8 | "content": "MapStudy Demo" 9 | }, 10 | { 11 | "sectionId": "footer", 12 | "cssAttributes": { 13 | "background-color": "rgb(186,18,43)" 14 | }, 15 | "content": "I'm some credits." 16 | } 17 | ] -------------------------------------------------------------------------------- /crossdomain.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 15 | 16 | -------------------------------------------------------------------------------- /css/sidebyside.css: -------------------------------------------------------------------------------- 1 | 2 | .leaflet-sbs-range { 3 | position: absolute; 4 | top: 50%; 5 | width: 100%; 6 | z-index: 999; 7 | } 8 | .leaflet-sbs-divider { 9 | position: absolute; 10 | top: 0; 11 | bottom: 0; 12 | left: 50%; 13 | margin-left: -2px; 14 | width: 4px; 15 | background-color: #fff; 16 | pointer-events: none; 17 | z-index: 999; 18 | } 19 | 20 | 21 | .leaflet-sbs-range { 22 | -webkit-appearance: none; 23 | display: inline-block!important; 24 | vertical-align: middle; 25 | height: 0; 26 | padding: 0; 27 | margin: 0; 28 | border: 0; 29 | background: rgba(0, 0, 0, 0.25); 30 | min-width: 100px; 31 | cursor: pointer; 32 | pointer-events: none; 33 | z-index: 999; 34 | left:0; 35 | } 36 | .leaflet-sbs-range::-ms-fill-upper { 37 | background: transparent; 38 | } 39 | .leaflet-sbs-range::-ms-fill-lower { 40 | background: rgba(255, 255, 255, 0.25); 41 | } 42 | /* Browser thingies */ 43 | 44 | .leaflet-sbs-range::-moz-range-track { 45 | opacity: 0; 46 | } 47 | .leaflet-sbs-range::-ms-track { 48 | opacity: 0; 49 | } 50 | .leaflet-sbs-range::-ms-tooltip { 51 | display: none; 52 | } 53 | /* For whatever reason, these need to be defined 54 | * on their own so dont group them */ 55 | 56 | .leaflet-sbs-range::-webkit-slider-thumb { 57 | -webkit-appearance: none; 58 | margin: 0; 59 | padding: 0; 60 | background: #fff; 61 | height: 40px; 62 | width: 40px; 63 | border-radius: 20px; 64 | cursor: ew-resize; 65 | pointer-events: auto; 66 | border: 1px solid #ddd; 67 | background-image: url(../img/range-icon.png); 68 | background-position: 50% 50%; 69 | background-repeat: no-repeat; 70 | background-size: 40px 40px; 71 | left:0; 72 | } 73 | .leaflet-sbs-range::-ms-thumb { 74 | margin: 0; 75 | padding: 0; 76 | background: #fff; 77 | height: 40px; 78 | width: 40px; 79 | border-radius: 20px; 80 | cursor: ew-resize; 81 | pointer-events: auto; 82 | border: 1px solid #ddd; 83 | background-image: url(../img/range-icon.png); 84 | background-position: 50% 50%; 85 | background-repeat: no-repeat; 86 | background-size: 40px 40px; 87 | left:0; 88 | } 89 | .leaflet-sbs-range::-moz-range-thumb { 90 | padding: 0; 91 | right: 0 ; 92 | background: #fff; 93 | height: 40px; 94 | width: 40px; 95 | border-radius: 20px; 96 | cursor: ew-resize; 97 | pointer-events: auto; 98 | border: 1px solid #ddd; 99 | background-image: url(../img/range-icon.png); 100 | background-position: 50% 50%; 101 | background-repeat: no-repeat; 102 | background-size: 40px 40px; 103 | left:0; 104 | } 105 | .leaflet-sbs-range:disabled::-moz-range-thumb { 106 | cursor: default; 107 | } 108 | .leaflet-sbs-range:disabled::-ms-thumb { 109 | cursor: default; 110 | } 111 | .leaflet-sbs-range:disabled::-webkit-slider-thumb { 112 | cursor: default; 113 | } 114 | .leaflet-sbs-range:disabled { 115 | cursor: default; 116 | } 117 | .leaflet-sbs-range:focus { 118 | outline: none!important; 119 | } 120 | .leaflet-sbs-range::-moz-focus-outer { 121 | border: 0; 122 | } 123 | -------------------------------------------------------------------------------- /doc/architecture.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/doc/architecture.ai -------------------------------------------------------------------------------- /doc/versions.md: -------------------------------------------------------------------------------- 1 | # Included library versions 2 | 3 | - jQuery 1.11.3 4 | 5 | - jQuery-UI 1.11.4 base theme custom (autocomplete, menu, slider, and tooltip widgets only, no interactions or effects) 6 | 7 | - Underscorejs 1.8.3 8 | 9 | - Backbonejs 1.2.3 10 | 11 | - Backbone-Deep-Model 0.10.4 12 | 13 | - modernizr 2.8.3 14 | 15 | - Leaflet 1.0 beta 2 16 | 17 | - Mapbox JS 2.2.3 18 | 19 | - Mapbox-GL 0.11.1 20 | 21 | - D3 4.8.0 22 | 23 | - TopoJSON 1.0 24 | 25 | - ColorBrewer 26 | 27 | - Simple Statistics 1.0.0 28 | 29 | - Turf 2.0.0 30 | 31 | - Fuse 1.3.0 32 | 33 | - Heatmapjs (including Leaflet-heatmap) 2.0.2 34 | 35 | - Leaflet-providers 1.1.11 36 | 37 | # Example files: 38 | 39 | - *us-states.geojson* -- shamelessly stolen from [Leaflet Interactive Choropleth Map tutorial](http://leafletjs.com/examples/choropleth.html) -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/favicon.ico -------------------------------------------------------------------------------- /humans.txt: -------------------------------------------------------------------------------- 1 | # humanstxt.org/ 2 | # The humans responsible & technology colophon 3 | 4 | # TEAM 5 | 6 | -- -- 7 | 8 | # THANKS 9 | 10 | 11 | 12 | # TECHNOLOGY COLOPHON 13 | 14 | CSS3, HTML5 15 | Apache Server Configs, jQuery, Modernizr, Normalize.css 16 | -------------------------------------------------------------------------------- /img/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/.gitignore -------------------------------------------------------------------------------- /img/accordion_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/accordion_arrow.png -------------------------------------------------------------------------------- /img/accordion_arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 8 | 9 | -------------------------------------------------------------------------------- /img/architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/architecture.png -------------------------------------------------------------------------------- /img/back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/back.png -------------------------------------------------------------------------------- /img/blankimage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/blankimage.png -------------------------------------------------------------------------------- /img/choropleth.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/choropleth.ai -------------------------------------------------------------------------------- /img/dot.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/dot.ai -------------------------------------------------------------------------------- /img/downarrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/downarrow.png -------------------------------------------------------------------------------- /img/external-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/external-black.png -------------------------------------------------------------------------------- /img/external-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/external-blue.png -------------------------------------------------------------------------------- /img/filter.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 11 | 12 | 13 | 14 | Filter 15 | 16 | -------------------------------------------------------------------------------- /img/finish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/finish.png -------------------------------------------------------------------------------- /img/grail.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/grail.jpg -------------------------------------------------------------------------------- /img/heat.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/heat.ai -------------------------------------------------------------------------------- /img/icons/choropleth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/icons/choropleth.png -------------------------------------------------------------------------------- /img/icons/dot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/icons/dot.png -------------------------------------------------------------------------------- /img/icons/downarrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/icons/downarrow.png -------------------------------------------------------------------------------- /img/icons/filter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/icons/filter.png -------------------------------------------------------------------------------- /img/icons/heat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/icons/heat.png -------------------------------------------------------------------------------- /img/icons/isarithmic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/icons/isarithmic.png -------------------------------------------------------------------------------- /img/icons/leftarrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/icons/leftarrow.png -------------------------------------------------------------------------------- /img/icons/legend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/icons/legend.png -------------------------------------------------------------------------------- /img/icons/overlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/icons/overlay.png -------------------------------------------------------------------------------- /img/icons/pan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/icons/pan.png -------------------------------------------------------------------------------- /img/icons/proportional-symbol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/icons/proportional-symbol.png -------------------------------------------------------------------------------- /img/icons/reexpress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/icons/reexpress.png -------------------------------------------------------------------------------- /img/icons/reset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/icons/reset.png -------------------------------------------------------------------------------- /img/icons/resymbolize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/icons/resymbolize.png -------------------------------------------------------------------------------- /img/icons/retrieve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/icons/retrieve.png -------------------------------------------------------------------------------- /img/icons/rightarrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/icons/rightarrow.png -------------------------------------------------------------------------------- /img/icons/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/icons/search.png -------------------------------------------------------------------------------- /img/icons/underlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/icons/underlay.png -------------------------------------------------------------------------------- /img/icons/uparrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/icons/uparrow.png -------------------------------------------------------------------------------- /img/icons/zoom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/icons/zoom.png -------------------------------------------------------------------------------- /img/isarithm.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/isarithm.ai -------------------------------------------------------------------------------- /img/legend.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 9 | 11 | 13 | 15 | 18 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/loading.gif -------------------------------------------------------------------------------- /img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/logo.png -------------------------------------------------------------------------------- /img/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/next.png -------------------------------------------------------------------------------- /img/pan.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /img/prop symbol.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/prop symbol.ai -------------------------------------------------------------------------------- /img/reexpress.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 9 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /img/remove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/remove.png -------------------------------------------------------------------------------- /img/reset.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 9 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /img/retrieve.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 9 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /img/search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 8 | 13 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /img/story/fire.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/story/fire.gif -------------------------------------------------------------------------------- /img/story/story_block_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/story/story_block_1.png -------------------------------------------------------------------------------- /img/story/story_block_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/story/story_block_2.png -------------------------------------------------------------------------------- /img/story/story_block_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/story/story_block_3.png -------------------------------------------------------------------------------- /img/story/water.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/story/water.gif -------------------------------------------------------------------------------- /img/techniques.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/img/techniques.ai -------------------------------------------------------------------------------- /img/underlay.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 10 | 12 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /img/zoom.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /js/lib/jquery-ui/images/ui-icons_444444_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/js/lib/jquery-ui/images/ui-icons_444444_256x240.png -------------------------------------------------------------------------------- /js/lib/jquery-ui/images/ui-icons_555555_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/js/lib/jquery-ui/images/ui-icons_555555_256x240.png -------------------------------------------------------------------------------- /js/lib/jquery-ui/images/ui-icons_777620_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/js/lib/jquery-ui/images/ui-icons_777620_256x240.png -------------------------------------------------------------------------------- /js/lib/jquery-ui/images/ui-icons_777777_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/js/lib/jquery-ui/images/ui-icons_777777_256x240.png -------------------------------------------------------------------------------- /js/lib/jquery-ui/images/ui-icons_cc0000_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/js/lib/jquery-ui/images/ui-icons_cc0000_256x240.png -------------------------------------------------------------------------------- /js/lib/jquery-ui/images/ui-icons_ffffff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/js/lib/jquery-ui/images/ui-icons_ffffff_256x240.png -------------------------------------------------------------------------------- /js/lib/leaflet/images/filter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/js/lib/leaflet/images/filter.png -------------------------------------------------------------------------------- /js/lib/leaflet/images/layers-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/js/lib/leaflet/images/layers-2x.png -------------------------------------------------------------------------------- /js/lib/leaflet/images/layers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/js/lib/leaflet/images/layers.png -------------------------------------------------------------------------------- /js/lib/leaflet/images/marker-icon-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/js/lib/leaflet/images/marker-icon-2x.png -------------------------------------------------------------------------------- /js/lib/leaflet/images/marker-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/js/lib/leaflet/images/marker-icon.png -------------------------------------------------------------------------------- /js/lib/leaflet/images/marker-shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/js/lib/leaflet/images/marker-shadow.png -------------------------------------------------------------------------------- /js/lib/leaflet/images/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/js/lib/leaflet/images/search.png -------------------------------------------------------------------------------- /js/lib/leaflet/images/search_input.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/js/lib/leaflet/images/search_input.png -------------------------------------------------------------------------------- /js/lib/plugins.js: -------------------------------------------------------------------------------- 1 | // Avoid `console` errors in browsers that lack a console. 2 | (function() { 3 | var method; 4 | var noop = function () {}; 5 | var methods = [ 6 | 'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error', 7 | 'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log', 8 | 'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd', 9 | 'timeline', 'timelineEnd', 'timeStamp', 'trace', 'warn' 10 | ]; 11 | var length = methods.length; 12 | var console = (window.console = window.console || {}); 13 | 14 | while (length--) { 15 | method = methods[length]; 16 | 17 | // Only stub undefined methods. 18 | if (!console[method]) { 19 | console[method] = noop; 20 | } 21 | } 22 | }()); 23 | 24 | // Place any jQuery/helper plugins in here. 25 | -------------------------------------------------------------------------------- /mapstudy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/mapstudy.png -------------------------------------------------------------------------------- /mapstudy.sublime-project: -------------------------------------------------------------------------------- 1 | { 2 | "folders": 3 | [ 4 | { 5 | "path": "/C/Program Files (x86)/PostgreSQL/EnterpriseDB-ApachePHP/apache/www/mapstudy" 6 | } 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /participants/p145131382_interactions.csv: -------------------------------------------------------------------------------- 1 | timestp, interaction, page, set 2 | -------------------------------------------------------------------------------- /participants/p280720473_interactions.csv: -------------------------------------------------------------------------------- 1 | timestp, interaction, page, set 2 | -------------------------------------------------------------------------------- /participants/p325139507_interactions.csv: -------------------------------------------------------------------------------- 1 | timestp, interaction, page, set 2 | 1464107649726, pan, 2, 1 3 | -------------------------------------------------------------------------------- /participants/p334289510_interactions.csv: -------------------------------------------------------------------------------- 1 | timestp, interaction, page, set 2 | -------------------------------------------------------------------------------- /participants/p577190975_interactions.csv: -------------------------------------------------------------------------------- 1 | timestp, interaction, page, set 2 | -------------------------------------------------------------------------------- /participants/p642172187_interactions.csv: -------------------------------------------------------------------------------- 1 | timestp, interaction, page, set 2 | -------------------------------------------------------------------------------- /php/PHPMailer/.gitignore: -------------------------------------------------------------------------------- 1 | docs/phpdoc/ 2 | test/message.txt 3 | test/testbootstrap.php 4 | test/*.pem 5 | .idea 6 | build/ 7 | vendor/ 8 | -------------------------------------------------------------------------------- /php/PHPMailer/.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | php: 3 | - 7.0 4 | - 5.6 5 | - 5.5 6 | - 5.4 7 | - 5.3 8 | - hhvm 9 | 10 | matrix: 11 | allow_failures: 12 | - php: hhvm 13 | 14 | before_install: 15 | - sudo apt-get update -qq 16 | - sudo apt-get install -y -qq postfix 17 | before_script: 18 | - sudo service postfix stop 19 | - smtp-sink -d "%d.%H.%M.%S" localhost:2500 1000 & 20 | - mkdir -p build/logs 21 | - cd test 22 | - cp testbootstrap-dist.php testbootstrap.php 23 | - chmod +x fakesendmail.sh 24 | - sudo mkdir -p /var/qmail/bin 25 | - sudo cp fakesendmail.sh /var/qmail/bin/sendmail 26 | - sudo cp fakesendmail.sh /usr/sbin/sendmail 27 | - echo 'sendmail_path = "/usr/sbin/sendmail -t -i "' > $(php --ini|grep -m 1 "ini files in:"|cut -d ":" -f 2)/sendmail.ini 28 | script: 29 | - phpunit --configuration ../travis.phpunit.xml.dist 30 | after_script: 31 | - wget https://scrutinizer-ci.com/ocular.phar 32 | - php ocular.phar code-coverage:upload --format=php-clover ../build/logs/clover.xml 33 | -------------------------------------------------------------------------------- /php/PHPMailer/PHPMailerAutoload.php: -------------------------------------------------------------------------------- 1 | 8 | * @author Jim Jagielski (jimjag) 9 | * @author Andy Prevost (codeworxtech) 10 | * @author Brent R. Matzelle (original founder) 11 | * @copyright 2012 - 2014 Marcus Bointon 12 | * @copyright 2010 - 2012 Jim Jagielski 13 | * @copyright 2004 - 2009 Andy Prevost 14 | * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License 15 | * @note This program is distributed in the hope that it will be useful - WITHOUT 16 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 17 | * FITNESS FOR A PARTICULAR PURPOSE. 18 | */ 19 | 20 | /** 21 | * PHPMailer SPL autoloader. 22 | * @param string $classname The name of the class to load 23 | */ 24 | function PHPMailerAutoload($classname) 25 | { 26 | //Can't use __DIR__ as it's only in PHP 5.3+ 27 | $filename = dirname(__FILE__).DIRECTORY_SEPARATOR.'class.'.strtolower($classname).'.php'; 28 | if (is_readable($filename)) { 29 | require $filename; 30 | } 31 | } 32 | 33 | if (version_compare(PHP_VERSION, '5.1.2', '>=')) { 34 | //SPL autoloading was introduced in PHP 5.1.2 35 | if (version_compare(PHP_VERSION, '5.3.0', '>=')) { 36 | spl_autoload_register('PHPMailerAutoload', true, true); 37 | } else { 38 | spl_autoload_register('PHPMailerAutoload'); 39 | } 40 | } else { 41 | /** 42 | * Fall back to traditional autoload for old PHP versions 43 | * @param string $classname The name of the class to load 44 | */ 45 | function __autoload($classname) 46 | { 47 | PHPMailerAutoload($classname); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /php/PHPMailer/VERSION: -------------------------------------------------------------------------------- 1 | 5.2.14 -------------------------------------------------------------------------------- /php/PHPMailer/class.phpmaileroauthgoogle.php: -------------------------------------------------------------------------------- 1 | 8 | * @author Jim Jagielski (jimjag) 9 | * @author Andy Prevost (codeworxtech) 10 | * @author Brent R. Matzelle (original founder) 11 | * @copyright 2012 - 2014 Marcus Bointon 12 | * @copyright 2010 - 2012 Jim Jagielski 13 | * @copyright 2004 - 2009 Andy Prevost 14 | * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License 15 | * @note This program is distributed in the hope that it will be useful - WITHOUT 16 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 17 | * FITNESS FOR A PARTICULAR PURPOSE. 18 | */ 19 | 20 | /** 21 | * PHPMailerOAuthGoogle - Wrapper for League OAuth2 Google provider. 22 | * @package PHPMailer 23 | * @author @sherryl4george 24 | * @author Marcus Bointon (@Synchro) 25 | * @link https://github.com/thephpleague/oauth2-client 26 | */ 27 | class PHPMailerOAuthGoogle 28 | { 29 | private $oauthUserEmail = ''; 30 | private $oauthRefreshToken = ''; 31 | private $oauthClientId = ''; 32 | private $oauthClientSecret = ''; 33 | 34 | /** 35 | * @param string $UserEmail 36 | * @param string $ClientSecret 37 | * @param string $ClientId 38 | * @param string $RefreshToken 39 | */ 40 | public function __construct( 41 | $UserEmail, 42 | $ClientSecret, 43 | $ClientId, 44 | $RefreshToken 45 | ) { 46 | $this->oauthClientId = $ClientId; 47 | $this->oauthClientSecret = $ClientSecret; 48 | $this->oauthRefreshToken = $RefreshToken; 49 | $this->oauthUserEmail = $UserEmail; 50 | } 51 | 52 | private function getProvider() 53 | { 54 | return new League\OAuth2\Client\Provider\Google([ 55 | 'clientId' => $this->oauthClientId, 56 | 'clientSecret' => $this->oauthClientSecret 57 | ]); 58 | } 59 | 60 | private function getGrant() 61 | { 62 | return new \League\OAuth2\Client\Grant\RefreshToken(); 63 | } 64 | 65 | private function getToken() 66 | { 67 | $provider = $this->getProvider(); 68 | $grant = $this->getGrant(); 69 | return $provider->getAccessToken($grant, ['refresh_token' => $this->oauthRefreshToken]); 70 | } 71 | 72 | public function getOauth64() 73 | { 74 | $token = $this->getToken(); 75 | return base64_encode("user=" . $this->oauthUserEmail . "\001auth=Bearer " . $token . "\001\001"); 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /php/PHPMailer/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "phpmailer/phpmailer", 3 | "type": "library", 4 | "description": "PHPMailer is a full-featured email creation and transfer class for PHP", 5 | "authors": [ 6 | { 7 | "name": "Marcus Bointon", 8 | "email": "phpmailer@synchromedia.co.uk" 9 | }, 10 | { 11 | "name": "Jim Jagielski", 12 | "email": "jimjag@gmail.com" 13 | }, 14 | { 15 | "name": "Andy Prevost", 16 | "email": "codeworxtech@users.sourceforge.net" 17 | }, 18 | { 19 | "name": "Brent R. Matzelle" 20 | } 21 | ], 22 | "require": { 23 | "php": ">=5.0.0" 24 | }, 25 | "require-dev": { 26 | "phpdocumentor/phpdocumentor": "*", 27 | "phpunit/phpunit": "4.7.*" 28 | }, 29 | "suggest": { 30 | "league/oauth2-google": "Needed for Google XOAUTH2 authentication" 31 | }, 32 | "autoload": { 33 | "classmap": [ 34 | "class.phpmailer.php", 35 | "class.phpmaileroauth.php", 36 | "class.phpmaileroauthgoogle.php", 37 | "class.smtp.php", 38 | "class.pop3.php", 39 | "extras/EasyPeasyICS.php", 40 | "extras/ntlm_sasl_client.php" 41 | ] 42 | }, 43 | "license": "LGPL-2.1" 44 | } 45 | -------------------------------------------------------------------------------- /php/PHPMailer/docs/Callback_function_notes.txt: -------------------------------------------------------------------------------- 1 | NEW CALLBACK FUNCTION: 2 | ====================== 3 | 4 | We have had requests for a method to process the results of sending emails 5 | through PHPMailer. In this new release, we have implemented a callback 6 | function that passes the results of each email sent (to, cc, and/or bcc). 7 | We have provided an example that echos the results back to the screen. The 8 | callback function can be used for any purpose. With minor modifications, the 9 | callback function can be used to create CSV logs, post results to databases, 10 | etc. 11 | 12 | Please review the test.php script for the example. 13 | 14 | It's pretty straight forward. 15 | 16 | Enjoy! 17 | Andy 18 | -------------------------------------------------------------------------------- /php/PHPMailer/docs/DomainKeys_notes.txt: -------------------------------------------------------------------------------- 1 | CREATE DKIM KEYS and DNS Resource Record: 2 | ========================================= 3 | 4 | To create DomainKeys Identified Mail keys, visit: 5 | http://dkim.worxware.com/ 6 | ... read the information, fill in the form, and download the ZIP file 7 | containing the public key, private key, DNS Resource Record and instructions 8 | to add to your DNS Zone Record, and the PHPMailer code to enable DKIM 9 | digital signing. 10 | 11 | /*** PROTECT YOUR PRIVATE & PUBLIC KEYS ***/ 12 | 13 | You need to protect your DKIM private and public keys from being viewed or 14 | accessed. Add protection to your .htaccess file as in this example: 15 | 16 | # secure htkeyprivate file 17 | 18 | order allow,deny 19 | deny from all 20 | 21 | 22 | # secure htkeypublic file 23 | 24 | order allow,deny 25 | deny from all 26 | 27 | 28 | (the actual .htaccess additions are in the ZIP file sent back to you from 29 | http://dkim.worxware.com/ 30 | 31 | A few notes on using DomainKey Identified Mail (DKIM): 32 | 33 | You do not need to use PHPMailer to DKIM sign emails IF: 34 | - you enable DomainKey support and add the DNS resource record 35 | - you use your outbound mail server 36 | 37 | If you are a third-party emailer that works on behalf of domain owners to 38 | send their emails from your own server: 39 | - you absolutely have to DKIM sign outbound emails 40 | - the domain owner has to add the DNS resource record to match the 41 | private key, public key, selector, identity, and domain that you create 42 | - use caution with the "selector" ... at least one "selector" will already 43 | exist in the DNS Zone Record of the domain at the domain owner's server 44 | you need to ensure that the "selector" you use is unique 45 | Note: since the IP address will not match the domain owner's DNS Zone record 46 | you can be certain that email providers that validate based on DomainKey will 47 | check the domain owner's DNS Zone record for your DNS resource record. Before 48 | sending out emails on behalf of domain owners, ensure they have entered the 49 | DNS resource record you provided them. 50 | 51 | Enjoy! 52 | Andy 53 | 54 | PS. if you need additional information about DKIM, please see: 55 | http://www.dkim.org/info/dkim-faq.html 56 | -------------------------------------------------------------------------------- /php/PHPMailer/docs/Note_for_SMTP_debugging.txt: -------------------------------------------------------------------------------- 1 | If you are having problems connecting or sending emails through your SMTP server, the SMTP class can provide more information about the processing/errors taking place. 2 | Use the debug functionality of the class to see what's going on in your connections. To do that, set the debug level in your script. For example: 3 | 4 | $mail->SMTPDebug = 1; 5 | $mail->isSMTP(); // telling the class to use SMTP 6 | $mail->SMTPAuth = true; // enable SMTP authentication 7 | $mail->Port = 26; // set the SMTP port 8 | $mail->Host = "mail.yourhost.com"; // SMTP server 9 | $mail->Username = "name@yourhost.com"; // SMTP account username 10 | $mail->Password = "your password"; // SMTP account password 11 | 12 | Notes on this: 13 | $mail->SMTPDebug = 0; ... will disable debugging (you can also leave this out completely, 0 is the default) 14 | $mail->SMTPDebug = 1; ... will echo errors and server responses 15 | $mail->SMTPDebug = 2; ... will echo errors, server responses and client messages 16 | 17 | And finally, don't forget to disable debugging before going into production. 18 | -------------------------------------------------------------------------------- /php/PHPMailer/docs/faq.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | PHPMailer FAQ 4 | 5 | 6 |

PHPMailer FAQ

7 |
    8 |
  • Q: I am concerned that using include files will take up too much 9 | processing time on my computer. How can I make it run faster?
    10 | A: PHP by itself is fairly fast, but it recompiles scripts every time they are run, which takes up valuable 11 | computer resources. You can bypass this by using an opcode cache which compiles 12 | PHP code and store it in memory to reduce overhead immensely. APC 13 | (Alternative PHP Cache) is a free opcode cache extension in the PECL library.
  • 14 |
  • Q: Which mailer gives me the best performance?
    15 | A: On a single machine the sendmail (or Qmail) is fastest overall. 16 | Next fastest is mail() to give you the best performance. Both do not have the overhead of SMTP. 17 | If you do not have a local mail server (as is typical on Windows), SMTP is your only option.
  • 18 |
  • Q: When I try to attach a file with on my server I get a 19 | "Could not find {file} on filesystem error". Why is this?
    20 | A: If you are using a Unix machine this is probably because the user 21 | running your web server does not have read access to the directory in question. If you are using Windows, 22 | then the problem is probably that you have used single backslashes to denote directories (\). 23 | A single backslash has a special meaning to PHP so these are not 24 | valid. Instead use double backslashes ("\\") or a single forward 25 | slash ("/").
  • 26 |
27 | 28 | 29 | -------------------------------------------------------------------------------- /php/PHPMailer/docs/generatedocs.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Regenerate PHPMailer documentation 3 | # Run from within the docs folder 4 | rm -rf phpdoc/* 5 | phpdoc --directory .. --target ./phpdoc --ignore test/,examples/,extras/,test_script/,vendor/,language/ --sourcecode --force --title PHPMailer --template="clean" 6 | # You can merge regenerated docs into a separate docs working copy without messing up the git status like so: 7 | # rsync -a --delete --exclude ".git" --exclude "phpdoc-cache-*/" --exclude "README.md" phpdoc/ ../../phpmailer-docs 8 | # After updating docs, push/PR them to the phpmailer gh-pages branch: https://github.com/PHPMailer/PHPMailer/tree/gh-pages 9 | -------------------------------------------------------------------------------- /php/PHPMailer/docs/pop3_article.txt: -------------------------------------------------------------------------------- 1 | This is built for PHP Mailer 1.72 and was not tested with any previous version. It was developed under PHP 4.3.11 (E_ALL). It works under PHP 5 and 5.1 with E_ALL, but not in Strict mode due to var deprecation (but then neither does PHP Mailer either!). It follows the RFC 1939 standard explicitly and is fully commented. 2 | 3 | With that noted, here is how to implement it: 4 | 5 | I didn't want to modify the PHP Mailer classes at all, so you will have to include/require this class along with the base one. It can sit quite happily in the phpmailer directory. 6 | 7 | When you need it, create your POP3 object 8 | 9 | Right before I invoke PHP Mailer I activate the POP3 authorisation. POP3 before SMTP is a process whereby you login to your web hosts POP3 mail server BEFORE sending out any emails via SMTP. The POP3 logon 'verifies' your ability to send email by SMTP, which typically otherwise blocks you. On my web host (Pair Networks) a single POP3 logon is enough to 'verify' you for 90 minutes. Here is some sample PHP code that activates the POP3 logon and then sends an email via PHP Mailer: 10 | 11 | authorise('pop3.example.com', 110, 30, 'mailer', 'password', 1); 13 | $mail = new PHPMailer(); $mail->SMTPDebug = 2; $mail->isSMTP(); 14 | $mail->isHTML(false); $mail->Host = 'relay.example.com'; 15 | $mail->From = 'mailer@example.com'; 16 | $mail->FromName = 'Example Mailer'; 17 | $mail->Subject = 'My subject'; 18 | $mail->Body = 'Hello world'; 19 | $mail->addAddress('rich@corephp.co.uk', 'Richard Davey'); 20 | if (!$mail->send()) { 21 | echo $mail->ErrorInfo; 22 | } 23 | ?> 24 | 25 | The PHP Mailer parts of this code should be obvious to anyone who has used PHP Mailer before. One thing to note - you almost certainly will not need to use SMTP Authentication *and* POP3 before SMTP together. The Authorisation method is a proxy method to all of the others within that class. There are connect, Logon and disconnect methods available, but I wrapped them in the single Authorisation one to make things easier. 26 | The Parameters 27 | 28 | The authorise parameters are as follows: 29 | 30 | $pop->authorise('pop3.example.com', 110, 30, 'mailer', 'password', 1); 31 | 32 | 1. pop3.example.com - The POP3 Mail Server Name (hostname or IP address) 33 | 2. 110 - The POP3 Port on which to connect (default is usually 110, but check with your host) 34 | 3. 30 - A connection time-out value (in seconds) 35 | 4. mailer - The POP3 Username required to logon 36 | 5. password - The POP3 Password required to logon 37 | 6. 1 - The class debug level (0 = off, 1+ = debug output is echoed to the browser) 38 | 39 | Final Comments + the Download 40 | 41 | 1) This class does not support APOP connections. This is only because I did not have an APOP server to test with, but if you'd like to see that added just contact me. 42 | 43 | 2) Opening and closing lots of POP3 connections can be quite a resource/network drain. If you need to send a whole batch of emails then just perform the authentication once at the start, and then loop through your mail sending script. Providing this process doesn't take longer than the verification period lasts on your POP3 server, you should be fine. With my host that period is 90 minutes, i.e. plenty of time. 44 | 45 | 3) If you have heavy requirements for this script (i.e. send a LOT of email on a frequent basis) then I would advise seeking out an alternative sending method (direct SMTP ideally). If this isn't possible then you could modify this class so the 'last authorised' date is recorded somewhere (MySQL, Flat file, etc) meaning you only open a new connection if the old one has expired, saving you precious overhead. 46 | 47 | 4) There are lots of other POP3 classes for PHP available. However most of them implement the full POP3 command set, where-as this one is purely for authentication, and much lighter as a result. However using any of the other POP3 classes to just logon to your server would have the same net result. At the end of the day, use whatever method you feel most comfortable with. 48 | Download 49 | 50 | My thanks to Chris Ryan for the inspiration (even if indirectly, via his SMTP class) 51 | -------------------------------------------------------------------------------- /php/PHPMailer/examples/contents.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/php/PHPMailer/examples/contents.html -------------------------------------------------------------------------------- /php/PHPMailer/examples/contentsutf8.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PHPMailer Test 6 | 7 | 8 |
9 |

This is a test of PHPMailer.

10 |
11 | PHPMailer rocks 12 |
13 |

This example uses HTML.

14 |

Chinese text: 郵件內容為空

15 |

Russian text: Пустое тело сообщения

16 |

Armenian text: Հաղորդագրությունը դատարկ է

17 |

Czech text: Prázdné tělo zprávy

18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /php/PHPMailer/examples/exceptions.phps: -------------------------------------------------------------------------------- 1 | setFrom('from@example.com', 'First Last'); 14 | //Set an alternative reply-to address 15 | $mail->addReplyTo('replyto@example.com', 'First Last'); 16 | //Set who the message is to be sent to 17 | $mail->addAddress('whoto@example.com', 'John Doe'); 18 | //Set the subject line 19 | $mail->Subject = 'PHPMailer Exceptions test'; 20 | //Read an HTML message body from an external file, convert referenced images to embedded, 21 | //and convert the HTML into a basic plain-text alternative body 22 | $mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); 23 | //Replace the plain text body with one created manually 24 | $mail->AltBody = 'This is a plain-text message body'; 25 | //Attach an image file 26 | $mail->addAttachment('images/phpmailer_mini.png'); 27 | //send the message 28 | //Note that we don't need check the response from this because it will throw an exception if it has trouble 29 | $mail->send(); 30 | echo "Message sent!"; 31 | } catch (phpmailerException $e) { 32 | echo $e->errorMessage(); //Pretty error messages from PHPMailer 33 | } catch (Exception $e) { 34 | echo $e->getMessage(); //Boring error messages from anything else! 35 | } 36 | -------------------------------------------------------------------------------- /php/PHPMailer/examples/gmail.phps: -------------------------------------------------------------------------------- 1 | isSMTP(); 17 | 18 | //Enable SMTP debugging 19 | // 0 = off (for production use) 20 | // 1 = client messages 21 | // 2 = client and server messages 22 | $mail->SMTPDebug = 2; 23 | 24 | //Ask for HTML-friendly debug output 25 | $mail->Debugoutput = 'html'; 26 | 27 | //Set the hostname of the mail server 28 | $mail->Host = 'smtp.gmail.com'; 29 | // use 30 | // $mail->Host = gethostbyname('smtp.gmail.com'); 31 | // if your network does not support SMTP over IPv6 32 | 33 | //Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission 34 | $mail->Port = 587; 35 | 36 | //Set the encryption system to use - ssl (deprecated) or tls 37 | $mail->SMTPSecure = 'tls'; 38 | 39 | //Whether to use SMTP authentication 40 | $mail->SMTPAuth = true; 41 | 42 | //Username to use for SMTP authentication - use full email address for gmail 43 | $mail->Username = "username@gmail.com"; 44 | 45 | //Password to use for SMTP authentication 46 | $mail->Password = "yourpassword"; 47 | 48 | //Set who the message is to be sent from 49 | $mail->setFrom('from@example.com', 'First Last'); 50 | 51 | //Set an alternative reply-to address 52 | $mail->addReplyTo('replyto@example.com', 'First Last'); 53 | 54 | //Set who the message is to be sent to 55 | $mail->addAddress('whoto@example.com', 'John Doe'); 56 | 57 | //Set the subject line 58 | $mail->Subject = 'PHPMailer GMail SMTP test'; 59 | 60 | //Read an HTML message body from an external file, convert referenced images to embedded, 61 | //convert HTML into a basic plain-text alternative body 62 | $mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); 63 | 64 | //Replace the plain text body with one created manually 65 | $mail->AltBody = 'This is a plain-text message body'; 66 | 67 | //Attach an image file 68 | $mail->addAttachment('images/phpmailer_mini.png'); 69 | 70 | //send the message, check for errors 71 | if (!$mail->send()) { 72 | echo "Mailer Error: " . $mail->ErrorInfo; 73 | } else { 74 | echo "Message sent!"; 75 | } 76 | -------------------------------------------------------------------------------- /php/PHPMailer/examples/gmail_xoauth.phps: -------------------------------------------------------------------------------- 1 | isSMTP(); 21 | 22 | //Enable SMTP debugging 23 | // 0 = off (for production use) 24 | // 1 = client messages 25 | // 2 = client and server messages 26 | $mail->SMTPDebug = 0; 27 | 28 | //Ask for HTML-friendly debug output 29 | $mail->Debugoutput = 'html'; 30 | 31 | //Set the hostname of the mail server 32 | $mail->Host = 'smtp.gmail.com'; 33 | 34 | //Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission 35 | $mail->Port = 587; 36 | 37 | //Set the encryption system to use - ssl (deprecated) or tls 38 | $mail->SMTPSecure = 'tls'; 39 | 40 | //Whether to use SMTP authentication 41 | $mail->SMTPAuth = true; 42 | 43 | //Set AuthType 44 | $mail->AuthType = 'XOAUTH2'; 45 | 46 | //User Email to use for SMTP authentication - Use the same Email used in Google Developer Console 47 | $mail->oauthUserEmail = "someone@gmail.com"; 48 | 49 | //Obtained From Google Developer Console 50 | $mail->oauthClientId = "RANDOMCHARS-----duv1n2.apps.googleusercontent.com"; 51 | 52 | //Obtained From Google Developer Console 53 | $mail->oauthClientSecret = "RANDOMCHARS-----lGyjPcRtvP"; 54 | 55 | //Obtained By running get_oauth_token.php after setting up APP in Google Developer Console. 56 | //Set Redirect URI in Developer Console as [https/http]:////get_oauth_token.php 57 | // eg: http://localhost/phpmail/get_oauth_token.php 58 | $mail->oauthRefreshToken = "RANDOMCHARS-----DWxgOvPT003r-yFUV49TQYag7_Aod7y0"; 59 | 60 | //Set who the message is to be sent from 61 | //For gmail, this generally needs to be the same as the user you logged in as 62 | $mail->setFrom('from@example.com', 'First Last'); 63 | 64 | //Set who the message is to be sent to 65 | $mail->addAddress('whoto@example.com', 'John Doe'); 66 | 67 | //Set the subject line 68 | $mail->Subject = 'PHPMailer GMail SMTP test'; 69 | 70 | //Read an HTML message body from an external file, convert referenced images to embedded, 71 | //convert HTML into a basic plain-text alternative body 72 | $mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); 73 | 74 | //Replace the plain text body with one created manually 75 | $mail->AltBody = 'This is a plain-text message body'; 76 | 77 | //Attach an image file 78 | $mail->addAttachment('images/phpmailer_mini.png'); 79 | 80 | //send the message, check for errors 81 | if (!$mail->send()) { 82 | echo "Mailer Error: " . $mail->ErrorInfo; 83 | } else { 84 | echo "Message sent!"; 85 | } 86 | -------------------------------------------------------------------------------- /php/PHPMailer/examples/images/phpmailer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/php/PHPMailer/examples/images/phpmailer.png -------------------------------------------------------------------------------- /php/PHPMailer/examples/images/phpmailer_mini.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uwcartlab/mapstudy/f901368acf7e4f659d21c9a999cb048b21418b4c/php/PHPMailer/examples/images/phpmailer_mini.png -------------------------------------------------------------------------------- /php/PHPMailer/examples/mail.phps: -------------------------------------------------------------------------------- 1 | setFrom('from@example.com', 'First Last'); 12 | //Set an alternative reply-to address 13 | $mail->addReplyTo('replyto@example.com', 'First Last'); 14 | //Set who the message is to be sent to 15 | $mail->addAddress('whoto@example.com', 'John Doe'); 16 | //Set the subject line 17 | $mail->Subject = 'PHPMailer mail() test'; 18 | //Read an HTML message body from an external file, convert referenced images to embedded, 19 | //convert HTML into a basic plain-text alternative body 20 | $mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); 21 | //Replace the plain text body with one created manually 22 | $mail->AltBody = 'This is a plain-text message body'; 23 | //Attach an image file 24 | $mail->addAttachment('images/phpmailer_mini.png'); 25 | 26 | //send the message, check for errors 27 | if (!$mail->send()) { 28 | echo "Mailer Error: " . $mail->ErrorInfo; 29 | } else { 30 | echo "Message sent!"; 31 | } 32 | -------------------------------------------------------------------------------- /php/PHPMailer/examples/mailing_list.phps: -------------------------------------------------------------------------------- 1 | isSMTP(); 14 | $mail->Host = 'smtp.example.com'; 15 | $mail->SMTPAuth = true; 16 | $mail->SMTPKeepAlive = true; // SMTP connection will not close after each email sent, reduces SMTP overhead 17 | $mail->Port = 25; 18 | $mail->Username = 'yourname@example.com'; 19 | $mail->Password = 'yourpassword'; 20 | $mail->setFrom('list@example.com', 'List manager'); 21 | $mail->addReplyTo('list@example.com', 'List manager'); 22 | 23 | $mail->Subject = "PHPMailer Simple database mailing list test"; 24 | 25 | //Same body for all messages, so set this before the sending loop 26 | //If you generate a different body for each recipient (e.g. you're using a templating system), 27 | //set it inside the loop 28 | $mail->msgHTML($body); 29 | //msgHTML also sets AltBody, but if you want a custom one, set it afterwards 30 | $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; 31 | 32 | //Connect to the database and select the recipients from your mailing list that have not yet been sent to 33 | //You'll need to alter this to match your database 34 | $mysql = mysqli_connect('localhost', 'username', 'password'); 35 | mysqli_select_db($mysql, 'mydb'); 36 | $result = mysqli_query($mysql, 'SELECT full_name, email, photo FROM mailinglist WHERE sent = false'); 37 | 38 | foreach ($result as $row) { //This iterator syntax only works in PHP 5.4+ 39 | $mail->addAddress($row['email'], $row['full_name']); 40 | if (!empty($row['photo'])) { 41 | $mail->addStringAttachment($row['photo'], 'YourPhoto.jpg'); //Assumes the image data is stored in the DB 42 | } 43 | 44 | if (!$mail->send()) { 45 | echo "Mailer Error (" . str_replace("@", "@", $row["email"]) . ') ' . $mail->ErrorInfo . '
'; 46 | break; //Abandon sending 47 | } else { 48 | echo "Message sent to :" . $row['full_name'] . ' (' . str_replace("@", "@", $row['email']) . ')
'; 49 | //Mark it as sent in the DB 50 | mysqli_query( 51 | $mysql, 52 | "UPDATE mailinglist SET sent = true WHERE email = '" . 53 | mysqli_real_escape_string($mysql, $row['email']) . "'" 54 | ); 55 | } 56 | // Clear all addresses and attachments for next loop 57 | $mail->clearAddresses(); 58 | $mail->clearAttachments(); 59 | } 60 | -------------------------------------------------------------------------------- /php/PHPMailer/examples/pop_before_smtp.phps: -------------------------------------------------------------------------------- 1 | isSMTP(); 18 | //Enable SMTP debugging 19 | // 0 = off (for production use) 20 | // 1 = client messages 21 | // 2 = client and server messages 22 | $mail->SMTPDebug = 2; 23 | //Ask for HTML-friendly debug output 24 | $mail->Debugoutput = 'html'; 25 | //Set the hostname of the mail server 26 | $mail->Host = "mail.example.com"; 27 | //Set the SMTP port number - likely to be 25, 465 or 587 28 | $mail->Port = 25; 29 | //Whether to use SMTP authentication 30 | $mail->SMTPAuth = false; 31 | //Set who the message is to be sent from 32 | $mail->setFrom('from@example.com', 'First Last'); 33 | //Set an alternative reply-to address 34 | $mail->addReplyTo('replyto@example.com', 'First Last'); 35 | //Set who the message is to be sent to 36 | $mail->addAddress('whoto@example.com', 'John Doe'); 37 | //Set the subject line 38 | $mail->Subject = 'PHPMailer POP-before-SMTP test'; 39 | //Read an HTML message body from an external file, convert referenced images to embedded, 40 | //and convert the HTML into a basic plain-text alternative body 41 | $mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); 42 | //Replace the plain text body with one created manually 43 | $mail->AltBody = 'This is a plain-text message body'; 44 | //Attach an image file 45 | $mail->addAttachment('images/phpmailer_mini.png'); 46 | //send the message 47 | //Note that we don't need check the response from this because it will throw an exception if it has trouble 48 | $mail->send(); 49 | echo "Message sent!"; 50 | } catch (phpmailerException $e) { 51 | echo $e->errorMessage(); //Pretty error messages from PHPMailer 52 | } catch (Exception $e) { 53 | echo $e->getMessage(); //Boring error messages from anything else! 54 | } 55 | -------------------------------------------------------------------------------- /php/PHPMailer/examples/scripts/shAutoloader.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 3 | var sh = SyntaxHighlighter; 4 | 5 | /** 6 | * Provides functionality to dynamically load only the brushes that a needed to render the current page. 7 | * 8 | * There are two syntaxes that autoload understands. For example: 9 | * 10 | * SyntaxHighlighter.autoloader( 11 | * [ 'applescript', 'Scripts/shBrushAppleScript.js' ], 12 | * [ 'actionscript3', 'as3', 'Scripts/shBrushAS3.js' ] 13 | * ); 14 | * 15 | * or a more easily comprehendable one: 16 | * 17 | * SyntaxHighlighter.autoloader( 18 | * 'applescript Scripts/shBrushAppleScript.js', 19 | * 'actionscript3 as3 Scripts/shBrushAS3.js' 20 | * ); 21 | */ 22 | sh.autoloader = function() 23 | { 24 | var list = arguments, 25 | elements = sh.findElements(), 26 | brushes = {}, 27 | scripts = {}, 28 | all = SyntaxHighlighter.all, 29 | allCalled = false, 30 | allParams = null, 31 | i 32 | ; 33 | 34 | SyntaxHighlighter.all = function(params) 35 | { 36 | allParams = params; 37 | allCalled = true; 38 | }; 39 | 40 | function addBrush(aliases, url) 41 | { 42 | for (var i = 0; i < aliases.length; i++) 43 | brushes[aliases[i]] = url; 44 | }; 45 | 46 | function getAliases(item) 47 | { 48 | return item.pop 49 | ? item 50 | : item.split(/\s+/) 51 | ; 52 | } 53 | 54 | // create table of aliases and script urls 55 | for (i = 0; i < list.length; i++) 56 | { 57 | var aliases = getAliases(list[i]), 58 | url = aliases.pop() 59 | ; 60 | 61 | addBrush(aliases, url); 62 | } 63 | 64 | // dynamically add