text:
.file-loading input[type=file],
input[type=file].file-loading {
    width: 0;
    height: 0;
}

.file-no-browse {
    position: absolute;
    left: 50%;
    bottom: 20%;
    width: 1px;
    height: 1px;
    font-size: 0;
    opacity: 0;
    border: none;
    background: none;
    outline: none;
    box-shadow: none;
}

.kv-hidden,
.file-caption-icon,
.file-zoom-dialog .modal-header:before,
.file-zoom-dialog .modal-header:after,
.file-input-new .file-preview,
.file-input-new .close,
.file-input-new .glyphicon-file,
.file-input-new .fileinput-remove-button,
.file-input-new .fileinput-upload-button,
.file-input-new .no-browse .input-group-btn,
.file-input-ajax-new .fileinput-remove-button,
.file-input-ajax-new .fileinput-upload-button,
.file-input-ajax-new .no-browse .input-group-btn,
.hide-content .kv-file-content,
.is-locked .fileinput-upload-button,
.is-locked .fileinput-remove-button {
    display: none;
}

.file-caption .input-group {
    align-items: center;
}

.btn-file input[type=file],
.file-caption-icon,
.file-preview .fileinput-remove,
.krajee-default .file-thumb-progress,
.file-zoom-dialog .btn-navigate,
.file-zoom-dialog .floating-buttons {
    position: absolute;
}

.file-caption-icon .kv-caption-icon {
    line-height: inherit;
}

.file-input,
.file-loading:before,
.btn-file,
.file-caption,
.file-preview,
.krajee-default.file-preview-frame,
.krajee-default .file-thumbnail-footer,
.file-zoom-dialog .modal-dialog {
    position: relative;
}

.file-error-message pre,
.file-error-message ul,
.krajee-default .file-actions,
.krajee-default .file-other-error {
    text-align: left;
}

.file-error-message pre,
.file-error-message ul {
    margin: 0;
}

.krajee-default .file-drag-handle,
.krajee-default .file-upload-indicator {
    float: left;
    margin-top: 10px;
    width: 16px;
    height: 16px;
}

.file-thumb-progress .progress,
.file-thumb-progress .progress-bar {
    font-family: Verdana, Helvetica, sans-serif;
    font-size: 0.7rem;
}

.krajee-default .file-thumb-progress .progress,
.kv-upload-progress .progress {
    background-color: #ccc;
}

.krajee-default .file-caption-info,
.krajee-default .file-size-info {
    display: block;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    width: 160px;
    height: 15px;
    margin: auto;
}

.file-zoom-content > .file-object.type-video,
.file-zoom-content > .file-object.type-flash,
.file-zoom-content > .file-object.type-image {
    max-width: 100%;
    max-height: 100%;
    width: auto;
}

.file-zoom-content > .file-object.type-video,
.file-zoom-content > .file-object.type-flash {
    height: 100%;
}

.file-zoom-content > .file-object.type-pdf,
.file-zoom-content > .file-object.type-html,
.file-zoom-content > .file-object.type-text,
.file-zoom-content > .file-object.type-default {
    width: 100%;
}

.file-loading:before {
    content: " Loading...";
    display: inline-block;
    padding-left: 20px;
    line-height: 16px;
    font-size: 13px;
    font-variant: small-caps;
    color: #999;
    background: transparent url(../img/loading.gif) top left no-repeat;
}

.file-object {
    margin: 0 0 -5px 0;
    padding: 0;
}

.btn-file {
    overflow: hidden;
}

.btn-file input[type=file] {
    top: 0;
    left: 0;
    min-width: 100%;
    min-height: 100%;
    text-align: right;
    opacity: 0;
    background: none repeat scroll 0 0 transparent;
    cursor: inherit;
    display: block;
}

.btn-file ::-ms-browse {
    font-size: 10000px;
    width: 100%;
    height: 100%;
}

.file-caption.icon-visible .file-caption-icon {
    display: inline-block;
}

.file-caption.icon-visible .file-caption-name {
    padding-left: 25px;
}

.file-caption.icon-visible > .input-group-lg .file-caption-name {
    padding-left: 30px;
}

.file-caption.icon-visible > .input-group-sm .file-caption-name {
    padding-left: 22px;
}

.file-caption-name:not(.file-caption-disabled) {
    background-color: transparent;
}

.file-caption-name.file-processing {
    font-style: italic;
    border-color: #bbb;
    opacity: 0.5;
}

.file-caption-icon {
    padding: 7px 5px;
    left: 4px;
}

.input-group-lg .file-caption-icon {
    font-size: 1.25rem;
}

.input-group-sm .file-caption-icon {
    font-size: 0.875rem;
    padding: 0.25rem;
}

.file-error-message {
    color: #a94442;
    background-color: #f2dede;
    margin: 5px;
    border: 1px solid #ebccd1;
    border-radius: 4px;
    padding: 15px;
}

.file-error-message pre {
    margin: 5px 0;
}

.file-caption-disabled {
    background-color: #eee;
    cursor: not-allowed;
    opacity: 1;
}

.file-preview {
    border-radius: 5px;
    border: 1px solid #ddd;
    padding: 8px;
    width: 100%;
    margin-bottom: 5px;
}

.file-preview .btn-xs {
    padding: 1px 5px;
    font-size: 12px;
    line-height: 1.5;
    border-radius: 3px;
}

.file-preview .fileinput-remove {
    top: 1px;
    right: 1px;
    line-height: 10px;
}

.file-preview .clickable {
    cursor: pointer;
}

.file-preview-image {
    font: 40px Impact, Charcoal, sans-serif;
    color: #008000;
    width: auto;
    height: auto;
    max-width: 100%;
    max-height: 100%;
}

.krajee-default.file-preview-frame {
    margin: 8px;
    border: 1px solid rgba(0, 0, 0, 0.2);
    box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.2);
    padding: 6px;
    float: left;
    text-align: center;

}

.krajee-default.file-preview-frame .kv-file-content {
    width: 213px;
    height: 160px;
}

.krajee-default.file-preview-frame .kv-file-content.kv-pdf-rendered {
    width: 400px;
}

.krajee-default.file-preview-frame[data-template="audio"] .kv-file-content {
    width: 240px;
    height: 55px;
}

.krajee-default.file-preview-frame .file-thumbnail-footer {
    height: 70px;
}

.krajee-default.file-preview-frame:not(.file-preview-error):hover {
    border: 1px solid rgba(0, 0, 0, 0.3);
    box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.4);
}

.krajee-default .file-preview-text {
    color: #428bca;
    border: 1px solid #ddd;
    outline: none;
    resize: none;
}

.krajee-default .file-preview-html {
    border: 1px solid #ddd;
}

.krajee-default .file-other-icon {
    font-size: 6em;
    line-height: 1;
}

.krajee-default .file-footer-buttons {
    float: right;
}

.krajee-default .file-footer-caption {
    display: block;
    text-align: center;
    padding-top: 4px;
    font-size: 11px;
    color: #777;
    margin-bottom: 30px;
}

.file-upload-stats {
    font-size: 10px;
    text-align: center;
    width: 100%;
}

.kv-upload-progress .file-upload-stats {
    font-size: 12px;
    margin: -10px 0 5px;
}

.krajee-default .file-preview-error {
    opacity: 0.65;
    box-shadow: none;
}

.krajee-default .file-thumb-progress {
    top: 37px;
    left: 0;
    right: 0;
}

.krajee-default.kvsortable-ghost {
    background: #e1edf7;
    border: 2px solid #a1abff;
}

.krajee-default .file-preview-other:hover {
    opacity: 0.8;
}

.krajee-default .file-preview-frame:not(.file-preview-error) .file-footer-caption:hover {
    color: #000;
}

.kv-upload-progress .progress {
    height: 20px;
    margin: 10px 0;
    overflow: hidden;
}

.kv-upload-progress .progress-bar {
    height: 20px;
    font-family: Verdana, Helvetica, sans-serif;
}

/*noinspection CssOverwrittenProperties*/

.file-zoom-dialog .file-other-icon {
    font-size: 22em;
    font-size: 50vmin;
}

.file-zoom-dialog .modal-dialog {
    width: auto;
}

.file-zoom-dialog .modal-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
}

.file-zoom-dialog .btn-navigate {
    margin: 0 0.1rem;
    padding: 0;
    font-size: 1.2rem;
    width: 2.4rem;
    height: 2.4rem;
    top: 50%;
    border-radius: 50%;
    text-align: center;
}

.btn-navigate * {
    width: auto;
}

.file-zoom-dialog .floating-buttons {
    top: 5px;
    right: 10px;
}

.file-zoom-dialog .btn-kv-prev {
    left: 0;
}

.file-zoom-dialog .btn-kv-next {
    right: 0;
}

.file-zoom-dialog .kv-zoom-header {
    padding: 0.5rem;
}

.file-zoom-dialog .kv-zoom-body {
    padding: 0.25rem;
}

.file-zoom-dialog .kv-zoom-description {
    position: absolute;
    opacity: 0.8;
    font-size: 0.8rem;
    background-color: #1a1a1a;
    padding: 1rem;
    text-align: center;
    border-radius: 0.5rem;
    color: #fff;
    left: 15%;
    right: 15%;
    bottom: 15%;
}

.file-zoom-dialog .kv-desc-hide {
    float: right;
    color: #fff;
    padding: 0 0.1rem;
    background: none;
    border: none;
}

.file-zoom-dialog .kv-desc-hide:hover {
    opacity: 0.7;
}

.file-zoom-dialog .kv-desc-hide:focus {
    opacity: 0.9;
}

.file-input-new .no-browse .form-control {
    border-top-right-radius: 4px;
    border-bottom-right-radius: 4px;
}

.file-input-ajax-new .no-browse .form-control {
    border-top-right-radius: 4px;
    border-bottom-right-radius: 4px;
}

.file-caption {
    width: 100%;
    position: relative;
}

.file-thumb-loading {
    background: transparent url(../img/loading.gif) no-repeat scroll center center content-box !important;
}

.file-drop-zone {
    border: 1px dashed #aaa;
    min-height: 260px;
    border-radius: 4px;
    text-align: center;
    vertical-align: middle;
    margin: 12px 15px 12px 12px;
    padding: 5px;
}

.file-drop-zone.clickable:hover {
    border: 2px dashed #999;
}

.file-drop-zone.clickable:focus {
    border: 2px solid #5acde2;
}

.file-drop-zone .file-preview-thumbnails {
    cursor: default;
}

.file-drop-zone-title {
    color: #aaa;
    font-size: 1.6em;
    text-align: center;
    padding: 85px 10px;
    cursor: default;
}

