Changeset 23769
- Timestamp:
- 03/21/2013 03:54:11 PM (11 years ago)
- Location:
- trunk
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-admin/css/colors-fresh.css
r23727 r23769 176 176 #nav-menu-header, 177 177 #nav-menu-footer, 178 .menu-item-handle, 179 .wp-slider .ui-slider-handle { 178 .menu-item-handle { 180 179 background: #f1f1f1; 181 180 background-image: -webkit-gradient(linear, left bottom, left top, from(#ececec), to(#f9f9f9)); … … 185 184 background-image: linear-gradient(to top, #ececec, #f9f9f9); 186 185 } 186 187 187 188 188 189 .widget .widget-top, … … 1379 1380 } 1380 1381 1382 .diff-to-title { 1383 color: #0080AA; 1384 } 1385 1381 1386 #diffsubheader{ 1382 1387 background-color: #f7f7f7; 1383 1388 } 1384 1389 1390 .comparetwo#diffsubheader.diff-left-hand-meta-row { 1391 background-color: #fcfcfc; 1392 } 1393 1394 .revision-tick.revision-toloadtrue { 1395 background-color: #9999cc; 1396 background: url(../images/wpspin_light.gif) no-repeat; 1397 background-position: middle; 1398 background-size: 1px 10px; 1399 } 1400 1401 .revision-tick.revision-toloadfalse { 1402 background-color: #aaa; 1403 } 1404 1385 1405 #att-info { 1386 1406 background-color: #e4f2Fd; 1407 } 1408 1409 body .ui-tooltip { 1410 border-color: #d7d7d7; 1411 background-color: #fff; 1387 1412 } 1388 1413 … … 1394 1419 1395 1420 .wp-slider .ui-slider-handle { 1396 border-color: #d7d7d7; 1421 border-color: none; 1422 } 1423 1424 .wp-slider .ui-slider-handle.left-handle { 1425 background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAA3NCSVQICAjb4U/gAAABAlBMVEXR2uHM1dzCzNW4ydOzxtSxw9Gqwc+bs7+Ss8SVscaZrLqQq7yNrMCKqr+EqsGDqb6GpruCpbl8pL15o7t1n7hwnLVika1djq5giqJXiqlYiqNJgp9ieYlDfqA/epw3dpk7dpg2dpo3dZo6dZc4dJY4dJg3cZY2bpE1bosxaIYxZIMrYX0tXnwtXHYsWHEnVW0mTmglT2cjTGIhRVsfQlYaN0kYM0QULDgTKTYRJzQTJzINISoLHCYNGyYKGCEIFxwJEhcJEhsHEhQDDAkHCg8EBwwCBwoEBAQBAwIBAQEBAQMAAgEBAAAAAAQAAQMBAAIAAAICAAEBAQAAAQAAAAD///+62qV+AAAAVnRSTlP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////AEpNbNkAAAAJcEhZcwAACusAAArrAYKLDVoAAAAUdEVYdENyZWF0aW9uIFRpbWUAMy85LzEzrdD8jAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAACbSURBVBiVVcvVDoNQEEXRqbu781B3d/dQQknh/P+vtBQKt/tpsnKGEOW4klkQFFvIsqwYzUJUvCts1wJl9gIruxT5hpLEyMBLKG+Z0ToJgrPLTDqOjyCxNN7mcahiaz50uDWsX0Fk+tKahKGJpX55qp1qpAsCY0lt5MdPUD2KoniowBRXn+f5Xp4RZDfCKg1W0D637P/iznn06w0M+083NZW9ZwAAAABJRU5ErkJggg==); 1426 } 1427 1428 .wp-slider .ui-slider-handle.ui-state-active.left-handle { 1429 background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAA3NCSVQICAjb4U/gAAAAzFBMVEXZ5ejU4eXM3ODG2NzE1tvB1Nq90deux86sxs2qxcynwsqlwcmjwMihvseevMWdvMSbusOXuMGTtb6IrbiHrLeCqbSBqLN/p7J3oa11oKxzn6tvnKhrmaZqmKVpmKVol6RllaJhk6Bej51djptaiZZZiJVYhpNWg5BUf4xSfYlRfIhPeYRMdYBKcXxFaXNDZnA+X2g9XmY8XGU4VV43VFw2U1s0UFgyTVQxS1IwSVAuR00sREosQ0orQkgqQEYpPkQoPkMoPUMoPUL///8pY4MvAAAARHRSTlP/////////////////////////////////////////////////////////////////////////////////////////AHHSjxIAAAAJcEhZcwAACusAAArrAYKLDVoAAAAUdEVYdENyZWF0aW9uIFRpbWUAMy85LzEzrdD8jAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAACUSURBVBiVVctXEoJQEETRMaIo5qwF5hwxYOY9ev97EiQ43q+pUz2EYk9n5UElU0rpRO016toO79WhxlVysWqkroRgsswSjAsbnasgpGdsMk25gooZvR3K8CQxCuU9jH8FhZ3022rwJTZ4CK9nnwJBbiO8yVpFKDButm1bOn6iLFyZt5igeZLHOrhgfJ8k/yXTVoLrAxo1P5iCdUg7AAAAAElFTkSuQmCC); 1430 } 1431 1432 .wp-slider .ui-slider-handle { 1433 /* Slider drag Triangle CSS */ 1434 background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAA3NCSVQICAjb4U/gAAAA8FBMVEU2dZipwNBJl8VGmcX///+EpLlBgqpymrNFjru3ydNWiKs6eZzY4uuRrL08faPL3OZBjLSBqsCTssRHlMJEf59cj657o7xKl8OEqsE9gag2dJtEkb+ct8iZs8BHmMePq8BejKZAiK5llK5FjrlJl8c6dZdGl8avxdBJlcZ4nbc6ep6XrbpKgZ+Lqr5KmcdIkbqsws1Gk8E+f6c4dptaiadFirRKl8V8pblImcNIl8eGpruVscZCh7BMlsdIlcFImchEkbs9eJpCjbdGjbk8fJ84dp02dpo8gatMlsM2dps8faVAg61Ej71Ek75IksFIlcOaLCw7AAAAUHRSTlP/////AP///////////////////////////////////////////////////////////////////////////////////////////////////xB6m5UAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAUdEVYdENyZWF0aW9uIFRpbWUAMy85LzEzrdD8jAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAACaSURBVBiVVcxZD8FAGIXhjxzUVktQgqKmo7ZYhkgsiS1tQuj//zeomo736uS5OFSo2W6UXc/R5hxXW5foxDlXqUKZx0GFZpXynuM4kXhjgjgyJkGzQIjpvi9Fx1uQ0iQUh4GkR/Ini0CQ2IfQ24YC4X8T+Mn0zj8lO1IgnqZpzlxE0m4YhrFsKYJVn126UGV+W1wHf4LdpByuF0goFKI7tv/dAAAAAElFTkSuQmCC); 1397 1435 } 1398 1436 1399 1437 .wp-slider .ui-slider-handle.ui-state-hover, 1400 1438 .wp-slider .ui-slider-handle.ui-state-focus { 1401 border-color: #aaa; 1439 border-color: none; 1440 outline: none; 1402 1441 } 1403 1442 1404 1443 .wp-slider .ui-slider-handle.ui-state-active { 1405 border-color: #aaa; 1406 background: #eee; 1407 background-image: -webkit-gradient(linear, left bottom, left top, from(#f9f9f9), to(#ececec)); 1408 background-image: -webkit-linear-gradient(bottom, #f9f9f9, #ececec); 1409 background-image: -moz-linear-gradient(bottom, #f9f9f9, #ececec); 1410 background-image: -o-linear-gradient(bottom, #f9f9f9, #ececec); 1411 background-image: linear-gradient(to top, #f9f9f9, #ececec); 1444 background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAA3NCSVQICAjb4U/gAAAA51BMVEUgZpDkzc0yd6f///8mcqFJm8cjbZZzr80mg78lh8BDk8UngLl+s9AmfKk4hrGeweBaoMhNlMORwt4nd6Zdm8BAjMEnf7RYmsMkb50mhsFWlsYhZ5ImhbwocZg0f61Lk8E9i7twqNBgo8VSmMUofLBcm8o3faUpfK8mh8Aia5MgZpFMmcgpeapDmcJjo8sliMEmh70nhLkkcKAqgLF2sc8sc5ojbZsngrMkh8EnfKw1eaUjbpkkapImeKQgaJAohb0mh8MmhcMng7kkcKEpf68iZ48haJMmhb8kicEmc6MibJkia5UnhLsw1mWvAAAATXRSTlP/AP8A/////////////////////////////////////////////////////////////////////////////////////////////////9/iR18AAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAUdEVYdENyZWF0aW9uIFRpbWUAMy85LzEzrdD8jAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAACaSURBVBiVVc15D8FAEIfh+Ymj6761LIrSiCNVVyjbRGgifP/PQ6q22/evyZPJDNXzD6G0qNDq5PtO3DJDFyfRpk+po2Eo0h5Qx9U0LRa3SejdlR2rDMLI41yKh6/AtOSzUiuU4kvemSMUDBsRXGuRIHj/CvCXyTNcSXelQBQYY1uBWMY651xfK4KzbdgzqJI73LK7hGC6r0bTB5apIhqIH/YIAAAAAElFTkSuQmCC); 1412 1445 } 1413 1446 -
trunk/wp-admin/css/wp-admin.css
r23765 r23769 3598 3598 } 3599 3599 3600 .diff-from-title, 3601 .diff-to-title { 3602 font-size: 14px; 3603 font-weight: bold; 3604 width:60px; 3605 text-align: right; 3606 float: left; 3607 margin-right: 5px; 3608 } 3609 3600 3610 .revisiondiffcontainer { 3601 3611 width: 96%; … … 3606 3616 } 3607 3617 3608 #diffrestore, 3609 #diffnext, 3610 #diffcancel { 3618 #diffnext { 3611 3619 float: right; 3612 3620 margin-right: 5px; 3621 } 3622 3623 #diffrestore input{ 3624 margin-left: 10px; 3613 3625 } 3614 3626 … … 3624 3636 #diffprevious, 3625 3637 #diffnext { 3626 margin-top: 7px;3627 3638 height: 30px; 3628 3639 } … … 3636 3647 border-bottom: 1px solid #dfdfdf; 3637 3648 width: 100%; 3638 height: 45px; 3639 line-height: 45px; 3640 padding-top: 10px; 3641 } 3642 3643 #diffsubheader { 3644 border-bottom: 1px solid #dfdfdf; 3649 height: 40px; 3650 line-height: 40px; 3651 padding-top: 30px; 3652 } 3653 3654 #diffsubheader,.diff-left-hand-meta-row { 3645 3655 width: 100%; 3646 3656 height:35px; 3647 3657 line-height: 35px; 3648 } 3649 3650 #diffslider { 3658 display: block; 3659 } 3660 3661 #diffslider{ 3651 3662 width: 70%; 3652 3663 margin-left: auto; 3653 3664 margin-right: auto; 3654 3665 text-align: center; 3655 height: 3.5em; 3666 height: 0.8em; 3667 margin-top: 20px; 3668 } 3669 3670 .diff-slider-ticks-wrapper { 3671 margin-left: auto; 3672 margin-right: auto; 3673 text-align: center; 3674 } 3675 3676 #diff-slider-ticks { 3677 position: absolute; 3678 margin-top: 50px; 3679 z-index: 1; 3656 3680 } 3657 3681 … … 3723 3747 #comparetworevisions { 3724 3748 float: right; 3749 position: absolute; 3750 top: 10px; 3751 right: 10px; 3725 3752 line-height: 35px; 3726 3753 padding-right: 5px; … … 3732 3759 3733 3760 #difftitle img, 3734 #difftitlefrom img { 3761 #difftitlefrom img, 3762 .post-revisions li img { 3735 3763 vertical-align: middle; 3736 3764 margin-left: 5px; 3765 } 3766 .post-revisions li { 3767 vertical-align: middle; 3768 height: 28px; 3737 3769 } 3738 3770 … … 3758 3790 .comparetwo #diffnext, 3759 3791 span#diff_left_current_revision, 3760 span#diff_from_current_revision,3792 #diff_from_current_revision, 3761 3793 .currentversion span#diff_left_count, 3762 3794 .currentversion span#diff_left_count_inner, 3763 .c urrentversion #difftitlefrom,3764 .comparetwo.currentversion #difftitlefrom{3795 .comparetwo.currentversion #diff_from_current_revision, 3796 #diffsubheader.diff-left-hand-meta-row { 3765 3797 display: none; 3766 3798 } … … 3770 3802 span#diff_left_count_inner, 3771 3803 .comparetwo #difftitlefrom, 3772 .comparetwo.currentversion span#diff_from_current_revision,3773 3804 .leftmodelloading #modelsloading, 3774 3805 .rightmodelloading #modelsloading, 3775 3806 .leftmodelloading #modelsloading .spinner, 3776 3807 .rightmodelloading #modelsloading .spinner, 3777 { 3778 display: inline; 3808 .comparetwo #diffsubheader.diff-left-hand-meta-row { 3809 display: block; 3810 } 3811 3812 .revision-tick { 3813 width: 1px; 3814 float: left; 3815 margin-right: 15px; 3816 height: 11px; 3817 padding: 0; 3818 margin-left: 0px; 3819 } 3820 3821 .revision-tick.revision-scopeofchanges-vsmall { 3822 width: 1px; 3823 background-color: #aaa; 3824 } 3825 3826 .revision-tick.revision-scopeofchanges-small { 3827 width: 2px; 3828 background-color: #aaa; 3829 margin-left: -1px; 3830 } 3831 3832 .revision-tick.revision-scopeofchanges-med { 3833 width: 3px; 3834 margin-left: -2px; 3835 background-color: #666; 3836 } 3837 3838 .revision-tick.revision-scopeofchanges-large { 3839 width: 4px; 3840 margin-left: -3px; 3841 background-color: #333; 3842 } 3843 3844 .revision-tick.revision-scopeofchanges-vlarge { 3845 margin-left: -3px; 3846 width: 4px; 3847 background-color: #111; 3848 left: 1; 3779 3849 } 3780 3850 … … 3793 3863 } 3794 3864 3795 #difftitlefrom {3796 float: left;3797 display: none;3798 }3799 3800 3865 #modelsloading { 3801 3866 float: right; 3867 position: absolute; 3802 3868 line-height: 30px; 3803 3869 display: none; 3804 3870 clear: none; 3805 margin: 0;3871 right: 170px; 3806 3872 margin-top: -40px; 3807 3873 } … … 3809 3875 #modelsloading .spinner { 3810 3876 float: left; 3811 } 3877 } 3878 3879 .ui-tooltip-content img { 3880 float: left; 3881 margin-right: 5px; 3882 } 3883 3884 3885 3886 /* jQuery UI Tooltip 1.10.1 */ 3887 3888 .ui-tooltip { 3889 padding: 8px; 3890 position: absolute; 3891 z-index: 9999; 3892 max-width: 300px; 3893 min-width: 130px; 3894 } 3895 3896 body .ui-tooltip { 3897 border-width: 1px; 3898 } 3899 3900 .ui-tooltip, .arrow:after { 3901 border: 1px solid #d7d7d7; 3902 } 3903 3904 .ui-tooltip { 3905 padding: 5px 10px; 3906 } 3907 3908 .arrow { 3909 width: 70px; 3910 height: 16px; 3911 overflow: hidden; 3912 position: absolute; 3913 left: 50%; 3914 margin-left: -35px; 3915 bottom: -16px; 3916 z-index: 99999; 3917 3918 } 3919 3920 .arrow.top { 3921 top: -16px; 3922 bottom: auto; 3923 } 3924 3925 .arrow.left { 3926 left: 20%; 3927 } 3928 3929 .arrow:after { 3930 content: ""; 3931 position: absolute; 3932 left: 20px; 3933 top: -20px; 3934 width: 25px; 3935 height: 25px; 3936 background-color: #FFF; 3937 -webkit-transform: rotate(45deg); 3938 -moz-transform: rotate(45deg); 3939 -ms-transform: rotate(45deg); 3940 -o-transform: rotate(45deg); 3941 tranform: rotate(45deg); 3942 } 3943 3944 .arrow.top:after { 3945 bottom: -20px; 3946 top: auto; 3947 } 3812 3948 3813 3949 /* jQuery UI Slider */ … … 3825 3961 position: absolute; 3826 3962 z-index: 2; 3827 width: 1.2em; 3828 height: 1.2em; 3829 border-width: 1px; 3830 border-style: solid; 3831 border-radius: 3px; 3963 width: 17px; 3964 height: 17px; 3965 border: none; 3832 3966 } 3833 3967 -
trunk/wp-admin/includes/ajax-actions.php
r23743 r23769 2124 2124 $datef = _x( 'j F, Y @ G:i:s', 'revision date format'); 2125 2125 2126 $left_revision = get_post( $compare_to ); 2127 2126 2128 //single model fetch mode 2129 //return the diff of a single revision comparison 2127 2130 if ( 0 != $single_revision_id ) { 2128 $left_revision = get_post( $compare_to );2129 2131 $right_revision = get_post( $single_revision_id ); 2130 2132 2133 // 2134 //make sure the left revision is the most recent 2135 // 2136 2137 if ( strtotime( $right_revision->post_modified_gmt ) < strtotime( $left_revision->post_modified_gmt ) ) { 2138 $temp = $left_revision; 2139 $left_revision = $right_revision; 2140 $right_revision = $temp; 2141 } 2142 2143 $linesadded=0; 2144 $linesdeleted=0; 2145 2146 // 2147 //compare from left to right, passed from application 2148 // 2149 $content=''; 2150 foreach ( array_keys( _wp_post_revision_fields() ) as $field ) { 2151 $left_content = apply_filters( "_wp_post_revision_field_$field", $left_revision->$field, $field, $left_revision, 'left' ); 2152 $right_content = apply_filters( "_wp_post_revision_field_$field", $right_revision->$field, $field, $right_revision, 'right' ); 2153 2154 add_filter( "_wp_post_revision_field_$field", 'wp_kses_post' ); 2155 2156 $args = array(); 2157 2158 if ( ! empty( $show_split_view ) ) 2159 $args = array( 'show_split_view' => true ); 2160 2161 $diff = wp_text_diff_with_count( $left_content, $right_content, $args ); 2162 2163 if ( isset( $diff[ 'html' ] ) ) 2164 $content .= $diff[ 'html' ]; 2165 2166 if ( isset( $diff[ 'linesadded' ] ) ) 2167 $linesadded = $linesadded + $diff[ 'linesadded' ]; 2168 2169 if ( isset( $diff[ 'linesdeleted' ] ) ) 2170 $linesdeleted = $linesdeleted + $diff[ 'linesdeleted' ]; 2171 2172 2173 } 2174 $content = '' == $content ? __( 'No difference' ) : $content; 2175 2176 $alltherevisions = array ( 2177 'revisiondiff' => $content, 2178 'lines_deleted' => $linesdeleted, 2179 'lines_added' => $linesadded 2180 ); 2181 echo json_encode( $alltherevisions ); 2182 exit(); 2183 } //end single model fetch 2184 2185 //fetch the list of revisions available 2186 2187 //if we are comparing two revisions, the first 'revision' represented by the leftmost 2188 //slider position is the current revision, prepend a comparison to this revision 2189 if ( ! wp_first_revision_matches_current_version( $post_id ) ) //revisions don't have current version 2190 array_unshift( $revisions, get_post( $post_id ) ) ; 2191 //$revisions->append ( get_post( $post_id ) ); 2192 //error_log( var_dump( $revisions )); 2193 $count = -1; 2194 2195 //reverse the list to start with oldes revision 2196 $revisions = array_reverse( $revisions ); 2197 2198 $previous_revision_id = 0; 2199 foreach ( $revisions as $revision ) : 2200 //error_log( ( $show_autosaves )); 2201 if ( empty( $show_autosaves ) && wp_is_post_autosave( $revision ) ) 2202 continue; 2203 2204 $revision_from_date_author = ''; 2205 $count++; 2206 // return blank data for diffs to the left of the left handle (for right handel model) 2207 // or to the right of the right handle (for left handel model) 2208 if ( ( 0 != $left_handle_at && $count <= $left_handle_at ) || 2209 ( 0 != $right_handle_at && $count > $right_handle_at )) { 2210 $alltherevisions[] = array ( 2211 'ID' => $revision->ID, 2212 ); 2213 continue; 2214 } 2215 2131 2216 if ( $compare_two_mode ) { 2132 $compare_to_gravatar = get_avatar( $left_revision->post_author, 18);2217 $compare_to_gravatar = get_avatar( $left_revision->post_author, 24 ); 2133 2218 $compare_to_author = get_the_author_meta( 'display_name', $left_revision->post_author ); 2134 2219 $compare_to_date = date_i18n( $datef, strtotime( $left_revision->post_modified ) ); … … 2144 2229 } 2145 2230 2146 // 2147 //make sure the left revision is the most recent 2148 // 2149 if ( strtotime( $right_revision->post_modified_gmt ) < strtotime( $left_revision->post_modified_gmt ) ) { 2150 $temp = $left_revision; 2151 $left_revision = $right_revision; 2152 $right_revision = $temp; 2153 } 2154 2155 // 2156 //compare from left to right, passed from application 2157 // 2158 $content=''; 2159 foreach ( array_keys( _wp_post_revision_fields() ) as $field ) { 2160 $left_content = apply_filters( "_wp_post_revision_field_$field", $left_revision->$field, $field, $left_revision, 'left' ); 2161 $right_content = apply_filters( "_wp_post_revision_field_$field", $right_revision->$field, $field, $right_revision, 'right' ); 2162 2163 add_filter( "_wp_post_revision_field_$field", 'wp_kses_post' ); 2164 2165 $args = array(); 2166 2167 if ( ! empty( $show_split_view ) ) 2168 $args = array( 'show_split_view' => true ); 2169 2170 $content .= wp_text_diff( $left_content, $right_content, $args ); 2171 } 2172 $content = '' == $content ? __( 'No difference' ) : $content; 2173 $alltherevisions = array ( 2174 'revisiondiff' => $content 2175 ); 2176 echo json_encode( $alltherevisions ); 2177 exit(); 2178 } 2179 2180 //if we are comparing two revisions, the first 'revision' represented by the leftmost 2181 //slider position is the current revision, prepend a comparison to this revision 2182 if ( $compare_two_mode ) 2183 array_unshift( $revisions, get_post( $post_id ) ); 2184 2185 $count = -1; 2186 2187 foreach ( $revisions as $revision ) : 2188 if ( ! empty( $show_autosaves ) && wp_is_post_autosave( $revision ) ) 2189 continue; 2190 2191 $revision_from_date_author = ''; 2192 $count++; 2193 // return blank data for diffs to the left of the left handle (for right handel model) 2194 // or to the right of the right handle (for left handel model) 2195 if ( ( 0 != $left_handle_at && $count <= $left_handle_at ) || 2196 ( 0 != $right_handle_at && $count > $right_handle_at )) { 2197 $alltherevisions[] = array ( 2198 'ID' => $revision->ID, 2199 ); 2200 2201 continue; 2202 } 2203 2204 $gravatar = get_avatar( $revision->post_author, 18 ); 2231 $gravatar = get_avatar( $revision->post_author, 24 ); 2205 2232 $author = get_the_author_meta( 'display_name', $revision->post_author ); 2206 2233 $date = date_i18n( $datef, strtotime( $revision->post_modified ) ); … … 2214 2241 ); 2215 2242 2243 $autosavef = __( '%1$s [Autosave]' ); 2244 $currentf = __( '%1$s [Current Revision]' ); 2245 2246 if ( ! $post = get_post( $post_id)) 2247 exit(); 2248 2249 if ( $left_revision->post_modified === $post->post_modified ) 2250 $revision_from_date_author = sprintf( $currentf, $revision_from_date_author ); 2251 elseif ( wp_is_post_autosave( $left_revision ) ) 2252 $revision_from_date_author = sprintf( $autosavef, $revision_from_date_author ); 2253 2254 if ( $revision->post_modified === $post->post_modified ) 2255 $revision_date_author = sprintf( $currentf, $revision_date_author ); 2256 elseif ( wp_is_post_autosave( $revision ) ) 2257 $revision_date_author = sprintf( $autosavef, $revision_date_author ); 2258 2259 $date_short_format = __( 'j M @ G:i' ); 2260 $date_short = date_i18n( $date_short_format, strtotime( $revision->post_modified ) ); 2261 2262 $revision_date_author_short = sprintf( 2263 '%s <strong>%s</strong><br />%s', 2264 $gravatar, 2265 $author, 2266 $date_short 2267 ); 2268 2216 2269 $restoreaction = wp_nonce_url( 2217 2270 add_query_arg( … … 2220 2273 admin_url( 'revision.php' ) 2221 2274 ), 2222 "restore-post_{$ compare_to}|{$revision->ID}"2275 "restore-post_{$revision->ID}" 2223 2276 ); 2224 2225 $alltherevisions[] = array ( 2277 // if this is a left handled calculation swap data 2278 if ( 0 != $right_handle_at ) { 2279 $tmp = $revision_from_date_author; 2280 $revision_from_date_author = $revision_date_author; 2281 $revision_date_author = $tmp; 2282 } 2283 if ( ( $compare_two_mode || 0 !== $previous_revision_id ) ) { 2284 $alltherevisions[] = array ( 2226 2285 'ID' => $revision->ID, 2227 2286 'revision_date_author' => $revision_date_author, 2228 2287 'revision_from_date_author' => $revision_from_date_author, 2288 'revision_date_author_short' => $revision_date_author_short, 2229 2289 'restoreaction' => urldecode( $restoreaction ), 2230 'revision_toload' => true 2290 'revision_toload' => true, 2291 'previous_revision_id' => $previous_revision_id 2231 2292 ); 2293 } 2294 $previous_revision_id = $revision->ID; 2232 2295 2233 2296 endforeach; -
trunk/wp-admin/js/revisions.js
r23639 r23769 8 8 Model : Backbone.Model.extend({ 9 9 idAttribute : 'ID', 10 urlRoot : ajaxurl + '?action=revisions-data &compare_to=' + wpRevisionsSettings.post_id+11 '&show_autosaves= false&show_split_view=true&nonce=' + wpRevisionsSettings.nonce,10 urlRoot : ajaxurl + '?action=revisions-data' + 11 '&show_autosaves=true&show_split_view=true&nonce=' + wpRevisionsSettings.nonce, 12 12 defaults: { 13 13 ID : 0, 14 14 revision_date_author : '', 15 revision_date_author_short: '', 15 16 revisiondiff : '<div class="diff-loading"><div class="spinner"></div></div>', 16 17 restoreaction : '', 17 18 revision_from_date_author : '', 18 revision_toload : false 19 revision_toload : false, 20 lines_added : 0, 21 lines_deleted : 0, 22 scope_of_changes : 'none', 23 previous_revision_id : 0 19 24 }, 20 25 21 26 url : function() { 22 return this.urlRoot + '&single_revision_id=' + this.id; 27 if ( 1 === REVAPP._compareoneortwo ) { 28 return this.urlRoot + 29 '&single_revision_id=' + this.id + 30 '&compare_to=' + this.get( 'previous_revision_id' ) + 31 '&post_id=' + wpRevisionsSettings.post_id; 32 } else { 33 return this.urlRoot + 34 '&single_revision_id=' + this.id; 35 } 36 23 37 } 24 38 … … 34 48 _revisionsInteractions : null, 35 49 _revisionsOptions : null, 36 _left_diff : 0,50 _left_diff : 1, 37 51 _right_diff : 1, 38 _autosaves : false,52 _autosaves : true, 39 53 _show_split_view : true, 40 54 _compareoneortwo : 1, 41 55 _left_model_loading : false, //keep track of model loads 42 56 _right_model_loading : false, //disallow slider interaction, also repeat loads, while loading 43 44 //TODO add ability to arrive on specific revision 57 _tickmarkView : null, //the slider tickmarks 58 _has_tooltip : false, 59 45 60 routes : { 46 },47 48 viewrevision : function( revision ) {49 //coming soon50 61 }, 51 62 … … 53 64 var self = this; 54 65 var revisions_to_load = model_collection.where( { revision_toload : true } ); 55 //console.log(revisions_to_load);56 66 var delay=0; 57 _.each(revisions_to_load, function( the_model ) { 67 //match slider to passed revision_id 68 _.each( revisions_to_load, function( the_model ) { 69 if ( the_model.get( 'ID' ) == wpRevisionsSettings.revision_id ) { 70 self._right_diff = self._revisions.indexOf( the_model ) + 1; 71 } 72 73 }); 74 _.each( revisions_to_load, function( the_model ) { 58 75 the_model.urlRoot = model_collection.url; 59 76 _.delay( function() { … … 62 79 add : false, 63 80 remove : false, 64 //async : false,65 81 success : function( model ) { 66 //console.log(model.get( 'ID' ) +'-'+self._revisions.at( self._right_diff ).get( 'ID' )); 67 if ( model.get( 'ID' ) === self._revisions.at( self._right_diff - 1 ).get( 'ID' ) ) { //reload if current model refreshed 68 //console.log('render'); 82 model.set( 'revision_toload', 'false' ); 83 84 //stop spinner when all models are loaded 85 if ( 0 === model_collection.where( { revision_toload : true } ).length ) 86 self.stop_model_loading_spinner(); 87 88 self._tickmarkView.render(); 89 90 var total_changes = model.get( 'lines_added' ) + model.get( 'lines_deleted'); 91 var scope_of_changes = 'vsmall'; 92 93 // Note: hard coded scope of changes 94 // TODO change to dynamic based on range of values 95 if ( total_changes > 1 && total_changes <= 3 ) { 96 scope_of_changes = 'small'; 97 } else if(total_changes > 3 && total_changes <= 5 ) { 98 scope_of_changes = 'med'; 99 } else if(total_changes > 5 && total_changes <= 10 ) { 100 scope_of_changes = 'large'; 101 } else if(total_changes > 10 ) { 102 scope_of_changes = 'vlarge'; 103 } 104 model.set( 'scope_of_changes', scope_of_changes ); 105 if ( 0 !== self._right_diff && 106 model.get( 'ID' ) === self._revisions.at( self._right_diff - 1 ).get( 'ID' ) ) { 107 //reload if current model refreshed 69 108 self._revisionView.render(); 70 109 } 110 71 111 } 72 112 } ); 73 113 }, delay ) ; 74 delay = delay + 200; //stagger model loads by 200 ms to avoid hammering server with requests114 delay = delay + 150; //stagger model loads to avoid hammering server with requests 75 115 } 76 116 ); … … 84 124 stop_left_model_loading : function() { 85 125 this._left_model_loading = false; 86 $('.revisiondiffcontainer').removeClass('leftmodelloading');87 126 }, 88 127 … … 94 133 stop_right_model_loading : function() { 95 134 this._right_model_loading = false; 135 }, 136 137 stop_model_loading_spinner : function() { 96 138 $('.revisiondiffcontainer').removeClass('rightmodelloading'); 139 $('.revisiondiffcontainer').removeClass('leftmodelloading'); 97 140 }, 98 141 … … 105 148 }, 106 149 150 //load the models for the single handle mode 107 151 reloadmodelsingle : function() { 108 152 var self = this; 109 153 self._revisions.url = ajaxurl + '?action=revisions-data&compare_to=' + wpRevisionsSettings.post_id + 110 154 '&show_autosaves=' + self._autosaves + 111 '&show_split_view=' + REVAPP._show_split_view +155 '&show_split_view=' + self._show_split_view + 112 156 '&nonce=' + wpRevisionsSettings.nonce; 113 157 self.start_right_model_loading(); 114 this._revisions.fetch({ //reload revision data158 self._revisions.fetch({ //reload revision data 115 159 success : function() { 116 self.stop_right_model_loading(); 160 console.log('loaded'); 161 //self.stop_right_model_loading(); 162 //REVAPP._right_diff -= 1; 117 163 var revisioncount = self._revisions.length; 118 if ( self._right_diff > revisioncount ) //if right handle past rightmost, move 119 self._right_diff = revisioncount; 120 164 self._revisionView.model = self._revisions; 121 165 self._revisionView.render(); 122 166 self.reload_toload_revisions( self._revisions ); 123 124 $( '#slider' ).slider( 'option', 'max', revisioncount-1 ); //TODO test this, autsaves changed 167 self._tickmarkView.model = self._revisions; 168 self._tickmarkView.render(); 169 $( '#slider' ).slider( 'option', 'max', revisioncount-1 ); //TODO test this, if autsave option changed 170 $( '#slider' ).slider( 'value', self._right_diff - 1 ).trigger( 'slide' ); 171 125 172 }, 126 173 127 174 error : function () { 128 175 self.stop_right_model_loading(); 129 //console.log( 'Error loading revision data' );130 176 } 131 177 … … 133 179 }, 134 180 181 //load the models for the left handle 135 182 reloadleft : function() { 136 183 var self = this; 137 184 self.start_left_model_loading(); 138 185 self._left_handle_revisions = new wp.revisions.Collection(); 186 139 187 self._left_handle_revisions.url = 140 188 ajaxurl + 141 189 '?action=revisions-data&compare_to=' + self._revisions.at( self._right_diff - 1 ).get( 'ID' ) + 142 190 '&post_id=' + wpRevisionsSettings.post_id + 143 '&show_autosaves=' + self._autosaves +144 '&show_split_view=' + self._show_split_view +191 '&show_autosaves=' + REVAPP._autosaves + 192 '&show_split_view=' + REVAPP._show_split_view + 145 193 '&nonce=' + wpRevisionsSettings.nonce + 146 194 '&right_handle_at=' + ( self._right_diff ); … … 151 199 self.stop_left_model_loading(); 152 200 self.reload_toload_revisions( self._left_handle_revisions ); 153 }, 201 self._tickmarkView.model = self._left_handle_revisions; 202 $( '#slider' ).slider( 'option', 'max', self._revisions.length ); 203 // ensure right handle not beyond length, in particular if viewing autosaves is switched from on to off 204 // the number of models in the collection might get shorter, this ensures right handle is not beyond last model 205 if ( self._right_diff > self._revisions.length ) 206 self._right_diff = self._revisions.length; 207 }, 154 208 155 209 error : function () { 156 //console.log( 'Error loading revision data' );157 210 self.stop_left_model_loading(); 158 211 } … … 160 213 }, 161 214 215 //load the models for the right handle 162 216 reloadright : function() { 163 217 var self = this; 164 218 self.start_right_model_loading(); 165 219 self._right_handle_revisions = new wp.revisions.Collection(); 166 if ( 0 === self._left_diff ) { 220 167 221 self._right_handle_revisions.url = 168 222 ajaxurl + 169 '?action=revisions-data&compare_to=' + wpRevisionsSettings.post_id+223 '?action=revisions-data&compare_to=' + ( self._revisions.at( self._left_diff ).get( 'ID' ) -1)+ 170 224 '&post_id=' + wpRevisionsSettings.post_id + 171 '&show_autosaves=' + self._autosaves +172 '&show_split_view=' + self._show_split_view +225 '&show_autosaves=' + REVAPP._autosaves + 226 '&show_split_view=' + REVAPP._show_split_view + 173 227 '&nonce=' + wpRevisionsSettings.nonce; 174 } else {175 self._right_handle_revisions.url =176 ajaxurl +177 '?action=revisions-data&compare_to=' + self._revisions.at( self._left_diff - 1 ).get( 'ID' ) +178 '&post_id=' + wpRevisionsSettings.post_id +179 '&show_autosaves=' + self._autosaves +180 '&show_split_view=' + self._show_split_view +181 '&nonce=' + wpRevisionsSettings.nonce +182 '&left_handle_at=' + (self._left_diff ) ;183 }184 228 185 229 self._right_handle_revisions.fetch({ … … 188 232 self.stop_right_model_loading(); 189 233 self.reload_toload_revisions( self._right_handle_revisions ); 234 self._tickmarkView.model = self._right_handle_revisions; 235 $( '#slider' ).slider( 'option', 'max', self._revisions.length ); 236 $( '#slider' ).slider( 'values', [ REVAPP._left_diff, REVAPP._right_diff] ).trigger( 'slide' ); 237 238 //REVAPP._revisionView.render(); 239 190 240 }, 191 241 192 242 error : function ( response ) { 193 //console.log( 'Error loading revision data - ' + response.toSource() );194 243 self.stop_right_model_loading(); 195 244 } … … 199 248 200 249 reloadleftright : function() { 250 this.start_right_model_loading(); 251 this.start_left_model_loading(); 201 252 this.reloadleft(); 202 253 this.reloadright(); … … 209 260 var self = this; //store the application instance 210 261 if (this._revisions === null) { 211 self._autosaves = '';212 262 self._revisions = new wp.revisions.Collection(); //set up collection 213 263 self.start_right_model_loading(); … … 216 266 success : function() { 217 267 self.stop_right_model_loading(); 218 self.revisionDiffSetup(); 268 //self._right_handle_revisions = self._revisions; 269 self.completeApplicationSetup(); 219 270 } 220 271 }); … … 223 274 }, 224 275 225 revisionDiffSetup : function() { 276 addTooltip : function( handle, message ) { 277 278 handle.attr( 'title', '' ).tooltip({ 279 track: false, 280 281 position: { 282 my: "left-30 top-66", 283 at: "top left", 284 using: function( position, feedback ) { 285 $( this ).css( position ); 286 $( "<div>" ) 287 .addClass( "arrow" ) 288 .addClass( feedback.vertical ) 289 .addClass( feedback.horizontal ) 290 .appendTo( $( this ) ); 291 } 292 }, 293 show: false, 294 hide: false, 295 content: function() { 296 return message; 297 } 298 299 } ); 300 }, 301 /**/ 302 303 completeApplicationSetup : function() { 226 304 this._revisionView = new wp.revisions.views.View({ 227 305 model : this._revisions 228 306 }); 229 307 this._revisionView.render(); 230 $( '#diff_max, #diff_maxof' ).html( this._revisions.length );231 $( '#diff_count' ).html( REVAPP._right_diff );232 308 $( '#slider' ).slider( 'option', 'max', this._revisions.length - 1 ); 233 309 234 310 this.reload_toload_revisions( this._revisions ); 311 235 312 this._revisionsInteractions = new wp.revisions.views.Interact({ 236 313 model : this._revisions … … 238 315 this._revisionsInteractions.render(); 239 316 317 this._tickmarkView = new wp.revisions.views.Tickmarks({ 318 model : this._revisions 319 }); 320 this._tickmarkView.render(); 321 this._tickmarkView.resetticks(); 322 323 324 /* 325 .on( 'mouseup', function( event ) { 326 REVAPP._keep_tooltip_open = false; 327 $( this ).find('.ui-slider-tooltip').hide(); 328 } ).on( 'mousedown', function( event ) { 329 REVAPP._keep_tooltip_open = true; 330 } ).on( 'mouseout', function( event ) { 331 if ( REVAPP._keep_tooltip_open) 332 event.stopImmediatePropagation(); 333 }); 334 */ 240 335 /* 241 336 //Options hidden for now, moving to screen options … … 253 348 model : wp.revisions.Model, 254 349 url : ajaxurl + '?action=revisions-data&compare_to=' + wpRevisionsSettings.post_id + 255 '&show_autosaves= false&show_split_view=true&nonce=' + wpRevisionsSettings.nonce,350 '&show_autosaves=true&show_split_view=true&nonce=' + wpRevisionsSettings.nonce, 256 351 257 352 initialize : function() { … … 260 355 261 356 _.extend(wp.revisions.views, { 357 358 //Ticks inside slider view 359 // 360 Tickmarks : Backbone.View.extend({ 361 el : $('#diff-slider-ticks')[0], 362 tagName : 'diff-slider-ticks-view', 363 className : 'diff-slider-ticks-container', 364 template : wp.template('revision-ticks'), 365 model : wp.revisions.Model, 366 367 resetticks : function() { 368 var slider_max = $( '#slider' ).slider( 'option', 'max'); 369 var slider_width = $( '#slider' ).width(); 370 var adjust_max = ( 2 === REVAPP._compareoneortwo ) ? 1 : 0; 371 var tick_width = Math.floor( slider_width / ( slider_max - adjust_max ) ); 372 373 //TODO: adjust right margins for wider ticks so they stay centered on handle stop point 374 375 //set minimum and maximum widths for tick marks 376 tick_width = (tick_width > 50 ) ? 50 : tick_width; 377 tick_width = (tick_width < 10 ) ? 10 : tick_width; 378 379 slider_width = tick_width * (slider_max - adjust_max ) +1; 380 381 $( '#slider' ).width( slider_width ); 382 $( '.diff-slider-ticks-wrapper' ).width( slider_width ); 383 $( '#diffslider' ).width( slider_width ); 384 $( '#diff-slider-ticks' ).width( slider_width ); 385 386 var a_tick_width = $( '.revision-tick' ).width(); 387 388 if ( tick_width !== a_tick_width ) { // is the width already set correctly? 389 $( '.revision-tick' ).each( function( ) { 390 $(this).css( 'margin-right', tick_width - 1 + 'px'); //space the ticks out using right margin 391 }); 392 393 if( 2 === REVAPP._compareoneortwo ) { 394 $( '.revision-tick' ).first().remove(); //TODO - remove the check 395 } 396 $( '.revision-tick' ).last().css( 'margin-right', '0' ); // last tick gets no right margin 397 } 398 399 }, 400 401 //render the tickmark view 402 render : function() { 403 var self = this; 404 405 if ( null !== self.model ) { 406 var addhtml = ""; 407 _.each ( self.model.models, function ( the_model ) { 408 addhtml = addhtml + self.template ( the_model.toJSON() ); 409 }); 410 self.$el.html( addhtml ); 411 412 } 413 self.resetticks(); 414 return self; 415 } 416 }), 417 262 418 // 263 419 //primary revision diff view … … 268 424 className : 'revisionview-container', 269 425 template : wp.template('revision'), 270 revvapp : null,271 426 comparetwochecked : '', 272 427 draggingleft : false, 273 274 initialize : function(){275 },276 428 277 429 // … … 281 433 var addhtml = ''; 282 434 //compare two revisions mode? 435 283 436 if ( 2 === REVAPP._compareoneortwo ) { 284 437 this.comparetwochecked = 'checked'; … … 311 464 if ( this.model.length < 3 ) { 312 465 $( 'div#comparetworevisions' ).hide(); //don't allow compare two if fewer than three revisions 313 314 } 315 //console.log ( (this.model.at( REVAPP._right_diff - 1 )).url()); 466 } 467 if ( this.model.length < 2 ) { 468 $( 'div#diffslider' ).hide(); //don't allow compare two if fewer than three revisions 469 $( 'div.diff-slider-ticks-wrapper' ).hide(); 470 } 471 472 // 473 // add tooltips to the handles 474 // 475 if ( 2 === REVAPP._compareoneortwo ) { 476 REVAPP.addTooltip ( $( 'a.ui-slider-handle.left-handle' ), 477 ( REVAPP._right_diff >= REVAPP._revisions.length ) ? '' : REVAPP._revisions.at( REVAPP._left_diff ).get( 'revision_date_author_short' ) ); 478 REVAPP.addTooltip ( $( 'a.ui-slider-handle.right-handle' ), 479 ( REVAPP._right_diff >= REVAPP._revisions.length ) ? '' : REVAPP._revisions.at( REVAPP._right_diff ).get( 'revision_date_author_short' ) ); 480 } else { 481 REVAPP.addTooltip ( $( 'a.ui-slider-handle' ), 482 ( REVAPP._right_diff >= REVAPP._revisions.length ) ? '' : REVAPP._revisions.at( REVAPP._right_diff ).get( 'revision_date_author_short' ) ); 483 } 484 485 // 486 // hide the restore button when on the last sport/current post data 487 // 488 if ( REVAPP._right_diff === REVAPP._revisions.length ){ 489 $( '.restore-button' ).hide(); 490 } else { 491 $( '.restore-button' ).show(); 492 } 493 316 494 return this; 317 495 }, … … 327 505 clickcomparetwo : function(){ 328 506 self = this; 329 if ( $( 'input#comparetwo' ).is( ':checked' ) ) { 507 508 if ( $( 'input#comparetwo' ).is( ':checked' ) ) { //compare 2 mode 330 509 REVAPP._compareoneortwo = 2 ; 331 REVAPP.reloadleftright(); 332 } else { 333 REVAPP._compareoneortwo = 1 ; 334 REVAPP._revisionView.draggingleft = false; 335 REVAPP._left_diff = 0; 336 REVAPP.reloadmodelsingle(); 337 } 338 REVAPP._revisionsInteractions.render(); 510 511 if ( 1 === REVAPP._right_diff ) 512 REVAPP._right_diff = 2; 513 REVAPP._revisionView.draggingleft = false; 514 515 wpRevisionsSettings.revision_id = ''; // reset passed revision id so switching back to one handle mode doesn't re-select revision 516 REVAPP.reloadleftright(); 517 REVAPP._revisionView.model = REVAPP._right_handle_revisions; 518 519 } else { //compare one mode 520 REVAPP._compareoneortwo = 1 ; 521 REVAPP._revisionView.draggingleft = false; 522 //REVAPP._left_diff = 0; 523 //REVAPP._right_diff = (REVAPP._revisions.length <= REVAPP._right_diff ) ? REVAPP._right_diff + 1 : REVAPP._right_diff + 1; 524 REVAPP.reloadmodelsingle(); 525 } 526 //REVAPP._revisionView.render(); 527 REVAPP._revisionsInteractions.render(); 528 REVAPP._tickmarkView.render(); 529 339 530 } 340 531 }), … … 343 534 //options view for show autosaves and show split view options 344 535 // 536 /* DISABLED for now 345 537 Options : Backbone.View.extend({ 346 538 el : $('#backbonerevisionsoptions')[0], … … 348 540 className : 'revisionoptions-container', 349 541 template : wp.template('revisionoptions'), 350 351 initialize : function() {352 },353 542 354 543 //render the options view … … 397 586 } 398 587 }), 399 588 */ 400 589 // 401 590 //main interactions view … … 406 595 className : 'revisionvinteract-container', 407 596 template : wp.template('revisionvinteract'), 408 _restoreword : '',409 597 410 598 initialize : function() { 411 this._restoreword = $( 'input#restore' ).attr( 'value' );412 },413 414 reset_restore_button : function() {415 $( 'input#restore' ).attr( 'value', this._restoreword + ' ' + REVAPP._revisions.at( REVAPP._right_diff - 1 ).get( 'ID' ) );416 599 }, 417 600 … … 421 604 var addhtml = this.template; 422 605 this.$el.html( addhtml ); 423 $( '#diff_max, #diff_maxof' ).html( this.model.length );424 $( '#diff_count' ).html( REVAPP._right_diff );425 $( '#diff_left_count_inner' ).html( 0 === REVAPP._left_diff ? '' : 'revision' + REVAPP._left_diff );426 self.reset_restore_button();427 606 428 607 var modelcount = REVAPP._revisions.length; … … 432 611 //set up the slider with a single handle 433 612 slider.slider({ 434 value : REVAPP._right_diff-1, 435 min : 0, 436 max : modelcount-1, 437 step : 1, 613 value: REVAPP._right_diff-1, 614 min: 0, 615 max: modelcount-1, 616 step: 1, 617 438 618 439 619 //slide interactions for one handles slider 440 620 slide : function( event, ui ) { 441 if ( REVAPP._right_model_loading ) //left model stoll loading, prevent sliding left handle 442 return false; 443 444 REVAPP._right_diff =( ui.value+1 ); 445 $( '#diff_count' ).html( REVAPP._right_diff ); 621 622 REVAPP._right_diff = ( ui.value + 1 ); 446 623 REVAPP._revisionView.render(); 447 self.reset_restore_button(); 448 } 624 /* 625 $( 'a.ui-slider-handle' ).tooltip( { 626 content: REVAPP._revisions.at( ui.value ).get( 'revision_date_author_short' ), 627 position: { 628 my: "top-65", 629 using: function( position, feedback ) { 630 $( this ).css( position ); 631 $( "<div>" ) 632 .addClass( "arrow" ) 633 .addClass( feedback.vertical ) 634 .addClass( feedback.horizontal ) 635 .appendTo( this ); 636 } 637 } 638 });//.trigger( 'close' ).trigger( 'open' ); 639 */ 640 } 449 641 }); 450 642 $( '.revisiondiffcontainer' ).removeClass( 'comparetwo' ); 643 451 644 } else { //comparing more than one, eg 2 452 645 //set up the slider with two handles … … 461 654 start : function (event, ui ) { 462 655 var index = $( ui.handle ).index(); //0 (left) or 1 (right) 463 464 656 switch ( index ) { 465 657 case 1: //left handle drag 466 if ( REVAPP._left_model_loading ) //left model st oll loading, prevent sliding left handle658 if ( REVAPP._left_model_loading ) //left model still loading, prevent sliding left handle 467 659 return false; 468 660 661 REVAPP._revisionView.draggingleft = true; 662 469 663 if ( REVAPP._revisionView.model !== REVAPP._left_handle_revisions && 470 null !== REVAPP._left_handle_revisions ) 664 null !== REVAPP._left_handle_revisions ) { 471 665 REVAPP._revisionView.model = REVAPP._left_handle_revisions; 472 473 REVAPP._revisionView.draggingleft = true; 666 REVAPP._tickmarkView.model = REVAPP._left_handle_revisions; 667 REVAPP._tickmarkView.render(); 668 } 669 474 670 REVAPP._left_diff_start = ui.values[ 0 ]; 475 671 break; 476 672 477 673 case 2: //right 478 if ( REVAPP._right_model_loading ) //right model stoll loading, prevent sliding right handle674 if ( REVAPP._right_model_loading || 0 === REVAPP._right_handle_revisions.length) //right model still loading, prevent sliding right handle 479 675 return false; 480 676 481 //one extra spot at left end when comparing two482 677 if ( REVAPP._revisionView.model !== REVAPP._right_handle_revisions && 483 null !== REVAPP._right_handle_revisions ) 678 null !== REVAPP._right_handle_revisions ) { 484 679 REVAPP._revisionView.model = REVAPP._right_handle_revisions; 680 REVAPP._tickmarkView.model = REVAPP._right_handle_revisions; 681 REVAPP._tickmarkView.render(); 682 } 485 683 486 684 REVAPP._revisionView.draggingleft = false; … … 502 700 return false; 503 701 504 REVAPP._left_diff = ui.values[ 0 ] - 1; //one extra spot at left end when comparing two702 REVAPP._left_diff = ui.values[ 0 ]; 505 703 break; 506 704 … … 509 707 return false; 510 708 511 REVAPP._right_diff = ui.values[ 1 ] - 1;709 REVAPP._right_diff = ui.values[ 1 ]; 512 710 break; 513 711 } 514 712 515 $( '#diff_count' ).html( REVAPP._right_diff );516 517 713 if ( 0 === REVAPP._left_diff ) { 518 714 $( '.revisiondiffcontainer' ).addClass( 'currentversion' ); … … 520 716 } else { 521 717 $( '.revisiondiffcontainer' ).removeClass( 'currentversion' ); 522 $( '#diff_left_count_inner' ).html( REVAPP._left_diff );523 718 } 524 719 525 REVAPP._revisionView.render(); //render the diff view526 self.reset_restore_button(); 720 REVAPP._revisionView.render(); 721 527 722 }, 528 723 … … 537 732 switch ( index ) { 538 733 case 1: //left 734 539 735 //left handle dragged & changed, reload right handle model 540 if ( ! ( REVAPP._left_diff_start === ui.values[ 0 ] || REVAPP._left_model_loading ))736 if ( REVAPP._left_diff_start !== ui.values[ 0 ] ) 541 737 REVAPP.reloadright(); 542 738 … … 544 740 545 741 case 2: //right 742 //REVAPP._right_diff = ( 1 >= REVAPP._right_diff ) ? 1 : REVAPP._right_diff-1; 546 743 //right handle dragged & changed, reload left handle model if changed 547 if ( ! ( REVAPP._right_diff_start === ui.values[ 1 ] || REVAPP._right_model_loading ) ) {744 if ( REVAPP._right_diff_start !== ui.values[ 1 ] ) 548 745 REVAPP.reloadleft(); 549 } 746 550 747 break; 551 748 } … … 554 751 }); 555 752 $( '.revisiondiffcontainer' ).addClass( 'comparetwo' ); 753 $( '#diffslider a.ui-slider-handle' ).first().addClass( 'left-handle' ).next().addClass( 'right-handle' ); 556 754 } 557 755 … … 572 770 REVAPP._revisionView.render(); 573 771 574 $( '#diff_count' ).html( REVAPP._right_diff );575 772 $( '#slider' ).slider( 'value', REVAPP._right_diff - 1 ).trigger( 'slide' ); 576 this.reset_restore_button();577 773 }, 578 774 … … 584 780 REVAPP._revisionView.render(); 585 781 586 $( '#diff_count' ).html( REVAPP._right_diff );587 782 $( '#slider' ).slider( 'value', REVAPP._right_diff - 1 ).trigger( 'slide' ); 588 this.reset_restore_button();589 783 } 590 784 }) … … 593 787 //instantiate Revision Application 594 788 REVAPP = new wp.revisions.App(); 595 //TODO consider enable back button to step back thru states?596 //Backbone.history.start({pushState: true});597 789 598 790 }(jQuery)); -
trunk/wp-admin/revision.php
r23639 r23769 18 18 if ( ! $revision = wp_get_post_revision( $revision_id ) ) 19 19 break; 20 20 21 if ( ! current_user_can( 'edit_post', $revision->post_parent ) ) 21 22 break; 23 24 22 25 if ( ! $post = get_post( $revision->post_parent ) ) 23 26 break; 24 27 25 // Revisions disabled and we're not looking at an autosave26 if ( ( ! WP_POST_REVISIONS || ! post_type_supports( $post->post_type, 'revisions' ) ) && ! wp_is_post_autosave( $revision )) {28 // Revisions disabled (previously checked autosavegs && ! wp_is_post_autosave( $revision )) 29 if ( ( ! WP_POST_REVISIONS || ! post_type_supports( $post->post_type, 'revisions' ) ) ) { 27 30 $redirect = 'edit.php?post_type=' . $post->post_type; 28 31 break; 29 32 } 30 check_admin_referer( "restore-post_{$post->ID}|{$revision->ID}" );31 33 32 //store revision event in post meta 33 $restore_details = array( 34 'restored_revision_id' => $revision->ID, 35 'restored_by_user' => get_current_user_id(), 36 'restored_time' => time() 37 ); 38 update_post_meta( $post->ID, '_post_restored_from', $restore_details ); 34 check_admin_referer( "restore-post_{$revision->ID}" ); 39 35 40 36 wp_restore_post_revision( $revision->ID ); … … 59 55 60 56 $post_title = '<a href="' . get_edit_post_link() . '">' . get_the_title() . '</a>'; 61 $revision_title = wp_post_revision_title( $revision, false );62 57 $h2 = sprintf( __( 'Compare Revisions of “%1$s”' ), $post_title ); 63 58 $title = __( 'Revisions' ); … … 81 76 else 82 77 $parent_file = $submenu_file = 'edit.php'; 83 84 78 wp_enqueue_script( 'revisions' ); 85 79 … … 88 82 //TODO - Some of the translations below split things into multiple strings that are contextually related and this makes it pretty impossible for RTL translation. 89 83 //TODO can we pass the context in a better way 90 ?> 91 <script type="text/javascript"> 92 var wpRevisionsSettings = <?php echo json_encode( array( 'post_id' => $post->ID, 'nonce' => wp_create_nonce( 'revisions-ajax-nonce' ) ) ); ?>;93 </script> 94 <?php 95 84 $wpRevisionsSettings = array( 'post_id' => $post->ID, 85 'nonce' => wp_create_nonce( 'revisions-ajax-nonce' ), 86 'revision_id' => $revision_id ); 87 wp_localize_script( 'revisions', 'wpRevisionsSettings', $wpRevisionsSettings ); 88 89 $comparetworevisionslink = get_edit_post_link( $revision->ID ); 96 90 ?> 97 91 98 <div id="backbonerevisionsoptions"></div> 92 <div id="backbonerevisionsoptions"> 93 </div> 99 94 <div class="wrap"> 100 <div class="icon32 icon32-posts-post" id="icon-edit"><br></div> 95 <div class="icon32 icon32-posts-post" id="icon-edit"> 96 <br> 97 </div> 101 98 <div class="revisiondiffcontainer diffsplit currentversion rightmodelloading"> 102 <div id="modelsloading" class="updated message"><span class="spinner" ></span> <?php _e( 'Calculating revision diffs' ); ?></div> 99 <div id="modelsloading" class="updated message"> 100 <span class="spinner" ></span> <?php _e( 'Calculating revision diffs' ); ?> 101 </div> 103 102 <h2 class="long-header"><?php echo $h2; ?></h2> 104 <div id="backbonerevisionsinteract"></div> 105 <div id="backbonerevisionsdiff"></div> 103 <div class="diff-slider-ticks-wrapper"> 104 <div id="diff-slider-ticks"> 105 </div> 106 </div> 107 <div id="backbonerevisionsinteract"> 108 </div> 109 <div id="backbonerevisionsdiff"> 110 </div> 106 111 <hr /> 107 112 </div> … … 109 114 110 115 <script id="tmpl-revision" type="text/html"> 116 <div id="diffsubheader" class="diff-left-hand-meta-row"> 117 <div id="diff_from_current_revision"> 118 <?php printf( '<b>%1$s</b> %2$s.' , __( 'From:' ), __( 'the current version' ) ); ?> 119 </div> 120 <div id="difftitlefrom"> 121 <div class="diff-from-title"><?php _e( 'From:' ); ?></div>{{{ data.revision_from_date_author }}} 122 </div> 123 </div> 124 111 125 <div id="diffsubheader"> 112 <span id="diff_from_current_revision"><?php _e( 'Current version' ); ?><?php _e( '- compared to -' ); ?></span> 113 <div id="difftitlefrom">{{{ data.revision_from_date_author }}} <?php _e( '- compared to -' ); ?></div> 114 <div id="difftitle">{{{ data.revision_date_author }}}</div> 115 <div id="diffcancel"><input class="button" onClick="document.location='<?php echo get_edit_post_link( $post->ID ); ?>'" type="submit" id="cancel" value="<?php esc_attr_e( 'Cancel' )?>" /></div> 116 <div id="diffrestore"><input class="button button-primary" onClick="document.location='{{{ data.restoreaction }}}'" type="submit" id="restore" value="<?php esc_attr_e( 'Restore revision ID' )?>" /></div> 117 <div id="comparetworevisions"><input type="checkbox" id="comparetwo" value="comparetwo" {{{ data.comparetwochecked }}} name="comparetwo"/> <label for="comparetwo"><?php esc_attr_e( 'Compare two revisions' ); ?></a></div> </div> 126 <div id="difftitle"> 127 <div class="diff-to-title"><?php _e( 'To:' ); ?></div>{{{ data.revision_date_author }}} 128 </div> 129 <div id="diffrestore"> 130 <input class="button button-primary restore-button" onClick="document.location='{{{ data.restoreaction }}}'" type="submit" id="restore" value="<?php esc_attr_e( 'Restore This Revision' )?>" /> 131 </div> 132 <div id="comparetworevisions"> 133 <input type="checkbox" id="comparetwo" value="comparetwo" {{{ data.comparetwochecked }}} name="comparetwo"/> 134 <label for="comparetwo"><?php esc_attr_e( 'Compare two revisions' ); ?></a></label> 135 </div> 136 </div> 137 118 138 <div id="removedandadded"> 119 139 <div id="removed"><?php _e( 'Removed -' ); ?></div> … … 125 145 <script id="tmpl-revisionvinteract" type="text/html"> 126 146 <div id="diffheader"> 127 <div id="diffprevious"><input class="button" type="submit" id="previous" value="<?php esc_attr_e( 'Previous' ); ?>" /></div> 128 <div id="diffnext"><input class="button" type="submit" id="next" value="<?php esc_attr_e( 'Next' ); ?>" /></div> 129 <div id="diffslider"> 130 <div id="revisioncount"> 131 <?php _e( 'Comparing' ); ?> 132 <span id="diff_left_count"> <?php _e( 'revision' ); ?></span> <span id="diff_left_count_inner"></span> 133 <span id="diff_left_current_revision"><?php _e( 'current version' ); ?></span> 134 <span id="diff_revision_from">{{{ data.diff_revision_from }}}</span> 135 <?php _e( ' to revision' ); ?> 136 <span id="diff_count">{{{ data.current_diff }}}</span> 137 <?php _e( ' of ' ); ?> 138 <span id="diff_max" ></span> 139 </div> 140 141 <div id="slider" class="wp-slider"></div> 147 <div id="diffprevious"><input class="button" type="submit" id="previous" value="<?php esc_attr_e( 'Previous' ); ?>" /> 142 148 </div> 149 <div id="diffnext"><input class="button" type="submit" id="next" value="<?php esc_attr_e( 'Next' ); ?>" /> 150 </div> 151 <div id="diffslider"> 152 <div id="slider" class="wp-slider"> 153 </div> 154 </div> 155 </div> 156 </script> 157 <script id="tmpl-revision-ticks" type="text/html"> 158 <div class="revision-tick revision-toload{{{ data.revision_toload }}} revision-scopeofchanges-{{{ data.scope_of_changes }}}"> 143 159 </div> 144 160 </script> -
trunk/wp-includes/pluggable.php
r23639 r23769 1745 1745 } 1746 1746 endif; 1747 1748 if ( !function_exists( 'wp_text_diff_with_count' ) ) : 1749 /** 1750 * Displays a human readable HTML representation of the difference between two strings. 1751 * similar to wp_text_diff, but tracks and returns could of lines added and removed 1752 * 1753 * @since 3.6 1754 * @see wp_parse_args() Used to change defaults to user defined settings. 1755 * @uses Text_Diff 1756 * @uses WP_Text_Diff_Renderer_Table 1757 * 1758 * @param string $left_string "old" (left) version of string 1759 * @param string $right_string "new" (right) version of string 1760 * @param string|array $args Optional. Change 'title', 'title_left', and 'title_right' defaults. 1761 * @return array contains html, linesadded & linesdeletd, empty string if strings are equivalent. 1762 */ 1763 function wp_text_diff_with_count( $left_string, $right_string, $args = null ) { 1764 $defaults = array( 'title' => '', 'title_left' => '', 'title_right' => '' ); 1765 $args = wp_parse_args( $args, $defaults ); 1766 1767 if ( !class_exists( 'WP_Text_Diff_Renderer_Table' ) ) 1768 require( ABSPATH . WPINC . '/wp-diff.php' ); 1769 1770 $left_string = normalize_whitespace( $left_string ); 1771 $right_string = normalize_whitespace( $right_string ); 1772 1773 $left_lines = explode( "\n", $left_string ); 1774 $right_lines = explode( "\n", $right_string) ; 1775 1776 $text_diff = new Text_Diff($left_lines, $right_lines ); 1777 $linesadded = $text_diff->countAddedLines(); 1778 $linesdeleted = $text_diff->countDeletedLines(); 1779 1780 $renderer = new WP_Text_Diff_Renderer_Table(); 1781 $diff = $renderer->render( $text_diff ); 1782 1783 if ( !$diff ) 1784 return ''; 1785 1786 $r = "<table class='diff'>\n"; 1787 1788 if ( ! empty( $args[ 'show_split_view' ] ) ) { 1789 $r .= "<col class='content diffsplit left' /><col class='content diffsplit middle' /><col class='content diffsplit right' />"; 1790 } else { 1791 $r .= "<col class='content' />"; 1792 } 1793 1794 if ( $args['title'] || $args['title_left'] || $args['title_right'] ) 1795 $r .= "<thead>"; 1796 if ( $args['title'] ) 1797 $r .= "<tr class='diff-title'><th colspan='4'>$args[title]</th></tr>\n"; 1798 if ( $args['title_left'] || $args['title_right'] ) { 1799 $r .= "<tr class='diff-sub-title'>\n"; 1800 $r .= "\t<td></td><th>$args[title_left]</th>\n"; 1801 $r .= "\t<td></td><th>$args[title_right]</th>\n"; 1802 $r .= "</tr>\n"; 1803 } 1804 if ( $args['title'] || $args['title_left'] || $args['title_right'] ) 1805 $r .= "</thead>\n"; 1806 1807 $r .= "<tbody>\n$diff\n</tbody>\n"; 1808 $r .= "</table>"; 1809 1810 return array( 'html' => $r, 'linesadded' => $linesadded, 'linesdeleted' => $linesdeleted ); 1811 } 1812 endif; -
trunk/wp-includes/post-template.php
r23743 r23769 1307 1307 return false; 1308 1308 1309 /* translators: revision date format, see http://php.net/date */ 1310 $datef = _x( 'j F, Y @ G:i', 'revision date format'); 1311 /* translators: 1: date */ 1312 $autosavef = __( '%1$s [Autosave]' ); 1313 /* translators: 1: date */ 1314 $currentf = __( '%1$s [Current Revision]' ); 1315 1316 $date = date_i18n( $datef, strtotime( $revision->post_modified ) ); 1317 if ( $link && current_user_can( 'edit_post', $revision->ID ) && $link = get_edit_post_link( $revision->ID ) ) 1318 $date = "<a href='$link'>$date</a>"; 1319 1320 if ( !wp_is_post_revision( $revision ) ) 1321 $date = sprintf( $currentf, $date ); 1322 elseif ( wp_is_post_autosave( $revision ) ) 1323 $date = sprintf( $autosavef, $date ); 1324 1325 return $date; 1326 } 1327 1328 /** 1329 * Retrieve formatted date timestamp of a revision (linked to that revisions's page). 1330 * 1331 * @package WordPress 1332 * @subpackage Post_Revisions 1333 * @since 3.6.0 1334 * 1335 * @uses date_i18n() 1336 * 1337 * @param int|object $revision Revision ID or revision object. 1338 * @param bool $link Optional, default is true. Link to revisions's page? 1339 * @return string gravatar, user, i18n formatted datetimestamp or localized 'Current Revision'. 1340 */ 1341 function wp_post_revision_title_expanded( $revision, $link = true ) { 1342 if ( !$revision = get_post( $revision ) ) 1343 return $revision; 1344 1345 if ( !in_array( $revision->post_type, array( 'post', 'page', 'revision' ) ) ) 1346 return false; 1347 1309 1348 $author = get_the_author_meta( 'display_name', $revision->post_author ); 1310 1349 /* translators: revision date format, see http://php.net/date */ 1311 1350 $datef = _x( 'j F, Y @ G:i:s', 'revision date format'); 1312 1351 1313 $gravatar = get_avatar( $revision->post_author, 18);1352 $gravatar = get_avatar( $revision->post_author, 24 ); 1314 1353 1315 1354 $date = date_i18n( $datef, strtotime( $revision->post_modified ) ); … … 1389 1428 1390 1429 /* translators: post revision: 1: when, 2: author name */ 1391 $titlef = _x( '%1$s by %2$s', 'post revision' );1430 $titlef = _x( '%1$s', 'post revision' ); 1392 1431 1393 1432 if ( $parent ) 1394 1433 array_unshift( $revisions, $post ); 1434 1435 // since 3.6 revisions include a copy of the current post data as a revision 1436 // the collowing removes this current revision if present from the list of 1437 // revisions returned by wp_list_post_revisions, remove these to include the 1438 // crrent post revision in the list of revisions 1439 if ( wp_first_revision_matches_current_version( $post_id ) ) 1440 array_pop( $revisions ); 1395 1441 1396 1442 $rows = $right_checked = ''; … … 1403 1449 continue; 1404 1450 1405 $date = wp_post_revision_title( $revision ); 1406 $name = get_the_author_meta( 'display_name', $revision->post_author ); 1407 1408 if ( 'form-table' == $format ) { 1409 if ( $left ) 1410 $left_checked = $left == $revision->ID ? ' checked="checked"' : ''; 1411 else 1412 $left_checked = $right_checked ? ' checked="checked"' : ''; // [sic] (the next one) 1413 $right_checked = $right == $revision->ID ? ' checked="checked"' : ''; 1414 1415 $class = $class ? '' : " class='alternate'"; 1416 1417 if ( $post->ID != $revision->ID && $can_edit_post ) 1418 $actions = '<a href="' . wp_nonce_url( add_query_arg( array( 'revision' => $revision->ID, 'action' => 'restore' ) ), "restore-post_$post->ID|$revision->ID" ) . '">' . __( 'Restore' ) . '</a>'; 1419 else 1420 $actions = ''; 1421 1422 $rows .= "<tr$class>\n"; 1423 $rows .= "\t<th style='white-space: nowrap' scope='row'><input type='radio' name='left' value='$revision->ID'$left_checked /></th>\n"; 1424 $rows .= "\t<th style='white-space: nowrap' scope='row'><input type='radio' name='right' value='$revision->ID'$right_checked /></th>\n"; 1425 $rows .= "\t<td>$date</td>\n"; 1426 $rows .= "\t<td>$name</td>\n"; 1427 $rows .= "\t<td class='action-links'>$actions</td>\n"; 1428 $rows .= "</tr>\n"; 1429 } else { 1430 $title = sprintf( $titlef, $date, $name ); 1431 $rows .= "\t<li>$title</li>\n"; 1432 } 1451 $date = wp_post_revision_title_expanded( $revision ); 1452 1453 $title = sprintf( $titlef, $date ); 1454 $rows .= "\t<li>$title</li>\n"; 1455 1433 1456 } 1434 1457 … … 1480 1503 // show the restore event details 1481 1504 // 1482 if ( $restored_from_meta = get_post_meta( $post->ID, '_post_restored_from', true ) ) { 1483 $author = get_the_author_meta( 'display_name', $restored_from_meta[ 'restored_by_user' ] ); 1484 /* translators: revision date format, see http://php.net/date */ 1485 $datef = _x( 'j F, Y @ G:i:s', 'revision date format'); 1486 $date = date_i18n( $datef, strtotime( $restored_from_meta[ 'restored_time' ] ) ); 1487 $timesince = human_time_diff( $restored_from_meta[ 'restored_time' ], current_time( 'timestamp' ) ) ;1488 ?> 1505 if ( $restored_from_meta = get_post_meta( $post->ID, '_post_restored_from', true ) ) { 1506 $author = get_the_author_meta( 'display_name', $restored_from_meta[ 'restored_by_user' ] ); 1507 /* translators: revision date format, see http://php.net/date */ 1508 $datef = _x( 'j F, Y @ G:i:s', 'revision date format'); 1509 $date = date_i18n( $datef, strtotime( $restored_from_meta[ 'restored_time' ] ) ); 1510 $timesince = human_time_diff( $restored_from_meta[ 'restored_time' ], current_time( 'timestamp' ) ) ; 1511 ?> 1489 1512 <hr /> 1490 <div id="revisions-meta-restored"> 1491 <?php 1513 <div id="revisions-meta-restored"> 1514 <?php 1492 1515 /* translators: restored revision details: 1: revision ID, 2: time ago, 3: author name, 4: date */ 1493 printf( _x( 'Previously restored from revision ID %1$d, %2$s ago by %3$s (%4$s)', 'restored revision details' ), 1494 $restored_from_meta[ 'restored_revision_id'], 1495 $timesince, 1496 $author, 1497 $date ); 1498 ?> 1499 </div> 1500 <?php 1516 printf( _x( 'Previously restored from revision ID %1$d, %2$s ago by %3$s (%4$s)', 'restored revision details' ), 1517 $restored_from_meta[ 'restored_revision_id'], 1518 $timesince, 1519 $author, 1520 $date ); 1521 ?> 1522 </div> 1523 <?php 1501 1524 echo "</ul>"; 1502 } 1525 } 1503 1526 1504 1527 endif; -
trunk/wp-includes/revision.php
r23735 r23769 405 405 } 406 406 } 407 408 /** 409 * Determines if the specified post's most recent revision matches the post (by checking post_modified). 410 * 411 * @package WordPress 412 * @subpackage Post_Revisions 413 * @since 3.6.0 414 * 415 * @param int|object $post Post ID or post object. 416 * @return bool false if not a match, otherwise true. 417 */ 418 function wp_first_revision_matches_current_version( $post ) { 419 420 if ( ! $post = get_post( $post ) ) 421 return false; 422 423 if ( ! $revisions = wp_get_post_revisions( $post->ID ) ) 424 return false; 425 426 $last_revision = array_shift( $revisions ); 427 428 if ( ! ($last_revision->post_modified == $post->post_modified ) ) 429 return false; 430 431 return true; 432 } -
trunk/wp-includes/script-loader.php
r23729 r23769 274 274 $scripts->add( 'backbone', '/wp-includes/js/backbone.min.js', array('underscore','jquery', 'template'), '0.9.10', 1 ); 275 275 276 $scripts->add( 'revisions', "/wp-admin/js/revisions$suffix.js", array( 'backbone', 'jquery-ui-slider' ), false, 1 );276 $scripts->add( 'revisions', "/wp-admin/js/revisions$suffix.js", array( 'backbone', 'jquery-ui-slider', 'jquery-ui-tooltip' ), false, 1 ); 277 277 278 278 $scripts->add( 'imgareaselect', "/wp-includes/js/imgareaselect/jquery.imgareaselect$suffix.js", array('jquery'), '0.9.8', 1 );
Note: See TracChangeset
for help on using the changeset viewer.