Module:SMIL demo
Appearance
-- Demos for the [[Synchronized Multimedia Integration Language]] article
-- Doing this in lua allows the SMIL animation to be embedded directly in the page
local p = {}
function p.main(frame)
local img = frame.args.img or frame:getParent().args.img
if img == 'train' then
return '[[media:toy_train_SMIL.svg|' .. p.train() .. ']]'
elseif img == 'aquarium' then
return '[[media:Demo animated feTurbulence feDisplacementMap SMIL.svg|' .. p.aquarium() .. ']]'
else
error( "Invalid img specified" )
end
end
-- [[:File:Demo animated feTurbulence feDisplacementMap SMIL.svg]]
-- Background image shrunk a bit to save space.
function p.aquarium()
return mw.svg.new()
:setAttribute( 'viewBox', "0 0 250 188")
:setImgAttribute( 'width', "250px")
:setImgAttribute( 'height', "188px")
:setAttribute( 'width', "250px")
:setAttribute( 'height', "188px")
:setAttribute( 'xmlns:xlink',"http://www.w3.org/1999/xlink" )
:setContent( [[
<filter id="filter_refract">
<feTurbulence baseFrequency="0.01"/>
<feColorMatrix type="hueRotate" result="map">
<animate attributeName="values" values="0;360" dur="5s" repeatCount="indefinite"/>
</feColorMatrix>
<feDisplacementMap in="SourceGraphic" in2="map" scale="20" xChannelSelector="R" yChannelSelector="G"/>
</filter>
<circle cx="0" cy="0" r="99999" fill="#000000"/>
<image id="image" width="250" height="188" xlink:href="data:image/jpeg;base64,
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
"/>
<use xlink:href="#image" filter="url(#filter_refract)" transform="translate(-8,-8)"/>
]] ):toImage()
end
-- [[File:toy_train_SMIL.svg]] by [[User:Cmglee]]
function p.train()
return mw.svg.new()
:setAttribute( 'viewBox', "-512 -272 1024 512")
:setImgAttribute( 'width', "250px")
:setImgAttribute( 'height', "125px")
:setAttribute( 'xmlns:xlink',"http://www.w3.org/1999/xlink" )
:setContent( [[
<title>Toy train SMIL</title>
<desc>SMIL animation of a little toy train demonstrating animateMotion along a path, by CMG Lee.</desc>
<style type="text/css">
#lights { stroke-width:3; stroke-linecap:round; stroke-dasharray:1,6; fill:none; }
#wheels { stroke-width:4; stroke-linecap:round; stroke-dasharray:1,5,1,14; stroke:#333333; fill:none; }
#body { stroke-width:1; stroke:#000000; }
#roof { stroke-width:1; stroke:#000000; }
#load { stroke-width:4; stroke:#cc0099; fill:#990066; }
#logs { stroke-width:4; stroke-linecap:round; }
.outline { stroke-linejoin:round; stroke:#000000; }
</style>
<defs>
<radialGradient id="grad" cx="50%" cy="50%" r="50%" fx="50%" fy="25%">
<stop offset="75%" stop-color="#339900"/>
<stop offset="99%" stop-color="#006600"/>
</radialGradient>
<path id="wheels" d="M -14,-6 H 14 M -14,6 H 14"/>
<rect id="body" x="-20" y="-8" width="40" height="16" rx="7" ry="5"/>
<rect id="roof" x="-19" y="-7" width="38" height="14" rx="7" ry="5"/>
<path id="logs" d="M -20,-5 H 22 M -22,0 H 20 M -21,5 H 21"/>
<path id="lights" d="M -19,-4 V 4"/>
<g id="front">
<use xlink:href="#body"/>
<use xlink:href="#lights" stroke="#ffff00" transform="scale(-1,1)"/>
</g>
<g id="back">
<use xlink:href="#body"/>
<use xlink:href="#lights" stroke="#ff0000"/>
</g>
<g id="load">
<circle cx="8" cy="0" r="5"/>
<circle cx="-8" cy="0" r="5"/>
</g>
<g id="bload">
<use xlink:href="#body"/>
<use xlink:href="#load"/>
</g>
<g id="blogs">
<use xlink:href="#body"/>
<use xlink:href="#logs" stroke="#663300"/>
</g>
<path id="track_inner" d="M 0,-220 C -400,-220 430,220 0,220" fill="none"/>
<path id="track_outer" d="M 0,-220 C -300,-220 -350,220 0,220" fill="none"/>
<mask id="mask_inner"><rect x="-299" y="-499" width="999" height="999" fill="#ffffff"/><use xlink:href="#track_inner" stroke="#000000" stroke-width="10"/></mask>
<mask id="mask_outer"><rect x="-299" y="-499" width="999" height="999" fill="#ffffff"/><use xlink:href="#track_outer" stroke="#000000" stroke-width="10"/></mask>
<use id="rails_inner" xlink:href="#track_inner" stroke-width="14" mask="url(#mask_inner)"/><use id="sleepers_inner" xlink:href="#track_inner" stroke-width="20" stroke-dasharray="2,5.01" stroke-dashoffset="1"/>
<use id="rails_outer" xlink:href="#track_outer" stroke-width="14" mask="url(#mask_outer)"/><use id="sleepers_outer" xlink:href="#track_outer" stroke-width="20" stroke-dasharray="2,5.01" stroke-dashoffset="1"/>
<g id="track_rails">
<use xlink:href="#rails_inner"/><use xlink:href="#rails_inner" transform="scale(-1,1)"/>
<use xlink:href="#rails_outer"/><use xlink:href="#rails_outer" transform="scale(-1,1)"/>
</g>
<g id="track_sleepers">
<use xlink:href="#sleepers_inner"/><use xlink:href="#sleepers_inner" transform="scale(-1,1)"/>
<use xlink:href="#sleepers_outer"/><use xlink:href="#sleepers_outer" transform="scale(-1,1)"/>
</g>
<g id="tree_deciduous" class="outline">
<rect x="-4" y="-40" width="8" height="40" rx="4" ry="3" fill="#996600"/>
<ellipse cx="0" cy="-80" rx="15" ry="50" fill="url(#grad)"/>
</g>
<g id="tree_evergreen" class="outline">
<path d="M 0,-100 L -20,-10 C -25, 10 25, 10 20,-10 Z" fill="#006633"/>
<path d="M 0,-120 L -15,-50 C -20,-30 20,-30 15,-50 Z" fill="#006633"/>
</g>
<path id="tunnel_back" class="outline" d="M -110,-250 Q -120,-250 -120,-215 Q 0,-270 120,-215 Q 120,-250 110,-250" fill="#666666"/>
<path id="tunnel_front" class="outline" d="M -110,-250 Q 0,-280 110,-250 Q 90,-250 90,-180 Q 0,-220 -90,-180 Q -90,-250 -110,-250" fill="#999999"/>
<path id="barrier_arm_base" d="M 3,0 H -68"/>
<g id="barrier_arm">
<use xlink:href="#barrier_arm_base" stroke="#ff0000" stroke-width="8" stroke-linecap="round"/>
<use xlink:href="#barrier_arm_base" stroke="#cccccc" stroke-width="6" stroke-dasharray="8,8"/>
</g>
<rect id="barrier_post" x="-6" y="-10" width="12" height="30" rx="6" ry="3" stroke="#996600" fill="#ffcc00"/>
<g id="bouncer" class="outline">
<ellipse cx="0" cy="-80" rx="8" ry="14" fill="#6600ff"/>
<circle cx="0" cy="-95" r="6" fill="#ffcc99"/>
</g>
<!-- a known bug in the W3C validator requires an mpath even when animateMotion already contains a path attribute:
http://lists.w3.org/Archives/Public/www-validator-cvs/2013Dec/0000.html -->
<path id="amp0" d="M0,-220 C-300,-220 -350,220 0,220 C350,220 300,-220 0,-220 C-400,-220 430,220 0,220 C-350,220 -300,-220 0,-220 C400,-220 -430,220 0,220 C430,220 -400,-220 0,-220 C300,-220 350,220 0,220 C-430,220 400,-220 0,-220"/>
<path id="amp1" d="M0,-220 C-300,-220 -350,220 0,220 C350,220 300,-220 0,-220 C-400,-220 430,220 0,220 C-350,220 -300,-220 0,-220 C400,-220 -430,220 0,220 C430,220 -400,-220 0,-220 C300,-220 350,220 0,220 C-430,220 400,-220 0,-220"/>
<path id="amp2" d="M0,-220 C-300,-220 -350,220 0,220 C350,220 300,-220 0,-220 C-400,-220 430,220 0,220 C-350,220 -300,-220 0,-220 C400,-220 -430,220 0,220 C430,220 -400,-220 0,-220 C300,-220 350,220 0,220 C-430,220 400,-220 0,-220"/>
<path id="amp3" d="M0,-220 C-300,-220 -350,220 0,220 C350,220 300,-220 0,-220 C-400,-220 430,220 0,220 C-350,220 -300,-220 0,-220 C400,-220 -430,220 0,220 C430,220 -400,-220 0,-220 C300,-220 350,220 0,220 C-430,220 400,-220 0,-220"/>
<path id="amp4" d="M0,-220 C-300,-220 -350,220 0,220 C350,220 300,-220 0,-220 C-400,-220 430,220 0,220 C-350,220 -300,-220 0,-220 C400,-220 -430,220 0,220 C430,220 -400,-220 0,-220 C300,-220 350,220 0,220 C-430,220 400,-220 0,-220"/>
<path id="amp5" d="M0,-220 C-300,-220 -350,220 0,220 C350,220 300,-220 0,-220 C-400,-220 430,220 0,220 C-350,220 -300,-220 0,-220 C400,-220 -430,220 0,220 C430,220 -400,-220 0,-220 C300,-220 350,220 0,220 C-430,220 400,-220 0,-220"/>
<path id="amp6" d="M0,-220 C-300,-220 -350,220 0,220 C350,220 300,-220 0,-220 C-400,-220 430,220 0,220 C-350,220 -300,-220 0,-220 C400,-220 -430,220 0,220 C430,220 -400,-220 0,-220 C300,-220 350,220 0,220 C-430,220 400,-220 0,-220"/>
<path id="amp7" d="M0,-220 C-300,-220 -350,220 0,220 C350,220 300,-220 0,-220 C-400,-220 430,220 0,220 C-350,220 -300,-220 0,-220 C400,-220 -430,220 0,220 C430,220 -400,-220 0,-220 C300,-220 350,220 0,220 C-430,220 400,-220 0,-220"/>
<path id="amp8" d="M0,-220 C-300,-220 -350,220 0,220 C350,220 300,-220 0,-220 C-400,-220 430,220 0,220 C-350,220 -300,-220 0,-220 C400,-220 -430,220 0,220 C430,220 -400,-220 0,-220 C300,-220 350,220 0,220 C-430,220 400,-220 0,-220"/>
<path id="amp9" d="M0,-220 C-300,-220 -350,220 0,220 C350,220 300,-220 0,-220 C-400,-220 430,220 0,220 C-350,220 -300,-220 0,-220 C400,-220 -430,220 0,220 C430,220 -400,-220 0,-220 C300,-220 350,220 0,220 C-430,220 400,-220 0,-220"/>
<path id="amp10" d="M0,-220 C-300,-220 -350,220 0,220 C350,220 300,-220 0,-220 C-400,-220 430,220 0,220 C-350,220 -300,-220 0,-220 C400,-220 -430,220 0,220 C430,220 -400,-220 0,-220 C300,-220 350,220 0,220 C-430,220 400,-220 0,-220"/>
</defs>
<!-- <rect x="-4999" y="-4999" width="9999" height="9999" fill="#ffffff"/> -->
<g transform="scale(2,1)">
<use xlink:href="#track_sleepers" stroke="#666600"/>
<use xlink:href="#track_sleepers" stroke="#ff9966" transform="translate(0,-1)"/>
<use xlink:href="#track_rails" stroke="#666666" transform="translate(0,-1)"/>
<use xlink:href="#track_rails" stroke="#cccccc" transform="translate(0,-3)"/>
<use xlink:href="#tree_evergreen" transform="translate(-180,50)"/>
<use xlink:href="#tree_deciduous" transform="translate(5,-40)"/>
<use xlink:href="#tree_evergreen" transform="translate(30,190)"/>
<use xlink:href="#tree_deciduous" transform="translate(215,80)"/>
<use xlink:href="#tunnel_back"/>
<g>
<g transform="translate(0, -6)"><use xlink:href="#wheels" ><animateMotion begin="0s" dur="60s" repeatCount="indefinite" rotate="auto"><mpath xlink:href="#amp0" /></animateMotion></use></g>
<g transform="translate(0, -6)"><use xlink:href="#wheels" ><animateMotion begin="0.43s" dur="60s" repeatCount="indefinite" rotate="auto"><mpath xlink:href="#amp1" /></animateMotion></use></g>
<g transform="translate(0, -6)"><use xlink:href="#wheels" ><animateMotion begin="0.86s" dur="60s" repeatCount="indefinite" rotate="auto"><mpath xlink:href="#amp2" /></animateMotion></use></g>
<g transform="translate(0,-10)"><use xlink:href="#body" fill="#009900"><animateMotion begin="0s" dur="60s" repeatCount="indefinite" rotate="auto"><mpath xlink:href="#amp3" /></animateMotion></use></g>
<g transform="translate(0,-10)"><use xlink:href="#bload" fill="#cc99ff"><animateMotion begin="0.43s" dur="60s" repeatCount="indefinite" rotate="auto"><mpath xlink:href="#amp4" /></animateMotion></use></g>
<g transform="translate(0,-10)"><use xlink:href="#back" fill="#0033cc"><animateMotion begin="0.86s" dur="60s" repeatCount="indefinite" rotate="auto"><mpath xlink:href="#amp5" /></animateMotion></use></g>
<g transform="translate(0,-16)"><use xlink:href="#front" fill="#00cc00"><animateMotion begin="0s" dur="60s" repeatCount="indefinite" rotate="auto"><mpath xlink:href="#amp6" /></animateMotion></use></g>
<g transform="translate(0,-16)"><use xlink:href="#load" ><animateMotion begin="0.43s" dur="60s" repeatCount="indefinite" rotate="auto"><mpath xlink:href="#amp7" /></animateMotion></use></g>
<g transform="translate(0,-18)"><use xlink:href="#blogs" fill="#0066ff"><animateMotion begin="0.86s" dur="60s" repeatCount="indefinite" rotate="auto"><mpath xlink:href="#amp8" /></animateMotion></use></g>
<g transform="translate(0,-22)"><use xlink:href="#body" fill="#ffffff"><animateMotion begin="0s" dur="60s" repeatCount="indefinite" rotate="auto"><mpath xlink:href="#amp9" /></animateMotion></use></g>
<g transform="translate(0,-28)"><use xlink:href="#roof" fill="#00ff00"><animateMotion begin="0s" dur="60s" repeatCount="indefinite" rotate="auto"><mpath xlink:href="#amp10"/></animateMotion></use></g>
<animate attributeType="XML" attributeName="opacity" begin="0s" dur="0.86s" values="0;0;1" keyTimes="0;1;1"/>
</g>
<use xlink:href="#tunnel_front"/>
<use xlink:href="#tree_deciduous" transform="translate(-45,-10)"/>
<use xlink:href="#tree_evergreen" transform="translate(130,-110)"/>
</g>
<use xlink:href="#barrier_post" transform="translate(14,10)"/>
<g transform="matrix(-1,0.5 0,1 18,10)">
<use xlink:href="#barrier_arm">
<animateTransform attributeType="XML" attributeName="transform" type="rotate" begin="0s" dur="60s" values="0;0;90;90;0;0;90;90;0;0" keyTimes="0; 0.28;0.30;0.33;0.35; 0.65;0.67;0.70;0.72; 1" repeatCount="indefinite"/>
</use>
</g>
<use xlink:href="#barrier_post" transform="translate(-14,10)"/>
<g transform="matrix(1,0.5 0,1 -18,10)">
<use xlink:href="#barrier_arm">
<animateTransform attributeType="XML" attributeName="transform" type="rotate" begin="0s" dur="60s" values="0;0;90;90;0;0;90;90;0;0" keyTimes="0; 0.53;0.55;0.58;0.60; 0.91;0.93;0.96;0.98; 1" repeatCount="indefinite"/>
</use>
</g>
<g>
<g>
<use xlink:href="#bouncer">
<animateTransform attributeType="XML" attributeName="transform" type="scale" begin="0s" dur="0.5s" values="1.2,0.8;1,1;0.9,1.1;1,1;1.2,0.8" keyTimes="0;0.2;0.5;0.8;1" repeatCount="indefinite"/>
</use>
<animateTransform attributeType="XML" attributeName="transform" type="translate" begin="0s" dur="13s" values="0,130;0,-40;0,130" keyTimes="0;0.5;1" repeatCount="indefinite"/>
</g>
<animateTransform attributeType="XML" attributeName="transform" type="translate" begin="0s" dur="31s" values="380,0;160,0;380,0" keyTimes="0;0.5;1" repeatCount="indefinite"/>
</g>
]]):toImage()
end
return p