Changeset 1172885
- Timestamp:
- 06/02/2015 03:35:23 PM (11 years ago)
- Location:
- expresscurate/trunk
- Files:
-
- 13 edited
-
ExpressCurate.php (modified) (1 diff)
-
ExpressCurate_Actions.php (modified) (6 diffs)
-
ExpressCurate_SocialManager.php (modified) (3 diffs)
-
css/expresscurate.css (modified) (10 diffs)
-
images/socials_box.svg (modified) (1 diff)
-
images/wp_icons.svg (modified) (1 diff)
-
js/Buttons.js (modified) (5 diffs)
-
js/socialPostWidget.js (modified) (4 diffs)
-
readme.txt (modified) (4 diffs)
-
templates/dashboard.php (modified) (1 diff)
-
templates/dashboard/social_publishing_widget.php (modified) (1 diff)
-
templates/settings.php (modified) (2 diffs)
-
templates/social_posts_widget.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
expresscurate/trunk/ExpressCurate.php
r1165793 r1172885 5 5 Plugin URI: http://www.expresscurate.com/products 6 6 Description: ExpressCurate plugin is a content curation tool for WordPress. It enables you to create and publish high quality content within minutes. 7 Version: 2. 0.167 Version: 2.1.0 8 8 Author: ExpressCurate 9 9 Author URI: http://www.expresscurate.com -
expresscurate/trunk/ExpressCurate_Actions.php
r1165793 r1172885 304 304 } 305 305 array_push($buttons, 'addKeyword'); 306 array_push($buttons, 'clearContent'); 306 if (get_option('expresscurate_social_publishing', '') == "on" && strlen(get_option('expresscurate_buffer_access_token')) > 2){ 307 array_push($buttons, 'addSocialPost'); 308 } 307 309 return $buttons; 308 310 } … … 726 728 update_post_meta($post_id, '_expresscurate_advanced_seo_social_desc', esc_attr($expresscurate_advanced_seo_social_desc)); 727 729 730 //social posts 731 // $expresscurate_social_post_messages = isset($_POST['expresscurate_social_post_messages']) ? $_POST['expresscurate_social_post_messages'] : ''; 732 733 // update_post_meta($post_id, '_expresscurate_social_post_messages', esc_attr($expresscurate_social_post_messages)); 734 728 735 //post analysis notification 729 736 $expresscurate_post_analysis_notification = isset($_POST['expresscurate_post_analysis_notification']) ? $_POST['expresscurate_post_analysis_notification'] : ''; … … 963 970 //$postStatus = get_post_status($post_id); 964 971 965 /*if('publish' == $post->post_status) { 966 $social = ExpressCurate_SocialManager::getInstance(); 967 $social->publishPostMessages($post_id); 968 }*/ 972 if (get_option('expresscurate_social_publishing', '') == "on" && strlen(get_option('expresscurate_buffer_access_token')) > 2) { 973 if ('publish' == $post->post_status) { 974 $social = ExpressCurate_SocialManager::getInstance(); 975 $social->publishPostMessages($post_id); 976 } 977 } 969 978 } 970 979 … … 1039 1048 { 1040 1049 $seo = get_option('expresscurate_seo', '') == 'on'; 1041 $social = get_option('expresscurate_social_publishing', '') == 'on';1050 $social = get_option('expresscurate_social_publishing', '') == "on" && strlen(get_option('expresscurate_buffer_access_token')) > 2; 1042 1051 $post_types = array('post', 'page'); 1043 1052 $post_types = array_merge($post_types, get_post_types(array('_builtin' => false, 'public' => true), 'names')); … … 1048 1057 add_meta_box('expresscurate_advanced_seo', ' Advanced SEO', array(&$this, 'advanced_seo'), $post_type, 'normal', 'high'); 1049 1058 } 1050 /*if($social) {1059 if($social) { 1051 1060 add_meta_box('expresscurate_social_publishing', ' Social Posts', array(&$this, 'social_posts'), $post_type, 'normal', 'high'); 1052 } */1061 } 1053 1062 } 1054 1063 } … … 1499 1508 } 1500 1509 1501 /*if (get_option('expresscurate_social_publishing', '') == "on" && strlen(get_option('expresscurate_buffer_access_token')) > 2) {1510 if (get_option('expresscurate_social_publishing', '') == "on" && strlen(get_option('expresscurate_buffer_access_token')) > 2) { 1502 1511 add_meta_box('dashboard_widget_social_publishing', 'Social Publishing Overview', array(&$this, 'social_publishing_widget'), get_current_screen(), 'side', 'high'); 1503 } */1512 } 1504 1513 1505 1514 add_meta_box('dashboard_widget_feed', 'Feed', array(&$this, 'feed_widget'), get_current_screen(), 'side', 'high'); -
expresscurate/trunk/ExpressCurate_SocialManager.php
r1162493 r1172885 10 10 */ 11 11 12 class ExpressCurate_SocialManager { 12 class ExpressCurate_SocialManager 13 { 13 14 14 15 const SOCIAL_PUBLISHED_POST_MESSAGES_META = '_expresscurate_social_published_post_messages'; … … 19 20 const PUBLISHED = 'published'; 20 21 const MESSAGE_ID = 'id'; 22 const PROFILE = 'profile_ids'; 23 const MESSAGE = 'message'; 21 24 22 25 private static $instance; 23 26 24 function __construct() { 27 function __construct() 28 { 25 29 // action shall be added from actions controller 26 30 } 27 31 28 public static function getInstance() { 29 if ( ! ( self::$instance instanceof self ) ) { 32 public static function getInstance() 33 { 34 if (!(self::$instance instanceof self)) { 30 35 self::$instance = new self(); 31 36 } … … 34 39 } 35 40 36 public static function saveActiveProfiles() { 41 public static function saveActiveProfiles() 42 { 37 43 $profiles = $_REQUEST['profiles']; 38 44 update_option('expresscurate_social_publishing_profiles', $profiles); 39 45 } 40 41 public static function getActiveProfiles() { 46 47 public static function getActiveProfiles() 48 { 42 49 return get_option('expresscurate_social_publishing_profiles', null); 43 50 } 44 45 public function getPublishedPostMessages($post_id) { 46 if(empty($post_id)) { 51 52 public function getPublishedPostMessages($post_id) 53 { 54 if (empty($post_id)) { 47 55 return null; 48 56 } 49 57 50 58 $messages = get_post_meta($post_id, self::SOCIAL_PUBLISHED_POST_MESSAGES_META); 51 if (empty($messages)) {59 if (empty($messages)) { 52 60 return array(); 53 61 } 54 55 return $messages[0]; 56 } 57 58 public function getApprovedPostMessages($post_id) { 59 if(empty($post_id)) { 60 return null; 61 } 62 63 $messages = get_post_meta($post_id, self::SOCIAL_APPROVED_POST_MESSAGES_META); 64 if(empty($messages)) { 65 return array(); 66 } 67 62 68 63 return $messages[0]; 69 64 } 70 65 71 public function getPostMessages($post_id) { 72 if(empty($post_id)) { 73 return null; 74 } 75 76 $messages = get_post_meta($post_id, self::SOCIAL_POST_MESSAGES_META); 77 if(empty($messages)) { 78 return array(); 79 } 80 81 return $messages[0]; 82 } 83 84 public function savePostMessages() { 85 $data=$_REQUEST; 86 $post_id = $data['post_id']; 87 $messages=json_decode(stripslashes($data['messages'])); 88 89 if(empty($post_id) || empty($messages)) { 66 public function getApprovedPostMessages($post_id) 67 { 68 if (empty($post_id)) { 90 69 return null; 91 70 } 92 71 93 $approved = $this->getApprovedPostMessages($post_id); 94 foreach($messages as $messageId => $message) { 72 $messages = get_post_meta($post_id, self::SOCIAL_APPROVED_POST_MESSAGES_META); 73 if (empty($messages)) { 74 return array(); 75 } 95 76 77 return $messages[0]; 78 } 96 79 97 $messageIdIndex=self::MESSAGE_ID; 98 $messageStatus=self::APPROVED; 99 if(!isset($message->$messageIdIndex)) { 100 $messageId = uniqid(); 101 $message->$messageIdIndex = $messageId; 80 public function getPostMessages($post_id) 81 { 82 if (empty($post_id)) { 83 return null; 84 } 85 86 $messages = get_post_meta($post_id, self::SOCIAL_POST_MESSAGES_META); 87 if (empty($messages)) { 88 return array(); 89 } 90 91 return $messages[0]; 92 } 93 94 public function savePostMessages() 95 { 96 97 $data = $_REQUEST; 98 $post_id = $data['post_id']; 99 $messages = json_decode(stripslashes($data['messages']), true); 100 101 if (empty($post_id)) { 102 return null; 103 } 104 105 $approved = array(); 106 $allMessages = array(); 107 foreach ($messages as $messageId => $message) { 108 /*if (!isset($message[self::MESSAGE_ID])) { 109 $messageId = uniqid('', true); 110 $message[self::MESSAGE_ID] = $messageId; 111 }*/ 112 113 $messageId=$message[self::MESSAGE_ID]; 114 if (isset($message[self::APPROVED]) && $message[self::APPROVED] === true) { 115 $approved[$messageId] = $message; 116 } else { 117 $allMessages[$messageId] = $message; 102 118 } 103 104 $key = ExpressCurate_BufferClient::POST_FIELD_PROFILE;105 $message->$key = "5540b4e3dc302f2a02a9c09d";106 107 $messages[$messageId] = $message;108 109 110 if(isset($message->$messageStatus)) {111 $approved[$messageId] = $message;112 }113 114 119 115 120 } 116 121 117 122 update_post_meta($post_id, self::SOCIAL_APPROVED_POST_MESSAGES_META, $approved); 118 update_post_meta($post_id, self::SOCIAL_POST_MESSAGES_META, $messages); 123 update_post_meta($post_id, self::SOCIAL_POST_MESSAGES_META, $allMessages); 124 } 119 125 120 $this->publishPostMessages($post_id); 121 } 122 123 public function publishPostMessages($post_id = null) { 126 public function publishPostMessages($post_id = null) 127 { 124 128 $approvedPostMessages = $this->getApprovedPostMessages($post_id); 125 129 $publishedPostMessages = $this->getPublishedPostMessages($post_id); 126 130 127 131 $buffer = new ExpressCurate_BufferClient(); 128 132 129 foreach($approvedPostMessages as $messageId => $message) { 130 // var_dump($message); 131 $result=$buffer->createPost(array( 132 'text' => $message->message, 133 'profile_ids' => $message->profile_ids 134 )); 135 // var_dump($result);die; 133 foreach ($approvedPostMessages as $messageId => $message) { 134 $data = array(); 135 $data[ExpressCurate_BufferClient::POST_FIELD_TEXT] = $message[self::MESSAGE] . ' ' . get_permalink($post_id); 136 $data[ExpressCurate_BufferClient::POST_FIELD_PROFILE] = $message[self::PROFILE]; 137 138 $result = $buffer->createPost($data); 136 139 // mark as published 137 $publishedPostMessages[ ] = $message;140 $publishedPostMessages[$messageId] = $message; 138 141 } 139 140 142 // save the new statuses 141 143 update_post_meta($post_id, self::SOCIAL_PUBLISHED_POST_MESSAGES_META, $publishedPostMessages); 142 update_post_meta($post_id, self::SOCIAL_APPROVED_POST_MESSAGES_META, array());144 update_post_meta($post_id, self::SOCIAL_APPROVED_POST_MESSAGES_META, ''); 143 145 } 144 146 } -
expresscurate/trunk/css/expresscurate.css
r1162493 r1172885 4992 4992 padding-top: 10px; 4993 4993 } 4994 .expresscurate_ tweetBlock{4994 .expresscurate_socialPostBlock{ 4995 4995 border-radius: 2px; 4996 4996 padding: 0 10px; … … 5000 5000 border: solid 1px #E6E6E6; 5001 5001 margin: 10px 0; 5002 position: relative; 5003 z-index: 100; 5004 } 5005 .expresscurate_socialPostBlock .socialWidgetOverlay{ 5006 position: absolute; 5007 width: 100%; 5008 height: 100%; 5009 top:0; 5010 left: 0; 5011 background: #000; 5012 opacity: .3; 5013 } 5014 .expresscurate_socialPostBlock .edit{ 5015 position: relative; 5016 z-index: 102; 5017 background-color: #fff; 5018 padding: 0 12px; 5002 5019 } 5003 5020 .expresscurate_social_post_widget .mainControls{ 5004 5021 margin: 0 0 10px 0; 5005 5022 } 5006 .expresscurate_ tweetBlock .topControls,5007 .expresscurate_ tweetBlock .bottomControls{5023 .expresscurate_socialPostBlock .topControls, 5024 .expresscurate_socialPostBlock .bottomControls{ 5008 5025 margin: 5px 0; 5009 5026 padding: 0; 5010 5027 } 5011 .expresscurate_ tweetBlock .topControls li,5012 .expresscurate_ tweetBlock .bottomControls li{5028 .expresscurate_socialPostBlock .topControls li, 5029 .expresscurate_socialPostBlock .bottomControls li{ 5013 5030 display: inline-block; 5014 5031 height: 25px; 5015 margin: 0 ;5032 margin: 0 2px; 5016 5033 } 5017 .expresscurate_ tweetBlock .topControls li.close:hover{5034 .expresscurate_socialPostBlock .topControls li.close:hover{ 5018 5035 background: url("../images/feed_icons.svg") no-repeat -48px -21px; 5019 5036 background-size: auto 68px; 5020 5037 } 5021 .expresscurate_ tweetBlock .topControls li.close{5038 .expresscurate_socialPostBlock .topControls li.close{ 5022 5039 background: url("../images/feed_icons.svg") no-repeat -48px 6px; 5023 5040 background-size: auto 68px; … … 5026 5043 } 5027 5044 5028 .expresscurate_social_post_content{ 5045 .expresscurate_social_post_content, 5046 .expresscurate_social_post_content_published{ 5029 5047 display: block; 5030 5048 resize: none; … … 5042 5060 border: solid 1px #E6E6E6; 5043 5061 } 5062 .expresscurate_social_post_content_published{ 5063 box-sizing: border-box; 5064 -moz-box-sizing: border-box; 5065 -webkit-box-sizing: border-box; 5066 overflow: auto; 5067 } 5044 5068 .expresscurate_social_widget_buttons{ 5045 5069 display: inline-block; … … 5054 5078 -moz-transition: all .3s ease-out; 5055 5079 -webkit-transition: all .3s ease-out; 5056 margin: 0 ;5080 margin: 0 0 3px 0; 5057 5081 cursor: pointer; 5058 5082 } … … 5061 5085 color: #ffffff; 5062 5086 } 5087 5088 .expresscurate_socialPostBlock .topControls .expresscurate_social_widget_buttons, 5089 .expresscurate_socialPostBlock .bottomControls .expresscurate_social_widget_buttons{ 5090 color: #fff; 5091 background-color: #1cbb9f; 5092 border: none !important; 5093 } 5094 .expresscurate_socialPostBlock .topControls .expresscurate_social_widget_buttons:hover, 5095 .expresscurate_socialPostBlock .bottomControls .expresscurate_social_widget_buttons:hover{ 5096 background-color: #20d0b1; 5097 } 5098 .expresscurate_socialPostBlock .expresscurate_socialPostLength{ 5099 color: #1cbb9f; 5100 line-height: 25px; 5101 } 5102 .expresscurate_socialPostBlock .expresscurate_socialPostLength.error{ 5103 color:#e85e50; 5104 } 5063 5105 /*dashboard social widget*/ 5064 5106 .expresscurate_social_box{ … … 5073 5115 padding-left: 40px; 5074 5116 background: url("../images/socials_box.svg") no-repeat; 5075 background-size: auto 100px; 5117 background-size: auto 200px; 5118 background-position: -30px -30px; 5119 background-color: #bdbdbd; 5076 5120 max-height: 30px; 5077 5121 position: relative; … … 5079 5123 .expresscurate_social_box_Twitter{ 5080 5124 background-color: rgba(0,172,273,1); 5081 background-position: 0 -72px;5125 background-position: 6px -64px; 5082 5126 } 5083 5127 .expresscurate_social_box_Twitter:hover{ … … 5086 5130 .expresscurate_social_box_Facebook{ 5087 5131 background-color: rgba(59,89,152,1); 5088 background-position: 0 -2px;5132 background-position: 5px 0; 5089 5133 } 5090 5134 .expresscurate_social_box_Facebook:hover{ 5091 5135 background-color: rgba(59,89,152,0.8); 5136 } 5137 .expresscurate_social_box_LinkedIn{ 5138 background-color: rgba(30,135,189,1); 5139 background-position: 6px -173px; 5140 } 5141 .expresscurate_social_box_LinkedIn:hover{ 5142 background-color: rgba(30,135,189,0.8); 5143 } 5144 .expresscurate_social_box_Google{ 5145 background-color: rgba(212,65,50,1); 5146 background-position: 7px -120px; 5147 } 5148 .expresscurate_social_box_Google:hover{ 5149 background-color: rgba(212,65,50,0.8); 5092 5150 } 5093 5151 .expresscurate_social_box .dailySuggestions{ … … 5230 5288 background-position: center -317px !important; 5231 5289 } 5290 .mce-expresscurateSocialPost{ 5291 background-position: center -393px !important; 5292 } 5293 .mce-expresscurateSocialPost.mce-disabled{ 5294 background-position: center -433px !important; 5295 } 5232 5296 .expresscurateSocial{ 5233 5297 background-position: center -78px !important; -
expresscurate/trunk/images/socials_box.svg
r1162493 r1172885 3 3 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 4 <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 width="150.5px" height="450px" viewBox="0 0 150.5 450" enable-background="new 0 0 150.5 450" xml:space="preserve"> 6 <path id="facebook-icon" fill="#FFFFFF" d="M63.107,58.669h-9.882v16.128h9.882v47.38h18.999V74.596h13.256l1.411-15.927H82.106 7 c0,0,0-5.947,0-9.073c0-3.754,0.757-5.241,4.385-5.241c2.924,0,10.282,0,10.282,0V27.822c0,0-10.839,0-13.155,0 8 c-14.138,0-20.511,6.224-20.511,18.144C63.107,56.35,63.107,58.669,63.107,58.669z"/> 9 <path id="twitter-icon" fill="#FFFFFF" d="M121.053,363.62c-3.416,1.69-7.114,2.896-11.022,3.534 10 c3.905-2.575,6.821-6.514,8.078-11.108c-3.658,2.386-7.744,4.178-12.132,5.24c-3.7-3.623-8.848-5.765-14.432-5.522 11 c-12.533,0.534-21.246,12.628-17.893,24.653c-16.172-0.121-30.813-7.237-40.892-18.574c-4.711,8.941-1.772,20.258,7.119,25.662 12 c-3.184,0.039-6.217-0.705-8.896-2.049c0.176,9.004,6.981,17.143,16.399,18.614c-2.701,0.864-5.688,1.163-8.756,0.709 13 c2.803,7.608,10.213,12.915,18.715,12.706c-7.887,6.746-18.045,10.045-28.397,9.273c8.828,5.14,19.172,7.918,30.137,7.447 14 c36.047-1.545,55.109-32.863,52.713-60.123C115.471,371.185,118.613,367.622,121.053,363.62z"/> 5 width="94.414px" height="946.427px" viewBox="0 0 94.414 946.427" enable-background="new 0 0 94.414 946.427" 6 xml:space="preserve"> 7 <g> 8 <g> 9 <path id="facebook-icon" fill="#FFFFFF" d="M35.314,30.847h-9.883v16.128h9.883v47.38h18.998V46.774h13.256l1.412-15.927H54.312 10 c0,0,0-5.947,0-9.073c0-3.754,0.758-5.241,4.387-5.241c2.924,0,10.281,0,10.281,0V0c0,0-10.84,0-13.154,0 11 C41.688,0,35.314,6.224,35.314,18.144C35.314,28.528,35.314,30.847,35.314,30.847z"/> 12 <path id="twitter-icon" fill="#FFFFFF" d="M93.261,335.798c-3.416,1.688-7.113,2.896-11.021,3.534 13 c3.904-2.575,6.82-6.516,8.078-11.108c-3.658,2.386-7.744,4.178-12.133,5.24c-3.699-3.623-8.848-5.767-14.432-5.522 14 c-12.533,0.534-21.247,12.628-17.894,24.653c-16.172-0.121-30.813-7.237-40.891-18.574c-4.712,8.941-1.772,20.258,7.118,25.662 15 c-3.184,0.039-6.217-0.705-8.896-2.049c0.176,9.004,6.98,17.143,16.398,18.614c-2.7,0.862-5.688,1.163-8.756,0.709 16 c2.804,7.606,10.213,12.915,18.715,12.706c-7.887,6.746-18.045,10.045-28.396,9.271c8.828,5.142,19.172,7.918,30.137,7.447 17 c36.046-1.545,55.107-32.863,52.712-60.123C87.679,343.362,90.822,339.8,93.261,335.798z"/> 18 <g id="google-plus-icon"> 19 <path fill="#FFFFFF" d="M94.412,620.904H81.894v12.52H75.64v-12.52h-12.52v-6.259h12.52v-12.519h6.256v12.519h12.518v6.259 20 H94.412z M59.027,672.675c0,9.382-8.568,20.805-30.121,20.805C13.144,693.479,0,686.682,0,675.245 21 c0-8.823,5.586-20.282,31.698-20.282c-3.88-3.161-4.83-7.581-2.462-12.365c-15.288,0-23.116-8.987-23.116-20.4 22 c0-11.166,8.306-21.318,25.241-21.318c4.277,0,27.132,0,27.132,0l-6.063,6.363h-7.121c5.023,2.879,7.697,8.809,7.697,15.343 23 c0,5.998-3.301,10.855-8.019,14.503c-8.365,6.465-6.221,10.077,2.542,16.468C56.167,660.026,59.027,665.024,59.027,672.675z 24 M42.105,622.99c-1.264-9.604-7.519-17.48-14.83-17.702c-7.311-0.216-12.214,7.133-10.953,16.738 25 c1.263,9.603,8.21,16.31,15.523,16.53C39.158,638.775,43.366,632.595,42.105,622.99z M49.642,673.639 26 c0-7.901-7.207-15.428-19.294-15.428c-10.894-0.12-20.124,6.886-20.124,15.004c0,8.285,7.865,15.181,18.761,15.181 27 C42.912,688.396,49.642,681.923,49.642,673.639z"/> 28 </g> 29 </g> 30 <path id="linkedin-icon" fill="#FFFFFF" d="M27.122,877.541c0,5.337-4.29,9.662-9.585,9.662s-9.586-4.325-9.586-9.662 31 c0-5.336,4.291-9.663,9.586-9.663S27.122,872.205,27.122,877.541z M25.719,894.062H9.512v52.365h16.207V894.062z M51.628,894.062 32 H36.082v52.365h15.546c0,0,0-19.424,0-27.488c0-7.364,3.391-11.747,9.879-11.747c5.959,0,8.824,4.208,8.824,11.747 33 s0,27.488,0,27.488h16.131c0,0,0-19.131,0-33.156c0-14.028-7.949-20.807-19.055-20.807c-11.104,0-15.779,8.648-15.779,8.648 34 V894.062L51.628,894.062z"/> 35 </g> 15 36 </svg> -
expresscurate/trunk/images/wp_icons.svg
r1129694 r1172885 3 3 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 4 <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 width="60.07 3px" height="1124.203px" viewBox="0 0 60.073 1124.203" enable-background="new 0 0 60.073 1124.203"5 width="60.074px" height="1354.854px" viewBox="-0.5 0 60.074 1354.854" enable-background="new -0.5 0 60.074 1354.854" 6 6 xml:space="preserve"> 7 7 <g> 8 8 <g> 9 <rect x="36.076" y="20.639" fill="#2BA886" width="6.205" height="18.295"/> 10 <rect x="27.312" y="26.078" fill="#2BA886" width="6.204" height="12.856"/> 11 <rect x="18.547" y="31.517" fill="#2BA886" width="6.205" height="7.417"/> 9 <g> 10 <rect x="35.576" y="20.639" fill="#2BA886" width="6.205" height="18.295"/> 11 <rect x="26.812" y="26.078" fill="#2BA886" width="6.204" height="12.856"/> 12 <rect x="18.046" y="31.517" fill="#2BA886" width="6.205" height="7.417"/> 13 </g> 14 <path fill="#2BA886" d="M-0.5,488.746v51h60v-51H-0.5L-0.5,488.746z M19.5,498.746h20v7h-20V498.746z M39.5,529.746h-20v-7h20 15 V529.746z M49.5,517.746h-40v-7h40V517.746z"/> 16 <path fill="#2BA886" d="M-0.5,368.746v51h60v-51H-0.5z M9.5,378.746h27v7h-27V378.746z M36.5,409.746h-27v-7h27V409.746z 17 M46.5,397.746h-37v-7h37V397.746z"/> 18 <path fill="#2BA886" d="M-0.5,247.746v51h60v-51H-0.5z M9.5,263.746h26v7h-26V263.746z M45.5,282.746h-36v-7h36V282.746z"/> 19 <polygon fill="#2BA886" points="27.68,249.746 38.675,239.746 49.673,249.746 "/> 20 <path fill="#2BA886" d="M-0.5,608.746v51h60v-51H-0.5z M49.5,649.746h-27v-7h27V649.746z M49.5,637.746h-37v-7h37V637.746z 21 M49.5,625.746h-27v-7h27V625.746z"/> 22 <g> 23 <path id="link-icon_4_" fill="#2BA886" d="M41.742,875.447c-0.979,0.988-2.07,1.81-3.229,2.456 24 c-6.465,3.592-14.779,1.727-18.97-4.57l5.021-5.059c1.457,3.288,5.049,5.148,8.617,4.34c1.344-0.308,2.618-0.983,3.657-2.031 25 l9.621-9.695c2.92-2.94,2.904-7.713-0.041-10.635c-2.94-2.92-7.713-2.902-10.635,0.041l-2.967,2.988 26 c-2.711-1.063-5.617-1.48-8.482-1.256l6.547-6.598c5.611-5.654,14.748-5.688,20.402-0.075c5.658,5.61,5.693,14.744,0.08,20.401 27 L41.742,875.447z M26.466,890.849l6.548-6.598c-2.867,0.225-5.775-0.195-8.486-1.259l-2.967,2.989 28 c-2.922,2.942-7.689,2.963-10.638,0.04c-2.938-2.92-2.961-7.69-0.036-10.637l9.62-9.693c2.931-2.954,7.707-2.946,10.636-0.04 29 c0.683,0.677,1.271,1.52,1.64,2.351l5.021-5.058c-0.533-0.802-1.085-1.49-1.798-2.195c-1.83-1.818-4.153-3.167-6.823-3.797 30 c-3.466-0.82-7.168-0.344-10.345,1.424c-1.162,0.646-2.25,1.461-3.231,2.451l-9.621,9.695 31 c-5.615,5.651-5.578,14.791,0.076,20.399C11.716,896.539,20.855,896.503,26.466,890.849z"/> 32 <path id="arrow-16-icon_4_" fill="#28A885" d="M47.848,884.938v-3.728l8.764,8.75l-8.764,8.751v-3.729H28.673l10.031-10.046 33 L47.848,884.938L47.848,884.938z"/> 34 </g> 35 <g> 36 <path id="link-icon_3_" fill="#C2C2C2" d="M41.742,995.447c-0.979,0.988-2.07,1.81-3.229,2.456 37 c-6.465,3.592-14.779,1.727-18.97-4.57l5.021-5.059c1.457,3.288,5.049,5.148,8.617,4.34c1.344-0.308,2.618-0.983,3.657-2.031 38 l9.621-9.695c2.92-2.94,2.904-7.713-0.041-10.635c-2.94-2.92-7.713-2.902-10.635,0.041l-2.967,2.988 39 c-2.711-1.063-5.617-1.48-8.482-1.256l6.547-6.598c5.611-5.654,14.748-5.688,20.402-0.075c5.658,5.61,5.693,14.744,0.08,20.401 40 L41.742,995.447z M26.466,1010.849l6.548-6.598c-2.867,0.225-5.775-0.195-8.486-1.259l-2.967,2.989 41 c-2.922,2.942-7.689,2.963-10.638,0.04c-2.938-2.92-2.961-7.69-0.036-10.637l9.62-9.693c2.931-2.954,7.707-2.946,10.636-0.04 42 c0.683,0.677,1.271,1.52,1.64,2.351l5.021-5.058c-0.533-0.802-1.085-1.49-1.798-2.195c-1.83-1.818-4.153-3.167-6.823-3.797 43 c-3.466-0.82-7.168-0.344-10.345,1.424c-1.162,0.646-2.25,1.461-3.231,2.451l-9.621,9.695 44 c-5.615,5.651-5.578,14.791,0.076,20.399C11.716,1016.539,20.855,1016.503,26.466,1010.849z"/> 45 <path id="arrow-16-icon_3_" fill="#C2C2C2" d="M47.848,1004.938v-3.728l8.764,8.75l-8.764,8.751v-3.729H28.673l10.031-10.046 46 L47.848,1004.938L47.848,1004.938z"/> 47 </g> 48 <g> 49 <path fill="#28A885" d="M22.652,768.877l-4.268-4.181l16.009-15.962c-2.162-1.496-3.979-3.314-4.847-4.888L4.364,769.043 50 l4.876,4.882l4.252-4.249l4.271,4.269L22.652,768.877z"/> 51 <path fill="#28A885" d="M48.197,730.098c-6.043-6.043-15.16-6.727-20.362-1.522c-5.201,5.202-4.521,14.317,1.523,20.362 52 c6.044,6.044,15.159,6.726,20.36,1.521C54.921,745.257,54.242,736.141,48.197,730.098z M34.031,744.264 53 c-3.045-3.046-3.389-7.639-0.767-10.26s7.214-2.278,10.259,0.768s3.389,7.639,0.768,10.26 54 C41.669,747.65,37.076,747.308,34.031,744.264z"/> 55 </g> 56 <path fill="#2BA886" d="M33.5,0.03v12.673c7.996,1.806,13.869,8.895,13.869,17.388c0,8.493-5.873,15.583-13.869,17.388v12.063 57 c14.994-1.936,26.074-14.498,26.074-29.757C59.574,14.528,48.494,1.966,33.5,0.03z"/> 58 <path fill="#2BA886" d="M19.892,15.445c1.927-1.373,4.002-2.355,6.607-2.843V0c-5.95,0.735-11.44,3.233-15.811,6.938 59 L19.892,15.445z"/> 60 <path fill="#2BA886" d="M13.553,36.771l-12.02,2.171C5.053,49.918,14.716,58.131,26.5,59.569V47.541 61 C20.686,46.304,15.766,42.203,13.553,36.771z"/> 62 <path fill="#2BA886" d="M5.83,11.978c-3.696,4.979-5.898,11.126-5.898,17.808c0,0.78,0.039,1.551,0.104,2.313l12.11-2.188 63 c0.035-3.489,1.088-6.723,2.854-9.456L5.83,11.978z"/> 64 <g> 65 <ellipse fill="#28A885" cx="29.676" cy="136.379" rx="5.495" ry="4.731"/> 66 <path fill="#28A885" d="M29.673,119.92c-13.545,0-24.534,10.99-24.534,24.539c0,13.761,11.934,22.838,24.534,35.461 67 c12.611-12.623,24.543-21.699,24.543-35.461C54.216,130.91,43.234,119.92,29.673,119.92z M32.076,145.532l-0.029,13.558 68 l4.211-0.04l0.082,4.963l-4.254-0.002l-0.006,4.236l-4.861-0.007l0.012-22.72c-4.846-0.959-8.461-4.689-8.458-9.149 69 c0.004-5.185,4.891-9.385,10.914-9.379c6.022,0.004,10.901,4.211,10.897,9.396C40.582,140.859,36.941,144.592,32.076,145.532z"/> 70 </g> 71 <g> 72 <path fill="#28A885" d="M54.384,1109.918c-0.002-0.064,0-0.127-0.006-0.191c-0.021-1.112-0.51-2.206-1.459-2.94l-13.36-10.354 73 c-1.664-1.288-4.058-0.984-5.347,0.678l-0.34,0.438c-1.289,1.665-0.985,4.059,0.68,5.348l9.064,7.024l-9.064,7.024 74 c-1.665,1.289-1.969,3.683-0.68,5.348l0.34,0.438c1.289,1.662,3.683,1.966,5.347,0.678l13.36-10.354 75 c0.949-0.735,1.438-1.828,1.459-2.94C54.384,1110.045,54.382,1109.982,54.384,1109.918z"/> 76 <path fill="#28A885" d="M4.296,1109.918c0.002-0.064,0.001-0.127,0.007-0.191c0.021-1.112,0.511-2.206,1.459-2.94l13.36-10.354 77 c1.664-1.288,4.058-0.984,5.346,0.678l0.341,0.438c1.289,1.665,0.985,4.059-0.68,5.348l-9.063,7.024l9.063,7.024 78 c1.665,1.289,1.969,3.683,0.68,5.348l-0.341,0.438c-1.288,1.662-3.682,1.966-5.346,0.678l-13.36-10.354 79 c-0.948-0.735-1.438-1.828-1.459-2.94C4.297,1110.045,4.298,1109.982,4.296,1109.918z"/> 80 </g> 12 81 </g> 13 <path fill="#2BA886" d="M0,488.746v51h60v-51H0z M20,498.746h20v7H20V498.746z M40,529.746H20v-7h20V529.746z M50,517.746H10v-7h40 14 V517.746z"/> 15 <path fill="#2BA886" d="M0,368.746v51h60v-51H0z M10,378.746h27v7H10V378.746z M37,409.746H10v-7h27V409.746z M47,397.746H10v-7h37 16 V397.746z"/> 17 <path fill="#2BA886" d="M0,247.746v51h60v-51H0z M10,263.746h26v7H10V263.746z M46,282.746H10v-7h36V282.746z"/> 18 <polygon fill="#2BA886" points="28.18,249.746 39.176,239.746 50.173,249.746 "/> 19 <path fill="#2BA886" d="M0,608.746v51h60v-51H0z M50,649.746H23v-7h27V649.746z M50,637.746H13v-7h37V637.746z M50,625.746H23v-7 20 h27V625.746z"/> 21 <g> 22 <path id="link-icon_4_" fill="#2BA886" d="M42.242,875.447c-0.98,0.989-2.07,1.81-3.229,2.456 23 c-6.465,3.592-14.779,1.727-18.969-4.57l5.021-5.059c1.457,3.289,5.049,5.149,8.617,4.34c1.344-0.307,2.619-0.983,3.658-2.031 24 l9.621-9.695c2.92-2.941,2.904-7.713-0.041-10.635c-2.941-2.92-7.713-2.902-10.635,0.041l-2.967,2.988 25 c-2.711-1.063-5.617-1.48-8.482-1.256l6.547-6.597c5.611-5.655,14.748-5.688,20.402-0.075c5.658,5.61,5.693,14.744,0.08,20.401 26 L42.242,875.447z M26.967,890.849l6.547-6.598c-2.867,0.225-5.775-0.195-8.486-1.259l-2.967,2.989 27 c-2.922,2.943-7.689,2.963-10.637,0.04c-2.939-2.919-2.961-7.69-0.037-10.636l9.621-9.694c2.93-2.954,7.707-2.946,10.635-0.04 28 c0.682,0.677,1.271,1.52,1.639,2.351l5.021-5.058c-0.533-0.802-1.084-1.49-1.797-2.195c-1.83-1.818-4.154-3.167-6.824-3.797 29 c-3.465-0.82-7.168-0.344-10.344,1.424c-1.162,0.646-2.25,1.461-3.232,2.451l-9.621,9.695c-5.615,5.652-5.578,14.791,0.076,20.4 30 C12.217,896.539,21.355,896.503,26.967,890.849z"/> 31 <path id="arrow-16-icon_4_" fill="#28A885" d="M48.348,884.938v-3.728l8.764,8.75l-8.764,8.751v-3.729H29.174l10.031-10.045 32 H48.348z"/> 33 </g> 34 <g> 35 <path id="link-icon_3_" fill="#C2C2C2" d="M42.242,995.447c-0.98,0.989-2.07,1.81-3.229,2.456 36 c-6.465,3.592-14.779,1.727-18.969-4.57l5.021-5.059c1.457,3.289,5.049,5.149,8.617,4.34c1.344-0.307,2.619-0.983,3.658-2.031 37 l9.621-9.695c2.92-2.941,2.904-7.713-0.041-10.635c-2.941-2.92-7.713-2.902-10.635,0.041l-2.967,2.988 38 c-2.711-1.063-5.617-1.48-8.482-1.256l6.547-6.597c5.611-5.655,14.748-5.688,20.402-0.075c5.658,5.61,5.693,14.744,0.08,20.401 39 L42.242,995.447z M26.967,1010.849l6.547-6.598c-2.867,0.225-5.775-0.195-8.486-1.259l-2.967,2.989 40 c-2.922,2.943-7.689,2.963-10.637,0.04c-2.939-2.919-2.961-7.69-0.037-10.636l9.621-9.694c2.93-2.954,7.707-2.946,10.635-0.04 41 c0.682,0.677,1.271,1.52,1.639,2.351l5.021-5.058c-0.533-0.802-1.084-1.49-1.797-2.195c-1.83-1.818-4.154-3.167-6.824-3.797 42 c-3.465-0.82-7.168-0.344-10.344,1.424c-1.162,0.646-2.25,1.461-3.232,2.451l-9.621,9.695c-5.615,5.652-5.578,14.791,0.076,20.4 43 C12.217,1016.539,21.355,1016.503,26.967,1010.849z"/> 44 <path id="arrow-16-icon_3_" fill="#C2C2C2" d="M48.348,1004.938v-3.728l8.764,8.75l-8.764,8.751v-3.729H29.174l10.031-10.045 45 H48.348z"/> 46 </g> 47 <g> 48 <path fill="#28A885" d="M23.152,768.877l-4.267-4.181l16.008-15.962c-2.162-1.496-3.979-3.314-4.846-4.887L4.864,769.043 49 l4.876,4.882l4.252-4.249l4.27,4.268L23.152,768.877z"/> 50 <path fill="#28A885" d="M48.697,730.098c-6.043-6.043-15.16-6.727-20.362-1.523c-5.201,5.202-4.521,14.318,1.523,20.363 51 c6.044,6.043,15.159,6.725,20.361,1.521C55.422,745.257,54.741,736.141,48.697,730.098z M34.531,744.264 52 c-3.045-3.046-3.389-7.639-0.767-10.26s7.214-2.278,10.259,0.767c3.045,3.046,3.389,7.639,0.767,10.26 53 C42.17,747.65,37.576,747.308,34.531,744.264z"/> 54 </g> 55 <path fill="#2BA886" d="M34,0.03v12.673c7.996,1.806,13.868,8.895,13.868,17.388S41.996,45.674,34,47.479v12.063 56 c14.994-1.936,26.073-14.498,26.073-29.757C60.073,14.528,48.994,1.966,34,0.03z"/> 57 <path fill="#2BA886" d="M20.392,15.445c1.927-1.373,4.002-2.355,6.608-2.843V0c-5.95,0.735-11.441,3.233-15.811,6.938 58 L20.392,15.445z"/> 59 <path fill="#2BA886" d="M14.053,36.771L2.034,38.942C5.553,49.918,15.217,58.131,27,59.569V47.541 60 C21.186,46.304,16.266,42.203,14.053,36.771z"/> 61 <path fill="#2BA886" d="M6.33,11.978c-3.696,4.979-5.899,11.126-5.899,17.808c0,0.78,0.039,1.551,0.105,2.313l12.11-2.188 62 c0.035-3.489,1.088-6.723,2.854-9.456L6.33,11.978z"/> 63 <g> 64 <ellipse fill="#28A885" cx="30.177" cy="136.379" rx="5.494" ry="4.731"/> 65 <path fill="#28A885" d="M30.174,119.92c-13.545,0-24.535,10.99-24.535,24.539c0,13.761,11.934,22.838,24.535,35.461 66 c12.611-12.623,24.543-21.699,24.543-35.461C54.717,130.91,43.734,119.92,30.174,119.92z M32.576,145.532l-0.029,13.558l4.21-0.04 67 l0.083,4.963l-4.255-0.002l-0.005,4.236l-4.861-0.007l0.011-22.72c-4.845-0.959-8.461-4.689-8.458-9.149 68 c0.004-5.185,4.891-9.385,10.914-9.379c6.023,0.004,10.902,4.211,10.898,9.396C41.081,140.859,37.441,144.592,32.576,145.532z"/> 69 </g> 70 <g> 71 <path fill="#28A885" d="M54.885,1109.918c-0.002-0.064-0.001-0.127-0.006-0.191c-0.021-1.113-0.511-2.206-1.459-2.941 72 l-13.361-10.354c-1.664-1.288-4.057-0.985-5.346,0.678l-0.34,0.437c-1.289,1.665-0.986,4.059,0.679,5.348l9.064,7.024 73 l-9.064,7.024c-1.665,1.289-1.968,3.683-0.679,5.348l0.34,0.437c1.289,1.663,3.682,1.966,5.346,0.678l13.361-10.354 74 c0.948-0.736,1.438-1.828,1.459-2.941C54.884,1110.045,54.883,1109.982,54.885,1109.918z"/> 75 <path fill="#28A885" d="M4.797,1109.918c0.002-0.064,0.001-0.127,0.006-0.191c0.021-1.113,0.511-2.206,1.459-2.941l13.361-10.354 76 c1.664-1.288,4.057-0.985,5.346,0.678l0.34,0.437c1.289,1.665,0.986,4.059-0.679,5.348l-9.064,7.024l9.064,7.024 77 c1.665,1.289,1.968,3.683,0.679,5.348l-0.34,0.437c-1.289,1.663-3.682,1.966-5.346,0.678l-13.361-10.354 78 c-0.948-0.736-1.438-1.828-1.459-2.941C4.798,1110.045,4.799,1109.982,4.797,1109.918z"/> 79 </g> 82 <path fill="#28A885" d="M2.201,1234.854c6.108-26.601,36.529-32.792,36.529-32.792v-8.189l18.143,18.112l-18.143,18.113v-8.189 83 C38.73,1221.908,15.206,1220.93,2.201,1234.854z"/> 84 <path fill="#C2C2C2" d="M2.201,1354.854c6.108-26.601,36.529-32.792,36.529-32.792v-8.189l18.143,18.112l-18.143,18.113v-8.189 85 C38.73,1341.908,15.206,1340.93,2.201,1354.854z"/> 80 86 </g> 81 87 </svg> -
expresscurate/trunk/js/Buttons.js
r1140784 r1172885 166 166 var arrOutboundLinks = false, 167 167 arrInboundLink = false; 168 $(content).find('a').each( 169 function () { 170 var link = getRootUrl($(this).attr("href")), 171 patIfRelative = /^https?:\/\//i; 168 $(content).find('a').each(function (index, value) { 169 170 var link = $(value).attr("href"); 171 if (link) { 172 link = getRootUrl(link); 173 var patIfRelative = /^https?:\/\//i; 172 174 if (!patIfRelative.test(link) || link == getRootUrl(window.location)) { 173 175 arrInboundLink = true; … … 175 177 arrOutboundLinks = true; 176 178 } 177 }); 179 } 180 181 }); 178 182 messageHtml += arrInboundLink ? '' : '<p class="lengthSuggestion blue">This page contains no inbound links, add some where appropriate.</p>'; 179 183 messageHtml += arrOutboundLinks ? '' : '<p class="lengthSuggestion blue">This page contains no outbound links, add some where appropriate.</p>'; … … 467 471 classes: "btn expresscurateCostom expresscurateAddKeyword" 468 472 }); 469 /*console.log(tinymce.EditorManager.get('expresscurate_dialog_content_editor'));470 tinymce.EditorManager.get('expresscurate_dialog_content_editor').addButton('clearContent', {471 title: 'Clear editor content',472 c md: 'clearContent',473 classes: "btn expresscurateCostom expresscurateAnnotate"474 });*/ 473 ed.addButton('addSocialPost', { 474 title: 'Add Social Post', 475 cmd: 'addSocialPost', 476 classes: "btn expresscurateCostom expresscurateSocialPost" 477 }); 478 475 479 ed.onKeyDown.add(function (ed, e) { 476 480 if (e.altKey && e.keyCode === 75) { … … 570 574 } 571 575 } 576 572 577 ed.controlManager.setDisabled('noFollow', ed.selection.getNode().nodeName !== 'A'); 578 579 ed.controlManager.setDisabled('addSocialPost', tinymce.activeEditor.selection.getContent().length < 1); 573 580 574 581 var cssClass = $node.attr('class'), … … 624 631 ed.addCommand('addKeyword', function () { 625 632 addKeyword(); 633 }); 634 ed.addCommand('addSocialPost', function () { 635 if (tinymce.activeEditor.selection.getContent().length > 1) { 636 var text = tinymce.activeEditor.selection.getContent(), 637 myRegExp = new RegExp('(<([^>]+)>)', 'ig'); 638 639 text = text.replace(myRegExp, ' ').trim(); 640 var data = { 641 message: text 642 }; 643 ExpressCurateSocialPostWidget.createSocialPost(data); 644 $('html, body').animate({ 645 scrollTop: $("#expresscurate_social_publishing").offset().top - 40 646 }, 700); 647 } 626 648 }); 627 649 } -
expresscurate/trunk/js/socialPostWidget.js
r1162493 r1172885 1 1 var ExpressCurateSocialPostWidget = (function ($) { 2 var widget; 3 4 function parseContent(block) { 2 var widget, 3 maxLength = 110, 4 posts = []; 5 6 function uniqueId() { 7 return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { 8 var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); 9 return v.toString(16); 10 }); 11 } 12 13 function parseContent() { 5 14 var $contentWrap = $('#content'), 6 15 content = (($contentWrap.css("display") === "block") ? $contentWrap.val() : tinyMCE.get("content").getContent()), 7 myRegExp = new RegExp('(<([^>]+)>)', 'ig'), 8 //$input = block.find('.expresscurate_social_post_content'), 9 $cloneContent = $(content).clone().wrapAll('<span></span>'); 10 //console.log($cloneContent/*.find('h'+i).html()*/); 11 12 content = content.replace(myRegExp, "\n\r"); 13 content = content.replace(/ {2,}/g, ' '); 14 content = $("<div/>").html(content).text(); 16 myRegExp = new RegExp('(<([^>]+)>)', 'ig'); 17 18 content = content.split('<p>'); 19 for (var i = 0; i < content.length; i++) { 20 content[i] = content[i].replace(myRegExp, ' ').trim(); 21 } 22 content = content.filter(function (el) { 23 return el.length !== 0; 24 }); 25 15 26 return content; 16 27 } … … 19 30 var $contentWrap = $('#content'), 20 31 content = (($contentWrap.css("display") === "block") ? $contentWrap.val() : tinyMCE.get("content").getContent()), 21 text = $(content).find(header).text(); 22 if (text.length > 1) { 23 return ExpressCurateUtils.getTemplate('socialPostWidget', text); 32 data = { 33 message: $(content).find(header).text() 34 }; 35 if (data.message.length > 1) { 36 createSocialPost(data); 24 37 } else { 25 38 return false; … … 27 40 } 28 41 42 function createSocialPost(data) { 43 44 var blockId = (data && data.id) ? data.id : uniqueId(), 45 message = data ? data.message : '', 46 messageCounter = maxLength - message.length, 47 post = { 48 id: blockId, 49 message: message, 50 approved: false, 51 postLength: messageCounter, 52 errorColor: (messageCounter < 0) ? 'error' : '' 53 }; 54 posts.push(post); 55 updatePosts(posts); 56 $('.mainControls').after(ExpressCurateUtils.getTemplate('socialPostWidget', post)); 57 58 } 59 60 function postLengthValidation($block) { 61 var $textarea = $block.find('textarea'), 62 $countWrap = $block.find('.expresscurate_socialPostLength'), 63 textLength = $textarea.val().length, 64 count = maxLength - textLength; 65 66 if (count < 0) { 67 $countWrap.addClass('error'); 68 } else { 69 $countWrap.removeClass('error'); 70 } 71 return count; 72 } 73 74 function updatePosts(posts) { 75 $.ajax({ 76 type: 'POST', 77 url: 'admin-ajax.php?action=expresscurate_save_post_messages', 78 data: { 79 post_id: $('#expresscurate_postId').val(), 80 messages: JSON.stringify(posts) 81 } 82 }); 83 } 84 29 85 function setupSocial() { 86 var $metaTag = $('#expresscurate_social_post_messages'); 87 88 if ($metaTag.length) { 89 var savedPosts = $metaTag.val(); 90 var data = (savedPosts.length > 1) ? $.parseJSON(savedPosts) : []; 91 $.each(data, function (index, value) { 92 posts.push(value); 93 }); 94 } 30 95 widget = $('.expresscurate_social_post_widget'); 31 widget.on('click', '.expresscurate_social_get_content', function (e) { 32 e.preventDefault(); 33 var $this = $(this), 34 data = parseContent($this.parents('.expresscurate_tweetBlock')), 35 tweetHTML = ExpressCurateUtils.getTemplate('socialPostWidget', data); 36 $this.parent('ul').after(tweetHTML); 37 }); 38 $('#expresscurate_addTweet').on('click', function (e) { 39 e.preventDefault(); 40 var tweetHTML = ExpressCurateUtils.getTemplate('socialPostWidget', ''); 41 $(this).parent('ul').after(tweetHTML); 42 }); 43 $('.expresscurate_headerTweet').on('click', function (e) { 44 e.preventDefault(); 45 var tweetHTML = getHeader($(this).data('header')); 46 if (tweetHTML) { 47 $(this).parent('ul').after(tweetHTML); 48 } 49 }); 50 widget.on('click', '.expresscurate_tweetBlock .approve', function () { 51 var $block = $(this).parent('.expresscurate_tweetBlock'), 52 messages=[], 53 message = { 54 id: '5540b4e3dc302f2a02a9c09d', 55 message: 'last test', 56 approved: true 57 }; 58 messages.push(message); 59 /* console.log($('#expresscurate_postId').val()); 60 console.log(JSON.stringify(messages));*/ 61 $.ajax({ 62 type: 'POST', 63 url: 'admin-ajax.php?action=expresscurate_save_post_messages', 64 data: { 65 post_id: $('#expresscurate_postId').val(), 66 messages: JSON.stringify(messages) 67 } 68 }); 69 70 71 /// 72 /* var items = [], 73 item = {}; 74 $.each(els, function (index, el) { 75 item['link'] = $(el).find('.url').attr('href'); 76 items.push(item); 77 item = {}; 78 }); 79 80 $.ajax({ 81 type: 'POST', 82 url: 'admin-ajax.php?action=expresscurate_bookmarks_delete', 83 data: {items: JSON.stringify(items)} 84 });*/ 85 }); 96 97 /*delete*/ 98 widget.on('click', '.expresscurate_socialPostBlock .close', function () { 99 var $block = $(this).parents('.expresscurate_socialPostBlock'), 100 id = $block.attr('id'); 101 $block.remove(); 102 posts = posts.filter(function (el) { 103 return el.id !== id; 104 }); 105 updatePosts(posts); 106 }); 107 /*post edit*/ 108 widget.on('blur', '.expresscurate_socialPostBlock textarea', function () { 109 var $this = $(this), 110 $block = $this.parents('.expresscurate_socialPostBlock'), 111 blockId = $block.attr('id'), 112 text = $this.val(); 113 $.each(posts, function (index, value) { 114 if (value.id == blockId) { 115 value.message = text; 116 updatePosts(posts); 117 } 118 }); 119 }); 120 widget.on('change', '.expresscurate_socialPostBlock select', function () { 121 var $this = $(this), 122 $block = $this.parents('.expresscurate_socialPostBlock'), 123 blockId = $block.attr('id'), 124 selectedAccount = $this.val(), 125 username = $this.text(); 126 127 $.each(posts, function (index, value) { 128 if (value.id == blockId) { 129 value.profile_ids = selectedAccount; 130 value.formatted_username = username; 131 updatePosts(posts); 132 } 133 }); 134 }); 135 /*length validation*/ 136 widget.on('keyup', '.expresscurate_socialPostBlock textarea', function () { 137 var $this = $(this), 138 $postLengthWrap = $this.parents('.expresscurate_socialPostBlock').find('.expresscurate_socialPostLength'); 139 140 $postLengthWrap.text(postLengthValidation($(this).parents('.expresscurate_socialPostBlock'))); 141 }); 142 /*get content*/ 143 widget.on('click', '.expresscurate_social_get_content', function () { 144 var $this = $(this), 145 content = parseContent(); 146 $.each(content, function (index, value) { 147 var data = { 148 message: value 149 }; 150 createSocialPost(data); 151 }); 152 }); 153 /*add new*/ 154 $('#expresscurate_addTweet').on('click', function () { 155 createSocialPost(null); 156 }); 157 /*post from headers*/ 158 $('.expresscurate_headerTweet').on('click', function () { 159 getHeader($(this).data('header')); 160 }); 161 /*get social title*/ 162 widget.on('click', '#expresscurate_socialTitlePost', function () { 163 var $this = $(this); 164 if ($('#expresscurate_advanced_seo')) { 165 var data = { 166 message: $('#expresscurate_advanced_seo_social_title').val() 167 }; 168 createSocialPost(data); 169 } 170 }); 171 /*get social description*/ 172 widget.on('click', '#expresscurate_socialDescriptionPost', function () { 173 var $this = $(this); 174 if ($('#expresscurate_advanced_seo')) { 175 var data = { 176 message: $('#expresscurate_advanced_seo_social_desc').val() 177 }; 178 createSocialPost(data); 179 } 180 }); 181 /*get social short description*/ 182 widget.on('click', '#expresscurate_socialShortDescriptionPost', function () { 183 var $this = $(this); 184 if ($('#expresscurate_advanced_seo')) { 185 var data = { 186 message: $('#expresscurate_advanced_seo_social_shortdesc').val() 187 }; 188 createSocialPost(data); 189 } 190 }); 191 /*approve*/ 192 widget.on('click', '.expresscurate_socialPostBlock .approve', function () { 193 var $block = $(this).parents('.expresscurate_socialPostBlock'), 194 blockId = $block.attr('id'), 195 $edit = $block.find('.edit'), 196 option = $block.find('#profile option:selected'), 197 profileId = option.val(), 198 username = option.text(); 199 200 $.each(posts, function (index, value) { 201 if (value.id == blockId) { 202 value.approved = true; 203 value.profile_ids = profileId; 204 value.formatted_username = username; 205 value.message = value.message.slice(0, maxLength); 206 } 207 }); 208 209 updatePosts(posts); 210 211 $block.find('li').addClass('expresscurate_displayNone'); 212 $block.find('textarea').attr('readonly', 'true'); 213 $block.find('select').attr('disabled', 'true'); 214 $edit.removeClass('expresscurate_displayNone'); 215 }); 216 /*edit*/ 217 widget.on('click', '.expresscurate_socialPostBlock .edit', function () { 218 219 var $block = $(this).parents('.expresscurate_socialPostBlock'), 220 blockId = $block.attr('id'), 221 $edit = $block.find('.edit'); 222 223 $.each(posts, function (index, value) { 224 if (value.id == blockId) { 225 value.approved = false; 226 } 227 }); 228 229 updatePosts(posts); 230 231 $block.find('li').removeClass('expresscurate_displayNone'); 232 $block.find('textarea').removeAttr('readonly'); 233 $block.find('select').removeAttr('disabled'); 234 $edit.addClass('expresscurate_displayNone'); 235 }); 236 /*clone*/ 237 widget.on('click', '.expresscurate_socialPostBlock .clone', function () { 238 var $block = $(this).parents('.expresscurate_socialPostBlock'), 239 post = null, 240 blockId = $block.attr('id'); 241 242 $.each(posts, function (index, value) { 243 if (value.id == blockId) { 244 post = value; 245 } 246 }); 247 var clone = $.extend({}, post); 248 clone.id = uniqueId(); 249 posts.push(clone); 250 251 updatePosts(posts); 252 $('.mainControls').after(ExpressCurateUtils.getTemplate('socialPostWidget', post)); 253 254 255 }); 256 86 257 } 87 258 … … 96 267 }); 97 268 } 98 } 99 } 100 })(window.jQuery); 269 }, 270 createSocialPost: createSocialPost 271 } 272 }) 273 (window.jQuery); 101 274 102 275 ExpressCurateSocialPostWidget.setup(); -
expresscurate/trunk/readme.txt
r1165793 r1172885 5 5 Requires at least: 3.9 6 6 Tested up to: 4.2.2 7 Stable tag: 2. 0.167 Stable tag: 2.1.0 8 8 License: GPLv3 or later 9 9 License URI: http://www.gnu.org/licenses/gpl.html … … 68 68 69 69 * **Publishing Options** - ExpressCurate provides you with flexibility to publish your curated post immediately, schedule it for a later time, or smart-publish automatically based on time intervals specified by you. 70 70 * **Social Media Promotion** - The Social Media Widget integrates your Social Media Publishing efforts with ExpressCurate. This is a single complex for social media promotions, content optimization and sharing. 71 71 72 72 … … 81 81 82 82 = How To Get Started = 83 [Download ExpressCurate plugin](http://downloads.wordpress.org/plugin/expresscurate.2. 0.16.zip "Your favorite content marketing tools") for WordPress.83 [Download ExpressCurate plugin](http://downloads.wordpress.org/plugin/expresscurate.2.1.0.zip "Your favorite content marketing tools") for WordPress. 84 84 You can also [download](http://www.expresscurate.com/p/products/wordpress-theme "Your favorite WordPress Theme") a **free** [ExpressCurate WordPress theme](http://www.expresscurate.com/p/products/wordpress-theme "Your favorite WordPress Theme"). It will give your curated content a modern online news look. 85 85 … … 131 131 == Changelog == 132 132 133 = 2.1.0 = 134 * New Feature: Social Widget for Social Media Promotion 135 * Miscellaneous bug fixes and improvements. 136 133 137 = 2.0.16 = 134 138 * Miscellaneous bug fixes and improvements. -
expresscurate/trunk/templates/dashboard.php
r1162493 r1172885 24 24 25 25 <h2>ExpressCurate</h2> 26 <label></label>27 26 </div> 28 27 <div class="expresscurate_blocksContainer expresscurate_masonryWrap"> -
expresscurate/trunk/templates/dashboard/social_publishing_widget.php
r1162493 r1172885 11 11 foreach ($profiles as $i => $profile) { 12 12 $counts = $profile->counts; 13 $formatedService= (strpos($profile->formatted_service,'Google') !== false)? 'Google' :$profile->formatted_service; 13 14 ?> 14 15 <li class="expresscurate_background_wrap"> 15 <div class="expresscurate_social_box expresscurate_social_box_<?php echo $ profile->formatted_service?>">16 <div class="expresscurate_social_box expresscurate_social_box_<?php echo $formatedService; ?>"> 16 17 <span class="text"><?php echo $profile->formatted_username ?></span> 17 18 <span class="dailySuggestions"><span class="tooltip">daily suggestions</span><?php echo $counts->daily_suggestions; ?></span> -
expresscurate/trunk/templates/settings.php
r1162493 r1172885 301 301 </select> 302 302 </li> 303 <!--<li>303 <li> 304 304 <p class="title">Social publishing </p> 305 305 <input class="expresscurate_displayNone" type="checkbox" id="expresscurate_social_publishing" 306 306 name="expresscurate_social_publishing" <?php 307 /*if (get_option('expresscurate_social_publishing', '') == "on") {307 if (get_option('expresscurate_social_publishing', '') == "on") { 308 308 echo 'checked'; 309 309 } 310 */?> />310 ?> /> 311 311 <label class="controls checkboxLabel" for="expresscurate_social_publishing"></label> 312 312 313 313 <?php 314 /*$blogName = urlencode(urlencode(get_bloginfo('url')));315 */?>316 <a class="getApiKey <?php /*if (strlen(get_option('expresscurate_buffer_access_token')) > 2) {314 $blogName = urlencode(urlencode(get_bloginfo('url'))); 315 ?> 316 <a class="getApiKey <?php if (strlen(get_option('expresscurate_buffer_access_token')) > 2) { 317 317 echo 'expresscurate_displayNone'; 318 } */?>"319 href="https://www.expresscurate.com/api/connector/buffer/accesstoken/<?php /*echo $blogName */?>">Authorize318 } ?>" 319 href="https://www.expresscurate.com/api/connector/buffer/accesstoken/<?php echo $blogName ?>">Authorize 320 320 access to Buffer</a> 321 321 </li> 322 <div 323 class="socialPublishingWrap <?php /*if (get_option('expresscurate_social_publishing', '') !== "on") { 322 <div class="socialPublishingWrap <?php if (get_option('expresscurate_social_publishing', '') !== "on") { 324 323 echo 'expresscurate_displayNone'; 325 } */?> ">324 } ?> "> 326 325 327 326 <?php 328 /*$buffer = new ExpressCurate_BufferClient();327 $buffer = new ExpressCurate_BufferClient(); 329 328 $profiles = $buffer->getProfiles(); 330 329 if (!empty($profiles)) { … … 336 335 foreach ($profiles as $i => $profile) { 337 336 $profileId = $profile->id; 338 */?>337 ?> 339 338 <li> 340 <p class="title"><?php /*echo $profile->formatted_service; */?>341 / <?php /*echo $profile->formatted_username; */?></p>342 <input data-id="<?php /*echo $profileId; */?>"339 <p class="title"><?php echo $profile->formatted_service; ?> 340 / <?php echo $profile->formatted_username; ?></p> 341 <input data-id="<?php echo $profileId; ?>" 343 342 class="expresscurate_displayNone expresscurate_social_publishing_profile" 344 343 type="checkbox" 345 id="expresscurate_social_publishing_<?php /*echo $profileId; */?>"346 name="expresscurate_social_publishing_<?php /*echo $profileId; */?>" <?php /*if ($profilesStatus->$profileId == 'on' || empty($profilesStatus->$profileId)) {344 id="expresscurate_social_publishing_<?php echo $profileId; ?>" 345 name="expresscurate_social_publishing_<?php echo $profileId; ?>" <?php if ($profilesStatus->$profileId == 'on' || empty($profilesStatus->$profileId)) { 347 346 echo 'checked="checked"'; 348 } */?> />347 } ?> /> 349 348 <label class="controls checkboxLabel" 350 for="expresscurate_social_publishing_<?php /*echo $profileId; */?>"></label>349 for="expresscurate_social_publishing_<?php echo $profileId; ?>"></label> 351 350 </li> 352 351 <?php 353 /*}354 */?>355 <input type="hidden" value="<?php /*echo stripslashes(get_option('expresscurate_social_publishing_profiles', '')); */?>" id="expresscurate_social_publishing_profiles" name="expresscurate_social_publishing_profiles"/>352 } 353 ?> 354 <input type="hidden" value="<?php echo stripslashes(get_option('expresscurate_social_publishing_profiles', '')); ?>" id="expresscurate_social_publishing_profiles" name="expresscurate_social_publishing_profiles"/> 356 355 <?php 357 /*}358 */?>359 </div> -->356 } 357 ?> 358 </div> 360 359 361 360 </ul> -
expresscurate/trunk/templates/social_posts_widget.php
r1162493 r1172885 1 1 <?php 2 global $post; 2 3 $buffer = new ExpressCurate_BufferClient(); 3 4 $profiles = $buffer->getProfiles(); 5 6 $profilesStatus = array(); 7 if (get_option('expresscurate_social_publishing_profiles', '')) { 8 $profilesStatus = json_decode(stripslashes(urldecode(get_option('expresscurate_social_publishing_profiles', '')))); 9 } 10 11 $publishedPosts = get_post_meta($post->ID, '_expresscurate_social_published_post_messages', true); 12 $posts = get_post_meta($post->ID, '_expresscurate_social_post_messages', true); 13 $postLength = 110; 4 14 ?> 5 15 <div class="expresscurate_social_post_widget"> 16 <input id="expresscurate_postId" type="hidden" value="<?php echo $post->ID; ?>"/> 17 18 <input type="hidden" id="expresscurate_social_post_messages" name="expresscurate_social_post_messages" 19 value="<?php echo htmlspecialchars(json_encode($posts),ENT_QUOTES); ?>"/> 20 21 6 22 <ul class="mainControls"> 7 <li id="expresscurate_addTweet" class="expresscurate_social_widget_buttons"> Create</li>23 <li id="expresscurate_addTweet" class="expresscurate_social_widget_buttons">New</li> 8 24 <li class="expresscurate_social_widget_buttons expresscurate_social_get_content">Get content</li> 9 25 <li data-header="h1" class="expresscurate_headerTweet expresscurate_social_widget_buttons">H1</li> 10 26 <li data-header="h2" class="expresscurate_headerTweet expresscurate_social_widget_buttons">H2</li> 11 27 <li data-header="h3" class="expresscurate_headerTweet expresscurate_social_widget_buttons">H3</li> 28 29 <li id="expresscurate_socialTitlePost" class="expresscurate_social_widget_buttons">Social Title</li> 30 <li id="expresscurate_socialDescriptionPost" class="expresscurate_social_widget_buttons">Social Description</li> 31 <li id="expresscurate_socialShortDescriptionPost" class="expresscurate_social_widget_buttons">Social Short 32 Description 33 </li> 12 34 </ul> 13 <input id="expresscurate_postId" type="hidden" value="<?php echo the_ID(); ?>"/>14 35 36 <?php 37 if (!empty($posts)) { 38 foreach ($posts as $i => $data) { 39 $postLengthCount = $postLength - strlen($data['message']); 40 $approved=$data['approved'];?> 41 <div class="expresscurate_socialPostBlock" id="<?php echo $data['id']; ?>"> 42 <ul class="topControls"> 43 44 <?php if (!empty($profiles)) { ?> 45 <select name="profile" id="profile" <?php if($approved) echo 'disabled="disabled"' ?> > 46 <?php 47 foreach ($profiles as $profile) { 48 $profileId = $profile->id; 49 if ($profilesStatus->$profileId == 'on' || empty($profilesStatus->$profileId)) { 50 ?> 51 <option <?php 52 if ($profileId == $data['profile_ids']) { 53 echo 'selected="selected"'; 54 } 55 ?> value="<?php echo $profileId; ?>"><?php echo $profile->formatted_service; ?> / <?php echo $profile->formatted_username; ?></option> 56 <?php } 57 } ?> 58 </select> 59 <?php } ?> 60 61 <li class="close expresscurate_floatRight <?php if($approved) echo 'expresscurate_displayNone' ?> "></li> 62 <div class="expresscurate_clear"></div> 63 </ul> 64 <textarea name="" class="expresscurate_social_post_content expresscurate_disableInputStyle" <?php if($approved) echo 'readonly="readonly"' ?> 65 id=""><?php echo $data['message']; ?></textarea> 66 <ul class="bottomControls"> 67 <li class="expresscurate_social_widget_buttons expresscurate_floatRight <?php if($approved) echo 'expresscurate_displayNone' ?> approve">Approve</li> 68 <li class="expresscurate_social_widget_buttons expresscurate_floatRight <?php if($approved) echo 'expresscurate_displayNone' ?> clone">Copy</li> 69 <li class="expresscurate_socialPostLength <?php if($approved) echo 'expresscurate_displayNone' ?> expresscurate_floatRight <?php if ($postLengthCount < 0) echo 'error'; ?>"><?php echo $postLengthCount; ?></li> 70 <li class="expresscurate_social_widget_buttons <?php if(!$approved) echo 'expresscurate_displayNone' ?> edit">Edit</li> 71 <div class="expresscurate_clear"></div> 72 </ul> 73 </div> 74 <?php } 75 } 76 77 if (!empty($publishedPosts)) { 78 foreach ($publishedPosts as $i => $data) { 79 ?> 80 <div class="expresscurate_socialPostBlock" id="<?php echo $data['id']; ?>"> 81 <ul class="topControls"> 82 <li><?php echo $data['formatted_username']; ?></li> 83 </ul> 84 <span class="expresscurate_social_post_content_published"><?php echo $data['message']; ?></span> 85 <ul class="bottomControls"> 86 <li class="expresscurate_socialPostLength expresscurate_floatRight">Scheduled</li> 87 <div class="expresscurate_clear"></div> 88 </ul> 89 </div> 90 <?php } 91 } 92 ?> 15 93 </div> 16 94 17 95 <script type="text/html" id="tmpl-socialPostWidget"> 18 <div class="expresscurate_ tweetBlock">96 <div class="expresscurate_socialPostBlock" id="{{data.id}}"> 19 97 <ul class="topControls"> 20 <li class="close expresscurate_floatRight" ></li> 98 <?php if (!empty($profiles)) { ?> 99 <select name="profile" id="profile"> 100 <?php 101 foreach ($profiles as $profile) { 102 $profileId = $profile->id; 103 if ($profilesStatus->$profileId == 'on' || empty($profilesStatus->$profileId)) { 104 ?> 105 <option value="<?php echo $profileId; ?>"><?php echo $profile->formatted_service; ?> / <?php echo $profile->formatted_username; ?></option> 106 <?php } 107 } ?> 108 </select> 109 <?php } ?> 110 <li class="close expresscurate_floatRight"></li> 21 111 <div class="expresscurate_clear"></div> 22 112 </ul> 23 <textarea name="" class="expresscurate_social_post_content expresscurate_disableInputStyle" id="">{{data}}</textarea> 113 <textarea name="" class="expresscurate_social_post_content expresscurate_disableInputStyle" 114 id="">{{data.message}}</textarea> 24 115 <ul class="bottomControls"> 25 <li class="expresscurate_social_widget_buttons approve">Approve</li> 116 <li class="expresscurate_social_widget_buttons approve expresscurate_floatRight">Approve</li> 117 <li class="expresscurate_social_widget_buttons clone expresscurate_floatRight">Copy</li> 118 <li class="expresscurate_socialPostLength expresscurate_floatRight {{data.errorColor}}"> 119 {{data.postLength}} 120 </li> 121 <li class="expresscurate_social_widget_buttons expresscurate_displayNone edit">Edit</li> 122 <div class="expresscurate_clear"></div> 26 123 </ul> 27 124 </div>
Note: See TracChangeset
for help on using the changeset viewer.