Browse Source

Updated mootools

Save "show advanced settings" in cookie
pull/51/merge
Ruud 14 years ago
parent
commit
097ca4e2ed
  1. 224
      couchpotato/static/scripts/library/mootools.js
  2. 425
      couchpotato/static/scripts/library/mootools_more.js
  3. 8
      couchpotato/static/scripts/page/settings.js

224
couchpotato/static/scripts/library/mootools.js

@ -3,10 +3,10 @@
MooTools: the javascript framework MooTools: the javascript framework
web build: web build:
- http://mootools.net/core/c1215700e7dedaa9d48503126daf2111 - http://mootools.net/core/3e4fc9be110c01367e16b46df47d66b7
packager build: packager build:
- packager build Core/Class Core/Class.Extras Core/Element Core/Element.Style Core/Element.Dimensions Core/Fx.Tween Core/Fx.Morph Core/Fx.Transitions Core/Request.JSON Core/DOMReady - packager build Core/Class Core/Class.Extras Core/Element Core/Element.Style Core/Element.Dimensions Core/Fx.Tween Core/Fx.Morph Core/Fx.Transitions Core/Request.JSON Core/Cookie Core/DOMReady
/* /*
--- ---
@ -33,8 +33,8 @@ provides: [Core, MooTools, Type, typeOf, instanceOf, Native]
(function(){ (function(){
this.MooTools = { this.MooTools = {
version: '1.3.1', version: '1.3.2',
build: 'af48c8d589f43f32212f9bb8ff68a127e6a3ba6c' build: 'c9f1ff10e9e7facb65e9481049ed1b450959d587'
}; };
// typeOf, instanceOf // typeOf, instanceOf
@ -398,7 +398,7 @@ String.extend('uniqueID', function(){
}).call(this); })();
/* /*
@ -419,13 +419,7 @@ provides: Array
Array.implement({ Array.implement({
invoke: function(methodName){ /*<!ES5>*/
var args = Array.slice(arguments, 1);
return this.map(function(item){
return item[methodName].apply(item, args);
});
},
every: function(fn, bind){ every: function(fn, bind){
for (var i = 0, l = this.length; i < l; i++){ for (var i = 0, l = this.length; i < l; i++){
if ((i in this) && !fn.call(bind, this[i], i, this)) return false; if ((i in this) && !fn.call(bind, this[i], i, this)) return false;
@ -441,12 +435,6 @@ Array.implement({
return results; return results;
}, },
clean: function(){
return this.filter(function(item){
return item != null;
});
},
indexOf: function(item, from){ indexOf: function(item, from){
var len = this.length; var len = this.length;
for (var i = (from < 0) ? Math.max(0, len + from) : from || 0; i < len; i++){ for (var i = (from < 0) ? Math.max(0, len + from) : from || 0; i < len; i++){
@ -469,6 +457,20 @@ Array.implement({
} }
return false; return false;
}, },
/*</!ES5>*/
clean: function(){
return this.filter(function(item){
return item != null;
});
},
invoke: function(methodName){
var args = Array.slice(arguments, 1);
return this.map(function(item){
return item[methodName].apply(item, args);
});
},
associate: function(keys){ associate: function(keys){
var obj = {}, length = Math.min(this.length, keys.length); var obj = {}, length = Math.min(this.length, keys.length);
@ -694,6 +696,7 @@ Function.implement({
return null; return null;
}, },
/*<!ES5>*/
bind: function(bind){ bind: function(bind){
var self = this, var self = this,
args = (arguments.length > 1) ? Array.slice(arguments, 1) : null; args = (arguments.length > 1) ? Array.slice(arguments, 1) : null;
@ -704,6 +707,7 @@ Function.implement({
return self.apply(bind, args || arguments); return self.apply(bind, args || arguments);
}; };
}, },
/*</!ES5>*/
pass: function(args, bind){ pass: function(args, bind){
var self = this; var self = this;
@ -894,7 +898,7 @@ Class.Mutators = {
} }
}; };
}).call(this); })();
/* /*
@ -1015,7 +1019,7 @@ this.Options = new Class({
}); });
}).call(this); })();
/* /*
@ -1179,12 +1183,13 @@ Document.mirror(function(name, method){
}); });
document.html = document.documentElement; document.html = document.documentElement;
document.head = document.getElementsByTagName('head')[0]; if (!document.head) document.head = document.getElementsByTagName('head')[0];
if (document.execCommand) try { if (document.execCommand) try {
document.execCommand("BackgroundImageCache", false, true); document.execCommand("BackgroundImageCache", false, true);
} catch (e){} } catch (e){}
/*<ltIE9>*/
if (this.attachEvent && !this.addEventListener){ if (this.attachEvent && !this.addEventListener){
var unloadEvent = function(){ var unloadEvent = function(){
this.detachEvent('onunload', unloadEvent); this.detachEvent('onunload', unloadEvent);
@ -1216,10 +1221,11 @@ try {
}; };
}); });
} }
/*</ltIE9>*/
}).call(this); })();
/* /*
@ -1785,17 +1791,28 @@ local.search = function(context, expression, append, first){
/*<query-selector-override>*/ /*<query-selector-override>*/
querySelector: if (context.querySelectorAll) { querySelector: if (context.querySelectorAll) {
if (!this.isHTMLDocument || this.brokenMixedCaseQSA || qsaFailExpCache[expression] || if (!this.isHTMLDocument
(this.brokenCheckedQSA && expression.indexOf(':checked') > -1) || || qsaFailExpCache[expression]
(this.brokenEmptyAttributeQSA && reEmptyAttribute.test(expression)) || Slick.disableQSA) break querySelector; //TODO: only skip when expression is actually mixed case
|| this.brokenMixedCaseQSA
var _expression = expression; || (this.brokenCheckedQSA && expression.indexOf(':checked') > -1)
|| (this.brokenEmptyAttributeQSA && reEmptyAttribute.test(expression))
|| (!contextIsDocument //Abort when !contextIsDocument and...
// there are multiple expressions in the selector
// since we currently only fix non-document rooted QSA for single expression selectors
&& expression.indexOf(',') > -1
)
|| Slick.disableQSA
) break querySelector;
var _expression = expression, _context = context;
if (!contextIsDocument){ if (!contextIsDocument){
// non-document rooted QSA // non-document rooted QSA
// credits to Andrew Dupont // credits to Andrew Dupont
var currentId = context.getAttribute('id'), slickid = 'slickid__'; var currentId = _context.getAttribute('id'), slickid = 'slickid__';
context.setAttribute('id', slickid); _context.setAttribute('id', slickid);
_expression = '#' + slickid + ' ' + _expression; _expression = '#' + slickid + ' ' + _expression;
context = _context.parentNode;
} }
try { try {
@ -1806,8 +1823,9 @@ local.search = function(context, expression, append, first){
break querySelector; break querySelector;
} finally { } finally {
if (!contextIsDocument){ if (!contextIsDocument){
if (currentId) context.setAttribute('id', currentId); if (currentId) _context.setAttribute('id', currentId);
else context.removeAttribute('id'); else _context.removeAttribute('id');
context = _context;
} }
} }
@ -2445,8 +2463,10 @@ var Element = function(tag, props){
var attributes = parsed.attributes; var attributes = parsed.attributes;
if (attributes) for (var i = 0, l = attributes.length; i < l; i++){ if (attributes) for (var i = 0, l = attributes.length; i < l; i++){
var attr = attributes[i]; var attr = attributes[i];
if (attr.value != null && attr.operator == '=' && props[attr.key] == null) if (props[attr.key] != null) continue;
props[attr.key] = attr.value;
if (attr.value != null && attr.operator == '=') props[attr.key] = attr.value;
else if (!attr.value && !attr.operator) props[attr.key] = true;
} }
if (parsed.classList && props['class'] == null) props['class'] = parsed.classList.join(' '); if (parsed.classList && props['class'] == null) props['class'] = parsed.classList.join(' ');
@ -3103,11 +3123,12 @@ if (!document.createElement('div').contains) Element.implement(contains);
}); });
// IE purge /*<ltIE9>*/
if (window.attachEvent && !window.addEventListener) window.addListener('unload', function(){ if (window.attachEvent && !window.addEventListener) window.addListener('unload', function(){
Object.each(collected, clean); Object.each(collected, clean);
if (window.CollectGarbage) CollectGarbage(); if (window.CollectGarbage) CollectGarbage();
}); });
/*</ltIE9>*/
})(); })();
@ -3139,6 +3160,7 @@ Element.Properties.tag = {
}; };
/*<ltIE9>*/
(function(maxLength){ (function(maxLength){
if (maxLength != null) Element.Properties.maxlength = Element.Properties.maxLength = { if (maxLength != null) Element.Properties.maxlength = Element.Properties.maxLength = {
get: function(){ get: function(){
@ -3147,7 +3169,9 @@ Element.Properties.tag = {
} }
}; };
})(document.createElement('input').getAttribute('maxLength')); })(document.createElement('input').getAttribute('maxLength'));
/*</ltIE9>*/
/*<!webkit>*/
Element.Properties.html = (function(){ Element.Properties.html = (function(){
var tableTest = Function.attempt(function(){ var tableTest = Function.attempt(function(){
@ -3184,6 +3208,7 @@ Element.Properties.html = (function(){
return html; return html;
})(); })();
/*</!webkit>*/
/* /*
@ -3218,7 +3243,8 @@ var setOpacity = function(element, opacity){
if (hasOpacity){ if (hasOpacity){
element.style.opacity = opacity; element.style.opacity = opacity;
} else { } else {
opacity = (opacity == 1) ? '' : 'alpha(opacity=' + opacity * 100 + ')'; opacity = (opacity * 100).limit(0, 100).round();
opacity = (opacity == 100) ? '' : 'alpha(opacity=' + opacity + ')';
var filter = element.style.filter || element.getComputedStyle('filter') || ''; var filter = element.style.filter || element.getComputedStyle('filter') || '';
element.style.filter = reAlpha.test(filter) ? filter.replace(reAlpha, opacity) : filter + opacity; element.style.filter = reAlpha.test(filter) ? filter.replace(reAlpha, opacity) : filter + opacity;
} }
@ -3364,7 +3390,7 @@ Element.ShortStyles = {margin: {}, padding: {}, border: {}, borderWidth: {}, bor
Short.borderColor[bdc] = Short[bd][bdc] = All[bdc] = 'rgb(@, @, @)'; Short.borderColor[bdc] = Short[bd][bdc] = All[bdc] = 'rgb(@, @, @)';
}); });
}).call(this); })();
/* /*
@ -3610,7 +3636,7 @@ function getCompatElement(element){
return (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body; return (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body;
} }
}).call(this); })();
//aliases //aliases
Element.alias({position: 'setPosition'}); //compatability Element.alias({position: 'setPosition'}); //compatability
@ -3830,7 +3856,7 @@ var pullInstance = function(fps){
} }
}; };
}).call(this); })();
/* /*
@ -4301,7 +4327,7 @@ Object.extend({
var results = {}; var results = {};
for (var i = 0, l = keys.length; i < l; i++){ for (var i = 0, l = keys.length; i < l; i++){
var k = keys[i]; var k = keys[i];
results[k] = object[k]; if (k in object) results[k] = object[k];
} }
return results; return results;
}, },
@ -4316,9 +4342,10 @@ Object.extend({
filter: function(object, fn, bind){ filter: function(object, fn, bind){
var results = {}; var results = {};
Object.each(object, function(value, key){ for (var key in object){
if (fn.call(bind, value, key, object)) results[key] = value; var value = object[key];
}); if (hasOwnProperty.call(object, key) && fn.call(bind, value, key, object)) results[key] = value;
}
return results; return results;
}, },
@ -4749,7 +4776,7 @@ JSON.decode = function(string, secure){
return eval('(' + string + ')'); return eval('(' + string + ')');
}; };
}).call(this); })();
/* /*
@ -4803,6 +4830,82 @@ Request.JSON = new Class({
/* /*
--- ---
name: Cookie
description: Class for creating, reading, and deleting browser Cookies.
license: MIT-style license.
credits:
- Based on the functions by Peter-Paul Koch (http://quirksmode.org).
requires: [Options, Browser]
provides: Cookie
...
*/
var Cookie = new Class({
Implements: Options,
options: {
path: '/',
domain: false,
duration: false,
secure: false,
document: document,
encode: true
},
initialize: function(key, options){
this.key = key;
this.setOptions(options);
},
write: function(value){
if (this.options.encode) value = encodeURIComponent(value);
if (this.options.domain) value += '; domain=' + this.options.domain;
if (this.options.path) value += '; path=' + this.options.path;
if (this.options.duration){
var date = new Date();
date.setTime(date.getTime() + this.options.duration * 24 * 60 * 60 * 1000);
value += '; expires=' + date.toGMTString();
}
if (this.options.secure) value += '; secure';
this.options.document.cookie = this.key + '=' + value;
return this;
},
read: function(){
var value = this.options.document.cookie.match('(?:^|;)\\s*' + this.key.escapeRegExp() + '=([^;]*)');
return (value) ? decodeURIComponent(value[1]) : null;
},
dispose: function(){
new Cookie(this.key, Object.merge({}, this.options, {duration: -1})).write('');
return this;
}
});
Cookie.write = function(key, value, options){
return new Cookie(key, options).write(value);
};
Cookie.read = function(key){
return new Cookie(key).read();
};
Cookie.dispose = function(key, options){
return new Cookie(key, options).dispose();
};
/*
---
name: Event name: Event
description: Contains the Event Class, to make the event object cross-browser. description: Contains the Event Class, to make the event object cross-browser.
@ -5103,7 +5206,7 @@ Element.Events = {
}).call(this); })();
/* /*
@ -5129,12 +5232,7 @@ var ready,
checks = [], checks = [],
shouldPoll, shouldPoll,
timer, timer,
isFramed = true; testElement = document.createElement('div');
// Thanks to Rich Dougherty <http://www.richdougherty.com/>
try {
isFramed = window.frameElement != null;
} catch(e){}
var domready = function(){ var domready = function(){
clearTimeout(timer); clearTimeout(timer);
@ -5151,7 +5249,6 @@ var check = function(){
domready(); domready();
return true; return true;
} }
return false; return false;
}; };
@ -5162,19 +5259,23 @@ var poll = function(){
document.addListener('DOMContentLoaded', domready); document.addListener('DOMContentLoaded', domready);
/*<ltIE8>*/
// doScroll technique by Diego Perini http://javascript.nwbox.com/IEContentLoaded/ // doScroll technique by Diego Perini http://javascript.nwbox.com/IEContentLoaded/
var testElement = document.createElement('div'); // testElement.doScroll() throws when the DOM is not ready, only in the top window
if (testElement.doScroll && !isFramed){ var doScrollWorks = function(){
checks.push(function(){ try {
try { testElement.doScroll();
testElement.doScroll(); return true;
return true; } catch (e){}
} catch (e){} return false;
}
return false; // If doScroll works already, it can't be used to determine domready
}); // e.g. in an iframe
if (testElement.doScroll && !doScrollWorks()){
checks.push(doScrollWorks);
shouldPoll = true; shouldPoll = true;
} }
/*</ltIE8>*/
if (document.readyState) checks.push(function(){ if (document.readyState) checks.push(function(){
var state = document.readyState; var state = document.readyState;
@ -5203,7 +5304,6 @@ Element.Events.load = {
domready(); domready();
delete Element.Events.load; delete Element.Events.load;
} }
return true; return true;
} }
}; };

425
couchpotato/static/scripts/library/mootools_more.js

@ -20,6 +20,7 @@ authors:
- Tim Wienk - Tim Wienk
- Christoph Pojer - Christoph Pojer
- Aaron Newton - Aaron Newton
- Jacob Thornton
requires: requires:
- Core/MooTools - Core/MooTools
@ -30,8 +31,8 @@ provides: [MooTools.More]
*/ */
MooTools.More = { MooTools.More = {
'version': '1.3.1.1', 'version': '1.3.2.1',
'build': '0292a3af1eea242b817fecf9daa127417d10d4ce' 'build': 'e586bcd2496e9b22acfde32e12f84d49ce09e59d'
}; };
@ -182,7 +183,7 @@ String.implement({
}); });
}).call(this); })();
/* /*
@ -506,7 +507,7 @@ Events.implement(Events.Pseudos(pseudos, proto.addEvent, proto.removeEvent));
if (this[klass]) this[klass].implement(Events.prototype); if (this[klass]) this[klass].implement(Events.prototype);
}); });
}).call(this); })();
/* /*
@ -544,7 +545,7 @@ Event.definePseudo = function(key, listener){
var proto = Element.prototype; var proto = Element.prototype;
[Element, Window, Document].invoke('implement', Events.Pseudos(pseudos, proto.addEvent, proto.removeEvent)); [Element, Window, Document].invoke('implement', Events.Pseudos(pseudos, proto.addEvent, proto.removeEvent));
}).call(this); })();
/* /*
@ -586,6 +587,12 @@ var check = function(split, target, event){
return Slick.match(target, split.value) && (!condition || condition.call(target, event)); return Slick.match(target, split.value) && (!condition || condition.call(target, event));
}; };
var bubbleUp = function(split, event, fn){
for (var target = event.target; target && target != this; target = document.id(target.parentNode)){
if (target && check(split, target, event)) return fn.call(target, event, target);
}
};
var formObserver = function(eventName){ var formObserver = function(eventName){
var $delegationKey = '$delegation:'; var $delegationKey = '$delegation:';
@ -607,16 +614,20 @@ var formObserver = function(eventName){
var event = args[0], var event = args[0],
forms = this.retrieve($delegationKey + 'forms', []), forms = this.retrieve($delegationKey + 'forms', []),
target = event.target, target = event.target,
form = (target.get('tag') == 'form') ? target : event.target.getParent('form'), form = (target.get('tag') == 'form') ? target : event.target.getParent('form');
formEvents = form.retrieve($delegationKey + 'originalFn', []),
formListeners = form.retrieve($delegationKey + 'listeners', []); if (!form) return;
var formEvents = form.retrieve($delegationKey + 'originalFn', []),
formListeners = form.retrieve($delegationKey + 'listeners', []),
self = this;
forms.include(form); forms.include(form);
this.store($delegationKey + 'forms', forms); this.store($delegationKey + 'forms', forms);
if (!formEvents.contains(fn)){ if (!formEvents.contains(fn)){
var formListener = function(event){ var formListener = function(event){
if (check(split, this, event)) fn.call(this, event); bubbleUp.call(self, split, event, fn);
}; };
form.addEvent(eventName, formListener); form.addEvent(eventName, formListener);
@ -636,9 +647,9 @@ var inputObserver = function(eventName){
listener: function(split, fn, args){ listener: function(split, fn, args){
var events = {blur: function(){ var events = {blur: function(){
this.removeEvents(events); this.removeEvents(events);
}}; }}, self = this;
events[eventName] = function(event){ events[eventName] = function(event){
if (check(split, this, event)) fn.call(this, event); bubbleUp.call(self, split, event, fn);
}; };
args[0].target.addEvents(events); args[0].target.addEvents(events);
} }
@ -669,24 +680,14 @@ if (!eventListenerSupport) Object.append(eventOptions, {
select: inputObserver('select') select: inputObserver('select')
}); });
Event.definePseudo('relay', { Event.definePseudo('relay', {
listener: function(split, fn, args, monitor, options){ listener: function(split, fn, args){
var event = args[0]; bubbleUp.call(this, split, args[0], fn);
for (var target = event.target; target && target != this; target = target.parentNode){
var finalTarget = document.id(target);
if (check(split, finalTarget, event)){
if (finalTarget) fn.call(finalTarget, event, finalTarget);
return;
}
}
}, },
options: eventOptions options: eventOptions
}); });
}).call(this); })();
/* /*
@ -826,7 +827,7 @@ Fx.Slide = new Class({
this.addEvent('complete', function(){ this.addEvent('complete', function(){
this.open = (wrapper['offset' + this.layout.capitalize()] != 0); this.open = (wrapper['offset' + this.layout.capitalize()] != 0);
if (this.open && options.resetHeight) wrapper.setStyle('height', ''); if (this.open && this.options.resetHeight) wrapper.setStyle('height', '');
}, true); }, true);
}, },
@ -1050,12 +1051,6 @@ var Drag = new Class({
var limit = options.limit; var limit = options.limit;
this.limit = {x: [], y: []}; this.limit = {x: [], y: []};
var styles = this.element.getStyles('left', 'right', 'top', 'bottom');
this._invert = {
x: options.modifiers.x == 'left' && styles.left == 'auto' && !isNaN(styles.right.toInt()) && (options.modifiers.x = 'right'),
y: options.modifiers.y == 'top' && styles.top == 'auto' && !isNaN(styles.bottom.toInt()) && (options.modifiers.y = 'bottom')
};
var z, coordinates; var z, coordinates;
for (z in options.modifiers){ for (z in options.modifiers){
if (!options.modifiers[z]) continue; if (!options.modifiers[z]) continue;
@ -1072,7 +1067,6 @@ var Drag = new Class({
else this.value.now[z] = this.element[options.modifiers[z]]; else this.value.now[z] = this.element[options.modifiers[z]];
if (options.invert) this.value.now[z] *= -1; if (options.invert) this.value.now[z] *= -1;
if (this._invert[z]) this.value.now[z] *= -1;
this.mouse.pos[z] = event.page[z] - this.value.now[z]; this.mouse.pos[z] = event.page[z] - this.value.now[z];
@ -1122,7 +1116,6 @@ var Drag = new Class({
this.value.now[z] = this.mouse.now[z] - this.mouse.pos[z]; this.value.now[z] = this.mouse.now[z] - this.mouse.pos[z];
if (options.invert) this.value.now[z] *= -1; if (options.invert) this.value.now[z] *= -1;
if (this._invert[z]) this.value.now[z] *= -1;
if (options.limit && this.limit[z]){ if (options.limit && this.limit[z]){
if ((this.limit[z][1] || this.limit[z][1] === 0) && (this.value.now[z] > this.limit[z][1])){ if ((this.limit[z][1] || this.limit[z][1] === 0) && (this.value.now[z] > this.limit[z][1])){
@ -1236,10 +1229,9 @@ Drag.Move = new Class({
this.container = document.id(this.container.getDocument().body); this.container = document.id(this.container.getDocument().body);
if (this.options.style){ if (this.options.style){
if (this.options.modifiers.x == "left" && this.options.modifiers.y == "top"){ if (this.options.modifiers.x == 'left' && this.options.modifiers.y == 'top'){
var parentStyles, var parent = element.getOffsetParent(),
parent = element.getOffsetParent(); styles = element.getStyles('left', 'top');
var styles = element.getStyles('left', 'top');
if (parent && (styles.left == 'auto' || styles.top == 'auto')){ if (parent && (styles.left == 'auto' || styles.top == 'auto')){
element.setPosition(element.getPosition(parent)); element.setPosition(element.getPosition(parent));
} }
@ -1640,8 +1632,7 @@ Request.JSONP = new Class({
Implements: [Chain, Events, Options], Implements: [Chain, Events, Options],
options: { options: {/*
/*
onRequest: function(src, scriptElement){}, onRequest: function(src, scriptElement){},
onComplete: function(data){}, onComplete: function(data){},
onSuccess: function(data){}, onSuccess: function(data){},
@ -1708,7 +1699,8 @@ Request.JSONP = new Class({
}, },
getScript: function(src){ getScript: function(src){
if (!this.script) this.script = new Element('script[type=text/javascript]', { if (!this.script) this.script = new Element('script', {
type: 'text/javascript',
async: true, async: true,
src: src src: src
}); });
@ -1716,7 +1708,7 @@ Request.JSONP = new Class({
}, },
success: function(args, index){ success: function(args, index){
if (!this.running) return false; if (!this.running) return;
this.clear() this.clear()
.fireEvent('complete', args).fireEvent('success', args) .fireEvent('complete', args).fireEvent('success', args)
.callChain(); .callChain();
@ -1835,10 +1827,10 @@ Class.refactor = function(original, refactors){
Object.each(refactors, function(item, name){ Object.each(refactors, function(item, name){
var origin = original.prototype[name]; var origin = original.prototype[name];
if (origin && origin.$origin) origin = origin.$origin; origin = (origin && origin.$origin) || origin || function(){};
original.implement(name, (typeof item == 'function') ? function(){ original.implement(name, (typeof item == 'function') ? function(){
var old = this.previous; var old = this.previous;
this.previous = origin || function(){}; this.previous = origin;
var value = item.apply(this, arguments); var value = item.apply(this, arguments);
this.previous = old; this.previous = old;
return value; return value;
@ -1875,7 +1867,7 @@ provides: [Class.Binds]
Class.Mutators.Binds = function(binds){ Class.Mutators.Binds = function(binds){
if (!this.prototype.initialize) this.implement('initialize', function(){}); if (!this.prototype.initialize) this.implement('initialize', function(){});
return binds; return Array.from(binds).concat(this.prototype.Binds || []);
}; };
Class.Mutators.initialize = function(initialize){ Class.Mutators.initialize = function(initialize){
@ -2055,7 +2047,7 @@ Element.implement({
}); });
}).call(this); })();
/* /*
@ -2071,219 +2063,228 @@ license: MIT-style license
authors: authors:
- Aaron Newton - Aaron Newton
- Jacob Thornton
requires: requires:
- Core/Options
- Core/Element.Dimensions - Core/Element.Dimensions
- /Element.Measure - Element.Measure
provides: [Element.Position] provides: [Element.Position]
... ...
*/ */
(function(){ (function(original){
var original = Element.prototype.position; var local = Element.Position = {
Element.implement({ options: {/*
edge: false,
returnPos: false,
minimum: {x: 0, y: 0},
maximum: {x: 0, y: 0},
relFixedPosition: false,
ignoreMargins: false,
ignoreScroll: false,
allowNegative: false,*/
relativeTo: document.body,
position: {
x: 'center', //left, center, right
y: 'center' //top, center, bottom
},
offset: {x: 0, y: 0}
},
position: function(options){ getOptions: function(element, options){
//call original position if the options are x/y values options = Object.merge({}, local.options, options);
if (options && (options.x != null || options.y != null)){ local.setPositionOption(options);
return original ? original.apply(this, arguments) : this; local.setEdgeOption(options);
} local.setOffsetOption(element, options);
local.setDimensionsOption(element, options);
return options;
},
Object.each(options || {}, function(v, k){ setPositionOption: function(options){
if (v == null) delete options[k]; options.position = local.getCoordinateFromValue(options.position);
}); },
options = Object.merge({ setEdgeOption: function(options){
// minimum: { x: 0, y: 0 }, var edgeOption = local.getCoordinateFromValue(options.edge);
// maximum: { x: 0, y: 0}, options.edge = edgeOption ? edgeOption :
relativeTo: document.body, (options.position.x == 'center' && options.position.y == 'center') ? {x: 'center', y: 'center'} :
position: { {x: 'left', y: 'top'};
x: 'center', //left, center, right },
y: 'center' //top, center, bottom
},
offset: {x: 0, y: 0}/*,
edge: false,
returnPos: false,
relFixedPosition: false,
ignoreMargins: false,
ignoreScroll: false,
allowNegative: false*/
}, options);
//compute the offset of the parent positioned element if this element is in one setOffsetOption: function(element, options){
var parentOffset = {x: 0, y: 0}, var parentOffset = {x: 0, y: 0},
parentPositioned = false; offsetParent = element.measure(function(){
return document.id(this.getOffsetParent());
}),
parentScroll = offsetParent.getScroll();
if (!offsetParent || offsetParent == element.getDocument().body) return;
parentOffset = offsetParent.measure(function(){
var position = this.getPosition();
if (this.getStyle('position') == 'fixed'){
var scroll = window.getScroll();
position.x += scroll.x;
position.y += scroll.y;
}
return position;
});
/* dollar around getOffsetParent should not be necessary, but as it does not return options.offset = {
* a mootools extended element in IE, an error occurs on the call to expose. See: parentPositioned: offsetParent != document.id(options.relativeTo),
* http://mootools.lighthouseapp.com/projects/2706/tickets/333-element-getoffsetparent-inconsistency-between-ie-and-other-browsers */ x: options.offset.x - parentOffset.x + parentScroll.x,
var offsetParent = this.measure(function(){ y: options.offset.y - parentOffset.y + parentScroll.y
return document.id(this.getOffsetParent()); };
},
setDimensionsOption: function(element, options){
options.dimensions = element.getDimensions({
computeSize: true,
styles: ['padding', 'border', 'margin']
}); });
if (offsetParent && offsetParent != this.getDocument().body){ },
parentOffset = offsetParent.measure(function(){
return this.getPosition();
});
parentPositioned = offsetParent != document.id(options.relativeTo);
options.offset.x = options.offset.x - parentOffset.x;
options.offset.y = options.offset.y - parentOffset.y;
}
//upperRight, bottomRight, centerRight, upperLeft, bottomLeft, centerLeft getPosition: function(element, options){
//topRight, topLeft, centerTop, centerBottom, center var position = {};
var fixValue = function(option){ options = local.getOptions(element, options);
if (typeOf(option) != 'string') return option; var relativeTo = document.id(options.relativeTo) || document.body;
option = option.toLowerCase();
var val = {};
if (option.test('left')){
val.x = 'left';
} else if (option.test('right')){
val.x = 'right';
} else {
val.x = 'center';
}
if (option.test('upper') || option.test('top')){ local.setPositionCoordinates(options, position, relativeTo);
val.y = 'top'; if (options.edge) local.toEdge(position, options);
} else if (option.test('bottom')){
val.y = 'bottom';
} else {
val.y = 'center';
}
return val; var offset = options.offset;
}; position.left = ((position.x >= 0 || offset.parentPositioned || options.allowNegative) ? position.x : 0).toInt();
position.top = ((position.y >= 0 || offset.parentPositioned || options.allowNegative) ? position.y : 0).toInt();
options.edge = fixValue(options.edge); local.toMinMax(position, options);
options.position = fixValue(options.position);
if (!options.edge){
if (options.position.x == 'center' && options.position.y == 'center') options.edge = {x:'center', y:'center'};
else options.edge = {x:'left', y:'top'};
}
this.setStyle('position', 'absolute'); if (options.relFixedPosition || relativeTo.getStyle('position') == 'fixed') local.toRelFixedPosition(relativeTo, position);
var rel = document.id(options.relativeTo) || document.body, if (options.ignoreScroll) local.toIgnoreScroll(relativeTo, position);
calc = rel == document.body ? window.getScroll() : rel.getPosition(), if (options.ignoreMargins) local.toIgnoreMargins(position, options);
top = calc.y, left = calc.x;
var dim = this.getDimensions({ position.left = Math.ceil(position.left);
computeSize: true, position.top = Math.ceil(position.top);
styles:['padding', 'border','margin'] delete position.x;
}); delete position.y;
return position;
},
var pos = {}, setPositionCoordinates: function(options, position, relativeTo){
prefY = options.offset.y, var offsetY = options.offset.y,
prefX = options.offset.x, offsetX = options.offset.x,
calc = (relativeTo == document.body) ? window.getScroll() : relativeTo.getPosition(),
top = calc.y,
left = calc.x,
winSize = window.getSize(); winSize = window.getSize();
switch (options.position.x){ switch(options.position.x){
case 'left': case 'left': position.x = left + offsetX; break;
pos.x = left + prefX; case 'right': position.x = left + offsetX + relativeTo.offsetWidth; break;
break; default: position.x = left + ((relativeTo == document.body ? winSize.x : relativeTo.offsetWidth) / 2) + offsetX; break;
case 'right':
pos.x = left + prefX + rel.offsetWidth;
break;
default: //center
pos.x = left + ((rel == document.body ? winSize.x : rel.offsetWidth)/2) + prefX;
break;
} }
switch (options.position.y){ switch(options.position.y){
case 'top': case 'top': position.y = top + offsetY; break;
pos.y = top + prefY; case 'bottom': position.y = top + offsetY + relativeTo.offsetHeight; break;
break; default: position.y = top + ((relativeTo == document.body ? winSize.y : relativeTo.offsetHeight) / 2) + offsetY; break;
case 'bottom':
pos.y = top + prefY + rel.offsetHeight;
break;
default: //center
pos.y = top + ((rel == document.body ? winSize.y : rel.offsetHeight)/2) + prefY;
break;
} }
},
if (options.edge){ toMinMax: function(position, options){
var edgeOffset = {}; var xy = {left: 'x', top: 'y'}, value;
['minimum', 'maximum'].each(function(minmax){
switch (options.edge.x){ ['left', 'top'].each(function(lr){
case 'left': value = options[minmax] ? options[minmax][xy[lr]] : null;
edgeOffset.x = 0; if (value != null && ((minmax == 'minimum') ? position[lr] < value : position[lr] > value)) position[lr] = value;
break; });
case 'right': });
edgeOffset.x = -dim.x-dim.computedRight-dim.computedLeft; },
break;
default: //center
edgeOffset.x = -(dim.totalWidth/2);
break;
}
switch (options.edge.y){ toRelFixedPosition: function(relativeTo, position){
case 'top': var winScroll = window.getScroll();
edgeOffset.y = 0; position.top += winScroll.y;
break; position.left += winScroll.x;
case 'bottom': },
edgeOffset.y = -dim.y-dim.computedTop-dim.computedBottom;
break;
default: //center
edgeOffset.y = -(dim.totalHeight/2);
break;
}
pos.x += edgeOffset.x; toIgnoreScroll: function(relativeTo, position){
pos.y += edgeOffset.y; var relScroll = relativeTo.getScroll();
} position.top -= relScroll.y;
position.left -= relScroll.x;
},
pos = { toIgnoreMargins: function(position, options){
left: ((pos.x >= 0 || parentPositioned || options.allowNegative) ? pos.x : 0).toInt(), position.left += options.edge.x == 'right'
top: ((pos.y >= 0 || parentPositioned || options.allowNegative) ? pos.y : 0).toInt() ? options.dimensions['margin-right']
}; : (options.edge.x != 'center'
? -options.dimensions['margin-left']
: -options.dimensions['margin-left'] + ((options.dimensions['margin-right'] + options.dimensions['margin-left']) / 2));
var xy = {left: 'x', top: 'y'}; position.top += options.edge.y == 'bottom'
? options.dimensions['margin-bottom']
: (options.edge.y != 'center'
? -options.dimensions['margin-top']
: -options.dimensions['margin-top'] + ((options.dimensions['margin-bottom'] + options.dimensions['margin-top']) / 2));
},
['minimum', 'maximum'].each(function(minmax){ toEdge: function(position, options){
['left', 'top'].each(function(lr){ var edgeOffset = {},
var val = options[minmax] ? options[minmax][xy[lr]] : null; dimensions = options.dimensions,
if (val != null && ((minmax == 'minimum') ? pos[lr] < val : pos[lr] > val)) pos[lr] = val; edge = options.edge;
});
});
if (rel.getStyle('position') == 'fixed' || options.relFixedPosition){ switch(edge.x){
var winScroll = window.getScroll(); case 'left': edgeOffset.x = 0; break;
pos.top+= winScroll.y; case 'right': edgeOffset.x = -dimensions.x - dimensions.computedRight - dimensions.computedLeft; break;
pos.left+= winScroll.x; // center
default: edgeOffset.x = -(Math.round(dimensions.totalWidth / 2)); break;
} }
if (options.ignoreScroll){
var relScroll = rel.getScroll(); switch(edge.y){
pos.top -= relScroll.y; case 'top': edgeOffset.y = 0; break;
pos.left -= relScroll.x; case 'bottom': edgeOffset.y = -dimensions.y - dimensions.computedTop - dimensions.computedBottom; break;
// center
default: edgeOffset.y = -(Math.round(dimensions.totalHeight / 2)); break;
} }
if (options.ignoreMargins){ position.x += edgeOffset.x;
pos.left += ( position.y += edgeOffset.y;
options.edge.x == 'right' ? dim['margin-right'] : },
options.edge.x == 'center' ? -dim['margin-left'] + ((dim['margin-right'] + dim['margin-left'])/2) :
- dim['margin-left'] getCoordinateFromValue: function(option){
); if (typeOf(option) != 'string') return option;
pos.top += ( option = option.toLowerCase();
options.edge.y == 'bottom' ? dim['margin-bottom'] :
options.edge.y == 'center' ? -dim['margin-top'] + ((dim['margin-bottom'] + dim['margin-top'])/2) : return {
- dim['margin-top'] x: option.test('left') ? 'left'
); : (option.test('right') ? 'right' : 'center'),
y: option.test(/upper|top/) ? 'top'
: (option.test('bottom') ? 'bottom' : 'center')
};
}
};
Element.implement({
position: function(options){
if (options && (options.x != null || options.y != null)) {
return (original ? original.apply(this, arguments) : this);
} }
var position = this.setStyle('position', 'absolute').calculatePosition(options);
return (options && options.returnPos) ? position : this.setStyles(position);
},
pos.left = Math.ceil(pos.left); calculatePosition: function(options){
pos.top = Math.ceil(pos.top); return local.getPosition(this, options);
if (options.returnPos) return pos;
else this.setStyles(pos);
return this;
} }
}); });
}).call(this); })(Element.prototype.position);
/* /*

8
couchpotato/static/scripts/page/settings.js

@ -82,7 +82,9 @@ Page.Settings = new Class({
var self = this; var self = this;
var c = self.advanced_toggle.checked ? 'addClass' : 'removeClass'; var c = self.advanced_toggle.checked ? 'addClass' : 'removeClass';
self.el[c]('show_advanced') self.el[c]('show_advanced');
Cookie.write('advanced_toggle_checked', +self.advanced_toggle.checked, {'duration': 365});
}, },
create: function(json){ create: function(json){
@ -96,6 +98,7 @@ Page.Settings = new Class({
'text': 'Show advanced settings' 'text': 'Show advanced settings'
}), }),
self.advanced_toggle = new Element('input[type=checkbox].inlay', { self.advanced_toggle = new Element('input[type=checkbox].inlay', {
'checked': +Cookie.read('advanced_toggle_checked'),
'events': { 'events': {
'change': self.showAdvanced.bind(self) 'change': self.showAdvanced.bind(self)
} }
@ -103,6 +106,7 @@ Page.Settings = new Class({
) )
) )
); );
self.showAdvanced();
new Form.Check(self.advanced_toggle) new Form.Check(self.advanced_toggle)
@ -130,7 +134,7 @@ Page.Settings = new Class({
var class_name = (option.type || 'string').capitalize(); var class_name = (option.type || 'string').capitalize();
var input = new Option[class_name](self, section_name, option.name, option); var input = new Option[class_name](self, section_name, option.name, option);
input.inject(self.tabs[group.tab].groups[group.name]); input.inject(self.tabs[group.tab].groups[group.name]);
input.fireEvent('injected') input.fireEvent('injected');
}); });
}); });

Loading…
Cancel
Save