diff options
author | James Meyer <james.meyer@operamail.com> | 2010-03-31 02:32:17 (GMT) |
---|---|---|
committer | James Meyer <james.meyer@operamail.com> | 2010-03-31 02:32:17 (GMT) |
commit | 7cc5e96be3ffe19bf6652619af75ef63dc405985 (patch) | |
tree | 932aec0f8250226bef893a3d545f185da71ede07 /abs/core-testing/local-website/htdocs/linhes/js/scriptaculous/jw_effects.js | |
parent | 8df17b59ad2a4f92633c25406d495586a1c4ec06 (diff) | |
download | linhes_pkgbuild-7cc5e96be3ffe19bf6652619af75ef63dc405985.zip linhes_pkgbuild-7cc5e96be3ffe19bf6652619af75ef63dc405985.tar.gz linhes_pkgbuild-7cc5e96be3ffe19bf6652619af75ef63dc405985.tar.bz2 |
local-website: reworked localwebsite.
-add 404.html
- uses css from default theme from mythweb
- added links
closes #616 #485
ref #17
Diffstat (limited to 'abs/core-testing/local-website/htdocs/linhes/js/scriptaculous/jw_effects.js')
-rw-r--r-- | abs/core-testing/local-website/htdocs/linhes/js/scriptaculous/jw_effects.js | 750 |
1 files changed, 750 insertions, 0 deletions
diff --git a/abs/core-testing/local-website/htdocs/linhes/js/scriptaculous/jw_effects.js b/abs/core-testing/local-website/htdocs/linhes/js/scriptaculous/jw_effects.js new file mode 100644 index 0000000..640c9b1 --- /dev/null +++ b/abs/core-testing/local-website/htdocs/linhes/js/scriptaculous/jw_effects.js @@ -0,0 +1,750 @@ +/* + FYI: + "restoreAfterFinish" is only used by Scale and all its subclasses and puts the element + back where it was the size that it was. + + Bugs: + SlideLeftIn still doesn't work on IE ??? + + 'delete' does not work on IE + + Cannot set styles of table items in Builder.node due to IE bug + + stray commas after last item in lists causes IE to fail + + + Effect.toggle on these effects doesn't seem to work quite right + ( Effect.toggle('demo-effect-curtainopen','slideleft') ) + + Not allowing Effect.Curtain* to finish before clicking again causes a problem. + + Not allowing MOST effects to finish before clicking again causes a problem. +*/ + + +/* This declaration doesn't show up correctly when using Firebug */ +/* + Also, these toggles don't seem to work right either + OK: slideup, slidedown, slideright + NOT: slideleft, curtain +*/ +Effect.PAIRS = Object.extend( + Effect.PAIRS, { + 'slidedown': ['SlideDownIn', 'SlideDownOut'], + 'slideup': ['SlideUpIn', 'SlideUpOut'], + 'slideleft': ['SlideLeftIn', 'SlideLeftOut'], + 'slideright': ['SlideRightIn', 'SlideRightOut'], + 'curtain': ['CurtainClose', 'CurtainOpen'] + } +); + + +Object.extend( + Effect, { + _elementIsNotAListError: { + name: 'ElementIsNotAListError', + message: 'The specified DOM element is not a list exist, but is required to be for this effect to operate' + } + } +); + + +Effect.PulseList = Class.create(); +Object.extend(Object.extend(Effect.PulseList.prototype, Effect.Base.prototype), { + initialize: function(element) { + this.element = $(element); + if(!this.element) throw(Effect._elementDoesNotExistError); +// if( (this.element.tagName != "UL") && (this.element.tagName != "OL") ) + if( ! ['UL','OL'].include(this.element.tagName) ) + throw(Effect._elementIsNotAListError); + if ( ! this.element.effectOn ) { + this.element.effectOn = true; + var options = Object.extend({ + _pulse: 1, + direction: "down", // up or down + pulses: 1, + continuous: false, + bounce: false, + duration: 2, + min_opacity: 0.1 + }, arguments[1] || {}); + this.start(options); + } + }, + setup: function() { + var num_items = this.element.immediateDescendants().size(); + var i = 1; + var self = this; + this.element.immediateDescendants().each( function(myitem){ + var mydelay = (self.options.direction == "down" ) + ? (i++ - 1)/num_items + : (num_items - i++)/num_items; + var reverser = function(pos){ return Effect.Transitions.sinoidal(1-Effect.Transitions.pulse(pos, 1)) } + new Effect.Opacity(myitem, + Object.extend(Object.extend({ + delay: mydelay, + duration: self.options.duration, + from: self.options.min_opacity, + afterFinishInternal: function(effect) { + if ( ! ( self.options.direction == 'down' ? myitem.next() : myitem.previous() ) ) { + if ( ( self.options.continuous ) || ( self.options._pulse++ < self.options.pulses ) ){ + if ( self.options.bounce) + self.options.direction = ( self.options.direction == 'up' ) ? 'down' : 'up'; + new Effect.PulseList(effect.element.parentNode, self.options || {} ); + } + } + } + }, {}), {transition: reverser}) + ); + }); + }, + finish: function() { +// delete(this.element.effectOn); + this.element.effectOn = false; + } +}); + + +Effect.Gradient = Class.create(); +Object.extend(Object.extend(Effect.Gradient.prototype, Effect.Base.prototype), { + initialize: function(element) { + this.element = $(element); + if(!this.element) throw(Effect._elementDoesNotExistError); + var options = Object.extend({ + duration: 5, + rows: 10, + cols: 10, + type: 'diagonal', /* vertical, horizontal, diagonal */ + colors: [ 'black', 'white', 'white', 'black' ] + }, arguments[1] || {}); + if (options.type == 'horizontal') options.rows = 1; + else if (options.type == 'vertical') options.cols = 1; + + dims = this.element.getDimensions(); + cellwidth = dims.width / options.cols; + cellheight = dims.height / options.rows; + this.cellids = []; + var self = this; + this.table = Builder.node('table', { + border: 0, cellpadding: 0, cellspacing: 0, + style:"margin: 0px; padding: 0px;" + }); + tbody = Builder.node('tbody'); + $(tbody).setStyle({ margin: 0, padding: 0 }); + $R(1,options.rows).each( function(row){ + tr = Builder.node('tr'); + $(tr).setStyle({ margin: 0, padding: 0 }); + if (options.type == 'vertical') { + cellcolor = Color.shade( + Color.string2hex(options.colors[0]), + Color.string2hex(options.colors[1]), + (row-1)/(options.rows-1) + ); + } + $R(1,options.cols).each( function(col){ + cellid = "grcell-"+row+"-"+col; + if (options.type == 'diagonal') { + cellcolor = Color.shade( + Color.shade( + Color.string2hex(options.colors[0]), + Color.string2hex(options.colors[1]), + (col-1)/(options.cols-1) + ), + Color.shade( + Color.string2hex(options.colors[2]), + Color.string2hex(options.colors[3]), + (col-1)/(options.cols-1) + ), + (row-1)/(options.rows-1) + ); + } else if (options.type == 'horizontal') { + cellcolor = Color.shade( + Color.string2hex(options.colors[0]), + Color.string2hex(options.colors[1]), + (col-1)/(options.cols-1) + ); + } + td = Builder.node('td',{ + id: cellid + }, "" ); + $(td).setStyle({ margin: '0px', padding: '0px', + height: cellheight+'px', + width: cellwidth+'px', + backgroundColor: cellcolor + }); + tr.appendChild(td); + self.cellids.push(cellid); + }); + tbody.appendChild(tr); + }); + this.table.appendChild(tbody); + + this.start(options); + }, + setup: function(){ + Position.absolutize(this.element); + this.element.parentNode.appendChild(this.table); + Position.absolutize(this.table); + }, + finish: function(){ + new Effect.Fade( this.table , { + afterFinish: function(effect) { + effect.element.parentNode.removeChild(effect.element); + } + }); + } +}); + +Effect.ORIGGradient = Class.create(); +Object.extend(Object.extend(Effect.ORIGGradient.prototype, Effect.Base.prototype), { + initialize: function(element) { + this.element = $(element); + if(!this.element) throw(Effect._elementDoesNotExistError); + var options = Object.extend({ + duration: 5, + rows: 10, + cols: 10, + type: 'diagonal', /* vertical, horizontal, diagonal */ + colors: [ 'black', 'white', 'white', 'black' ] + }, arguments[1] || {}); + if (options.type == 'horizontal') options.rows = 1; + else if (options.type == 'vertical') options.cols = 1; + + dims = this.element.getDimensions(); + cellwidth = dims.width / options.cols; + cellheight = dims.height / options.rows; + this.cellids = []; + var self = this; + this.table = Builder.node('table', { + border: 0, cellpadding: 0, cellspacing: 0, + style:"margin: 0px; padding: 0px;" + }); + tbody = Builder.node('tbody', { style:"margin: 0px; padding: 0px;" }); + $R(1,options.rows).each( function(row){ + tr = Builder.node('tr', { style:"margin: 0px; padding: 0px;" }); + if (options.type == 'vertical') { + cellcolor = Color.shade( + Color.string2hex(options.colors[0]), + Color.string2hex(options.colors[1]), + (row-1)/(options.rows-1) + ); + } + $R(1,options.cols).each( function(col){ + cellid = "grcell-"+row+"-"+col; + if (options.type == 'diagonal') { + cellcolor = Color.shade( + Color.shade( + Color.string2hex(options.colors[0]), + Color.string2hex(options.colors[1]), + (col-1)/(options.cols-1) + ), + Color.shade( + Color.string2hex(options.colors[2]), + Color.string2hex(options.colors[3]), + (col-1)/(options.cols-1) + ), + (row-1)/(options.rows-1) + ); + } else if (options.type == 'horizontal') { + cellcolor = Color.shade( + Color.string2hex(options.colors[0]), + Color.string2hex(options.colors[1]), + (col-1)/(options.cols-1) + ); + } + td = Builder.node('td',{ + id: cellid, + style:"margin: 0px; padding: 0px; " + +"height: "+cellheight+"px; " + +"width: "+cellwidth+"px; " + +"background-color: "+cellcolor + }, "" ); + tr.appendChild(td); + self.cellids.push(cellid); + }); + tbody.appendChild(tr); + }); + this.table.appendChild(tbody); + + Position.absolutize(this.element); + this.element.parentNode.appendChild(this.table); + Position.absolutize(this.table); + this.start(options); + }, + finish: function(){ + new Effect.Fade( this.table , { + afterFinish: function(effect) { + effect.element.parentNode.removeChild(effect.element); + } + }); + } +}); + + +Effect.Pixelate = Class.create(); +Object.extend(Object.extend(Effect.Pixelate.prototype, Effect.Base.prototype), { + initialize: function(element) { + this.element = $(element); + if(!this.element) throw(Effect._elementDoesNotExistError); + var options = Object.extend({ + duration: 5, + rows: 30, + cols: 30, + startcolor: 'transparent', + endcolor: 'white' + }, arguments[1] || {}); + options.cells = options.rows * options.cols; + + dims = this.element.getDimensions(); + cellwidth = dims.width / options.cols; + cellheight = dims.height / options.rows; + this.cellids = []; + this.table = Builder.node('table', { + border: 0, cellpadding: 0, cellspacing: 0, + style:"margin: 0px; padding: 0px;" + }); + /* Cannot set styles of table items in Builder.node due to IE bug */ + var self = this; + tbody = Builder.node('tbody'); + $(tbody).setStyle({ margin: 0, padding: 0 }); + $R(1,options.rows).each( function(row){ + tr = Builder.node('tr'); + $(tr).setStyle({ margin: '0px', padding: '0px' }); + $R(1,options.cols).each( function(col){ + cellid = "pxcell-"+row+"-"+col; + td = Builder.node('td',{ + id: cellid + }, ''); + $(td).setStyle({ margin: '0px', padding: '0px', + height: cellheight+'px', + width: cellwidth+'px', + backgroundColor: options.startcolor + }); + tr.appendChild(td); + self.cellids.push(cellid); + }); + tbody.appendChild(tr); + }); + this.cellids.sort( function(a,b){return (0.5 - Math.random());} ); + this.table.appendChild(tbody); + this.start(options); + }, + setup: function() { + Position.absolutize(this.element); + this.element.parentNode.appendChild(this.table); + Position.absolutize(this.table); + }, + update: function(position) { + while ( this.cellids.size() && (this.cellids.size()/this.options.cells) > (1-position) ) { + $(this.cellids.pop()).setStyle({ backgroundColor: this.options.endcolor }); + } + }, + finish: function(){ + new Effect.Fade( this.table , { + afterFinish: function(effect) { + effect.element.parentNode.removeChild(effect.element); + } + }); + } +}); + + + +Effect.Duplicate = Class.create(); +Object.extend(Object.extend(Effect.Duplicate.prototype, Effect.Base.prototype), { + initialize: function(element) { + this.element = $(element); + if(!this.element) throw(Effect._elementDoesNotExistError); + + this.element.makePositioned(); + this.elecopy = this.element.cloneNode(true); + this.elecopy.setStyle({ color: 'red', backgroundColor: 'red', backgroundImage: '' }); + this.elecopy.id = element.id + '-copy'; + this.element.parentNode.appendChild(this.elecopy); + Position.relativize(this.element); + Position.relativize(this.elecopy); + Position.absolutize(this.element); + Position.absolutize(this.elecopy); + + var options = Object.extend({ + }, arguments[1] || {}); + this.start(options); + }, + asetup: function() { + return new Effect.Parallel ( [ + new Effect.SlideRightIn(this.element, { sync:true }), + new Effect.SlideLeftIn( this.elecopy, { sync:true }) + ], Object.extend({ + duration: 2 + }, arguments[1] || {}) + ); + }, + update: function(position) { + }, + finish: function() { + this.elecopy.undoClipping().undoPositioned().remove(); + } +}); + +Effect.Flicker = Class.create(); +Object.extend(Object.extend(Effect.Flicker.prototype, Effect.Base.prototype), { + initialize: function(element) { + this.element = $(element); + if(!this.element) throw(Effect._elementDoesNotExistError); + if ( ! this.element.effectOn ) { + this.element.effectOn = true; + var options = Object.extend({ + threshold: 0.5, + endvisibility: "visible" + }, arguments[1] || {}); + this.start(options); + } + }, + update: function(position) { + var visibility = ( Math.random() < this.options.threshold ) ? "hidden" : "visible"; + this.element.setStyle({ + visibility: visibility + }); + }, + finish: function() { + this.element.setStyle({ + visibility: this.options.endvisibility + }); +// delete(this.element.effectOn); + this.element.effectOn = false; + } +}); + + +Effect.CurtainClose = function(element) { +/* + CurtainClose need to have the content of the element wrapped in a container element with fixed width AND height! +*/ + element = $(element).cleanWhitespace(); + var elementDimensions = element.getDimensions(); + + element.makeClipping().makePositioned(); + element.parentNode.makeClipping(); // stops SlideLeftIn flicker + elecopy = $(element.cloneNode(true)); + elecopy.setStyle({ top: '0px', left: '0px' }); + elecopy.id = element.id + '-copy'; + element.parentNode.appendChild(elecopy); + elecopy.makeClipping().makePositioned(); + Position.absolutize(element); + + return new Effect.Parallel ( [ + new Effect.SlideRightIn(element, { sync:true }), + new Effect.SlideLeftIn( elecopy, { sync:true }) + ], Object.extend({ + duration: 2, + afterFinishInternal: function(effect){ + elecopy.undoClipping().undoPositioned().remove(); +/* why does the above work and the below does not? */ +// effect.effects[1].element.undoClipping().undoPositioned().remove(); + effect.effects[0].element.parentNode.undoClipping(); + } + }, arguments[1] || {}) + ); +} + +Effect.CurtainOpen = function(element) { +/* + CurtainOpen need to have the content of the element wrapped in a container element with fixed width AND height! +*/ + element = $(element).cleanWhitespace(); + + element.makeClipping().makePositioned(); + element.parentNode.makeClipping(); + elecopy = element.cloneNode(true); + elecopy.setStyle({ top: '0px' }); + elecopy.id = element.id + '-copy'; + element.parentNode.appendChild(elecopy); + Position.absolutize(element); + Position.absolutize(elecopy); + + var elementDimensions = element.getDimensions(); + return new Effect.Parallel ( [ + new Effect.SlideRightOut(element, { sync:true }), + new Effect.SlideLeftOut( elecopy, { sync:true }) + ], Object.extend({ + duration: 2, + beforeSetup: function(effect){ + effect.effects[1].element.makeClipping().makePositioned().show(); + }, + afterFinishInternal: function(effect){ + element.undoClipping().undoPositioned(); +/* why does the above work and the below does not? */ +// effect.effects[0].element.undoClipping().undoPositioned(); + effect.effects[1].element.parentNode.undoClipping(); + effect.effects[1].element.undoClipping().undoPositioned().remove(); + } + }, arguments[1] || {}) + ); +} + + +Effect.SlideLeftIn = function(element) { +/* + SlideLeftIn need to have the content of the element wrapped in a container element with fixed width! +*/ + element = $(element).cleanWhitespace(); + if ( ! element.effectOn ) { + element.effectOn = true; + var elementDimensions = element.getDimensions(); + return new Effect.Parallel ( [ + new Effect.Move(element, + Object.extend({ + x: -(elementDimensions.width), + sync: true, + mode: 'relative', + beforeStartInternal: function(effect) { + if(window.opera) effect.element.setStyle({left: ''}); + effect.element.setStyle({left: elementDimensions.width + 'px' }); + effect.element.show(); + } + }, arguments[1] || {}) + ), + new Effect.Scale(element, 100, + Object.extend({ scaleContent: false, + /* why does the use of sync: true make this flicker? */ + scaleY: false, + scaleFrom: window.opera ? 0 : 1 + }, arguments[1] || {}) + ) + ], Object.extend({ + beforeSetup: function(effect){ + effect.effects[0].element.parentNode.makeClipping(); + effect.effects[0].element.makeClipping(); + }, + afterFinishInternal: function(effect){ + effect.effects[0].element.parentNode.undoClipping(); + effect.effects[0].element.undoClipping(); + }, + afterFinish: function(effect){ +// delete(effect.effects[0].element.effectOn); + effect.effects[0].element.effectOn = false; + } + }, arguments[1] || {}) + ); + } +} + + +Effect.SlideRightOut = function(element) { +/* + SlideRightOut need to have the content of the element wrapped in a container element with fixed width! +*/ + element = $(element).cleanWhitespace(); + var elementDimensions = element.getDimensions(); + return new Effect.Parallel ( [ + new Effect.Move(element, { x: element.getWidth(), sync: true, mode: 'relative' }), + new Effect.Scale(element, window.opera ? 0 : 1, { + sync: true, + scaleContent: false, + scaleY: false, + scaleFrom: 100, + restoreAfterFinish: true + }) + ], Object.extend({ + beforeSetup: function(effect){ + effect.effects[0].element.makeClipping(); + }, + afterFinishInternal: function(effect){ + effect.effects[0].element.undoClipping().hide(); + } + }, arguments[1] || {}) + ); +} + + + +/* from SlideUp */ +Effect.SlideLeftOut = function(element) { +/* + SlideLeftOut needs to have the content of the element wrapped in a container element with fixed width + otherwise any text or images begin to wrap in stange ways! +*/ + element = $(element).cleanWhitespace(); + return new Effect.Scale(element, window.opera ? 0 : 1, + Object.extend({ + scaleContent: false, + scaleY: false, + scaleMode: 'box', + scaleFrom: 100, + restoreAfterFinish: true, + beforeStartInternal: function(effect) { + effect.element.makePositioned(); + effect.element.down().makePositioned(); + if(window.opera) effect.element.setStyle({left: ''}); + effect.element.makeClipping().show(); + }, + afterUpdateInternal: function(effect) { + effect.element.down().setStyle( + {right: (effect.dims[1] - effect.element.clientWidth) + 'px' } + ); + }, + afterFinishInternal: function(effect) { + effect.element.hide().undoClipping().undoPositioned(); + effect.element.down().undoPositioned(); + } + }, arguments[1] || {}) + ); +} + + +/* from SlideDown */ +Effect.SlideRightIn = function(element) { +/* + SlideRightIn needs to have the content of the element wrapped in a container element with fixed width! +*/ + element = $(element).cleanWhitespace(); + var elementDimensions = element.getDimensions(); + return new Effect.Scale(element, 100, + Object.extend({ + scaleContent: false, + scaleY: 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({left: ''}); + effect.element.makeClipping().setStyle({width: '0px'}).show(); + }, + afterUpdateInternal: function(effect) { + effect.element.down().setStyle({right: (effect.dims[1] - effect.element.clientWidth) + 'px' }); + }, + afterFinishInternal: function(effect) { + effect.element.undoClipping().undoPositioned(); + effect.element.down().undoPositioned(); + } + }, arguments[1] || {}) + ); +} + + + +Effect.SlideUpIn = function(element) { +/* + SlideUpIn need to have the content of the element wrapped in a container element with fixed height! +*/ + element = $(element).cleanWhitespace(); + var elementDimensions = element.getDimensions(); + return new Effect.Parallel ( [ + new Effect.Move(element, { y: -(element.getHeight()), sync: true, mode: 'relative' }), + new Effect.Scale(element, 100, + Object.extend({ + sync: true, + scaleContent: false, + scaleX: false, + scaleFrom: 0, + scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, + beforeSetup: function(effect) { + effect.element.hide(); + }, + afterSetup: function(effect) { + effect.element.makeClipping().setStyle({height: '0px'}).show(); + }, + afterFinishInternal: function(effect) { + effect.element.undoClipping(); + } + }, arguments[1] || {}) + ) + ], Object.extend({ + afterSetup: function(effect) { + effect.effects[0].element.setStyle({top: elementDimensions.height + 'px' }); + } + }, arguments[1] || {})); +} + + +Effect.SlideDownOut = function(element) { +/* + SlideDown need to have the content of the element wrapped in a container element with fixed height! +*/ + element = $(element).cleanWhitespace(); + var elementDimensions = element.getDimensions(); + return new Effect.Parallel ( [ + new Effect.Move(element, { y: element.getHeight(), sync: true, mode: 'relative' }), + new Effect.Scale(element, 0, + Object.extend({ + sync: true, + scaleContent: false, + scaleX: false, + restoreAfterFinish: true, + beforeSetup: function(effect){ + effect.element.makeClipping(); + }, + afterFinishInternal: function(effect) { + effect.element.hide().undoClipping(); + } + }, arguments[1] || {}) + ) + ], Object.extend({ + }, arguments[1] || {})); +} + + + +/* this is the original SlideDown */ +Effect.SlideDownIn = 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] || {}) + ); +} + +/* this is the original SlideUp */ +Effect.SlideUpOut = 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] || {}) + ); +} + + |