.file-highlighted {
    border: 2px dashed #999 !important;
    background-color: #eee;
}

.file-uploading {
    background: url(../img/loading-sm.gif) no-repeat center bottom 10px;
    opacity: 0.65;
}

.file-zoom-fullscreen .modal-dialog {
    min-width: 100%;
    margin: 0;
}

.file-zoom-fullscreen .modal-content {
    border-radius: 0;
    box-shadow: none;
    min-height: 100vh;
}

.file-zoom-fullscreen .kv-zoom-body {
    overflow-y: auto;
}

.floating-buttons {
    z-index: 3000;
}

.floating-buttons .btn-kv {
    margin-left: 3px;
    z-index: 3000;
}

.kv-zoom-actions {
    min-width: 140px;
}

.kv-zoom-actions .btn-kv {
    margin-left: 3px;
}

.file-zoom-content {
    text-align: center;
    white-space: nowrap;
    min-height: 300px;
}

.file-zoom-content:hover {
    background: transparent;
}

.file-zoom-content .file-preview-image {
    max-height: 100%;
}

.file-zoom-content .file-preview-video {
    max-height: 100%;
}

.file-zoom-content > .file-object.type-image {
    height: auto;
    min-height: inherit;
}

.file-zoom-content > .file-object.type-audio {
    width: auto;
    height: 30px;
}

@media (min-width: 576px) {
    .file-zoom-dialog .modal-dialog {
        max-width: 500px;
    }
}

@media (min-width: 992px) {
    .file-zoom-dialog .modal-lg {
        max-width: 800px;
    }
}

@media (max-width: 767px) {
    .file-preview-thumbnails {
        display: flex;
        justify-content: center;
        align-items: center;
        flex-direction: column;
    }

    .file-zoom-dialog .modal-header {
        flex-direction: column;
    }
}

@media (max-width: 350px) {
    .krajee-default.file-preview-frame:not([data-template="audio"]) .kv-file-content {
        width: 160px;
    }
}

@media (max-width: 420px) {
    .krajee-default.file-preview-frame .kv-file-content.kv-pdf-rendered {
        width: 100%;
    }
}

.file-loading[dir=rtl]:before {
    background: transparent url(../img/loading.gif) top right no-repeat;
    padding-left: 0;
    padding-right: 20px;
}

.clickable .file-drop-zone-title {
    cursor: pointer;
}

.file-sortable .file-drag-handle:hover {
    opacity: 0.7;
}

.file-sortable .file-drag-handle {
    cursor: grab;
    opacity: 1;
}

.file-grabbing,
.file-grabbing * {
    cursor: not-allowed !important;
}

.file-grabbing .file-preview-thumbnails * {
    cursor: grabbing !important;
}

.file-preview-frame.sortable-chosen {
    background-color: #d9edf7;
    border-color: #17a2b8;
    box-shadow: none !important;
}

.file-preview .kv-zoom-cache {
    display: none;
}

.file-preview-other-frame, .file-preview-object, .kv-zoom-body {
    display: flex;
    align-items: center;
    justify-content: center;
}


text:
<!DOCTYPE html>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

<title>Voting Wars: Rights | Power | Privilege - A multimedia investigation of voting rights and election participation</title>
<meta property="og:title" content="Voting Wars: Rights | Power | Privilege" />
<meta name="description" content="A multimedia investigation of voting rights and election participation" />
<meta property="og:description" content="A multimedia investigation of voting rights and election participation" />
<link rel="canonical" href="https://votingwars.news21.com/interactives/overview-data-cards.html" />
<meta property="og:url" content="https://votingwars.news21.com/interactives/overview-data-cards.html" />
<meta property="og:site_name" content="Voting Wars: Rights | Power | Privilege" />
<meta name="twitter:card" content="summary" />
<meta name="twitter:site" content="@news21" />

    <link href="https://votingwars.news21.com/css/bootstrap.min.css" rel="stylesheet">
    <link href="https://votingwars.news21.com/css/animate.min.css" rel="stylesheet">
    <link href="https://votingwars.news21.com/css/main.css" rel="stylesheet">

    <link href='//fonts.googleapis.com/css?family=Roboto+Slab:300,400,700' rel='stylesheet' type='text/css'>
    <link href='//fonts.googleapis.com/css?family=Roboto:300,400,700,900' rel='stylesheet' type='text/css'>
    <link href='//fonts.googleapis.com/css?family=Roboto+Condensed:300,400italic,400,700' rel='stylesheet' type='text/css'>

    <link rel="apple-touch-icon" sizes="57x57" href="/apple-icon-57x57.png">
    <link rel="apple-touch-icon" sizes="60x60" href="/apple-icon-60x60.png">
    <link rel="apple-touch-icon" sizes="72x72" href="/apple-icon-72x72.png">
    <link rel="apple-touch-icon" sizes="76x76" href="/apple-icon-76x76.png">
    <link rel="apple-touch-icon" sizes="114x114" href="/apple-icon-114x114.png">
    <link rel="apple-touch-icon" sizes="120x120" href="/apple-icon-120x120.png">
    <link rel="apple-touch-icon" sizes="144x144" href="/apple-icon-144x144.png">
    <link rel="apple-touch-icon" sizes="152x152" href="/apple-icon-152x152.png">
    <link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png">
    <link rel="icon" type="image/png" sizes="192x192"  href="/android-icon-192x192.png">
    <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
    <link rel="icon" type="image/png" sizes="96x96" href="/favicon-96x96.png">
    <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
    <link rel="manifest" href="/manifest.json">
    <meta name="msapplication-TileColor" content="#6C8182">
    <meta name="msapplication-TileImage" content="/ms-icon-144x144.png">
    <meta name="theme-color" content="#6C8182">

      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
        Toggle navigation

      </button>

Race and Rights

Power and Privilege

Facing the Future

Index

Blog

About

    				<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 100 100" enable-background="new 0 0 100 100" xml:space="preserve">
    					<path fill="#e0dfde" d="M58.1,37.3h-2.6c-1.7,0-4.7-0.2-4.7,1.5v3.4h9.5l-0.7,8.6h-8.8v22h-7.3v-22h-4.9v-8.6h6.1c0,0,0-0.7,0-5.5
    											c0-5.5,3-8,9.5-8h3.9V37.3z"></path>
    					<circle class="icon-outline" fill="none" stroke="#efefef" stroke-width="2" stroke-miterlimit="10" cx="50" cy="50" r="44"></circle>
    				</svg>

    				<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 100 100" enable-background="new 0 0 100 100" xml:space="preserve">
    					<path fill="#e0dfde" d="M67.3,42.4c0.5,12.1-8.5,25.7-24.6,25.7c-4.9,0-9.4-1.4-13.3-3.9c4.6,0.5,9.2-0.7,12.8-3.6
    											c-3.8-0.1-7-2.6-8.1-6c1.4,0.3,2.7,0.2,3.9-0.1c-4.2-0.8-7-4.6-6.9-8.6c1.2,0.7,2.5,1,3.9,1.1c-3.9-2.6-4.9-7.6-2.7-11.5
    											c4.3,5.2,10.6,8.7,17.8,9c-1.3-5.4,2.8-10.6,8.4-10.6c2.5,0,4.7,1.1,6.3,2.7c2-0.4,3.8-1.1,5.5-2.1c-0.6,2-2,3.7-3.8,4.8
    											c1.7-0.2,3.4-0.7,5-1.4C70.4,39.7,68.9,41.2,67.3,42.4z"></path>
    					<circle class="icon-outline" fill="none" stroke="#efefef" stroke-width="2" stroke-miterlimit="10" cx="50" cy="50" r="44"></circle>
    				</svg>

<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
<link rel="stylesheet" href="css/mix.css" type="text/css" media="screen" charset="utf-8" />
<link rel="stylesheet" href="css/custom_modal.css" type="text/css" media="screen" charset="utf-8" />

States' Voting Requirements

            <button class="filter-btn" data-filter="all">All</button>
            <button class="filter-btn" data-filter=".citproof">Proof of Citizenship Required</button>
            <button class="filter-btn" data-filter=".nocitproof">Proof of Citizenship Not Required</button>
            <button class="filter-btn" data-filter=".sdr">Offers same-day registration:</button>

States' Voting Practices

            <button class="sort-btn" data-sort="purge:desc">Purged</button>
            <button class="sort-btn" data-sort="rejected:desc">Provisional Rejected</button>
            <button class="sort-btn" data-sort="early:asc">Days of early voting</button>
            <button class="sort-btn" data-sort="id:desc">Voter ID</button>
            <button class="sort-btn" data-sort="felon:desc">Felon voting</button>

Alabama

Previous "Section 5" state	YES

New voting requirements since 2012	YES

Alaska

Previous "Section 5" state	YES

New voting requirements since 2012	NO

Arizona

Previous "Section 5" state	YES

New voting requirements since 2012	YES

Arkansas

Previous "Section 5" state	NO

New voting requirements since 2012	YES

California

Previous "Section 5" state	NO

New voting requirements since 2012	NO

Colorado

Previous "Section 5" state	NO

New voting requirements since 2012	YES

Connecticut

Previous "Section 5" state	NO

New voting requirements since 2012	NO

Delaware

Previous "Section 5" state	NO

New voting requirements since 2012	NO

Florida

Previous "Section 5" state	NO

New voting requirements since 2012	NO

Georgia

Previous "Section 5" state	YES

New voting requirements since 2012	YES

Hawaii

Previous "Section 5" state	NO

New voting requirements since 2012	NO

Idaho

Previous "Section 5" state	NO

New voting requirements since 2012	NO

Illinois

Previous "Section 5" state	NO

New voting requirements since 2012	NO

Indiana

Previous "Section 5" state	NO

New voting requirements since 2012	YES

Iowa

Previous "Section 5" state	NO

New voting requirements since 2012	NO

Kansas

Previous "Section 5" state	NO

New voting requirements since 2012	YES

Kentucky

Previous "Section 5" state	NO

New voting requirements since 2012	NO

Louisiana

Previous "Section 5" state	YES

New voting requirements since 2012	NO

Maine

Previous "Section 5" state	NO

New voting requirements since 2012	NO

Maryland

Previous "Section 5" state	NO

New voting requirements since 2012	NO

Massachusetts

Previous "Section 5" state	NO

New voting requirements since 2012	NO

Michigan

Previous "Section 5" state	NO

New voting requirements since 2012	NO

Minnesota

Previous "Section 5" state	NO

New voting requirements since 2012	NO

Mississippi

Previous "Section 5" state	YES

New voting requirements since 2012	YES

Missouri

