Commit 46ceb674 authored by Malte Sussdorff's avatar Malte Sussdorff

Initial Import

parents
Pipeline #120 failed with stages

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.

<?xml version="1.0"?>
<!-- Generated by the OpenACS Package Manager -->
<package key="ajaxhelper" url="http://openacs.org/repository/apm/packages/ajaxhelper" type="apm_service">
<package-name>Ajax Helper</package-name>
<pretty-plural>Ajax Helpers</pretty-plural>
<initial-install-p>f</initial-install-p>
<singleton-p>t</singleton-p>
<auto-mount>ajax</auto-mount>
<version name="0.82d" url="http://openacs.org/repository/download/apm/ajaxhelper-0.82d.apm">
<owner url="mailto:ham@solutiongrove.com">Hamilton Chua</owner>
<summary>Provides helper procs to generate javascript used for Ajax and generating cinematic effects. Includes Scriptaculous (1.6.5) Javascript Libraries, dojo Toolkit (0.4.1) and the Yahoo UI Libraries (0.12.1). As of 0.7d, all javascript libraries have been moved to ajaxhelper/www/resources to take advantage of caching. As of 0.8d, the wrappers will now be able to check a global variable to see if the required sources are loaded, this allows helper procs to automatically load the javascript sources you need.</summary>
<vendor>Solution Grove</vendor>
<maturity>0</maturity>
<provides url="ajaxhelper" version="0.82d"/>
<callbacks>
</callbacks>
<parameters>
<parameter datatype="number" min_n_values="1" max_n_values="1" name="UseMinifiedJs" default="0" description="Set this parameter to 1 if you want ajaxhelper to load minified versions of the javascript sources whenever possible."/>
</parameters>
</version>
</package>
ad_library {
Library for Ajax Helper Procs
based on the dojo javascript toolkit
@author Hamilton Chua (ham@solutiongrove.com)
@creation-date 2006-11-05
}
namespace eval ah::dojo { }
ad_proc -private ah::dojo::load_js_sources {
-source_list
} {
Accepts a tcl list of sources to load.
This source_list will be the global ajax_helper_dojo_js_sources variable.
This script is called in the blank-master template.
@author Hamilton Chua (ham@solutiongrove.com)
@creation-date 2006-11-05
} {
set ah_base_url [ah::get_url]
set script "<script type=\"text/javascript\" src=\"${ah_base_url}dojo-ajax/dojo.js\"></script>\n"
set dojo_script ""
foreach source $source_list {
switch $source {
"event" {
append dojo_script "dojo.require(\"dojo.event.*\"); "
}
"io" {
append dojo_script "dojo.require(\"dojo.io.*\"); "
}
"dnd" {
append dojo_script "dojo.require(\"dojo.dnd.*\"); "
}
"json" {
append dojo_script "dojo.require(\"dojo.json\"); "
}
"storage" {
append dojo_script "dojo.require(\"dojo.storage.*\"); "
}
"lfx" {
append dojo_script "dojo.require(\"dojo.lfx.*\"); "
}
"collections" {
append dojo_script "dojo.require(\"dojo.collections.Store\"); "
}
"chart" {
append dojo_script "dojo.require(\"dojo.charting.Chart\"); "
}
"widget-chart" {
append dojo_script "dojo.require(\"dojo.widget.Chart\"); "
}
}
}
append script [ah::enclose_in_script -script $dojo_script]
return $script
return ""
}
ad_proc -private ah::dojo::requires {
-sources
} {
This proc should be called by an ajaxhelper proc that uses dojo with a comma separated list of dojo javascript sources
that the ajaxhelper proc needs in order to work.
@author Hamilton Chua (ham@solutiongrove.com)
@creation-date 2006-12-19
@param sources Comma separated list of sources
} {
#split up the comma delimited sources into a list
set source_list [split $sources ","]
#declare the global variable
global ajax_helper_dojo_js_sources
foreach source $source_list {
# do some checks before we add the source to the global
# - is it already loaded
# - is it a valid source name
# - is the source utilities or yahoo,dom,event
if { ![ah::dojo::is_js_sources_loaded -js_source $source] && [ah::dojo::is_valid_source -js_source $source] } {
# TODO : figure out other dependencies and possible overlaps and try to work them out here
lappend ajax_helper_dojo_js_sources $source
} else {
# TODO : we must return an error/exception, for now just add a notice in the log
ns_log Notice "AJAXHELPER dojo: $source is already loaded or not valid"
}
}
}
ad_proc -private ah::dojo::is_js_sources_loaded {
-js_source
} {
This proc will loops thru source_list and check for the presence of js_source.
If found, this proc will return 1
If not found, this proc will return 0
@author Hamilton Chua (ham@solutiongrove.com)
@creation-date 2006-11-05
} {
global ajax_helper_dojo_js_sources
set state 0
if { [info exists ajax_helper_dojo_js_sources] } {
foreach source $ajax_helper_dojo_js_sources {
if { [string match $source $js_source] } {
set state 1
break
}
}
}
return $state
}
ad_proc -public ah::dojo::js_sources {
{-source ""}
} {
Generates the javascript that loads the dojo javascript sources.
@author Hamilton Chua (ham@solutiongrove.com)
@creation-date 2006-11-05
} {
set ah_base_url [ah::get_url]
if { ![ah::dojo::is_js_sources_loaded -js_source "dojo"] } {
set script "<script type=\"text/javascript\" src=\"${ah_base_url}dojo-ajax/dojo.js\"></script>"
}
set dojo_script ""
foreach source $source_list {
switch $source {
"event" {
if { ![ah::dojo::is_js_sources_loaded -js_source "event"] } {
append dojo_script "dojo.require(\"dojo.event.*\"); "
}
}
"io" {
if { ![ah::dojo::is_js_sources_loaded -js_source "io"] } {
append dojo_script "dojo.require(\"dojo.io.*\"); "
}
}
"dnd" {
if { ![ah::dojo::is_js_sources_loaded -js_source "dnd"] } {
append dojo_script "dojo.require(\"dojo.dnd.*\"); "
}
}
"json" {
if { ![ah::dojo::is_js_sources_loaded -js_source "json"] } {
append dojo_script "dojo.require(\"dojo.json\"); "
}
}
"storage" {
if { ![ah::dojo::is_js_sources_loaded -js_source "storage"] } {
append dojo_script "dojo.require(\"dojo.storage.*\"); "
}
}
"lfx" {
if { ![ah::dojo::is_js_sources_loaded -js_source "lfx"] } {
append dojo_script "dojo.require(\"dojo.lfx.*\"); "
}
}
"collections" {
if { ![ah::dojo::is_js_sources_loaded -js_source "collections"] } {
append dojo_script "dojo.require(\"dojo.collections.Store\"); "
}
}
"chart" {
if { ![ah::dojo::is_js_sources_loaded -js_source "chart"] } {
append dojo_script "dojo.require(\"dojo.charting.Chart\"); "
}
}
"widget-chart" {
if { ![ah::dojo::is_js_sources_loaded -js_source "widget-chart"] } {
append dojo_script "dojo.require(\"dojo.widget.Chart\"); "
}
}
}
}
append script [ah::enclose_in_script -script $dojo_script]
return $script
}
ad_proc -public ah::dojo::args {
-varname:required
-argslist:required
} {
Builds a javascript object that holds the arguments that are commonly passed to a dojo function.
@author Hamilton Chua (ham@solutiongrove.com)
@creation-date 2006-11-05
} {
set objargs [list]
foreach args $argslist {
lappend objargs [join $args ":"]
}
set objargs [join $objargs ","]
set script "var $varname = {$objargs}; "
return $script
}
ad_proc -public ah::dojo::iobind {
-objargs:required
} {
Generates the javascript for a dojo io bind.
Does the same thing as ah::ajaxrequest or ah::ajaxupdate
but is more robust as dojo.io.bind is capable of using
different transport layers. In fact, it's smart enough to determine
which transport layer to use given a certain situation without bothering
the developer. More details in the dojo book.
http://manual.dojotoolkit.org/WikiHome/DojoDotBook/Book8
@author Hamilton Chua (ham@solutiongrove.com)
@creation-date 2006-11-05
@param objargs A javascript object generated by ah::dojo::args which contain arguments that is passed to dojo.io.bind.
} {
ah::dojo::requires -sources "dojo,io"
set script "dojo.io.bind($objargs); "
return $script
}
ad_proc -public ah::dojo::util_list_to_json {
-lists_of_pairs
} {
Converts a properly structured list of lists into JSON format.
The list of lists may look something like
set data [list]
lappend data [list [list "x" "1"] [list "y" "10"] ]
lappend data [list [list "x" "5"] [list "y" "20"] ]
each line represents a row composed of lists.
Each list in the row holds a pair that will be joined by ":".
} {
set rows [list]
foreach row $lists_of_pairs {
set pairs [list]
foreach pair $row {
lappend pairs [join $pair ":"]
}
lappend rows [join $pairs ","]
}
return "\{[join $rows "\},\{"]\}"
}
ad_proc -public ah::dojo::collections_store {
-varname:required
-lists_of_pairs:required
} {
Creates a dojo collection store
} {
ah::dojo::requires -sources "dojo,collections"
set json [ah::dojo::util_list_to_json -lists_of_pairs $lists_of_pairs]
set script "var ${varname}_data = \[$json\]; \n"
append script "var ${varname} = new dojo.collections.Store(); ${varname}.setData(${varname}_data); \n"
return $script
}
ad_proc -public ah::dojo::chart {
-varname:required
-node:required
-datalist
-serieslist
-axislist
-plotlist
-onload:boolean
} {
Creates a chart using the dojo charting engine
} {
ah::dojo::requires -sources "dojo,chart"
}
This diff is collapsed.
This diff is collapsed.
ad_library {
Ajax Exprimental Procs
@author Hamilton Chua (ham@solutiongrove.com)
@creation-date 2006-11-1
}
namespace eval ah::exp { }
ad_proc -public ah::exp::yui_js_source_dynamic {
{-js "default"}
{-enclose:boolean}
} {
Dynamically Loads the Yahoo UI javascript libraries.
WARNING : experimental, use ah::yui::js_sources instead
@author Hamilton Chua (ham@solutiongrove.com)
@creation-date 2006-04-20
@param js Comma separated list of javascript files to load
Valid values include
"default" : loads yui.js and dom.js, the most commonly used
"animation" : loads js for animation
"event" : loads js for event monitoring (e.g. listnern)
"treeview" : loads js for Yahoo's Tree View control
"calendar" : loads js for Yahoo's Calendar Control
"dragdrop" : loads js for Yahoo's Drag and Drop functions
"slider" : loads js for slider functions
} {
set ah_base_url [ah::get_url]
set script ""
set js_file_list [split $js ","]
foreach x $js_file_list {
switch $x {
"animation" {
append script [ah::js_include -js_file "${ah_base_url}yui/animation/animation.js"]
}
"event" {
append script [ah::js_include -js_file "${ah_base_url}yui/event/event.js"]
}
"treeview" {
append script [ah::js_include -js_file "${ah_base_url}yui/treeview/treeview.js"]
}
"calendar" {
append script [ah::js_include -js_file "${ah_base_url}yui/calendar/calendar.js"]
}
"dragdrop" {
append script [ah::js_include -js_file "${ah_base_url}yui/dragdrop/dragdrop.js"]
}
"slider" {
append script [ah::js_include -js_file "${ah_base_url}yui/slider/slider.js"]
}
default {
append script [ah::js_include -js_file "${ah_base_url}yui/yui.js"]
append script [ah::js_include -js_file "${ah_base_url}yui/dom/dom.js"]
}
}
}
if { $enclose_p } { set script [ah::enclose_in_script -script ${script} ] }
return $script
}
ad_proc -private ah::exp::dynamic_load_functions {
} {
Generates the javascript functions that perform dynamic loading of local javascript files.
http://www.phpied.com/javascript-include/
WARNING : experimental
@author Hamilton Chua (ham@solutiongrove.com)
@creation-date 2006-04-20
} {
set ah_base_url [ah::get_url]
set script "<script type=\"text/javascript\" src=\"${ah_base_url}dynamicInclude.js\"></script>"
return $script
}
ad_proc -public ah::exp::js_include {
{-js_file ""}
} {
Generates the javscript to include a js file dynamically via DOM to the head section of the page.
WARNING : experimental
@author Hamilton Chua (ham@solutiongrove.com)
@creation-date 2006-04-20
} {
return "js_include_once('$js_file'); "
}
ad_proc -public ah::exp::js_source_dynamic {
{-js "default"}
{-enclose:boolean}
} {
Uses the javascript dynamic loading functions to load the comma separated list of javascript source file.
WARNING : experimental
@author Hamilton Chua (ham@solutiongrove.com)
@creation-date 2006-04-20
@param js A comma separated list of js files to load. Possible values include prototype, scriptaculous, rounder, rico, overlibmws, overlibmws_bubble, overlibmws_scroll, overlibmws_drag
@param enclose Specify this if you want the javascript to be enclosed in script tags, which is usually the case unless you include this along with other javascript.
} {
set ah_base_url [ah::get_url]
set script ""
set js_file_list [split $js ","]
foreach x $js_file_list {
switch $x {
"rico" {
append script [ah::js_include -js_file "${ah_base_url}rico/rico.js"]
}
"rounder" {
append script [ah::js_include -js_file "${ah_base_url}rico/rico.js"]
append script [ah::js_include -js_file "${ah_base_url}rico/rounder.js"]
}
"overlibmws" {
append script [ah::js_include -js_file "${ah_base_url}overlibmws/overlibmws.js"]
append script [ah::js_include -js_file "${ah_base_url}overlibmws/overlibmws_overtwo.js"]
}
"overlibmws_bubble" {
append script [ah::js_include -js_file "${ah_base_url}overlibmws/overlibmws_bubble.js"]
}
"overlibmws_scroll" {
append script [ah::js_include -js_file "${ah_base_url}overlibmws/overlibmws_scroll.js"]
}
"overlibmws_drag" {
append script [ah::js_include -js_file "${ah_base_url}overlibmws/overlibmws_draggable.js"]
}
default {
append script [ah::js_include -js_file "${ah_base_url}prototype/prototype.js"]
append script [ah::js_include -js_file "${ah_base_url}scriptaculous/scriptaculous.js"]
}
}
}
if { $enclose_p } { set script [ah::enclose_in_script -script ${script} ] }
return $script
}
This diff is collapsed.
//Javascript dynamic Include Library
//Code derived from:
//Author: Stoyan Stefanov
//SITE: www.phpied.com
//email: ssttoo at gmaildotcom
//mad props due..
//I made the manager objects and added the css methods so
//I can use this library for both
//me: Greg Patmore
//hit me up: //greg at ito-ydotcom
//js
//holds the currently loaded .js libraries
//NOTE: idiot alert! any files included outside these methods cannot be
// referenced by this array
var js_includes = new Array();
//use this manager to keep things simple
function JSManager(){
this.included = js_includes;
this.include = js_include_once;
this.remove = js_remove_include;
}
function js_include_dom(script_filename) {
var html_doc = document.getElementsByTagName('head').item(0);
var js = document.createElement('script');
js.setAttribute('language', 'javascript');
js.setAttribute('type', 'text/javascript');
js.setAttribute('src', script_filename);
html_doc.appendChild(js);
return false;
}
function js_include_once(script_filename) {
if (!in_array(script_filename, js_includes)) {
js_includes[js_includes.length] = script_filename;
js_include_dom(script_filename);
}
}
//"un-includes" the included js file from the document
//use sparingly, as it's a memory whore
//NOTE: will not kill any timeouts you may have going
// but the script will be removed from the rendered source
function js_remove_include(scriptname){
var docScripts = document.getElementsByTagName('script');
for(var i=0;i<docScripts.length; i++){
if(docScripts[i].getAttribute("src") && docScripts[i].getAttribute("src").toLowerCase() == scriptname.toLowerCase()){
var tmpID = create_unique_id();
docScripts[i].setAttribute('id',tmpID);
yank_node(tmpID);
js_array_splice(scriptname);
}
}
}
function js_array_splice(scriptname){
for(var i=0;i<js_includes.length;++i){
if(js_includes[i].toLowerCase() == scriptname.toLowerCase()){
js_includes.splice(i,1);
}
}
}
function wait4Script(object) {
if (typeof(object) == 'undefined') {
setTimeout(wait4Scripts(object), 5);
}
}
//css
//holds the currently loaded .css files
//holds same Idiot Note as js version
var css_includes = new Array();
//use this manager to keep things simple
function CSSManager(){
this.included = css_includes;
this.include = css_include_once;
this.remove = css_remove_include;
}
function css_include(css_file) {
var html_doc = document.getElementsByTagName('head').item(0);
var css = document.createElement('link');
css.setAttribute('rel', 'stylesheet');
css.setAttribute('type', 'text/css');
css.setAttribute('href', css_file);
html_doc.appendChild(css);
return false;
}
function css_include_once(script_filename) {
if (!in_array(script_filename, css_includes)) {
css_includes[css_includes.length] = script_filename;
css_include(script_filename);
}
}
//"un-includes" the included css file from the document
//use sparingly, as it's a memory whore
function css_remove_include(scriptname){
var scripts = document.getElementsByTagName('link');
for(var i=0;i<scripts.length; i++){
if(scripts[i].getAttribute("href") && scripts[i].getAttribute("href").toLowerCase() == scriptname.toLowerCase()){
var tmpID = create_unique_id();
scripts[i].setAttribute('id',tmpID);
yank_node(tmpID);
css_array_splice(scriptname);
}
}
}
function css_array_splice(scriptname){
for(var i=0;i<css_includes.length;++i){
if(css_includes[i].toLowerCase() == scriptname.toLowerCase()){
css_includes.splice(i,1);
}
}
}
//utility functions
//returns bool of whether a value exists in array
//used here to reference the includes
function in_array(needle, haystack) {
for (var i = 0; i < haystack.length; i++) {
if (haystack[i] == needle) return true;
}
return false;
}
//returns a random id
function create_unique_id(){
return "id_" + Math.floor(Math.random() * (1000000 + 1)).toString();
}
//yanks a node with a given ID out of the DOM
//fall out: cascades, so all children are yanked as well
function yank_node(nodeId){
var toYank = document.getElementById(nodeId);
if(toYank){
var container = toYank.parentNode;
container.removeChild(toYank);
}
return (toYank)?false:true;
}
div.suggestions {
-moz-box-sizing: border-box;
box-sizing: border-box;
border: 1px solid black;
position: absolute;
background-color: white;
}
div.suggestions div {
cursor: default;
padding: 0px 3px;
width: 350px;
overflow: hidden;
}
div.suggestions div span.sname {
float: left;
font-size: 13px;
margin-left: 4px;
border: 0px;
}
div.suggestions div span.sdesc {
float: right;
font-size: 10px;
margin-left: 3px;
padding-top: 2px;
color: #008000;
border: 0px;
}
div.suggestions div.current {
background-color: #3366cc;
color: white;
}
div.suggestions div.current span {
background-color: #3366cc;
color: white;
}
\ No newline at end of file
This diff is collapsed.
/**
* Copyright (c) 2006, Bill W. Scott
* All rights reserved.
*
* This work is licensed under the Creative Commons Attribution 2.5 License. To view a copy
* of this license, visit http://creativecommons.org/licenses/by/2.5/ or send a letter to
* Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
*
* This work was created by Bill Scott (billwscott.com, looksgoodworkswell.com).
*
* The only attribution I require is to keep this notice of copyright & license
* in this original source file.
*/
/**
* Standard Configuration. It is advised that this section NOT be modified as the
* carousel.js expects the behavior outlined below.
**/
.carousel-component {
position:relative;
overflow:hidden;
visibility:visible; /* component turns it on when first item is rendered */
}
.carousel-component ul.carousel-list {
width:10000000px;
position:relative;
z-index:1;
}
.carousel-component .carousel-list li {
float:left;
list-style:none;
overflow:hidden;
}
.carousel-component .carousel-vertical li {
float:none;
margin-bottom:0px;
}
.carousel-component ul.carousel-vertical {
width:auto;
}
.carousel-component .carousel-clip-region {
overflow:hidden;
margin:0px auto;
position:relative;
}
/**
* Safe to override. It is safe to override background, padding, margin, color,
* text alignment, fonts, etc. Define a separate CSS file and override your style
* preferences.
**/
.carousel-component {
background:#3F3F3F;
padding:0px;
color:#618cbe;
}
.carousel-component ul.carousel-list {
margin:0px;
padding:0px 0px 0px 0px;
}
.carousel-component .carousel-list li {
text-align:center;
margin:0px 0px 0px 0px;
padding:0px;
font:10px verdana,arial,sans-serif;
color:#666;
}
.carousel-component .carousel-vertical li {
}
.carousel-component ul.carousel-vertical {
}
// Copyright (c) 2006 Sébastien Gruhier (http://xilinus.com, http://itseb.com)
//
// 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.
//
// VERSION 0.25
var Carousel = Class.create();
Carousel.prototype = {
// Constructor
initialize: function(carouselElemID) {
this.carouselElemID = carouselElemID;
this.options = Object.extend({
numVisible: 4,
scrollInc: 3,
animParameters: {},
buttonStateHandler: null,
animHandler: null,
ajaxHandler: null,
initDoneHandler: null,
queue: "carousel",
size: 0,
prevElementID: "prev-arrow",
nextElementID: "next-arrow",
ajaxParameters: null,
url: null
}, arguments[1] || {});
this.initDone = false;
this.animRunning = "none";
this.requestIsRunning = false;
// add afterFinish options to animParameters (store old function)
this.animAfterFinish = this.options.animParameters.afterFinish;
Object.extend(this.options.animParameters, {afterFinish: this._animDone.bind(this), queue: { position:'end', scope: this.options.queue }});
// Event bindings
this.prevScroll = this._prevScroll.bindAsEventListener(this);
this.nextScroll = this._nextScroll.bindAsEventListener(this);
this.onComplete = this._onComplete.bindAsEventListener(this);
this.onFailure = this._onFailure.bindAsEventListener(this);
Event.observe(this.options.prevElementID, "click", this.prevScroll);
Event.observe(this.options.nextElementID, "click", this.nextScroll);
// Get DOM UL element
var carouselListClass = "carousel-list";
this.carouselList = document.getElementsByClassName(carouselListClass, $(carouselElemID))[0]
// Init data
this._init();
},
// Destructor
destroy: function() {
Event.stopObserving(this.options.prevElementID, "click", this.prevScroll);
Event.stopObserving(this.options.nextElementID, "click", this.nextScroll);
},
scrollTo: function(newStart) {
var old_inc = this.options.scrollInc;
this.ignoreNoMoreImages = true;
if(newStart > this.currentIndex) {
this.options.scrollInc = newStart - this.currentIndex;
this._nextScroll(this);
} else {
this.options.scrollInc = this.currentIndex - newStart;
this._prevScroll(this);
}
this.options.scrollInc = old_inc;
},
/* "Private" functions */
_init: function() {
this.currentIndex = 0;
// Ajax content
if (this.options.url)
this._request(this.currentIndex, this.options.numVisible);
// Static content
else {
this._getLiElementSize();
this._updateButtonStateHandler(this.options.prevElementID, false);
this._updateButtonStateHandler(this.options.nextElementID, this.options.size > this.options.numVisible);
}
},
_prevScroll: function(event) {
if (this.animRunning != "none" || this.currentIndex == 0)
return;
var inc = this.options.scrollInc;
if (this.currentIndex - inc < 0)
inc = this.currentIndex;
this._scroll(inc)
return false;
},
_nextScroll: function(event) {
if (this.animRunning != "none")
return false;
// Check if there are enough elements in cache
if (this.currentIndex + this.options.numVisible + this.options.scrollInc <= this.options.size)
this._scroll(-this.options.scrollInc);
else {
// Compute how many are in the cache
this.nbInCache = this.options.size - (this.currentIndex + this.options.numVisible);
if (this.options.url && this.noMoreImages == false)
this._request(this.currentIndex + this.options.numVisible + this.nbInCache, this.options.scrollInc - this.nbInCache);
else {
if (this.nbInCache > 0)
this._scroll(-this.nbInCache);
}
}
return false;
},
_request: function(start, nb) {
if (this.options.url && ! this.requestIsRunning) {
this.requestIsRunning = true;
if (this.options.ajaxHandler)
this.options.ajaxHandler(this, "before");
var params = "start=" + start + "&nb=" + nb;
if (this.options.ajaxParameters != null)
params += "&" + this.options.ajaxParameters
new Ajax.Request(this.options.url, {parameters: params, onComplete: this.onComplete, onFailure: this.onFailure});
}
},
_onComplete: function(originalRequest){
this.requestIsRunning = false;
this.carouselList.innerHTML += originalRequest.responseText;
// Compute how many new elements we have
var size = this.options.size;
this.options.size = this.carouselList.getElementsByTagName("li").length;
var inc = this.options.size - size;
// First run, compute li size
if (this.initDone == false) {
this._getLiElementSize()
this.currentIndex = 0;
this.initDone = true;
if (this.options.initDoneHandler)
this.options.initDoneHandler(this);
// Update button states
this._updateButtonStateHandler(this.options.prevElementID, false);
this._updateButtonStateHandler(this.options.nextElementID, this.options.size == this.options.numVisible);
this.noMoreImages = this.options.size < this.options.numVisible
}
// Add images
else {
if (!this.ignoreNoMoreImages)
this.noMoreImages = inc != this.options.scrollInc;
else
this.ignoreNoMoreImages = false;
// Add images
if (inc > 0) {
this._scroll(-inc, this.noMoreImages)
}
// No more images, disable next button
else {
if (this.nbInCache >0)
this._scroll(-this.nbInCache, true);
this._updateButtonStateHandler(this.options.nextElementID, false);
}
}
if (this.options.ajaxHandler)
this.options.ajaxHandler(this, "after");
},
_onFailure: function(originalRequest){
this.requestIsRunning = false;
},
_animDone: function(event){
if (this.options.animHandler)
this.options.animHandler(this.carouselElemID, "after", this.animRunning);
this.animRunning = "none";
// Call animAfterFinish if exists
if (this.animAfterFinish)
this.animAfterFinish(event);
},
_updateButtonStateHandler: function(button, state) {
if (this.options.buttonStateHandler)
this.options.buttonStateHandler(button, state)
},
_scroll: function(delta, forceDisableNext) {
this.animRunning = delta > 0 ? "prev" : "next";
if (this.options.animHandler)
this.options.animHandler(this.carouselElemID, "before", this.animRunning);
new Effect.MoveBy(this.carouselList, 0, delta * this.elementSize, this.options.animParameters);
this.currentIndex -= delta;
this._updateButtonStateHandler(this.options.prevElementID, this.currentIndex != 0);
if (this.options.url && this.noMoreImages == false)
enable = true;
else
enable = (this.currentIndex + this.options.numVisible < this.options.size);
this._updateButtonStateHandler(this.options.nextElementID, (forceDisableNext ? false : enable));
},
_getLiElementSize: function() {
var li = $(this.carouselList.getElementsByTagName("li")[0]);
this.elementSize = li.getDimensions().width + parseFloat(li.getStyle("margin-left")) + + parseFloat(li.getStyle("margin-right"));
}
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>curvyCorners Demo</title>
<script type="text/JavaScript" src="rounded_corners_lite.inc.js"></script>
<style>
.myBox
{
margin: 0 auto;
border: 0px solid #ffffff;
color: #ffffff;
width: 60%;
padding: 20px;
text-align: left;
background-color: #ff0000;
border: 3px solid #ffffff;
/*
background-image: url(back_test2.jpg);
background-repeat: no-repeat;
*/
}
html,body{
height: 100%;
text-align: center;
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
font-size: 12px;
margin: 0px;
background-image: url(grass.jpg);
}
</style>
</head>
<body>
<br><br><br><br>
<div class="myBox">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Curabitur mi est, cursus sit amet, pellentesque et, ultricies a, ipsum. Nulla facilisi. Sed quis lacus. Aenean ut risus et lectus blandit gravida. Nam sed nunc. Aliquam non felis non diam aliquam gravida. Phasellus quis sem. Curabitur at velit. Vivamus libero velit, condimentum sit amet, tempus ut, aliquam sit amet, velit. Nunc hendrerit ante. Quisque egestas feugiat erat. Morbi tellus.
<br /><br />
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla ac ante sit amet metus hendrerit euismod. Aenean vestibulum, lectus in eleifend tempor, quam libero iaculis dolor, pellentesque pellentesque lorem nibh ut urna. Nulla rhoncus, ante sit amet tristique interdum, eros nulla nonummy justo, eu dapibus risus quam sit amet metus. Maecenas tristique augue vel enim. Duis blandit euismod pede. Pellentesque facilisis. Fusce dapibus sapien tristique massa. Nunc accumsan. Integer pretium risus et odio. Phasellus tincidunt rhoncus velit. Donec eu neque at massa mollis iaculis. Aliquam pellentesque auctor mi. Cras ante justo, ultricies quis, iaculis eu, tincidunt ac, velit. Etiam nunc erat, tincidunt sit amet, luctus quis, interdum a, nunc. Suspendisse elit.
<br /><br />
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla ac ante sit amet metus hendrerit euismod. Aenean vestibulum, lectus in eleifend tempor, quam libero iaculis dolor, pellentesque pellentesque lorem nibh ut urna. Nulla rhoncus, ante sit amet tristique interdum, eros nulla nonummy justo, eu dapibus risus quam sit amet metus. Maecenas tristique augue vel enim. Duis blandit euismod pede. Pellentesque facilisis. Fusce dapibus sapien tristique massa. Nunc accumsan. Integer pretium risus et odio. Phasellus tincidunt rhoncus velit. Donec eu neque at massa mollis iaculis. Aliquam pellentesque auctor mi. Cras ante justo, ultricies quis, iaculis eu, tincidunt ac, velit. Etiam nunc erat, tincidunt sit amet, luctus quis, interdum a, nunc. Suspendisse elit.
</div>
<script type="text/JavaScript">
var settings = {
tl: { radius: 20 },
tr: { radius: 20 },
bl: { radius: 20 },
br: { radius: 20 },
antiAlias: true,
autoPad: true,
validTags: ["div"]
}
var myBoxObject = new curvyCorners(settings, "myBox");
myBoxObject.applyCornersToAll();
</script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>curvyCorners Demo</title>
<script type="text/JavaScript" src="rounded_corners_lite.inc.js"></script>
<style>
.myBox
{
margin: 0 auto;
border: 0px solid #ffffff;
color: #ffffff;
width: 800px;
height: 550px;
padding: 20px;
text-align: left;
/*border: 3px solid #ffffff;*/
background-image: url(back_test.jpg);
background-repeat: no-repeat;
}
html,body{
height: 100%;
text-align: center;
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
font-size: 12px;
margin: 0px;
background-image: url(grass.jpg);
}
</style>
<script type="text/JavaScript">
window.onload = function()
{
/*
The new 'validTags' setting is optional and allows
you to specify other HTML elements that curvyCorners
can attempt to round.
The value is comma separated list of html elements
in lowercase.
validTags: ["div", "form"]
The above example would enable curvyCorners on FORM elements.
*/
settings = {
tl: { radius: 20 },
tr: { radius: 20 },
bl: { radius: 20 },
br: { radius: 20 },
antiAlias: true,
autoPad: true,
validTags: ["div"]
}
/*
Usage:
newCornersObj = new curvyCorners(settingsObj, classNameStr);
newCornersObj = new curvyCorners(settingsObj, divObj1[, divObj2[, divObj3[, . . . [, divObjN]]]]);
*/
var myBoxObject = new curvyCorners(settings, "myBox");
myBoxObject.applyCornersToAll();
}
</script>
</head>
<body>
<br><br><br><br>
<div class="myBox">
<!--
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Curabitur mi est, cursus sit amet, pellentesque et, ultricies a, ipsum. Nulla facilisi. Sed quis lacus. Aenean ut risus et lectus blandit gravida. Nam sed nunc. Aliquam non felis non diam aliquam gravida. Phasellus quis sem. Curabitur at velit. Vivamus libero velit, condimentum sit amet, tempus ut, aliquam sit amet, velit. Nunc hendrerit ante. Quisque egestas feugiat erat. Morbi tellus.
<br /><br />
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla ac ante sit amet metus hendrerit euismod. Aenean vestibulum, lectus in eleifend tempor, quam libero iaculis dolor, pellentesque pellentesque lorem nibh ut urna. Nulla rhoncus, ante sit amet tristique interdum, eros nulla nonummy justo, eu dapibus risus quam sit amet metus. Maecenas tristique augue vel enim. Duis blandit euismod pede. Pellentesque facilisis. Fusce dapibus sapien tristique massa. Nunc accumsan. Integer pretium risus et odio. Phasellus tincidunt rhoncus velit. Donec eu neque at massa mollis iaculis. Aliquam pellentesque auctor mi. Cras ante justo, ultricies quis, iaculis eu, tincidunt ac, velit. Etiam nunc erat, tincidunt sit amet, luctus quis, interdum a, nunc. Suspendisse elit.
<br /><br />
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla ac ante sit amet metus hendrerit euismod. Aenean vestibulum, lectus in eleifend tempor, quam libero iaculis dolor, pellentesque pellentesque lorem nibh ut urna. Nulla rhoncus, ante sit amet tristique interdum, eros nulla nonummy justo, eu dapibus risus quam sit amet metus. Maecenas tristique augue vel enim. Duis blandit euismod pede. Pellentesque facilisis. Fusce dapibus sapien tristique massa. Nunc accumsan. Integer pretium risus et odio. Phasellus tincidunt rhoncus velit. Donec eu neque at massa mollis iaculis. Aliquam pellentesque auctor mi. Cras ante justo, ultricies quis, iaculis eu, tincidunt ac, velit. Etiam nunc erat, tincidunt sit amet, luctus quis, interdum a, nunc. Suspendisse elit.
-->
</div>
</body>
</html>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
The Dojo Toolkit
----------------
Dojo is a portable JavaScript toolkit for web application developers and
JavaScript professionals. Dojo solves real-world problems by providing powerful
abstractions and solid, tested implementations.
Getting Started
---------------
To use Dojo in your application, download one of the pre-built editions from the
Dojo website, http://dojotoolkit.org. Once you have downloaded the file you will
need to unzip the archive in your website root. At a minimum, you will need to
extract:
src/ (folder)
dojo.js
iframe_history.html
To begin using dojo, include dojo in your pages by using:
<script type="text/javascript" src="/path/to/dojo.js"></script>
Depending on the edition that you have downloaded, this base dojo.js file may or
may not include the modules you wish to use in your application. The files which
have been "baked in" to the dojo.js that is part of your distribution are listed
in the file build.txt that is part of the top-level directory that is created
when you unpack the archive. To ensure modules you wish to use are available,
use dojo.require() to request them. A very rich application might include:
<script type="text/javascript" src="/path/to/dojo.js"></script>
<script type="text/javascript">
dojo.require("dojo.event.*"); // sophisticated AOP event handling
dojo.require("dojo.io.*"); // for Ajax requests
dojo.require("dojo.storage.*"); // a persistent local data cache
dojo.require("dojo.json"); // serialization to JSON
dojo.require("dojo.dnd.*"); // drag-and-drop
dojo.require("dojo.lfx.*"); // animations and eye candy
dojo.require("dojo.widget.Editor2");// stable, portable HTML WYSIWYG
</script>
Note that only those modules which are *not* already "baked in" to dojo.js by
the edition's build process are requested by dojo.require(). This helps make
your application faster without forcing you to use a build tool while in
development. See "Building Dojo" and "Working From Source" for more details.
Compatibility
-------------
In addition to it's suite of unit-tests for core system components, Dojo has
been tested on almost every modern browser, including:
- IE 5.5+
- Mozilla 1.5+, Firefox 1.0+
- Safari 1.3.9+
- Konqueror 3.4+
- Opera 8.5+
Note that some widgets and features may not perform exactly the same on every
browser due to browser implementation differences.
For those looking to use Dojo in non-browser environments, please see "Working
From Source".
Documentation and Getting Help
------------------------------
Articles outlining major Dojo systems are linked from:
http://dojotoolkit.org/docs/
Toolkit APIs are listed in outline form at:
http://dojotoolkit.org/docs/apis/
And documented in full at:
http://manual.dojotoolkit.org/
The project also maintains a JotSpot Wiki at:
http://dojo.jot.com/
A FAQ has been extracted from mailing list traffic:
http://dojo.jot.com/FAQ
And the main Dojo user mailing list is archived and made searchable at:
http://news.gmane.org/gmane.comp.web.dojo.user/
You can sign up for this list, which is a great place to ask questions, at:
http://dojotoolkit.org/mailman/listinfo/dojo-interest
The Dojo developers also tend to hang out in IRC and help people with Dojo
problems. You're most likely to find them at:
irc.freenode.net #dojo
Note that 3PM Wed PST in #dojo-meeting is reserved for a weekly meeting between
project developers, although anyone is welcome to participate.
Working From Source
-------------------
The core of Dojo is a powerful package system that allows developers to optimize
Dojo for deployment while using *exactly the same* application code in
development. Therefore, working from source is almost exactly like working from
a pre-built edition. Pre-built editions are significantly faster to load than
working from source, but are not as flexible when in development.
There are multiple ways to get the source. Nightly snapshots of the Dojo source
repository are available at:
http://archive.dojotoolkit.org/nightly.tgz
Anonymous Subversion access is also available:
%> svn co http://svn.dojotoolkit.org/dojo/trunk/ dojo
Each of these sources will include some extra directories not included in the
pre-packaged editions, including command-line tests and build tools for
constructing your own packages.
Running the command-line unit test suite requires Ant 1.6. If it is installed
and in your path, you can run the tests using:
%> cd buildscripts
%> ant test
The command-line test harness makes use of Rhino, a JavaScript interpreter
written in Java. Once you have a copy of Dojo's source tree, you have a copy of
Rhino. From the root directory, you can use Rhino interactively to load Dojo:
%> java -jar buildscripts/lib/js.jar
Rhino 1.5 release 3 2002 01 27
js> load("dojo.js");
js> print(dojo);
[object Object]
js> quit();
This environment is wonderful for testing raw JavaScript functionality in, or
even for scripting your system. Since Rhino has full access to anything in
Java's classpath, the sky is the limit!
Building Dojo
-------------
Dojo requires Ant 1.6.x in order to build correctly. While using Dojo from
source does *NOT* require that you make a build, speeding up your application by
constructing a custom profile build does.
Once you have Ant and a source snapshot of Dojo, you can make your own profile
build ("edition") which includes only those modules your application uses by
customizing one of the files in:
[dojo]/buildscripts/profiles/
These files are named *.profile.js and each one contains a list of modules to
include in a build. If we created a new profile called "test.profile.js", we
could then make a profile build using it by doing:
%> cd buildscripts
%> ant -Dprofile=test -Ddocless=true release intern-strings
If the build is successful, your newly minted and compressed profile build will
be placed in [dojo]/release/dojo/
-------------------------------------------------------------------------------
Copyright (c) 2004-2006, The Dojo Foundation, All Rights Reserved
vim:ts=4:et:tw=80:shiftwidth=4:
Files baked into this package:
dojoGuardStart.js,
../src/bootstrap1.js,
../src/loader.js,
dojoGuardEnd.js,
../src/hostenv_browser.js,
../src/bootstrap2.js,
../src/string/common.js,
../src/string.js,
../src/lang/common.js,
../src/lang/extras.js,
../src/io/common.js,
../src/lang/array.js,
../src/lang/func.js,
../src/string/extras.js,
../src/dom.js,
../src/undo/browser.js,
../src/io/BrowserIO.js,
../src/io/cookie.js,
../src/io/__package__.js,
../src/event/common.js,
../src/event/topic.js,
../src/event/browser.js,
../src/event/__package__.js,
../src/gfx/color.js,
../src/lfx/Animation.js,
../src/html/common.js,
../src/uri/Uri.js,
../src/html/style.js,
../src/html/display.js,
../src/html/color.js,
../src/html/layout.js,
../src/lfx/html.js,
../src/lfx/__package__.js
\ No newline at end of file
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Dojo Demos</title>
<script type="text/javascript">
var djConfig = { isDebug: true };
</script>
<link rel=stylesheet href="demoEngine.css" type="text/css">
<script type="text/javascript" src="../dojo.js"></script>
<script type="text/javascript">
dojo.require("dojo.debug.Firebug");
dojo.require("dojo.event.*");
dojo.require("dojo.widget.*");
dojo.require("dojo.widget.demoEngine.*");
</script>
</head>
<body>
<div dojoType="DemoNavigator"
demoRegistryUrl="demoRegistry.json"
returnImage="dojoDemos.gif"
viewDemoImage="viewDemo.png"></div>
</body>
</html>
#container {
width: 700px;
height: 450px;
border: 1px solid black;
padding: 0px;
margin: 0px;
overflow: hidden;
}
.demoEngine {
width: 100%;
height: 450px;
}
div.demoEngineNavigation, div.demoEngineDemoContainer {
width: 100%;
height: 450px;
font-family: Myriad,Tahoma,Verdana,sans-serif;
}
div.demoEngineDemoContainer {
background: #f5f5f5;
padding: 1px;
}
div.demoEngineNavigation {
color: black;
}
div.dojoTabContainer {
width: 100%;
height: 450px;
top: 0px;
left: 0px;
float: right;
overflow: hidden;
border: 0px;
}
div.dojoTabContainer iframe {
overflow: auto;
width: 100%;
height: 100%;
border: 0px;
padding: 0px;
margin: 0px;
background: #ffffff;
}
div.dojoTabContainer textarea {
width: 100%;
height: 100%;
padding: 0px;
margin: 0px;
border: 0px;
overflow: auto;
}
div.demoEngineDemoHeader {
top: 10px;
left: 0px;
width: 550px;
height: 65px;
position: absolute;
overflow: hidden;
color: black;
/*border: 1px solid black;*/
z-index: 500;
}
div.demoEngineDemoHeader h1 {
font-size: 1em;
font-weight: 300;
margin: 2px;
}
div.demoEngineDemoHeader h2 {
font-size: .75em;
font-weight: 200;
}
div.demoEngineDemoHeader div {
/*margin: 10px;*/
float: left;
/*margin-left: 120px;*/
position: absolute;
top: 0px;
left: 120px;
}
/*div.demoEngineDemoHeader div:first-child {
left: 5px;
top: 10px;
width: 75px;
}*/
div.demoEngineDemoHeader span {
top: 0px;
padding-left: 70px;
padding-right: 0px;
padding-top: 0px;
padding-bottom: 35px;
width: 75px;
}
div.dojoTabLabels-top {
position : absolute;
top : 0px;
left : 0px;
overflow : visible;
padding-top: 20px;
padding-bottom: 20px;
margin-right: 0px;
width : 150px;
}
div.dojoTab {
float: right;
background: #f5f5f5;
border: 0px;
padding: 0px;
margin-left: 10px;
}
div.dojoTab span {
background: #f5f5f5;
border: 0px;
padding: 0px;
margin: 0px;
}
div.dojoTab.current {
background: #f5f5f5;
border-bottom: 5px solid #95bfff;
}
div.demoEngineDemoNavigation {
width: 100%;
margin: 0px;
padding: 0px;
}
.demoEngineCollapsedMenu {
cursor: pointer;
background: url("dojoDemos.gif") no-repeat;
width: 50px;
height: 50px;
margin-left: 15px;
margin-top: 0px;
}
.dojoButton {
margin: 10px;
margin-top: 0px;
}
.dojoButton .dojoButtonContents {
font-size: 1.1em;
}
.dojoButtonContents {
width: 100px;
}
.demoListWrapper {
border:1px solid #dcdbdb;
background-color:#f8f8f8;
padding:2px;
}
.demoListContainer {
border:1px solid #f0f0f0;
background-color:#fff;
padding:1em;
}
.demoSummaryBox {
background: #efefef;
border:1px solid #dae3ee;
}
.screenshot {
padding:0.65em;
width:175px;
border-right:1px solid #fafafa;
text-align:center;
}
.demoSummary {
margin-bottom:1em;
}
.demoSummary a:link, .demoSummary a:visited {
color:#a6238f;
text-decoration:none;
}
.summaryContainer {
border-left:1px solid #ddd;
}
.summaryContainer h1 {
background-color:#e8e8e8;
border-bottom: 1px solid #e6e6e6;
color:#738fb9;
margin:1px;
padding:0.5em;
font-family:"Lucida Grande", "Tahoma", serif;
font-size:1.25em;
font-weight:normal;
}
.summaryContainer h1 .packageSummary {
display:block;
color:#000;
font-size:10px;
margin-top:2px;
}
.summaryContainer .summary {
padding:1em;
}
.summaryContainer .summary p {
font-size:0.85em;
padding:0;
margin:0;
}
.reflection {
background: url("images/demoBoxReflection.gif") repeat-x top left;
height:25px;
}
.view {
padding: 5px;
text-align:right;
cursor: pointer;
}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Dojo Demos</title>
<link rel=stylesheet href="demoEngine.css" type="text/css">
<script type="text/javascript" src="../dojo.js"></script>
<script type="text/javascript">
dojo.require("dojo.event.*");
dojo.require("dojo.widget.*");
dojo.require("dojo.widget.demoEngine.*");
</script>
</head>
<body>
<div dojoType="DemoNavigator"
demoRegistryUrl="demoRegistry.json"
returnImage="dojoDemos.gif"
viewDemoImage="viewDemo.png"></div>
</body>
</html>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<table width=100% style="border: 1px;">
<tr class="header"><td>Sender</td><td>Subject</td><td>Date</td></tr>
<tr><td>Adam Arlen</td><td>meeting notes</td><td>2005-12-19</td></tr>
<tr><td>Bob Baxter</td><td>schedule</td><td>2005-12-18</td></tr>
</table>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment