<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[831] sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer: Code Reference: add admin interface to restrict access to editing parsed content</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://meta.trac.wordpress.org/changeset/831">831</a></dd>
<dt>Author</dt> <dd>coffee2code</dd>
<dt>Date</dt> <dd>2014-09-04 18:59:42 +0000 (Thu, 04 Sep 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Code Reference: add admin interface to restrict access to editing parsed content

* Requires a core trac ticket number to be added in order to edit the parsed short and long descriptions to ensure changes got reported to core
* Ensure only admins can edit parsed content

fixes <a href="http://meta.trac.wordpress.org/ticket/411">#411</a>, <a href="http://meta.trac.wordpress.org/ticket/481">#481</a>.
props DrewAPicture</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgdeveloperfunctionsphp">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/functions.php</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgdeveloperincparsedcontentphp">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/inc/parsed-content.php</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgdeveloperjsparsedcontentjs">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/js/parsed-content.js</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgdeveloperscssadminscss">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/scss/admin.scss</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgdeveloperstylesheetsadmincss">sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/stylesheets/admin.css</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgdeveloperfunctionsphp"></a>
<div class="modfile"><h4>Modified: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/functions.php (830 => 831)</h4>
<pre class="diff"><span>
<span class="info">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/functions.php        2014-09-04 18:41:35 UTC (rev 830)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/functions.php   2014-09-04 18:59:42 UTC (rev 831)
</span><span class="lines">@@ -22,6 +22,11 @@
</span><span class="cx">  */
</span><span class="cx"> require __DIR__ . '/inc/jetpack.php';
</span><span class="cx"> 
</span><ins>+/**
+ * Class for editing parsed content on the Function, Class, Hook, and Method screens.
+ */
+require_once( __DIR__ . '/inc/parsed-content.php' );
+
</ins><span class="cx"> if ( ! function_exists( 'loop_pagination' ) ) {
</span><span class="cx">  require __DIR__ . '/inc/loop-pagination.php';
</span><span class="cx"> }
</span></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgdeveloperincparsedcontentphp"></a>
<div class="addfile"><h4>Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/inc/parsed-content.php (0 => 831)</h4>
<pre class="diff"><span>
<span class="info">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/inc/parsed-content.php                               (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/inc/parsed-content.php  2014-09-04 18:59:42 UTC (rev 831)
</span><span class="lines">@@ -0,0 +1,265 @@
</span><ins>+<?php
+/**
+ * Class to handle editing parsed content.
+ *
+ * @package wporg-developer
+ */
+
+/**
+ * Class to handle editing parsed content for the Function-, Class-, Hook-,
+ * and Method-editing screens.
+ */
+class WPORG_Edit_Parsed_Content {
+
+       /**
+        * Post types array.
+        *
+        * Includes the Code Reference post types.
+        *
+        * @access public
+        * @var array
+        */
+       public $post_types;
+
+       /**
+        * Constructor.
+        *
+        * @access public
+        */
+       public function __construct() {
+               $this->post_types = array( 'wp-parser-function', 'wp-parser-class', 'wp-parser-hook', 'wp-parser-method' );
+
+               // Data.
+               add_action( 'add_meta_boxes',              array( $this, 'add_meta_boxes'        ) );
+               add_action( 'save_post',                   array( $this, 'save_post'             ) );
+
+               // Script and styles.
+               add_action( 'admin_enqueue_scripts',       array( $this, 'admin_enqueue_scripts' ) );
+
+               // AJAX.
+               add_action( 'wp_ajax_wporg_attach_ticket', array( $this, 'attach_ticket'         ) );
+               add_action( 'wp_ajax_wporg_detach_ticket', array( $this, 'detach_ticket'         ) );
+
+               // Register meta fields.
+               register_meta( 'post', 'wporg_ticket_number',  'absint',               '__return_false' );
+               register_meta( 'post', 'wporg_ticket_title',   'sanitize_text_field',  '__return_false' );
+               register_meta( 'post', 'wporg_parsed_content', 'wp_kses_post',         '__return_false' );
+       }
+
+       /**
+        * Add meta boxes.
+        *
+        * @access public
+        */
+       public function add_meta_boxes() {
+               if ( in_array( $screen = get_current_screen()->id, $this->post_types ) && current_user_can( 'manage_options' ) ) {
+                       remove_meta_box( 'postexcerpt', $screen, 'normal' );
+                       add_meta_box( 'wporg_parsed_content', __( 'Manage Parsed Content', 'wporg' ), array( $this, 'parsed_meta_box_cb' ), $screen, 'normal' );
+               }
+       }
+
+       /**
+        * Parsed content meta box display callback.
+        *
+        * @access public
+        *
+        * @param WP_Post $post Current post object.
+        */
+       public function parsed_meta_box_cb( $post ) {
+               $ticket       = get_post_meta( $post->ID, 'wporg_ticket_number', true );
+               $ticket_label = get_post_meta( $post->ID, 'wporg_ticket_title', true );
+               $ticket_info  = get_post_meta( $post->ID, 'wporg_parsed_ticket_info', true );
+               $content      = get_post_meta( $post->ID, 'wporg_parsed_content', true );
+
+               if ( $ticket ) {
+                       $src  = "https://core.trac.wordpress.org/ticket/{$ticket}";
+                       $ticket_message = sprintf( '<a href="%1$s">%2$s</a>', esc_url( $src ), apply_filters( 'the_title', $ticket_label ) );
+               } else {
+                       $link = sprintf( '<a href="https://core.trac.wordpress.org/newticket">%s</a>', __( 'Core Trac', 'wporg' ) );
+                       $ticket_message = sprintf( __( 'A valid, open ticket from %s is required to edit parsed content.', 'wporg' ), $link );
+               }
+               wp_nonce_field( 'wporg-parsed-content', 'wporg-parsed-content-nonce' );
+               ?>
+               <table class="form-table">
+                       <tbody>
+                       <tr valign="top" id="ticket_controls">
+                               <th scope="row">
+                                       <label for="wporg_parsed_ticket"><?php _e( 'Trac Ticket Number:', 'wporg' ); ?></label>
+                               </th>
+                               <td>
+                                       <span class="attachment_controls">
+                                               <input type="text" name="wporg_parsed_ticket" id="wporg_parsed_ticket" value="<?php echo esc_attr( $ticket ); ?>" />
+                                               <a href="#attach-ticket" class="button secondary <?php echo $ticket ? 'hidden' : ''; ?>" id="wporg_ticket_attach" name="wporg_ticket_attach" aria-label="<?php esc_attr_e( 'Attach a Core Trac ticket', 'wporg' ); ?>" data-nonce="<?php echo wp_create_nonce( 'wporg-attach-ticket' ); ?>" data-id="<?php the_ID(); ?>">
+                                                       <?php esc_attr_e( 'Attach Ticket', 'wporg' ); ?>
+                                               </a>
+                                               <a href="#detach-ticket" class="button secondary <?php echo $ticket ? '' : 'hidden'; ?>" id="wporg_ticket_detach" name="wporg_ticket_detach" aria-label="<?php esc_attr_e( 'Detach the Trac ticket', 'wporg' ); ?>" data-nonce="<?php echo wp_create_nonce( 'wporg-detach-ticket' ); ?>" data-id="<?php the_ID(); ?>">
+                                                       <?php esc_attr_e( 'Detach Ticket', 'wporg' ); ?>
+                                               </a>
+                                       </span>
+                                       <div id="ticket_status">
+                                               <span class="spinner"></span>
+                                               <span class="ticket_info_icon <?php echo $ticket ? 'dashicons dashicons-external' : ''; ?>"></span>
+                                               <span id="wporg_ticket_info"><em><?php echo $ticket_message; ?></em></span>
+                                       </div>
+                               </td>
+                       </tr><!-- #ticket_controls -->
+                       <tr valign="top" class="wporg_parsed_content <?php echo $ticket ? '' : 'hidden'; ?>">
+                               <th scope="row">
+                                       <label for="excerpt"><?php _e( 'Parsed Description:', 'wporg' ); ?></label>
+                               </th>
+                               <td>
+                                       <textarea rows="1" cols="40" name="excerpt" id="excerpt"><?php echo $post->post_excerpt; ?></textarea>
+                               </td>
+                       </tr><!-- .wporg_parsed_content -->
+                       <tr valign="top" class="wporg_parsed_content <?php echo $ticket ? '' : 'hidden'; ?>" data-id="<?php the_id(); ?>">
+                               <th scope="row">
+                                       <label for="wporg_parsed_content"><?php _e( 'Parsed Summary:', 'wporg' ); ?></label>
+                               </th>
+                               <td>
+                                       <?php wp_editor( $content, 'wporg_parsed_content_editor', array(
+                                               'media_buttons' => false,
+                                               'tinymce'       => false,
+                                               'quicktags'     => true,
+                                               'textarea_rows' => 10,
+                                               'textarea_name' => 'wporg_parsed_content'
+                                       ) ); ?>
+                               </td>
+                       </tr><!-- .wporg_parsed_content -->
+                       </tbody>
+               </table>
+               <?php
+       }
+
+       /**
+        * Handle saving parsed content.
+        *
+        * Excerpt (short description) saving is handled by core.
+        *
+        * @access public
+        *
+        * @param int $post_id Post ID.
+        */
+       public function save_post( $post_id ) {
+               if ( ! empty( $_POST['wporg-parsed-content-nonce'] ) && wp_verify_nonce( $_POST['wporg-parsed-content-nonce'], 'wporg-parsed-content' ) ) {
+                       // No cheaters!
+                       if ( current_user_can( 'manage_options' ) ) {
+                               // Parsed content.
+                               empty( $_POST['wporg_parsed_content'] ) ? delete_post_meta( $post_id, 'wporg_parsed_content' ) : update_post_meta( $post_id, 'wporg_parsed_content', $_POST['wporg_parsed_content'] );
+                       }
+               }
+       }
+
+       /**
+        * Enqueue JS and CSS on the edit screens for all four post types.
+        *
+        * @access public
+        */
+       public function admin_enqueue_scripts() {
+               // Only enqueue 'wporg-parsed-content' script and styles on Code Reference post type screens.
+               if ( in_array( get_current_screen()->id, $this->post_types ) ) {
+                       wp_enqueue_style( 'wporg-parsed-content', get_template_directory_uri() . '/stylesheets/admin.css', array(), '20140826' );
+                       wp_enqueue_script( 'wporg-parsed-content', get_template_directory_uri() . '/js/parsed-content.js', array( 'jquery', 'utils' ), '20140826', true );
+
+                       wp_localize_script( 'wporg-parsed-content', 'wporg', array(
+                               'ajaxURL'    => admin_url( 'admin-ajax.php' ),
+                               'searchText' => __( 'Searching ...', 'wporg' ),
+                       ) );
+               }
+       }
+
+       /**
+        * AJAX handler for fetching the title of a Core Trac ticket and 'attaching' it to the post.
+        *
+        * @access public
+        */
+       public function attach_ticket() {
+               check_ajax_referer( 'wporg-attach-ticket', 'nonce' );
+
+               $ticket_no  = empty( $_REQUEST['ticket'] ) ? 0 : absint( $_REQUEST['ticket'] );
+               $ticket_url = "https://core.trac.wordpress.org/ticket/{$ticket_no}";
+
+               // Fetch the ticket.
+               $resp        = wp_remote_get( esc_url( $ticket_url ) );
+               $status_code = wp_remote_retrieve_response_code( $resp );
+               $body        = wp_remote_retrieve_body( $resp );
+
+               // Anything other than 200 is invalid.
+               if ( 200 === $status_code && null !== $body ) {
+                       $title = '';
+
+                       // Snag the page title from the ticket HTML.
+                       if ( class_exists( 'DOMDocument' ) ) {
+                               $doc = new DOMDocument();
+                               @$doc->loadHTML( $body );
+
+                               $nodes = $doc->getElementsByTagName( 'title' );
+                               $title = $nodes->item(0)->nodeValue;
+
+                               // Strip off the site name.
+                               $title = str_ireplace( ' – WordPress Trac', '', $title );
+                       } else {
+                               die( -1 );
+                       }
+
+                       $post_id = empty( $_REQUEST['post_id'] ) ? 0 : absint( $_REQUEST['post_id'] );
+
+                       update_post_meta( $post_id, 'wporg_ticket_number', $ticket_no );
+                       update_post_meta( $post_id, 'wporg_ticket_title', $title );
+
+                       $link = sprintf( '<a href="%1$s">%2$s</a>', esc_url( $ticket_url ),  apply_filters( 'the_title', $title ) );
+
+                       // Can haz success.
+                       $message = array(
+                               'type'    => 'success',
+                               'message' => $link,
+                       );
+
+               } else {
+                       // Ticket number is invalid.
+                       $message = array(
+                               'type'    => 'invalid',
+                               'message' => __( 'Invalid ticket number.', 'wporg' ),
+                       );
+               }
+
+               // Slap on a new nonce for repeat offenders.
+               $message['new_nonce'] = wp_create_nonce( 'wporg-attach-ticket' );
+
+               die( json_encode( $message ) );
+       }
+
+       /**
+        * AJAX handler for 'detaching' a ticket from the post.
+        *
+        * @access public
+        */
+       public function detach_ticket() {
+               check_ajax_referer( 'wporg-detach-ticket', 'nonce' );
+
+               $post_id = empty( $_REQUEST['post_id'] ) ? 0 : absint( $_REQUEST['post_id'] );
+
+               // Attempt to detach the ticket.
+               if ( delete_post_meta( $post_id, 'wporg_ticket_number' )
+                       && delete_post_meta( $post_id, 'wporg_ticket_title' )
+               ) {
+                       $message = array(
+                               'type'    => 'success',
+                               'message' => __( 'Ticket detached.', 'wporg' )
+                       );
+               } else {
+                       // Still attached.
+                       $message = array(
+                               'type'    => 'failure',
+                               'message' => __( 'Ticket still attached.', 'wporg' )
+                       );
+               }
+
+               // Slap on a new nonce for repeat offenders.
+               $message['new_nonce'] = wp_create_nonce( 'wporg-detach-ticket' );
+
+               die( json_encode( $message ) );
+       }
+
+} // WPORG_Edit_Parsed_Content
+
+$extras = new WPORG_Edit_Parsed_Content();
</ins><span class="cx">Property changes on: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/inc/parsed-content.php
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<ins>+native
</ins><span class="cx">\ No newline at end of property
</span><a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgdeveloperjsparsedcontentjs"></a>
<div class="addfile"><h4>Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/js/parsed-content.js (0 => 831)</h4>
<pre class="diff"><span>
<span class="info">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/js/parsed-content.js                         (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/js/parsed-content.js    2014-09-04 18:59:42 UTC (rev 831)
</span><span class="lines">@@ -0,0 +1,74 @@
</span><ins>+/**
+ * Admin extras backend JS.
+ */
+
+( function( $ ) {
+       var parsedContent = $( '.wporg_parsed_content' ),
+               ticketNumber  = $( '#wporg_parsed_ticket' ),
+               attachButton  = $( '#wporg_ticket_attach' ),
+               detachButton  = $( '#wporg_ticket_detach' ),
+               ticketInfo    = $( '#wporg_ticket_info' ),
+               spinner       = $( '#ticket_status .spinner' );
+
+       var handleTicket = function( event ) {
+               event.preventDefault();
+
+               var $this        = $(this),
+                       attachAction = 'attach' == event.data.action;
+
+               spinner.css( 'display', 'inline-block' );
+
+               if ( attachAction ) {
+                       ticketInfo.text( wporg.searchText );
+               }
+
+               var data = {
+                       action:  attachAction ? 'wporg_attach_ticket' : 'wporg_detach_ticket',
+                       ticket:  ticketNumber.val(),
+                       nonce:   $this.data( 'nonce' ),
+                       post_id: $this.data( 'id' )
+               };
+
+               $.post( wporg.ajaxURL, data, function( resp ) {
+                       // Refresh the nonce.
+                       $this.data( 'nonce', resp.new_nonce );
+
+                       spinner.hide();
+
+                       // Update the ticket info text
+                       ticketInfo.html( resp.message ).show();
+
+                       // Handle the response.
+                       if ( resp.type && 'success' == resp.type ) {
+                               // Hide or show the parsed content boxes.
+                               parsedContent.each( function() {
+                                       attachAction ? $(this).slideDown() : $(this).slideUp();
+                               });
+
+                               var otherButton = attachAction ? detachButton : attachButton;
+
+                               // Toggle the buttons.
+                               $this.hide();
+                               otherButton.css( 'display', 'inline-block' );
+
+                               // Clear the ticket number when detaching.
+                               if ( ! attachAction ) {
+                                       ticketNumber.val( '' );
+                               }
+
+                               // Set or unset the ticket link icon.
+                               $( '.ticket_info_icon' ).toggleClass( 'dashicons dashicons-external', attachAction );
+
+                               // Set the ticket number to readonly when a ticket is attached.
+                               attachAction ? ticketNumber.prop( 'readonly', 'readonly' ) : ticketNumber.removeAttr( 'readonly' );
+                       } else {
+                               ticketInfo.text( wporg.retryText );
+                       }
+
+               }, 'json' );
+       };
+
+       attachButton.on( 'click', { action: 'attach' }, handleTicket );
+       detachButton.on( 'click', { action: 'detach' }, handleTicket );
+
+} )( jQuery );
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgdeveloperscssadminscss"></a>
<div class="addfile"><h4>Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/scss/admin.scss (0 => 831)</h4>
<pre class="diff"><span>
<span class="info">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/scss/admin.scss                              (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/scss/admin.scss 2014-09-04 18:59:42 UTC (rev 831)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+/* =Admin CSS
+----------------------------------------------- */
+
+#wporg_parsed_ticket {
+       width: 100px;
+}
+
+#ticket_info_icon {
+       font-size: 14px;
+       color: #a00;
+}
+
+#ticket_status .spinner {
+       position: relative;
+       bottom: 4px;
+       float: none;
+}
+
+.attachment_controls {
+       margin-bottom: 10px;
+       display: block;
+}
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentthemespubwporgdeveloperstylesheetsadmincss"></a>
<div class="addfile"><h4>Added: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/stylesheets/admin.css (0 => 831)</h4>
<pre class="diff"><span>
<span class="info">--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/stylesheets/admin.css                                (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/stylesheets/admin.css   2014-09-04 18:59:42 UTC (rev 831)
</span><span class="lines">@@ -0,0 +1,21 @@
</span><ins>+/* =Admin CSS
+----------------------------------------------- */
+#wporg_parsed_ticket {
+  width: 100px;
+}
+
+#ticket_info_icon {
+  font-size: 14px;
+  color: #a00;
+}
+
+#ticket_status .spinner {
+  position: relative;
+  bottom: 4px;
+  float: none;
+}
+
+.attachment_controls {
+  margin-bottom: 10px;
+  display: block;
+}
</ins><span class="cx">Property changes on: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/stylesheets/admin.css
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<ins>+native
</ins><span class="cx">\ No newline at end of property
</span></div>

</body>
</html>