Previous "Section 5" state	NO

New voting requirements since 2012	NO

Montana

Previous "Section 5" state	NO

New voting requirements since 2012	NO

Nebraska

Previous "Section 5" state	NO

New voting requirements since 2012	YES

Nevada

Previous "Section 5" state	NO

New voting requirements since 2012	NO

New Hampshire

Previous "Section 5" state	NO

New voting requirements since 2012	YES

New Jersey

Previous "Section 5" state	NO

New voting requirements since 2012	YES

New Mexico

Previous "Section 5" state	NO

New voting requirements since 2012	NO

New York

Previous "Section 5" state	NO

New voting requirements since 2012	NO

North Carolina

Previous "Section 5" state	NO

New voting requirements since 2012	YES

North Dakota

Previous "Section 5" state	NO

New voting requirements since 2012	YES

Ohio

Previous "Section 5" state	NO

New voting requirements since 2012	YES

Oklahoma

Previous "Section 5" state	NO

New voting requirements since 2012	NO

Oregon

Previous "Section 5" state	NO

New voting requirements since 2012	NO

Pennsylvania

Previous "Section 5" state	NO

New voting requirements since 2012	NO

Rhode Island

Previous "Section 5" state	NO

New voting requirements since 2012	YES

South Carolina

Previous "Section 5" state	YES

New voting requirements since 2012	YES

South Dakota

Previous "Section 5" state	NO

New voting requirements since 2012	NO

Tennessee

Previous "Section 5" state	NO

New voting requirements since 2012	YES

Texas

Previous "Section 5" state	YES

New voting requirements since 2012	YES

Utah

Previous "Section 5" state	NO

New voting requirements since 2012	NO

Vermont

Previous "Section 5" state	NO

New voting requirements since 2012	NO

Virginia

Previous "Section 5" state	YES

New voting requirements since 2012	YES

Washington

Previous "Section 5" state	NO

New voting requirements since 2012	NO

Washington, D.C.

Previous "Section 5" state	NO

New voting requirements since 2012	NO

West Virginia

Previous "Section 5" state	NO

New voting requirements since 2012	NO

Wisconsin

Previous "Section 5" state	NO

New voting requirements since 2012	YES

Wyoming

Previous "Section 5" state	NO

New voting requirements since 2012	NO

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Alabama

Voter ID: Yes

Alabama passed HB 19 in 2011, but it didn't go into effect until 2014, after the Shelby County v. Holder decision. Some may consider Alabama's voter ID law to be strict, but if a voter can't provide a government-issued or student ID with a photo, he/she can still have their vote counted if two election officials sign a sworn statement saying they know the person is an eligible voter on the poll list. If not, the person has until 5 p.m. on the Friday after the election to bring the required ID.

Offers same-day registration: No

In 2014, Alabama extended the window between the close of registration from 10 to 14 days.

Number of days in early voting window: 0

In 2014, Alabama extended the window between the close of registration from 10 to 14 days.

Proof of Citizenship:&nbspYes*

Alabama received federal approval to require proof of citizenship documentation for voter registration in January 2016. However, Alabama will not be implemeting this policy for the November 2016 election.

Percent of voters removed from rolls: 17.2%

Number of days between registration deadline and election: 14

In 2014, Alabama extended the window between the close of registration from 10 to 14 days.

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: Yes

Registration Drive Requirements: No

Limits on ballot collection: No

Restoration of felon voting rights:&nbspMay permanently lose right to vote

Percent of provisional ballots rejected: 36.2%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Alaska

Voter ID: Yes

Offers same-day registration: No

Number of days in early voting window: 15

Proof of Citizenship: No

Percent of voters removed from rolls: 10.4%

Number of days between registration deadline and election: 30

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: No

Registration Drive Requirements: No

Limits on ballot collection: No

Restoration of felon voting rights:&nbspRestoration after incarceration and parole or probation

Percent of provisional ballots rejected: 12.7%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Arizona

Voter ID: Yes

Offers same-day registration: No

Number of days in early voting window: 93

Proof of Citizenship:&nbspNo*

Arizona passed a law that required proof of citizenship documentation to register, but it was struck down by the Supreme Court in 2015.

Percent of voters removed from rolls: 9.9%

Number of days between registration deadline and election: 29

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: No

Registration Drive Requirements: No

Limits on ballot collection: Yes

HB 2023, passed in 2016, made it a felony crime for anyone other than a family member, household member, or caregiver of a voter to turn in the voter's ballot. This law is being challenged in a lawsuit filed by the Democratic National Committee.

Restoration of felon voting rights:&nbspMay permanently lose right to vote

Percent of provisional ballots rejected: 12.8%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Arkansas

Voter ID: Yes*

Arkansas passed AR S 2, a strict photo ID requirement, in 2013. It was struck down by the Arkansas Supreme Court, and their previous ID law remains the current requirement which is a non-strict non-photo ID requirement.

Offers same-day registration: No

Number of days in early voting window: 15

Proof of Citizenship: No

Percent of voters removed from rolls: 9.6%

Number of days between registration deadline and election: 29

Online/Motor vehicle office registration: DMV

Excuse needed to vote absentee: Yes

Arkansas passed SB 1067 in 2011, which requires people in long-term care or residential facilities or with disabilities to reapply for absentee ballots each year.

Registration Drive Requirements: Yes

Forms must be submitted within 21 days after being filled out, or 30 days before an election, whichever comes first.

Limits on ballot collection: No

A 2011 law requires a person who returns a voter's absentee ballot  to sign an oath in front of the county clerk.

Restoration of felon voting rights:&nbspRestoration after incarceration and parole

Percent of provisional ballots rejected: 58.6%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

California

Voter ID: No

Offers same-day registration: No

Number of days in early voting window: 29

Proof of Citizenship: No

Percent of voters removed from rolls: 4.4%

Number of days between registration deadline and election: 15

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: No

Registration Drive Requirements: Yes

Those seeking more than 50 registration cards must submit a distribution plan. Those collecting registration forms must provide their phone numbers and addresses to each person they register. Forms collected during a drive must be submitted three business days after they're filled out or by the registration deadline, whichever comes first.

Limits on ballot collection: Yes

A vote-by-mail voter can designate a spouse, family member, child, parent, grandparent, grandchild, or other family member who lives in the same house to to return the ballot.

Restoration of felon voting rights:&nbspRestoration after incarceration and parole

Percent of provisional ballots rejected: 10.8%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Colorado

Voter ID: Yes

Offers same-day registration: Yes

Number of days in early voting window: 15

Proof of Citizenship: No

Percent of voters removed from rolls: 4.5%

Number of days between registration deadline and election: 0

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: No

Registration Drive Requirements: Yes

Registration drives must register with the state. Those conducting a drive must file a statement of intent plus complete training and testing. The registration forms are required to be submitted within 15 business days of being signed, or before the registration deadline, whichever comes first. A 2016 law added training and reporting requirements for voter registration drives.

Limits on ballot collection: Yes

One person may turn in up to 10 ballots.

Restoration of felon voting rights:&nbspRestoration after incarceration and parole

Percent of provisional ballots rejected: 40.5%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Connecticut

Voter ID: Yes

Offers same-day registration: Yes

Number of days in early voting window: 0

Proof of Citizenship: No

Percent of voters removed from rolls: 8.3%

Number of days between registration deadline and election: 0

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: Yes

Registration Drive Requirements: No

Limits on ballot collection: No

Restoration of felon voting rights:&nbspRestoration after incarceration and parole

Percent of provisional ballots rejected: 47.4%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Delaware

Voter ID: Yes

Offers same-day registration: No

Number of days in early voting window: 0

Proof of Citizenship: No

Percent of voters removed from rolls: 7.3%

Number of days between registration deadline and election: 24

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: Yes

Registration Drive Requirements: Yes

If using the state's registration form, drives must register with the state, plus organizers must go through training and keep logs of every form/person soliticited. The completed forms and log must be submitted 5 days after completed. However, online registration or the federal form can be used at drives up until the state's normal registration deadline.

Limits on ballot collection: No

Restoration of felon voting rights:&nbspMay permanently lose right to vote

Percent of provisional ballots rejected: 87.1%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Florida

Voter ID: Yes

Offers same-day registration: No

Number of days in early voting window: 14

Proof of Citizenship: No

Percent of voters removed from rolls: 3.8%

Number of days between registration deadline and election: 29

Online/Motor vehicle office registration: DMV

Excuse needed to vote absentee: No

Registration Drive Requirements: Yes

In 2011, Florida passed new registration drive requirements (HB 1355) with a 48-hour deadline for drives to submit registration forms after they're signed, and the organization running the drive was required to account for all registration forms, even unused ones, and submit monthly reports even if there was no registration activity. The law also added a requirement that registration drives need to register with the state. A 2012 federal court order enjoined these measures. The deadline for drives to submit completed forms is now 10 days, and drives must first register with the state.

Limits on ballot collection: No

Restoration of felon voting rights:&nbspMay permanently lose right to vote

Percent of provisional ballots rejected: 42.8%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Georgia

Voter ID: Yes

Offers same-day registration: No

Number of days in early voting window: 21

Proof of Citizenship:&nbspY

Georgia received federal approval to require proof of citizenship documentation for voter registration in January 2016. However, Georgia will not be implementing this policy for the November 2016 election.

Percent of voters removed from rolls: 12.8%

Number of days between registration deadline and election: 28

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: No

Registration Drive Requirements: Yes

Forms collected during voter registration drives must be submitted within 10 days of their completion, or if it is within 14 days before the registration deadline, the forms must be submitted within 72 hours of their completion or before the deadline, whichever comes first.

Limits on ballot collection: Yes

No person can assist more than ten voters in one election.

Restoration of felon voting rights:&nbspRestoration after incarceration and parole or probation

Percent of provisional ballots rejected: 42.6%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Hawaii

Voter ID: Yes

Offers same-day registration: No

Number of days in early voting window: 11

Proof of Citizenship: No

Percent of voters removed from rolls: 7.2%

Number of days between registration deadline and election: 28

Online/Motor vehicle office registration: boh

Excuse needed to vote absentee: No

Registration Drive Requirements: No

Limits on ballot collection: No

Absentee ballots must be returned by mail.

Restoration of felon voting rights:&nbspRestoration after incarceration

Percent of provisional ballots rejected: 86.8%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Idaho

Voter ID: Yes

Offers same-day registration: Yes

Same-day registration is available at the polls if voters miss the deadline 25 days before the election.

Number of days in early voting window: 11

Same-day registration is available at the polls if voters miss the deadline 25 days before the election.

Proof of Citizenship: No

