{"action":"created","comment":{"url":"https://api.github.com/repos/Yoast/wordpress-seo/pulls/comments/65317698","id":65317698,"diff_hunk":"@@ -1,70 +1,327 @@\n-/* global wpseoReplaceVarsL10n */\n+/* global wpseoReplaceVarsL10n, require, YoastSEO */\n (function() {\n \t'use strict';\n \n+\tvar forEach = require( 'lodash/forEach' );\n+\tvar filter = require( 'lodash/filter' );\n+\tvar isUndefined = require( 'lodash/isUndefined' );\n+\tvar ReplaceVar = require( './values/replaceVar' );\n+\n+\tvar modifiableFields = [\n+\t\t'content',\n+\t\t'title',\n+\t\t'snippet_title',\n+\t\t'snippet_meta',\n+\t\t'primary_category',\n+\t\t'data_page_title',\n+\t\t'data_meta_desc'\n+\t];\n+\n+\tvar placeholders = {};\n+\tvar taxonomyElements = {};\n+\n \t/**\n-\t * variable replacement plugin for wordpress.\n+\t * Variable replacement plugin for WordPress.\n \t */\n \tvar YoastReplaceVarPlugin = function( app ) {\n \t\tthis._app = app;\n-\n-\t\tthis.replaceVars = wpseoReplaceVarsL10n.replace_vars;\n-\n \t\tthis._app.registerPlugin( 'replaceVariablePlugin', { status: 'ready' } );\n \n+\t\tthis.registerReplacements();\n \t\tthis.registerModifications();\n+\t\tthis.registerEvents();\n+\t};\n+\n+\tYoastReplaceVarPlugin.prototype.registerReplacements = function() {\n+\t\tthis.addReplacement( new ReplaceVar( '%%currentdate%%',     'currentdate' ) );\n+\t\tthis.addReplacement( new ReplaceVar( '%%currentday%%',      'currentday' ) );\n+\t\tthis.addReplacement( new ReplaceVar( '%%currentmonth%%',    'currentmonth' ) );\n+\t\tthis.addReplacement( new ReplaceVar( '%%currenttime%%',     'currenttime' ) );\n+\t\tthis.addReplacement( new ReplaceVar( '%%currentyear%%',     'currentyear' ) );\n+\t\tthis.addReplacement( new ReplaceVar( '%%date%%',            'date' ) );\n+\t\tthis.addReplacement( new ReplaceVar( '%%id%%',              'id' ) );\n+\t\tthis.addReplacement( new ReplaceVar( '%%page%%',            'page' ) );\n+\t\tthis.addReplacement( new ReplaceVar( '%%searchphrase%%',    'searchphrase' ) );\n+\t\tthis.addReplacement( new ReplaceVar( '%%sitedesc%%',        'sitedesc' ) );\n+\t\tthis.addReplacement( new ReplaceVar( '%%sitename%%',        'sitename' ) );\n+\t\tthis.addReplacement( new ReplaceVar( '%%category%%',        'category' ) );\n+\n+\t\tthis.addReplacement( new ReplaceVar( '%%sep%%(\\s+%%sep%%)*', 'sep' ) );\n+\n+\t\tthis.addReplacement( new ReplaceVar( '%%focuskw%%', 'keyword', {\n+\t\t\tsource: 'app',\n+\t\t\taliases: [ '%%keyword%%' ]\n+\t\t} ) );\n+\n+\t\tthis.addReplacement( new ReplaceVar( '%%term_description%%', 'text', {\n+\t\t\tsource: 'app',\n+\t\t\tscope: [ 'term', 'category', 'tag' ],\n+\t\t\taliases: [ '%%tag_description%%', '%%category_description%%' ]\n+\t\t} ) );\n+\n+\t\tthis.addReplacement( new ReplaceVar( '%%term_title%%', 'term_title', {\n+\t\t\tscope: [ 'post', 'term' ]\n+\t\t} ) );\n+\n+\t\tthis.addReplacement( new ReplaceVar( '%%title%%', 'title', {\n+\t\t\tsource: 'app',\n+\t\t\tscope: [ 'post', 'term', 'page' ]\n+\t\t} ) );\n+\n+\t\tthis.addReplacement( new ReplaceVar( '%%parent_title%%', 'title', {\n+\t\t\tsource: 'app',\n+\t\t\tscope: [ 'page', 'category' ]\n+\t\t} ) );\n+\n+\t\tthis.addReplacement( new ReplaceVar( '%%excerpt%%', 'excerpt', {\n+\t\t\tsource: 'app',\n+\t\t\tscope: [ 'post' ],\n+\t\t\taliases: [ '%%excerpt_only%%' ]\n+\t\t} ) );\n+\n+\t\tthis.addReplacement( new ReplaceVar( '%%primary_category%%', 'primaryCategory', {\n+\t\t\tsource: 'app', scope: [ 'post' ]\n+\t\t} ) );\n+\t};\n+\n+\tYoastReplaceVarPlugin.prototype.registerEvents = function() {\n+\t\tvar currentPage = wpseoReplaceVarsL10n.scope;\n+\n+\t\tif ( currentPage === 'post' ) {\n+\t\t\t// Register category and tag events\n+\t\t\t// Set events for each taxonomy box.\n+\t\t\tjQuery( '.categorydiv' ).each( this.bindTaxonomyEvents.bind( this ) );\n+//\t\t\tjQuery( '.tagsdiv' ).each( this.bindTaxonomyEvents.bind( this ) );\n+\t\t}\n+\n+\t\tif ( currentPage === 'post' || currentPage === 'page' )  {\n+\t\t\tjQuery( '#postcustomstuff > #list-table' ).each( this.bindFieldEvents.bind( this ) );\n+\t\t}\n \t};\n \n \t/**\n-\t * Registers the modifications for the plugin.\n+\t * Gets the taxonomy name.\n+\t * The logic of this function is inspired by: http://viralpatel.net/blogs/jquery-get-text-element-without-child-element/\n+\t *\n+\t * @param {Object} checkbox\n+\t * @returns String\n \t */\n-\tYoastReplaceVarPlugin.prototype.registerModifications = function() {\n-\t\tvar callback = this.replaceVariablesPlugin.bind( this );\n+\tYoastReplaceVarPlugin.prototype.getCategoryName = function( checkbox ) {\n+\t\t// Take parent of checkbox with type label.\n+\t\tvar label = jQuery( checkbox ).parent( 'label' );\n+\n+\t\t// We don't want to touch the element itself, thus we will clone it.\n+\t\tvar cloned_label = label.clone();\n+\n+\t\t// Finds the span element.\n+\t\tvar span = cloned_label.find( 'span' );\n \n-\t\tthis._app.registerModification( 'content', callback, 'replaceVariablePlugin', 10 );\n-\t\tthis._app.registerModification( 'title', callback, 'replaceVariablePlugin', 10 );\n-\t\tthis._app.registerModification( 'snippet_title', callback, 'replaceVariablePlugin', 10 );\n-\t\tthis._app.registerModification( 'snippet_meta', callback, 'replaceVariablePlugin', 10 );\n-\t\tthis._app.registerModification( 'primary_category', callback, 'replaceVariablePlugin', 10 );\n+\t\t// Remove the span, because it could contain some text.\n+\t\tspan.remove();\n \n-\t\t//modifications applied on the getData from the scrapers to use templates\n-\t\tthis._app.registerModification( 'data_page_title', callback, 'replaceVariablePlugin', 10);\n-\t\tthis._app.registerModification( 'data_meta_desc', callback, 'replaceVariablePlugin', 10);\n+\t\t// Get the text value,\n+\t\tvar text_only = cloned_label.text();\n+\n+\t\t// Return the trimmed value.\n+\t\treturn text_only.trim();\n \t};\n \n \t/**\n-\t * runs the different replacements on the data-string\n-\t * @param {String} data\n-\t * @returns {string}\n+\t * Get the taxonomies that are available on the current page.\n+\t *\n+\t * @param {Object} checkboxes\n+\t * @param {string} taxonomyName\n \t */\n-\tYoastReplaceVarPlugin.prototype.replaceVariablesPlugin = function( data ) {\n-\t\tif( typeof data !== 'undefined' ) {\n-\t\t\tdata = this.titleReplace( data );\n-\t\t\tdata = this.termtitleReplace( data );\n-\t\t\tdata = this.defaultReplace( data );\n-\t\t\tdata = this.parentReplace( data );\n-\t\t\tdata = this.replaceSeparators( data );\n-\t\t\tdata = this.excerptReplace( data );\n-\t\t\tdata = this.primaryCategoryReplace( data );\n+\tYoastReplaceVarPlugin.prototype.parseTaxonomies = function( checkboxes, taxonomyName ) {\n+\t\tif ( isUndefined( taxonomyElements[ taxonomyName ] ) ) {\n+\t\t\ttaxonomyElements[ taxonomyName ] = {};\n \t\t}\n-\t\treturn data;\n+\n+\t\tforEach( checkboxes, function( checkbox ) {\n+\t\t\tvar taxonomyID = jQuery( checkbox ).val();\n+\n+\t\t\ttaxonomyElements[ taxonomyName ][ taxonomyID ] = {\n+\t\t\t\tlabel: this.getCategoryName( checkbox ),\n+\t\t\t\tchecked: checkbox.checked\n+\t\t\t};\n+\t\t}.bind( this ) );\n+\t};\n+\n+\t/**\n+\t * Get the custom fields that are available on the current page.\n+\t *\n+\t * @param {Object} textFields\n+\t */\n+\tYoastReplaceVarPlugin.prototype.parseFields = function( textFields ) {\n+\t\tjQuery( textFields ).each(\n+\t\t\tfunction( i, el ) {\n+\t\t\t\tvar customFieldName = jQuery( '#' + el.id + '-key' ).val();\n+\t\t\t\tvar customValue = jQuery( '#' + el.id + '-value' ).val();\n+\n+\t\t\t\t// Register these as new replacevars\n+\t\t\t\tthis.addReplacement( new ReplaceVar( '%%cf_' + customFieldName.replace( ' ', '_' ) + '%%', customValue, { source: 'direct' } ) );\n+\t\t\t}.bind( this )\n+\t\t);\n \t};\n \n \t/**\n-\t * Replaces %%title%% with the title\n+\t * Removes the custom fields.\n+\t *\n+\t * @param {Object} textFields\n+\t */\n+\tYoastReplaceVarPlugin.prototype.removeFields = function( textFields ) {\n+\t\tjQuery( textFields ).each(\n+\t\t\tfunction( i, el ) {\n+\t\t\t\tvar customFieldName = jQuery( '#' + el.id + '-key' ).val();\n+\n+\t\t\t\t// Register these as new replacevars\n+\t\t\t\tthis.removeReplacement( '%%cf_' + customFieldName.replace( ' ', '_' ) + '%%' );\n+\t\t\t}.bind( this )\n+\t\t);\n+\t};\n+\n+\t/**\n+\t * Get the taxonomies that are available on the current page.\n+\t * TODO: Add more than just categories\n+\t * @param {Object} targetMetaBox\n+\t *\n+\t * @returns {void}\n+\t */\n+\tYoastReplaceVarPlugin.prototype.getAvailableTaxonomies = function( targetMetaBox ) {\n+\t\tvar checkboxes = jQuery( targetMetaBox ).find( 'input[type=checkbox]' );\n+\t\tvar taxonomyName = jQuery( targetMetaBox ).attr( 'id' ).replace( 'taxonomy-', '' );\n+\n+\t\tif ( checkboxes.length > 0 ) {\n+\t\t\tthis.parseTaxonomies( checkboxes, taxonomyName );\n+\t\t}\n+\n+\t\tthis.declareReloaded();\n+\t};\n+\n+\t/**\n+\t * Get the custom fields that are available on the current page.\n+\t *\n+\t * @param {object} targetMetaBox\n+\t *\n+\t * @returns {void}\n+\t */\n+\tYoastReplaceVarPlugin.prototype.getAvailableFields = function( targetMetaBox ) {\n+\t\t// Remove all the custom fields prior. This ensure that deleted fields don't show up.\n+\t\tthis.removeCustomFields();\n+\n+\t\tvar textFields = jQuery( targetMetaBox ).find( '#the-list > tr:visible' );\n+\n+\t\tif ( textFields.length > 0 ) {\n+\t\t\tthis.parseFields( textFields );\n+\t\t}\n+\n+\t\tthis.declareReloaded();\n+\t};\n+\n+\t/**\n+\t * Binding events for each taxonomy metabox element.\n+\t *\n+\t * @param {int} index\n+\t * @param {Object} taxonomyElement\n+\t */\n+\tYoastReplaceVarPlugin.prototype.bindTaxonomyEvents = function( index, taxonomyElement ) {\n+\t\ttaxonomyElement = jQuery( taxonomyElement );\n+\n+\t\t// Set the events.\n+\t\ttaxonomyElement.on( 'wpListAddEnd', '.categorychecklist', this.getAvailableTaxonomies.bind( this, taxonomyElement ) );\n+\t\ttaxonomyElement.on( 'change', 'input[type=checkbox]', this.getAvailableTaxonomies.bind( this, taxonomyElement ) );\n+\n+\t\t// Get the available taxonomies upon loading the plugin.\n+\t\tthis.getAvailableTaxonomies( taxonomyElement );\n+\t};\n+\n+\t/**\n+\t * Binding events for each taxonomy metabox element.\n+\t *\n+\t * @param {int} index\n+\t * @param {Object} customFieldElement\n+\t */\n+\tYoastReplaceVarPlugin.prototype.bindFieldEvents = function( index, customFieldElement ) {\n+\t\tcustomFieldElement = jQuery( customFieldElement );\n+\t\tvar customFieldElementList = customFieldElement.find( '#the-list' );\n+\n+\t\tcustomFieldElementList.on( 'wpListDelEnd.wpseoCustomFields', this.getAvailableFields.bind( this, customFieldElement ) );\n+\t\tcustomFieldElementList.on( 'wpListAddEnd.wpseoCustomFields', this.getAvailableFields.bind( this, customFieldElement ) );\n+\t\tcustomFieldElementList.on( 'input.wpseoCustomFields', '.textarea', this.getAvailableFields.bind( this, customFieldElement ) );\n+\t\tcustomFieldElementList.on( 'click.wpseoCustomFields', '.button + .updatemeta', this.getAvailableFields.bind( this, customFieldElement ) );\n+\n+\t\t// Get the available fields upon loading the plugin.\n+\t\tthis.getAvailableFields( customFieldElement );\n+\t};\n+\n+\t/**\n+\t * Looks for custom fields in the list of placeholders and deletes them.\n+\t */\n+\tYoastReplaceVarPlugin.prototype.removeCustomFields = function() {\n+\t\tvar customFields = filter( placeholders, function( item, key ) {\n+\t\t\treturn key.indexOf( '%%cf_' ) > -1;\n+\t\t} );\n+\n+\t\tforEach( customFields, function( item ) {\n+\t\t\tthis.removeReplacement( item );\n+\t\t}.bind( this ) );\n+\t};\n+\n+\t/**\n+\t * Add a replacement object to be used when replacing placeholders.\n+\t *\n+\t * @param {Object} replacement\n+\t */\n+\tYoastReplaceVarPlugin.prototype.addReplacement = function( replacement ) {\n+\t\tplaceholders[ replacement.placeholder ] = replacement;\n+\t};\n+\n+\t/**\n+\t * Removes a replacement if it exists.\n+\t *\n+\t * @param {ReplaceVar} replacement\n+\t */\n+\tYoastReplaceVarPlugin.prototype.removeReplacement = function( replacement ) {\n+\t\tdelete placeholders[ replacement.getPlaceholder() ];\n+\t};\n+\n+\t/**\n+\t * Registers the modifications for the plugin on initial load.\n+\t */\n+\tYoastReplaceVarPlugin.prototype.registerModifications = function() {\n+\t\tvar callback = this.replaceVariables.bind( this );\n+\n+\t\tforEach( modifiableFields, function( field ) {\n+\t\t\tthis._app.registerModification( field, callback, 'replaceVariablePlugin', 10 );\n+\t\t}.bind( this ) );\n+\t};\n+\n+\t/**\n+\t * Runs the different replacements on the data-string.\n+\t *\n+\t * TODO: this can be done in `replaceDefaultPlaceholders` once termtitle and parentreplace are moved / fixed.","path":"js/src/wp-seo-replacevar-plugin.js","position":332,"original_position":332,"commit_id":"7cff8a3cbab6a04e45129068014dfce5086feb75","original_commit_id":"7cff8a3cbab6a04e45129068014dfce5086feb75","user":{"login":"atimmer","id":584693,"avatar_url":"https://avatars.githubusercontent.com/u/584693?v=3","gravatar_id":"","url":"https://api.github.com/users/atimmer","html_url":"https://github.com/atimmer","followers_url":"https://api.github.com/users/atimmer/followers","following_url":"https://api.github.com/users/atimmer/following{/other_user}","gists_url":"https://api.github.com/users/atimmer/gists{/gist_id}","starred_url":"https://api.github.com/users/atimmer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/atimmer/subscriptions","organizations_url":"https://api.github.com/users/atimmer/orgs","repos_url":"https://api.github.com/users/atimmer/repos","events_url":"https://api.github.com/users/atimmer/events{/privacy}","received_events_url":"https://api.github.com/users/atimmer/received_events","type":"User","site_admin":false},"body":"I prefer making an issue on GitHub.","created_at":"2016-06-01T08:04:34Z","updated_at":"2016-06-01T08:04:34Z","html_url":"https://github.com/Yoast/wordpress-seo/pull/4725#discussion_r65317698","pull_request_url":"https://api.github.com/repos/Yoast/wordpress-seo/pulls/4725","_links":{"self":{"href":"https://api.github.com/repos/Yoast/wordpress-seo/pulls/comments/65317698"},"html":{"href":"https://github.com/Yoast/wordpress-seo/pull/4725#discussion_r65317698"},"pull_request":{"href":"https://api.github.com/repos/Yoast/wordpress-seo/pulls/4725"}}},"pull_request":{"url":"https://api.github.com/repos/Yoast/wordpress-seo/pulls/4725","id":72039783,"html_url":"https://github.com/Yoast/wordpress-seo/pull/4725","diff_url":"https://github.com/Yoast/wordpress-seo/pull/4725.diff","patch_url":"https://github.com/Yoast/wordpress-seo/pull/4725.patch","issue_url":"https://api.github.com/repos/Yoast/wordpress-seo/issues/4725","number":4725,"state":"open","locked":false,"title":"Implemented a new method way of parsing replace vars","user":{"login":"jcomack","id":4181340,"avatar_url":"https://avatars.githubusercontent.com/u/4181340?v=3","gravatar_id":"","url":"https://api.github.com/users/jcomack","html_url":"https://github.com/jcomack","followers_url":"https://api.github.com/users/jcomack/followers","following_url":"https://api.github.com/users/jcomack/following{/other_user}","gists_url":"https://api.github.com/users/jcomack/gists{/gist_id}","starred_url":"https://api.github.com/users/jcomack/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jcomack/subscriptions","organizations_url":"https://api.github.com/users/jcomack/orgs","repos_url":"https://api.github.com/users/jcomack/repos","events_url":"https://api.github.com/users/jcomack/events{/privacy}","received_events_url":"https://api.github.com/users/jcomack/received_events","type":"User","site_admin":false},"body":"This PR consists of a complete overhaul of the replace var system, making it more robust.\r\nCurrently tags aren't being processed yet, nor are a few of the replace vars (such as `%%user_description%%`). This will be added later.\r\n\r\nFixes #4450 \r\nFixes #3953 \r\nFixes #3364 \r\n\r\n","created_at":"2016-05-31T15:48:42Z","updated_at":"2016-06-01T08:04:34Z","closed_at":null,"merged_at":null,"merge_commit_sha":"2f513f7b5c75cad10dac3564e0b061c6667b2405","assignee":null,"milestone":{"url":"https://api.github.com/repos/Yoast/wordpress-seo/milestones/27","html_url":"https://github.com/Yoast/wordpress-seo/milestones/3.3","labels_url":"https://api.github.com/repos/Yoast/wordpress-seo/milestones/27/labels","id":1512240,"number":27,"title":"3.3","description":"Theme: Content and copywriting","creator":{"login":"omarreiss","id":1488816,"avatar_url":"https://avatars.githubusercontent.com/u/1488816?v=3","gravatar_id":"","url":"https://api.github.com/users/omarreiss","html_url":"https://github.com/omarreiss","followers_url":"https://api.github.com/users/omarreiss/followers","following_url":"https://api.github.com/users/omarreiss/following{/other_user}","gists_url":"https://api.github.com/users/omarreiss/gists{/gist_id}","starred_url":"https://api.github.com/users/omarreiss/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/omarreiss/subscriptions","organizations_url":"https://api.github.com/users/omarreiss/orgs","repos_url":"https://api.github.com/users/omarreiss/repos","events_url":"https://api.github.com/users/omarreiss/events{/privacy}","received_events_url":"https://api.github.com/users/omarreiss/received_events","type":"User","site_admin":false},"open_issues":22,"closed_issues":77,"state":"open","created_at":"2016-01-18T10:42:36Z","updated_at":"2016-05-31T20:43:03Z","due_on":"2016-06-13T22:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/Yoast/wordpress-seo/pulls/4725/commits","review_comments_url":"https://api.github.com/repos/Yoast/wordpress-seo/pulls/4725/comments","review_comment_url":"https://api.github.com/repos/Yoast/wordpress-seo/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Yoast/wordpress-seo/issues/4725/comments","statuses_url":"https://api.github.com/repos/Yoast/wordpress-seo/statuses/7cff8a3cbab6a04e45129068014dfce5086feb75","head":{"label":"Yoast:JC/replace-custom-vars","ref":"JC/replace-custom-vars","sha":"7cff8a3cbab6a04e45129068014dfce5086feb75","user":{"login":"Yoast","id":4690436,"avatar_url":"https://avatars.githubusercontent.com/u/4690436?v=3","gravatar_id":"","url":"https://api.github.com/users/Yoast","html_url":"https://github.com/Yoast","followers_url":"https://api.github.com/users/Yoast/followers","following_url":"https://api.github.com/users/Yoast/following{/other_user}","gists_url":"https://api.github.com/users/Yoast/gists{/gist_id}","starred_url":"https://api.github.com/users/Yoast/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Yoast/subscriptions","organizations_url":"https://api.github.com/users/Yoast/orgs","repos_url":"https://api.github.com/users/Yoast/repos","events_url":"https://api.github.com/users/Yoast/events{/privacy}","received_events_url":"https://api.github.com/users/Yoast/received_events","type":"Organization","site_admin":false},"repo":{"id":6723399,"name":"wordpress-seo","full_name":"Yoast/wordpress-seo","owner":{"login":"Yoast","id":4690436,"avatar_url":"https://avatars.githubusercontent.com/u/4690436?v=3","gravatar_id":"","url":"https://api.github.com/users/Yoast","html_url":"https://github.com/Yoast","followers_url":"https://api.github.com/users/Yoast/followers","following_url":"https://api.github.com/users/Yoast/following{/other_user}","gists_url":"https://api.github.com/users/Yoast/gists{/gist_id}","starred_url":"https://api.github.com/users/Yoast/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Yoast/subscriptions","organizations_url":"https://api.github.com/users/Yoast/orgs","repos_url":"https://api.github.com/users/Yoast/repos","events_url":"https://api.github.com/users/Yoast/events{/privacy}","received_events_url":"https://api.github.com/users/Yoast/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Yoast/wordpress-seo","description":"Yoast SEO for WordPress","fork":false,"url":"https://api.github.com/repos/Yoast/wordpress-seo","forks_url":"https://api.github.com/repos/Yoast/wordpress-seo/forks","keys_url":"https://api.github.com/repos/Yoast/wordpress-seo/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Yoast/wordpress-seo/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Yoast/wordpress-seo/teams","hooks_url":"https://api.github.com/repos/Yoast/wordpress-seo/hooks","issue_events_url":"https://api.github.com/repos/Yoast/wordpress-seo/issues/events{/number}","events_url":"https://api.github.com/repos/Yoast/wordpress-seo/events","assignees_url":"https://api.github.com/repos/Yoast/wordpress-seo/assignees{/user}","branches_url":"https://api.github.com/repos/Yoast/wordpress-seo/branches{/branch}","tags_url":"https://api.github.com/repos/Yoast/wordpress-seo/tags","blobs_url":"https://api.github.com/repos/Yoast/wordpress-seo/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Yoast/wordpress-seo/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Yoast/wordpress-seo/git/refs{/sha}","trees_url":"https://api.github.com/repos/Yoast/wordpress-seo/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Yoast/wordpress-seo/statuses/{sha}","languages_url":"https://api.github.com/repos/Yoast/wordpress-seo/languages","stargazers_url":"https://api.github.com/repos/Yoast/wordpress-seo/stargazers","contributors_url":"https://api.github.com/repos/Yoast/wordpress-seo/contributors","subscribers_url":"https://api.github.com/repos/Yoast/wordpress-seo/subscribers","subscription_url":"https://api.github.com/repos/Yoast/wordpress-seo/subscription","commits_url":"https://api.github.com/repos/Yoast/wordpress-seo/commits{/sha}","git_commits_url":"https://api.github.com/repos/Yoast/wordpress-seo/git/commits{/sha}","comments_url":"https://api.github.com/repos/Yoast/wordpress-seo/comments{/number}","issue_comment_url":"https://api.github.com/repos/Yoast/wordpress-seo/issues/comments{/number}","contents_url":"https://api.github.com/repos/Yoast/wordpress-seo/contents/{+path}","compare_url":"https://api.github.com/repos/Yoast/wordpress-seo/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Yoast/wordpress-seo/merges","archive_url":"https://api.github.com/repos/Yoast/wordpress-seo/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Yoast/wordpress-seo/downloads","issues_url":"https://api.github.com/repos/Yoast/wordpress-seo/issues{/number}","pulls_url":"https://api.github.com/repos/Yoast/wordpress-seo/pulls{/number}","milestones_url":"https://api.github.com/repos/Yoast/wordpress-seo/milestones{/number}","notifications_url":"https://api.github.com/repos/Yoast/wordpress-seo/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Yoast/wordpress-seo/labels{/name}","releases_url":"https://api.github.com/repos/Yoast/wordpress-seo/releases{/id}","deployments_url":"https://api.github.com/repos/Yoast/wordpress-seo/deployments","created_at":"2012-11-16T15:16:29Z","updated_at":"2016-05-31T09:24:09Z","pushed_at":"2016-06-01T07:11:40Z","git_url":"git://github.com/Yoast/wordpress-seo.git","ssh_url":"git@github.com:Yoast/wordpress-seo.git","clone_url":"https://github.com/Yoast/wordpress-seo.git","svn_url":"https://github.com/Yoast/wordpress-seo","homepage":"http://yoast.com/wordpress/seo/","size":39499,"stargazers_count":638,"watchers_count":638,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":383,"mirror_url":null,"open_issues_count":562,"forks":383,"open_issues":562,"watchers":638,"default_branch":"trunk"}},"base":{"label":"Yoast:trunk","ref":"trunk","sha":"dff59450aa9ff9f0e5abb59ed79203be04e268c6","user":{"login":"Yoast","id":4690436,"avatar_url":"https://avatars.githubusercontent.com/u/4690436?v=3","gravatar_id":"","url":"https://api.github.com/users/Yoast","html_url":"https://github.com/Yoast","followers_url":"https://api.github.com/users/Yoast/followers","following_url":"https://api.github.com/users/Yoast/following{/other_user}","gists_url":"https://api.github.com/users/Yoast/gists{/gist_id}","starred_url":"https://api.github.com/users/Yoast/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Yoast/subscriptions","organizations_url":"https://api.github.com/users/Yoast/orgs","repos_url":"https://api.github.com/users/Yoast/repos","events_url":"https://api.github.com/users/Yoast/events{/privacy}","received_events_url":"https://api.github.com/users/Yoast/received_events","type":"Organization","site_admin":false},"repo":{"id":6723399,"name":"wordpress-seo","full_name":"Yoast/wordpress-seo","owner":{"login":"Yoast","id":4690436,"avatar_url":"https://avatars.githubusercontent.com/u/4690436?v=3","gravatar_id":"","url":"https://api.github.com/users/Yoast","html_url":"https://github.com/Yoast","followers_url":"https://api.github.com/users/Yoast/followers","following_url":"https://api.github.com/users/Yoast/following{/other_user}","gists_url":"https://api.github.com/users/Yoast/gists{/gist_id}","starred_url":"https://api.github.com/users/Yoast/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Yoast/subscriptions","organizations_url":"https://api.github.com/users/Yoast/orgs","repos_url":"https://api.github.com/users/Yoast/repos","events_url":"https://api.github.com/users/Yoast/events{/privacy}","received_events_url":"https://api.github.com/users/Yoast/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Yoast/wordpress-seo","description":"Yoast SEO for WordPress","fork":false,"url":"https://api.github.com/repos/Yoast/wordpress-seo","forks_url":"https://api.github.com/repos/Yoast/wordpress-seo/forks","keys_url":"https://api.github.com/repos/Yoast/wordpress-seo/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Yoast/wordpress-seo/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Yoast/wordpress-seo/teams","hooks_url":"https://api.github.com/repos/Yoast/wordpress-seo/hooks","issue_events_url":"https://api.github.com/repos/Yoast/wordpress-seo/issues/events{/number}","events_url":"https://api.github.com/repos/Yoast/wordpress-seo/events","assignees_url":"https://api.github.com/repos/Yoast/wordpress-seo/assignees{/user}","branches_url":"https://api.github.com/repos/Yoast/wordpress-seo/branches{/branch}","tags_url":"https://api.github.com/repos/Yoast/wordpress-seo/tags","blobs_url":"https://api.github.com/repos/Yoast/wordpress-seo/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Yoast/wordpress-seo/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Yoast/wordpress-seo/git/refs{/sha}","trees_url":"https://api.github.com/repos/Yoast/wordpress-seo/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Yoast/wordpress-seo/statuses/{sha}","languages_url":"https://api.github.com/repos/Yoast/wordpress-seo/languages","stargazers_url":"https://api.github.com/repos/Yoast/wordpress-seo/stargazers","contributors_url":"https://api.github.com/repos/Yoast/wordpress-seo/contributors","subscribers_url":"https://api.github.com/repos/Yoast/wordpress-seo/subscribers","subscription_url":"https://api.github.com/repos/Yoast/wordpress-seo/subscription","commits_url":"https://api.github.com/repos/Yoast/wordpress-seo/commits{/sha}","git_commits_url":"https://api.github.com/repos/Yoast/wordpress-seo/git/commits{/sha}","comments_url":"https://api.github.com/repos/Yoast/wordpress-seo/comments{/number}","issue_comment_url":"https://api.github.com/repos/Yoast/wordpress-seo/issues/comments{/number}","contents_url":"https://api.github.com/repos/Yoast/wordpress-seo/contents/{+path}","compare_url":"https://api.github.com/repos/Yoast/wordpress-seo/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Yoast/wordpress-seo/merges","archive_url":"https://api.github.com/repos/Yoast/wordpress-seo/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Yoast/wordpress-seo/downloads","issues_url":"https://api.github.com/repos/Yoast/wordpress-seo/issues{/number}","pulls_url":"https://api.github.com/repos/Yoast/wordpress-seo/pulls{/number}","milestones_url":"https://api.github.com/repos/Yoast/wordpress-seo/milestones{/number}","notifications_url":"https://api.github.com/repos/Yoast/wordpress-seo/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Yoast/wordpress-seo/labels{/name}","releases_url":"https://api.github.com/repos/Yoast/wordpress-seo/releases{/id}","deployments_url":"https://api.github.com/repos/Yoast/wordpress-seo/deployments","created_at":"2012-11-16T15:16:29Z","updated_at":"2016-05-31T09:24:09Z","pushed_at":"2016-06-01T07:11:40Z","git_url":"git://github.com/Yoast/wordpress-seo.git","ssh_url":"git@github.com:Yoast/wordpress-seo.git","clone_url":"https://github.com/Yoast/wordpress-seo.git","svn_url":"https://github.com/Yoast/wordpress-seo","homepage":"http://yoast.com/wordpress/seo/","size":39499,"stargazers_count":638,"watchers_count":638,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":383,"mirror_url":null,"open_issues_count":562,"forks":383,"open_issues":562,"watchers":638,"default_branch":"trunk"}},"_links":{"self":{"href":"https://api.github.com/repos/Yoast/wordpress-seo/pulls/4725"},"html":{"href":"https://github.com/Yoast/wordpress-seo/pull/4725"},"issue":{"href":"https://api.github.com/repos/Yoast/wordpress-seo/issues/4725"},"comments":{"href":"https://api.github.com/repos/Yoast/wordpress-seo/issues/4725/comments"},"review_comments":{"href":"https://api.github.com/repos/Yoast/wordpress-seo/pulls/4725/comments"},"review_comment":{"href":"https://api.github.com/repos/Yoast/wordpress-seo/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Yoast/wordpress-seo/pulls/4725/commits"},"statuses":{"href":"https://api.github.com/repos/Yoast/wordpress-seo/statuses/7cff8a3cbab6a04e45129068014dfce5086feb75"}}}}
{"actor":{"display_login":"atimmer"}}