From 53bed4e1f94c00c1ab0c5e0b34a0160b1b5709b0 Mon Sep 17 00:00:00 2001 From: Dario Milicic Date: Tue, 19 Aug 2014 15:07:22 +0200 Subject: [PATCH] Added a global progress bar for all custom plugins which upload files. Also added a progress bar for the drag and drop box for attachment upload. --- Makefile | 12 +-- elogd.init | 71 ++++++++++++++++++ elogd.init_template | 8 +- scripts/ckeditor/plugins/dndfiles | 2 +- .../plugins/fileupload/dialogs/fileupload.js | 14 +++- .../ckeditor/plugins/image2/dialogs/image2.js | 13 +++- scripts/load-ckeditor.js | 37 ++++----- scripts/progress/progress.min.js | 11 +++ scripts/progress/progressjs.min.css | 1 + src/elogd.c | 3 +- src/git-revision.h | 2 +- .../UserInterfaceState.xcuserstate | Bin 34797 -> 34686 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 48 ++++-------- 13 files changed, 150 insertions(+), 72 deletions(-) create mode 100644 elogd.init create mode 100644 scripts/progress/progress.min.js create mode 100644 scripts/progress/progressjs.min.css diff --git a/Makefile b/Makefile index 714d9cff..19d55be9 100644 --- a/Makefile +++ b/Makefile @@ -165,12 +165,12 @@ install: $(EXECS) @$(INSTALL) -v -m 0644 man/elogd.8 $(MANDIR)/man8/ @$(INSTALL) -v -m 0644 scripts/*.js $(ELOGDIR)/scripts/ - @echo "Installing FCKeditor to $(ELOGDIR)/scripts/fckeditor" - @unzip -q -o scripts/fckeditor.zip -d $(ELOGDIR)/scripts/ - @$(INSTALL) -v -m 0644 scripts/fckeditor/fckelog.js $(ELOGDIR)/scripts/fckeditor/fckelog.js - @mkdir -p -m 0755 $(ELOGDIR)/scripts/fckeditor/editor/plugins/elog - @$(INSTALL) -v -m 0644 scripts/fckeditor/editor/plugins/elog/fckplugin.js $(ELOGDIR)/scripts/fckeditor/editor/plugins/elog/fckplugin.js - @$(INSTALL) -v -m 0644 scripts/fckeditor/editor/plugins/elog/inserttime.gif $(ELOGDIR)/scripts/fckeditor/editor/plugins/elog/inserttime.gif + # @echo "Installing CKeditor to $(ELOGDIR)/scripts/ckeditor" + # @unzip -q -o scripts/fckeditor.zip -d $(ELOGDIR)/scripts/ + # @$(INSTALL) -v -m 0644 scripts/fckeditor/fckelog.js $(ELOGDIR)/scripts/fckeditor/fckelog.js + # @mkdir -p -m 0755 $(ELOGDIR)/scripts/fckeditor/editor/plugins/elog + # @$(INSTALL) -v -m 0644 scripts/fckeditor/editor/plugins/elog/fckplugin.js $(ELOGDIR)/scripts/fckeditor/editor/plugins/elog/fckplugin.js + # @$(INSTALL) -v -m 0644 scripts/fckeditor/editor/plugins/elog/inserttime.gif $(ELOGDIR)/scripts/fckeditor/editor/plugins/elog/inserttime.gif @echo "Installing resources to $(ELOGDIR)/resources" @$(INSTALL) -m 0644 resources/* $(ELOGDIR)/resources/ diff --git a/elogd.init b/elogd.init new file mode 100644 index 00000000..0f0be6f5 --- /dev/null +++ b/elogd.init @@ -0,0 +1,71 @@ +#!/bin/sh + +# chkconfig: 3 90 10 +# description: ELOG is a weblog with integrated database +# processname: elogd +# config: /usr/local/elog/elogd.cfg +# pidfile: /var/run/elogd.pid + +# Source function library. +# . /etc/rc.d/init.d/functions + +# Check for the config file +if [ ! -f /usr/local/elog/elogd.cfg ]; then + exit 0 +fi + + +# See how we were called. +case "$1" in + start) + if [ -f /var/run/elogd.pid ] ; then + pid=`cat /var/run/elogd.pid` + if [ -d /proc/$pid ] ; then + echo "elogd already running" + # echo_failure + exit 1 + fi + fi + if [ -f /var/run/elogd.pid ] ; then + rm -f /var/lock/subsys/elogd + rm -f /var/run/elogd.pid + fi + echo -n "Starting elogd: " + /usr/local/sbin/elogd -D -c /usr/local/elog/elogd.cfg > /dev/null 2>&1 + RETVAL=$? + if [ $RETVAL -eq 0 ] ; then + touch /var/lock/subsys/elogd + fi + echo + ;; + stop) + echo "" + if [ -f /var/run/elogd.pid ] ; then + echo -n "Stoping elogd: " + /bin/kill `cat /var/run/elogd.pid` + rm -f /var/lock/subsys/elogd + rm -f /var/run/elogd.pid + echo_success + echo + else + echo -n "No elogd running?" + echo + fi + + ;; + status) + status -p /var/run/elogd.pid /usr/local/sbin/elogd + RETVAL=$? + ;; + restart|reload) + $0 stop + sleep 1 + $0 start + ;; + *) + echo "Usage: $0 {start|stop|status|restart}" + exit 1 +esac + +exit 0 + diff --git a/elogd.init_template b/elogd.init_template index c56e0652..6db4a283 100755 --- a/elogd.init_template +++ b/elogd.init_template @@ -7,7 +7,7 @@ # pidfile: /var/run/elogd.pid # Source function library. -. /etc/rc.d/init.d/functions +# . /etc/rc.d/init.d/functions # Check for the config file if [ ! -f @PREFIX@/elog/elogd.cfg ]; then @@ -22,7 +22,7 @@ case "$1" in pid=`cat /var/run/elogd.pid` if [ -d /proc/$pid ] ; then echo "elogd already running" - echo_failure + # echo_failure exit 1 fi fi @@ -35,9 +35,6 @@ case "$1" in RETVAL=$? if [ $RETVAL -eq 0 ] ; then touch /var/lock/subsys/elogd - echo_success - else - echo_failure fi echo ;; @@ -52,7 +49,6 @@ case "$1" in echo else echo -n "No elogd running?" - echo_failure echo fi diff --git a/scripts/ckeditor/plugins/dndfiles b/scripts/ckeditor/plugins/dndfiles index 41551357..83f4ac1b 160000 --- a/scripts/ckeditor/plugins/dndfiles +++ b/scripts/ckeditor/plugins/dndfiles @@ -1 +1 @@ -Subproject commit 41551357b1c8e24cc2640d8558f683a94a1df3e4 +Subproject commit 83f4ac1be652ca0db0ecb02e6a7bfa7daceec3f6 diff --git a/scripts/ckeditor/plugins/fileupload/dialogs/fileupload.js b/scripts/ckeditor/plugins/fileupload/dialogs/fileupload.js index e0e6d889..e67f1667 100644 --- a/scripts/ckeditor/plugins/fileupload/dialogs/fileupload.js +++ b/scripts/ckeditor/plugins/fileupload/dialogs/fileupload.js @@ -73,12 +73,16 @@ CKEDITOR.dialog.add( 'fileuploadDialog', function( editor ) { { var xhr = new window.XMLHttpRequest(); + // Start the progress bar + progressJs().start(); + //Upload progress xhr.upload.addEventListener("progress", function(evt){ if (evt.lengthComputable) { var percentComplete = evt.loaded / evt.total; - //Do something with upload progress - console.log(percentComplete); + + //Update the progress bar + progressJs().set(percentComplete); } }, false); @@ -90,6 +94,10 @@ CKEDITOR.dialog.add( 'fileuploadDialog', function( editor ) { url: URL, data: formData, success: function(data) { + + // End the progress bar + progressJs().end(); + if(data.attachments[0]) { // check if we have the correct response dialog.getContentElement( 'Upload', 'src' ).setValue( data.attachments[0].fullName ); } else { @@ -97,6 +105,8 @@ CKEDITOR.dialog.add( 'fileuploadDialog', function( editor ) { } }, fail: function() { + // End the progress bar + progressJs().end(); console.log("error"); } }); diff --git a/scripts/ckeditor/plugins/image2/dialogs/image2.js b/scripts/ckeditor/plugins/image2/dialogs/image2.js index 03efb92c..a2ba2af4 100755 --- a/scripts/ckeditor/plugins/image2/dialogs/image2.js +++ b/scripts/ckeditor/plugins/image2/dialogs/image2.js @@ -568,12 +568,15 @@ CKEDITOR.dialog.add( 'image2', function( editor ) { { var xhr = new window.XMLHttpRequest(); + // Start the progress bar + progressJs().start(); + //Upload progress xhr.upload.addEventListener("progress", function(evt){ if (evt.lengthComputable) { var percentComplete = evt.loaded / evt.total; - //Do something with upload progress - // console.log(percentComplete); + //Update the progress bar + progressJs().set(percentComplete); } }, false); @@ -585,6 +588,10 @@ CKEDITOR.dialog.add( 'image2', function( editor ) { url: URL, data: formData, success: function(data) { + + // End the progress bar + progressJs().end(); + if(data.attachments) { // check if we have the correct response dialog.getContentElement( 'info', 'src' ).setValue( data.attachments[0].fullName ); } else { @@ -592,6 +599,8 @@ CKEDITOR.dialog.add( 'image2', function( editor ) { } }, fail: function() { + // End the progress bar + progressJs().end(); console.log("error"); } }); diff --git a/scripts/load-ckeditor.js b/scripts/load-ckeditor.js index 1c575a0f..3354e3fd 100755 --- a/scripts/load-ckeditor.js +++ b/scripts/load-ckeditor.js @@ -1,4 +1,5 @@ $(document).ready(function() { + $('textarea').addClass("ckeditor"); // Need to wait for the ckeditor instance to finish initialization @@ -78,10 +79,10 @@ $(document).ready(function() { }, 1); }); - // self.on('drop', function(event) { - // collection = $(); - // self.trigger('dndHoverEnd'); - // }); + self.on('drop', function(event) { + collection = $(); + self.trigger('dndHoverEnd'); + }); }); }; @@ -148,24 +149,18 @@ $(document).ready(function() { { var xhr = new window.XMLHttpRequest(); + // Start the progress bar + progressJs().start(); + //Upload progress xhr.upload.addEventListener("progress", function(evt){ if (evt.lengthComputable) { var percentComplete = evt.loaded / evt.total; - //Do something with upload progress - console.log(percentComplete); + //Update the progress bar + progressJs().set(percentComplete); } }, false); - //Download progress - // xhr.addEventListener("progress", function(evt){ - // if (evt.lengthComputable) { - // var percentComplete = evt.loaded / evt.total; - // //Do something with download progress - // console.log(percentComplete); - // } - // }, false); - return xhr; }, contentType: false, @@ -174,21 +169,21 @@ $(document).ready(function() { url: URL, data: formData, success: function(data) { - console.log(data); + // End the progress bar + progressJs().end(); + var attch = $(".attachment", $(data)); var attch_upload = $("#attachment_upload", $(data)); - // attch.each(function(idx, element) { - // $("#attachment_upload").before(element); - // console.log(element); - // }); // add the new attachments to the current page $("#attachment_upload").before(attch.slice(-files.length)); + // replace the attachment upload section $("#attachment_upload").replaceWith(attch_upload); - // console.log(attch.last()); }, fail: function() { + // End the progress bar + progressJs().end(); console.log("Error uploading files..."); } }); diff --git a/scripts/progress/progress.min.js b/scripts/progress/progress.min.js new file mode 100644 index 00000000..f7c5b41b --- /dev/null +++ b/scripts/progress/progress.min.js @@ -0,0 +1,11 @@ +(function(l,e){"object"===typeof exports?e(exports):"function"===typeof define&&define.amd?define(["exports"],e):e(l)})(this,function(l){function e(a){this._targetElement="undefined"!=typeof a.length?a:[a];"undefined"===typeof window._progressjsId&&(window._progressjsId=1);"undefined"===typeof window._progressjsIntervals&&(window._progressjsIntervals={});this._options={theme:"blue",overlayMode:!1,considerTransition:!0}}function m(a,c){var d=this;100<=c&&(c=100);a.hasAttribute("data-progressjs")&& +setTimeout(function(){"undefined"!=typeof d._onProgressCallback&&d._onProgressCallback.call(d,a,c);var b=h(a);b.style.width=parseInt(c)+"%";var b=b.querySelector(".progressjs-percent"),g=parseInt(b.innerHTML.replace("%","")),e=parseInt(c),j=function(a,b,c){var d=Math.abs(b-c);3>d?k=30:20>d?k=20:intervanIn=1;0!=b-c&&(a.innerHTML=(f?++b:--b)+"%",setTimeout(function(){j(a,b,c)},k))},f=!0;g>e&&(f=!1);var k=10;j(b,g,e)},50)}function h(a){a=parseInt(a.getAttribute("data-progressjs"));return document.querySelector('.progressjs-container > .progressjs-progress[data-progressjs="'+ +a+'"] > .progressjs-inner')}function p(a){for(var c=0,d=this._targetElement.length;cparseInt(e.style.width.replace("%",""))&&(m.call(this,b,100),l=500);(function(a,b){setTimeout(function(){a.parentNode.className+=" progressjs-end";setTimeout(function(){a.parentNode.parentNode.removeChild(a.parentNode);b.removeAttribute("data-progressjs")},1E3)},l)})(e,b)}if(window._progressjsIntervals[a])try{clearInterval(window._progressjsIntervals[a]),window._progressjsIntervals[a]=null,delete window._progressjsIntervals[a]}catch(j){}}return this}, +onbeforeend:function(a){if("function"===typeof a)this._onBeforeEndCallback=a;else throw Error("Provided callback for onbeforeend was not a function");return this},onbeforestart:function(a){if("function"===typeof a)this._onBeforeStartCallback=a;else throw Error("Provided callback for onbeforestart was not a function");return this},onprogress:function(a){if("function"===typeof a)this._onProgressCallback=a;else throw Error("Provided callback for onprogress was not a function");return this}};return l.progressJs= +n}); diff --git a/scripts/progress/progressjs.min.css b/scripts/progress/progressjs.min.css new file mode 100644 index 00000000..9ac739e8 --- /dev/null +++ b/scripts/progress/progressjs.min.css @@ -0,0 +1 @@ +.progressjs-inner{width:0}.progressjs-progress{z-index:9999999}.progressjs-theme-blue .progressjs-inner{height:2px;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;background-color:#3498db}.progressjs-theme-blue.progressjs-end{-webkit-transition:opacity .2s ease-out;-moz-transition:opacity .2s ease-out;-o-transition:opacity .2s ease-out;transition:opacity .2s ease-out;opacity:0}.progressjs-theme-blue .progressjs-percent{display:none}.progressjs-theme-blueOverlay{background-color:white;-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;-o-transition:all .2s ease-out;transition:all .2s ease-out}.progressjs-theme-blueOverlay .progressjs-inner{height:100%;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;background-color:#3498db}.progressjs-theme-blueOverlay.progressjs-end{opacity:0!important}.progressjs-theme-blueOverlay .progressjs-percent{display:none}.progressjs-theme-blueOverlay{background-color:white;-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;-o-transition:all .2s ease-out;transition:all .2s ease-out}.progressjs-theme-blueOverlay .progressjs-inner{height:100%;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;background-color:#3498db}.progressjs-theme-blueOverlay.progressjs-end{opacity:0!important}.progressjs-theme-blueOverlay .progressjs-percent{display:none}.progressjs-theme-blueOverlayRadius{background-color:white;-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;-o-transition:all .2s ease-out;transition:all .2s ease-out;border-radius:5px}.progressjs-theme-blueOverlayRadius .progressjs-inner{height:100%;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;background-color:#3498db;border-radius:5px}.progressjs-theme-blueOverlayRadius.progressjs-end{opacity:0!important}.progressjs-theme-blueOverlayRadius .progressjs-percent{display:none}.progressjs-theme-blueOverlayRadiusHalfOpacity{background-color:white;opacity:.5;-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;-o-transition:all .2s ease-out;transition:all .2s ease-out;border-radius:5px}.progressjs-theme-blueOverlayRadiusHalfOpacity .progressjs-inner{height:100%;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;background-color:#3498db;border-radius:5px}.progressjs-theme-blueOverlayRadiusHalfOpacity.progressjs-end{opacity:0!important}.progressjs-theme-blueOverlayRadiusHalfOpacity .progressjs-percent{display:none}.progressjs-theme-blueOverlayRadiusWithPercentBar{background-color:white;-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;-o-transition:all .2s ease-out;transition:all .2s ease-out;border-radius:5px}.progressjs-theme-blueOverlayRadiusWithPercentBar .progressjs-inner{height:100%;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;background-color:#3498db;border-radius:5px}.progressjs-theme-blueOverlayRadiusWithPercentBar.progressjs-end{opacity:0!important}.progressjs-theme-blueOverlayRadiusWithPercentBar .progressjs-percent{width:70px;text-align:center;height:40px;position:absolute;right:50%;margin-right:-35px;top:50%;margin-top:-20px;font-size:30px;opacity:.5}.progressjs-theme-blackRadiusInputs{height:10px;border-radius:10px;overflow:hidden}.progressjs-theme-blackRadiusInputs .progressjs-inner{height:2px;-webkit-transition:all 1s ease-out;-moz-transition:all 1s ease-out;-o-transition:all 1s ease-out;transition:all 1s ease-out;background-color:#34495e}.progressjs-theme-blackRadiusInputs.progressjs-end{-webkit-transition:opacity .2s ease-out;-moz-transition:opacity .2s ease-out;-o-transition:opacity .2s ease-out;transition:opacity .2s ease-out;opacity:0}.progressjs-theme-blackRadiusInputs .progressjs-percent{display:none} \ No newline at end of file diff --git a/src/elogd.c b/src/elogd.c index af1af53e..47a6a915 100755 --- a/src/elogd.c +++ b/src/elogd.c @@ -9915,7 +9915,8 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL if (enc_selected == 2 && fckedit_exist && show_text && !fixed_text) { rsprintf("\n"); rsprintf("\n"); - // rsprintf("\n"); + rsprintf("\n"); + rsprintf("\n"); } /* external script if requested */ diff --git a/src/git-revision.h b/src/git-revision.h index de639a57..6fcb9e00 100644 --- a/src/git-revision.h +++ b/src/git-revision.h @@ -1 +1 @@ -#define GIT_REVISION "Mon Aug 11 11:19:47 2014 +0200 - 228262b" +#define GIT_REVISION "Thu Aug 14 13:59:07 2014 +0200 - 74a2bb2" diff --git a/xcode/elogd.xcodeproj/project.xcworkspace/xcuserdata/dmilicic.xcuserdatad/UserInterfaceState.xcuserstate b/xcode/elogd.xcodeproj/project.xcworkspace/xcuserdata/dmilicic.xcuserdatad/UserInterfaceState.xcuserstate index a8135cf7757c378b2060f0d3e1402546d2961db5..2286fadece1d62adc5efea1d8563377d683925ec 100644 GIT binary patch delta 15471 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 delta 15912 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 - - - - - - - - + + + +