Percent of voters removed from rolls: 14.9%

Number of days between registration deadline and election: 0

Same-day registration is available at the polls if voters miss the deadline 25 days before the election.

Online/Motor vehicle office registration: No

Idaho is exempt from a federal law that requires voter registration to be offered at motor vehicle offices.

Excuse needed to vote absentee: No

Registration Drive Requirements: No

Limits on ballot collection: No

Restoration of felon voting rights:&nbspRestoration after incarceration and parole or probation

Percent of provisional ballots rejected: 0%

CHANGED FROM NA TO ZERO

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Illinois

Voter ID: No

Offers same-day registration: Yes

Number of days in early voting window: 40

Proof of Citizenship: No

Percent of voters removed from rolls: 0%

Number of days between registration deadline and election: 0

Online/Motor vehicle office registration:  Both

Illinois law "provides that online voter registration shall be open for no more than 36 nor less than seven days before such election."

Excuse needed to vote absentee: No

Registration Drive Requirements: Yes

Each county can decide if it wants to make training mandatory. Deputy registrars must return all forms by first class mail within two business days or by personal delivery within seven days, which is shortened to two days in the week before the registation deadline. These rules don't apply to drives using the federal form or online registration.

Limits on ballot collection: No

Restoration of felon voting rights:&nbspRestoration after incarceration

Percent of provisional ballots rejected: 26.9%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Indiana

Voter ID: Yes

In 2013, Indiana passed a law that further authorized election officials to demand ID at the polls.

Offers same-day registration: No

Number of days in early voting window: 28

Proof of Citizenship: No

Percent of voters removed from rolls: 17.6%

Number of days between registration deadline and election: 29

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: Yes

Registration Drive Requirements: No

Limits on ballot collection: Yes

Only a voter's attorney or household member may return an absentee ballot. Anyone else who returns the ballot is guilty of a felony.

Restoration of felon voting rights:&nbspRestoration after incarceration

In 2015, the state passed a law to barr "serious sex offenders" from voting in person on a school campus.

Percent of provisional ballots rejected: 71.6%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Iowa

Voter ID: No

Offers same-day registration: Yes

Number of days in early voting window: 40

Proof of Citizenship: No

Percent of voters removed from rolls: 7.9%

Number of days between registration deadline and election: 0

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: No

Registration Drive Requirements: No

Limits on ballot collection: No

Restoration of felon voting rights:&nbspMay permanently lose right to vote

Percent of provisional ballots rejected: 13.9%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Kansas

Voter ID: Yes

Offers same-day registration: No

Number of days in early voting window: 20

Proof of Citizenship:&nbspY

Kansas received federal approval to require proof of citizenship documentation for voter registration in January 2016.

Percent of voters removed from rolls: 7.7%

Number of days between registration deadline and election: 21

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: No

Registration Drive Requirements: Yes

Those seeking more than 25 registration forms at a time must submit a distribution plan.

Limits on ballot collection: No

Restoration of felon voting rights:&nbspRestoration after incarceration and parole or probation

Percent of provisional ballots rejected: 28.9%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Kentucky

Voter ID: Yes

Offers same-day registration: No

Number of days in early voting window: 0

Proof of Citizenship: No

Percent of voters removed from rolls: 2.9%

Number of days between registration deadline and election: 28

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: Yes

Registration Drive Requirements: No

Limits on ballot collection: No

Restoration of felon voting rights:&nbspMay permanently lose right to vote

Percent of provisional ballots rejected: 85.5%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Louisiana

Voter ID: Yes

Offers same-day registration: No

Number of days in early voting window: 7

Proof of Citizenship: No

Percent of voters removed from rolls: 10%

Number of days between registration deadline and election: 30

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: Yes

Registration Drive Requirements: Yes

Those wishing to hold a drive must submit an application to the state, and must turn in the forms within 30 days of completion.

Limits on ballot collection: Yes

If someone other than a family member turns in an absentee ballot, they need to sign a statement saying that the voter authorized them to turn in the ballot.

Restoration of felon voting rights:&nbspRestoration after incarceration and parole or probation

Percent of provisional ballots rejected: 66.6%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Maine

Voter ID: No

Offers same-day registration: Yes

Number of days in early voting window: 30

Proof of Citizenship: No

Percent of voters removed from rolls: 12.5%

Number of days between registration deadline and election: 0

Online/Motor vehicle office registration: DMV

Excuse needed to vote absentee: No

Registration Drive Requirements: Yes

Voter registration forms collected during drives must be submitted 21 days before the election, even though the state has same-day registration at the polls.

Limits on ballot collection: No

Restoration of felon voting rights:&nbspUnrestricted

Percent of provisional ballots rejected: 0%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Maryland

Voter ID: No

Offers same-day registration: Yes

Number of days in early voting window: 8

Proof of Citizenship: No

Percent of voters removed from rolls: 0%

Number of days between registration deadline and election: 0

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: No

Registration Drive Requirements: Yes

Those wishing to hold a drive can get optional training to become an official registration volunteer, for which they would have to be at least 18 and sign a sworn statement. Any forms collected during a drive must be submitted within five days of completion or before the registration deadline, whichever comes first.

Limits on ballot collection: Yes

A voter must either mail or hand-deliver an absentee ballot.

Restoration of felon voting rights:&nbspRestoration after incarceration

Percent of provisional ballots rejected: 7.4%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Massachusetts

Voter ID: No

Offers same-day registration: No

Number of days in early voting window: 14

Proof of Citizenship: No

Percent of voters removed from rolls: 13%

Number of days between registration deadline and election: 19

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: Yes

Registration Drive Requirements: No

Limits on ballot collection: Yes

A family member may return an absentee ballot.

Restoration of felon voting rights:&nbspRestoration after incarceration

Percent of provisional ballots rejected: 73.8%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Michigan

Voter ID: Yes

Offers same-day registration: No

Number of days in early voting window: 0

Proof of Citizenship: No

Percent of voters removed from rolls: 4.3%

Number of days between registration deadline and election: 30

Online/Motor vehicle office registration: DMV

Excuse needed to vote absentee: Yes

Registration Drive Requirements: No

Limits on ballot collection: Yes

Only a family member or household member may return an absentee ballot.

Restoration of felon voting rights:&nbspRestoration after incarceration

Percent of provisional ballots rejected: 39.4%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Minnesota

Voter ID: No

Offers same-day registration: Yes

Number of days in early voting window: 46

Proof of Citizenship: No

Percent of voters removed from rolls: 9.6%

Number of days between registration deadline and election: 0

Online/Motor vehicle office registration: online

Minnesota is exempt from a federal law that requires voter registration to be offered at motor vehicle offices.

Excuse needed to vote absentee: No

Registration Drive Requirements: Yes

Forms collected by an agency or individual on behalf of other voters must be turned in within 10 days of the date written on the registration application.

Limits on ballot collection: Yes

One person cannot return more than three ballots.

Restoration of felon voting rights:&nbspRestoration after incarceration and parole or probation

Percent of provisional ballots rejected: 0%

CHANGED FROM NA TO ZERO

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Mississippi

Voter ID: Yes

Mississippi's strict photo ID requirement was passed in 2011, but was initially blocked by the Voting Rights Act. It went into effect in 2014 after Shelby County v. Holder.

Offers same-day registration: No

Number of days in early voting window: 0

Proof of Citizenship: No

Percent of voters removed from rolls: 8.2%

Number of days between registration deadline and election: 30

Online/Motor vehicle office registration: DMV

Excuse needed to vote absentee: Yes

Registration Drive Requirements: No

No major requirements exist today, but the state can charge individuals or organizations requesting forms in bulk quantities.

Limits on ballot collection: Yes

If a voter receives an absentee ballot in the mail, he or she needs to return it by mail. Only the voter can mail his or her own ballot.

Restoration of felon voting rights:&nbspMay permanently lose right to vote

Percent of provisional ballots rejected: 30.2%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Missouri

Voter ID: Yes

Offers same-day registration: No

Number of days in early voting window: 0

Proof of Citizenship: No

Percent of voters removed from rolls: 11.3%

Number of days between registration deadline and election: 26

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: Yes

Registration Drive Requirements: Yes

Missouri has an optional official volunteer system called "deputy registration officials," but anyone who is paid to collect more than 10 voter registration forms has to register with the state as a voter registration solicitor, and must be a registered voter. Any forms collected on behalf of other voters must be submitted within seven days.

Limits on ballot collection: Yes

A relative of the family member may return an absentee ballot.

Restoration of felon voting rights:&nbspRestoration after incarceration and parole or probation

Percent of provisional ballots rejected: 66.8%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Montana

Voter ID: Yes

Offers same-day registration: Yes

Late registration can be completed at county election offices until the polls close on Election Day.

Number of days in early voting window: 25

Late registration can be completed at county election offices until the polls close on Election Day.

Proof of Citizenship: No

Percent of voters removed from rolls: 8.6%

Number of days between registration deadline and election: 0

Late registration can be completed at county election offices until the polls close on Election Day.

Online/Motor vehicle office registration: DMV

Excuse needed to vote absentee: No

Registration Drive Requirements: No

Limits on ballot collection: No

Restoration of felon voting rights:&nbspRestoration after incarceration

Percent of provisional ballots rejected: 3.4%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Nebraska

Voter ID: No

Offers same-day registration: No

Number of days in early voting window: 35

Proof of Citizenship: No

Percent of voters removed from rolls: 1.1%

Number of days between registration deadline and election: 10

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: No

Registration Drive Requirements: Yes

Nebraska has an optional "deputy registrar" system, for which training is required. Deputy registrars also must take an oath and notify the state of the location and time of the proposed registration drive and party affiliations of the deputy registrars 48 hours in advance, and must return completed forms by the end of the following business day. For drives conducted outside of the program, forms must be submitted to the state 19 days before Election Day.

Limits on ballot collection: Yes

A voter can designate another person to return an absentee ballot. Each person can deliver one ballot on behalf of another voter.

Restoration of felon voting rights:&nbspRestoration after incarceration and parole or probation

Percent of provisional ballots rejected: 18.7%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Nevada

Voter ID: No

Offers same-day registration: No

Number of days in early voting window: 14

Proof of Citizenship: No

Percent of voters removed from rolls: 11.7%

Number of days between registration deadline and election: 20

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: No

Registration Drive Requirements: Yes

Requests for more than 50 registration forms must be accompanied by a distribution plan, which is submitted to the state. The state can charge for more than 50 copies of the application. All used and unused materials must be returned to the state, and applications collected during the drive must be submitted within 10 days of their completion, with the organizer of the drive being responsible for postage costs if mailed. The organizer must also write his/her name on the bottom of every form they submit on behalf of other voters.

