Version Description
= 1.5 = AJAX!
= 1.4 = WP3.5 Media Manager, time-links...
= 1.3 = Internationalization! More user friendly, more customizations.
= 1.2 = Now featuring your local videos!
= 1.1 = Feature Dailymotion Videos on your posts!
Download this release
Release Info
Developer | a.hoereth |
Plugin | Featured Video Plus |
Version | 1.5.1 |
Comparing to | |
See all releases |
Code changes from version 1.5 to 1.5.1
- featured-video-plus.php +2 -2
- js/backend-min.js +11 -11
- js/backend.js +10 -7
- php/backend.php +6 -7
- php/frontend.php +1 -1
- php/general.php +2 -2
- php/upgrade.php +6 -2
- readme.txt +7 -2
featured-video-plus.php
CHANGED
@@ -4,7 +4,7 @@ Plugin Name: Featured Video Plus
|
|
4 |
Plugin URI: https://github.com/ahoereth/featured-video-plus
|
5 |
Description: Add Featured Videos to your posts and pages.
|
6 |
Author: Alexander Höreth
|
7 |
-
Version: 1.5
|
8 |
Author URI: http://ahoereth.yrnxt.com
|
9 |
License: GPL2
|
10 |
|
@@ -27,7 +27,7 @@ License: GPL2
|
|
27 |
*/
|
28 |
|
29 |
if (!defined('FVP_VERSION'))
|
30 |
-
define('FVP_VERSION', '1.5');
|
31 |
|
32 |
// symlink proof
|
33 |
$pathinfo = pathinfo(dirname(plugin_basename(__FILE__)));
|
4 |
Plugin URI: https://github.com/ahoereth/featured-video-plus
|
5 |
Description: Add Featured Videos to your posts and pages.
|
6 |
Author: Alexander Höreth
|
7 |
+
Version: 1.5.1
|
8 |
Author URI: http://ahoereth.yrnxt.com
|
9 |
License: GPL2
|
10 |
|
27 |
*/
|
28 |
|
29 |
if (!defined('FVP_VERSION'))
|
30 |
+
define('FVP_VERSION', '1.5.1');
|
31 |
|
32 |
// symlink proof
|
33 |
$pathinfo = pathinfo(dirname(plugin_basename(__FILE__)));
|
js/backend-min.js
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
-
jQuery(document).ready(function(a){function g(){a.trim(a("#fvp_video").val())==a.trim(a("#fvp_sec").val())?(a("#fvp_sec").addClass("fvp_invalid"),a("#fvp_localvideo_notdistinct_warning").slideDown("fast")):(a("#fvp_localvideo_notdistinct_warning").slideUp("fast"),a("#fvp_sec").removeClass("fvp_invalid"))}a("#fvp_video,#fvp_sec").blur(function(){var
|
2 |
-
|
3 |
-
{action:"fvp_ajax",id:a("#post_ID").val(),fvp_nonce:a("#fvp_nonce").val(),fvp_video:a("#fvp_video").val(),fvp_sec:a("#fvp_sec").val()},function(
|
4 |
-
"")}),a("#fvp_help_notice").slideUp("fast")):
|
5 |
-
|
6 |
-
a("#fvp_localvideo_format_warning").slideUp("fast");
|
7 |
-
"linear")),g()):(a("#fvp_sec_wrapper").slideUp("fast"),a("#fvp_video").removeClass("fvp_invalid"),a("#fvp_localvideo_format_warning").slideUp("fast"));
|
8 |
-
|
9 |
-
a("#fvp_set_featimg_link, #fvp_warning_set_featimg").click(function(){a("#fvp_set_featimg").attr("checked",!0);a.post(ajaxurl,{action:"fvp_ajax",id:a("#post_ID").val(),fvp_nonce:a("#fvp_nonce").val(),fvp_video:a("#fvp_video").val(),fvp_sec:a("#fvp_sec").val()},function(
|
10 |
-
a("#set-post-thumbnail").click(function(){a("#fvp_featimg_box_warning").addClass("fvp_hidden")});a("#fvp_help_toggle").bind("click",function(){a("#contextual-help-link").trigger("click")});var e,f;f={frame:function(){if(this._frame)return this._frame;this._frame=wp.media({title:e.data("title"),library:{type:"video"},button:{text:e.data("button")},multiple:!1});this._frame.on("open",this.updateFrame).state("library").on("select",this.select);return this._frame},select:function(){var
|
11 |
-
a(e.data("target")).val(
|
1 |
+
jQuery(document).ready(function(a){function g(){a.trim(a("#fvp_video").val())==a.trim(a("#fvp_sec").val())?(a("#fvp_sec").addClass("fvp_invalid"),a("#fvp_localvideo_notdistinct_warning").slideDown("fast")):(a("#fvp_localvideo_notdistinct_warning").slideUp("fast"),a("#fvp_sec").removeClass("fvp_invalid"))}a("#fvp_video,#fvp_sec").blur(function(){var c=a(this);c.val(a.trim(c.val()));d=c.val();if(0===d.length||d==fvp_backend_data.default_value||d==fvp_backend_data.default_value_sec)c.addClass("defaultTextActive"),
|
2 |
+
c.is("#fvp_video")?c.val(fvp_backend_data.default_value):c.val(fvp_backend_data.default_value_sec);c.trigger("autosize");c.val()!=c.siblings(".fvp_mirror").val()&&(bg=c.siblings(".fvp_video_choose").children(".fvp_media_icon").css("backgroundImage"),c.siblings(".fvp_video_choose").children(".fvp_media_icon").css("backgroundImage","url('"+fvp_backend_data.loading_gif+"')"),a("#fvp_current_video").css({backgroundImage:"url('"+fvp_backend_data.loading_gif+"')",width:"256px",height:"144px"}),a.post(ajaxurl,
|
3 |
+
{action:"fvp_ajax",id:a("#post_ID").val(),fvp_nonce:a("#fvp_nonce").val(),fvp_video:a("#fvp_video").val(),fvp_sec:a("#fvp_sec").val()},function(b){c.siblings(".fvp_mirror").val(c.val());c.siblings(".fvp_video_choose").children(".fvp_media_icon").css("backgroundImage",bg);"removed"==b.typ?(a("#fvp_current_video").html("").css({backgroundImage:"",width:"",height:""}),a("#postimagediv .inside").html(b.img)):b.valid?(a("#postimagediv .inside").html(b.img),a("#fvp_set_featimg_link, #fvp_featimg_warning").slideUp().addClass("fvp_hidden"),
|
4 |
+
a("#fvp_current_video").html(b.video),c.css("backgroundColor","#00FF00").animate({backgroundColor:"white"},500,function(){c.css("backgroundColor","")}),a("#fvp_help_notice").slideUp("fast")):c.addClass("fvp_invalid")},"json"))});a(".fvp_input").focus(function(){d=a(this).val();if(d==fvp_backend_data.default_value||d==fvp_backend_data.default_value_sec)a(this).removeClass("defaultTextActive"),a(this).val("")});a(".fvp_input").autosize().trigger("blur").keypress(function(a){13==a.keyCode&&a.preventDefault()});
|
5 |
+
a(".fvp_input").click(function(){a(this).select()});if(0<a("#fvp_video").length){var d=a("#fvp_video").val();if(0===d.length||d==fvp_backend_data.default_value||!d.match(fvp_backend_data.wp_upload_dir.replace(/\//g,"\\/")))a("#fvp_sec").val(fvp_backend_data.default_value_sec),a("#fvp_sec_wrapper").hide()}a("#fvp_video").bind("change paste keyup",function(){var c=setTimeout,b=a(this),b=a.trim(b.val());a.trim(a("#fvp_sec").val());a("#fvp_help_notice").slideDown("fast");if(0===b.length||b==fvp_backend_data.default_value)a("#fvp_video").removeClass("fvp_invalid"),
|
6 |
+
a("#fvp_sec").val(fvp_backend_data.default_value_sec).blur(),a("#fvp_sec_wrapper").slideUp("fast"),a("#fvp_localvideo_format_warning").slideUp("fast");b.match(fvp_backend_data.wp_upload_dir.replace(/\//g,"\\/"))?(b=/^.*\/(.*)\.(.*)$/g.exec(b),"webm"==b[2]||"mp4"==b[2]||"ogg"==b[2]||"ogv"==b[2]?(a("#fvp_sec_wrapper").slideDown("fast"),a("#fvp_video").removeClass("fvp_invalid"),a("#fvp_localvideo_format_warning").slideUp("fast")):(a("#fvp_sec").val(fvp_backend_data.default_value_sec).blur(),a("#fvp_sec_wrapper").slideUp("fast"),
|
7 |
+
a("#fvp_video").addClass("fvp_invalid"),a("#fvp_localvideo_format_warning").slideDown("fast","linear")),g()):(a("#fvp_sec_wrapper").slideUp("fast"),a("#fvp_video").removeClass("fvp_invalid"),a("#fvp_localvideo_format_warning").slideUp("fast"));c(void 0,200)});a("#fvp_sec").bind("change paste keyup",function(){var c=setTimeout,b=a(this),b=a.trim(b.val());a.trim(a("#fvp_video").val());if(0===b.length||b==fvp_backend_data.default_value)a("#fvp_localvideo_format_warning").slideUp("fast"),a("#fvp_sec").removeClass("fvp_invalid");
|
8 |
+
b.match(fvp_backend_data.wp_upload_dir.replace(/\//g,"\\/"))?(b=/^.*\/(.*)\.(.*)$/g.exec(b),"webm"==b[2]||"mp4"==b[2]||"ogg"==b[2]||"ogv"==b[2]?(a("#fvp_sec").removeClass("fvp_invalid"),a("#fvp_localvideo_format_warning").slideUp("fast"),g()):(a("#fvp_sec").addClass("fvp_invalid"),a("#fvp_localvideo_format_warning").slideDown("fast"))):0!==b.length&&(a("#fvp_sec").addClass("fvp_invalid"),a("#fvp_localvideo_notdistinct_warning").slideDown("fast"));c(void 0,200)});a("#fvp_set_featimg_link").removeClass("fvp_hidden");
|
9 |
+
a("#fvp_set_featimg_input").addClass("fvp_hidden");a("#fvp_set_featimg_link, #fvp_warning_set_featimg").click(function(){a("#fvp_set_featimg").attr("checked",!0);a.post(ajaxurl,{action:"fvp_ajax",id:a("#post_ID").val(),fvp_nonce:a("#fvp_nonce").val(),fvp_video:a("#fvp_video").val(),fvp_sec:a("#fvp_sec").val()},function(c){a("#postimagediv .inside").html(c.img);a("#fvp_set_featimg_link, #fvp_featimg_warning").slideUp().addClass("fvp_hidden")},"json");return!1});a("#remove-post-thumbnail").click(function(){a("#fvp_set_featimg_link, #fvp_featimg_warning").slideDown().removeClass("fvp_hidden")});
|
10 |
+
a("#set-post-thumbnail").click(function(){a("#fvp_featimg_box_warning").addClass("fvp_hidden")});a("#fvp_help_toggle").bind("click",function(){a("#contextual-help-link").trigger("click")});var e,f;f={frame:function(){if(this._frame)return this._frame;this._frame=wp.media({title:e.data("title"),library:{type:"video"},button:{text:e.data("button")},multiple:!1});this._frame.on("open",this.updateFrame).state("library").on("select",this.select);return this._frame},select:function(){var c=this.get("selection");
|
11 |
+
a(e.data("target")).val(c.pluck("url")).trigger("autosize").change().removeClass("defaultTextActive")},updateFrame:function(){},init:function(){a("#wpbody").on("click",".fvp_video_choose",function(c){c.preventDefault();e=a(this).closest(".fvp_input_wrapper");f.frame().open()})}};1==fvp_backend_data.wp_35&&f.init()});
|
js/backend.js
CHANGED
@@ -36,15 +36,18 @@ jQuery(document).ready(function($){
|
|
36 |
function(data) {
|
37 |
t.siblings('.fvp_mirror').val( t.val() );
|
38 |
t.siblings('.fvp_video_choose').children('.fvp_media_icon').css('backgroundImage', bg);
|
39 |
-
if(data.typ == 'removed')
|
40 |
$('#fvp_current_video').html('').css({'backgroundImage':'','width':'','height':''});
|
41 |
-
|
42 |
-
if(data.valid) {
|
43 |
-
$('#fvp_current_video').html(data.video);
|
44 |
-
t.css('backgroundColor','#00FF00').animate({'backgroundColor':'white'}, 500, function() { t.css('backgroundColor',''); });
|
45 |
-
$("#fvp_help_notice").slideUp('fast');
|
46 |
} else
|
47 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
}, "json"
|
49 |
);
|
50 |
}
|
36 |
function(data) {
|
37 |
t.siblings('.fvp_mirror').val( t.val() );
|
38 |
t.siblings('.fvp_video_choose').children('.fvp_media_icon').css('backgroundImage', bg);
|
39 |
+
if(data.typ == 'removed'){
|
40 |
$('#fvp_current_video').html('').css({'backgroundImage':'','width':'','height':''});
|
41 |
+
$('#postimagediv .inside').html(data.img);
|
|
|
|
|
|
|
|
|
42 |
} else
|
43 |
+
if(data.valid) {
|
44 |
+
$('#postimagediv .inside').html(data.img);
|
45 |
+
$("#fvp_set_featimg_link, #fvp_featimg_warning").slideUp().addClass("fvp_hidden");
|
46 |
+
$('#fvp_current_video').html(data.video);
|
47 |
+
t.css('backgroundColor','#00FF00').animate({'backgroundColor':'white'}, 500, function() { t.css('backgroundColor',''); });
|
48 |
+
$("#fvp_help_notice").slideUp('fast');
|
49 |
+
} else
|
50 |
+
t.addClass('fvp_invalid');
|
51 |
}, "json"
|
52 |
);
|
53 |
}
|
php/backend.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Class containing functions required WordPress administration panels. Metabox on post/page edit views and options section under settings->media.
|
4 |
*
|
5 |
* @author ahoereth
|
6 |
-
* @version 2013/
|
7 |
* @see ../featured_video_plus.php
|
8 |
* @see featured_video_plus in general.php
|
9 |
* @since 1.0
|
@@ -59,7 +59,7 @@ class featured_video_plus_backend {
|
|
59 |
}
|
60 |
|
61 |
// just required on post.php
|
62 |
-
if($hook_suffix == 'post.php' && isset($_GET['post']) ) {
|
63 |
wp_enqueue_script( 'jquery.autosize', FVP_URL . 'js/jquery.autosize-min.js', array( 'jquery' ), FVP_VERSION );
|
64 |
wp_enqueue_script( 'fvp_backend', FVP_URL . 'js/backend-min.js', array( 'jquery','jquery.autosize' ), FVP_VERSION ); // production
|
65 |
//wp_enqueue_script( 'fvp_backend', FVP_URL . 'js/backend.js', array( 'jquery','jquery.autosize'), FVP_VERSION ); // development
|
@@ -75,7 +75,7 @@ class featured_video_plus_backend {
|
|
75 |
) );
|
76 |
}
|
77 |
|
78 |
-
if(
|
79 |
wp_enqueue_style( 'fvp_backend', FVP_URL . 'css/backend-min.css', array(), FVP_VERSION ); // production
|
80 |
//wp_enqueue_style( 'fvp_backend', FVP_URL . 'css/backend.css', array(), FVP_VERSION ); // development
|
81 |
}
|
@@ -218,16 +218,15 @@ class featured_video_plus_backend {
|
|
218 |
);
|
219 |
$meta = $this->save($post);
|
220 |
|
|
|
|
|
221 |
if(isset($meta['id'])) {
|
222 |
if( has_post_video($post['id']) )
|
223 |
$video = get_the_post_video( $post['id'], array(256,144) );
|
224 |
|
225 |
-
if( has_post_thumbnail($post['id']) )
|
226 |
-
$img = _wp_post_thumbnail_html( get_post_thumbnail_id($post['id']), $post['id'] );
|
227 |
-
|
228 |
echo json_encode(array( 'typ' => 'updated', 'valid' => $meta['valid'], 'video' => $video, 'img' => $img ));
|
229 |
} else
|
230 |
-
echo json_encode(array( 'typ' => 'removed' ));
|
231 |
die();
|
232 |
}
|
233 |
|
3 |
* Class containing functions required WordPress administration panels. Metabox on post/page edit views and options section under settings->media.
|
4 |
*
|
5 |
* @author ahoereth
|
6 |
+
* @version 2013/03/27
|
7 |
* @see ../featured_video_plus.php
|
8 |
* @see featured_video_plus in general.php
|
9 |
* @since 1.0
|
59 |
}
|
60 |
|
61 |
// just required on post.php
|
62 |
+
if( ($hook_suffix == 'post.php' && isset($_GET['post'])) || $hook_suffix == 'post-new.php' ) {
|
63 |
wp_enqueue_script( 'jquery.autosize', FVP_URL . 'js/jquery.autosize-min.js', array( 'jquery' ), FVP_VERSION );
|
64 |
wp_enqueue_script( 'fvp_backend', FVP_URL . 'js/backend-min.js', array( 'jquery','jquery.autosize' ), FVP_VERSION ); // production
|
65 |
//wp_enqueue_script( 'fvp_backend', FVP_URL . 'js/backend.js', array( 'jquery','jquery.autosize'), FVP_VERSION ); // development
|
75 |
) );
|
76 |
}
|
77 |
|
78 |
+
if( $hook_suffix == 'options-media.php' || (($hook_suffix == 'post.php' && isset($_GET['post'])) || $hook_suffix == 'post-new.php') )
|
79 |
wp_enqueue_style( 'fvp_backend', FVP_URL . 'css/backend-min.css', array(), FVP_VERSION ); // production
|
80 |
//wp_enqueue_style( 'fvp_backend', FVP_URL . 'css/backend.css', array(), FVP_VERSION ); // development
|
81 |
}
|
218 |
);
|
219 |
$meta = $this->save($post);
|
220 |
|
221 |
+
$img = _wp_post_thumbnail_html( get_post_thumbnail_id($post['id']), $post['id'] );
|
222 |
+
|
223 |
if(isset($meta['id'])) {
|
224 |
if( has_post_video($post['id']) )
|
225 |
$video = get_the_post_video( $post['id'], array(256,144) );
|
226 |
|
|
|
|
|
|
|
227 |
echo json_encode(array( 'typ' => 'updated', 'valid' => $meta['valid'], 'video' => $video, 'img' => $img ));
|
228 |
} else
|
229 |
+
echo json_encode(array( 'typ' => 'removed', 'img' => $img ));
|
230 |
die();
|
231 |
}
|
232 |
|
php/frontend.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Class containing functions required on frontend. Enqueue scripts/styles, replace featured images by featured videos.
|
4 |
*
|
5 |
* @author ahoereth
|
6 |
-
* @version 2013/
|
7 |
* @see ../featured_video_plus.php
|
8 |
* @see featured_video_plus in general.php
|
9 |
* @since 1.0
|
3 |
* Class containing functions required on frontend. Enqueue scripts/styles, replace featured images by featured videos.
|
4 |
*
|
5 |
* @author ahoereth
|
6 |
+
* @version 2013/03/22
|
7 |
* @see ../featured_video_plus.php
|
8 |
* @see featured_video_plus in general.php
|
9 |
* @since 1.0
|
php/general.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Class containing all functions needed on front- AND backend. Functions only needed on one of those are found in distinct classes.
|
4 |
*
|
5 |
* @author ahoereth
|
6 |
-
* @version 2013/
|
7 |
* @see ../featured_video_plus.php
|
8 |
* @see featured_video_plus_backend in backend.php
|
9 |
* @see featured_video_plus_frontend in frontend.php
|
@@ -19,7 +19,7 @@ class featured_video_plus {
|
|
19 |
*/
|
20 |
public function enqueue($hook_suffix) {
|
21 |
// just required on post.php
|
22 |
-
if( !is_admin() || ( $hook_suffix == 'post.php' && isset($_GET['post']) ) ) {
|
23 |
$options = get_option( 'fvp-settings' );
|
24 |
|
25 |
// http://videojs.com/
|
3 |
* Class containing all functions needed on front- AND backend. Functions only needed on one of those are found in distinct classes.
|
4 |
*
|
5 |
* @author ahoereth
|
6 |
+
* @version 2013/03/27
|
7 |
* @see ../featured_video_plus.php
|
8 |
* @see featured_video_plus_backend in backend.php
|
9 |
* @see featured_video_plus_frontend in frontend.php
|
19 |
*/
|
20 |
public function enqueue($hook_suffix) {
|
21 |
// just required on post.php
|
22 |
+
if( !is_admin() || ( ($hook_suffix == 'post.php' && isset($_GET['post'])) || $hook_suffix == 'post-new.php') ) {
|
23 |
$options = get_option( 'fvp-settings' );
|
24 |
|
25 |
// http://videojs.com/
|
php/upgrade.php
CHANGED
@@ -105,6 +105,9 @@ function featured_video_plus_upgrade() {
|
|
105 |
}
|
106 |
}
|
107 |
|
|
|
|
|
|
|
108 |
|
109 |
// *************************************************************
|
110 |
$options['version'] = FVP_VERSION;
|
@@ -113,10 +116,11 @@ function featured_video_plus_upgrade() {
|
|
113 |
}
|
114 |
|
115 |
$featured_video_plus_notices = new featured_video_plus_notices();
|
116 |
-
|
|
|
117 |
}
|
118 |
|
119 |
-
$options = $GLOBALS['featured_video_plus_backend']->featured_video_plus_notify($options);
|
120 |
|
121 |
if( $options != $options_org )
|
122 |
update_option( 'fvp-settings', $options );
|
105 |
}
|
106 |
}
|
107 |
|
108 |
+
case '1.5':
|
109 |
+
default:
|
110 |
+
|
111 |
|
112 |
// *************************************************************
|
113 |
$options['version'] = FVP_VERSION;
|
116 |
}
|
117 |
|
118 |
$featured_video_plus_notices = new featured_video_plus_notices();
|
119 |
+
if( isset($notice) )
|
120 |
+
add_action('admin_notices', array( &$featured_video_plus_notices, $notice ) );
|
121 |
}
|
122 |
|
123 |
+
$options = $GLOBALS['featured_video_plus_backend']->featured_video_plus_notify($options, $options['out']);
|
124 |
|
125 |
if( $options != $options_org )
|
126 |
update_option( 'fvp-settings', $options );
|
readme.txt
CHANGED
@@ -10,7 +10,7 @@ License: GPLv2 or later
|
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
Requires at least: 3.1
|
12 |
Tested up to: 3.5.1
|
13 |
-
Stable tag: 1.5
|
14 |
|
15 |
Add Featured Videos to your posts and pages. Works like magic with most themes which use Featured Images. Local Media, YouTube, Vimeo, Dailymotion.
|
16 |
|
@@ -58,8 +58,13 @@ The plugin is ready to go. Now edit your posts and add video links to the "Featu
|
|
58 |
|
59 |
|
60 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
61 |
= 1.5: 2013-03-22 =
|
62 |
-
*
|
63 |
* Added options for a) disabling VideoJS JS/CSS, b) enabling VideoJS CDN and c) YouTube `wmode`
|
64 |
* Plugin no longer breaks WP image editor ([*](http://wordpress.org/support/topic/breaks-image-scaling-shows-nan))
|
65 |
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
Requires at least: 3.1
|
12 |
Tested up to: 3.5.1
|
13 |
+
Stable tag: 1.5.1
|
14 |
|
15 |
Add Featured Videos to your posts and pages. Works like magic with most themes which use Featured Images. Local Media, YouTube, Vimeo, Dailymotion.
|
16 |
|
58 |
|
59 |
|
60 |
== Changelog ==
|
61 |
+
|
62 |
+
= 1.5.1: 2013-03-27 =
|
63 |
+
* Fixed Featured Video box on new-post.php
|
64 |
+
* Enhanced Featured Image ajax behavior
|
65 |
+
|
66 |
= 1.5: 2013-03-22 =
|
67 |
+
* __AJAXified__ the Featured Video box - just like Featured Images
|
68 |
* Added options for a) disabling VideoJS JS/CSS, b) enabling VideoJS CDN and c) YouTube `wmode`
|
69 |
* Plugin no longer breaks WP image editor ([*](http://wordpress.org/support/topic/breaks-image-scaling-shows-nan))
|
70 |
|