Skip to content
GitLab
Explore
Projects
Groups
Snippets
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Bootstrap
bootstrap
Commits
7b9c0a38
Commit
7b9c0a38
authored
11 years ago
by
XhmikosR
Browse files
Options
Download
Email Patches
Plain Diff
Downgrade holder.js to v2.2.0.
Fixes
#12440
.
parent
2c6b099f
main
cleanup-floating-forms
cssvar-function
dependabot/npm_and_yarn/stylelint-and-stylelint-config-twbs-bootstrap-15.3.0
extend-snippets
feat/data-target
floating-always-visible
floating-labels-icons
fod-main-banner
form-controls-with-icons
github/fork/719media/patch-13
github/fork/719media/patch-14
github/fork/719media/patch-9
github/fork/ChellyAhmed/fix-typo-reboot.md
github/fork/ChellyAhmed/offcanvas-scroll-back
github/fork/CtrlAltLilith/main
github/fork/Elysiome/offcanvas-optional-window-resizing
github/fork/JanSargsyan/main
github/fork/LunicLynx/support-different-line-height-for-buttons
github/fork/Psixodelik/main
github/fork/Ronid1/ronid1/offcanvas_static_backdrop
github/fork/RyanBerliner/tooltip-accessibility
github/fork/SantiagoPVazquez/Feature-default-border-bottom-to-dropdown-item
github/fork/Sir-Genius/utils
github/fork/Sumit-Singh-8/main
github/fork/Viktor-VERA2020/offcanvas-slide
github/fork/Zivangu9/input-group-for-form-control-plaintext
github/fork/alpadev/alpadev/call-dispose-on-component-reinstantiation
github/fork/astagi/fix/tree-shake-modules
github/fork/compnerd/dark-accordion-icon
github/fork/derSascha/dropdown-dont-close-on-input-click
github/fork/dev-ph1l/main
github/fork/donquixote/issue-33861-utl-mixin
github/fork/florianlacreuse/mixin-make-row-gutter-y
github/fork/gregorw/main
github/fork/iteggmbh/transitionend-dispose-race
github/fork/jdelStrother/patch-1
github/fork/jonnysp/form-floating
github/fork/jonnysp/independent-offcanvas
github/fork/jonnysp/theme-dark-on-card-and-modal-fix
github/fork/josefdlange/floating-label-placeholder-opacity
github/fork/julien-deramond/enhance-change-version.js
github/fork/julien-deramond/main-jd-fix-offset-content
github/fork/julien-deramond/main-jd-issue-with-utitlies
github/fork/julien-deramond/main-xmr-pa11y-ci-jd-add-hideElements
github/fork/kyletsang/fix-tooltip-padding
github/fork/lacutah/CheckboxCenteringDocumentation
github/fork/lekoala/patch-3
github/fork/louismaximepiton/main-kld-lmp-collapse-proposal
github/fork/louismaximepiton/main-lmp-card-inner-border-radius-fix
github/fork/louismaximepiton/main-lmp-carousel-multiple-images
github/fork/louismaximepiton/main-lmp-css-var-init
github/fork/louismaximepiton/main-lmp-disabled-floating-label-fix
github/fork/louismaximepiton/main-lmp-input-range-fix
github/fork/louismaximepiton/main-lmp-shift-color
github/fork/louismaximepiton/main-lmp-table-active-tr-fix
github/fork/maciek-szn/switch
github/fork/michael-roth/feature/19964-multiple-tab-targets
github/fork/mistic100/dom-utils
github/fork/nkdas91/accordion
github/fork/nstungcom/fix-missing-modal-open-class
github/fork/oraliahdz/animation-utilities
github/fork/pine3ree/patch-7
github/fork/pouwerkerk/unindent-scss-docs-shortcode
github/fork/smares/smares-no-scolling-on-modal-close
github/fork/tgm-git/patch-1
gs-forms
gs-toasts-with-animated-progress-bar
gs/add-history-helper
gs/change-version-dir-on-docs
gs/data-must-set-onlu-one-instance
gs/docs/fix-drop-down-error
gs/event-handler-2
gs/make-docs-js-build
gs/make-simple-attribute-toggler
gs/popover-fix-doc
gs/provide-steConfig-method
gs/scrollspy-smoothscroll-option-use-browser-history
gs/streamline-jqueryInterface
gs/support-drop-down-in-navbar
gs/test-js-generic-trigger
gs/try-web-components
gs/tweak-collapse-js-selector
gs/use-event-handler-in-cocmponent
gs/use-rollup-replace-for-version
jo-docs-thanks-page
jo-ssr-friendly
logical-props-spacing-utils
main-fod-disabled-form-check-label
main-fod-nested-accordion
main-fod-simpler-table-structure
main-fod-table-separator
main-fod-utilities-contrast
main-jd-abbr-title
main-jd-add-chips
main-jd-add-doc-for-sass-custom-colors
main-jd-add-enable-host-to-handle-web-components
main-jd-browserstack-fine-tune
main-jd-browserstack-updates
main-jd-docs-consistent-usage-of-css-sections-step-2
main-jd-fix-docs-headers-in-white
main-jd-fix-highlight-docs-border-radius
main-jd-fix-placeholder-color-background-params-for-img-markup
main-jd-glossary-experiment
main-jd-postcss-drop-empty-css-vars
main-jd-proto-doc-astro
main-jd-skip-navigation-component
main-jd-stackblitz-for-examples
main-jd-upgrade-browserlistrc
main-jd-use-host
main-lmp-dark-theme-customization
main-lmp-handle-scroll-target
main-lmp-tab-fix
main-mc-opensearch
main-xmr-bundlewatch-action
main-xmr-eslint-plugin-compat
main-xmr-hugo-docs-vendor
main-xmr-hugo-rm-ver
main-xmr-linkinator-prod
main-xmr-min-mangle
main-xmr-pa11y-ci
more-darkmode-examples
nested-dropdowns
patrickhlauke-issue37428
patrickhlauke-use-of-color-tweaks
pr/34102
pr/37590
previous-next-docs-links
sticky-thead
utilities-functions-mixin
v3-dev
v4-dev
v4-dev-dropdown-hide-method
v530-dev
v6-postcss-custom-media
v6-spinner-dots
v6/gs/use-floating-ui-in-place-of-popper
xmr/dev
xmr/docs-png
xmr/docs-svgs
xmr/hugo-reorg-files
xmr/js-2
xmr/markdownlint
xmr/prepare-530-alpha2
xmr/xo
v5.3.0-alpha1
v5.2.3
v5.2.2
v5.2.1
v5.2.0
v5.2.0-beta1
v5.1.3
v5.1.2
v5.1.1
v5.1.0
v5.0.2
v5.0.1
v5.0.0
v5.0.0-beta3
v5.0.0-beta2
v5.0.0-beta1
v5.0.0-alpha3
v5.0.0-alpha2
v5.0.0-alpha1
v4.6.2
v4.6.1
v4.6.0
v4.5.3
v4.5.2
v4.5.1
v4.5.0
v4.4.1
v4.4.0
v4.3.1
v4.3.0
v4.2.1
v4.2.0
v4.1.3
v4.1.2
v4.1.1
v4.1.0
v4.0.0
v4.0.0-beta.3
v4.0.0-beta.2
v4.0.0-beta
v4.0.0-alpha.6
v4.0.0-alpha.5
v4.0.0-alpha.4
v4.0.0-alpha.3
v4.0.0-alpha.2
v4.0.0-alpha
v3.4.1
v3.4.0
v3.3.7
v3.3.6
v3.3.5
v3.3.4
v3.3.2
v3.3.1
v3.3.0
v3.2.0
v3.1.1
4 merge requests
!28721
Hot test
,
!22103
test
,
!25326
Adjust examples
,
!12463
Downgrade holder.js to v2.2.0.
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
docs/assets/js/docs.min.js
+3
-3
docs/assets/js/docs.min.js
docs/assets/js/vendor/holder.js
+82
-227
docs/assets/js/vendor/holder.js
with
85 additions
and
230 deletions
+85
-230
docs/assets/js/docs.min.js
+
3
-
3
View file @
7b9c0a38
/*!
Holder - 2.
3
- client side image placeholders
(c) 2012-201
4
Ivan Malopinsky / http://imsky.co
Holder - 2.
2
- client side image placeholders
(c) 2012-201
3
Ivan Malopinsky / http://imsky.co
Provided under the MIT License.
Commercial use requires attribution.
*/
var
Holder
=
Holder
||
{};
!
function
(
a
,
b
){
function
c
(
a
,
b
,
c
){
b
=
parseInt
(
b
,
10
),
a
=
parseInt
(
a
,
10
);
var
d
=
Math
.
max
(
b
,
a
),
e
=
Math
.
min
(
b
,
a
),
f
=
1
/
12
,
g
=
Math
.
min
(.
75
*
e
,.
75
*
d
*
f
);
return
{
height
:
Math
.
round
(
Math
.
max
(
c
.
size
,
g
))}}
function
d
(
a
){
var
b
=
[];
for
(
p
in
a
)
a
.
hasOwnProperty
(
p
)
&&
b
.
push
(
p
+
"
:
"
+
a
[
p
]);
return
b
.
join
(
"
;
"
)}
function
e
(
a
){
var
b
=
a
.
ctx
,
d
=
a
.
dimensions
,
e
=
a
.
template
,
f
=
a
.
ratio
,
g
=
a
.
holder
,
h
=
"
literal
"
==
g
.
textmode
,
i
=
"
exact
"
==
g
.
textmode
,
j
=
c
(
d
.
width
,
d
.
height
,
e
),
k
=
j
.
height
,
l
=
d
.
width
*
f
,
m
=
d
.
height
*
f
,
n
=
e
.
font
?
e
.
font
:
"
Arial,Helvetica,sans-serif
"
;
canvas
.
width
=
l
,
canvas
.
height
=
m
,
b
.
textAlign
=
"
center
"
,
b
.
textBaseline
=
"
middle
"
,
b
.
fillStyle
=
e
.
background
,
b
.
fillRect
(
0
,
0
,
l
,
m
),
b
.
fillStyle
=
e
.
foreground
,
b
.
font
=
"
bold
"
+
k
+
"
px
"
+
n
;
var
o
=
e
.
text
?
e
.
text
:
Math
.
floor
(
d
.
width
)
+
"
x
"
+
Math
.
floor
(
d
.
height
);
if
(
h
){
var
d
=
g
.
dimensions
;
o
=
d
.
width
+
"
x
"
+
d
.
height
}
else
if
(
i
&&
g
.
exact_dimensions
){
var
d
=
g
.
exact_dimensions
;
o
=
Math
.
floor
(
d
.
width
)
+
"
x
"
+
Math
.
floor
(
d
.
height
)}
var
p
=
b
.
measureText
(
o
).
width
;
return
p
/
l
>=
.
75
&&
(
k
=
Math
.
floor
(.
75
*
k
*
(
l
/
p
))),
b
.
font
=
"
bold
"
+
k
*
f
+
"
px
"
+
n
,
b
.
fillText
(
o
,
l
/
2
,
m
/
2
,
l
),
canvas
.
toDataURL
(
"
image/png
"
)}
function
f
(
a
){
var
b
=
a
.
dimensions
,
d
=
a
.
template
,
e
=
a
.
holder
,
f
=
"
literal
"
==
e
.
textmode
,
g
=
"
exact
"
==
e
.
textmode
,
h
=
c
(
b
.
width
,
b
.
height
,
d
),
i
=
h
.
height
,
j
=
b
.
width
,
k
=
b
.
height
,
l
=
d
.
font
?
d
.
font
:
"
Arial,Helvetica,sans-serif
"
,
m
=
d
.
text
?
d
.
text
:
Math
.
floor
(
b
.
width
)
+
"
x
"
+
Math
.
floor
(
b
.
height
);
if
(
f
){
var
b
=
e
.
dimensions
;
m
=
b
.
width
+
"
x
"
+
b
.
height
}
else
if
(
g
&&
e
.
exact_dimensions
){
var
b
=
e
.
exact_dimensions
;
m
=
Math
.
floor
(
b
.
width
)
+
"
x
"
+
Math
.
floor
(
b
.
height
)}
var
n
=
z
({
text
:
m
,
width
:
j
,
height
:
k
,
text_height
:
i
,
font
:
l
,
template
:
d
});
return
"
data:image/svg+xml;base64,
"
+
btoa
(
n
)}
function
g
(
a
){
return
r
.
use_canvas
&&!
r
.
use_svg
?
e
(
a
):
f
(
a
)}
function
h
(
a
,
b
,
c
,
d
){
var
e
=
c
.
dimensions
,
f
=
c
.
theme
,
h
=
c
.
text
?
decodeURIComponent
(
c
.
text
):
c
.
text
,
i
=
e
.
width
+
"
x
"
+
e
.
height
;
f
=
h
?
o
(
f
,{
text
:
h
}):
f
,
f
=
c
.
font
?
o
(
f
,{
font
:
c
.
font
}):
f
,
b
.
setAttribute
(
"
data-src
"
,
d
),
c
.
theme
=
f
,
b
.
holder_data
=
c
,
"
image
"
==
a
?(
b
.
setAttribute
(
"
alt
"
,
h
?
h
:
f
.
text
?
f
.
text
+
"
[
"
+
i
+
"
]
"
:
i
),(
r
.
use_fallback
||!
c
.
auto
)
&&
(
b
.
style
.
width
=
e
.
width
+
"
px
"
,
b
.
style
.
height
=
e
.
height
+
"
px
"
),
r
.
use_fallback
?
b
.
style
.
backgroundColor
=
f
.
background
:(
b
.
setAttribute
(
"
src
"
,
g
({
ctx
:
w
,
dimensions
:
e
,
template
:
f
,
ratio
:
x
,
holder
:
c
})),
c
.
textmode
&&
"
exact
"
==
c
.
textmode
&&
(
v
.
push
(
b
),
k
(
b
)))):
"
background
"
==
a
?
r
.
use_fallback
||
(
b
.
style
.
backgroundImage
=
"
url(
"
+
g
({
ctx
:
w
,
dimensions
:
e
,
template
:
f
,
ratio
:
x
,
holder
:
c
})
+
"
)
"
,
b
.
style
.
backgroundSize
=
e
.
width
+
"
px
"
+
e
.
height
+
"
px
"
):
"
fluid
"
==
a
&&
(
b
.
setAttribute
(
"
alt
"
,
h
?
h
:
f
.
text
?
f
.
text
+
"
[
"
+
i
+
"
]
"
:
i
),
"
%
"
==
e
.
height
.
slice
(
-
1
)?
b
.
style
.
height
=
e
.
height
:
null
!=
c
.
auto
&&
c
.
auto
||
(
b
.
style
.
height
=
e
.
height
+
"
px
"
),
"
%
"
==
e
.
width
.
slice
(
-
1
)?
b
.
style
.
width
=
e
.
width
:
null
!=
c
.
auto
&&
c
.
auto
||
(
b
.
style
.
width
=
e
.
width
+
"
px
"
),(
"
inline
"
==
b
.
style
.
display
||
""
===
b
.
style
.
display
||
"
none
"
==
b
.
style
.
display
)
&&
(
b
.
style
.
display
=
"
block
"
),
j
(
b
),
r
.
use_fallback
?
b
.
style
.
backgroundColor
=
f
.
background
:(
v
.
push
(
b
),
k
(
b
)))}
function
i
(
a
,
b
){
var
c
=
{
height
:
a
.
clientHeight
,
width
:
a
.
clientWidth
};
return
c
.
height
||
c
.
width
?(
a
.
removeAttribute
(
"
data-holder-invisible
"
),
c
):(
a
.
setAttribute
(
"
data-holder-invisible
"
,
!
0
),
void
b
.
call
(
this
,
a
))}
function
j
(
b
){
if
(
b
.
holder_data
){
var
c
=
i
(
b
,
a
.
invisible_error_fn
(
j
));
if
(
c
){
var
d
=
b
.
holder_data
;
d
.
initial_dimensions
=
c
,
d
.
fluid_data
=
{
fluid_height
:
"
%
"
==
d
.
dimensions
.
height
.
slice
(
-
1
),
fluid_width
:
"
%
"
==
d
.
dimensions
.
width
.
slice
(
-
1
),
mode
:
null
},
d
.
fluid_data
.
fluid_width
&&!
d
.
fluid_data
.
fluid_height
?(
d
.
fluid_data
.
mode
=
"
width
"
,
d
.
fluid_data
.
ratio
=
d
.
initial_dimensions
.
width
/
parseFloat
(
d
.
dimensions
.
height
)):
!
d
.
fluid_data
.
fluid_width
&&
d
.
fluid_data
.
fluid_height
&&
(
d
.
fluid_data
.
mode
=
"
height
"
,
d
.
fluid_data
.
ratio
=
parseFloat
(
d
.
dimensions
.
width
)
/
d
.
initial_dimensions
.
height
)}}}
function
k
(
b
){
var
c
;
c
=
null
==
b
.
nodeType
?
v
:[
b
];
for
(
var
d
in
c
)
if
(
c
.
hasOwnProperty
(
d
)){
var
e
=
c
[
d
];
if
(
e
.
holder_data
){
var
f
=
e
.
holder_data
,
h
=
i
(
e
,
a
.
invisible_error_fn
(
k
));
if
(
h
){
if
(
f
.
fluid
){
if
(
f
.
auto
)
switch
(
f
.
fluid_data
.
mode
){
case
"
width
"
:
h
.
height
=
h
.
width
/
f
.
fluid_data
.
ratio
;
break
;
case
"
height
"
:
h
.
width
=
h
.
height
*
f
.
fluid_data
.
ratio
}
e
.
setAttribute
(
"
src
"
,
g
({
ctx
:
w
,
dimensions
:
h
,
template
:
f
.
theme
,
ratio
:
x
,
holder
:
f
}))}
f
.
textmode
&&
"
exact
"
==
f
.
textmode
&&
(
f
.
exact_dimensions
=
h
,
e
.
setAttribute
(
"
src
"
,
g
({
ctx
:
w
,
dimensions
:
f
.
dimensions
,
template
:
f
.
theme
,
ratio
:
x
,
holder
:
f
})))}}}}
function
l
(
b
,
c
){
for
(
var
d
=
{
theme
:
o
(
y
.
themes
.
gray
,{})},
e
=!
1
,
f
=
b
.
length
,
g
=
0
;
f
>
g
;
g
++
){
var
h
=
b
[
g
];
a
.
flags
.
dimensions
.
match
(
h
)?(
e
=!
0
,
d
.
dimensions
=
a
.
flags
.
dimensions
.
output
(
h
)):
a
.
flags
.
fluid
.
match
(
h
)?(
e
=!
0
,
d
.
dimensions
=
a
.
flags
.
fluid
.
output
(
h
),
d
.
fluid
=!
0
):
a
.
flags
.
textmode
.
match
(
h
)?
d
.
textmode
=
a
.
flags
.
textmode
.
output
(
h
):
a
.
flags
.
colors
.
match
(
h
)?
d
.
theme
=
a
.
flags
.
colors
.
output
(
h
):
c
.
themes
[
h
]?
c
.
themes
.
hasOwnProperty
(
h
)
&&
(
d
.
theme
=
o
(
c
.
themes
[
h
],{})):
a
.
flags
.
font
.
match
(
h
)?
d
.
font
=
a
.
flags
.
font
.
output
(
h
):
a
.
flags
.
auto
.
match
(
h
)?
d
.
auto
=!
0
:
a
.
flags
.
text
.
match
(
h
)
&&
(
d
.
text
=
a
.
flags
.
text
.
output
(
h
))}
return
e
?
d
:
!
1
}
function
m
(
a
,
b
){
var
c
=
"
complete
"
,
d
=
"
readystatechange
"
,
e
=!
1
,
f
=
e
,
g
=!
0
,
h
=
a
.
document
,
i
=
h
.
documentElement
,
j
=
h
.
addEventListener
?
"
addEventListener
"
:
"
attachEvent
"
,
k
=
h
.
addEventListener
?
"
removeEventListener
"
:
"
detachEvent
"
,
l
=
h
.
addEventListener
?
""
:
"
on
"
,
m
=
function
(
g
){(
g
.
type
!=
d
||
h
.
readyState
==
c
)
&&
((
"
load
"
==
g
.
type
?
a
:
h
)[
k
](
l
+
g
.
type
,
m
,
e
),
!
f
&&
(
f
=!
0
)
&&
b
.
call
(
a
,
null
))},
n
=
function
(){
try
{
i
.
doScroll
(
"
left
"
)}
catch
(
a
){
return
void
setTimeout
(
n
,
50
)}
m
(
"
poll
"
)};
if
(
h
.
readyState
==
c
)
b
.
call
(
a
,
"
lazy
"
);
else
{
if
(
h
.
createEventObject
&&
i
.
doScroll
){
try
{
g
=!
a
.
frameElement
}
catch
(
o
){}
g
&&
n
()}
h
[
j
](
l
+
"
DOMContentLoaded
"
,
m
,
e
),
h
[
j
](
l
+
d
,
m
,
e
),
a
[
j
](
l
+
"
load
"
,
m
,
e
)}}
function
n
(
a
,
b
){
var
a
=
a
.
match
(
/^
(\W)?(
.*
)
/
),
b
=
b
||
document
,
c
=
b
[
"
getElement
"
+
(
a
[
1
]?
"
#
"
==
a
[
1
]?
"
ById
"
:
"
sByClassName
"
:
"
sByTagName
"
)],
d
=
c
.
call
(
b
,
a
[
2
]),
e
=
[];
return
null
!==
d
&&
(
e
=
d
.
length
||
0
===
d
.
length
?
d
:[
d
]),
e
}
function
o
(
a
,
b
){
var
c
=
{};
for
(
var
d
in
a
)
a
.
hasOwnProperty
(
d
)
&&
(
c
[
d
]
=
a
[
d
]);
for
(
var
d
in
b
)
b
.
hasOwnProperty
(
d
)
&&
(
c
[
d
]
=
b
[
d
]);
return
c
}
var
q
=
{
use_svg
:
!
1
,
use_canvas
:
!
1
,
use_fallback
:
!
1
},
r
=
{},
s
=!
1
;
canvas
=
document
.
createElement
(
"
canvas
"
);
var
t
=
1
,
u
=
1
,
v
=
[];
if
(
canvas
.
getContext
)
if
(
canvas
.
toDataURL
(
"
image/png
"
).
indexOf
(
"
data:image/png
"
)
<
0
)
q
.
use_fallback
=!
0
;
else
var
w
=
canvas
.
getContext
(
"
2d
"
);
else
q
.
use_fallback
=!
0
;
document
.
createElementNS
&&
document
.
createElementNS
(
"
http://www.w3.org/2000/svg
"
,
"
svg
"
).
createSVGRect
&&
(
q
.
use_svg
=!
0
,
q
.
use_canvas
=!
1
),
q
.
use_fallback
||
(
t
=
window
.
devicePixelRatio
||
1
,
u
=
w
.
webkitBackingStorePixelRatio
||
w
.
mozBackingStorePixelRatio
||
w
.
msBackingStorePixelRatio
||
w
.
oBackingStorePixelRatio
||
w
.
backingStorePixelRatio
||
1
);
var
x
=
t
/
u
,
y
=
{
domain
:
"
holder.js
"
,
images
:
"
img
"
,
bgnodes
:
"
.holderjs
"
,
themes
:{
gray
:{
background
:
"
#eee
"
,
foreground
:
"
#aaa
"
,
size
:
12
},
social
:{
background
:
"
#3a5a97
"
,
foreground
:
"
#fff
"
,
size
:
12
},
industrial
:{
background
:
"
#434A52
"
,
foreground
:
"
#C2F200
"
,
size
:
12
},
sky
:{
background
:
"
#0D8FDB
"
,
foreground
:
"
#fff
"
,
size
:
12
},
vine
:{
background
:
"
#39DBAC
"
,
foreground
:
"
#1E292C
"
,
size
:
12
},
lava
:{
background
:
"
#F8591A
"
,
foreground
:
"
#1C2846
"
,
size
:
12
}},
stylesheet
:
""
};
a
.
flags
=
{
dimensions
:{
regex
:
/^
(\d
+
)
x
(\d
+
)
$/
,
output
:
function
(
a
){
var
b
=
this
.
regex
.
exec
(
a
);
return
{
width
:
+
b
[
1
],
height
:
+
b
[
2
]}}},
fluid
:{
regex
:
/^
([
0-9%
]
+
)
x
([
0-9%
]
+
)
$/
,
output
:
function
(
a
){
var
b
=
this
.
regex
.
exec
(
a
);
return
{
width
:
b
[
1
],
height
:
b
[
2
]}}},
colors
:{
regex
:
/#
([
0-9a-f
]{3,})\:
#
([
0-9a-f
]{3,})
/i
,
output
:
function
(
a
){
var
b
=
this
.
regex
.
exec
(
a
);
return
{
size
:
y
.
themes
.
gray
.
size
,
foreground
:
"
#
"
+
b
[
2
],
background
:
"
#
"
+
b
[
1
]}}},
text
:{
regex
:
/text
\:(
.*
)
/
,
output
:
function
(
a
){
return
this
.
regex
.
exec
(
a
)[
1
]}},
font
:{
regex
:
/font
\:(
.*
)
/
,
output
:
function
(
a
){
return
this
.
regex
.
exec
(
a
)[
1
]}},
auto
:{
regex
:
/^auto$/
},
textmode
:{
regex
:
/textmode
\:(
.*
)
/
,
output
:
function
(
a
){
return
this
.
regex
.
exec
(
a
)[
1
]}}};
var
z
=
function
(){
var
a
=
new
XMLSerializer
,
b
=
"
http://www.w3.org/2000/svg
"
,
c
=
document
.
createElementNS
(
b
,
"
svg
"
);
c
.
setAttribute
(
"
xmlns
"
,
"
http://www.w3.org/2000/svg
"
),
c
.
setAttribute
(
"
xmlns:xlink
"
,
"
http://www.w3.org/1999/xlink
"
);
var
e
=
document
.
createElementNS
(
b
,
"
rect
"
),
f
=
document
.
createElementNS
(
b
,
"
text
"
),
g
=
document
.
createTextNode
(
null
);
return
f
.
setAttribute
(
"
text-anchor
"
,
"
middle
"
),
f
.
appendChild
(
g
),
c
.
appendChild
(
e
),
c
.
appendChild
(
f
),
function
(
b
){
return
c
.
setAttribute
(
"
width
"
,
b
.
width
),
c
.
setAttribute
(
"
height
"
,
b
.
height
),
e
.
setAttribute
(
"
width
"
,
b
.
width
),
e
.
setAttribute
(
"
height
"
,
b
.
height
),
e
.
setAttribute
(
"
fill
"
,
b
.
template
.
background
),
f
.
setAttribute
(
"
x
"
,
b
.
width
/
2
),
f
.
setAttribute
(
"
y
"
,
b
.
height
/
2
),
g
.
nodeValue
=
b
.
text
,
f
.
setAttribute
(
"
style
"
,
d
({
fill
:
b
.
template
.
foreground
,
"
font-weight
"
:
"
bold
"
,
"
font-size
"
:
b
.
text_height
+
"
px
"
,
"
font-family
"
:
b
.
font
,
"
dominant-baseline
"
:
"
central
"
})),
a
.
serializeToString
(
c
)}}();
for
(
var
A
in
a
.
flags
)
a
.
flags
.
hasOwnProperty
(
A
)
&&
(
a
.
flags
[
A
].
match
=
function
(
a
){
return
a
.
match
(
this
.
regex
)});
a
.
invisible_error_fn
=
function
(){
return
function
(
a
){
if
(
a
.
hasAttribute
(
"
data-holder-invisible
"
))
throw
new
Error
(
"
Holder: invisible placeholder
"
)}},
a
.
add_theme
=
function
(
b
,
c
){
return
null
!=
b
&&
null
!=
c
&&
(
y
.
themes
[
b
]
=
c
),
a
},
a
.
add_image
=
function
(
b
,
c
){
var
d
=
n
(
c
);
if
(
d
.
length
)
for
(
var
e
=
0
,
f
=
d
.
length
;
f
>
e
;
e
++
){
var
g
=
document
.
createElement
(
"
img
"
);
g
.
setAttribute
(
"
data-src
"
,
b
),
d
[
e
].
appendChild
(
g
)}
return
a
},
a
.
run
=
function
(
b
){
r
=
o
({},
q
),
s
=!
0
;
var
c
=
o
(
y
,
b
),
d
=
[],
e
=
[],
f
=
[];
for
(
null
!=
c
.
use_canvas
&&
c
.
use_canvas
&&
(
r
.
use_canvas
=!
0
,
r
.
use_svg
=!
1
),
"
string
"
==
typeof
c
.
images
?
e
=
n
(
c
.
images
):
window
.
NodeList
&&
c
.
images
instanceof
window
.
NodeList
?
e
=
c
.
images
:
window
.
Node
&&
c
.
images
instanceof
window
.
Node
?
e
=
[
c
.
images
]:
window
.
HTMLCollection
&&
c
.
images
instanceof
window
.
HTMLCollection
&&
(
e
=
c
.
images
),
"
string
"
==
typeof
c
.
bgnodes
?
f
=
n
(
c
.
bgnodes
):
window
.
NodeList
&&
c
.
elements
instanceof
window
.
NodeList
?
f
=
c
.
bgnodes
:
window
.
Node
&&
c
.
bgnodes
instanceof
window
.
Node
&&
(
f
=
[
c
.
bgnodes
]),
k
=
0
,
j
=
e
.
length
;
j
>
k
;
k
++
)
d
.
push
(
e
[
k
]);
var
g
=
document
.
getElementById
(
"
holderjs-style
"
);
g
||
(
g
=
document
.
createElement
(
"
style
"
),
g
.
setAttribute
(
"
id
"
,
"
holderjs-style
"
),
g
.
type
=
"
text/css
"
,
document
.
getElementsByTagName
(
"
head
"
)[
0
].
appendChild
(
g
)),
c
.
nocss
||
(
g
.
styleSheet
?
g
.
styleSheet
.
cssText
+=
c
.
stylesheet
:
g
.
appendChild
(
document
.
createTextNode
(
c
.
stylesheet
)));
for
(
var
i
=
new
RegExp
(
c
.
domain
+
'
/(.*?)"?
\\
)
'
),
j
=
f
.
length
,
k
=
0
;
j
>
k
;
k
++
){
var
m
=
window
.
getComputedStyle
(
f
[
k
],
null
).
getPropertyValue
(
"
background-image
"
),
p
=
m
.
match
(
i
),
t
=
f
[
k
].
getAttribute
(
"
data-background-src
"
);
if
(
p
){
var
u
=
l
(
p
[
1
].
split
(
"
/
"
),
c
);
u
&&
h
(
"
background
"
,
f
[
k
],
u
,
m
)}
else
if
(
null
!=
t
){
var
u
=
l
(
t
.
substr
(
t
.
lastIndexOf
(
c
.
domain
)
+
c
.
domain
.
length
+
1
).
split
(
"
/
"
),
c
);
u
&&
h
(
"
background
"
,
f
[
k
],
u
,
m
)}}
for
(
j
=
d
.
length
,
k
=
0
;
j
>
k
;
k
++
){
var
v
,
w
;
w
=
v
=
m
=
null
;
try
{
w
=
d
[
k
].
getAttribute
(
"
src
"
),
attr_datasrc
=
d
[
k
].
getAttribute
(
"
data-src
"
)}
catch
(
x
){}
if
(
null
==
attr_datasrc
&&
w
&&
w
.
indexOf
(
c
.
domain
)
>=
0
?
m
=
w
:
attr_datasrc
&&
attr_datasrc
.
indexOf
(
c
.
domain
)
>=
0
&&
(
m
=
attr_datasrc
),
m
){
var
u
=
l
(
m
.
substr
(
m
.
lastIndexOf
(
c
.
domain
)
+
c
.
domain
.
length
+
1
).
split
(
"
/
"
),
c
);
u
&&
(
u
.
fluid
?
h
(
"
fluid
"
,
d
[
k
],
u
,
m
):
h
(
"
image
"
,
d
[
k
],
u
,
m
))}}
return
a
},
m
(
b
,
function
(){
window
.
addEventListener
?(
window
.
addEventListener
(
"
resize
"
,
k
,
!
1
),
window
.
addEventListener
(
"
orientationchange
"
,
k
,
!
1
)):
window
.
attachEvent
(
"
onresize
"
,
k
),
s
||
a
.
run
({})}),
"
function
"
==
typeof
define
&&
define
.
amd
&&
define
([],
function
(){
return
a
}),
function
(){
function
a
(
a
){
this
.
message
=
a
}
var
b
=
"
undefined
"
!=
typeof
exports
?
exports
:
this
,
c
=
"
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
"
;
a
.
prototype
=
Error
(),
a
.
prototype
.
name
=
"
InvalidCharacterError
"
,
b
.
btoa
||
(
b
.
btoa
=
function
(
b
){
for
(
var
d
,
e
,
f
=
0
,
g
=
c
,
h
=
""
;
b
.
charAt
(
0
|
f
)
||
(
g
=
"
=
"
,
f
%
1
);
h
+=
g
.
charAt
(
63
&
d
>>
8
-
8
*
(
f
%
1
))){
if
(
e
=
b
.
charCodeAt
(
f
+=
.
75
),
e
>
255
)
throw
new
a
(
"
'btoa' failed
"
);
d
=
d
<<
8
|
e
}
return
h
}),
b
.
atob
||
(
b
.
atob
=
function
(
b
){
if
(
b
=
b
.
replace
(
/=+$/
,
""
),
1
==
b
.
length
%
4
)
throw
new
a
(
"
'atob' failed
"
);
for
(
var
d
,
e
,
f
=
0
,
g
=
0
,
h
=
""
;
e
=
b
.
charAt
(
g
++
);
~
e
&&
(
d
=
f
%
4
?
64
*
d
+
e
:
e
,
f
++%
4
)?
h
+=
String
.
fromCharCode
(
255
&
d
>>
(
6
&-
2
*
f
)):
0
)
e
=
c
.
indexOf
(
e
);
return
h
})}(),
document
.
getElementsByClassName
||
(
document
.
getElementsByClassName
=
function
(
a
){
var
b
,
c
,
d
,
e
=
document
,
f
=
[];
if
(
e
.
querySelectorAll
)
return
e
.
querySelectorAll
(
"
.
"
+
a
);
if
(
e
.
evaluate
)
for
(
c
=
"
.//*[contains(concat(' ', @class, ' '), '
"
+
a
+
"
')]
"
,
b
=
e
.
evaluate
(
c
,
e
,
null
,
0
,
null
);
d
=
b
.
iterateNext
();)
f
.
push
(
d
);
else
for
(
b
=
e
.
getElementsByTagName
(
"
*
"
),
c
=
new
RegExp
(
"
(^|
\\
s)
"
+
a
+
"
(
\\
s|$)
"
),
d
=
0
;
d
<
b
.
length
;
d
++
)
c
.
test
(
b
[
d
].
className
)
&&
f
.
push
(
b
[
d
]);
return
f
}),
window
.
getComputedStyle
||
(
window
.
getComputedStyle
=
function
(
a
){
return
this
.
el
=
a
,
this
.
getPropertyValue
=
function
(
b
){
var
c
=
/
(\-([
a-z
]){1})
/g
;
return
"
float
"
==
b
&&
(
b
=
"
styleFloat
"
),
c
.
test
(
b
)
&&
(
b
=
b
.
replace
(
c
,
function
(){
return
arguments
[
2
].
toUpperCase
()})),
a
.
currentStyle
[
b
]?
a
.
currentStyle
[
b
]:
null
},
this
}),
Object
.
prototype
.
hasOwnProperty
||
(
Object
.
prototype
.
hasOwnProperty
=
function
(
a
){
var
b
=
this
.
__proto__
||
this
.
constructor
.
prototype
;
return
a
in
this
&&
(
!
(
a
in
b
)
||
b
[
a
]
!==
this
[
a
])
})}(
Holder
,
window
),
/*!
var
Holder
=
Holder
||
{};
!
function
(
a
,
b
){
function
c
(
a
,
b
){
var
c
=
"
complete
"
,
d
=
"
readystatechange
"
,
e
=!
1
,
f
=
e
,
g
=!
0
,
h
=
a
.
document
,
i
=
h
.
documentElement
,
j
=
h
.
addEventListener
?
"
addEventListener
"
:
"
attachEvent
"
,
k
=
h
.
addEventListener
?
"
removeEventListener
"
:
"
detachEvent
"
,
l
=
h
.
addEventListener
?
""
:
"
on
"
,
m
=
function
(
g
){(
g
.
type
!=
d
||
h
.
readyState
==
c
)
&&
((
"
load
"
==
g
.
type
?
a
:
h
)[
k
](
l
+
g
.
type
,
m
,
e
),
!
f
&&
(
f
=!
0
)
&&
b
.
call
(
a
,
null
))},
n
=
function
(){
try
{
i
.
doScroll
(
"
left
"
)}
catch
(
a
){
return
void
setTimeout
(
n
,
50
)}
m
(
"
poll
"
)};
if
(
h
.
readyState
==
c
)
b
.
call
(
a
,
"
lazy
"
);
else
{
if
(
h
.
createEventObject
&&
i
.
doScroll
){
try
{
g
=!
a
.
frameElement
}
catch
(
o
){}
g
&&
n
()}
h
[
j
](
l
+
"
DOMContentLoaded
"
,
m
,
e
),
h
[
j
](
l
+
d
,
m
,
e
),
a
[
j
](
l
+
"
load
"
,
m
,
e
)}}
function
d
(
a
){
a
=
a
.
match
(
/^
(\W)?(
.*
)
/
);
var
b
=
document
[
"
getElement
"
+
(
a
[
1
]?
"
#
"
==
a
[
1
]?
"
ById
"
:
"
sByClassName
"
:
"
sByTagName
"
)](
a
[
2
]),
c
=
[];
return
null
!==
b
&&
(
c
=
b
.
length
?
b
:
0
===
b
.
length
?
b
:[
b
]),
c
}
function
e
(
a
,
b
){
var
c
=
{};
for
(
var
d
in
a
)
a
.
hasOwnProperty
(
d
)
&&
(
c
[
d
]
=
a
[
d
]);
for
(
var
d
in
b
)
b
.
hasOwnProperty
(
d
)
&&
(
c
[
d
]
=
b
[
d
]);
return
c
}
function
f
(
a
,
b
,
c
){
b
=
parseInt
(
b
,
10
),
a
=
parseInt
(
a
,
10
);
var
d
=
Math
.
max
(
b
,
a
),
e
=
Math
.
min
(
b
,
a
),
f
=
1
/
12
,
g
=
Math
.
min
(.
75
*
e
,.
75
*
d
*
f
);
return
{
height
:
Math
.
round
(
Math
.
max
(
c
.
size
,
g
))}}
function
g
(
a
){
var
b
=
a
.
ctx
,
c
=
a
.
dimensions
,
d
=
a
.
template
,
e
=
a
.
ratio
,
g
=
a
.
holder
,
h
=
"
literal
"
==
g
.
textmode
,
i
=
"
exact
"
==
g
.
textmode
,
j
=
f
(
c
.
width
,
c
.
height
,
d
),
k
=
j
.
height
,
l
=
c
.
width
*
e
,
m
=
c
.
height
*
e
,
n
=
d
.
font
?
d
.
font
:
"
sans-serif
"
;
o
.
width
=
l
,
o
.
height
=
m
,
b
.
textAlign
=
"
center
"
,
b
.
textBaseline
=
"
middle
"
,
b
.
fillStyle
=
d
.
background
,
b
.
fillRect
(
0
,
0
,
l
,
m
),
b
.
fillStyle
=
d
.
foreground
,
b
.
font
=
"
bold
"
+
k
+
"
px
"
+
n
;
var
p
=
d
.
text
?
d
.
text
:
Math
.
floor
(
c
.
width
)
+
"
x
"
+
Math
.
floor
(
c
.
height
);
if
(
h
){
var
c
=
g
.
dimensions
;
p
=
c
.
width
+
"
x
"
+
c
.
height
}
else
if
(
i
&&
g
.
exact_dimensions
){
var
c
=
g
.
exact_dimensions
;
p
=
Math
.
floor
(
c
.
width
)
+
"
x
"
+
Math
.
floor
(
c
.
height
)}
var
q
=
b
.
measureText
(
p
).
width
;
return
q
/
l
>=
.
75
&&
(
k
=
Math
.
floor
(.
75
*
k
*
(
l
/
q
))),
b
.
font
=
"
bold
"
+
k
*
e
+
"
px
"
+
n
,
b
.
fillText
(
p
,
l
/
2
,
m
/
2
,
l
),
o
.
toDataURL
(
"
image/png
"
)}
function
h
(
a
,
b
,
c
,
d
){
var
f
=
c
.
dimensions
,
h
=
c
.
theme
,
i
=
c
.
text
?
decodeURIComponent
(
c
.
text
):
c
.
text
,
j
=
f
.
width
+
"
x
"
+
f
.
height
;
h
=
i
?
e
(
h
,{
text
:
i
}):
h
,
h
=
c
.
font
?
e
(
h
,{
font
:
c
.
font
}):
h
,
b
.
setAttribute
(
"
data-src
"
,
d
),
c
.
theme
=
h
,
b
.
holder_data
=
c
,
"
image
"
==
a
?(
b
.
setAttribute
(
"
alt
"
,
i
?
i
:
h
.
text
?
h
.
text
+
"
[
"
+
j
+
"
]
"
:
j
),(
n
||!
c
.
auto
)
&&
(
b
.
style
.
width
=
f
.
width
+
"
px
"
,
b
.
style
.
height
=
f
.
height
+
"
px
"
),
n
?
b
.
style
.
backgroundColor
=
h
.
background
:(
b
.
setAttribute
(
"
src
"
,
g
({
ctx
:
s
,
dimensions
:
f
,
template
:
h
,
ratio
:
t
,
holder
:
c
})),
c
.
textmode
&&
"
exact
"
==
c
.
textmode
&&
(
r
.
push
(
b
),
k
(
b
)))):
"
background
"
==
a
?
n
||
(
b
.
style
.
backgroundImage
=
"
url(
"
+
g
({
ctx
:
s
,
dimensions
:
f
,
template
:
h
,
ratio
:
t
,
holder
:
c
})
+
"
)
"
,
b
.
style
.
backgroundSize
=
f
.
width
+
"
px
"
+
f
.
height
+
"
px
"
):
"
fluid
"
==
a
&&
(
b
.
setAttribute
(
"
alt
"
,
i
?
i
:
h
.
text
?
h
.
text
+
"
[
"
+
j
+
"
]
"
:
j
),
b
.
style
.
height
=
"
%
"
==
f
.
height
.
slice
(
-
1
)?
f
.
height
:
f
.
height
+
"
px
"
,
b
.
style
.
width
=
"
%
"
==
f
.
width
.
slice
(
-
1
)?
f
.
width
:
f
.
width
+
"
px
"
,(
"
inline
"
==
b
.
style
.
display
||
""
===
b
.
style
.
display
||
"
none
"
==
b
.
style
.
display
)
&&
(
b
.
style
.
display
=
"
block
"
),
n
?
b
.
style
.
backgroundColor
=
h
.
background
:(
r
.
push
(
b
),
k
(
b
)))}
function
i
(
a
,
b
){
var
c
=
{
height
:
a
.
clientHeight
,
width
:
a
.
clientWidth
};
if
(
!
c
.
height
&&!
c
.
width
){
if
(
a
.
hasAttribute
(
"
data-holder-invisible
"
))
throw
new
Error
(
"
Holder: placeholder is not visible
"
);
return
a
.
setAttribute
(
"
data-holder-invisible
"
,
!
0
),
setTimeout
(
function
(){
b
.
call
(
this
,
a
)},
1
),
null
}
return
a
.
removeAttribute
(
"
data-holder-invisible
"
),
c
}
function
k
(
a
){
var
b
;
b
=
null
==
a
.
nodeType
?
r
:[
a
];
for
(
var
c
in
b
)
if
(
b
.
hasOwnProperty
(
c
)){
var
d
=
b
[
c
];
if
(
d
.
holder_data
){
var
e
=
d
.
holder_data
,
f
=
i
(
d
,
k
);
f
&&
(
e
.
fluid
&&
d
.
setAttribute
(
"
src
"
,
g
({
ctx
:
s
,
dimensions
:
f
,
template
:
e
.
theme
,
ratio
:
t
,
holder
:
e
})),
e
.
textmode
&&
"
exact
"
==
e
.
textmode
&&
(
e
.
exact_dimensions
=
f
,
d
.
setAttribute
(
"
src
"
,
g
({
ctx
:
s
,
dimensions
:
e
.
dimensions
,
template
:
e
.
theme
,
ratio
:
t
,
holder
:
e
}))))}}}
function
l
(
b
,
c
){
var
d
=
{
theme
:
e
(
u
.
themes
.
gray
,{})},
f
=!
1
;
for
(
sl
=
b
.
length
,
j
=
0
;
sl
>
j
;
j
++
){
var
g
=
b
[
j
];
a
.
flags
.
dimensions
.
match
(
g
)?(
f
=!
0
,
d
.
dimensions
=
a
.
flags
.
dimensions
.
output
(
g
)):
a
.
flags
.
fluid
.
match
(
g
)?(
f
=!
0
,
d
.
dimensions
=
a
.
flags
.
fluid
.
output
(
g
),
d
.
fluid
=!
0
):
a
.
flags
.
textmode
.
match
(
g
)?
d
.
textmode
=
a
.
flags
.
textmode
.
output
(
g
):
a
.
flags
.
colors
.
match
(
g
)?
d
.
theme
=
a
.
flags
.
colors
.
output
(
g
):
c
.
themes
[
g
]?
c
.
themes
.
hasOwnProperty
(
g
)
&&
(
d
.
theme
=
e
(
c
.
themes
[
g
],{})):
a
.
flags
.
font
.
match
(
g
)?
d
.
font
=
a
.
flags
.
font
.
output
(
g
):
a
.
flags
.
auto
.
match
(
g
)?
d
.
auto
=!
0
:
a
.
flags
.
text
.
match
(
g
)
&&
(
d
.
text
=
a
.
flags
.
text
.
output
(
g
))}
return
f
?
d
:
!
1
}
var
m
=!
1
,
n
=!
1
,
o
=
document
.
createElement
(
"
canvas
"
),
p
=
1
,
q
=
1
,
r
=
[];
if
(
o
.
getContext
)
if
(
o
.
toDataURL
(
"
image/png
"
).
indexOf
(
"
data:image/png
"
)
<
0
)
n
=!
0
;
else
var
s
=
o
.
getContext
(
"
2d
"
);
else
n
=!
0
;
n
||
(
p
=
window
.
devicePixelRatio
||
1
,
q
=
s
.
webkitBackingStorePixelRatio
||
s
.
mozBackingStorePixelRatio
||
s
.
msBackingStorePixelRatio
||
s
.
oBackingStorePixelRatio
||
s
.
backingStorePixelRatio
||
1
);
var
t
=
p
/
q
,
u
=
{
domain
:
"
holder.js
"
,
images
:
"
img
"
,
bgnodes
:
"
.holderjs
"
,
themes
:{
gray
:{
background
:
"
#eee
"
,
foreground
:
"
#aaa
"
,
size
:
12
},
social
:{
background
:
"
#3a5a97
"
,
foreground
:
"
#fff
"
,
size
:
12
},
industrial
:{
background
:
"
#434A52
"
,
foreground
:
"
#C2F200
"
,
size
:
12
},
sky
:{
background
:
"
#0D8FDB
"
,
foreground
:
"
#fff
"
,
size
:
12
},
vine
:{
background
:
"
#39DBAC
"
,
foreground
:
"
#1E292C
"
,
size
:
12
},
lava
:{
background
:
"
#F8591A
"
,
foreground
:
"
#1C2846
"
,
size
:
12
}},
stylesheet
:
""
};
a
.
flags
=
{
dimensions
:{
regex
:
/^
(\d
+
)
x
(\d
+
)
$/
,
output
:
function
(
a
){
var
b
=
this
.
regex
.
exec
(
a
);
return
{
width
:
+
b
[
1
],
height
:
+
b
[
2
]}}},
fluid
:{
regex
:
/^
([
0-9%
]
+
)
x
([
0-9%
]
+
)
$/
,
output
:
function
(
a
){
var
b
=
this
.
regex
.
exec
(
a
);
return
{
width
:
b
[
1
],
height
:
b
[
2
]}}},
colors
:{
regex
:
/#
([
0-9a-f
]{3,})\:
#
([
0-9a-f
]{3,})
/i
,
output
:
function
(
a
){
var
b
=
this
.
regex
.
exec
(
a
);
return
{
size
:
u
.
themes
.
gray
.
size
,
foreground
:
"
#
"
+
b
[
2
],
background
:
"
#
"
+
b
[
1
]}}},
text
:{
regex
:
/text
\:(
.*
)
/
,
output
:
function
(
a
){
return
this
.
regex
.
exec
(
a
)[
1
]}},
font
:{
regex
:
/font
\:(
.*
)
/
,
output
:
function
(
a
){
return
this
.
regex
.
exec
(
a
)[
1
]}},
auto
:{
regex
:
/^auto$/
},
textmode
:{
regex
:
/textmode
\:(
.*
)
/
,
output
:
function
(
a
){
return
this
.
regex
.
exec
(
a
)[
1
]}}},
document
.
getElementsByClassName
||
(
document
.
getElementsByClassName
=
function
(
a
){
var
b
,
c
,
d
,
e
=
document
,
f
=
[];
if
(
e
.
querySelectorAll
)
return
e
.
querySelectorAll
(
"
.
"
+
a
);
if
(
e
.
evaluate
)
for
(
c
=
"
.//*[contains(concat(' ', @class, ' '), '
"
+
a
+
"
')]
"
,
b
=
e
.
evaluate
(
c
,
e
,
null
,
0
,
null
);
d
=
b
.
iterateNext
();)
f
.
push
(
d
);
else
for
(
b
=
e
.
getElementsByTagName
(
"
*
"
),
c
=
new
RegExp
(
"
(^|
\\
s)
"
+
a
+
"
(
\\
s|$)
"
),
d
=
0
;
d
<
b
.
length
;
d
++
)
c
.
test
(
b
[
d
].
className
)
&&
f
.
push
(
b
[
d
]);
return
f
}),
window
.
getComputedStyle
||
(
window
.
getComputedStyle
=
function
(
a
){
return
this
.
el
=
a
,
this
.
getPropertyValue
=
function
(
b
){
var
c
=
/
(\-([
a-z
]){1})
/g
;
return
"
float
"
==
b
&&
(
b
=
"
styleFloat
"
),
c
.
test
(
b
)
&&
(
b
=
b
.
replace
(
c
,
function
(){
return
arguments
[
2
].
toUpperCase
()})),
a
.
currentStyle
[
b
]?
a
.
currentStyle
[
b
]:
null
},
this
}),
Object
.
prototype
.
hasOwnProperty
||
(
Object
.
prototype
.
hasOwnProperty
=
function
(
a
){
var
b
=
this
.
__proto__
||
this
.
constructor
.
prototype
;
return
a
in
this
&&
(
!
(
a
in
b
)
||
b
[
a
]
!==
this
[
a
])});
for
(
var
v
in
a
.
flags
)
a
.
flags
.
hasOwnProperty
(
v
)
&&
(
a
.
flags
[
v
].
match
=
function
(
a
){
return
a
.
match
(
this
.
regex
)});
a
.
add_theme
=
function
(
b
,
c
){
return
null
!=
b
&&
null
!=
c
&&
(
u
.
themes
[
b
]
=
c
),
a
},
a
.
add_image
=
function
(
b
,
c
){
var
e
=
d
(
c
);
if
(
e
.
length
)
for
(
var
f
=
0
,
g
=
e
.
length
;
g
>
f
;
f
++
){
var
h
=
document
.
createElement
(
"
img
"
);
h
.
setAttribute
(
"
data-src
"
,
b
),
e
[
f
].
appendChild
(
h
)}
return
a
},
a
.
run
=
function
(
b
){
m
=!
0
;
var
c
=
e
(
u
,
b
),
f
=
[],
g
=
[],
i
=
[];
for
(
"
string
"
==
typeof
c
.
images
?
g
=
d
(
c
.
images
):
window
.
NodeList
&&
c
.
images
instanceof
window
.
NodeList
?
g
=
c
.
images
:
window
.
Node
&&
c
.
images
instanceof
window
.
Node
&&
(
g
=
[
c
.
images
]),
"
string
"
==
typeof
c
.
bgnodes
?
i
=
d
(
c
.
bgnodes
):
window
.
NodeList
&&
c
.
elements
instanceof
window
.
NodeList
?
i
=
c
.
bgnodes
:
window
.
Node
&&
c
.
bgnodes
instanceof
window
.
Node
&&
(
i
=
[
c
.
bgnodes
]),
o
=
0
,
n
=
g
.
length
;
n
>
o
;
o
++
)
f
.
push
(
g
[
o
]);
var
j
=
document
.
getElementById
(
"
holderjs-style
"
);
j
||
(
j
=
document
.
createElement
(
"
style
"
),
j
.
setAttribute
(
"
id
"
,
"
holderjs-style
"
),
j
.
type
=
"
text/css
"
,
document
.
getElementsByTagName
(
"
head
"
)[
0
].
appendChild
(
j
)),
c
.
nocss
||
(
j
.
styleSheet
?
j
.
styleSheet
.
cssText
+=
c
.
stylesheet
:
j
.
appendChild
(
document
.
createTextNode
(
c
.
stylesheet
)));
for
(
var
k
=
new
RegExp
(
c
.
domain
+
'
/(.*?)"?
\\
)
'
),
n
=
i
.
length
,
o
=
0
;
n
>
o
;
o
++
){
var
p
=
window
.
getComputedStyle
(
i
[
o
],
null
).
getPropertyValue
(
"
background-image
"
),
q
=
p
.
match
(
k
),
r
=
i
[
o
].
getAttribute
(
"
data-background-src
"
);
if
(
q
){
var
s
=
l
(
q
[
1
].
split
(
"
/
"
),
c
);
s
&&
h
(
"
background
"
,
i
[
o
],
s
,
p
)}
else
if
(
null
!=
r
){
var
s
=
l
(
r
.
substr
(
r
.
lastIndexOf
(
c
.
domain
)
+
c
.
domain
.
length
+
1
).
split
(
"
/
"
),
c
);
s
&&
h
(
"
background
"
,
i
[
o
],
s
,
p
)}}
for
(
n
=
f
.
length
,
o
=
0
;
n
>
o
;
o
++
){
var
t
,
v
;
v
=
t
=
p
=
null
;
try
{
v
=
f
[
o
].
getAttribute
(
"
src
"
),
attr_datasrc
=
f
[
o
].
getAttribute
(
"
data-src
"
)}
catch
(
w
){}
if
(
null
==
attr_datasrc
&&
v
&&
v
.
indexOf
(
c
.
domain
)
>=
0
?
p
=
v
:
attr_datasrc
&&
attr_datasrc
.
indexOf
(
c
.
domain
)
>=
0
&&
(
p
=
attr_datasrc
),
p
){
var
s
=
l
(
p
.
substr
(
p
.
lastIndexOf
(
c
.
domain
)
+
c
.
domain
.
length
+
1
).
split
(
"
/
"
),
c
);
s
&&
(
s
.
fluid
?
h
(
"
fluid
"
,
f
[
o
],
s
,
p
):
h
(
"
image
"
,
f
[
o
],
s
,
p
))}}
return
a
},
c
(
b
,
function
(){
window
.
addEventListener
?(
window
.
addEventListener
(
"
resize
"
,
k
,
!
1
),
window
.
addEventListener
(
"
orientationchange
"
,
k
,
!
1
)):
window
.
attachEvent
(
"
onresize
"
,
k
),
m
||
a
.
run
()}),
"
function
"
==
typeof
define
&&
define
.
amd
&&
define
([],
function
(){
return
a
})}(
Holder
,
window
),
/*!
* JavaScript for Bootstrap's docs (http://getbootstrap.com)
* Copyright 2011-2014 Twitter, Inc.
* Licensed under the Creative Commons Attribution 3.0 Unported License. For
...
...
This diff is collapsed.
Click to expand it.
docs/assets/js/vendor/holder.js
+
82
-
227
View file @
7b9c0a38
/*!
Holder - 2.
3
- client side image placeholders
(c) 2012-201
4
Ivan Malopinsky / http://imsky.co
Holder - 2.
2
- client side image placeholders
(c) 2012-201
3
Ivan Malopinsky / http://imsky.co
Provided under the MIT License.
Commercial use requires attribution.
*/
var
Holder
=
Holder
||
{};
(
function
(
app
,
win
)
{
var
system_config
=
{
use_svg
:
false
,
use_canvas
:
false
,
use_fallback
:
false
};
var
instance_config
=
{};
var
preempted
=
false
;
var
preempted
=
false
,
fallback
=
false
,
canvas
=
document
.
createElement
(
'
canvas
'
);
var
dpr
=
1
,
bsr
=
1
;
var
resizable_images
=
[];
if
(
!
canvas
.
getContext
)
{
system_config
.
use_
fallback
=
true
;
fallback
=
true
;
}
else
{
if
(
canvas
.
toDataURL
(
"
image/png
"
)
.
indexOf
(
"
data:image/png
"
)
<
0
)
{
//Android doesn't support data URI
system_config
.
use_
fallback
=
true
;
fallback
=
true
;
}
else
{
var
ctx
=
canvas
.
getContext
(
"
2d
"
);
}
}
if
(
!!
document
.
createElementNS
&&
!!
document
.
createElementNS
(
'
http://www.w3.org/2000/svg
'
,
'
svg
'
).
createSVGRect
){
system_config
.
use_svg
=
true
;
system_config
.
use_canvas
=
false
;
}
if
(
!
system_config
.
use_fallback
){
if
(
!
fallback
){
dpr
=
window
.
devicePixelRatio
||
1
,
bsr
=
ctx
.
webkitBackingStorePixelRatio
||
ctx
.
mozBackingStorePixelRatio
||
ctx
.
msBackingStorePixelRatio
||
ctx
.
oBackingStorePixelRatio
||
ctx
.
backingStorePixelRatio
||
1
;
}
...
...
@@ -138,6 +129,46 @@ app.flags = {
}
}
//getElementsByClassName polyfill
document
.
getElementsByClassName
||
(
document
.
getElementsByClassName
=
function
(
e
){
var
t
=
document
,
n
,
r
,
i
,
s
=
[];
if
(
t
.
querySelectorAll
)
return
t
.
querySelectorAll
(
"
.
"
+
e
);
if
(
t
.
evaluate
){
r
=
"
.//*[contains(concat(' ', @class, ' '), '
"
+
e
+
"
')]
"
,
n
=
t
.
evaluate
(
r
,
t
,
null
,
0
,
null
);
while
(
i
=
n
.
iterateNext
())
s
.
push
(
i
)}
else
{
n
=
t
.
getElementsByTagName
(
"
*
"
),
r
=
new
RegExp
(
"
(^|
\\
s)
"
+
e
+
"
(
\\
s|$)
"
);
for
(
i
=
0
;
i
<
n
.
length
;
i
++
)
r
.
test
(
n
[
i
].
className
)
&&
s
.
push
(
n
[
i
])}
return
s
})
//getComputedStyle polyfill
window
.
getComputedStyle
||
(
window
.
getComputedStyle
=
function
(
e
){
return
this
.
el
=
e
,
this
.
getPropertyValue
=
function
(
t
){
var
n
=
/
(\-([
a-z
]){1})
/g
;
return
t
==
"
float
"
&&
(
t
=
"
styleFloat
"
),
n
.
test
(
t
)
&&
(
t
=
t
.
replace
(
n
,
function
(){
return
arguments
[
2
].
toUpperCase
()})),
e
.
currentStyle
[
t
]?
e
.
currentStyle
[
t
]:
null
},
this
})
//http://javascript.nwbox.com/ContentLoaded by Diego Perini with modifications
function
contentLoaded
(
n
,
t
){
var
l
=
"
complete
"
,
s
=
"
readystatechange
"
,
u
=!
1
,
h
=
u
,
c
=!
0
,
i
=
n
.
document
,
a
=
i
.
documentElement
,
e
=
i
.
addEventListener
?
"
addEventListener
"
:
"
attachEvent
"
,
v
=
i
.
addEventListener
?
"
removeEventListener
"
:
"
detachEvent
"
,
f
=
i
.
addEventListener
?
""
:
"
on
"
,
r
=
function
(
e
){(
e
.
type
!=
s
||
i
.
readyState
==
l
)
&&
((
e
.
type
==
"
load
"
?
n
:
i
)[
v
](
f
+
e
.
type
,
r
,
u
),
!
h
&&
(
h
=!
0
)
&&
t
.
call
(
n
,
null
))},
o
=
function
(){
try
{
a
.
doScroll
(
"
left
"
)}
catch
(
n
){
setTimeout
(
o
,
50
);
return
}
r
(
"
poll
"
)};
if
(
i
.
readyState
==
l
)
t
.
call
(
n
,
"
lazy
"
);
else
{
if
(
i
.
createEventObject
&&
a
.
doScroll
){
try
{
c
=!
n
.
frameElement
}
catch
(
y
){}
c
&&
o
()}
i
[
e
](
f
+
"
DOMContentLoaded
"
,
r
,
u
),
i
[
e
](
f
+
s
,
r
,
u
),
n
[
e
](
f
+
"
load
"
,
r
,
u
)}}
//https://gist.github.com/991057 by Jed Schmidt with modifications
function
selector
(
a
){
a
=
a
.
match
(
/^
(\W)?(
.*
)
/
);
var
b
=
document
[
"
getElement
"
+
(
a
[
1
]?
a
[
1
]
==
"
#
"
?
"
ById
"
:
"
sByClassName
"
:
"
sByTagName
"
)](
a
[
2
]);
var
ret
=
[];
b
!==
null
&&
(
b
.
length
?
ret
=
b
:
b
.
length
===
0
?
ret
=
b
:
ret
=
[
b
]);
return
ret
;
}
//shallow object property extend
function
extend
(
a
,
b
){
var
c
=
{};
for
(
var
i
in
a
){
if
(
a
.
hasOwnProperty
(
i
)){
c
[
i
]
=
a
[
i
];
}
}
for
(
var
i
in
b
){
if
(
b
.
hasOwnProperty
(
i
)){
c
[
i
]
=
b
[
i
];
}
}
return
c
}
//hasOwnProperty polyfill
if
(
!
Object
.
prototype
.
hasOwnProperty
)
/*jshint -W001, -W103 */
Object
.
prototype
.
hasOwnProperty
=
function
(
prop
)
{
var
proto
=
this
.
__proto__
||
this
.
constructor
.
prototype
;
return
(
prop
in
this
)
&&
(
!
(
prop
in
proto
)
||
proto
[
prop
]
!==
this
[
prop
]);
}
/*jshint +W001, +W103 */
function
text_size
(
width
,
height
,
template
)
{
height
=
parseInt
(
height
,
10
);
width
=
parseInt
(
width
,
10
);
...
...
@@ -150,64 +181,20 @@ function text_size(width, height, template) {
}
}
var
svg_el
=
(
function
(){
var
serializer
=
new
XMLSerializer
();
var
svg_ns
=
"
http://www.w3.org/2000/svg
"
var
svg
=
document
.
createElementNS
(
svg_ns
,
"
svg
"
);
svg
.
setAttribute
(
"
xmlns
"
,
"
http://www.w3.org/2000/svg
"
)
svg
.
setAttribute
(
"
xmlns:xlink
"
,
"
http://www.w3.org/1999/xlink
"
);
var
bg_el
=
document
.
createElementNS
(
svg_ns
,
"
rect
"
)
var
text_el
=
document
.
createElementNS
(
svg_ns
,
"
text
"
)
var
textnode_el
=
document
.
createTextNode
(
null
)
text_el
.
setAttribute
(
"
text-anchor
"
,
"
middle
"
)
text_el
.
appendChild
(
textnode_el
)
svg
.
appendChild
(
bg_el
)
svg
.
appendChild
(
text_el
)
return
function
(
props
){
svg
.
setAttribute
(
"
width
"
,
props
.
width
);
svg
.
setAttribute
(
"
height
"
,
props
.
height
);
bg_el
.
setAttribute
(
"
width
"
,
props
.
width
);
bg_el
.
setAttribute
(
"
height
"
,
props
.
height
);
bg_el
.
setAttribute
(
"
fill
"
,
props
.
template
.
background
);
text_el
.
setAttribute
(
"
x
"
,
props
.
width
/
2
)
text_el
.
setAttribute
(
"
y
"
,
props
.
height
/
2
)
textnode_el
.
nodeValue
=
props
.
text
text_el
.
setAttribute
(
"
style
"
,
css_properties
({
"
fill
"
:
props
.
template
.
foreground
,
"
font-weight
"
:
"
bold
"
,
"
font-size
"
:
props
.
text_height
+
"
px
"
,
"
font-family
"
:
props
.
font
,
"
dominant-baseline
"
:
"
central
"
}))
return
serializer
.
serializeToString
(
svg
)
}
})()
function
css_properties
(
props
){
var
ret
=
[];
for
(
p
in
props
){
if
(
props
.
hasOwnProperty
(
p
)){
ret
.
push
(
p
+
"
:
"
+
props
[
p
])
}
}
return
ret
.
join
(
"
;
"
)
}
function
draw_canvas
(
args
)
{
var
ctx
=
args
.
ctx
,
dimensions
=
args
.
dimensions
,
template
=
args
.
template
,
ratio
=
args
.
ratio
,
holder
=
args
.
holder
,
literal
=
holder
.
textmode
==
"
literal
"
,
exact
=
holder
.
textmode
==
"
exact
"
;
function
draw
(
args
)
{
var
ctx
=
args
.
ctx
;
var
dimensions
=
args
.
dimensions
;
var
template
=
args
.
template
;
var
ratio
=
args
.
ratio
;
var
holder
=
args
.
holder
;
var
literal
=
holder
.
textmode
==
"
literal
"
;
var
exact
=
holder
.
textmode
==
"
exact
"
;
var
ts
=
text_size
(
dimensions
.
width
,
dimensions
.
height
,
template
);
var
text_height
=
ts
.
height
;
var
width
=
dimensions
.
width
*
ratio
,
height
=
dimensions
.
height
*
ratio
;
var
font
=
template
.
font
?
template
.
font
:
"
Arial,Helvetica,
sans-serif
"
;
var
font
=
template
.
font
?
template
.
font
:
"
sans-serif
"
;
canvas
.
width
=
width
;
canvas
.
height
=
height
;
ctx
.
textAlign
=
"
center
"
;
...
...
@@ -235,50 +222,8 @@ function draw_canvas(args) {
return
canvas
.
toDataURL
(
"
image/png
"
);
}
function
draw_svg
(
args
){
var
dimensions
=
args
.
dimensions
,
template
=
args
.
template
,
holder
=
args
.
holder
,
literal
=
holder
.
textmode
==
"
literal
"
,
exact
=
holder
.
textmode
==
"
exact
"
;
var
ts
=
text_size
(
dimensions
.
width
,
dimensions
.
height
,
template
);
var
text_height
=
ts
.
height
;
var
width
=
dimensions
.
width
,
height
=
dimensions
.
height
;
var
font
=
template
.
font
?
template
.
font
:
"
Arial,Helvetica,sans-serif
"
;
var
text
=
template
.
text
?
template
.
text
:
(
Math
.
floor
(
dimensions
.
width
)
+
"
x
"
+
Math
.
floor
(
dimensions
.
height
));
if
(
literal
)
{
var
dimensions
=
holder
.
dimensions
;
text
=
dimensions
.
width
+
"
x
"
+
dimensions
.
height
;
}
else
if
(
exact
&&
holder
.
exact_dimensions
){
var
dimensions
=
holder
.
exact_dimensions
;
text
=
(
Math
.
floor
(
dimensions
.
width
)
+
"
x
"
+
Math
.
floor
(
dimensions
.
height
));
}
var
string
=
svg_el
({
text
:
text
,
width
:
width
,
height
:
height
,
text_height
:
text_height
,
font
:
font
,
template
:
template
})
return
"
data:image/svg+xml;base64,
"
+
btoa
(
string
);
}
function
draw
(
args
)
{
if
(
instance_config
.
use_canvas
&&
!
instance_config
.
use_svg
){
return
draw_canvas
(
args
);
}
else
{
return
draw_svg
(
args
);
}
}
function
render
(
mode
,
el
,
holder
,
src
)
{
var
dimensions
=
holder
.
dimensions
,
theme
=
holder
.
theme
,
text
=
holder
.
text
?
decodeURIComponent
(
holder
.
text
)
:
holder
.
text
;
...
...
@@ -295,11 +240,11 @@ function render(mode, el, holder, src) {
if
(
mode
==
"
image
"
)
{
el
.
setAttribute
(
"
alt
"
,
text
?
text
:
theme
.
text
?
theme
.
text
+
"
[
"
+
dimensions_caption
+
"
]
"
:
dimensions_caption
);
if
(
instance_config
.
use_
fallback
||
!
holder
.
auto
)
{
if
(
fallback
||
!
holder
.
auto
)
{
el
.
style
.
width
=
dimensions
.
width
+
"
px
"
;
el
.
style
.
height
=
dimensions
.
height
+
"
px
"
;
}
if
(
instance_config
.
use_
fallback
)
{
if
(
fallback
)
{
el
.
style
.
backgroundColor
=
theme
.
background
;
}
else
{
el
.
setAttribute
(
"
src
"
,
draw
({
ctx
:
ctx
,
dimensions
:
dimensions
,
template
:
theme
,
ratio
:
ratio
,
holder
:
holder
}));
...
...
@@ -311,7 +256,7 @@ function render(mode, el, holder, src) {
}
}
else
if
(
mode
==
"
background
"
)
{
if
(
!
instance_config
.
use_
fallback
)
{
if
(
!
fallback
)
{
el
.
style
.
backgroundImage
=
"
url(
"
+
draw
({
ctx
:
ctx
,
dimensions
:
dimensions
,
template
:
theme
,
ratio
:
ratio
,
holder
:
holder
})
+
"
)
"
;
el
.
style
.
backgroundSize
=
dimensions
.
width
+
"
px
"
+
dimensions
.
height
+
"
px
"
;
}
...
...
@@ -319,21 +264,18 @@ function render(mode, el, holder, src) {
el
.
setAttribute
(
"
alt
"
,
text
?
text
:
theme
.
text
?
theme
.
text
+
"
[
"
+
dimensions_caption
+
"
]
"
:
dimensions_caption
);
if
(
dimensions
.
height
.
slice
(
-
1
)
==
"
%
"
)
{
el
.
style
.
height
=
dimensions
.
height
}
else
if
(
holder
.
auto
==
null
||
!
holder
.
auto
)
{
}
else
{
el
.
style
.
height
=
dimensions
.
height
+
"
px
"
}
if
(
dimensions
.
width
.
slice
(
-
1
)
==
"
%
"
)
{
el
.
style
.
width
=
dimensions
.
width
}
else
if
(
holder
.
auto
==
null
||
!
holder
.
auto
)
{
}
else
{
el
.
style
.
width
=
dimensions
.
width
+
"
px
"
}
if
(
el
.
style
.
display
==
"
inline
"
||
el
.
style
.
display
===
""
||
el
.
style
.
display
==
"
none
"
)
{
el
.
style
.
display
=
"
block
"
;
}
set_initial_dimensions
(
el
)
if
(
instance_config
.
use_fallback
)
{
if
(
fallback
)
{
el
.
style
.
backgroundColor
=
theme
.
background
;
}
else
{
resizable_images
.
push
(
el
);
...
...
@@ -348,36 +290,19 @@ function dimension_check(el, callback) {
width
:
el
.
clientWidth
};
if
(
!
dimensions
.
height
&&
!
dimensions
.
width
)
{
el
.
setAttribute
(
"
data-holder-invisible
"
,
true
)
callback
.
call
(
this
,
el
)
}
else
{
el
.
removeAttribute
(
"
data-holder-invisible
"
)
return
dimensions
;
}
}
function
set_initial_dimensions
(
el
){
if
(
el
.
holder_data
){
var
dimensions
=
dimension_check
(
el
,
app
.
invisible_error_fn
(
set_initial_dimensions
))
if
(
dimensions
){
var
holder
=
el
.
holder_data
;
holder
.
initial_dimensions
=
dimensions
;
holder
.
fluid_data
=
{
fluid_height
:
holder
.
dimensions
.
height
.
slice
(
-
1
)
==
"
%
"
,
fluid_width
:
holder
.
dimensions
.
width
.
slice
(
-
1
)
==
"
%
"
,
mode
:
null
}
if
(
holder
.
fluid_data
.
fluid_width
&&
!
holder
.
fluid_data
.
fluid_height
){
holder
.
fluid_data
.
mode
=
"
width
"
holder
.
fluid_data
.
ratio
=
holder
.
initial_dimensions
.
width
/
parseFloat
(
holder
.
dimensions
.
height
)
}
else
if
(
!
holder
.
fluid_data
.
fluid_width
&&
holder
.
fluid_data
.
fluid_height
){
holder
.
fluid_data
.
mode
=
"
height
"
;
holder
.
fluid_data
.
ratio
=
parseFloat
(
holder
.
dimensions
.
width
)
/
holder
.
initial_dimensions
.
height
}
if
(
el
.
hasAttribute
(
"
data-holder-invisible
"
))
{
throw
new
Error
(
"
Holder: placeholder is not visible
"
);
}
else
{
el
.
setAttribute
(
"
data-holder-invisible
"
,
true
)
setTimeout
(
function
()
{
callback
.
call
(
this
,
el
)
},
1
)
return
null
;
}
}
else
{
el
.
removeAttribute
(
"
data-holder-invisible
"
)
}
return
dimensions
;
}
function
resizable_update
(
element
)
{
...
...
@@ -394,19 +319,9 @@ function resizable_update(element) {
var
el
=
images
[
i
]
if
(
el
.
holder_data
)
{
var
holder
=
el
.
holder_data
;
var
dimensions
=
dimension_check
(
el
,
app
.
invisible_error_fn
(
resizable_update
)
)
var
dimensions
=
dimension_check
(
el
,
resizable_update
)
if
(
dimensions
){
if
(
holder
.
fluid
){
if
(
holder
.
auto
){
switch
(
holder
.
fluid_data
.
mode
){
case
"
width
"
:
dimensions
.
height
=
dimensions
.
width
/
holder
.
fluid_data
.
ratio
;
break
;
case
"
height
"
:
dimensions
.
width
=
dimensions
.
height
*
holder
.
fluid_data
.
ratio
;
break
;
}
}
el
.
setAttribute
(
"
src
"
,
draw
({
ctx
:
ctx
,
dimensions
:
dimensions
,
...
...
@@ -435,7 +350,7 @@ function parse_flags(flags, options) {
theme
:
extend
(
settings
.
themes
.
gray
,
{})
};
var
render
=
false
;
for
(
var
f
l
=
flags
.
length
,
j
=
0
;
j
<
f
l
;
j
++
)
{
for
(
s
l
=
flags
.
length
,
j
=
0
;
j
<
s
l
;
j
++
)
{
var
flag
=
flags
[
j
];
if
(
app
.
flags
.
dimensions
.
match
(
flag
))
{
render
=
true
;
...
...
@@ -470,20 +385,10 @@ for (var flag in app.flags) {
return
val
.
match
(
this
.
regex
)
}
}
app
.
invisible_error_fn
=
function
(
fn
){
return
function
(
el
){
if
(
el
.
hasAttribute
(
"
data-holder-invisible
"
)){
throw
new
Error
(
"
Holder: invisible placeholder
"
)
}
}
}
app
.
add_theme
=
function
(
name
,
theme
)
{
name
!=
null
&&
theme
!=
null
&&
(
settings
.
themes
[
name
]
=
theme
);
return
app
;
};
app
.
add_image
=
function
(
src
,
el
)
{
var
node
=
selector
(
el
);
if
(
node
.
length
)
{
...
...
@@ -495,31 +400,21 @@ app.add_image = function (src, el) {
}
return
app
;
};
app
.
run
=
function
(
o
)
{
instance_config
=
extend
({},
system_config
)
preempted
=
true
;
var
options
=
extend
(
settings
,
o
),
images
=
[],
imageNodes
=
[],
bgnodes
=
[];
if
(
options
.
use_canvas
!=
null
&&
options
.
use_canvas
){
instance_config
.
use_canvas
=
true
;
instance_config
.
use_svg
=
false
;
}
if
(
typeof
(
options
.
images
)
==
"
string
"
)
{
imageNodes
=
selector
(
options
.
images
);
}
else
if
(
window
.
NodeList
&&
options
.
images
instanceof
window
.
NodeList
)
{
imageNodes
=
options
.
images
;
}
else
if
(
window
.
Node
&&
options
.
images
instanceof
window
.
Node
)
{
imageNodes
=
[
options
.
images
];
}
else
if
(
window
.
HTMLCollection
&&
options
.
images
instanceof
window
.
HTMLCollection
){
imageNodes
=
options
.
images
}
if
(
typeof
(
options
.
bgnodes
)
==
"
string
"
)
{
bgnodes
=
selector
(
options
.
bgnodes
);
}
else
if
(
window
.
NodeList
&&
options
.
elements
instanceof
window
.
NodeList
)
{
...
...
@@ -574,7 +469,8 @@ app.run = function (o) {
src
=
attr_datasrc
;
}
if
(
src
)
{
var
holder
=
parse_flags
(
src
.
substr
(
src
.
lastIndexOf
(
options
.
domain
)
+
options
.
domain
.
length
+
1
).
split
(
"
/
"
),
options
);
var
holder
=
parse_flags
(
src
.
substr
(
src
.
lastIndexOf
(
options
.
domain
)
+
options
.
domain
.
length
+
1
)
.
split
(
"
/
"
),
options
);
if
(
holder
)
{
if
(
holder
.
fluid
)
{
render
(
"
fluid
"
,
images
[
i
],
holder
,
src
)
...
...
@@ -586,7 +482,6 @@ app.run = function (o) {
}
return
app
;
};
contentLoaded
(
win
,
function
()
{
if
(
window
.
addEventListener
)
{
window
.
addEventListener
(
"
resize
"
,
resizable_update
,
false
);
...
...
@@ -594,7 +489,7 @@ contentLoaded(win, function () {
}
else
{
window
.
attachEvent
(
"
onresize
"
,
resizable_update
)
}
preempted
||
app
.
run
(
{}
);
preempted
||
app
.
run
();
});
if
(
typeof
define
===
"
function
"
&&
define
.
amd
)
{
define
([],
function
()
{
...
...
@@ -602,44 +497,4 @@ if (typeof define === "function" && define.amd) {
});
}
//github.com/davidchambers/Base64.js
(
function
(){
function
t
(
t
){
this
.
message
=
t
}
var
e
=
"
undefined
"
!=
typeof
exports
?
exports
:
this
,
r
=
"
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
"
;
t
.
prototype
=
Error
(),
t
.
prototype
.
name
=
"
InvalidCharacterError
"
,
e
.
btoa
||
(
e
.
btoa
=
function
(
e
){
for
(
var
o
,
n
,
a
=
0
,
i
=
r
,
c
=
""
;
e
.
charAt
(
0
|
a
)
||
(
i
=
"
=
"
,
a
%
1
);
c
+=
i
.
charAt
(
63
&
o
>>
8
-
8
*
(
a
%
1
))){
if
(
n
=
e
.
charCodeAt
(
a
+=
.
75
),
n
>
255
)
throw
new
t
(
"
'btoa' failed
"
);
o
=
o
<<
8
|
n
}
return
c
}),
e
.
atob
||
(
e
.
atob
=
function
(
e
){
if
(
e
=
e
.
replace
(
/=+$/
,
""
),
1
==
e
.
length
%
4
)
throw
new
t
(
"
'atob' failed
"
);
for
(
var
o
,
n
,
a
=
0
,
i
=
0
,
c
=
""
;
n
=
e
.
charAt
(
i
++
);
~
n
&&
(
o
=
a
%
4
?
64
*
o
+
n
:
n
,
a
++%
4
)?
c
+=
String
.
fromCharCode
(
255
&
o
>>
(
6
&-
2
*
a
)):
0
)
n
=
r
.
indexOf
(
n
);
return
c
})})();
//getElementsByClassName polyfill
document
.
getElementsByClassName
||
(
document
.
getElementsByClassName
=
function
(
e
){
var
t
=
document
,
n
,
r
,
i
,
s
=
[];
if
(
t
.
querySelectorAll
)
return
t
.
querySelectorAll
(
"
.
"
+
e
);
if
(
t
.
evaluate
){
r
=
"
.//*[contains(concat(' ', @class, ' '), '
"
+
e
+
"
')]
"
,
n
=
t
.
evaluate
(
r
,
t
,
null
,
0
,
null
);
while
(
i
=
n
.
iterateNext
())
s
.
push
(
i
)}
else
{
n
=
t
.
getElementsByTagName
(
"
*
"
),
r
=
new
RegExp
(
"
(^|
\\
s)
"
+
e
+
"
(
\\
s|$)
"
);
for
(
i
=
0
;
i
<
n
.
length
;
i
++
)
r
.
test
(
n
[
i
].
className
)
&&
s
.
push
(
n
[
i
])}
return
s
})
//getComputedStyle polyfill
window
.
getComputedStyle
||
(
window
.
getComputedStyle
=
function
(
e
){
return
this
.
el
=
e
,
this
.
getPropertyValue
=
function
(
t
){
var
n
=
/
(\-([
a-z
]){1})
/g
;
return
t
==
"
float
"
&&
(
t
=
"
styleFloat
"
),
n
.
test
(
t
)
&&
(
t
=
t
.
replace
(
n
,
function
(){
return
arguments
[
2
].
toUpperCase
()})),
e
.
currentStyle
[
t
]?
e
.
currentStyle
[
t
]:
null
},
this
})
//http://javascript.nwbox.com/ContentLoaded by Diego Perini with modifications
function
contentLoaded
(
n
,
t
){
var
l
=
"
complete
"
,
s
=
"
readystatechange
"
,
u
=!
1
,
h
=
u
,
c
=!
0
,
i
=
n
.
document
,
a
=
i
.
documentElement
,
e
=
i
.
addEventListener
?
"
addEventListener
"
:
"
attachEvent
"
,
v
=
i
.
addEventListener
?
"
removeEventListener
"
:
"
detachEvent
"
,
f
=
i
.
addEventListener
?
""
:
"
on
"
,
r
=
function
(
e
){(
e
.
type
!=
s
||
i
.
readyState
==
l
)
&&
((
e
.
type
==
"
load
"
?
n
:
i
)[
v
](
f
+
e
.
type
,
r
,
u
),
!
h
&&
(
h
=!
0
)
&&
t
.
call
(
n
,
null
))},
o
=
function
(){
try
{
a
.
doScroll
(
"
left
"
)}
catch
(
n
){
setTimeout
(
o
,
50
);
return
}
r
(
"
poll
"
)};
if
(
i
.
readyState
==
l
)
t
.
call
(
n
,
"
lazy
"
);
else
{
if
(
i
.
createEventObject
&&
a
.
doScroll
){
try
{
c
=!
n
.
frameElement
}
catch
(
y
){}
c
&&
o
()}
i
[
e
](
f
+
"
DOMContentLoaded
"
,
r
,
u
),
i
[
e
](
f
+
s
,
r
,
u
),
n
[
e
](
f
+
"
load
"
,
r
,
u
)}}
//https://gist.github.com/991057 by Jed Schmidt with modifications
function
selector
(
a
,
b
){
var
a
=
a
.
match
(
/^
(\W)?(
.*
)
/
),
b
=
b
||
document
,
c
=
b
[
"
getElement
"
+
(
a
[
1
]?
"
#
"
==
a
[
1
]?
"
ById
"
:
"
sByClassName
"
:
"
sByTagName
"
)],
d
=
c
.
call
(
b
,
a
[
2
]),
e
=
[];
return
null
!==
d
&&
(
e
=
d
.
length
||
0
===
d
.
length
?
d
:[
d
]),
e
}
//shallow object property extend
function
extend
(
a
,
b
){
var
c
=
{};
for
(
var
i
in
a
){
if
(
a
.
hasOwnProperty
(
i
)){
c
[
i
]
=
a
[
i
];
}
}
for
(
var
i
in
b
){
if
(
b
.
hasOwnProperty
(
i
)){
c
[
i
]
=
b
[
i
];
}
}
return
c
}
//hasOwnProperty polyfill
if
(
!
Object
.
prototype
.
hasOwnProperty
)
/*jshint -W001, -W103 */
Object
.
prototype
.
hasOwnProperty
=
function
(
prop
)
{
var
proto
=
this
.
__proto__
||
this
.
constructor
.
prototype
;
return
(
prop
in
this
)
&&
(
!
(
prop
in
proto
)
||
proto
[
prop
]
!==
this
[
prop
]);
}
/*jshint +W001, +W103 */
})(
Holder
,
window
);
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment
Menu
Explore
Projects
Groups
Snippets