Limits on ballot collection: Yes

A ballot can be returned by a family member with a signed form. It is a felony to violate this law. There is no limit on the number of ballots one person can return.

Restoration of felon voting rights:&nbspMay permanently lose right to vote

Percent of provisional ballots rejected: 47.7%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

New Hampshire

Voter ID: Yes

In June 2014, New Hampshire passed SB 206, which removed the option for county officials to vouch for the identity of a voter. A voter without the right ID will be photographed at the polls and that photo will be attached to a sworn statement.

Offers same-day registration: Yes

Number of days in early voting window: 0

Proof of Citizenship: No

Percent of voters removed from rolls: 9.5%

Number of days between registration deadline and election: 0

Online/Motor vehicle office registration: no

New Hampshire is exempt from a federal law that requires voter registration to be offered at motor vehicle offices.

Excuse needed to vote absentee: Yes

Registration Drive Requirements: Yes

New Hampshire does not allow voter registration drives.

Limits on ballot collection: Yes

A spouse, parent, sibling, or child of an absentee voter can return a ballot.  The family member must fill out a form provided by the secretary of state and show photo ID.

Restoration of felon voting rights:&nbspRestoration after incarceration

Percent of provisional ballots rejected: 0%

CHANGED FROM NA TO ZERO

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

New Jersey

Voter ID: No

Offers same-day registration: No

Number of days in early voting window: 45

Proof of Citizenship: No

Percent of voters removed from rolls: 5.9%

Number of days between registration deadline and election: 21

Online/Motor vehicle office registration: DMV

Excuse needed to vote absentee: No

Registration Drive Requirements: No

Limits on ballot collection: Yes

One person can collect and turn in up to three ballots. Previously, one bearer could turn in up to 10 ballots.  The bearer must also show a form of ID, such as a driver's license, that includes their full address and signature. The new law was approved in August 2015 and took effect immediately.

Restoration of felon voting rights:&nbspRestoration after incarceration and parole or probation

Percent of provisional ballots rejected: 17.9%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

New Mexico

Voter ID: No

Offers same-day registration: No

Number of days in early voting window: 28

Proof of Citizenship: No

Percent of voters removed from rolls: 4.5%

Number of days between registration deadline and election: 28

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: No

Registration Drive Requirements: Yes

Voter registration forms must be returned within 48 hours. Groups doing voter registration must pre-register with the state.

Limits on ballot collection: Yes

An immediate family member or caregiver may return an absentee ballot

Restoration of felon voting rights:&nbspRestoration after incarceration and parole or probation

Percent of provisional ballots rejected: 35%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

New York

Voter ID: No

Offers same-day registration: No

Number of days in early voting window: 0

Proof of Citizenship: No

Percent of voters removed from rolls: 0.4%

Number of days between registration deadline and election: 25

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: Yes

Registration Drive Requirements: No

Limits on ballot collection: Yes

No one other than the voter can return an absentee ballot.

Restoration of felon voting rights:&nbspRestoration after incarceration and parole

Percent of provisional ballots rejected: 42.6%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

North Carolina

Voter ID: No*

North Carolina passed HB 589 in August 2013, which instituted a strict photo ID requirement for voters unless he/she signed a sworn statement describing an impediment to obtaining the correct ID. A federal court struck down the law in July, saying it would adversely affect African-Americans' ability to vote.

Offers same-day registration: Yes*

North Carolina passed a law to remove same-day registration in 2013. It will be offered in the November election, because of a court ruling in July 2016 that found the measure would disadvantage African-American voters.

Number of days in early voting window: 10

North Carolina passed a law to remove same-day registration in 2013. It will be offered in the November election, because of a court ruling in July 2016 that found the measure would disadvantage African-American voters.

Proof of Citizenship: No

Percent of voters removed from rolls: 10.1%

Number of days between registration deadline and election: 25

North Carolina passed a law to remove same-day registration in 2013. It will be offered in the November election, because of a court ruling in July 2016 that found the measure would disadvantage African-American voters.

Online/Motor vehicle office registration: DMV

Excuse needed to vote absentee: No

Registration Drive Requirements: No

Voter registration forms must be submitted no later than 25 days before the election.

Limits on ballot collection: Yes

Only the voter or the voter's immediate family member may return an absentee ballot.

Restoration of felon voting rights:&nbspRestoration after incarceration and parole or probation

Percent of provisional ballots rejected: 52.3%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

North Dakota

Voter ID: No*

In 2013, North Dakota passed HB 1333, which tightened its existing ID law so that only four types of government-issued ID were acceptable. In 2015, the state passed HB 1332, which added restrictions on an alternative method for people to vote if they couldn't get the correct ID because of a disability. In August 2016, its photo ID restrictions were struck down by a federal court, which found it would disadvantage Native Americans' access to the vote.

Offers same-day registration: No

Voter registration is not required in North Dakota. The state abolished it in 1951.

Number of days in early voting window: 15

Voter registration is not required in North Dakota. The state abolished it in 1951.

Proof of Citizenship: No

Percent of voters removed from rolls: 0%

Number of days between registration deadline and election: 0

Voter registration is not required in North Dakota. The state abolished it in 1951.

Online/Motor vehicle office registration: no

North Dakota does not have voter registration.

Excuse needed to vote absentee: No

Registration Drive Requirements: No

North Dakota has no voter registration.

Limits on ballot collection: Yes

No one other than the voter can return an absentee ballot.

Restoration of felon voting rights:&nbspRestoration after incarceration

Percent of provisional ballots rejected: 0%

CHANGED FROM NA TO ZERO

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Ohio

Voter ID: Yes

In 2013, Ohio passed SB 216 which shortened the amount of time for a voter to return to a government office to prove their identity if they didn't have the correct ID at the polls, from 10 to seven days. I was struck down by a court in June 2016, and the state appealed. A decision is expected before Election Day.

Offers same-day registration: Yes*

A lawsuit is pending over Ohio's elimination of same-day registration in 2014, and a decision is expected before Election Day.

Number of days in early voting window: 28

A lawsuit is pending over Ohio's elimination of same-day registration in 2014, and a decision is expected before Election Day.

Proof of Citizenship: No

Percent of voters removed from rolls: 11.6%

Number of days between registration deadline and election: 27

A lawsuit is pending over Ohio's elimination of same-day registration in 2014, and a decision is expected before Election Day.

Online/Motor vehicle office registration: DMV

Excuse needed to vote absentee: No*

Ohio passed passed SB 216 in 2013, which requires address and date of birth information on absentee ballots. The state also passed SB 205 in 2013, which requires elections officials to discard absentee ballots if they have incomplete or incorrect identification information. Both were implemented in 2014.  A court ruled in June 2016 both would have discriminatory effects, and the state has appealed. A decision is expected before Election Day.

Registration Drive Requirements: Yes

Forms must be turned in within 10 days of completion.  All people doing voter registration drives need to register with the Secretary of State and disclose in which counties they expect to register voters.

Limits on ballot collection: No

Restoration of felon voting rights:&nbspRestoration after incarceration

Percent of provisional ballots rejected: 9.6%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Oklahoma

Voter ID: Yes

Offers same-day registration: No

Number of days in early voting window: 3

Proof of Citizenship: No

Percent of voters removed from rolls: 12.4%

Number of days between registration deadline and election: 24

Online/Motor vehicle office registration: DMV

Excuse needed to vote absentee: No

Registration Drive Requirements: Yes

The maximum number of applications county officials can give out ranges from 250 to 2,000.

Limits on ballot collection: Yes

Anyone can return a voter's absentee ballot. Each person can deliver a maximum of one ballot on behalf of another voter.

Restoration of felon voting rights:&nbspRestoration after incarceration and parole or probation

Percent of provisional ballots rejected: 48.6%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Oregon

Voter ID: No

Offers same-day registration: No

Number of days in early voting window: 21

Proof of Citizenship: No

Percent of voters removed from rolls: 9.7%

Number of days between registration deadline and election: 21

Online/Motor vehicle office registration:  Both

Every eligible voter who visits a motor vehicle office is automatically registered to vote, no form submission required.

Excuse needed to vote absentee: No

Registration Drive Requirements: Yes

Voter registration forms must be returned within five calendar days of completion.

Limits on ballot collection: No

Restoration of felon voting rights:&nbspRestoration after incarceration

Percent of provisional ballots rejected: 1.4%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Pennsylvania

Voter ID: No*

Pennsylvania passed HB 934, a strict photo ID requirement, in 2012. It was struck down in January 2014 by the Pennsylvania Supreme Court.

Offers same-day registration: No

Number of days in early voting window: 0

Proof of Citizenship: No

Percent of voters removed from rolls: 10.6%

Number of days between registration deadline and election: 30

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: Yes

Registration Drive Requirements: No

Limits on ballot collection: Yes

Only the voter can return an absentee ballot in person.

Restoration of felon voting rights:&nbspRestoration after incarceration

Percent of provisional ballots rejected: 34.5%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Rhode Island

Voter ID: Yes

Rhode Island passed S 400 in 2011, which instituted a non-strict photo ID requirement. It was implemented in 2014.

Offers same-day registration: No

Number of days in early voting window: 0

Proof of Citizenship: No

Percent of voters removed from rolls: 4.8%

Number of days between registration deadline and election: 30

Online/Motor vehicle office registration: DMV

Excuse needed to vote absentee: Yes

Registration Drive Requirements: No

Limits on ballot collection: No

Restoration of felon voting rights:&nbspRestoration after incarceration

Percent of provisional ballots rejected: 48.6%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

South Carolina

Voter ID: Yes

South Carolina passed H 3003 in 2011, which instituted a strict photo ID requirement, with the exception that voters without the correct ID could sign a sworn statement describing an impediment to obtaining the correct ID. The law was implemented in 2014.

Offers same-day registration: No

Number of days in early voting window: 0

Proof of Citizenship: No

Percent of voters removed from rolls: 5.6%

Number of days between registration deadline and election: 31

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: Yes

Registration Drive Requirements: No

Limits on ballot collection: No

Restoration of felon voting rights:&nbspRestoration after incarceration and parole or probation

Percent of provisional ballots rejected: 41.4%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

South Dakota

Voter ID: Yes

Offers same-day registration: No

Number of days in early voting window: 45

Proof of Citizenship: No

Percent of voters removed from rolls: 7.4%

Number of days between registration deadline and election: 15

Online/Motor vehicle office registration: DMV

Excuse needed to vote absentee: No

Registration Drive Requirements: Yes

Voter registration forms must be turned in within 20 days of completion.

Limits on ballot collection: No

