[pLog-svn] r3042 - in plog/trunk/js: . moo.fx

mark at devel.lifetype.net mark at devel.lifetype.net
Mon Mar 6 17:09:41 GMT 2006


Author: mark
Date: 2006-03-06 17:09:41 +0000 (Mon, 06 Mar 2006)
New Revision: 3042

Added:
   plog/trunk/js/moo.fx/
   plog/trunk/js/moo.fx/License.txt
   plog/trunk/js/moo.fx/moo.ajax.js
   plog/trunk/js/moo.fx/moo.fx.js
   plog/trunk/js/moo.fx/moo.fx.pack.js
Log:
Add moo.fx library to lifetype.

I will use it to replace rico very soon. Although the rico effect is better then moo.fx, but the size of rico is too big. It is really bad ... :(

Added: plog/trunk/js/moo.fx/License.txt
===================================================================
--- plog/trunk/js/moo.fx/License.txt	2006-03-06 16:55:05 UTC (rev 3041)
+++ plog/trunk/js/moo.fx/License.txt	2006-03-06 17:09:41 UTC (rev 3042)
@@ -0,0 +1,7 @@
+Copyright (c) 2005 Valerio Proietti, http://www.mad4milk.net
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file

Added: plog/trunk/js/moo.fx/moo.ajax.js
===================================================================
--- plog/trunk/js/moo.fx/moo.ajax.js	2006-03-06 16:55:05 UTC (rev 3041)
+++ plog/trunk/js/moo.fx/moo.ajax.js	2006-03-06 17:09:41 UTC (rev 3042)
@@ -0,0 +1,40 @@
+//based on prototype's ajax class
+//to be used with prototype.lite, moofx.mad4milk.net.
+
+ajax = Class.create();
+ajax.prototype = {
+	initialize: function(url, options){
+		this.transport = this.getTransport();
+		this.postBody = options.postBody || '';
+		this.method = options.method || 'post';
+		this.onComplete = options.onComplete || null;
+		this.update = $(options.update) || null;
+		this.request(url);
+	},
+
+	request: function(url){
+		this.transport.open(this.method, url, true);
+		this.transport.onreadystatechange = this.onStateChange.bind(this);
+		if (this.method == 'post') {
+			this.transport.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
+			if (this.transport.overrideMimeType) this.transport.setRequestHeader('Connection', 'close');
+		}
+		this.transport.send(this.postBody);
+	},
+
+	onStateChange: function(){
+		if (this.transport.readyState == 4 && this.transport.status == 200) {
+			if (this.onComplete) 
+				setTimeout(function(){this.onComplete(this.transport);}.bind(this), 10);
+			if (this.update)
+				setTimeout(function(){this.update.innerHTML = this.transport.responseText;}.bind(this), 10);
+			this.transport.onreadystatechange = function(){};
+		}
+	},
+
+	getTransport: function() {
+		if (window.ActiveXObject) return new ActiveXObject('Microsoft.XMLHTTP');
+		else if (window.XMLHttpRequest) return new XMLHttpRequest();
+		else return false;
+	}
+};
\ No newline at end of file

Added: plog/trunk/js/moo.fx/moo.fx.js
===================================================================
--- plog/trunk/js/moo.fx/moo.fx.js	2006-03-06 16:55:05 UTC (rev 3041)
+++ plog/trunk/js/moo.fx/moo.fx.js	2006-03-06 17:09:41 UTC (rev 3042)
@@ -0,0 +1,137 @@
+/*
+moo.fx, simple effects library built with prototype.js (http://prototype.conio.net).
+by Valerio Proietti (http://mad4milk.net) MIT-style LICENSE.
+for more info (http://moofx.mad4milk.net).
+Friday, February 24, 2006
+v 1.2.2
+*/
+
+var fx = new Object();
+//base
+fx.Base = function(){};
+fx.Base.prototype = {
+	setOptions: function(options) {
+	this.options = {
+		duration: 500,
+		onComplete: '',
+		transition: fx.sinoidal
+	}
+	Object.extend(this.options, options || {});
+	},
+
+	go: function() {
+		this.startTime = (new Date).getTime();
+		this.timer = setInterval (this.step.bind(this), 13);
+	},
+
+	step: function() {
+		var time  = (new Date).getTime();
+		if (time >= this.options.duration+this.startTime) {
+			this.now = this.to;
+			clearInterval (this.timer);
+			this.timer = null;
+			if (this.options.onComplete) setTimeout(this.options.onComplete.bind(this), 10);
+		}
+		else {
+			var Tpos = (time - this.startTime) / (this.options.duration);
+			this.now = this.options.transition(Tpos) * (this.to-this.from) + this.from;
+		}
+		this.increase();
+	},
+
+	custom: function(from, to) {
+		if (this.timer != null) return;
+		this.from = from;
+		this.to = to;
+		this.go();
+	},
+
+	hide: function() {
+		this.now = 0;
+		this.increase();
+	},
+
+	clearTimer: function() {
+		clearInterval(this.timer);
+		this.timer = null;
+	}
+}
+
+//stretchers
+fx.Layout = Class.create();
+fx.Layout.prototype = Object.extend(new fx.Base(), {
+	initialize: function(el, options) {
+		this.el = $(el);
+		this.el.style.overflow = "hidden";
+		this.el.iniWidth = this.el.offsetWidth;
+		this.el.iniHeight = this.el.offsetHeight;
+		this.setOptions(options);
+	}
+});
+
+fx.Height = Class.create();
+Object.extend(Object.extend(fx.Height.prototype, fx.Layout.prototype), {	
+	increase: function() {
+		this.el.style.height = this.now + "px";
+	},
+
+	toggle: function() {
+		if (this.el.offsetHeight > 0) this.custom(this.el.offsetHeight, 0);
+		else this.custom(0, this.el.scrollHeight);
+	}
+});
+
+fx.Width = Class.create();
+Object.extend(Object.extend(fx.Width.prototype, fx.Layout.prototype), {	
+	increase: function() {
+		this.el.style.width = this.now + "px";
+	},
+
+	toggle: function(){
+		if (this.el.offsetWidth > 0) this.custom(this.el.offsetWidth, 0);
+		else this.custom(0, this.el.iniWidth);
+	}
+});
+
+//fader
+fx.Opacity = Class.create();
+fx.Opacity.prototype = Object.extend(new fx.Base(), {
+	initialize: function(el, options) {
+		this.el = $(el);
+		this.now = 1;
+		this.increase();
+		this.setOptions(options);
+	},
+
+	increase: function() {
+		if (this.now == 1 && (/Firefox/.test(navigator.userAgent))) this.now = 0.9999;
+		this.setOpacity(this.now);
+	},
+	
+	setOpacity: function(opacity) {
+		if (opacity == 0) this.el.style.visibility = "hidden";
+		else this.el.style.visibility = "visible";
+		if (window.ActiveXObject) this.el.style.filter = "alpha(opacity=" + opacity*100 + ")";
+		this.el.style.opacity = opacity;
+	},
+
+	toggle: function() {
+		if (this.now > 0) this.custom(1, 0);
+		else this.custom(0, 1);
+	}
+});
+
+//transitions
+fx.sinoidal = function(pos){
+	return ((-Math.cos(pos*Math.PI)/2) + 0.5);
+	//this transition is from script.aculo.us
+}
+fx.linear = function(pos){
+	return pos;
+}
+fx.cubic = function(pos){
+	return Math.pow(pos, 3);
+}
+fx.circ = function(pos){
+	return Math.sqrt(pos);
+}
\ No newline at end of file

Added: plog/trunk/js/moo.fx/moo.fx.pack.js
===================================================================
--- plog/trunk/js/moo.fx/moo.fx.pack.js	2006-03-06 16:55:05 UTC (rev 3041)
+++ plog/trunk/js/moo.fx/moo.fx.pack.js	2006-03-06 17:09:41 UTC (rev 3042)
@@ -0,0 +1,263 @@
+/*
+moo.fx pack, effects extensions for moo.fx.
+by Valerio Proietti (http://mad4milk.net) MIT-style LICENSE
+for more info visit (http://moofx.mad4milk.net).
+Friday, February 24, 2006
+v 1.2.2
+*/
+
+//smooth scroll
+fx.Scroll = Class.create();
+fx.Scroll.prototype = Object.extend(new fx.Base(), {
+	initialize: function(options) {
+		this.setOptions(options);
+	},
+
+	scrollTo: function(el){
+		var dest = Position.cumulativeOffset($(el))[1];
+		var client = window.innerHeight || document.documentElement.clientHeight;
+		var full = document.documentElement.scrollHeight;
+		var top = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;
+		if (dest+client > full) this.custom(top, dest - client + (full-dest));
+		else this.custom(top, dest);
+	},
+
+	increase: function(){
+		window.scrollTo(0, this.now);
+	}
+});
+
+//text size modify, now works with pixels too.
+fx.Text = Class.create();
+fx.Text.prototype = Object.extend(new fx.Base(), {
+	initialize: function(el, options) {
+		this.el = $(el);
+		this.setOptions(options);
+		if (!this.options.unit) this.options.unit = "em";
+	},
+
+	increase: function() {
+		this.el.style.fontSize = this.now + this.options.unit;
+	}
+});
+
+//composition effect: widht/height/opacity
+fx.Combo = Class.create();
+fx.Combo.prototype = {
+	setOptions: function(options) {
+		this.options = {
+			opacity: true,
+			height: true,
+			width: false
+		}
+		Object.extend(this.options, options || {});
+	},
+
+	initialize: function(el, options) {
+		this.el = $(el);
+		this.setOptions(options);
+		if (this.options.opacity) {
+			this.el.o = new fx.Opacity(el, options);
+			options.onComplete = null;
+		}
+		if (this.options.height) {
+			this.el.h = new fx.Height(el, options);
+			options.onComplete = null;	
+		}
+		if (this.options.width) this.el.w = new fx.Width(el, options);
+	},
+	
+	toggle: function() { this.checkExec('toggle'); },
+
+	hide: function(){ this.checkExec('hide'); },
+	
+	clearTimer: function(){ this.checkExec('clearTimer'); },
+	
+	checkExec: function(func){
+		if (this.el.o) this.el.o[func]();
+		if (this.el.h) this.el.h[func]();
+		if (this.el.w) this.el.w[func]();
+	},
+	
+	//only if width+height
+	resizeTo: function(hto, wto) {
+		if (this.el.h && this.el.w) {
+			this.el.h.custom(this.el.offsetHeight, this.el.offsetHeight + hto);
+			this.el.w.custom(this.el.offsetWidth, this.el.offsetWidth + wto);
+		}
+	},
+
+	customSize: function(hto, wto) {
+		if (this.el.h && this.el.w) {
+			this.el.h.custom(this.el.offsetHeight, hto);
+			this.el.w.custom(this.el.offsetWidth, wto);
+		}
+	}
+}
+
+fx.Accordion = Class.create();
+fx.Accordion.prototype = {
+	setOptions: function(options) {
+		this.options = {
+			delay: 100,
+			opacity: false
+		}
+		Object.extend(this.options, options || {});
+	},
+
+	initialize: function(togglers, elements, options) {
+		this.elements = elements;
+		this.setOptions(options);
+		var options = options || '';
+		elements.each(function(el, i){
+			options.onComplete = function(){
+				if (el.offsetHeight > 0) el.style.height = '1%';
+			}
+			el.fx = new fx.Combo(el, options);
+			el.fx.hide();
+		});
+
+		togglers.each(function(tog, i){
+			tog.onclick = function(){
+				this.showThisHideOpen(elements[i]);
+			}.bind(this);
+		}.bind(this));
+	},
+
+	showThisHideOpen: function(toShow){
+		if (toShow.offsetHeight == 0) setTimeout(function(){this.clearAndToggle(toShow);}.bind(this), this.options.delay);
+		this.elements.each(function(el, i){
+			if (el.offsetHeight > 0 && el != toShow) this.clearAndToggle(el);
+		}.bind(this));
+	},
+
+	clearAndToggle: function(el){
+		el.fx.clearTimer();
+		el.fx.toggle();
+	}
+}
+
+var Remember = new Object();
+Remember = function(){};
+Remember.prototype = {
+	initialize: function(el, options){
+		this.el = $(el);
+		this.days = 365;
+		this.options = options;
+		this.effect();
+		var cookie = this.readCookie();
+		if (cookie) {
+			this.fx.now = cookie;
+			this.fx.increase();
+		}
+	},
+
+	//cookie functions based on code by Peter-Paul Koch
+	setCookie: function(value) {
+		var date = new Date();
+		date.setTime(date.getTime()+(this.days*24*60*60*1000));
+		var expires = "; expires="+date.toGMTString();
+		document.cookie = this.el+this.el.id+this.prefix+"="+value+expires+"; path=/";
+	},
+
+	readCookie: function() {
+		var nameEQ = this.el+this.el.id+this.prefix + "=";
+		var ca = document.cookie.split(';');
+		for(var i=0;c=ca[i];i++) {
+			while (c.charAt(0)==' ') c = c.substring(1,c.length);
+			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
+		}
+		return false;
+	},
+
+	custom: function(from, to){
+		if (this.fx.now != to) {
+			this.setCookie(to);
+			this.fx.custom(from, to);
+		}
+	}
+}
+
+fx.RememberHeight = Class.create();
+fx.RememberHeight.prototype = Object.extend(new Remember(), {
+	effect: function(){
+		this.fx = new fx.Height(this.el, this.options);
+		this.prefix = 'height';
+	},
+	
+	toggle: function(){
+		if (this.el.offsetHeight == 0) this.setCookie(this.el.scrollHeight);
+		else this.setCookie(0);
+		this.fx.toggle();
+	},
+	
+	resize: function(to){
+		this.setCookie(this.el.offsetHeight+to);
+		this.fx.custom(this.el.offsetHeight,this.el.offsetHeight+to);
+	},
+
+	hide: function(){
+		if (!this.readCookie()) {
+			this.fx.hide();
+		}
+	}
+});
+
+fx.RememberText = Class.create();
+fx.RememberText.prototype = Object.extend(new Remember(), {
+	effect: function(){
+		this.fx = new fx.Text(this.el, this.options);
+		this.prefix = 'text';
+	}
+});
+
+//useful for-replacement
+Array.prototype.each = function(func){
+	for(var i=0;ob=this[i];i++) func(ob, i);
+}
+
+//Easing Equations (c) 2003 Robert Penner, all rights reserved.
+//This work is subject to the terms in http://www.robertpenner.com/easing_terms_of_use.html.
+
+//expo
+fx.expoIn = function(pos){
+	return Math.pow(2, 10 * (pos - 1));
+}
+fx.expoOut = function(pos){
+	return (-Math.pow(2, -10 * pos) + 1);
+}
+
+//quad
+fx.quadIn = function(pos){
+	return Math.pow(pos, 2);
+}
+fx.quadOut = function(pos){
+	return -(pos)*(pos-2);
+}
+
+//circ
+fx.circOut = function(pos){
+	return Math.sqrt(1 - Math.pow(pos-1,2));
+}
+fx.circIn = function(pos){
+	return -(Math.sqrt(1 - Math.pow(pos, 2)) - 1);
+}
+
+//back
+fx.backIn = function(pos){
+	return (pos)*pos*((2.7)*pos - 1.7);
+}
+fx.backOut = function(pos){
+	return ((pos-1)*(pos-1)*((2.7)*(pos-1) + 1.7) + 1);
+}
+
+//sine
+fx.sineOut = function(pos){
+	return Math.sin(pos * (Math.PI/2));
+}
+fx.sineIn = function(pos){
+	return -Math.cos(pos * (Math.PI/2)) + 1;
+}
+fx.sineInOut = function(pos){
+	return -(Math.cos(Math.PI*pos) - 1)/2;
+}
\ No newline at end of file



More information about the pLog-svn mailing list