WordPress.org

Plugin Directory

Changeset 428860


Ignore:
Timestamp:
08/26/11 04:17:05 (3 years ago)
Author:
alexkingorg
Message:

2.0

Location:
drafts-dropdown/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • drafts-dropdown/trunk/README.txt

    r133966 r428860  
    11=== Drafts Dropdown === 
    22Contributors: alexkingorg, crowdfavorite 
    3 Donate link: http://alexking.org/donate/ 
    43Tags: draft, drafts, post, admin, access, shortcut 
    5 Requires at least: 2.8 
    6 Tested up to: 2.8.1 
    7 Stable tag: 1.0 
     4Requires at least: 3.2 
     5Tested up to: 3.2.1 
     6Stable tag: 2.0 
    87 
    9 Adds a Drafts tab to the admin interface so that you can quickly access your draft blog posts. 
     8Adds a Drafts tab to the admin bar so that you can quickly access your draft blog posts. 
    109 
    1110== Description == 
     
    2120== Frequently Asked Questions == 
    2221 
    23 = Does this work on versions of WordPress prior to 2.8? = 
     22= Does Drafts Dropdown require the use of the Admin Bar? = 
     23 
     24Yes. 
     25 
     26= Does this work on versions of WordPress prior to 3.2? = 
    2427 
    2528Perhaps - however it has not been tested. 
     
    3235== Changelog == 
    3336 
     37= 2.0 = 
     38* Now attaches to the Admin Bar 
     39* Available on front-end of site 
     40* Drafts are loaded in via AJAX to improve performance 
     41* Updated styling 
     42 
    3443= 1.0 = 
    3544* First public release. 
     
    3746== Developers == 
    3847 
    39 The code to add this tab and show the dropdown area (or drawer) has been generalized and should be easily used by other plugins. Also attached as a core patch to Trac: 
     48This plugin is now actively developed in GitHub. Fork it and contribute: 
    4049 
    41 http://core.trac.wordpress.org/attachment/ticket/9657/screen-meta-sample-code.txt 
     50https://github.com/crowdfavorite/wp-drafts-dropdown 
  • drafts-dropdown/trunk/drafts-dropdown.php

    r133964 r428860  
    11<?php 
     2 
    23/* 
    34Plugin Name: Drafts Dropdown  
    4 Plugin URI: http://alexking.org/projects/wordpress  
    5 Description: Easy access to your WordPress drafts from within the web admin interface. Drafts are listed in a drop-down menu.  
    6 Version: 1.0 
     5Plugin URI: http://crowdfavorite.com/wordpress/plugins/drafts-dropdown/  
     6Description: Easy access to your WordPress drafts from the admin bar. Drafts are listed in a slide-down menu. 
     7Version: 2.0 
    78Author: Crowd Favorite 
    89Author URI: http://crowdfavorite.com 
    910*/ 
    1011 
     12// Copyright (c) 2009-2011  
     13//   Crowd Favorite, Ltd. - http://crowdfavorite.com 
     14//   Alex King - http://alexking.org 
     15// All rights reserved. 
     16// 
     17// Released under the GPL license 
     18// http://www.opensource.org/licenses/gpl-license.php 
     19// 
     20// This is an add-on for WordPress - http://wordpress.org 
     21// 
     22// ********************************************************************** 
     23// This program is distributed in the hope that it will be useful, but 
     24// WITHOUT ANY WARRANTY; without even the implied warranty of 
     25// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
     26// ********************************************************************** 
     27 
    1128// ini_set('display_errors', '1'); ini_set('error_reporting', E_ALL); 
    1229 
    13 load_plugin_textdomain('draft-dropdown'); 
    14  
    15 function cfdd_get_drafts() { 
    16     $drafts = new WP_Query('post_type=post&post_status=draft&posts_per_page=100&order=DESC&orderby=modified'); 
     30load_plugin_textdomain('drafts-dropdown'); 
     31 
     32function cfdd_get_drafts() {     
     33    $args = array( 
     34      'public' => true, 
     35    ); 
     36    $post_types = get_post_types($args, 'names'); 
     37    $query = array(  
     38        'post_type' => $post_types,  
     39        'post_status' => 'draft', 
     40        'posts_per_page' => 100, 
     41        'order' => 'DESC', 
     42        'orderby' => 'modified', 
     43    ); 
     44     
     45    $drafts = new WP_Query($query); 
    1746    return $drafts->posts; 
    1847} 
    1948 
    20 function screen_meta_drafts_content() { 
     49function cfdd_drafts_content() { 
    2150    $output = ''; 
    2251    $drafts = cfdd_get_drafts(); 
     
    2453        $output .= '<ul id="cfdd_drafts">'; 
    2554        foreach ($drafts as $draft) { 
    26             $output .= '<li><a href="'.get_bloginfo('wpurl').'/wp-admin/post.php?action=edit&post='.$draft->ID.'">'.wp_specialchars($draft->post_title).'</a></li>'; 
     55            $post_title = !empty($draft->post_title) ? esc_html($draft->post_title) : __('(untitled)', 'drafts-dropdown'); 
     56            $output .= '<li><a href="'.esc_url(admin_url('post.php?action=edit&post='.$draft->ID)).'">'.$post_title.'</a></li>'; 
    2757        } 
    2858        $output .= '</ul>'; 
     
    3464} 
    3565 
    36 function cfdd_admin_footer() { 
     66function cfdd_ajax_drafts_list() { 
     67    if (!current_user_can('edit_posts')) { 
     68        return false; 
     69    } 
     70    $html = cfdd_drafts_content(); 
     71    header('Content-type: application/json'); 
     72    echo json_encode(compact('html')); 
     73    die(); 
     74} 
     75add_action('wp_ajax_cfdd_drafts_list', 'cfdd_ajax_drafts_list'); 
     76 
     77function cfdd_footer() { 
    3778?> 
    3879<style type="text/css"> 
    39 .cfdd_col { 
     80#cfdd_drafts_wrap { 
     81    background: #444; 
     82    border-top: 1px solid #999; 
     83    border-bottom: 5px solid #666; 
     84    -webkit-box-shadow: 0px 2px 2px rgba(0,0,0,0.8), inset 0px 0px 4px rgba(0,0,0,0.5); 
     85    box-shadow: 0px 2px 4px rgba(0,0,0,0.8), inset 0px 0px 4px rgba(0,0,0,0.5); 
     86    color: #fff; 
     87    display: none; 
     88    height: 400px; 
     89    left: 0; 
     90    max-height: 400px; 
     91    overflow: auto; 
     92    padding: 15px 0; 
     93    position: absolute; 
     94    top: 28px; 
     95    width: 100%; 
     96    z-index: 100; 
     97} 
     98#cfdd_drafts_wrap.loading { 
     99    background: #444 url(<?php echo admin_url('images/wpspin_dark.gif'); ?>) no-repeat center center; 
     100} 
     101#cfdd_drafts_wrap .cfdd_content { 
     102    visibility: hidden; 
     103} 
     104#cfdd_drafts_wrap a, 
     105#cfdd_drafts_wrap a:visited { 
     106    color: #fff; 
     107} 
     108#cfdd_drafts_wrap .cfdd_col { 
     109    border-right: 1px solid #777; 
    40110    float: left; 
    41     margin-right: 20px; 
    42 } 
    43 .cfdd_clear { 
    44     clear: both; 
    45     float: none; 
     111    margin: 0 0 0 15px; 
     112    padding-right: 15px; 
     113} 
     114#cfdd_drafts_wrap .cfdd_col ul { 
     115    font: 12px sans-serif; 
     116    line-height: 140%; 
     117    list-style: none; 
     118    margin: 0; 
     119    padding: 0; 
     120} 
     121#cfdd_drafts_wrap .cfdd_col ul li { 
     122    margin: 0 0 6px; 
    46123} 
    47124</style> 
    48125<script type="text/javascript"> 
    49126jQuery(function($) { 
    50     var copy = $('#contextual-help-wrap'); 
    51     $('.screen-meta-wrap').css({ 
    52         'background-color': copy.css('background-color'), 
    53         'border-color': copy.css('border-bottom-color') 
     127    $('#wp-admin-bar-cfdd_drafts_menu').click(function(e) { 
     128        e.preventDefault(); 
     129// slide up 
     130        $wrap = $('#cfdd_drafts_wrap'); 
     131        if ($wrap.size() && $wrap.is(':visible')) { 
     132            $wrap.slideUp(function() { 
     133                $(this).remove(); 
     134            }); 
     135            return; 
     136        } 
     137// slide down 
     138        $('body').append('<div id="cfdd_drafts_wrap"><div class="cfdd_content"></div></div>'); 
     139// show spinner 
     140        $wrap = $('#cfdd_drafts_wrap'); 
     141        $wrap.css({'height': '400px'}).slideDown().addClass('loading'); 
     142// load drafts 
     143        $.post( 
     144            '<?php echo admin_url('admin-ajax.php'); ?>', 
     145            { 
     146                action: 'cfdd_drafts_list' 
     147            }, 
     148            function(response) { 
     149                $content = $wrap.find('.cfdd_content'); 
     150                $content.html(response.html); 
     151// format cols 
     152                var drafts = $('#cfdd_drafts li'); 
     153                var drafts_count = drafts.size(); 
     154                var i = 0; 
     155                if (drafts_count <= 10) { 
     156// set to 2 columns 
     157                    $content.append('<div class="cfdd_col" id="cfdd_col_1"><ul></ul></div><div class="cfdd_col" id="cfdd_col_2"><ul></ul></div><div class="cfdd_clear"></div>'); 
     158                    var col_count = Math.ceil(drafts_count / 2); 
     159                    drafts.each(function() { 
     160                        i < col_count ? target = '#cfdd_col_1 ul' : target = '#cfdd_col_2 ul'; 
     161                        $(this).appendTo(target); 
     162                        i++; 
     163                    }); 
     164                } 
     165                else { 
     166// 3 columns 
     167                    $content.append('<div class="cfdd_col" id="cfdd_col_1"><ul></ul></div><div class="cfdd_col" id="cfdd_col_2"><ul></ul></div><div class="cfdd_col" id="cfdd_col_3"><ul></ul></div><div class="cfdd_clear"></div>'); 
     168                    var col_count = Math.ceil(drafts_count / 3); 
     169                    drafts.each(function() { 
     170                        if (i < col_count) { 
     171                            target = '#cfdd_col_1 ul'; 
     172                        } 
     173                        else if (i >= col_count * 2) { 
     174                            target = '#cfdd_col_3 ul'; 
     175                        } 
     176                        else { 
     177                            target = '#cfdd_col_2 ul'; 
     178                        } 
     179                        $(this).appendTo(target); 
     180                        i++; 
     181                    }); 
     182                } 
     183                $('#cfdd_drafts').remove(); 
     184            // set size of cfdd_col 
     185                $('.cfdd_col').width(Math.floor($('body').width() - 120) / 3); 
     186                $('.cfdd_col:last').css('border-right', 0); 
     187 
     188                var height = 0; 
     189                $wrap.find('.cfdd_col').each(function() { 
     190                    if ($(this).height() > height) { 
     191                        height = $(this).height(); 
     192                    } 
     193                }); 
     194                if (height < 400) { 
     195                    $wrap.animate({ 'height': height + 'px' }, 'fast'); 
     196                } 
     197 
     198// remove spinner, make visible 
     199                $wrap.removeClass('loading'); 
     200                $content.hide().css({ 'visibility': 'visible' }).fadeIn(); 
     201            }, 
     202            'json' 
     203        ); 
    54204    }); 
    55     var drafts = $('#cfdd_drafts li'); 
    56     var drafts_count = drafts.size(); 
    57     var i = 0; 
    58     if (drafts_count <= 10) { 
    59 // set to 2 columns 
    60         $('#screen-meta-drafts-wrap .screen-meta-content').append('<div class="cfdd_col" id="cfdd_col_1"><ul></ul></div><div class="cfdd_col" id="cfdd_col_2"><ul></ul></div><div class="cfdd_clear"></div>'); 
    61         var col_count = Math.ceil(drafts_count / 2); 
    62         drafts.each(function() { 
    63             i < col_count ? target = '#cfdd_col_1 ul' : target = '#cfdd_col_2 ul'; 
    64             $(this).appendTo(target); 
    65             i++; 
    66         }); 
    67     } 
    68     else { 
    69 // 3 columns 
    70         $('#screen-meta-drafts-wrap .screen-meta-content').append('<div class="cfdd_col" id="cfdd_col_1"><ul></ul></div><div class="cfdd_col" id="cfdd_col_2"><ul></ul></div><div class="cfdd_col" id="cfdd_col_3"><ul></ul></div><div class="cfdd_clear"></div>'); 
    71         var col_count = Math.ceil(drafts_count / 3); 
    72         drafts.each(function() { 
    73             if (i < col_count) { 
    74                 target = '#cfdd_col_1 ul'; 
    75             } 
    76             else if (i >= col_count * 2) { 
    77                 target = '#cfdd_col_3 ul'; 
    78             } 
    79             else { 
    80                 target = '#cfdd_col_2 ul'; 
    81             } 
    82             $(this).appendTo(target); 
    83             i++; 
    84         }); 
    85     } 
    86     $('#cfdd_drafts').remove(); 
    87 // set size of cfdd_col 
    88     $('.cfdd_col').width(Math.floor($('#wpbody-content').width() - 160) / 3); 
    89205}); 
    90206</script> 
    91207<?php 
    92208} 
    93 add_action('admin_footer', 'cfdd_admin_footer'); 
    94  
    95 function cfdd_screen_meta($screen_meta) { 
    96     $screen_meta[] = array( 
    97         'key' => 'drafts', 
    98         'label' => 'Drafts', 
    99         'content' => 'screen_meta_drafts_content' 
    100     ); 
    101  
    102     return $screen_meta; 
    103 } 
    104 add_filter('screen_meta', 'cfdd_screen_meta'); 
     209// attached in admin bar call below for back end 
     210// attached in init below for front end 
     211 
     212function cfdd_admin_bar_menu_drafts($wp_admin_bar) { 
     213    if (current_user_can('edit_posts')) { 
     214        $wp_admin_bar->add_menu(array( 
     215            'id' => 'cfdd_drafts_menu', 
     216            'title' => __('Drafts', 'drafts-dropdown'), 
     217            'href' => admin_url('edit.php?post_status=draft&post_type=post'), 
     218        )); 
     219        add_action('admin_footer', 'cfdd_footer'); 
     220    } 
     221} 
     222add_action('admin_bar_menu', 'cfdd_admin_bar_menu_drafts', 45); 
    105223 
    106224function cfdd_init() { 
    107     global $screen_meta; 
    108     if (!count($screen_meta)) { 
    109         $screen_meta = array(); 
    110     } 
    111 } 
    112 if (is_admin()) { 
    113     add_action('init', 'cfdd_init'); 
    114 } 
    115  
    116 if (!function_exists('screen_meta_html')) { 
    117  
    118 function screen_meta_html($meta) { 
    119     extract($meta); 
    120     if (function_exists($content)) { 
    121         $content = $content(); 
    122     } 
    123     echo ' 
    124 <div id="screen-meta-'.$key.'-wrap" class="screen-meta-wrap hidden"> 
    125     <div class="screen-meta-content">'.$content.'</div> 
    126 </div> 
    127 <div id="screen-meta-'.$key.'-link-wrap" class="hide-if-no-js screen-meta-toggle cf"> 
    128 <a href="#screen-meta-'.$key.'-wrap" id="screen-meta-'.$key.'-link" class="show-settings">'.$label.'</a> 
    129 </div> 
    130     '; 
    131 } 
    132  
    133 } 
    134  
    135 if (!function_exists('screen_meta_output')) { 
    136  
    137 function screen_meta_output() { 
    138     global $screen_meta; 
    139 /* 
    140 expected format: 
    141 $screen_meta = array( 
    142     array( 
    143         'key' => 'drafts', 
    144         'label' => 'Drafts', 
    145         'content' => 'screen_meta_drafts_content' // can be content or function name 
    146     ) 
    147 ); 
    148 */ 
    149     $screen_meta = apply_filters('screen_meta', $screen_meta); 
    150     echo '<div id="screen-meta-extra-content">'; 
    151     foreach ($screen_meta as $meta) { 
    152         screen_meta_html($meta); 
    153     } 
    154     echo '</div>'; 
    155 ?> 
    156 <style type="text/css"> 
    157 .screen-meta-toggle { 
    158     float: right; 
    159     background: transparent url( <?php bloginfo('wpurl'); ?>/wp-admin/images/screen-options-left.gif ) no-repeat 0 0; 
    160     font-family: "Lucida Grande", Verdana, Arial, "Bitstream Vera Sans", sans-serif; 
    161     height: 22px; 
    162     padding: 0; 
    163     margin: 0 6px 0 0; 
    164 } 
    165 .screen-meta-wrap h5 { 
    166     margin: 8px 0; 
    167     font-size: 13px; 
    168 } 
    169 .screen-meta-wrap { 
    170     border-style: none solid solid; 
    171     border-top: 0 none; 
    172     border-width: 0 1px 1px; 
    173     margin: 0 15px; 
    174     padding: 8px 12px 12px; 
    175     -moz-border-radius: 0 0 0 4px; 
    176     -webkit-border-bottom-left-radius: 4px; 
    177     -khtml-border-bottom-left-radius: 4px; 
    178     border-bottom-left-radius: 4px; 
    179 } 
    180 </style> 
    181 <script type="text/javascript"> 
    182 jQuery(function($) { 
    183  
    184 // These hacks not needed if adopted into core 
    185 // move tabs into place 
    186     $('#screen-meta-extra-content .screen-meta-toggle.cf').each(function() { 
    187         $('#screen-meta-links').append($(this)); 
    188     }); 
    189 // Move content into place 
    190     $('#screen-meta-extra-content .screen-meta-wrap').each(function() { 
    191         $('#screen-meta-links').before($(this)); 
    192     }); 
    193 // end hacks 
    194  
    195 // simplified generic code to handle all screen meta tabs 
    196     $('#screen-meta-links a.show-settings').unbind().click(function() { 
    197         var link = $(this); 
    198         $(link.attr('href')).slideToggle('fast', function() { 
    199             if (link.hasClass('screen-meta-shown')) { 
    200                 link.css({'backgroundImage':'url("images/screen-options-right.gif")'}).removeClass('screen-meta-shown'); 
    201                 $('.screen-meta-toggle').css('visibility', 'visible'); 
    202             } 
    203             else { 
    204                 $('.screen-meta-toggle').css('visibility', 'hidden'); 
    205                 link.css({'backgroundImage':'url("images/screen-options-right-up.gif")'}).addClass('screen-meta-shown').parent().css('visibility', 'visible'); 
    206             } 
    207         }); 
    208         return false; 
    209     }); 
    210 }); 
    211 </script> 
    212  
    213 <?php 
    214 } 
    215 add_action('admin_footer', 'screen_meta_output'); 
    216  
    217 } 
     225    if (!is_admin() && current_user_can('edit_posts')) { 
     226        add_action('wp_footer', 'cfdd_footer'); 
     227    } 
     228} 
     229add_action('init', 'cfdd_init'); 
    218230 
    219231//a:22:{s:11:"plugin_name";s:15:"Drafts Dropdown";s:10:"plugin_uri";s:38:"http://alexking.org/projects/wordpress";s:18:"plugin_description";s:112:"Easy access to your WordPress drafts from within the web admin interface. Drafts are listed in a drop-down menu.";s:14:"plugin_version";s:3:"1.0";s:6:"prefix";s:4:"cfdd";s:12:"localization";s:14:"draft-dropdown";s:14:"settings_title";N;s:13:"settings_link";N;s:4:"init";b:0;s:7:"install";b:0;s:9:"post_edit";b:0;s:12:"comment_edit";b:0;s:6:"jquery";b:0;s:6:"wp_css";b:0;s:5:"wp_js";b:0;s:9:"admin_css";b:0;s:8:"admin_js";s:1:"1";s:15:"request_handler";b:0;s:6:"snoopy";b:0;s:11:"setting_cat";b:0;s:14:"setting_author";b:0;s:11:"custom_urls";b:0;} 
    220  
    221 ?> 
Note: See TracChangeset for help on using the changeset viewer.