Page Menu
Home
DevCentral
Search
Configure Global Search
Log In
Files
F12870942
foundation.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
21 KB
Referenced Files
None
Subscribers
None
foundation.js
View Options
/*
* Foundation Responsive Library
* http://foundation.zurb.com
* Copyright 2013, ZURB
* Free to use under the MIT license.
* http://www.opensource.org/licenses/mit-license.php
*/
(
function
(
$
,
window
,
document
,
undefined
)
{
'use strict'
;
// Used to retrieve Foundation media queries from CSS.
if
(
$
(
'head'
).
has
(
'.foundation-mq-small'
).
length
===
0
)
{
$
(
'head'
).
append
(
'<meta class="foundation-mq-small">'
);
}
if
(
$
(
'head'
).
has
(
'.foundation-mq-medium'
).
length
===
0
)
{
$
(
'head'
).
append
(
'<meta class="foundation-mq-medium">'
);
}
if
(
$
(
'head'
).
has
(
'.foundation-mq-large'
).
length
===
0
)
{
$
(
'head'
).
append
(
'<meta class="foundation-mq-large">'
);
}
if
(
$
(
'head'
).
has
(
'.foundation-mq-xlarge'
).
length
===
0
)
{
$
(
'head'
).
append
(
'<meta class="foundation-mq-xlarge">'
);
}
if
(
$
(
'head'
).
has
(
'.foundation-mq-xxlarge'
).
length
===
0
)
{
$
(
'head'
).
append
(
'<meta class="foundation-mq-xxlarge">'
);
}
// Embed FastClick (this should be removed later)
function
FastClick
(
layer
){
'use strict'
;
var
oldOnClick
,
self
=
this
;
this
.
trackingClick
=
false
;
this
.
trackingClickStart
=
0
;
this
.
targetElement
=
null
;
this
.
touchStartX
=
0
;
this
.
touchStartY
=
0
;
this
.
lastTouchIdentifier
=
0
;
this
.
touchBoundary
=
10
;
this
.
layer
=
layer
;
if
(
!
layer
||!
layer
.
nodeType
){
throw
new
TypeError
(
'Layer must be a document node'
);}
this
.
onClick
=
function
(){
return
FastClick
.
prototype
.
onClick
.
apply
(
self
,
arguments
)};
this
.
onMouse
=
function
(){
return
FastClick
.
prototype
.
onMouse
.
apply
(
self
,
arguments
)};
this
.
onTouchStart
=
function
(){
return
FastClick
.
prototype
.
onTouchStart
.
apply
(
self
,
arguments
)};
this
.
onTouchMove
=
function
(){
return
FastClick
.
prototype
.
onTouchMove
.
apply
(
self
,
arguments
)};
this
.
onTouchEnd
=
function
(){
return
FastClick
.
prototype
.
onTouchEnd
.
apply
(
self
,
arguments
)};
this
.
onTouchCancel
=
function
(){
return
FastClick
.
prototype
.
onTouchCancel
.
apply
(
self
,
arguments
)};
if
(
FastClick
.
notNeeded
(
layer
)){
return
}
if
(
this
.
deviceIsAndroid
){
layer
.
addEventListener
(
'mouseover'
,
this
.
onMouse
,
true
);
layer
.
addEventListener
(
'mousedown'
,
this
.
onMouse
,
true
);
layer
.
addEventListener
(
'mouseup'
,
this
.
onMouse
,
true
)}
layer
.
addEventListener
(
'click'
,
this
.
onClick
,
true
);
layer
.
addEventListener
(
'touchstart'
,
this
.
onTouchStart
,
false
);
layer
.
addEventListener
(
'touchmove'
,
this
.
onTouchMove
,
false
);
layer
.
addEventListener
(
'touchend'
,
this
.
onTouchEnd
,
false
);
layer
.
addEventListener
(
'touchcancel'
,
this
.
onTouchCancel
,
false
);
if
(
!
Event
.
prototype
.
stopImmediatePropagation
){
layer
.
removeEventListener
=
function
(
type
,
callback
,
capture
){
var
rmv
=
Node
.
prototype
.
removeEventListener
;
if
(
type
===
'click'
){
rmv
.
call
(
layer
,
type
,
callback
.
hijacked
||
callback
,
capture
)}
else
{
rmv
.
call
(
layer
,
type
,
callback
,
capture
)}};
layer
.
addEventListener
=
function
(
type
,
callback
,
capture
){
var
adv
=
Node
.
prototype
.
addEventListener
;
if
(
type
===
'click'
){
adv
.
call
(
layer
,
type
,
callback
.
hijacked
||
(
callback
.
hijacked
=
function
(
event
){
if
(
!
event
.
propagationStopped
){
callback
(
event
)}}),
capture
)}
else
{
adv
.
call
(
layer
,
type
,
callback
,
capture
)}}}
if
(
typeof
layer
.
onclick
===
'function'
){
oldOnClick
=
layer
.
onclick
;
layer
.
addEventListener
(
'click'
,
function
(
event
){
oldOnClick
(
event
)},
false
);
layer
.
onclick
=
null
}}
FastClick
.
prototype
.
deviceIsAndroid
=
navigator
.
userAgent
.
indexOf
(
'Android'
)
>
0
;
FastClick
.
prototype
.
deviceIsIOS
=
/iP(ad|hone|od)/
.
test
(
navigator
.
userAgent
);
FastClick
.
prototype
.
deviceIsIOS4
=
FastClick
.
prototype
.
deviceIsIOS
&&
(
/OS 4_\d(_\d)?/
).
test
(
navigator
.
userAgent
);
FastClick
.
prototype
.
deviceIsIOSWithBadTarget
=
FastClick
.
prototype
.
deviceIsIOS
&&
(
/OS ([6-9]|\d{2})_\d/
).
test
(
navigator
.
userAgent
);
FastClick
.
prototype
.
needsClick
=
function
(
target
){
'use strict'
;
switch
(
target
.
nodeName
.
toLowerCase
()){
case
'button'
:
case
'select'
:
case
'textarea'
:
if
(
target
.
disabled
){
return
true
}
break
;
case
'input'
:
if
((
this
.
deviceIsIOS
&&
target
.
type
===
'file'
)
||
target
.
disabled
){
return
true
}
break
;
case
'label'
:
case
'video'
:
return
true
}
return
(
/\bneedsclick\b/
).
test
(
target
.
className
)};
FastClick
.
prototype
.
needsFocus
=
function
(
target
){
'use strict'
;
switch
(
target
.
nodeName
.
toLowerCase
()){
case
'textarea'
:
case
'select'
:
return
true
;
case
'input'
:
switch
(
target
.
type
){
case
'button'
:
case
'checkbox'
:
case
'file'
:
case
'image'
:
case
'radio'
:
case
'submit'
:
return
false
}
return
!
target
.
disabled
&&!
target
.
readOnly
;
default
:
return
(
/\bneedsfocus\b/
).
test
(
target
.
className
)}};
FastClick
.
prototype
.
sendClick
=
function
(
targetElement
,
event
){
'use strict'
;
var
clickEvent
,
touch
;
if
(
document
.
activeElement
&&
document
.
activeElement
!==
targetElement
){
document
.
activeElement
.
blur
()}
touch
=
event
.
changedTouches
[
0
];
clickEvent
=
document
.
createEvent
(
'MouseEvents'
);
clickEvent
.
initMouseEvent
(
'click'
,
true
,
true
,
window
,
1
,
touch
.
screenX
,
touch
.
screenY
,
touch
.
clientX
,
touch
.
clientY
,
false
,
false
,
false
,
false
,
0
,
null
);
clickEvent
.
forwardedTouchEvent
=
true
;
targetElement
.
dispatchEvent
(
clickEvent
)};
FastClick
.
prototype
.
focus
=
function
(
targetElement
){
'use strict'
;
var
length
;
if
(
this
.
deviceIsIOS
&&
targetElement
.
setSelectionRange
){
length
=
targetElement
.
value
.
length
;
targetElement
.
setSelectionRange
(
length
,
length
)}
else
{
targetElement
.
focus
()}};
FastClick
.
prototype
.
updateScrollParent
=
function
(
targetElement
){
'use strict'
;
var
scrollParent
,
parentElement
;
scrollParent
=
targetElement
.
fastClickScrollParent
;
if
(
!
scrollParent
||!
scrollParent
.
contains
(
targetElement
)){
parentElement
=
targetElement
;
do
{
if
(
parentElement
.
scrollHeight
>
parentElement
.
offsetHeight
){
scrollParent
=
parentElement
;
targetElement
.
fastClickScrollParent
=
parentElement
;
break
}
parentElement
=
parentElement
.
parentElement
}
while
(
parentElement
)}
if
(
scrollParent
){
scrollParent
.
fastClickLastScrollTop
=
scrollParent
.
scrollTop
}};
FastClick
.
prototype
.
getTargetElementFromEventTarget
=
function
(
eventTarget
){
'use strict'
;
if
(
eventTarget
.
nodeType
===
Node
.
TEXT_NODE
){
return
eventTarget
.
parentNode
}
return
eventTarget
};
FastClick
.
prototype
.
onTouchStart
=
function
(
event
){
'use strict'
;
var
targetElement
,
touch
,
selection
;
if
(
event
.
targetTouches
.
length
>
1
){
return
true
}
targetElement
=
this
.
getTargetElementFromEventTarget
(
event
.
target
);
touch
=
event
.
targetTouches
[
0
];
if
(
this
.
deviceIsIOS
){
selection
=
window
.
getSelection
();
if
(
selection
.
rangeCount
&&!
selection
.
isCollapsed
){
return
true
}
if
(
!
this
.
deviceIsIOS4
){
if
(
touch
.
identifier
===
this
.
lastTouchIdentifier
){
event
.
preventDefault
();
return
false
}
this
.
lastTouchIdentifier
=
touch
.
identifier
;
this
.
updateScrollParent
(
targetElement
)}}
this
.
trackingClick
=
true
;
this
.
trackingClickStart
=
event
.
timeStamp
;
this
.
targetElement
=
targetElement
;
this
.
touchStartX
=
touch
.
pageX
;
this
.
touchStartY
=
touch
.
pageY
;
if
((
event
.
timeStamp
-
this
.
lastClickTime
)
<
200
){
event
.
preventDefault
()}
return
true
};
FastClick
.
prototype
.
touchHasMoved
=
function
(
event
){
'use strict'
;
var
touch
=
event
.
changedTouches
[
0
],
boundary
=
this
.
touchBoundary
;
if
(
Math
.
abs
(
touch
.
pageX
-
this
.
touchStartX
)
>
boundary
||
Math
.
abs
(
touch
.
pageY
-
this
.
touchStartY
)
>
boundary
){
return
true
}
return
false
};
FastClick
.
prototype
.
onTouchMove
=
function
(
event
){
'use strict'
;
if
(
!
this
.
trackingClick
){
return
true
}
if
(
this
.
targetElement
!==
this
.
getTargetElementFromEventTarget
(
event
.
target
)
||
this
.
touchHasMoved
(
event
)){
this
.
trackingClick
=
false
;
this
.
targetElement
=
null
}
return
true
};
FastClick
.
prototype
.
findControl
=
function
(
labelElement
){
'use strict'
;
if
(
labelElement
.
control
!==
undefined
){
return
labelElement
.
control
}
if
(
labelElement
.
htmlFor
){
return
document
.
getElementById
(
labelElement
.
htmlFor
)}
return
labelElement
.
querySelector
(
'button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea'
)};
FastClick
.
prototype
.
onTouchEnd
=
function
(
event
){
'use strict'
;
var
forElement
,
trackingClickStart
,
targetTagName
,
scrollParent
,
touch
,
targetElement
=
this
.
targetElement
;
if
(
!
this
.
trackingClick
){
return
true
}
if
((
event
.
timeStamp
-
this
.
lastClickTime
)
<
200
){
this
.
cancelNextClick
=
true
;
return
true
}
this
.
lastClickTime
=
event
.
timeStamp
;
trackingClickStart
=
this
.
trackingClickStart
;
this
.
trackingClick
=
false
;
this
.
trackingClickStart
=
0
;
if
(
this
.
deviceIsIOSWithBadTarget
){
touch
=
event
.
changedTouches
[
0
];
targetElement
=
document
.
elementFromPoint
(
touch
.
pageX
-
window
.
pageXOffset
,
touch
.
pageY
-
window
.
pageYOffset
)
||
targetElement
;
targetElement
.
fastClickScrollParent
=
this
.
targetElement
.
fastClickScrollParent
}
targetTagName
=
targetElement
.
tagName
.
toLowerCase
();
if
(
targetTagName
===
'label'
){
forElement
=
this
.
findControl
(
targetElement
);
if
(
forElement
){
this
.
focus
(
targetElement
);
if
(
this
.
deviceIsAndroid
){
return
false
}
targetElement
=
forElement
}}
else
if
(
this
.
needsFocus
(
targetElement
)){
if
((
event
.
timeStamp
-
trackingClickStart
)
>
100
||
(
this
.
deviceIsIOS
&&
window
.
top
!==
window
&&
targetTagName
===
'input'
)){
this
.
targetElement
=
null
;
return
false
}
this
.
focus
(
targetElement
);
if
(
!
this
.
deviceIsIOS4
||
targetTagName
!==
'select'
){
this
.
targetElement
=
null
;
event
.
preventDefault
()}
return
false
}
if
(
this
.
deviceIsIOS
&&!
this
.
deviceIsIOS4
){
scrollParent
=
targetElement
.
fastClickScrollParent
;
if
(
scrollParent
&&
scrollParent
.
fastClickLastScrollTop
!==
scrollParent
.
scrollTop
){
return
true
}}
if
(
!
this
.
needsClick
(
targetElement
)){
event
.
preventDefault
();
this
.
sendClick
(
targetElement
,
event
)}
return
false
};
FastClick
.
prototype
.
onTouchCancel
=
function
(){
'use strict'
;
this
.
trackingClick
=
false
;
this
.
targetElement
=
null
};
FastClick
.
prototype
.
onMouse
=
function
(
event
){
'use strict'
;
if
(
!
this
.
targetElement
){
return
true
}
if
(
event
.
forwardedTouchEvent
){
return
true
}
if
(
!
event
.
cancelable
){
return
true
}
if
(
!
this
.
needsClick
(
this
.
targetElement
)
||
this
.
cancelNextClick
){
if
(
event
.
stopImmediatePropagation
){
event
.
stopImmediatePropagation
()}
else
{
event
.
propagationStopped
=
true
}
event
.
stopPropagation
();
event
.
preventDefault
();
return
false
}
return
true
};
FastClick
.
prototype
.
onClick
=
function
(
event
){
'use strict'
;
var
permitted
;
if
(
this
.
trackingClick
){
this
.
targetElement
=
null
;
this
.
trackingClick
=
false
;
return
true
}
if
(
event
.
target
.
type
===
'submit'
&&
event
.
detail
===
0
){
return
true
}
permitted
=
this
.
onMouse
(
event
);
if
(
!
permitted
){
this
.
targetElement
=
null
}
return
permitted
};
FastClick
.
prototype
.
destroy
=
function
(){
'use strict'
;
var
layer
=
this
.
layer
;
if
(
this
.
deviceIsAndroid
){
layer
.
removeEventListener
(
'mouseover'
,
this
.
onMouse
,
true
);
layer
.
removeEventListener
(
'mousedown'
,
this
.
onMouse
,
true
);
layer
.
removeEventListener
(
'mouseup'
,
this
.
onMouse
,
true
)}
layer
.
removeEventListener
(
'click'
,
this
.
onClick
,
true
);
layer
.
removeEventListener
(
'touchstart'
,
this
.
onTouchStart
,
false
);
layer
.
removeEventListener
(
'touchmove'
,
this
.
onTouchMove
,
false
);
layer
.
removeEventListener
(
'touchend'
,
this
.
onTouchEnd
,
false
);
layer
.
removeEventListener
(
'touchcancel'
,
this
.
onTouchCancel
,
false
)};
FastClick
.
notNeeded
=
function
(
layer
){
'use strict'
;
var
metaViewport
;
if
(
typeof
window
.
ontouchstart
===
'undefined'
){
return
true
}
if
((
/Chrome\/[0-9]+/
).
test
(
navigator
.
userAgent
)){
if
(
FastClick
.
prototype
.
deviceIsAndroid
){
metaViewport
=
document
.
querySelector
(
'meta[name=viewport]'
);
if
(
metaViewport
&&
metaViewport
.
content
.
indexOf
(
'user-scalable=no'
)
!==-
1
){
return
true
}}
else
{
return
true
}}
if
(
layer
.
style
.
msTouchAction
===
'none'
){
return
true
}
return
false
};
FastClick
.
attach
=
function
(
layer
){
'use strict'
;
return
new
FastClick
(
layer
)};
if
(
typeof
define
!==
'undefined'
&&
define
.
amd
){
define
(
function
(){
'use strict'
;
return
FastClick
})}
else
if
(
typeof
module
!==
'undefined'
&&
module
.
exports
){
module
.
exports
=
FastClick
.
attach
;
module
.
exports
.
FastClick
=
FastClick
}
else
{
window
.
FastClick
=
FastClick
}
// Enable FastClick
if
(
typeof
FastClick
!==
'undefined'
)
{
FastClick
.
attach
(
document
.
body
);
}
// private Fast Selector wrapper,
// returns jQuery object. Only use where
// getElementById is not available.
var
S
=
function
(
selector
,
context
)
{
if
(
typeof
selector
===
'string'
)
{
if
(
context
)
{
return
$
(
context
.
querySelectorAll
(
selector
));
}
return
$
(
document
.
querySelectorAll
(
selector
));
}
return
$
(
selector
,
context
);
};
/*
https://github.com/paulirish/matchMedia.js
*/
window
.
matchMedia
=
window
.
matchMedia
||
(
function
(
doc
,
undefined
)
{
"use strict"
;
var
bool
,
docElem
=
doc
.
documentElement
,
refNode
=
docElem
.
firstElementChild
||
docElem
.
firstChild
,
// fakeBody required for <FF4 when executed in <head>
fakeBody
=
doc
.
createElement
(
"body"
),
div
=
doc
.
createElement
(
"div"
);
div
.
id
=
"mq-test-1"
;
div
.
style
.
cssText
=
"position:absolute;top:-100em"
;
fakeBody
.
style
.
background
=
"none"
;
fakeBody
.
appendChild
(
div
);
return
function
(
q
){
div
.
innerHTML
=
"­<style media=\""
+
q
+
"\"> #mq-test-1 { width: 42px; }</style>"
;
docElem
.
insertBefore
(
fakeBody
,
refNode
);
bool
=
div
.
offsetWidth
===
42
;
docElem
.
removeChild
(
fakeBody
);
return
{
matches
:
bool
,
media
:
q
};
};
}(
document
));
/*
* jquery.requestAnimationFrame
* https://github.com/gnarf37/jquery-requestAnimationFrame
* Requires jQuery 1.8+
*
* Copyright (c) 2012 Corey Frang
* Licensed under the MIT license.
*/
(
function
(
$
)
{
// requestAnimationFrame polyfill adapted from Erik Möller
// fixes from Paul Irish and Tino Zijdel
// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
var
animating
,
lastTime
=
0
,
vendors
=
[
'webkit'
,
'moz'
],
requestAnimationFrame
=
window
.
requestAnimationFrame
,
cancelAnimationFrame
=
window
.
cancelAnimationFrame
;
for
(;
lastTime
<
vendors
.
length
&&
!
requestAnimationFrame
;
lastTime
++
)
{
requestAnimationFrame
=
window
[
vendors
[
lastTime
]
+
"RequestAnimationFrame"
];
cancelAnimationFrame
=
cancelAnimationFrame
||
window
[
vendors
[
lastTime
]
+
"CancelAnimationFrame"
]
||
window
[
vendors
[
lastTime
]
+
"CancelRequestAnimationFrame"
];
}
function
raf
()
{
if
(
animating
)
{
requestAnimationFrame
(
raf
);
jQuery
.
fx
.
tick
();
}
}
if
(
requestAnimationFrame
)
{
// use rAF
window
.
requestAnimationFrame
=
requestAnimationFrame
;
window
.
cancelAnimationFrame
=
cancelAnimationFrame
;
jQuery
.
fx
.
timer
=
function
(
timer
)
{
if
(
timer
()
&&
jQuery
.
timers
.
push
(
timer
)
&&
!
animating
)
{
animating
=
true
;
raf
();
}
};
jQuery
.
fx
.
stop
=
function
()
{
animating
=
false
;
};
}
else
{
// polyfill
window
.
requestAnimationFrame
=
function
(
callback
,
element
)
{
var
currTime
=
new
Date
().
getTime
(),
timeToCall
=
Math
.
max
(
0
,
16
-
(
currTime
-
lastTime
)
),
id
=
window
.
setTimeout
(
function
()
{
callback
(
currTime
+
timeToCall
);
},
timeToCall
);
lastTime
=
currTime
+
timeToCall
;
return
id
;
};
window
.
cancelAnimationFrame
=
function
(
id
)
{
clearTimeout
(
id
);
};
}
}(
jQuery
));
function
removeQuotes
(
string
)
{
if
(
typeof
string
===
'string'
||
string
instanceof
String
)
{
string
=
string
.
replace
(
/^[\\/'"]+|(;\s?})+|[\\/'"]+$/g
,
''
);
}
return
string
;
}
window
.
Foundation
=
{
name
:
'Foundation'
,
version
:
'5.0.0'
,
media_queries
:
{
small
:
S
(
'.foundation-mq-small'
).
css
(
'font-family'
).
replace
(
/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g
,
''
),
medium
:
S
(
'.foundation-mq-medium'
).
css
(
'font-family'
).
replace
(
/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g
,
''
),
large
:
S
(
'.foundation-mq-large'
).
css
(
'font-family'
).
replace
(
/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g
,
''
),
xlarge
:
S
(
'.foundation-mq-xlarge'
).
css
(
'font-family'
).
replace
(
/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g
,
''
),
xxlarge
:
S
(
'.foundation-mq-xxlarge'
).
css
(
'font-family'
).
replace
(
/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g
,
''
)
},
stylesheet
:
$
(
'<style></style>'
).
appendTo
(
'head'
)[
0
].
sheet
,
init
:
function
(
scope
,
libraries
,
method
,
options
,
response
)
{
var
library_arr
,
args
=
[
scope
,
method
,
options
,
response
],
responses
=
[];
// check RTL
this
.
rtl
=
/rtl/i
.
test
(
S
(
'html'
).
attr
(
'dir'
));
// set foundation global scope
this
.
scope
=
scope
||
this
.
scope
;
if
(
libraries
&&
typeof
libraries
===
'string'
&&
!
/reflow/i
.
test
(
libraries
))
{
if
(
this
.
libs
.
hasOwnProperty
(
libraries
))
{
responses
.
push
(
this
.
init_lib
(
libraries
,
args
));
}
}
else
{
for
(
var
lib
in
this
.
libs
)
{
responses
.
push
(
this
.
init_lib
(
lib
,
libraries
));
}
}
return
scope
;
},
init_lib
:
function
(
lib
,
args
)
{
if
(
this
.
libs
.
hasOwnProperty
(
lib
))
{
this
.
patch
(
this
.
libs
[
lib
]);
if
(
args
&&
args
.
hasOwnProperty
(
lib
))
{
return
this
.
libs
[
lib
].
init
.
apply
(
this
.
libs
[
lib
],
[
this
.
scope
,
args
[
lib
]]);
}
return
this
.
libs
[
lib
].
init
.
apply
(
this
.
libs
[
lib
],
args
);
}
return
function
()
{};
},
patch
:
function
(
lib
)
{
lib
.
scope
=
this
.
scope
;
lib
[
'data_options'
]
=
this
.
lib_methods
.
data_options
;
lib
[
'bindings'
]
=
this
.
lib_methods
.
bindings
;
lib
[
'S'
]
=
S
;
lib
.
rtl
=
this
.
rtl
;
},
inherit
:
function
(
scope
,
methods
)
{
var
methods_arr
=
methods
.
split
(
' '
);
for
(
var
i
=
methods_arr
.
length
-
1
;
i
>=
0
;
i
--
)
{
if
(
this
.
lib_methods
.
hasOwnProperty
(
methods_arr
[
i
]))
{
this
.
libs
[
scope
.
name
][
methods_arr
[
i
]]
=
this
.
lib_methods
[
methods_arr
[
i
]];
}
}
},
random_str
:
function
(
length
)
{
var
chars
=
'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
.
split
(
''
);
if
(
!
length
)
{
length
=
Math
.
floor
(
Math
.
random
()
*
chars
.
length
);
}
var
str
=
''
;
for
(
var
i
=
0
;
i
<
length
;
i
++
)
{
str
+=
chars
[
Math
.
floor
(
Math
.
random
()
*
chars
.
length
)];
}
return
str
;
},
libs
:
{},
// methods that can be inherited in libraries
lib_methods
:
{
throttle
:
function
(
fun
,
delay
)
{
var
timer
=
null
;
return
function
()
{
var
context
=
this
,
args
=
arguments
;
clearTimeout
(
timer
);
timer
=
setTimeout
(
function
()
{
fun
.
apply
(
context
,
args
);
},
delay
);
};
},
// parses data-options attribute
data_options
:
function
(
el
)
{
var
opts
=
{},
ii
,
p
,
opts_arr
,
opts_len
,
data_options
=
el
.
data
(
'options'
);
if
(
typeof
data_options
===
'object'
)
{
return
data_options
;
}
opts_arr
=
(
data_options
||
':'
).
split
(
';'
),
opts_len
=
opts_arr
.
length
;
function
isNumber
(
o
)
{
return
!
isNaN
(
o
-
0
)
&&
o
!==
null
&&
o
!==
""
&&
o
!==
false
&&
o
!==
true
;
}
function
trim
(
str
)
{
if
(
typeof
str
===
'string'
)
return
$
.
trim
(
str
);
return
str
;
}
// parse options
for
(
ii
=
opts_len
-
1
;
ii
>=
0
;
ii
--
)
{
p
=
opts_arr
[
ii
].
split
(
':'
);
if
(
/true/i
.
test
(
p
[
1
]))
p
[
1
]
=
true
;
if
(
/false/i
.
test
(
p
[
1
]))
p
[
1
]
=
false
;
if
(
isNumber
(
p
[
1
]))
p
[
1
]
=
parseInt
(
p
[
1
],
10
);
if
(
p
.
length
===
2
&&
p
[
0
].
length
>
0
)
{
opts
[
trim
(
p
[
0
])]
=
trim
(
p
[
1
]);
}
}
return
opts
;
},
delay
:
function
(
fun
,
delay
)
{
return
setTimeout
(
fun
,
delay
);
},
// test for empty object or array
empty
:
function
(
obj
)
{
if
(
obj
.
length
&&
obj
.
length
>
0
)
return
false
;
if
(
obj
.
length
&&
obj
.
length
===
0
)
return
true
;
for
(
var
key
in
obj
)
{
if
(
hasOwnProperty
.
call
(
obj
,
key
))
return
false
;
}
return
true
;
},
register_media
:
function
(
media
,
media_class
)
{
if
(
Foundation
.
media_queries
[
media
]
===
undefined
)
{
$
(
'head'
).
append
(
'<meta class="'
+
media_class
+
'">'
);
Foundation
.
media_queries
[
media
]
=
removeQuotes
(
$
(
'.'
+
media_class
).
css
(
'font-family'
));
}
},
addCustomRule
:
function
(
rule
,
media
)
{
if
(
media
===
undefined
)
{
Foundation
.
stylesheet
.
insertRule
(
rule
,
Foundation
.
stylesheet
.
cssRules
.
length
);
}
else
{
var
query
=
Foundation
.
media_queries
[
media
];
if
(
query
!==
undefined
)
{
Foundation
.
stylesheet
.
insertRule
(
'@media '
+
Foundation
.
media_queries
[
media
]
+
'{ '
+
rule
+
' }'
);
}
}
},
loaded
:
function
(
image
,
callback
)
{
function
loaded
()
{
callback
(
image
[
0
]);
}
function
bindLoad
()
{
this
.
one
(
'load'
,
loaded
);
if
(
/MSIE (\d+\.\d+);/
.
test
(
navigator
.
userAgent
))
{
var
src
=
this
.
attr
(
'src'
),
param
=
src
.
match
(
/\?/
)
?
'&'
:
'?'
;
param
+=
'random='
+
(
new
Date
()).
getTime
();
this
.
attr
(
'src'
,
src
+
param
);
}
}
if
(
!
image
.
attr
(
'src'
))
{
loaded
();
return
;
}
if
(
image
[
0
].
complete
||
image
[
0
].
readyState
===
4
)
{
loaded
();
}
else
{
bindLoad
.
call
(
image
);
}
},
bindings
:
function
(
method
,
options
)
{
var
self
=
this
,
should_bind_events
=
!
S
(
this
).
data
(
this
.
name
+
'-init'
);
if
(
typeof
method
===
'string'
)
{
return
this
[
method
].
call
(
this
);
}
if
(
S
(
this
.
scope
).
is
(
'[data-'
+
this
.
name
+
']'
))
{
S
(
this
.
scope
).
data
(
this
.
name
+
'-init'
,
$
.
extend
({},
this
.
settings
,
(
options
||
method
),
this
.
data_options
(
S
(
this
.
scope
))));
if
(
should_bind_events
)
{
this
.
events
(
this
.
scope
);
}
}
else
{
S
(
'[data-'
+
this
.
name
+
']'
,
this
.
scope
).
each
(
function
()
{
var
should_bind_events
=
!
S
(
this
).
data
(
self
.
name
+
'-init'
);
S
(
this
).
data
(
self
.
name
+
'-init'
,
$
.
extend
({},
self
.
settings
,
(
options
||
method
),
self
.
data_options
(
S
(
this
))));
if
(
should_bind_events
)
{
self
.
events
(
this
);
}
});
}
}
}
};
$
.
fn
.
foundation
=
function
()
{
var
args
=
Array
.
prototype
.
slice
.
call
(
arguments
,
0
);
return
this
.
each
(
function
()
{
Foundation
.
init
.
apply
(
Foundation
,
[
this
].
concat
(
args
));
return
this
;
});
};
}(
jQuery
,
this
,
this
.
document
));
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Nov 17, 16:02 (1 d, 12 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3173001
Default Alt Text
foundation.js (21 KB)
Attached To
Mode
rWWW www.nasqueron.org
Attached
Detach File
Event Timeline
Log In to Comment