Ejemplo n.º 1
0
 /**
  * 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;
 }
Ejemplo n.º 2
0
 /**
  * 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;
 }
Ejemplo n.º 4
0
 /**
  * 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('&nbsp;', ' ', $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));
 }