Our reporting on all platforms will be truthful, transparent and respectful; our facts will be accurate, complete and fairly presented. When we make a mistake — and from time to time, we will — we will work quickly to fully address the error, correcting it within the story, detailing the error on the story page and adding it to this running list of Tribune corrections. If you find an error, email corrections@texastribune.org.
Gov. Rick Perry has issued at least 221 pardon proclamations since taking office in December 2000. Use this database to search those declarations by the person’s name, the year the pardon was issued, the crime type and/or the pardon type.
Unsure about the pardons process in Texas? Read related stories about pardons or check out the Texas Board of Pardons and Paroles TribPedia page.
Name
Clemency Type
Crime Type
Conviction County
Pardon Date
Explore by using one of the following filters
All Clemency Types
All Years
All Counties
All Crimes
var define = undefined;//MODEL MODEL MODELvar Pardon = Backbone.Model.extend({ initialize: function(){ this.attributes.SortDate = this.createSortDate(this.attributes.Date); }, createSortDate: function(arg) { var a = arg.split(‘/’); if (parseInt(a[0]) < 10){ a[0] = '0'+ a[0]; } if (parseInt(a[1]) < 10){ a[1] = '0' + a[1]; } var b = a[2] + a[0] + a[1]; return b; }});var PardonType = Backbone.Model.extend({ initialize: function(obj) { this.set('Pardon_Type', obj); },});var Year = Backbone.Model.extend({ initialize: function(obj) { this.set('Year', obj); },});var County = Backbone.Model.extend({ initialize: function(obj) { this.set('County', obj); },});var Crime = Backbone.Model.extend({ initialize: function(obj) { this.set('Crime_Type', obj); },});//COLLECTION COLLECTION COLLECTION// List of Pardonsvar PardonCollection = Backbone.Collection.extend({ model: Pardon, getAllYears: function() { return _.uniq(this.pluck('Year')); }});//List of Pardon Typesvar PardonTypeCollection = Backbone.Collection.extend({ model: PardonType,});// List of Yearsvar YearCollection = Backbone.Collection.extend({ model: Year});//List of Countiesvar CountyCollection = Backbone.Collection.extend({ model: County});//List of Crimesvar CrimeCollection = Backbone.Collection.extend({ model: Crime});//VIEWS VIEWS VIEWSvar PardonView = Backbone.View.extend({ tagName: 'tr', template: _.template( $('#person-row').html()), // references the template on main page initialize: function(){ this.render(); }, render: function(){ this.$el.html( this.template(this.model.toJSON())); return this; // returning this from render method.. }});//view to generate the dropdown menu for the pardon typesvar PardonTypeView = Backbone.View.extend({ tagName: 'option', template: _.template('’), initialize:function(){ this.render(); }, render:function(){ this.$el.html( this.template(this.model.toJSON())); return this; }});//view to generate the dropdown menu for the yearvar YearView = Backbone.View.extend({ tagName: ‘option’, template: _.template(”), initialize:function(){ this.render(); }, render:function(){ this.$el.html( this.template(this.model.toJSON())); return this; }});//view to generate the dropdown menu for the countyvar CountyView = Backbone.View.extend({ tagName: ‘option’, template: _.template(”), initialize:function(){ this.render(); }, render:function(){ this.$el.html(this.template(this.model.toJSON())); return this; }});//view to generate the dropdown menu for the crimevar CrimeView = Backbone.View.extend({ tagName: ‘option’, template: _.template(”), initialize:function(){ this.render(); }, render:function(){ this.$el.html(this.template(this.model.toJSON())); return this; }});// View for all peoplevar PardonsView = Backbone.View.extend({ el: ‘#results’, initialize: function(){ this.listenTo(this.collection, ‘reset’, this.render); }, render: function(){ //loop over each item in the collection, make a view for it, return this so we can use it later var payload = []; this.collection.each(function(pardon){ var pardonView = new PardonView({ model: pardon }); payload.push(pardonView.el); }, this); this.$el.html(payload); return this; }});//View for all pardon types (dropdown list)var PardonTypesView = Backbone.View.extend({ el: ‘#pardon-container’, initialize: function(){ this.render(); }, render: function(){ this.collection.each(function(pardontype){ var pardontypeView = new PardonTypeView({ model: pardontype}); this.$el.append(pardontypeView.el); }, this); return this; }});// View for all yearsvar YearsView = Backbone.View.extend({ el: ‘#year-container’, initialize: function(){ this.render(); }, render: function(){ this.collection.each(function(year){ var yearView = new YearView({ model: year}); this.$el.append(yearView.el); }, this); return this; }});// View for all countiesvar CountiesView = Backbone.View.extend({ el: ‘#county-container’, initialize: function(){ this.render(); }, render: function(){ this.collection.each(function(county){ var countyView = new CountyView({ model: county}); this.$el.append(countyView.el); }, this); return this; }});// View for all crimesvar CrimesView = Backbone.View.extend({ el: ‘#crime-container’, initialize: function(){ this.render(); }, render: function(){ this.collection.each(function(crime){ var crimeView = new CrimeView({ model: crime}); this.$el.append(crimeView.el); }, this); return this; }});//view for the search stuffvar SearchView = Backbone.View.extend({ el: ‘#search-container’, initialize: function(){ this.render(); }, render: function(){ // Compile the template using underscore var template = _.template( $(‘#search-template’).html(), {} ); // Load the compiled HTML into the Backbone “el” this.$el.html( template ); }, events: { ‘change select’: ‘updateFilter’, ‘keyup .search’: ‘search’ }, search: function(e) { var search = this.$(‘.search’).val(); var resetDropdowns = function(){ $(‘#pardon-container’).val(‘all’); $(‘#year-container’).val(‘all’); $(‘#county-container’).val(‘all’); $(‘#crime-container’).val(‘all’); }; _.delay(resetDropdowns, 200); _.delay(resetHeaders, 300); //create RegEx out of search input var re = new RegExp(search, ‘i’); //evaluate and if it’s true, return that filter var results = pardonsCollection.filter(function(item) { if (re.test(item.get(‘SortName’)) === true) {return this; }}); //sort results = _.sortBy(results, function(item){ return item.get(‘SortName’); }); filteredCollection.reset(results); if (results.length === 0){ $(‘#no-results’).html(‘No results for ‘ + search +’. Please try again.’); } else { $(‘#no-results’).html(‘ ‘); } }, updateFilter: function() { resetHeaders(); var thisPardon = ($(‘#pardon-container option:selected’).text()); var thisYear = ($(‘#year-container option:selected’).text()); var thisCounty = ($(‘#county-container option:selected’).text()); var thisCrime = ($(‘#crime-container option:selected’).text()); var filter = {}; if (thisPardon !== ‘All Clemency Types’) { filter.Pardon_Type = thisPardon; } if (thisYear !== ‘All Years’) { filter.Year = parseInt(thisYear); } if (thisCounty !== ‘All Counties’) { filter.County = thisCounty; } if (thisCrime !== ‘All Crimes’) { filter.Crime_Type = thisCrime; } //what to do if there is no filter if (_.isEqual(filter, {})) { filteredCollection.reset(pardonData); $(‘.search’).val(”); //what to do if there is a filter } else { var results = pardonsCollection.where(filter); filteredCollection.reset(results); $(‘.search’).val(”); if (results.length === 0){ $(‘#no-results’).html(‘No results. Please try broadening your search by choosing fewer filters.’); } else { $(‘#no-results’).html(‘ ‘); } } }});//view for the table head and to add sort functionvar HeaderView = Backbone.View.extend({ el: ‘#header-container’, initialize: function(){ this.render(); }, render: function(){ // Compile the template using underscore var template = _.template( $(‘#header-template’).html(), {} ); this.$el.html( template ); }, events: {‘click th’: ‘sortMe’}, sortMe: function(e) { var thisAttr = $(e.target).attr(‘id’); var thisClass = $(e.target).attr(‘class’); //reset the other sort arrows var tableHeads = $(‘th’); for (var i = 0; i < tableHeads.length; i++) { if (thisAttr !== tableHeads[i].id){ $(tableHeads[i]).removeClass('sort-asc').removeClass('sort-desc').addClass('siftable'); } } //sorts by the chosen category and changes the class name if (thisClass === 'siftable' || thisClass === 'sort-desc') { sortResults = filteredCollection.sortBy(function(pardon){ return pardon.get(thisAttr);}); $(e.target).removeClass('siftable').removeClass('sort-desc').addClass('sort-asc'); } else if (thisClass === 'sort-asc') { sortResults.reverse(); $(e.target).removeClass('sort-asc').addClass('sort-desc'); } filteredCollection.reset(sortResults); }});var sortResults;var search_view = new SearchView();var header_view = new HeaderView();var filteredCollection = new PardonCollection();var pardonsView = new PardonsView({collection: filteredCollection});//adding in the data from all pardonsvar pardonData = _.sortBy(pardonData, function(item) { return item.SortName;});var pardonsCollection = new PardonCollection(pardonData);//create the view of all the pardonDatafilteredCollection.reset(pardonData);//create pardon type collection from datavar pardontypeCollection = new PardonTypeCollection( _.sortBy(_.uniq(pardonsCollection.pluck('Pardon_Type'))));var pardontypesView = new PardonTypesView({ collection: pardontypeCollection});//create year collection from datavar yearCollection = new YearCollection( _.sortBy(_.uniq(pardonsCollection.pluck('Year'))));var yearsView = new YearsView({ collection: yearCollection });//create county collection from datavar countyCollection = new CountyCollection( _.sortBy(_.uniq(pardonsCollection.pluck('County'))));var countiesView = new CountiesView({ collection: countyCollection });//create crime type collection from datavar crimeCollection = new CrimeCollection( _.sortBy(_.uniq(pardonsCollection.pluck('Crime_Type'))));var crimesView = new CrimesView({ collection: crimeCollection });var resetHeaders = function() { var tableHeads = $('th'); for(var i = 0; i < tableHeads.length; i++) { $(tableHeads[i]).removeClass('sort-asc').removeClass('sort-desc').addClass('siftable'); }};