public
Last active

Gist to WordPress

  • Download Gist
ds_convert_to_gist.php
PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
<?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;
}
ds_gist_metabox_cb.php
PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
<?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
}
ds_gistify.php
PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
<?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
) ) );
}
gist.js
JavaScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
( 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 );

havent got this to work yet with 3.5.2

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.