diff options
-rw-r--r-- | Zotlabs/Module/Autosavetext.php | 37 | ||||
-rw-r--r-- | Zotlabs/Module/Item.php | 4 | ||||
-rw-r--r-- | include/conversation.php | 16 | ||||
-rwxr-xr-x | view/tpl/jot.tpl | 32 |
4 files changed, 85 insertions, 4 deletions
diff --git a/Zotlabs/Module/Autosavetext.php b/Zotlabs/Module/Autosavetext.php new file mode 100644 index 000000000..f6bffd2a2 --- /dev/null +++ b/Zotlabs/Module/Autosavetext.php @@ -0,0 +1,37 @@ +<?php +namespace Zotlabs\Module; /** @file */ + + +class Autosavetext extends \Zotlabs\Web\Controller { + + function init() { + + if(! local_channel()) + return; + + $ret = array('success' => true); + if(array_key_exists('body',$_REQUEST) && array_key_exists('type',$_REQUEST)) { + $body = escape_tags($_REQUEST['body']); + $title = (array_key_exists('title',$_REQUEST) ? escape_tags($_REQUEST['title']) : ''); + $type = $_REQUEST['type']; + + if($body && $type === 'post') { + set_pconfig(local_channel(),'autosavetext_post','body',$body); + set_pconfig(local_channel(),'autosavetext_post','title',$title); + } + + logger('post saved.', LOGGER_DEBUG); + } + + // // push updates to channel clones + // + // if((argc() > 1) && (argv(1) === 'sync')) { + // require_once('include/zot.php'); + // build_sync_packet(); + // } + + json_return_and_die($ret); + + } + +} diff --git a/Zotlabs/Module/Item.php b/Zotlabs/Module/Item.php index fba2ef7a4..ed35fc20d 100644 --- a/Zotlabs/Module/Item.php +++ b/Zotlabs/Module/Item.php @@ -1050,6 +1050,10 @@ class Item extends \Zotlabs\Web\Controller { logger('post_complete'); + // Remove auto-saved post text if the post was successfully posted + del_pconfig(local_channel(),'autosavetext_post','body'); + del_pconfig(local_channel(),'autosavetext_post','title'); + if($moderated) { info(t('Your comment is awaiting approval.') . EOL); } diff --git a/include/conversation.php b/include/conversation.php index 64beb1b0e..22eb2f6ad 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -1361,8 +1361,16 @@ function status_editor($a, $x, $popup = false) { } $sharebutton = (x($x,'button') ? $x['button'] : t('Share')); - $placeholdtext = (x($x,'content_label') ? $x['content_label'] : $sharebutton); - + $content = ((x($x,'body')) ? htmlspecialchars($x['body'], ENT_COMPAT,'UTF-8') : ''); + if(!$content) { + $content = get_pconfig(local_channel(),'autosavetext_post','body'); + } + $title = ((x($x, 'title')) ? htmlspecialchars($x['title'], ENT_COMPAT,'UTF-8') : ''); + if(!$title) { + $title = get_pconfig(local_channel(),'autosavetext_post','title'); + } + $placeholdtext = (x($x,'content_label') ? $x['content_label'] : $sharebutton); + $o .= replace_macros($tpl, array( '$return_path' => ((x($x, 'return_path')) ? $x['return_path'] : App::$query_string), '$action' => z_root() . '/item', @@ -1394,14 +1402,14 @@ function status_editor($a, $x, $popup = false) { '$feature_nocomment' => $feature_nocomment, '$nocomment' => ((array_key_exists('item',$x)) ? $x['item']['item_nocomment'] : 0), '$clearloc' => $clearloc, - '$title' => ((x($x, 'title')) ? htmlspecialchars($x['title'], ENT_COMPAT,'UTF-8') : ''), + '$title' => $title, '$placeholdertitle' => ((x($x, 'placeholdertitle')) ? $x['placeholdertitle'] : t('Title (optional)')), '$catsenabled' => $catsenabled, '$category' => ((x($x, 'category')) ? $x['category'] : ''), '$placeholdercategory' => t('Categories (optional, comma-separated list)'), '$permset' => t('Permission settings'), '$ptyp' => ((x($x, 'ptyp')) ? $x['ptyp'] : ''), - '$content' => ((x($x,'body')) ? htmlspecialchars($x['body'], ENT_COMPAT,'UTF-8') : ''), + '$content' => $content, '$attachment' => ((x($x, 'attachment')) ? $x['attachment'] : ''), '$post_id' => ((x($x, 'post_id')) ? $x['post_id'] : ''), '$defloc' => $x['default_location'], diff --git a/view/tpl/jot.tpl b/view/tpl/jot.tpl index bc9339d4c..90058ab30 100755 --- a/view/tpl/jot.tpl +++ b/view/tpl/jot.tpl @@ -40,6 +40,38 @@ <input name="category" id="jot-category" type="text" placeholder="{{$placeholdercategory}}" value="{{$category}}" data-role="cat-tagsinput"> </div> {{/if}} + + <script> + + var postSaveTimer = null; + + $(document).on('focusout',"#profile-jot-text",function(e){ + if(postSaveTimer) + clearTimeout(postSaveTimer); + postSaveChanges(true); + postSaveTimer = null; + }); + + $(document).on('focusin',"#profile-jot-text",function(e){ + postSaveTimer = setTimeout(function () { + postSaveChanges(false); + },10000); + }); + + function postSaveChanges(isFinal = false, type) { + $.post('autosavetext', + { + 'type' : 'post', + 'body' : $("#profile-jot-text").val(), + 'title': $("#jot-title").val() + } + ); + if( !isFinal) { + postSaveTimer = setTimeout(postSaveChanges,10000); + } + + } + </script> <div id="jot-text-wrap"> <textarea class="profile-jot-text" id="profile-jot-text" name="body" tabindex="2" placeholder="{{$placeholdtext}}" >{{$content}}</textarea> </div> |