Restoration of felon voting rights:&nbspRestoration after incarceration and parole or probation

Percent of provisional ballots rejected: 67.8%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Tennessee

Voter ID: Yes

In 2013, Tennessee passed S 125, which made it so county- or municipality-issued IDs are not valid forms of voter ID.

Offers same-day registration: No

Number of days in early voting window: 15

Proof of Citizenship: No

Percent of voters removed from rolls: 10.1%

Number of days between registration deadline and election: 30

Online/Motor vehicle office registration: DMV

Excuse needed to vote absentee: Yes

Registration Drive Requirements: No

Limits on ballot collection: No

Restoration of felon voting rights:&nbspMay permanently lose right to vote

Percent of provisional ballots rejected: 57.9%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Texas

Voter ID: Yes*

Texas passed SB 14  in 2011, which was implemented in 2013 after Shelby County v. Holder. It was ruled to have discriminatory effects three times in court, but was enforced while the state appealed those decisions. In July 2016, a federal court ruled for a fourth time that it could disenfranchise minority voters, and a lower court has been ordered to find ways to make it easier for those without ID to have their votes counted for the November 2016 election.

Offers same-day registration: No

Number of days in early voting window: 13

Proof of Citizenship: No

Percent of voters removed from rolls: 12%

Number of days between registration deadline and election: 30

Online/Motor vehicle office registration: DMV

Excuse needed to vote absentee: Yes

Registration Drive Requirements: Yes

Anyone holding a registration drive must receive state training and pass an in-person examination. The deadline to turn in forms is 5 days after they're collected. Failure to turn them in in a timely manner is a criminal offense. A 2015 law mandated that volunteers in this position can be terminated for destroying or altering registration applications.

Limits on ballot collection: Yes

Texas passed HB 148 in 2013, making it illegal to get paid based on the number of ballots collected. Repeat offenders receive a felony charge.  A 2015 law made it a crime to sign as a witness for more than one absentee voter per election.

Restoration of felon voting rights:&nbspRestoration after incarceration and parole or probation

Percent of provisional ballots rejected: 74%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Utah

Voter ID: Yes

Offers same-day registration: No

Number of days in early voting window: 10

Proof of Citizenship: No

Percent of voters removed from rolls: 2.8%

Number of days between registration deadline and election: 6

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: No

Registration Drive Requirements: No

Limits on ballot collection: No

Restoration of felon voting rights:&nbspRestoration after incarceration

Percent of provisional ballots rejected: 17.6%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Vermont

Voter ID: No

Offers same-day registration: No

Number of days in early voting window: 45

Proof of Citizenship: No

Percent of voters removed from rolls: 8.5%

Number of days between registration deadline and election: 5

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: No

Registration Drive Requirements: No

Limits on ballot collection: No

Restoration of felon voting rights:&nbspUnrestricted

Percent of provisional ballots rejected: 33.3%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Virginia

Voter ID: Yes

Offers same-day registration: No

Number of days in early voting window: 0

Proof of Citizenship: No

Percent of voters removed from rolls: 13.2%

Number of days between registration deadline and election: 21

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: Yes

Registration Drive Requirements: Yes

Virginia added requirements for registration drives in 2013. All individuals or organizations requesting 25 or more forms must register and complete certified training program, and sign an affidavit swearing to abide by all voter registration laws and rules.

Limits on ballot collection: No

Restoration of felon voting rights:&nbspRestoration after incarceration and parole or probation

Percent of provisional ballots rejected: 34.8%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Washington

Voter ID: Yes

Offers same-day registration: No

Number of days in early voting window: 18

Proof of Citizenship: No

Percent of voters removed from rolls: 10.5%

Number of days between registration deadline and election: 7

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: No

Registration Drive Requirements: Yes

Voter registration forms must be returned within five business days.

Limits on ballot collection: No

Restoration of felon voting rights:&nbspRestoration after incarceration and parole or probation

Percent of provisional ballots rejected: 14.1%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

District of Columbia

Voter ID: No

Offers same-day registration: Yes

Number of days in early voting window: 13

Proof of Citizenship: No

Percent of voters removed from rolls: 1%

Number of days between registration deadline and election: 0

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: No

Registration Drive Requirements: No

Limits on ballot collection: No

Restoration of felon voting rights:&nbspRestoration after incarceration

Percent of provisional ballots rejected: 5.9%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

West Virginia

Voter ID: No

Offers same-day registration: No

Number of days in early voting window: 10

Proof of Citizenship: No

Percent of voters removed from rolls: 7%

Number of days between registration deadline and election: 20

Online/Motor vehicle office registration:  Both

Excuse needed to vote absentee: Yes

Registration Drive Requirements: Yes

West Virginia has an optional official volunteer system. People and groups outside the official system can still conduct registration drives, but forms must be delivered within 15 days of completion. Requests for 10 or more forms must be recorded by the county clerk with a description of the days and locations of the proposed registration drives. A group cannot request more than 200 registration forms.

Limits on ballot collection: Yes

One person cannot deliver more than two absentee ballots in one election.

Restoration of felon voting rights:&nbspRestoration after incarceration and parole or probation

Percent of provisional ballots rejected: 29.1%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Wisconsin

Voter ID: Yes*

Wisconsin passed a strict photo ID requirement in 2011, which was implemented 2015. A July 2016 court ordered that it could not be enforced fully in November 2016 because it put minority voters at a disadvantage, but that decision was reversed by an appellate court in August. It appears the voter ID law will be in full effect for the November election.

Offers same-day registration: Yes

Number of days in early voting window: 10

Proof of Citizenship: No

Percent of voters removed from rolls: 10.7%

Number of days between registration deadline and election: 0

Online/Motor vehicle office registration: No

Wisconsin is exempt from a federal law that requires voter registration to be offered at motor vehicle offices.

Excuse needed to vote absentee: No

Registration Drive Requirements: Yes

A copy of the required forms for proof of residence for first-time voters must be included with registration forms if collected by anyone other than a "special deputy" who receives training.

Limits on ballot collection: No

f a voter receives an absentee ballot in the mail, it must be returned by mail. in-person absentee voting is also available (no excuse required).

Restoration of felon voting rights:&nbspRestoration after incarceration and parole or probation

Percent of provisional ballots rejected: 68.5%

                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Wyoming

Voter ID: No

Offers same-day registration: Yes

Number of days in early voting window: 40

Proof of Citizenship: No

Percent of voters removed from rolls: 7.3%

Number of days between registration deadline and election: 0

Online/Motor vehicle office registration: No

Wyoming is exempt from a federal law that requires voter registration to be offered at motor vehicle offices.

Excuse needed to vote absentee: No

Registration Drive Requirements: Yes

Wyoming doesn't accept voter registration applications from voter registration drives.

Limits on ballot collection: No

Restoration of felon voting rights:&nbspMay permanently lose right to vote

Percent of provisional ballots rejected: 47.8%

  <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 100 100" enable-background="new 0 0 100 100" xml:space="preserve">
    <path fill="#FFFFFF" d="M58.1,37.3h-2.6c-1.7,0-4.7-0.2-4.7,1.5v3.4h9.5l-0.7,8.6h-8.8v22h-7.3v-22h-4.9v-8.6h6.1c0,0,0-0.7,0-5.5
                c0-5.5,3-8,9.5-8h3.9V37.3z"></path>

  </svg>

  Share on Facebook

  <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 100 100" enable-background="new 0 0 100 100" xml:space="preserve">
    <path fill="#FFFFFF" d="M67.3,42.4c0.5,12.1-8.5,25.7-24.6,25.7c-4.9,0-9.4-1.4-13.3-3.9c4.6,0.5,9.2-0.7,12.8-3.6
                c-3.8-0.1-7-2.6-8.1-6c1.4,0.3,2.7,0.2,3.9-0.1c-4.2-0.8-7-4.6-6.9-8.6c1.2,0.7,2.5,1,3.9,1.1c-3.9-2.6-4.9-7.6-2.7-11.5
                c4.3,5.2,10.6,8.7,17.8,9c-1.3-5.4,2.8-10.6,8.4-10.6c2.5,0,4.7,1.1,6.3,2.7c2-0.4,3.8-1.1,5.5-2.1c-0.6,2-2,3.7-3.8,4.8
                c1.7-0.2,3.4-0.7,5-1.4C70.4,39.7,68.9,41.2,67.3,42.4z"></path>

  </svg>

  Share on Twitter

How did we do?

We'd love your feedback.

<button type="button" class="btn btn-pin btn-lg" data-toggle="modal" data-target="#pinModal" style="margin-top: 10px;">
	Share your thoughts
</button>

Public Insight Network

American Public Media

        <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>

Inform our reporting

        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>

Previous News21 Projects

Weedrush · 2015

Gun Wars · 2014

Back Home · 2013

Voting Rights in America · 2012

How Safe is Your Food? · 2011

About

News21

Carnegie Corporation

Knight Foundation

Awards

Join Our Team

Free Content

Creative Commons Use

Innovation

Media Partners

Resources

Setting Up a Program

News21 Seminar

News21 Newsroom

Best Practices

Republish our work; it's all Creative Commons.

redpajama_set_name: RedPajamaGithub


text:
<?php

/**
 * Multishipping checkout success information
 *
 * @author      Magento Core Team <core@magentocommerce.com>
 */
namespace Magento\Multishipping\Block\Checkout;

class Success extends \Magento\Multishipping\Block\Checkout\AbstractMultishipping
{
    /**
     * @param \Magento\Framework\View\Element\Template\Context $context
     * @param \Magento\Multishipping\Model\Checkout\Type\Multishipping $multishipping
     * @param array $data
     */
    public function __construct(
        \Magento\Framework\View\Element\Template\Context $context,
        \Magento\Multishipping\Model\Checkout\Type\Multishipping $multishipping,
        array $data = []
    ) {
        parent::__construct($context, $multishipping, $data);
        $this->_isScopePrivate = true;
    }

    /**
     * @return array|bool|string
     */
    public function getOrderIds()
    {
        $ids = $this->_session->getOrderIds(true);
        if ($ids && is_array($ids)) {
            return $ids;
        }
        return false;
    }

    /**
     * @param int $orderId
     * @return string
     */
    public function getViewOrderUrl($orderId)
    {
        return $this->getUrl('sales/order/view/', ['order_id' => $orderId, '_secure' => true]);
    }

    /**
     * @return string
     */
    public function getContinueUrl()
    {
        return $this->_storeManager->getStore()->getBaseUrl();
    }
}


