Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Gist to WordPress
<?php
function ds_convert_to_gist( $content ) {
global $post;
$gist_data = get_post_meta( $post->ID, '_gist_data', true );
if ( empty( $gist_data ) )
return $content;
wp_enqueue_style('gist-css');
foreach ( $gist_data as $file => $file_data ) {
$files[] = '/{' . $file . '}/';
$data[] = $file_data;
}
$content = preg_replace(
$files,
$data,
$content
);
return $content;
}
<?php
function ds_gist_metabox_cb( $data ) {
wp_nonce_field( 'ds_gist', 'ds-gist-nonce' );
$gist_id = get_post_meta( $data->ID, '_gist_id', true ) ;
$gist_id = ! empty( $gist_id ) ? $gist_id : '';
$gist_data = get_post_meta( $data->ID, '_gist_data', true );
$gist_data = ! empty( $gist_data ) ? $gist_data : array();
$files = '';
if ( ! empty( $gist_data ) ) {
foreach ( $gist_data as $file => $data )
$files .= '<li><code>{' . $file . '}</code></li>';
}
?>
<p>
<label>Gist ID: <input type="text" class="small-text" style="width: 180px;" name="gist-id" id="gist-id" value="<?php echo esc_attr( $gist_id ); ?>" /></label>
<input type="button" value="Fetch" id="gist-update" class="button" />
<img src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" class="ajax-loading" id="gist-ajax-loading" alt="" />
</p>
<ul id="gist-files">
<?php echo $files;?>
</ul>
<?php
}
<?php
function ds_gistify() {
$post_id = $_POST['post_id'];
$gist_id = $_POST['gist_id'];
if ( empty( $post_id ) || empty( $gist_id ) )
die( json_encode( array(
'id' => $gist_id,
'error' => 'Empty Post ID or Gist ID.'
) ) );
check_ajax_referer( 'ds_gist' );
$gist_body = wp_remote_retrieve_body(
wp_remote_get(
$gist_url = sprintf( "https://gist.github.com/%s.json", $gist_id )
)
);
$gist_body = json_decode( $gist_body );
if ( empty( $gist_body ) )
die( json_encode( array(
'id' => $gist_id,
'error' => 'Empty Body'
) ) );
if ( ! empty( $gist_body->error ) ) {
die( json_encode( array(
'id' => $gist_id,
'error' => $gist_body->error
) ) );
}
update_post_meta( $post_id, '_gist_id', $gist_id );
$gist_files = $gist_body->files;
preg_match_all( '/<pre>(.+?)<\/pre>/is', $gist_body->div, $gist_divs );
$gist_divs = $gist_divs[0];
foreach ( $gist_files as $i => $gist_file )
$gist_data[ $gist_file ] = '<div class="gist-syntax">' . $gist_divs[$i] . '</div>';
foreach ( $gist_data as $file => $gist_item ) {
$gist_new_meta = sprintf(
'<div><p class="gist-meta"><a class="gist-raw" href="%s">RAW</a> · <a class="gist-download" href="%s">Download</a> · <a class="gist-github" href="%s">Gist@GitHub</a></p></div>',
esc_url( "https://gist.github.com/raw/{$gist_id}/{$file}" ),
esc_url( "https://gist.github.com/gists/{$gist_id}/download"),
esc_url( "https://gist.github.com/{$gist_id}")
);
$gist_data[ $file ] .= $gist_new_meta;
}
update_post_meta( $post_id, '_gist_data', $gist_data );
die( json_encode( array(
'id' => $gist_id,
'files' => $gist_files
) ) );
}
( function( $ ) {
$( '#gist-update' ).click( function( e ) {
e.preventDefault();
$( '#gist-ajax-loading' ).css( 'visibility', 'visible' );
data = {
'action' : 'gist',
'_ajax_nonce' : $('#ds-gist-nonce').val(),
'post_id' : $('#post_ID').val(),
'gist_id' : $('#gist-id').val()
};
$.post( ajaxurl, data,
function( res ) {
res = $.parseJSON( res );
if ( res.error ) {
$( '#gist-ajax-loading' ).css( 'visibility', 'hidden' );
alert( 'Gist ID "' + res.id + '": ' + res.error );
return;
}
if ( res.files ) {
$( '#gist-files' ).empty();
$.each( res.files, function( key, val ) {
$( '#gist-files' ).append( '<li><code>{' + val + '}</code></li>' );
});
$( '#gist-ajax-loading' ).css( 'visibility', 'hidden' );
}
}
)
});
} )( jQuery );
@chrismccoy

This comment has been minimized.

Show comment Hide comment
@chrismccoy

chrismccoy Jul 26, 2013

havent got this to work yet with 3.5.2

havent got this to work yet with 3.5.2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment