/** * Displays a human readable HTML representation of the difference between two strings. * * The Diff is available for getting the changes between versions. The output is * HTML, so the primary use is for displaying the changes. If the two strings * are equivalent, then an empty string will be returned. * * The arguments supported and can be changed are listed below. * * 'title' : Default is an empty string. Titles the diff in a manner compatible * with the output. * 'title_left' : Default is an empty string. Change the HTML to the left of the * title. * 'title_right' : Default is an empty string. Change the HTML to the right of * the title. * * @since 2.6.0 * * @see wp_parse_args() Used to change defaults to user defined settings. * @uses Text_Diff * @uses WP_Text_Diff_Renderer_Table * * @param string $left_string "old" (left) version of string * @param string $right_string "new" (right) version of string * @param string|array $args Optional. Change 'title', 'title_left', and 'title_right' defaults. * @return string Empty string if strings are equivalent or HTML with differences. */ function wp_text_diff($left_string, $right_string, $args = null) { $defaults = array('title' => '', 'title_left' => '', 'title_right' => ''); $args = wp_parse_args($args, $defaults); if (!class_exists('WP_Text_Diff_Renderer_Table')) { require ABSPATH . WPINC . '/wp-diff.php'; } $left_string = normalize_whitespace($left_string); $right_string = normalize_whitespace($right_string); $left_lines = explode("\n", $left_string); $right_lines = explode("\n", $right_string); $text_diff = new Text_Diff($left_lines, $right_lines); $renderer = new WP_Text_Diff_Renderer_Table($args); $diff = $renderer->render($text_diff); if (!$diff) { return ''; } $r = "<table class='diff'>\n"; if (!empty($args['show_split_view'])) { $r .= "<col class='content diffsplit left' /><col class='content diffsplit middle' /><col class='content diffsplit right' />"; } else { $r .= "<col class='content' />"; } if ($args['title'] || $args['title_left'] || $args['title_right']) { $r .= "<thead>"; } if ($args['title']) { $r .= "<tr class='diff-title'><th colspan='4'>{$args['title']}</th></tr>\n"; } if ($args['title_left'] || $args['title_right']) { $r .= "<tr class='diff-sub-title'>\n"; $r .= "\t<td></td><th>{$args['title_left']}</th>\n"; $r .= "\t<td></td><th>{$args['title_right']}</th>\n"; $r .= "</tr>\n"; } if ($args['title'] || $args['title_left'] || $args['title_right']) { $r .= "</thead>\n"; } $r .= "<tbody>\n{$diff}\n</tbody>\n"; $r .= "</table>"; return $r; }
/** * Displays a human readable HTML representation of the difference between two strings. * * The Diff is available for getting the changes between versions. The output is * HTML, so the primary use is for displaying the changes. If the two strings * are equivalent, then an empty string will be returned. * * The arguments supported and can be changed are listed below. * * 'title' : Default is an empty string. Titles the diff in a manner compatible * with the output. * 'title_left' : Default is an empty string. Change the HTML to the left of the * title. * 'title_right' : Default is an empty string. Change the HTML to the right of * the title. * * @since 2.6 * @see wp_parse_args() Used to change defaults to user defined settings. * @uses Text_Diff * @uses WP_Text_Diff_Renderer_Table * * @param string $left_string "old" (left) version of string * @param string $right_string "new" (right) version of string * @param string|array $args Optional. Change 'title', 'title_left', and 'title_right' defaults. * @return string Empty string if strings are equivalent or HTML with differences. */ function wp_text_diff($left_string, $right_string, $args = null) { $defaults = array('title' => '', 'title_left' => '', 'title_right' => ''); $args = wp_parse_args($args, $defaults); // PEAR Text_Diff is lame; it includes things from include_path rather than it's own path. // Not sure of the ramifications of disttributing modified code. ini_set('include_path', '.' . PATH_SEPARATOR . ABSPATH . WPINC); if (!class_exists('WP_Text_Diff_Renderer_Table')) { require ABSPATH . WPINC . '/wp-diff.php'; } // Normalize whitespace $left_string = trim($left_string); $right_string = trim($right_string); $left_string = str_replace("\r", "\n", $left_string); $right_string = str_replace("\r", "\n", $right_string); $left_string = preg_replace(array('/\\n+/', '/[ \\t]+/'), array("\n", ' '), $left_string); $right_string = preg_replace(array('/\\n+/', '/[ \\t]+/'), array("\n", ' '), $right_string); $left_lines = split("\n", $left_string); $right_lines = split("\n", $right_string); $text_diff = new Text_Diff($left_lines, $right_lines); $renderer = new WP_Text_Diff_Renderer_Table(); $diff = $renderer->render($text_diff); ini_restore('include_path'); if (!$diff) { return ''; } $r = "<table class='diff'>\n"; $r .= "<col class='ltype' /><col class='content' /><col class='ltype' /><col class='content' />"; if ($args['title'] || $args['title_left'] || $args['title_right']) { $r .= "<thead>"; } if ($args['title']) { $r .= "<tr class='diff-title'><th colspan='4'>{$args['title']}</th></tr>\n"; } if ($args['title_left'] || $args['title_right']) { $r .= "<tr class='diff-sub-title'>\n"; $r .= "\t<td></td><th>{$args['title_left']}</th>\n"; $r .= "\t<td></td><th>{$args['title_right']}</th>\n"; $r .= "</tr>\n"; } if ($args['title'] || $args['title_left'] || $args['title_right']) { $r .= "</thead>\n"; } $r .= "<tbody>\n{$diff}\n</tbody>\n"; $r .= "</table>"; return $r; }
/** * Displays a human readable HTML representation of the difference between two strings. * * The Diff is available for getting the changes between versions. The output is * HTML, so the primary use is for displaying the changes. If the two strings * are equivalent, then an empty string will be returned. * * The arguments supported and can be changed are listed below. * * 'title' : Default is an empty string. Titles the diff in a manner compatible * with the output. * 'title_left' : Default is an empty string. Change the HTML to the left of the * title. * 'title_right' : Default is an empty string. Change the HTML to the right of * the title. * * @since 2.6 * @see wp_parse_args() Used to change defaults to user defined settings. * @uses Text_Diff * @uses WP_Text_Diff_Renderer_Table * * @param string $left_string "old" (left) version of string * @param string $right_string "new" (right) version of string * @param string|array $args Optional. Change 'title', 'title_left', and 'title_right' defaults. * @return string Empty string if strings are equivalent or HTML with differences. */ function wp_text_diff($left_string, $right_string, $args = null) { $defaults = array('title' => '', 'title_left' => '', 'title_right' => ''); $args = wp_parse_args($args, $defaults); if (!class_exists('WP_Text_Diff_Renderer_Table')) { require ABSPATH . WPINC . '/wp-diff.php'; } // Normalize whitespace $left_string = trim($left_string); $right_string = trim($right_string); $left_string = str_replace("\r", "\n", $left_string); $right_string = str_replace("\r", "\n", $right_string); $left_string = preg_replace(array('/\\n+/', '/[ \\t]+/'), array("\n", ' '), $left_string); $right_string = preg_replace(array('/\\n+/', '/[ \\t]+/'), array("\n", ' '), $right_string); $left_lines = split("\n", $left_string); $right_lines = split("\n", $right_string); $text_diff = new Text_Diff($left_lines, $right_lines); $renderer = new WP_Text_Diff_Renderer_Table(); $diff = $renderer->render($text_diff); if (!$diff) { return ''; } $r = "<table class='diff'>\n"; $r .= "<col class='ltype' /><col class='content' /><col class='ltype' /><col class='content' />"; if ($args['title'] || $args['title_left'] || $args['title_right']) { $r .= "<thead>"; } if ($args['title']) { $r .= "<tr class='diff-title'><th colspan='4'>{$args['title']}</th></tr>\n"; } if ($args['title_left'] || $args['title_right']) { $r .= "<tr class='diff-sub-title'>\n"; $r .= "\t<td></td><th>{$args['title_left']}</th>\n"; $r .= "\t<td></td><th>{$args['title_right']}</th>\n"; $r .= "</tr>\n"; } if ($args['title'] || $args['title_left'] || $args['title_right']) { $r .= "</thead>\n"; } $r .= "<tbody>\n{$diff}\n</tbody>\n"; $r .= "</table>"; return $r; }
/** * Normal wp_text_diff with three lines added as indicated * @access private * @version 3.4 */ function _wp_text_diff($left_string, $right_string, $args = null) { //fork edit: added parent arg $defaults = array('title' => '', 'title_left' => '', 'title_right' => '', 'fork' => false); $args = wp_parse_args($args, $defaults); if (!class_exists('WP_Text_Diff_Renderer_Table')) { require ABSPATH . WPINC . '/wp-diff.php'; } //begin fork edit global $fork; if ($args['fork']) { global $fork; $parent = $fork->revisions->get_previous_revision($args['fork']); $left_lines = get_post($parent)->post_content; } //end edit $left_string = normalize_whitespace($left_string); $right_string = normalize_whitespace($right_string); $left_lines = explode("\n", $left_string); $right_lines = explode("\n", $right_string); $text_diff = new Text_Diff($left_lines, $right_lines); $renderer = new WP_Text_Diff_Renderer_Table(); $diff = $renderer->render($text_diff); if (!$diff) { return ''; } $r = "<table class='diff'>\n"; $r .= "<col class='ltype' /><col class='content' /><col class='ltype' /><col class='content' />"; if ($args['title'] || $args['title_left'] || $args['title_right']) { $r .= "<thead>"; } if ($args['title']) { $r .= "<tr class='diff-title'><th colspan='4'>{$args['title']}</th></tr>\n"; } if ($args['title_left'] || $args['title_right']) { $r .= "<tr class='diff-sub-title'>\n"; $r .= "\t<td></td><th>{$args['title_left']}</th>\n"; $r .= "\t<td></td><th>{$args['title_right']}</th>\n"; $r .= "</tr>\n"; } if ($args['title'] || $args['title_left'] || $args['title_right']) { $r .= "</thead>\n"; } $r .= "<tbody>\n{$diff}\n</tbody>\n"; $r .= "</table>"; return $r; }
/** * Displays a human readable HTML representation of the difference between two strings. * * The Diff is available for getting the changes between versions. The output is * HTML, so the primary use is for displaying the changes. If the two strings * are equivalent, then an empty string will be returned. * * The arguments supported and can be changed are listed below. * * 'title' : Default is an empty string. Titles the diff in a manner compatible * with the output. * 'title_left' : Default is an empty string. Change the HTML to the left of the * title. * 'title_right' : Default is an empty string. Change the HTML to the right of * the title. * * @since 2.6 * @see wp_parse_args() Used to change defaults to user defined settings. * @uses Text_Diff * @uses WP_Text_Diff_Renderer_Table * * @param string $left_string "old" (left) version of string * @param string $right_string "new" (right) version of string * @param string|array $args Optional. Change 'title', 'title_left', and 'title_right' defaults. * @return string Empty string if strings are equivalent or HTML with differences. */ function wp_text_diff( $left_string, $right_string, $args = null ) { $defaults = array( 'title' => '', 'title_left' => '', 'title_right' => '' ); $args = wp_parse_args( $args, $defaults ); if ( !class_exists( 'WP_Text_Diff_Renderer_Table' ) ) require( ABSPATH . WPINC . '/wp-diff.php' ); $left_string = normalize_whitespace($left_string); $right_string = normalize_whitespace($right_string); $left_lines = split("\n", $left_string); $right_lines = split("\n", $right_string); $text_diff = new Text_Diff($left_lines, $right_lines); $renderer = new WP_Text_Diff_Renderer_Table(); $diff = $renderer->render($text_diff); if ( !$diff ) return ''; $r = "<table class='diff'>\n"; $r .= "<col class='ltype' /><col class='content' /><col class='ltype' /><col class='content' />"; if ( $args['title'] || $args['title_left'] || $args['title_right'] ) $r .= "<thead>"; if ( $args['title'] ) $r .= "<tr class='diff-title'><th colspan='4'>$args[title]</th></tr>\n"; if ( $args['title_left'] || $args['title_right'] ) { $r .= "<tr class='diff-sub-title'>\n"; $r .= "\t<td></td><th>$args[title_left]</th>\n"; $r .= "\t<td></td><th>$args[title_right]</th>\n"; $r .= "</tr>\n"; } if ( $args['title'] || $args['title_left'] || $args['title_right'] ) $r .= "</thead>\n"; $r .= "<tbody>\n$diff\n</tbody>\n"; $r .= "</table>"; return $r; }
/** * Handles rendering of the compare view * @return {string} HTML to be sent to the browser */ public function compare() { $compareContent = false; //Get the Main Revision $snippet1 = Snippet::get()->byID(intval($this->urlParams['ID'])); if (empty($snippet1) || $snippet1 === false || $snippet1->ID == 0) { $snippet1 = false; } if ($snippet1 !== false) { //Get the Comparision Revision $snippet2 = $snippet1->Version(intval($this->urlParams['OtherID'])); if (empty($snippet2) || $snippet1 === false || $snippet2->ID == 0) { $snippet2 = false; } if ($snippet2 !== false) { $snippet1Text = preg_replace('/\\r\\n|\\n|\\r/', "\n", $snippet1->SnippetText); $snippet2Text = preg_replace('/\\r\\n|\\n|\\r/', "\n", $snippet2->Text); //Generate the diff file $diff = new Text_Diff('auto', array(preg_split('/\\n/', $snippet1Text), preg_split('/\\n/', $snippet2Text))); $renderer = new WP_Text_Diff_Renderer_Table(); $renderedDiff = $renderer->render($diff); if (!empty($renderedDiff)) { $lTable = '<table cellspacing="0" cellpadding="0" border="0" class="diff">' . '<colgroup>' . '<col class="ltype"/>' . '<col class="content"/>' . '</colgroup>' . '<tbody>'; $rTable = $lTable; header('content-type: text/plain'); $xml = simplexml_load_string('<tbody>' . str_replace(' ', ' ', $renderedDiff) . '</tbody>'); foreach ($xml->children() as $row) { $i = 0; $lTable .= '<tr>'; $rTable .= '<tr>'; foreach ($row->children() as $td) { $attr = $td->attributes(); if ($i == 0) { $lTable .= $td->asXML(); } else { $rTable .= $td->asXML(); } $i++; } $lTable .= '</tr>'; $rTable .= '</tr>'; } $lTable .= '</tbody></table>'; $rTable .= '</tbody></table>'; $compareContent = '<div class="compare leftSide">' . $lTable . '</div>' . '<div class="compare rightSide">' . $rTable . '</div>'; } } } Requirements::css(CB_DIR . '/css/CompareView.css'); Requirements::javascript(CB_DIR . '/javascript/CodeBank.CompareView.js'); return $this->renderWith('CodeBank_CompareView', array('CompareContent' => $compareContent)); }