text:
import os
import json
import base64
import urllib2
from iofog_container_sdk.client import IoFogClient
from iofog_container_sdk.exception import IoFogException
from iofog_container_sdk.iomessage import IoMessage
from iofog_container_sdk.listener import *

def Post(VIN):
	VINMesg={"VehicleId":VIN}
	JSONVINMesg=json.dumps(VINMesg)
	b64VIN=ConverttoBase64(JSONVINMesg)
	#JSONMesg=ConstructJSONStr(b64VIN)

	#print "JSON Message being sent : ",JSONMesg
	#print "\n"
	#responseMesg=PostVINMessage(JSONMesg)
	responseMesg=SendMesgToFog(b64VIN)

	print " Message Post Response = ",responseMesg
	print "\n"

	return responseMesg

def SendMesgToFog(base64VIN):
        client=IoFogClient()
        msg=IoMessage()
        msg.infotype="application/json"
        msg.infoformat="text/utf-8"
        msg.contentdata=base64VIN
        msg.contextdata=""
        msg.tag="VID"
        msg.groupid=""
        msg.authid=""
        msg.authgroup=""
        msg.hash=""
        msg.previoushash=""
        msg.nonce=""

        try:
                receipt = client.post_message(msg)
        except IoFogException, e:
                print "Exception Sending Message to Fog"
                print "\n"
                print(e)

        return receipt

def ConstructJSONStr(base64VIN):
	MessageVar = {
	"tag":"VehicleIdentifier",
	"groupid":"",
	"sequencenumber":1,
	"sequencetotal":1,
	"priority":0,
	"publisher":os.getenv('SELFNAME'),
	"authid":"",
	"authgroup":"",
	"version":1,
	"chainposition":0,
	"hash":"",
	"previoushash":"",
	"nonce":"",
	"difficultytarget":0.0,
	"infotype":"application/json",
	"infoformat":"text/utf-8",
	"contextdata":"",
	"contentdata":base64VIN
	}
	JSONVINMesg=json.dumps(MessageVar)
	return JSONVINMesg

def PostVINMessage(Mesg):
	url='http://localhost:54321/v2/messages/new'
	req=urllib2.Request(url)
	req.add_header('Content-Type','application/json')
	response=urllib2.urlopen(req,Mesg)
	return response

def ConverttoBase64(VINStr):
	b64VIN=base64.b64encode(str(VINStr))
	return b64VIN


text:
/*!
* Appcelerator JSON i18n v0.2 by Matthew O'Riordan
* By: http://mattheworiordan.com/
* Github: https://github.com/mattheworiordan/json.i18n-for-Titanium-Mobile
*
* Fork by outadoc
* By: http://dev.outadoc.fr
* Github: http://github.com/outadoc
*
* NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
*/

/*
 * JSON i18N is a replacement location service for Titanium as the current locale solution is inadequate:
 * - See ticket http://jira.appcelerator.org/browse/TC-184
 *
 * JSON i18N is superior to the Titanium.Locale solution as it provides:
 * - JSON is used instead of XML
 * - Default locale without using hints
 * - No bugs related to underscores and hints, see http://jira.appcelerator.org/browse/TIMOB-4191
 *
 * Localization files are stored as JSON in the /Resources/i18n folder
 * They can have any arbitrary object structure such as
 *   { "parent": { "child": { "key": "value" } } }
 *   but must follow strict JSON formatting with keys and values enclosed in double quotes where applicable
 *
 * /i18N/default.json is a required DEFAULT file
 * /i18N/[language code - typically 2 letter lowercase].json takes precedence over default.json
 * /i18N/[language code - typically 2 letter lowercase]-[country - typically 2 letter upper case].json takes precedence over language json
 *
 * Please use language tags from http://www.iana.org/assignments/language-subtag-registry
 *   2 letter language codes can be found at http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
 */
var i18n = (function() {
  var defaultJson = 'default',
    deviceCountry = Titanium.Locale.currentCountry,
    deviceLanguage = Titanium.Locale.currentLanguage,
    currentCountry,
    currentLanguage,
    localisedData;

  /*
   * Deep copy of objects from newDefault to base
   * base is not overwritten with values from newDefaults
   * base object is modifed
   */
  function addDefaults(base, newDefaults) {
    for (var needle in newDefaults) {
      // Workaround for faulty JSON parse returning invalid object http://jira.appcelerator.org/browse/TIMOB-3373
      if (!newDefaults.hasOwnProperty || newDefaults.hasOwnProperty(needle)) {
        if (!base[needle]) {
          base[needle] = newDefaults[needle];
        } else {
          if (typeof base[needle] == 'object') {
            addDefaults(base[needle], newDefaults[needle]);
          }
        }
      }
    }
  }

  /* Load JSON data from /i18n/ directory */
  function loadData(localeID) {
    var file;
    try {
      file = Titanium.Filesystem.getFile(Titanium.Filesystem.resourcesDirectory, 'i18n', localeID + '.json');
    } catch(e) {
      // file does not exist, sometimes an exception is thrown for some odd reason
    }

    if (file && file.exists()) {
      try {
        // Android file exists fails on SDK 1.7.2, see bug http://jira.appcelerator.org/browse/TC-211
        var JSONtext = file.read().text;

        try {
          return JSON.parse(JSONtext);
        } catch (ex) {
          Titanium.API.error("Invalid JSON file " + localeID + ".json");
          throw ex;
        }
      } catch (emptyFileException) {
        return {};
      }
    } else {
      return {};
    }
  }

  /* Add localisation data from JSON file to the localised data private object */
  function addLocalisedData(localeID) {
    var jsonData = loadData(localeID);
    addDefaults(localisedData, jsonData);
  }

  /* fetch the localised value based on a key with object notation such as view.message.title */
  function getString(key) {
    var key_hierarchy = key.split('.');
    var obj = localisedData;
    for (var i = 0; i < key_hierarchy.length; i++) {
      obj = obj[key_hierarchy[i]];
      if (!obj) { break; }
    }
    if (typeof obj === 'string') {
      return obj;
    } else {
      return key;
    }
  }

  /*
   * Formatted string uses String.format which supports string interpolation
   * e.g. localised value = "Hello %1$s, thanks for buying a %2$s"
   *      getFormattedString('key.id', 'Matthew', 'Car');
   *      would return "Hello Matthew, thanks for buying a Car"
   */
  function getFormattedString(key) {
    var val = getString(key);
    if (typeof val === 'string') {
      if (arguments.length > 1) {
      	for (var i=0; i<arguments.length; i++) {
      		if(arguments[i] === null || arguments[i] === undefined) {
      			arguments[i] = String(arguments[i]);
      		}
      	}
        // additional string formatting arguments have been passed, pass on to String.format
        if (Ti.Platform.osname === 'android') {
          // ridiculous bug http://jira.appcelerator.org/browse/TC-188 means we need a workaround solution
          return String.format(val, arguments[1], arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7]);
        } else if (Ti.Platform.osname === 'blackberry') {
          // as of 19 Oct, Blackberry does not support String.format so need to hack a solution
          return val.replace(/%(\d+\$)?s/g,
            function(match) {
              var index = match.match(/%(\d+)\$s/);
              if (!index) {
                index = 1;
              } else {
                index = Number(index[1]);
              }
              return arguments[index];
            });
        } else {
          return String.format.apply(this, [val].concat(Array.prototype.slice.call(arguments, 1)));
        }
      } else {
        return val;
      }
    } else {
      return '';
    }
  }

  /*
   * Load in the string resources in order of precedence
   * CountryLanguage pair takes precedence over Language which in turn takes precedence over Default
   */
  function setupLocalisedData (language, country) {
    localisedData = {};
    currentCountry = String(country ? country : 'unknown');
    currentLanguage = String(language ? language : 'unknown');
    if (currentCountry.length === 2) { currentCountry == currentCountry.toUpperCase(); }
    if (currentLanguage.length === 2) { currentLanguage == currentLanguage.toLowerCase(); }
    addLocalisedData(currentLanguage + '-' + currentCountry);
    addLocalisedData(currentLanguage);
    addLocalisedData(defaultJson);
  }

  /* load up the localized resources */
  function init() {
    if(Ti.App.Properties.getBool('forceEn', false)) {
    	setupLocalisedData('en', deviceCountry);
    } else {
    	setupLocalisedData(deviceLanguage, deviceCountry);
    }
  }

  /*
   * Initialize this object
   */
  init();

  /*
   * --- PUBLIC METHODS ---
   */
  return {
    /* get string value from JSON localised resources without interpolation */
    getString: getString,
    /* get string value from JSON localised resources with interpolation */
    getFormattedString: getFormattedString,
    /*
     * Force the use of a different locale instead of using device settings
     * @param language (2 letter language code)
     * @param country (2 letter country code)
     */
    forceNewLocale: setupLocalisedData,
    /* return current country locale */
    getCurrentCountry: function() {
      return currentCountry;
    },
    getCurrentLanguage: function() {
      return currentLanguage;
    }
  };
}());

/* Create shortcut to i18N.getString */
var I = i18n.getFormattedString;


text:
/* $Id: ListItemContentLayoutManager.java 1296526 2012-03-03 00:18:45Z gadams $ */

package org.apache.fop.layoutmgr.list;

import java.util.LinkedList;

import org.apache.fop.area.Area;
import org.apache.fop.area.Block;
import org.apache.fop.fo.flow.AbstractListItemPart;
import org.apache.fop.fo.flow.ListItemBody;
import org.apache.fop.fo.flow.ListItemLabel;
import org.apache.fop.fo.properties.KeepProperty;
import org.apache.fop.layoutmgr.BlockStackingLayoutManager;
import org.apache.fop.layoutmgr.Keep;
import org.apache.fop.layoutmgr.LayoutContext;
import org.apache.fop.layoutmgr.LayoutManager;
import org.apache.fop.layoutmgr.NonLeafPosition;
import org.apache.fop.layoutmgr.Position;
import org.apache.fop.layoutmgr.PositionIterator;
import org.apache.fop.layoutmgr.SpaceResolver.SpaceHandlingBreakPosition;
import org.apache.fop.layoutmgr.TraitSetter;

/**
 * LayoutManager for a list-item-label or list-item-body FO.
 */
public class ListItemContentLayoutManager extends BlockStackingLayoutManager {

    private Block curBlockArea;

    private int xOffset;
    private int itemIPD;

    /**
     * Create a new Cell layout manager.
     * @param node list-item-label node
     */
    public ListItemContentLayoutManager(ListItemLabel node) {
        super(node);
    }

    /**
     * Create a new Cell layout manager.
     * @param node list-item-body node
     */
    public ListItemContentLayoutManager(ListItemBody node) {
        super(node);
    }

