From 2b1933f5f1b0bb1712cbf86d63178db7dc1e0b88 Mon Sep 17 00:00:00 2001 From: svenhoefer Date: Mon, 25 Aug 2014 11:07:42 +0200 Subject: [PATCH] - yWeb: add filemanager extention source --- .../extentions/filemgr/filemgr_uninstall.inc | 44 + .../filemgr/files/httpd/Y_Ext_Filemgr.css | 56 + .../filemgr/files/httpd/Y_Ext_Filemgr.yhtm | 725 +++++++++++ .../files/httpd/Y_Ext_Filemgr_Edit.yhtm | 69 ++ .../files/httpd/Y_Ext_Filemgr_blocks.txt | 3 + .../filemgr/files/httpd/accordion.js | 55 + .../extentions/filemgr/files/httpd/effects.js | 1090 +++++++++++++++++ .../filemgr/files/httpd/images/chmod.png | Bin 0 -> 785 bytes .../filemgr/files/httpd/images/copy.gif | Bin 0 -> 263 bytes .../filemgr/files/httpd/images/cut.png | Bin 0 -> 648 bytes .../filemgr/files/httpd/images/dir_up.gif | Bin 0 -> 609 bytes .../filemgr/files/httpd/images/download.png | Bin 0 -> 523 bytes .../filemgr/files/httpd/images/film.png | Bin 0 -> 653 bytes .../filemgr/files/httpd/images/folder_add.png | Bin 0 -> 668 bytes .../filemgr/files/httpd/images/ftype_file.png | Bin 0 -> 635 bytes .../files/httpd/images/ftype_folder.png | Bin 0 -> 537 bytes .../filemgr/files/httpd/images/ftype_link.png | Bin 0 -> 830 bytes .../filemgr/files/httpd/images/home.png | Bin 0 -> 806 bytes .../filemgr/files/httpd/images/package.png | Bin 0 -> 853 bytes .../filemgr/files/httpd/images/page_edit.png | Bin 0 -> 807 bytes .../filemgr/files/httpd/images/paste.gif | Bin 0 -> 286 bytes .../filemgr/files/httpd/images/picture.png | Bin 0 -> 606 bytes .../filemgr/files/httpd/images/properties.gif | Bin 0 -> 214 bytes .../filemgr/files/httpd/images/rename.gif | Bin 0 -> 345 bytes .../filemgr/files/httpd/images/save.png | Bin 0 -> 620 bytes .../filemgr/files/httpd/images/text.png | Bin 0 -> 342 bytes .../filemgr/files/httpd/images/upload.png | Bin 0 -> 516 bytes .../filemgr/files/httpd/images/work.gif | Bin 0 -> 722 bytes .../filemgr/files/httpd/scripts/Y_NAS.sh | 72 ++ src/nhttpd/web/extentions/filemgr/install.inc | 20 + src/nhttpd/web/extentions/filemgr/install.sh | 143 +++ .../web/extentions/filemgr/uninstall.sh | 136 ++ 32 files changed, 2413 insertions(+) create mode 100644 src/nhttpd/web/extentions/filemgr/filemgr_uninstall.inc create mode 100644 src/nhttpd/web/extentions/filemgr/files/httpd/Y_Ext_Filemgr.css create mode 100755 src/nhttpd/web/extentions/filemgr/files/httpd/Y_Ext_Filemgr.yhtm create mode 100644 src/nhttpd/web/extentions/filemgr/files/httpd/Y_Ext_Filemgr_Edit.yhtm create mode 100644 src/nhttpd/web/extentions/filemgr/files/httpd/Y_Ext_Filemgr_blocks.txt create mode 100644 src/nhttpd/web/extentions/filemgr/files/httpd/accordion.js create mode 100644 src/nhttpd/web/extentions/filemgr/files/httpd/effects.js create mode 100755 src/nhttpd/web/extentions/filemgr/files/httpd/images/chmod.png create mode 100755 src/nhttpd/web/extentions/filemgr/files/httpd/images/copy.gif create mode 100755 src/nhttpd/web/extentions/filemgr/files/httpd/images/cut.png create mode 100755 src/nhttpd/web/extentions/filemgr/files/httpd/images/dir_up.gif create mode 100755 src/nhttpd/web/extentions/filemgr/files/httpd/images/download.png create mode 100755 src/nhttpd/web/extentions/filemgr/files/httpd/images/film.png create mode 100755 src/nhttpd/web/extentions/filemgr/files/httpd/images/folder_add.png create mode 100755 src/nhttpd/web/extentions/filemgr/files/httpd/images/ftype_file.png create mode 100755 src/nhttpd/web/extentions/filemgr/files/httpd/images/ftype_folder.png create mode 100755 src/nhttpd/web/extentions/filemgr/files/httpd/images/ftype_link.png create mode 100755 src/nhttpd/web/extentions/filemgr/files/httpd/images/home.png create mode 100755 src/nhttpd/web/extentions/filemgr/files/httpd/images/package.png create mode 100755 src/nhttpd/web/extentions/filemgr/files/httpd/images/page_edit.png create mode 100755 src/nhttpd/web/extentions/filemgr/files/httpd/images/paste.gif create mode 100755 src/nhttpd/web/extentions/filemgr/files/httpd/images/picture.png create mode 100755 src/nhttpd/web/extentions/filemgr/files/httpd/images/properties.gif create mode 100755 src/nhttpd/web/extentions/filemgr/files/httpd/images/rename.gif create mode 100755 src/nhttpd/web/extentions/filemgr/files/httpd/images/save.png create mode 100755 src/nhttpd/web/extentions/filemgr/files/httpd/images/text.png create mode 100755 src/nhttpd/web/extentions/filemgr/files/httpd/images/upload.png create mode 100755 src/nhttpd/web/extentions/filemgr/files/httpd/images/work.gif create mode 100755 src/nhttpd/web/extentions/filemgr/files/httpd/scripts/Y_NAS.sh create mode 100644 src/nhttpd/web/extentions/filemgr/install.inc create mode 100755 src/nhttpd/web/extentions/filemgr/install.sh create mode 100755 src/nhttpd/web/extentions/filemgr/uninstall.sh 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 0000000000000000000000000000000000000000..c88b945b0a8306c856a934c52546f62244af0e51 GIT binary patch literal 785 zcmV+s1Md8ZP)|`AZJDm8A+@B2c=23){C>RO^S&eiq`i_&3*gLFg*Ys& z$Fa~9xYfuDs*ec|I`rp#PnbtNL71BZJ=V5k*qxfRVDY{L_3R@Ot11jObuwJzWw0ru zU~NAMT~+Yvz65gG;WE2M4abNaTbifX7?s2Fz88Z}&YAZmh^5AH^(~n{*R=|G3@SKv zov;r{kjJ{D^efayZSe;Q|wDjs1pP)Sc{BUjR zEvRx6p>NAZE1wPtlR$L}1+T|g_&S$^&E;XJyT=(6E)4a4>E9#$sPVQ5aoWE~SGS`+216GGRQb4p}yUaTmb-qIPCF$G%mQ53R6(O+~O4Mjt$Nk%w1VH5xq0MrKnGD>2SrMb<|)0(p4GF`Q=%=coD-uwLia-!n0ztXb8 z>SB7D(cbRC&Eb``_99D}N_N7cveI&z@*+Zl!qxWT>hhwp!g8A0g0kXLg3_YG@}jE3 za+1=5r|rPV)BpegA^8LW0018VEC2ui02BZe000Gq;3tk`X`X1Rt}Ll2NgN5Sa@>ct z&})Jp0ne^?pcEK^!b{_DFiw_VrSR(z8m7&Gi9u+7k^;d~3fw9c#^BIo7zl(%`OrmN z*0>5KA}5&{3=It(2OS6o85w+K0F8|tI1CgD7JVrO2Z)Io8#2N9wc8v&jt5O5Ex Ns}n7+u(2f}06RB$bN>JU literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f215d6f6b7c81ab344a3e53e0e5e756c58c82d90 GIT binary patch literal 648 zcmV;30(bq1P)Sxb0Y6MkDSd{nPwTp^L>b`TxVmKBiF^NLQ>My+_!0?|)hBPe_#}P$?rlUF;M20U z`oNWE|K(DrsR+gN%g)?+`OfqmmmiA8O_U(YfPnV(E$8mN{jZQVJ-L7LxzmTQJ^!PS zHqDyoKn&^H)Oq>Q$Nzns&wsn~^6P)|vPC&W#R9Kw95|FC`?q!91!~-K_R;^uDLWSs zj7A}sG%2IZxvQP(HeS-nn71T-`ku2F9(?#8KXKbp!Qe&~yaot4r%3=c-cDF`=YPn& z3!hUrzxqFO*Ny)VU;p?Y-nniMuVuI+UIUD>=B$ZZdhM^2Z-JeJcbDl-H)3?9>AG_?ve_7A86r2Wlb?y7)ShoTkzeah}rl)Oq{=a0=sekDkpZ?d4n{v>% zcgJPxg7sgx4Lmup8sO5j^?B5iYcCv|)*VgT_U6A?-trsfIcr`APCfD&B(EM;R_0K# z{lAb!kTg~UrQ ilDgypkCC?sx*7nK|!$;Ad43>`t?&s0p#Be)`I_ub-e6V^YkQ;j5 zNAu&4-?vO`(L^(50KnL%SfoSw_PFrcg-N_5%H7CZ$1XLR93*)u@5W?;=1}hR!@R#& zGk_WY?u**1Bd5ot{`Sxpdlc^9t*69W>0PWe7Mtui7qaN?nPfMIU6m=6Xg)Jd> z1pn)V`Q>qu_g&1)X8-q#-LEzG|HIw8RsZsv|JaJv;?g9C8urp;|Np`N?62t8sQ=b- z|NrSZw;n}=DkG>8D2*8Z|IGgNwtwSIZqqvndj$Xgnd{F3+{1{8{hA6YRW2riF;Ng-2F6JsSG8i-({Y%F_j6<8Jk zGKVw_b1DuvI5}Tf7Z5v#L^V}KPc3I=SPBM-L`)_oRWJ)a3Rih361+!8KssAqQW*_o zHw?UbX%byGAU#2E4^St(NDL8GXfIS{99AT7yci-TLxzkJNR5;6( zlS@kiVHAe7MZY2;Xi-5)WxDDgv@tCUl*&p14T@Z~3ThM5LP4tuQfLu@EnG;nXc<8S z6&3BN?fx-cv-Kp6>HRiNTHE>$X( zD&=w+?GWC>?RLAGC6Yix;an~UmSt)tSf}1VS6N1N2ONORdD? zaj}w6DAZZdOud9Ep?M?{iQWbE5^9HLLZZF|1kdy0Tu4InEuboP9@nvbZ-P0n4AZTy zyMRIxRDmUE#LdqYuD=-Qz4N^bC`_#S7vcLn1M}{J(Wl3#c4VWczu&)AjUlh(11>gp>f`wv{KnjF%!aA*Jk N002ovPDHLkV1kkt*XsZP literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b0ce7bb198a3b268bd634d2b26e9b710f3797d37 GIT binary patch literal 653 zcmV;80&@L{P)WO3(`_cf+b25@DJ#zdQm}8GzWtq2-QnZ8W6mB^kfeK5f%S{ zUW%tGMCwrwic~ZrQcG=4f?5bkV+3dRk8hw6bk~y$KX#b!y*J4EJ~>;dRASqrSu;ZpM>?P}K~6AT zWv6Dmq?v&9LdXC(m%WCO6ma_di$R(v$@ad_>@R41N3N5lSJq9@6CGhX84-$%Xrd_6 z;){?{E|Ytt5$S-&Au>t4wDlIxdkfe-a22LMj``McG};r8@{GsRPm*+8fFey6C)@ifDBXVyTw(N@Xd41b45OFg6x_QA zpwLiigyy~cVoPxW^r~C7ZQpr%>1$*HKmv~AY-qJw4;gUecS--wnqslISSS=^KA&Ic n@BK|Onfz#3R%n{$a)0j^sqv5F(1NTL00000NkvXXu0mjf3S}fX literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..529fe8fe04c5b750ce3b4d48118465d73c74c970 GIT binary patch literal 668 zcmV;N0%QG&P)g@#5J*h%>dq^uaFBvVQ$3&c*y#>&P@VnG_z zkezqQ&je1b~~$O}L9 zo^;|X_f#3CS5n-cFHBf|3c+u^PpWoka6G0Rsr|AOXUJ zbHD{5nUGu>5YB96PUmjGgM{$-j5TbT8bBGbz2R zHjvpHkWu0*cCs9&;{|Ugi`d3|T+)Vj%kXX`qqQ>4W)|B!_mMlW`2x#YyU0W#8Pyvn z-<;pE4zUG8k-yYxmFW4%eIAbtF|hR_$8YW;YMMc&ZY1$9z5S(QZA)e!-q6)Y`+^>Z zzdYprlOaC7jZYg%{Ey!L(s5u9Pz1(+vk%UU4EzNDb1nO~@as(g00000)+jEP);68^d)m`eN0o>(5%D`Q(1;j>g@G;xlf`0VBQ`PFY?6)!N&f?*K}$p; zB!U=NBn{eB8${1}&-2_L*HuZp@ZP1@clS@cHp)4iM1ewzw59vko7eMM{e9z|%NNdX z0V;`?KKSzTCvTm5bc{L^CIKLUxc2X{i{ISz$8Sgf{q)1nXTP{`{s?9mQ$4&hPiKC- zY8q7(Y1Xu5iCf33=O4Vy(+|zQ?rW#gkKB0f%}?+6{G*qT22|DQB-73`YzA{N4W^=s zq0kQYcbtFfz zLz)H<&|z(Y4kx(K@^6+>g^d@v4;gkbWsEoXE%32*i1tcpTNXd5CcIl)ECgqz|2rE6EW}s7R?kl za1q`0GCkMruC6-2LANtwVlsgzsp4?{@7$`KBv!G66>Vie3h?3OmEEkjwdLG0PgLVi z`!N((f$A@n17Ldj#`};0I3@iHJ5M{#IZz|UIYRm4(!uV7eYIYIwQf&}_2J~}>pQ^n z6o8--^T(=hkBNQ_k{-_GWE;FMW7!p}f{NG3nHZ{D5<3d8&tLh%a4AqqnjMkr3m&fkMdECD3N5}Unig5wy40;>lo4j~k+e}v)` zR6)J8Mk*u=SpB`p6o)7j?S0T@9?bz#m@l>gc*zk__|*!FMcHwP!gwLJvS~9c0px8E zWP)VWgGzD=Y79#JI$lhEn`|2MpRa?Bt#-nSD~P0P(mbVe{KrOBoKnSsk>m|ML{6l zBosu@om4j#WzNLRAk+{k1JRvL(MfE&vvbb->v>W{*z*1_uMP}0cIRX*?mz+wk%*#O z%0D-+$B*g1nRkvI+_3E8Pr1NC6@5M&4vWaLCnNlr;lNlr4i91z&)eBGqL{L{GNu;Fof}GS9{gM5BJuH;2QWk8yuOZdB3pGR#s8bd~ zAmt<>3Q=YH$t5YJ5;7@+8Uh6=ktBgY6#6Pa%2F?h910?U8cLT43KAj$Z1*==ra&gILO{WkHfs(--F=bly9l~${z@AT>V$oat!YAD@M zBE0v_F{`g#^wOSP-u~!wvlmXdd*uqFqoZ0^{&nEMDU+=!>({S0wrQhFmoB}Yq1)~0 z^{A)L8Xjzdr(W4_exYO6u3a{4*kIeXZMJUR>Q=ksjW_p!rAwDKYUs90>6Q|C>56o@ zbrSq^Xk7Gq#>dAsn@un`Hz$?w$;Ss`%jV7L%9ShgHFV~C)6M>B`Tp%|nqPc&G*A3| z)Qe+}vT4-x^t1~XE@(6wR;^lPWMo9n*~E!cy~)YRsT2{`?fqeIw-e7N@mOA%UcCIq z_kH(_EK7|>pM*1Wt2^DaDAp|cvp*@(ZZDKpYkKC^?97(`0sb&XTXy7N#sB~S07*qo IM6N<$f;YmCWB>pF literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..fed62219f57cdfb854782dbadf5123c44d056bd4 GIT binary patch literal 806 zcmV+>1KIqEP)v;U&v3%|^C`Ga3?LtY&4dQB4Oz;1v;J%z!D&%WRH@BZ?x; z3)8@IUIv@hG|@IwyHLC`l{1<4BK>wam95g|i|?Cfzt876&-Zx_0f5*l-9`IJI&mHu zE6$@xB)6N}7VeR;!X8D!TAw;;&0Bsj?A071cO>X3K0wl7WZ1;Tg!4LHyNcnzoeQ7t zNW`aSlm8WXYkek&ir$13=ngczvf zV0vnjNpCF&K8px}dunv+`LIb-sOC$_jD(;IBI$xC|7`(+9cA>Vir_V#z{?k7SX^Ah z^71m~W@q439Ycqfhi7+gp#A14n1n1!e>$EdeATG|f798Y=ggzwEKH2Q!qU2QA(Se?dwqG69%>n$6rtE z%F(845Az8c{w(XgimJg96!jLMz?zS6I1HUm2baqQx7&@nx;lhHA!r6vs2|fqJETOu zLxeu2OQ(3(au%dg>AcZsWI(zXn9XJg1cLe8k~0h0wOL=&HK}7X k{AKr*U4z7Szv)i%9gTgghwgU$Q~&?~07*qoM6N<$g31kYk^lez literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..da3c2a2d74bab159ba0f65d7db601768258afcb2 GIT binary patch literal 853 zcmV-b1FHOqP)5TQ^(M5v$(QKVE?W+9X! z*o}&~6c?_FreF)9NJB7b5Nbn{G0n4+%uJhR9(V5R|NFTpb|HgjefT!tIhLx@DR+N) zV+fHiR5Yt19}k|KnCsND{tH-`IMJ)3AE?OtyZ4>Un|6(d%h#JK`i&a7^xW9>`yBy` zS4SOHeOpC7$?hH5-#7Rswiue_8Ju*2N@$58=a#2OTA3png`w3v->gWif7t%e$ z$NLVS!tFT#8WL|Wa&K~+{%4P2cRfwesYV1_!F=3OaRVHl(>=`%&{x*s30c}#CNE@&;ItrAv!f!)Oy$Q9t$uS=(sD$-J{T*^(8Eez1E-l3}} zPrfHZ1`qsIFe&gipuL8-IZbo2Yg{lFGKs?ZZWcOaOdk*3`5T;$?AjbG1#`B510Er^h2)2r3Y{!8_2Gj=$KzuN5 zaErtW8W_Y2iJJjY)5pmTVJoPJYpanPOEuYHclM^C1F>${hFRpdi8a<2H|Xudf78bm(zwJ9`K%6I?q*Ua~ fW9JvIbn5*B+_J)rUMBs>00000NkvXXu0mjfH&TkY literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..046811ed7a6ef16be1a54bb860e1f22c6dacdacf GIT binary patch literal 807 zcmV+?1K9kDP)iHtsh1EzPArg^Q zIZrOk#rNsfjaSbMAL;<4h;Z=jvu8dzyz8N&Nb7=z03ZUw?9z%8KQEa6yM5=kUnka& z3?FJk2}L7q>na=T#;<7U*P91xfF`;`6%pVgWgRy0?1ZryL@%z52=-!fGXWGEn4M351L4<+7eDgwo|moqXT+s1&Kmn>-uQQ8mL7XY)w5Zk*(g+<3Y3tmkR!bL zOUKaUtj_pX26sH+=Iorwu}MGd`_%O-_sS}8VpG#fJA)Fcs#ezwtZf?q?Ac70mDv`rVs{$od?VPKeqf<-kUjNtS6ecB*mq<&M97K^6IVsDO zt2$Ru!b+>2S<}_H>$RcInusU_8PMNdf(W{sNlJ3FkrwMJPeBPO#d}Y^a{9TH(#{Y) l0D?dWAV4eUJX#h`!2gmISk&ZKd4B)^002ovPDHLkV1g&sd|Lnj literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..1b45000a0140b8f9e04c933154c915f4322d7533 GIT binary patch literal 286 zcmV+(0pb2fNk%w1VH5xq0Mr}+LNg;3tk`X`X1Rt{>*It?NM0VL6(E zVp#@75XZ#A7$__!UdC~NbOwn>K!P;!f|hLd!H_&o5ubBI-bl_Ku=A;)xD5t@Ks^{# z+MN7ifk2od9Tj&Q6dVnQ7YGCeB^rSW3L6F-dlv)<1qEp%4jqtY1`CG`6a;PnBn}E^ kX95eB1O$f^sHqkY9smLtZoQ`}2mr#v!!X9j$Rr^EJMbBDr~m)} literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4a158fef7e0da8fd19525f574f2c4966443866cf GIT binary patch literal 606 zcmV-k0-^nhP)Q2rnAt>LM%-F zK|rtwgcU)}7x~z1Hrcs5bH*ZO$!>xO8K#?==bZPQ_ecnV>#P`H`QzGaRhd62G_&rC zTLU$c7_x*nFP_dW#Q+*);mMHE?j)HexK784D4x9l_tfpz2$@1y}9rkF+ zI+J5NMWeZyObc!d+rUc=>D+uOdAOg#%+Ej6h+wn5^xPmVVH*Eu446Y0A_@ zo$rlds-+sL10DbOCXc(WFM0oa?j=5{RK~^!N+(o=niw2{+8mt~Bs6sR t8;qA~C8`RYe%XXmYn>v4H2@v@T>=0A literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..0b2bcc6657ebb35124adcca7292028600bfbc5f1 GIT binary patch literal 345 zcmZ?wbhEHbh8LYWc zQ8m_Y$?D0oYBY`{Z&Eb0wOL&v_R7gnhwtLitx@WVk`ufZtl1oqqpZm7U82LzuHz|M zQ}3n2%F5NHC!wdqB3LiQBGV8)osofY5ko^xrnU|TGc(8X02f^yHZ~n?|DF2vI~^IU E0n;m_2><{9 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..99d532e8b1750115952f97302a92d713c0486f97 GIT binary patch literal 620 zcmV-y0+aoTP)~H+MJzd|s z^YP1Hc07G_>)Lgir!F1{Qn4GcTg%?koHo<=1qRN{}nPDolOeI^o4N5I>! zU$N=L=sg~ zDx#dOA*B0N~cqPsWI(^rbbkh)DS0_H_UN0C4l_kvWIm2#Kyy6%BCh z(yIUf003&1xdx>t$*eR2ZvXxT0001Z_R$y3Iju92q*wg58};}zm(OaAH=p|y0002M zh5O5#fxp|~jc?yi@+7$`d4Q6Hl%z;WiWG??NXR{Hx%)pMd~SE0000OQI literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..813f712f726c935f9adf8d2f2dd0d7683791ef11 GIT binary patch literal 342 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-%6;pyTSA|c6o&@eC9QG)Hj&ExYL zO&oVL^)+cM^qd@ApywS>pwx0H@RDN}hq;7mU-SKczYQ-hnrr=;iDAQMZQ+*g=YOM= z!QlMQEn7FbaD->uKAYgo_j9)W&$$zS*W9}m(ey0q$&7l-XEWO0Y(9M=SnhLbwy;d>@~SY$Ku*0xPvIOQeV1x7u_z-2-X>_74(yfh7C znXL|3GZ+d2`3re2hs?MKo)wchR-92qq~y6`XqbKmElbB3z{pkZs0VPF`CFvS?7jDn^mFo>d9Y&06* z&1MsS!M-CH3ee+h_sy)Ms%B*ec3R0RpVi9?*mU84yoq(Bw8 z<4(999dJJE!V%pWT~HGRIAb;(#O%2K3?uRpz}AfgE8e9q&OSdr^e^}lC$QXZz;S2A z)w>^oHy>?v)q--`!pmuBe96PxP0u*inQvyFW(llfv9 zXV1s*Jh`y2H%B3ZTA(AzpsQ?hb6_PyZ=c1?_B4fbl>G%!@ubJln=!)x0000NgAR}l)GWZj!0cSHi~Ya^OYv}yTsg%Ddv6{qy>`4OMY6Cb zF@)PuW*ztGqQ7B3at^acW*?W}QP{QU;|>oou6EVUKdbB(U+xg)iiuI?#AdF2#V++j zKy$?za^;+m%=HlnIcQtyIsXD^TQxFD(21$ zLNc#MA*4GI**sFRz^9xB8kF6RMGX;NY~W*cE;>z*79YM6O)& zHAHZ7IfnGSKD5^7y16n(pn%S9*~8C+St=P0H2yGFntUpWWz`;4MXccnbYuE4pc}(A zbFUTW--}^4x>vz-Sb{};R@m!T`vT7_(%LQH!onaR*Z=XiVT*0!g8&w}$)}bU3dhdk zJB8{-CZG#J!Dv^JwX9BY&*2;0AFn>!aOKWdO;0$usIhT)29@x7kqji\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 +# -----------------------------------------------------------