From 9dfecadc7986049095571017f5c073319c3656e9 Mon Sep 17 00:00:00 2001 From: Jared Hancock <jared@osticket.com> Date: Wed, 14 May 2014 23:27:23 -0500 Subject: [PATCH] Float draft-saved box inside redactor editors --- include/staff/tpl.inc.php | 2 +- js/redactor-osticket.js | 64 ++++++++++++++++++--------------------- scp/css/scp.css | 9 ++++++ 3 files changed, 40 insertions(+), 35 deletions(-) diff --git a/include/staff/tpl.inc.php b/include/staff/tpl.inc.php index 5146b5c47..f59cdcd0d 100644 --- a/include/staff/tpl.inc.php +++ b/include/staff/tpl.inc.php @@ -97,7 +97,7 @@ $tpl=$msgtemplates[$selected]; <div> <input type="text" name="subject" size="65" value="<?php echo $info['subject']; ?>" - style="font-size:14pt"> + style="font-size:14pt;width:100%;box-sizing:border-box"> <div style="margin-bottom:0.5em;margin-top:0.5em"> </div> <input type="hidden" name="draft_id" value=""/> diff --git a/js/redactor-osticket.js b/js/redactor-osticket.js index a0225e940..e648f0aa4 100644 --- a/js/redactor-osticket.js +++ b/js/redactor-osticket.js @@ -4,8 +4,8 @@ if (typeof RedactorPlugins === 'undefined') var RedactorPlugins = {}; * automatically, along with draft autosave, and image uploading. * * Configuration: - * draft_namespace: namespace for the draft retrieval - * draft_object_id: extension to the namespace for draft retrieval + * draftNamespace: namespace for the draft retrieval + * draftObjectId: extension to the namespace for draft retrieval * * Caveats: * Login (staff only currently) is required server-side for drafts and image @@ -14,17 +14,37 @@ if (typeof RedactorPlugins === 'undefined') var RedactorPlugins = {}; */ RedactorPlugins.draft = { init: function() { - if (!this.opts.draft_namespace) + if (!this.opts.draftNamespace) return; this.opts.changeCallback = this.hideDraftSaved; - var autosave_url = 'ajax.php/draft/' + this.opts.draft_namespace; - if (this.opts.draft_object_id) - autosave_url += '.' + this.opts.draft_object_id; + var autosave_url = 'ajax.php/draft/' + this.opts.draftNamespace; + if (this.opts.draftObjectId) + autosave_url += '.' + this.opts.draftObjectId; this.opts.autosave = autosave_url; this.opts.autosaveInterval = 10; this.opts.autosaveCallback = this.setupDraftUpdate; this.opts.initCallback = this.recoverDraft; + + this.$draft_saved = $('<span>') + .addClass("pull-right draft-saved faded") + .css({'position':'absolute','top':'3em','right':'0.5em'}) + .hide() + .append($('<span>') + .text('Draft Saved')); + if (this.opts.draftDelete) { + this.$draft_saved.append($('<span>') + .css({'padding-left':'1em', 'cursor':'pointer'}) + .click($.proxy(function() { + this.deleteDraft(); + return false; + }, this)) + .append($('<i>') + .addClass('icon-trash') + ) + ); + } + this.$toolbar.append(this.$draft_saved); }, recoverDraft: function() { var self = this; @@ -62,11 +82,11 @@ RedactorPlugins.draft = { }); }, setupDraftUpdate: function(data) { - this.$box.parent().find('.draft-saved').show(); + this.$draft_saved.show().delay(5000).fadeOut(); // Slight workaround. Signal the 'keyup' event normally signaled // from typing in the <textarea> - if ($.autoLock && this.opts.draft_namespace == 'ticket.response') + if ($.autoLock && this.opts.draftNamespace == 'ticket.response') if (this.get()) $.autoLock.handleEvent(); @@ -102,7 +122,7 @@ RedactorPlugins.draft = { }, hideDraftSaved: function() { - this.$box.parent().find('.draft-saved').hide(); + this.$draft_saved.hide(); }, deleteDraft: function() { @@ -238,33 +258,9 @@ $(function() { }); } if (el.hasClass('draft')) { - var draft_saved = $('<span>') - .addClass("pull-right draft-saved faded") - .css({'position':'absolute','top':'0.2em','right':'1em'}) - .hide() - .append($('<span>') - .css({'position':'relative', 'top':'0.17em'}) - .text('Draft Saved')); el.closest('form').append($('<input type="hidden" name="draft_id"/>')); - if (el.hasClass('draft-delete')) { - draft_saved.append($('<span>') - .addClass('action-button') - .click(function() { - el.redactor('deleteDraft'); - return false; - }) - .append($('<i>') - .addClass('icon-trash') - ) - ); - } - el.parent().css('position', 'relative'); - draft_saved.insertBefore(el); options['plugins'].push('draft'); - if (el.data('draftNamespace')) - options['draft_namespace'] = el.data('draftNamespace'); - if (el.data('draftObjectId')) - options['draft_object_id'] = el.data('draftObjectId'); + options.draftDelete = el.hasClass('draft-delete'); } el.redactor(options); }, diff --git a/scp/css/scp.css b/scp/css/scp.css index add14aca2..493f6dc34 100644 --- a/scp/css/scp.css +++ b/scp/css/scp.css @@ -1817,3 +1817,12 @@ table.custom-info td { .ui-datepicker { z-index: 100 !important; } +.draft-saved { + background-color: black; + background-color: rgba(0, 0, 0, 0.7); + color: white; + padding: 4px 8px 6px; + border-radius: 3px; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + line-height: 14px; +} -- GitLab