    /**
     * Convenience method.
     * @return the ListBlock node
     */
    protected AbstractListItemPart getPartFO() {
        return (AbstractListItemPart)fobj;
    }

    /**
     * Set the x offset of this list item.
     * This offset is used to set the absolute position
     * of the list item within the parent block area.
     *
     * @param off the x offset
     */
    public void setXOffset(int off) {
        xOffset = off;
    }

    /**
     * Add the areas for the break points.
     * The list item contains block stacking layout managers
     * that add block areas.
     *
     * @param parentIter the iterator of the break positions
     * @param layoutContext the layout context for adding the areas
     */
    @Override
    public void addAreas(PositionIterator parentIter,
                         LayoutContext layoutContext) {
        getParentArea(null);

        addId();

        LayoutManager childLM;
        LayoutContext lc = new LayoutContext(0);
        LayoutManager firstLM = null;
        LayoutManager lastLM = null;
        Position firstPos = null;
        Position lastPos = null;

        // "unwrap" the NonLeafPositions stored in parentIter
        // and put them in a new list;
        LinkedList<Position> positionList = new LinkedList<Position>();
        Position pos;
        while (parentIter.hasNext()) {
            pos = parentIter.next();
            if (pos == null) {
                continue;
            }
            if (pos.getIndex() >= 0) {
                if (firstPos == null) {
                    firstPos = pos;
                }
                lastPos = pos;
            }
            if (pos instanceof NonLeafPosition) {
                // pos was created by a child of this ListBlockLM
                positionList.add(pos.getPosition());
                lastLM = pos.getPosition().getLM();
                if (firstLM == null) {
                    firstLM = lastLM;
                }
            } else if (pos instanceof SpaceHandlingBreakPosition) {
                positionList.add(pos);
            } else {
                // pos was created by this ListBlockLM, so it must be ignored
            }
        }

        addMarkersToPage(true, isFirst(firstPos), isLast(lastPos));

        PositionIterator childPosIter = new PositionIterator(positionList.listIterator());
        while ((childLM = childPosIter.getNextChildLM()) != null) {
            // Add the block areas to Area
            lc.setFlags(LayoutContext.FIRST_AREA, childLM == firstLM);
            lc.setFlags(LayoutContext.LAST_AREA, childLM == lastLM);
            // set the space adjustment ratio
            lc.setSpaceAdjust(layoutContext.getSpaceAdjust());
            lc.setStackLimitBP(layoutContext.getStackLimitBP());
            childLM.addAreas(childPosIter, lc);
        }

        addMarkersToPage(false, isFirst(firstPos), isLast(lastPos));

        flush();

        curBlockArea = null;

        checkEndOfLayout(lastPos);
    }

    /**
     * Return an Area which can contain the passed childArea. The childArea
     * may not yet have any content, but it has essential traits set.
     * In general, if the LayoutManager already has an Area it simply returns
     * it. Otherwise, it makes a new Area of the appropriate class.
     * It gets a parent area for its area by calling its parent LM.
     * Finally, based on the dimensions of the parent area, it initializes
     * its own area. This includes setting the content IPD and the maximum
     * BPD.
     *
     * @param childArea the child area to get the parent for
     * @return the parent area
     */
    @Override
    public Area getParentArea(Area childArea) {
        if (curBlockArea == null) {
            curBlockArea = new Block();
            curBlockArea.setPositioning(Block.ABSOLUTE);
            // set position
            curBlockArea.setXOffset(xOffset);
            //TODO: Check - itemIPD never set?
            curBlockArea.setIPD(itemIPD);
            //curBlockArea.setHeight();

            TraitSetter.setProducerID(curBlockArea, getPartFO().getId());

            // Set up dimensions
            Area parentArea = parentLayoutManager.getParentArea(curBlockArea);
            int referenceIPD = parentArea.getIPD();
            curBlockArea.setIPD(referenceIPD);
            // Get reference IPD from parentArea
            setCurrentArea(curBlockArea); // ??? for generic operations
        }
        return curBlockArea;
    }

    /**
     * Add the child to the list item area.
     *
     * @param childArea the child to add to the cell
     */
    @Override
    public void addChildArea(Area childArea) {
        if (curBlockArea != null) {
            curBlockArea.addBlock((Block) childArea);
        }
    }

    /** {@inheritDoc} */
    @Override
    public KeepProperty getKeepTogetherProperty() {
        return getPartFO().getKeepTogether();
    }

    /** {@inheritDoc} */
    @Override
    public Keep getKeepWithNext() {
        return Keep.KEEP_AUTO;
    }

    /** {@inheritDoc} */
    @Override
    public Keep getKeepWithPrevious() {
        return Keep.KEEP_AUTO;
    }
}


text:
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Imaging;

namespace UdpPacketViewer.View
{
    // http://weblogs.asp.net/thomaslebrun/archive/2009/03/03/wpf-how-to-gray-the-icon-of-a-menuitem.aspx
    public class AutoGreyableImage : Image
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="AutoGreyableImage"/> class.
        /// </summary>
        static AutoGreyableImage()
        {
            // Override the metadata of the IsEnabled property.
            IsEnabledProperty.OverrideMetadata(typeof(AutoGreyableImage), new FrameworkPropertyMetadata(true, new PropertyChangedCallback(OnAutoGreyScaleImageIsEnabledPropertyChanged)));
        }
        /// <summary>
        /// Called when [auto grey scale image is enabled property changed].
        /// </summary>
        /// <param name="source">The source.</param>
        /// <param name="args">The <see cref="System.Windows.DependencyPropertyChangedEventArgs"/> instance containing the event data.</param>
        private static void OnAutoGreyScaleImageIsEnabledPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs args)
        {
            var autoGreyScaleImg = source as AutoGreyableImage;
            var isEnable = Convert.ToBoolean(args.NewValue);
            if (autoGreyScaleImg != null)
            {
                if (!isEnable)
                {
                    // Get the source bitmap
                    var bitmapImage = new BitmapImage(new Uri(autoGreyScaleImg.Source.ToString()));
                    // Convert it to Gray
                    autoGreyScaleImg.Source = new FormatConvertedBitmap(bitmapImage, PixelFormats.Gray32Float, null, 0);
                    // Create Opacity Mask for greyscale image as FormatConvertedBitmap does not keep transparency info
                    autoGreyScaleImg.OpacityMask = new ImageBrush(bitmapImage);
                }
                else
                {
                    // Set the Source property to the original value.
                    autoGreyScaleImg.Source = ((FormatConvertedBitmap)autoGreyScaleImg.Source).Source;
                    // Reset the Opcity Mask
                    autoGreyScaleImg.OpacityMask = null;
                }
            }
        }
    }
}


text:
import classes
import operator
import itertools
import pint
import re
import data

def powerset(iterable):
    "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
    s = list(iterable)
    return itertools.chain.from_iterable(itertools.combinations(s, r) for r in range(len(s)+1))

def to_purchase_unit(ingredient, ingredient_types):
    it = ingredient_types[ingredient.name]
    if ingredient.quantity is None and it.purchase_unit is None:
        return None

    try:
        conversions = it.conversions
    except AttributeError:
        conversions = []
    for subconversions, op in itertools.product(powerset(conversions), (operator.mul, operator.div)):
        try:
            v = ingredient.quantity
            for conversion in subconversions:
                v = op(v, conversion)
            return v.to(it.purchase_unit)
        except pint.unit.DimensionalityError:
            pass
    raise ValueError(u"Could not convert %s from %s to %s" % (it.name,ingredient.quantity,it.purchase_unit))

_translate_re = re.compile("|".join([re.escape(fr) for fr,to in data.translations]))
_translate_dict = dict(data.translations)

def translate_unit(unit_string):
    return _translate_re.sub(lambda x: _translate_dict[x.group(0)], unit_string)

def find_undefined_ingredients(menu, ingredient_types):
    not_found = set()
    for menuitem in menu:
        ingredients = list(menuitem.dish.ingredients)
        for variant in menuitem.variants.iterkeys():
            try:
                ingredients.extend(menuitem.dish.variants[variant])
            except KeyError:
                print variant, menuitem.dish.name
                raise ValueError(u"Missing variant '%s' for dish '%s'" %\
                                     (variant, menuitem.dish.name))

        for ingredient in ingredients:
            if ingredient.name not in ingredient_types:
                not_found.add(ingredient)
    return not_found

def make_shopping_list(menu, ingredient_types):
    shopping_list = classes.NameDict()
    for menuitem in menu:
        ingredients = zip(menuitem.dish.ingredients, itertools.repeat(1))
        for variant, count in menuitem.variants.iteritems():
            ingredients.extend(zip(menuitem.dish.variants[variant], itertools.repeat(count)))
        for ingredient, count in ingredients:
            pu = to_purchase_unit(ingredient, ingredient_types)
            if not pu is None:
                pu *= count

            entry = shopping_list.get(ingredient.name)
            if entry:
                if not pu is None:
                    entry.quantity += pu
                    entry.sources.append(menuitem)
            else:
                entry = classes.Ingredient(ingredient_types[ingredient.name])
                entry.quantity = pu
                entry.sources = [menuitem]
                shopping_list.append(entry)
    return shopping_list.values()

def subtract_from_shopping_list(shopping_list, sub, ingredient_types):
    subd = classes.NameDict(sub)
    for ingredient in shopping_list:
        sub_ingredient = subd.get(ingredient.name, None)
        if sub_ingredient is None:
            yield ingredient
        else:
            # Copy
            ing = classes.Ingredient(ingredient)
            pu = to_purchase_unit(sub_ingredient, ingredient_types)
            ing.quantity -= pu
            if ing.quantity and ing.quantity.magnitude>0:
                yield ing

def order_by_category(shopping_list):
    cats = {}
    for item in shopping_list:
        cats.setdefault(item.category, []).append(item)

    for x in sorted(cats.iteritems()):
        yield x

def scaled_dish(dish, factor):
    return classes.Dish(name=dish.name, variants=dish.variants, ingredients = [
        classes.Ingredient(name=ingredient.name,
                           quantity=ingredient.quantity*factor)
        if ingredient.quantity is not None
        else ingredient
        for ingredient in dish.ingredients
        ])

def scaled_menu(menu, factor):
    for item in menu:
        d = item.__dict__.copy()
        d["dish"] = scaled_dish(d["dish"], factor)
        yield classes.MenuItem(**d)


text:
slug: fernandes-cruz-felipe
last_name: 'Fernandes Cruz'
first_name: Felipe
---
**Felipe Fernandes Cruz** is Managing Editor and co-founder of _The Appendix_, and a PhD candidate in history at the University of Texas at Austin.