diff --git a/src/nhttpd/web/extentions/filemgr/filemgr_uninstall.inc b/src/nhttpd/web/extentions/filemgr/filemgr_uninstall.inc new file mode 100644 index 000000000..e4949884c --- /dev/null +++ b/src/nhttpd/web/extentions/filemgr/filemgr_uninstall.inc @@ -0,0 +1,44 @@ +# =========================================================== +# yWeb SDK: Extention Unnstaller Include +# Extention Name: filemgr +# by yjogol +# ----------------------------------------------------------- +# $Date: 2007-12-29 17:08:16 $ +# $Revision: 1.3 $ +# =========================================================== + +yI_updatename="yWeb-Extension filemgr (02.02.2008)" +yI_Ext_Tag="filemgr" +yI_Ext_Version="1-0-0" +yI_uninstall_log="$y_path_tmp/uninstall_filemgr.log" +yI_uninstaller="filemgr_uninstall.inc" + +uninstall() +{ + rm $y_ywebover_dir/Y_Ext_Filemgr.yhtm + rm $y_ywebover_dir/Y_Ext_Filemgr.css + rm $y_ywebover_dir/Y_Ext_Filemgr_Edit.yhtm + rm $y_ywebover_dir/Y_Ext_Filemgr_blocks.txt +# rm $y_ywebover_dir/accordion.js +# rm $y_ywebover_dir/effects.js + rm $y_ywebover_dir/scripts/Y_NAS* + rm $y_ywebover_dir/images/chmod.png + rm $y_ywebover_dir/images/copy.gif + rm $y_ywebover_dir/images/cut.png +# rm $y_ywebover_dir/images/delete.gif + rm $y_ywebover_dir/images/dir_up.gif + rm $y_ywebover_dir/images/download.png + rm $y_ywebover_dir/images/folder_add.png + rm $y_ywebover_dir/images/ftype_file.png + rm $y_ywebover_dir/images/ftype_folder.png + rm $y_ywebover_dir/images/ftype_link.png + rm $y_ywebover_dir/images/home.png + rm $y_ywebover_dir/images/package.png + rm $y_ywebover_dir/images/page_edit.png + rm $y_ywebover_dir/images/paste.gif + rm $y_ywebover_dir/images/picture.png + rm $y_ywebover_dir/images/rename.gif + rm $y_ywebover_dir/images/text.png + rm $y_ywebover_dir/images/upload.png + rm $y_ywebover_dir/images/work.gif +} diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/Y_Ext_Filemgr.css b/src/nhttpd/web/extentions/filemgr/files/httpd/Y_Ext_Filemgr.css new file mode 100644 index 000000000..dadb0f40c --- /dev/null +++ b/src/nhttpd/web/extentions/filemgr/files/httpd/Y_Ext_Filemgr.css @@ -0,0 +1,56 @@ +.diag { + border: 1px solid #bbbbbb; + border-collapse: collapse; + background-color: #eeeeee; + margin-left: 10px; + margin-top: 10px; +} +.toolbar td { + border: 1px solid #cccccc; + width: 20px; + height: 20px; + text-align: center; +} +.toolbar img { + border:0; +} +.toolbar td:hover { + background-color: #dddddd; +} +.button { + border: 1px solid #cccccc; + width: 40px; + height: 20px; + text-align: center; +} +.button:hover { + background-color: #dddddd; +} +.mform { + empty-cells:show; +} + +.filelist a{ + text-decoration:underline; +} +.box { + border: 1px solid #cccccc; + empty-cells:show; +} +.epginfo2{ + font-size: 8pt; +} +.detail_title{ + border: 1px solid #cccccc; + font-weight: bold; + background-color: #ffffff; +} +.detail_title_active{ + border: 1px solid #cccccc; + font-weight: bold; + background-color: #eeeeee; +} +.detail_img { + max-width: 300px; + max-height:300px; +} diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/Y_Ext_Filemgr.yhtm b/src/nhttpd/web/extentions/filemgr/files/httpd/Y_Ext_Filemgr.yhtm new file mode 100755 index 000000000..38bdff8cb --- /dev/null +++ b/src/nhttpd/web/extentions/filemgr/files/httpd/Y_Ext_Filemgr.yhtm @@ -0,0 +1,725 @@ +{=include-block:Y_Blocks.txt;head=} + + + + + + + + +
+
+ {=var-set:help_url=Help-Extensions-filemgr=}{=var-set:menu=File Manager (1.0.0)=}{=include-block:Y_Blocks.txt;work_menu=}
+
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+
+ + + + + + + + + +
+
+
+ + + + +
+
+ +
+
+ + +
+
File properties
+
+ + + + + +
Date:
Size:
User:
Group:
+
+
File permissions
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Permissionreadwriteexe
Owner:
Group:
Others:
chmod: + recursiv + +
Item: + +
+   +
+
+
+ + +
+ + + + + + +
+ + + + + +
message in statusline
+
+
+
+ + \ No newline at end of file diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/Y_Ext_Filemgr_Edit.yhtm b/src/nhttpd/web/extentions/filemgr/files/httpd/Y_Ext_Filemgr_Edit.yhtm new file mode 100644 index 000000000..e6990ba39 --- /dev/null +++ b/src/nhttpd/web/extentions/filemgr/files/httpd/Y_Ext_Filemgr_Edit.yhtm @@ -0,0 +1,69 @@ +{=include-block:Y_Blocks.txt;head=} + + + + + + +{=var-set:wait_text=Speichern (Save).=}{=include-block:Y_Blocks.txt;snip_wait=} +
+
+ {=var-set:help_url=Help-Extensions-filemgr=}{=var-set:menu=File Manager: Editor=}{=include-block:Y_Blocks.txt;work_menu=}
+
+ + + + + + + +
+
+ + + +
+
+
+ + + + diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/Y_Ext_Filemgr_blocks.txt b/src/nhttpd/web/extentions/filemgr/files/httpd/Y_Ext_Filemgr_blocks.txt new file mode 100644 index 000000000..0b2316c68 --- /dev/null +++ b/src/nhttpd/web/extentions/filemgr/files/httpd/Y_Ext_Filemgr_blocks.txt @@ -0,0 +1,3 @@ +start-block~edit_save_settings +{=file-action:{=file=};add;{=editfile=}=} +end-block~edit_save_settings diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/accordion.js b/src/nhttpd/web/extentions/filemgr/files/httpd/accordion.js new file mode 100644 index 000000000..5eba804d5 --- /dev/null +++ b/src/nhttpd/web/extentions/filemgr/files/httpd/accordion.js @@ -0,0 +1,55 @@ +/* + MIT-style license ... + Author: Mats Lindblad + Inspiration: accordion.js found at script.aculo.us +*/ +var Accordion = Class.create(); +Accordion.prototype = { + initialize: function(container, options){ + this.container = $(container); + this.setOptions(options); + this.togglers = this.container.select(this.options.toggler); + this.togglees = this.container.select(this.options.togglee); + this.togglees.invoke("hide"); + this.togglers.each(function(t, idx){ + t.observe('click', this.show.bindAsEventListener(this, idx)); + }.bind(this)); + this.setCurrent(); + }, + show: function(event, index) { + var element = Event.element(event); + if (this.open.toggler == element) return; + var current = this.open; + var next = {toggler: element, togglee: this.togglees[index]}; + new Effect.Parallel([new Effect.BlindUp(current.togglee), new Effect.BlindDown(next.togglee)], {duration: 0.5}); + current.toggler.removeClassName(this.options.activeClassName); + next.toggler.addClassName(this.options.activeClassName); + this.open = next; + }, + setOptions: function(options){ + this.options = { + toggler: '.toggler', // className of the element you click + togglee: '.togglee', // className of the element you toggle + activeClassName: 'visible', // className to put on the open elements + defaultTogglee: null + }; + Object.extend(this.options, options || {}); + }, + setCurrent: function(){ + if (this.options.defaultTogglee != null) { + this.togglees.each(function(t, idx){ + if (t.id == this.options.defaultTogglee) { + t.show(); + this.open = {toggler: this.togglers[idx], togglee: this.togglees[idx]}; + this.togglers[idx].addClassName(this.options.activeClassName); + return; + } + }.bind(this)); + } + else { + this.open = {toggler: this.togglers.first(), togglee: this.togglees.first()}; + this.togglers.first().addClassName(this.options.activeClassName); + this.togglees.first().show(); + } + } +}; \ No newline at end of file diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/effects.js b/src/nhttpd/web/extentions/filemgr/files/httpd/effects.js new file mode 100644 index 000000000..06f59b476 --- /dev/null +++ b/src/nhttpd/web/extentions/filemgr/files/httpd/effects.js @@ -0,0 +1,1090 @@ +// script.aculo.us effects.js v1.7.0, Fri Jan 19 19:16:36 CET 2007 + +// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) +// Contributors: +// Justin Palmer (http://encytemedia.com/) +// Mark Pilgrim (http://diveintomark.org/) +// Martin Bialasinki +// +// script.aculo.us is freely distributable under the terms of an MIT-style license. +// For details, see the script.aculo.us web site: http://script.aculo.us/ + +// converts rgb() and #xxx to #xxxxxx format, +// returns self (or first argument) if not convertable +String.prototype.parseColor = function() { + var color = '#'; + if(this.slice(0,4) == 'rgb(') { + var cols = this.slice(4,this.length-1).split(','); + var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3); + } else { + if(this.slice(0,1) == '#') { + if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase(); + if(this.length==7) color = this.toLowerCase(); + } + } + return(color.length==7 ? color : (arguments[0] || this)); +} + +/*--------------------------------------------------------------------------*/ + +Element.collectTextNodes = function(element) { + return $A($(element).childNodes).collect( function(node) { + return (node.nodeType==3 ? node.nodeValue : + (node.hasChildNodes() ? Element.collectTextNodes(node) : '')); + }).flatten().join(''); +} + +Element.collectTextNodesIgnoreClass = function(element, className) { + return $A($(element).childNodes).collect( function(node) { + return (node.nodeType==3 ? node.nodeValue : + ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? + Element.collectTextNodesIgnoreClass(node, className) : '')); + }).flatten().join(''); +} + +Element.setContentZoom = function(element, percent) { + element = $(element); + element.setStyle({fontSize: (percent/100) + 'em'}); + if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0); + return element; +} + +Element.getOpacity = function(element){ + return $(element).getStyle('opacity'); +} + +Element.setOpacity = function(element, value){ + return $(element).setStyle({opacity:value}); +} + +Element.getInlineOpacity = function(element){ + return $(element).style.opacity || ''; +} + +Element.forceRerendering = function(element) { + try { + element = $(element); + var n = document.createTextNode(' '); + element.appendChild(n); + element.removeChild(n); + } catch(e) { } +}; + +/*--------------------------------------------------------------------------*/ + +Array.prototype.call = function() { + var args = arguments; + this.each(function(f){ f.apply(this, args) }); +} + +/*--------------------------------------------------------------------------*/ + +var Effect = { + _elementDoesNotExistError: { + name: 'ElementDoesNotExistError', + message: 'The specified DOM element does not exist, but is required for this effect to operate' + }, + tagifyText: function(element) { + if(typeof Builder == 'undefined') + throw("Effect.tagifyText requires including script.aculo.us' builder.js library"); + + var tagifyStyle = 'position:relative'; + if(/MSIE/.test(navigator.userAgent) && !window.opera) tagifyStyle += ';zoom:1'; + + element = $(element); + $A(element.childNodes).each( function(child) { + if(child.nodeType==3) { + child.nodeValue.toArray().each( function(character) { + element.insertBefore( + Builder.node('span',{style: tagifyStyle}, + character == ' ' ? String.fromCharCode(160) : character), + child); + }); + Element.remove(child); + } + }); + }, + multiple: function(element, effect) { + var elements; + if(((typeof element == 'object') || + (typeof element == 'function')) && + (element.length)) + elements = element; + else + elements = $(element).childNodes; + + var options = Object.extend({ + speed: 0.1, + delay: 0.0 + }, arguments[2] || {}); + var masterDelay = options.delay; + + $A(elements).each( function(element, index) { + new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay })); + }); + }, + PAIRS: { + 'slide': ['SlideDown','SlideUp'], + 'blind': ['BlindDown','BlindUp'], + 'appear': ['Appear','Fade'] + }, + toggle: function(element, effect) { + element = $(element); + effect = (effect || 'appear').toLowerCase(); + var options = Object.extend({ + queue: { position:'end', scope:(element.id || 'global'), limit: 1 } + }, arguments[2] || {}); + Effect[element.visible() ? + Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options); + } +}; + +var Effect2 = Effect; // deprecated + +/* ------------- transitions ------------- */ + +Effect.Transitions = { + linear: Prototype.K, + sinoidal: function(pos) { + return (-Math.cos(pos*Math.PI)/2) + 0.5; + }, + reverse: function(pos) { + return 1-pos; + }, + flicker: function(pos) { + return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4; + }, + wobble: function(pos) { + return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5; + }, + pulse: function(pos, pulses) { + pulses = pulses || 5; + return ( + Math.round((pos % (1/pulses)) * pulses) == 0 ? + ((pos * pulses * 2) - Math.floor(pos * pulses * 2)) : + 1 - ((pos * pulses * 2) - Math.floor(pos * pulses * 2)) + ); + }, + none: function(pos) { + return 0; + }, + full: function(pos) { + return 1; + } +}; + +/* ------------- core effects ------------- */ + +Effect.ScopedQueue = Class.create(); +Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), { + initialize: function() { + this.effects = []; + this.interval = null; + }, + _each: function(iterator) { + this.effects._each(iterator); + }, + add: function(effect) { + var timestamp = new Date().getTime(); + + var position = (typeof effect.options.queue == 'string') ? + effect.options.queue : effect.options.queue.position; + + switch(position) { + case 'front': + // move unstarted effects after this effect + this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) { + e.startOn += effect.finishOn; + e.finishOn += effect.finishOn; + }); + break; + case 'with-last': + timestamp = this.effects.pluck('startOn').max() || timestamp; + break; + case 'end': + // start effect after last queued effect has finished + timestamp = this.effects.pluck('finishOn').max() || timestamp; + break; + } + + effect.startOn += timestamp; + effect.finishOn += timestamp; + + if(!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit)) + this.effects.push(effect); + + if(!this.interval) + this.interval = setInterval(this.loop.bind(this), 15); + }, + remove: function(effect) { + this.effects = this.effects.reject(function(e) { return e==effect }); + if(this.effects.length == 0) { + clearInterval(this.interval); + this.interval = null; + } + }, + loop: function() { + var timePos = new Date().getTime(); + for(var i=0, len=this.effects.length;i= this.startOn) { + if(timePos >= this.finishOn) { + this.render(1.0); + this.cancel(); + this.event('beforeFinish'); + if(this.finish) this.finish(); + this.event('afterFinish'); + return; + } + var pos = (timePos - this.startOn) / (this.finishOn - this.startOn); + var frame = Math.round(pos * this.options.fps * this.options.duration); + if(frame > this.currentFrame) { + this.render(pos); + this.currentFrame = frame; + } + } + }, + render: function(pos) { + if(this.state == 'idle') { + this.state = 'running'; + this.event('beforeSetup'); + if(this.setup) this.setup(); + this.event('afterSetup'); + } + if(this.state == 'running') { + if(this.options.transition) pos = this.options.transition(pos); + pos *= (this.options.to-this.options.from); + pos += this.options.from; + this.position = pos; + this.event('beforeUpdate'); + if(this.update) this.update(pos); + this.event('afterUpdate'); + } + }, + cancel: function() { + if(!this.options.sync) + Effect.Queues.get(typeof this.options.queue == 'string' ? + 'global' : this.options.queue.scope).remove(this); + this.state = 'finished'; + }, + event: function(eventName) { + if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this); + if(this.options[eventName]) this.options[eventName](this); + }, + inspect: function() { + var data = $H(); + for(property in this) + if(typeof this[property] != 'function') data[property] = this[property]; + return '#'; + } +} + +Effect.Parallel = Class.create(); +Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), { + initialize: function(effects) { + this.effects = effects || []; + this.start(arguments[1]); + }, + update: function(position) { + this.effects.invoke('render', position); + }, + finish: function(position) { + this.effects.each( function(effect) { + effect.render(1.0); + effect.cancel(); + effect.event('beforeFinish'); + if(effect.finish) effect.finish(position); + effect.event('afterFinish'); + }); + } +}); + +Effect.Event = Class.create(); +Object.extend(Object.extend(Effect.Event.prototype, Effect.Base.prototype), { + initialize: function() { + var options = Object.extend({ + duration: 0 + }, arguments[0] || {}); + this.start(options); + }, + update: Prototype.emptyFunction +}); + +Effect.Opacity = Class.create(); +Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), { + initialize: function(element) { + this.element = $(element); + if(!this.element) throw(Effect._elementDoesNotExistError); + // make this work on IE on elements without 'layout' + if(/MSIE/.test(navigator.userAgent) && !window.opera && (!this.element.currentStyle.hasLayout)) + this.element.setStyle({zoom: 1}); + var options = Object.extend({ + from: this.element.getOpacity() || 0.0, + to: 1.0 + }, arguments[1] || {}); + this.start(options); + }, + update: function(position) { + this.element.setOpacity(position); + } +}); + +Effect.Move = Class.create(); +Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), { + initialize: function(element) { + this.element = $(element); + if(!this.element) throw(Effect._elementDoesNotExistError); + var options = Object.extend({ + x: 0, + y: 0, + mode: 'relative' + }, arguments[1] || {}); + this.start(options); + }, + setup: function() { + // Bug in Opera: Opera returns the "real" position of a static element or + // relative element that does not have top/left explicitly set. + // ==> Always set top and left for position relative elements in your stylesheets + // (to 0 if you do not need them) + this.element.makePositioned(); + this.originalLeft = parseFloat(this.element.getStyle('left') || '0'); + this.originalTop = parseFloat(this.element.getStyle('top') || '0'); + if(this.options.mode == 'absolute') { + // absolute movement, so we need to calc deltaX and deltaY + this.options.x = this.options.x - this.originalLeft; + this.options.y = this.options.y - this.originalTop; + } + }, + update: function(position) { + this.element.setStyle({ + left: Math.round(this.options.x * position + this.originalLeft) + 'px', + top: Math.round(this.options.y * position + this.originalTop) + 'px' + }); + } +}); + +// for backwards compatibility +Effect.MoveBy = function(element, toTop, toLeft) { + return new Effect.Move(element, + Object.extend({ x: toLeft, y: toTop }, arguments[3] || {})); +}; + +Effect.Scale = Class.create(); +Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), { + initialize: function(element, percent) { + this.element = $(element); + if(!this.element) throw(Effect._elementDoesNotExistError); + var options = Object.extend({ + scaleX: true, + scaleY: true, + scaleContent: true, + scaleFromCenter: false, + scaleMode: 'box', // 'box' or 'contents' or {} with provided values + scaleFrom: 100.0, + scaleTo: percent + }, arguments[2] || {}); + this.start(options); + }, + setup: function() { + this.restoreAfterFinish = this.options.restoreAfterFinish || false; + this.elementPositioning = this.element.getStyle('position'); + + this.originalStyle = {}; + ['top','left','width','height','fontSize'].each( function(k) { + this.originalStyle[k] = this.element.style[k]; + }.bind(this)); + + this.originalTop = this.element.offsetTop; + this.originalLeft = this.element.offsetLeft; + + var fontSize = this.element.getStyle('font-size') || '100%'; + ['em','px','%','pt'].each( function(fontSizeType) { + if(fontSize.indexOf(fontSizeType)>0) { + this.fontSize = parseFloat(fontSize); + this.fontSizeType = fontSizeType; + } + }.bind(this)); + + this.factor = (this.options.scaleTo - this.options.scaleFrom)/100; + + this.dims = null; + if(this.options.scaleMode=='box') + this.dims = [this.element.offsetHeight, this.element.offsetWidth]; + if(/^content/.test(this.options.scaleMode)) + this.dims = [this.element.scrollHeight, this.element.scrollWidth]; + if(!this.dims) + this.dims = [this.options.scaleMode.originalHeight, + this.options.scaleMode.originalWidth]; + }, + update: function(position) { + var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position); + if(this.options.scaleContent && this.fontSize) + this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType }); + this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale); + }, + finish: function(position) { + if(this.restoreAfterFinish) this.element.setStyle(this.originalStyle); + }, + setDimensions: function(height, width) { + var d = {}; + if(this.options.scaleX) d.width = Math.round(width) + 'px'; + if(this.options.scaleY) d.height = Math.round(height) + 'px'; + if(this.options.scaleFromCenter) { + var topd = (height - this.dims[0])/2; + var leftd = (width - this.dims[1])/2; + if(this.elementPositioning == 'absolute') { + if(this.options.scaleY) d.top = this.originalTop-topd + 'px'; + if(this.options.scaleX) d.left = this.originalLeft-leftd + 'px'; + } else { + if(this.options.scaleY) d.top = -topd + 'px'; + if(this.options.scaleX) d.left = -leftd + 'px'; + } + } + this.element.setStyle(d); + } +}); + +Effect.Highlight = Class.create(); +Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), { + initialize: function(element) { + this.element = $(element); + if(!this.element) throw(Effect._elementDoesNotExistError); + var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {}); + this.start(options); + }, + setup: function() { + // Prevent executing on elements not in the layout flow + if(this.element.getStyle('display')=='none') { this.cancel(); return; } + // Disable background image during the effect + this.oldStyle = {}; + if (!this.options.keepBackgroundImage) { + this.oldStyle.backgroundImage = this.element.getStyle('background-image'); + this.element.setStyle({backgroundImage: 'none'}); + } + if(!this.options.endcolor) + this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff'); + if(!this.options.restorecolor) + this.options.restorecolor = this.element.getStyle('background-color'); + // init color calculations + this._base = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this)); + this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this)); + }, + update: function(position) { + this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){ + return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) }); + }, + finish: function() { + this.element.setStyle(Object.extend(this.oldStyle, { + backgroundColor: this.options.restorecolor + })); + } +}); + +Effect.ScrollTo = Class.create(); +Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), { + initialize: function(element) { + this.element = $(element); + this.start(arguments[1] || {}); + }, + setup: function() { + Position.prepare(); + var offsets = Position.cumulativeOffset(this.element); + if(this.options.offset) offsets[1] += this.options.offset; + var max = window.innerHeight ? + window.height - window.innerHeight : + document.body.scrollHeight - + (document.documentElement.clientHeight ? + document.documentElement.clientHeight : document.body.clientHeight); + this.scrollStart = Position.deltaY; + this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart; + }, + update: function(position) { + Position.prepare(); + window.scrollTo(Position.deltaX, + this.scrollStart + (position*this.delta)); + } +}); + +/* ------------- combination effects ------------- */ + +Effect.Fade = function(element) { + element = $(element); + var oldOpacity = element.getInlineOpacity(); + var options = Object.extend({ + from: element.getOpacity() || 1.0, + to: 0.0, + afterFinishInternal: function(effect) { + if(effect.options.to!=0) return; + effect.element.hide().setStyle({opacity: oldOpacity}); + }}, arguments[1] || {}); + return new Effect.Opacity(element,options); +} + +Effect.Appear = function(element) { + element = $(element); + var options = Object.extend({ + from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0), + to: 1.0, + // force Safari to render floated elements properly + afterFinishInternal: function(effect) { + effect.element.forceRerendering(); + }, + beforeSetup: function(effect) { + effect.element.setOpacity(effect.options.from).show(); + }}, arguments[1] || {}); + return new Effect.Opacity(element,options); +} + +Effect.Puff = function(element) { + element = $(element); + var oldStyle = { + opacity: element.getInlineOpacity(), + position: element.getStyle('position'), + top: element.style.top, + left: element.style.left, + width: element.style.width, + height: element.style.height + }; + return new Effect.Parallel( + [ new Effect.Scale(element, 200, + { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), + new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], + Object.extend({ duration: 1.0, + beforeSetupInternal: function(effect) { + Position.absolutize(effect.effects[0].element) + }, + afterFinishInternal: function(effect) { + effect.effects[0].element.hide().setStyle(oldStyle); } + }, arguments[1] || {}) + ); +} + +Effect.BlindUp = function(element) { + element = $(element); + element.makeClipping(); + return new Effect.Scale(element, 0, + Object.extend({ scaleContent: false, + scaleX: false, + restoreAfterFinish: true, + afterFinishInternal: function(effect) { + effect.element.hide().undoClipping(); + } + }, arguments[1] || {}) + ); +} + +Effect.BlindDown = function(element) { + element = $(element); + var elementDimensions = element.getDimensions(); + return new Effect.Scale(element, 100, Object.extend({ + scaleContent: false, + scaleX: false, + scaleFrom: 0, + scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, + restoreAfterFinish: true, + afterSetup: function(effect) { + effect.element.makeClipping().setStyle({height: '0px'}).show(); + }, + afterFinishInternal: function(effect) { + effect.element.undoClipping(); + } + }, arguments[1] || {})); +} + +Effect.SwitchOff = function(element) { + element = $(element); + var oldOpacity = element.getInlineOpacity(); + return new Effect.Appear(element, Object.extend({ + duration: 0.4, + from: 0, + transition: Effect.Transitions.flicker, + afterFinishInternal: function(effect) { + new Effect.Scale(effect.element, 1, { + duration: 0.3, scaleFromCenter: true, + scaleX: false, scaleContent: false, restoreAfterFinish: true, + beforeSetup: function(effect) { + effect.element.makePositioned().makeClipping(); + }, + afterFinishInternal: function(effect) { + effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity}); + } + }) + } + }, arguments[1] || {})); +} + +Effect.DropOut = function(element) { + element = $(element); + var oldStyle = { + top: element.getStyle('top'), + left: element.getStyle('left'), + opacity: element.getInlineOpacity() }; + return new Effect.Parallel( + [ new Effect.Move(element, {x: 0, y: 100, sync: true }), + new Effect.Opacity(element, { sync: true, to: 0.0 }) ], + Object.extend( + { duration: 0.5, + beforeSetup: function(effect) { + effect.effects[0].element.makePositioned(); + }, + afterFinishInternal: function(effect) { + effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle); + } + }, arguments[1] || {})); +} + +Effect.Shake = function(element) { + element = $(element); + var oldStyle = { + top: element.getStyle('top'), + left: element.getStyle('left') }; + return new Effect.Move(element, + { x: 20, y: 0, duration: 0.05, afterFinishInternal: function(effect) { + new Effect.Move(effect.element, + { x: -40, y: 0, duration: 0.1, afterFinishInternal: function(effect) { + new Effect.Move(effect.element, + { x: 40, y: 0, duration: 0.1, afterFinishInternal: function(effect) { + new Effect.Move(effect.element, + { x: -40, y: 0, duration: 0.1, afterFinishInternal: function(effect) { + new Effect.Move(effect.element, + { x: 40, y: 0, duration: 0.1, afterFinishInternal: function(effect) { + new Effect.Move(effect.element, + { x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) { + effect.element.undoPositioned().setStyle(oldStyle); + }}) }}) }}) }}) }}) }}); +} + +Effect.SlideDown = function(element) { + element = $(element).cleanWhitespace(); + // SlideDown need to have the content of the element wrapped in a container element with fixed height! + var oldInnerBottom = element.down().getStyle('bottom'); + var elementDimensions = element.getDimensions(); + return new Effect.Scale(element, 100, Object.extend({ + scaleContent: false, + scaleX: false, + scaleFrom: window.opera ? 0 : 1, + scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, + restoreAfterFinish: true, + afterSetup: function(effect) { + effect.element.makePositioned(); + effect.element.down().makePositioned(); + if(window.opera) effect.element.setStyle({top: ''}); + effect.element.makeClipping().setStyle({height: '0px'}).show(); + }, + afterUpdateInternal: function(effect) { + effect.element.down().setStyle({bottom: + (effect.dims[0] - effect.element.clientHeight) + 'px' }); + }, + afterFinishInternal: function(effect) { + effect.element.undoClipping().undoPositioned(); + effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); } + }, arguments[1] || {}) + ); +} + +Effect.SlideUp = function(element) { + element = $(element).cleanWhitespace(); + var oldInnerBottom = element.down().getStyle('bottom'); + return new Effect.Scale(element, window.opera ? 0 : 1, + Object.extend({ scaleContent: false, + scaleX: false, + scaleMode: 'box', + scaleFrom: 100, + restoreAfterFinish: true, + beforeStartInternal: function(effect) { + effect.element.makePositioned(); + effect.element.down().makePositioned(); + if(window.opera) effect.element.setStyle({top: ''}); + effect.element.makeClipping().show(); + }, + afterUpdateInternal: function(effect) { + effect.element.down().setStyle({bottom: + (effect.dims[0] - effect.element.clientHeight) + 'px' }); + }, + afterFinishInternal: function(effect) { + effect.element.hide().undoClipping().undoPositioned().setStyle({bottom: oldInnerBottom}); + effect.element.down().undoPositioned(); + } + }, arguments[1] || {}) + ); +} + +// Bug in opera makes the TD containing this element expand for a instance after finish +Effect.Squish = function(element) { + return new Effect.Scale(element, window.opera ? 1 : 0, { + restoreAfterFinish: true, + beforeSetup: function(effect) { + effect.element.makeClipping(); + }, + afterFinishInternal: function(effect) { + effect.element.hide().undoClipping(); + } + }); +} + +Effect.Grow = function(element) { + element = $(element); + var options = Object.extend({ + direction: 'center', + moveTransition: Effect.Transitions.sinoidal, + scaleTransition: Effect.Transitions.sinoidal, + opacityTransition: Effect.Transitions.full + }, arguments[1] || {}); + var oldStyle = { + top: element.style.top, + left: element.style.left, + height: element.style.height, + width: element.style.width, + opacity: element.getInlineOpacity() }; + + var dims = element.getDimensions(); + var initialMoveX, initialMoveY; + var moveX, moveY; + + switch (options.direction) { + case 'top-left': + initialMoveX = initialMoveY = moveX = moveY = 0; + break; + case 'top-right': + initialMoveX = dims.width; + initialMoveY = moveY = 0; + moveX = -dims.width; + break; + case 'bottom-left': + initialMoveX = moveX = 0; + initialMoveY = dims.height; + moveY = -dims.height; + break; + case 'bottom-right': + initialMoveX = dims.width; + initialMoveY = dims.height; + moveX = -dims.width; + moveY = -dims.height; + break; + case 'center': + initialMoveX = dims.width / 2; + initialMoveY = dims.height / 2; + moveX = -dims.width / 2; + moveY = -dims.height / 2; + break; + } + + return new Effect.Move(element, { + x: initialMoveX, + y: initialMoveY, + duration: 0.01, + beforeSetup: function(effect) { + effect.element.hide().makeClipping().makePositioned(); + }, + afterFinishInternal: function(effect) { + new Effect.Parallel( + [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }), + new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }), + new Effect.Scale(effect.element, 100, { + scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, + sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true}) + ], Object.extend({ + beforeSetup: function(effect) { + effect.effects[0].element.setStyle({height: '0px'}).show(); + }, + afterFinishInternal: function(effect) { + effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle); + } + }, options) + ) + } + }); +} + +Effect.Shrink = function(element) { + element = $(element); + var options = Object.extend({ + direction: 'center', + moveTransition: Effect.Transitions.sinoidal, + scaleTransition: Effect.Transitions.sinoidal, + opacityTransition: Effect.Transitions.none + }, arguments[1] || {}); + var oldStyle = { + top: element.style.top, + left: element.style.left, + height: element.style.height, + width: element.style.width, + opacity: element.getInlineOpacity() }; + + var dims = element.getDimensions(); + var moveX, moveY; + + switch (options.direction) { + case 'top-left': + moveX = moveY = 0; + break; + case 'top-right': + moveX = dims.width; + moveY = 0; + break; + case 'bottom-left': + moveX = 0; + moveY = dims.height; + break; + case 'bottom-right': + moveX = dims.width; + moveY = dims.height; + break; + case 'center': + moveX = dims.width / 2; + moveY = dims.height / 2; + break; + } + + return new Effect.Parallel( + [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }), + new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}), + new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }) + ], Object.extend({ + beforeStartInternal: function(effect) { + effect.effects[0].element.makePositioned().makeClipping(); + }, + afterFinishInternal: function(effect) { + effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); } + }, options) + ); +} + +Effect.Pulsate = function(element) { + element = $(element); + var options = arguments[1] || {}; + var oldOpacity = element.getInlineOpacity(); + var transition = options.transition || Effect.Transitions.sinoidal; + var reverser = function(pos){ return transition(1-Effect.Transitions.pulse(pos, options.pulses)) }; + reverser.bind(transition); + return new Effect.Opacity(element, + Object.extend(Object.extend({ duration: 2.0, from: 0, + afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); } + }, options), {transition: reverser})); +} + +Effect.Fold = function(element) { + element = $(element); + var oldStyle = { + top: element.style.top, + left: element.style.left, + width: element.style.width, + height: element.style.height }; + element.makeClipping(); + return new Effect.Scale(element, 5, Object.extend({ + scaleContent: false, + scaleX: false, + afterFinishInternal: function(effect) { + new Effect.Scale(element, 1, { + scaleContent: false, + scaleY: false, + afterFinishInternal: function(effect) { + effect.element.hide().undoClipping().setStyle(oldStyle); + } }); + }}, arguments[1] || {})); +}; + +Effect.Morph = Class.create(); +Object.extend(Object.extend(Effect.Morph.prototype, Effect.Base.prototype), { + initialize: function(element) { + this.element = $(element); + if(!this.element) throw(Effect._elementDoesNotExistError); + var options = Object.extend({ + style: {} + }, arguments[1] || {}); + if (typeof options.style == 'string') { + if(options.style.indexOf(':') == -1) { + var cssText = '', selector = '.' + options.style; + $A(document.styleSheets).reverse().each(function(styleSheet) { + if (styleSheet.cssRules) cssRules = styleSheet.cssRules; + else if (styleSheet.rules) cssRules = styleSheet.rules; + $A(cssRules).reverse().each(function(rule) { + if (selector == rule.selectorText) { + cssText = rule.style.cssText; + throw $break; + } + }); + if (cssText) throw $break; + }); + this.style = cssText.parseStyle(); + options.afterFinishInternal = function(effect){ + effect.element.addClassName(effect.options.style); + effect.transforms.each(function(transform) { + if(transform.style != 'opacity') + effect.element.style[transform.style.camelize()] = ''; + }); + } + } else this.style = options.style.parseStyle(); + } else this.style = $H(options.style) + this.start(options); + }, + setup: function(){ + function parseColor(color){ + if(!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff'; + color = color.parseColor(); + return $R(0,2).map(function(i){ + return parseInt( color.slice(i*2+1,i*2+3), 16 ) + }); + } + this.transforms = this.style.map(function(pair){ + var property = pair[0].underscore().dasherize(), value = pair[1], unit = null; + + if(value.parseColor('#zzzzzz') != '#zzzzzz') { + value = value.parseColor(); + unit = 'color'; + } else if(property == 'opacity') { + value = parseFloat(value); + if(/MSIE/.test(navigator.userAgent) && !window.opera && (!this.element.currentStyle.hasLayout)) + this.element.setStyle({zoom: 1}); + } else if(Element.CSS_LENGTH.test(value)) + var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/), + value = parseFloat(components[1]), unit = (components.length == 3) ? components[2] : null; + + var originalValue = this.element.getStyle(property); + return $H({ + style: property, + originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0), + targetValue: unit=='color' ? parseColor(value) : value, + unit: unit + }); + }.bind(this)).reject(function(transform){ + return ( + (transform.originalValue == transform.targetValue) || + ( + transform.unit != 'color' && + (isNaN(transform.originalValue) || isNaN(transform.targetValue)) + ) + ) + }); + }, + update: function(position) { + var style = $H(), value = null; + this.transforms.each(function(transform){ + value = transform.unit=='color' ? + $R(0,2).inject('#',function(m,v,i){ + return m+(Math.round(transform.originalValue[i]+ + (transform.targetValue[i] - transform.originalValue[i])*position)).toColorPart() }) : + transform.originalValue + Math.round( + ((transform.targetValue - transform.originalValue) * position) * 1000)/1000 + transform.unit; + style[transform.style] = value; + }); + this.element.setStyle(style); + } +}); + +Effect.Transform = Class.create(); +Object.extend(Effect.Transform.prototype, { + initialize: function(tracks){ + this.tracks = []; + this.options = arguments[1] || {}; + this.addTracks(tracks); + }, + addTracks: function(tracks){ + tracks.each(function(track){ + var data = $H(track).values().first(); + this.tracks.push($H({ + ids: $H(track).keys().first(), + effect: Effect.Morph, + options: { style: data } + })); + }.bind(this)); + return this; + }, + play: function(){ + return new Effect.Parallel( + this.tracks.map(function(track){ + var elements = [$(track.ids) || $$(track.ids)].flatten(); + return elements.map(function(e){ return new track.effect(e, Object.extend({ sync:true }, track.options)) }); + }).flatten(), + this.options + ); + } +}); + +Element.CSS_PROPERTIES = $w( + 'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' + + 'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' + + 'borderRightColor borderRightStyle borderRightWidth borderSpacing ' + + 'borderTopColor borderTopStyle borderTopWidth bottom clip color ' + + 'fontSize fontWeight height left letterSpacing lineHeight ' + + 'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+ + 'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' + + 'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' + + 'right textIndent top width wordSpacing zIndex'); + +Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/; + +String.prototype.parseStyle = function(){ + var element = Element.extend(document.createElement('div')); + element.innerHTML = '
'; + var style = element.down().style, styleRules = $H(); + + Element.CSS_PROPERTIES.each(function(property){ + if(style[property]) styleRules[property] = style[property]; + }); + if(/MSIE/.test(navigator.userAgent) && !window.opera && this.indexOf('opacity') > -1) { + styleRules.opacity = this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]; + } + return styleRules; +}; + +Element.morph = function(element, style) { + new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || {})); + return element; +}; + +['setOpacity','getOpacity','getInlineOpacity','forceRerendering','setContentZoom', + 'collectTextNodes','collectTextNodesIgnoreClass','morph'].each( + function(f) { Element.Methods[f] = Element[f]; } +); + +Element.Methods.visualEffect = function(element, effect, options) { + s = effect.gsub(/_/, '-').camelize(); + effect_class = s.charAt(0).toUpperCase() + s.substring(1); + new Effect[effect_class](element, options); + return $(element); +}; + +Element.addMethods(); \ No newline at end of file diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/images/chmod.png b/src/nhttpd/web/extentions/filemgr/files/httpd/images/chmod.png new file mode 100755 index 000000000..c88b945b0 Binary files /dev/null and b/src/nhttpd/web/extentions/filemgr/files/httpd/images/chmod.png differ diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/images/copy.gif b/src/nhttpd/web/extentions/filemgr/files/httpd/images/copy.gif new file mode 100755 index 000000000..dc146865c Binary files /dev/null and b/src/nhttpd/web/extentions/filemgr/files/httpd/images/copy.gif differ diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/images/cut.png b/src/nhttpd/web/extentions/filemgr/files/httpd/images/cut.png new file mode 100755 index 000000000..f215d6f6b Binary files /dev/null and b/src/nhttpd/web/extentions/filemgr/files/httpd/images/cut.png differ diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/images/dir_up.gif b/src/nhttpd/web/extentions/filemgr/files/httpd/images/dir_up.gif new file mode 100755 index 000000000..5394cc438 Binary files /dev/null and b/src/nhttpd/web/extentions/filemgr/files/httpd/images/dir_up.gif differ diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/images/download.png b/src/nhttpd/web/extentions/filemgr/files/httpd/images/download.png new file mode 100755 index 000000000..884ffd6f0 Binary files /dev/null and b/src/nhttpd/web/extentions/filemgr/files/httpd/images/download.png differ diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/images/film.png b/src/nhttpd/web/extentions/filemgr/files/httpd/images/film.png new file mode 100755 index 000000000..b0ce7bb19 Binary files /dev/null and b/src/nhttpd/web/extentions/filemgr/files/httpd/images/film.png differ diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/images/folder_add.png b/src/nhttpd/web/extentions/filemgr/files/httpd/images/folder_add.png new file mode 100755 index 000000000..529fe8fe0 Binary files /dev/null and b/src/nhttpd/web/extentions/filemgr/files/httpd/images/folder_add.png differ diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/images/ftype_file.png b/src/nhttpd/web/extentions/filemgr/files/httpd/images/ftype_file.png new file mode 100755 index 000000000..03ddd799f Binary files /dev/null and b/src/nhttpd/web/extentions/filemgr/files/httpd/images/ftype_file.png differ diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/images/ftype_folder.png b/src/nhttpd/web/extentions/filemgr/files/httpd/images/ftype_folder.png new file mode 100755 index 000000000..784e8fa48 Binary files /dev/null and b/src/nhttpd/web/extentions/filemgr/files/httpd/images/ftype_folder.png differ diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/images/ftype_link.png b/src/nhttpd/web/extentions/filemgr/files/httpd/images/ftype_link.png new file mode 100755 index 000000000..312eab091 Binary files /dev/null and b/src/nhttpd/web/extentions/filemgr/files/httpd/images/ftype_link.png differ diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/images/home.png b/src/nhttpd/web/extentions/filemgr/files/httpd/images/home.png new file mode 100755 index 000000000..fed62219f Binary files /dev/null and b/src/nhttpd/web/extentions/filemgr/files/httpd/images/home.png differ diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/images/package.png b/src/nhttpd/web/extentions/filemgr/files/httpd/images/package.png new file mode 100755 index 000000000..da3c2a2d7 Binary files /dev/null and b/src/nhttpd/web/extentions/filemgr/files/httpd/images/package.png differ diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/images/page_edit.png b/src/nhttpd/web/extentions/filemgr/files/httpd/images/page_edit.png new file mode 100755 index 000000000..046811ed7 Binary files /dev/null and b/src/nhttpd/web/extentions/filemgr/files/httpd/images/page_edit.png differ diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/images/paste.gif b/src/nhttpd/web/extentions/filemgr/files/httpd/images/paste.gif new file mode 100755 index 000000000..1b45000a0 Binary files /dev/null and b/src/nhttpd/web/extentions/filemgr/files/httpd/images/paste.gif differ diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/images/picture.png b/src/nhttpd/web/extentions/filemgr/files/httpd/images/picture.png new file mode 100755 index 000000000..4a158fef7 Binary files /dev/null and b/src/nhttpd/web/extentions/filemgr/files/httpd/images/picture.png differ diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/images/properties.gif b/src/nhttpd/web/extentions/filemgr/files/httpd/images/properties.gif new file mode 100755 index 000000000..963ead1c9 Binary files /dev/null and b/src/nhttpd/web/extentions/filemgr/files/httpd/images/properties.gif differ diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/images/rename.gif b/src/nhttpd/web/extentions/filemgr/files/httpd/images/rename.gif new file mode 100755 index 000000000..0b2bcc665 Binary files /dev/null and b/src/nhttpd/web/extentions/filemgr/files/httpd/images/rename.gif differ diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/images/save.png b/src/nhttpd/web/extentions/filemgr/files/httpd/images/save.png new file mode 100755 index 000000000..99d532e8b Binary files /dev/null and b/src/nhttpd/web/extentions/filemgr/files/httpd/images/save.png differ diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/images/text.png b/src/nhttpd/web/extentions/filemgr/files/httpd/images/text.png new file mode 100755 index 000000000..813f712f7 Binary files /dev/null and b/src/nhttpd/web/extentions/filemgr/files/httpd/images/text.png differ diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/images/upload.png b/src/nhttpd/web/extentions/filemgr/files/httpd/images/upload.png new file mode 100755 index 000000000..e4a1ecba1 Binary files /dev/null and b/src/nhttpd/web/extentions/filemgr/files/httpd/images/upload.png differ diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/images/work.gif b/src/nhttpd/web/extentions/filemgr/files/httpd/images/work.gif new file mode 100755 index 000000000..80ff48b3e Binary files /dev/null and b/src/nhttpd/web/extentions/filemgr/files/httpd/images/work.gif differ diff --git a/src/nhttpd/web/extentions/filemgr/files/httpd/scripts/Y_NAS.sh b/src/nhttpd/web/extentions/filemgr/files/httpd/scripts/Y_NAS.sh new file mode 100755 index 000000000..307bc3bb6 --- /dev/null +++ b/src/nhttpd/web/extentions/filemgr/files/httpd/scripts/Y_NAS.sh @@ -0,0 +1,72 @@ +#!/bin/sh +# ----------------------------------------------------------- +# yWeb Extension: Filemgr (by yjogol) +# yCVS: $Date: 2007-12-29 08:20:30 $ +# yCVS: $Revision: 1.1 $ +# ----------------------------------------------------------- + +# ----------------------------------------------------------- +# Main +# ----------------------------------------------------------- + +case "$1" in + list_users) + cat $fpasswd|sed 's/^\([^:]*\).*/\1
/' ;; + + filemgr_list) + shift 1 + ls -al $* ;; + + filemgr_chmod) + shift 1 + chmod $* + ;; + + filemgr_mkdir) + shift 1 + mkdir $* + ;; + + filemgr_rm) + shift 1 + rm -f $* + ;; + + filemgr_rmdir) + shift 1 + rm -rf $* + ;; + + filemgr_upload) + shift 1 + mv /tmp/upload.tmp "$1/$2" + rm -f /tmp/upload.tmp + ;; + + filemgr_ren) + shift 1 + mv -f $1 $2 + ;; + + filemgr_copy) + shift 1 + cp -r -f $1 $2 + ;; + nhttpd_can_sendall) + grep sendAll=true /var/tuxbox/config/nhttpd.conf + ;; + filemgr_check_movieplayer_xml) + shift 1 + grep "neutrino commandversion" $* + ;; + filemgr_vlc_file) + shift 1 + echo "$*" >/tmp/vlc.m3u + ;; + + *) + echo "[Y_NAS.sh] Parameter falsch: $*" ;; +esac + + + diff --git a/src/nhttpd/web/extentions/filemgr/install.inc b/src/nhttpd/web/extentions/filemgr/install.inc new file mode 100644 index 000000000..cf97d93ef --- /dev/null +++ b/src/nhttpd/web/extentions/filemgr/install.inc @@ -0,0 +1,20 @@ +# =========================================================== +# yWeb SDK: Extention Installer Include +# Extention Name: filemgr +# by yjogol +# ----------------------------------------------------------- +# $Date: 2007-12-29 10:11:37 $ +# $Revision: 1.2 $ +# =========================================================== + +yI_updatename="yWeb-Extension filemgr (02.02.2008)" +yI_Ext_Tag="filemgr" +yI_Ext_Version="1-0-0" +yI_install_log="$y_path_tmp/install_filemgr.log" +yI_uninstaller="filemgr_uninstall.sh" + +install() +{ + cp -r /tmp/files/httpd/* $y_ywebover_dir + chmod 755 $y_ywebover_dir/scripts/*.sh +} diff --git a/src/nhttpd/web/extentions/filemgr/install.sh b/src/nhttpd/web/extentions/filemgr/install.sh new file mode 100755 index 000000000..2ce6a4f0e --- /dev/null +++ b/src/nhttpd/web/extentions/filemgr/install.sh @@ -0,0 +1,143 @@ +# =========================================================== +# yWeb Extension: Install an Extension +# by yjogol +# ----------------------------------------------------------- +# $Date: 2007-12-29 10:11:37 $ +# $Revision: 1.3 $ +# ----------------------------------------------------------- +# Script starts in /tmp +# =========================================================== + +# ----------------------------------------------------------- +# Installer Configs +# ----------------------------------------------------------- +yI_Version="$Revision: 1.3 $" + +# ----------------------------------------------------------- +# Dirs +# ----------------------------------------------------------- +y_path_usrbin="/var/bin" +y_path_config="/var/tuxbox/config" +y_path_tmp="/tmp" +y_ywebover_dir="/var/httpd" +y_ext_conf_dir="$y_path_config/ext" + +# ----------------------------------------------------------- +# Files +# ----------------------------------------------------------- +y_config_Y_Web="$y_path_config/Y-Web.conf" +y_config_nhttpd="$y_path_config/nhttpd.conf" +y_config_neutrino="$y_path_config/neutrino.conf" +y_upload_file="$y_path_tmp/upload.tmp" + +# =========================================================== +# config-Dateien - lesen / schreiben +# (Zeilenformat: VarName=VarValue) +# =========================================================== +cfg="" +# ----------------------------------------------------------- +# config-Datei lesen/cachen (Inhalt in $cfg) +# $1=config-Filename +# ----------------------------------------------------------- +config_open() +{ + cfg="" + cfg=`cat $1` +} +# ----------------------------------------------------------- +# config-Datei schreiben (Inhalt in $cfg) +# $1=config-Filename +# ----------------------------------------------------------- +config_write() +{ + echo "$cfg" >$1 +} +# ----------------------------------------------------------- +# Variablenwert zurueckgeben (vorher open) +# $1=VarName +# ----------------------------------------------------------- +config_get_value() +{ + cmd="sed -n /^$1=/p" + tmp=`echo "$cfg" | $cmd` + cmd="sed -e s/^$1=//1" + tmp=`echo "$tmp" | $cmd` + echo $tmp +} +# ----------------------------------------------------------- +# Variablenwert zurueckgeben (ohne open) +# $1=config-Filename +# $2=VarName +# ----------------------------------------------------------- +config_get_value_direct() +{ + config_open $1 + config_get_value $2 +} +# ----------------------------------------------------------- +# Variablenwert setzen (vorher open) +# $1=VarName) +# $2=VarValue +# ----------------------------------------------------------- +config_set_value() +{ + tmp=`echo "$cfg" | sed -n "/^$1=.*/p"` + if [ "$tmp" = "" ] + then + cfg=`echo -e "$cfg\n$1=$2"` + else + cmd="sed -e s/^$1=.*/$1=$2/g" + cfg=`echo "$cfg" | $cmd` + fi +} +# ----------------------------------------------------------- +# Variablenwert zurueckgeben (ohne open) +# $1=config-Filename +# $2=VarName) +# $3=VarValue +# ----------------------------------------------------------- +config_set_value_direct() +{ + config_open $1 + config_set_value $2 $3 + config_write $1 +} + +# =========================================================== +# Initialization +# =========================================================== +. ./install.inc +hp=`config_get_value_direct "$y_config_nhttpd" "WebsiteMain.override_directory"` +if [ "$hp" != "" ]; then + y_ywebover_dir=`echo "$hp"` +fi +mkdir -p $y_ywebover_dir +chmod -R oug+rw $y_ywebover_dir + +# ----------------------------------------------------------- +# prepare log +# ----------------------------------------------------------- +date +%y%m%d_%H%M%S >"$yI_install_log" +echo "" >>yI_install_log +echo "installing $yI_updatename [$yI_Ext_Tag/$yI_Ext_Version]" >>"yI_install_log" +echo "installdir: $y_ywebover_dir" + +# ----------------------------------------------------------- +# Install (from install.inc) +# ----------------------------------------------------------- +install + +# ----------------------------------------------------------- +# finishing +# ----------------------------------------------------------- +mkdir -p $y_ext_conf_dir +chmod oug+rw $y_ext_conf_dir +chmod 755 ./uninstall* +cp ./uninstall.sh "$y_ext_conf_dir/" +cp ./*uninstall.inc "$y_ext_conf_dir/" + +# ----------------------------------------------------------- +# Clean Up +# ----------------------------------------------------------- +cd /tmp +rm -r /tmp/files diff --git a/src/nhttpd/web/extentions/filemgr/uninstall.sh b/src/nhttpd/web/extentions/filemgr/uninstall.sh new file mode 100755 index 000000000..ec83bbc95 --- /dev/null +++ b/src/nhttpd/web/extentions/filemgr/uninstall.sh @@ -0,0 +1,136 @@ +# =========================================================== +# yWeb Extension: Unnstall an Extension +# by yjogol +# ----------------------------------------------------------- +# $Date: 2007-12-29 17:08:16 $ +# $Revision: 1.4 $ +# ----------------------------------------------------------- +# Script starts in /tmp +# =========================================================== + +# ----------------------------------------------------------- +# Installer Configs +# ----------------------------------------------------------- +yI_Version="$Revision: 1.4 $" + +# ----------------------------------------------------------- +# Dirs +# ----------------------------------------------------------- +y_path_usrbin="/var/bin" +y_path_config="/var/tuxbox/config" +y_path_tmp="/tmp" +y_ywebover_dir="/var/httpd" +y_ext_conf_dir="$y_path_config/ext" + +# ----------------------------------------------------------- +# Files +# ----------------------------------------------------------- +y_config_Y_Web="$y_path_config/Y-Web.conf" +y_config_nhttpd="$y_path_config/nhttpd.conf" +y_config_neutrino="$y_path_config/neutrino.conf" +y_upload_file="$y_path_tmp/upload.tmp" + +# =========================================================== +# config-Dateien - lesen / schreiben +# (Zeilenformat: VarName=VarValue) +# =========================================================== +cfg="" +# ----------------------------------------------------------- +# config-Datei lesen/cachen (Inhalt in $cfg) +# $1=config-Filename +# ----------------------------------------------------------- +config_open() +{ + cfg="" + cfg=`cat $1` +} +# ----------------------------------------------------------- +# config-Datei schreiben (Inhalt in $cfg) +# $1=config-Filename +# ----------------------------------------------------------- +config_write() +{ + echo "$cfg" >$1 +} +# ----------------------------------------------------------- +# Variablenwert zurueckgeben (vorher open) +# $1=VarName +# ----------------------------------------------------------- +config_get_value() +{ + cmd="sed -n /^$1=/p" + tmp=`echo "$cfg" | $cmd` + cmd="sed -e s/^$1=//1" + tmp=`echo "$tmp" | $cmd` + echo $tmp +} +# ----------------------------------------------------------- +# Variablenwert zurueckgeben (ohne open) +# $1=config-Filename +# $2=VarName +# ----------------------------------------------------------- +config_get_value_direct() +{ + config_open $1 + config_get_value $2 +} +# ----------------------------------------------------------- +# Variablenwert setzen (vorher open) +# $1=VarName) +# $2=VarValue +# ----------------------------------------------------------- +config_set_value() +{ + tmp=`echo "$cfg" | sed -n "/^$1=.*/p"` + if [ "$tmp" = "" ] + then + cfg=`echo -e "$cfg\n$1=$2"` + else + cmd="sed -e s/^$1=.*/$1=$2/g" + cfg=`echo "$cfg" | $cmd` + fi +} +# ----------------------------------------------------------- +# Variablenwert zurueckgeben (ohne open) +# $1=config-Filename +# $2=VarName) +# $3=VarValue +# ----------------------------------------------------------- +config_set_value_direct() +{ + config_open $1 + config_set_value $2 $3 + config_write $1 +} + +# =========================================================== +# Initialization +# =========================================================== +. $y_ext_conf_dir/$1 +hp=`config_get_value_direct "$y_config_nhttpd" "WebsiteMain.override_directory"` +if [ "$hp" != "" ]; then + y_ywebover_dir=`echo "$hp"` +fi +mkdir -p $y_ywebover_dir + +# ----------------------------------------------------------- +# prepare log +# ----------------------------------------------------------- +date +%y%m%d_%H%M%S >"$yI_uninstall_log" +echo "" >>"$yI_uninstall_log" +echo "uninstalling $yI_updatename [$yI_Ext_Tag/$yI_Ext_Version]" >>"$yI_uninstall_log" +#echo "installdir: $y_ywebover_dir" + +# ----------------------------------------------------------- +# Uninstall (from uninstal_.inc) +# ----------------------------------------------------------- +uninstall + +# ----------------------------------------------------------- +# finishing +# ----------------------------------------------------------- +rm $y_ext_conf_dir/$1 + +# ----------------------------------------------------------- +# Clean Up +# -----------------------------------------------------------