? style
? MediaPlayer/build M index.html M jmfplayer/src/main/web/test01.html M simple/src/main/web/index.html git-svn-id: svn://10.0.0.236/trunk@242091 18797224-902f-48f8-a5cc-f745e15eee43
@@ -1,11 +1,43 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>Pluglet Examples</title>
|
||||
</head>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
||||
|
||||
<body>
|
||||
<h1>Pluglet Examples</h1>
|
||||
<title>Java Implemented Mozilla Browser Plugins</title>
|
||||
<link href="style/screen.css" rel="stylesheet" type="text/css" />
|
||||
<script type="text/javascript" src="style/prototype.js"></script>
|
||||
<script type="text/javascript" src="style/effects.js"></script>
|
||||
<script type="text/javascript" src="style/dragdrop.js"></script>
|
||||
<script type="text/javascript" src="style/controls.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div id="nav">
|
||||
<ul class="menubar">
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="page">
|
||||
<div class="wrapper">
|
||||
|
||||
<div id="logo"><img src="style/java_get_powered.png" /> <h1>Pluglet Examples</h1></div>
|
||||
|
||||
|
||||
<div id="content">
|
||||
|
||||
<!-- SECTION TOP: START -->
|
||||
|
||||
<p>We all know what a browser plugin is, right? You have your Flash
|
||||
player, you have your PDF viewer, you even have the Java Plugin, which
|
||||
enables applets to run in your browser. All of those, including the
|
||||
Java Plugin, are written using some native code, usually C or C++. This
|
||||
native code is the heart of the connection between the browser and the
|
||||
plugin. In Mozilla, the connection is defined using the Netscape Plugin
|
||||
API. Wouldn't it be nice to write a real browser plugin in Java
|
||||
instead? That's the purpose of "Pluglets".</p>
|
||||
|
||||
<p>Here are some simple examples of pluglets in action.</p>
|
||||
|
||||
<ul>
|
||||
|
||||
@@ -26,11 +58,23 @@
|
||||
|
||||
</ul>
|
||||
|
||||
<!-- SECTION TOP: END -->
|
||||
|
||||
<hr>
|
||||
<!-- Created: Fri Mar 16 14:12:07 Eastern Standard Time 2007 -->
|
||||
<!-- hhmts start -->
|
||||
Last modified: Mon Mar 19 23:29:38 Eastern Standard Time 2007
|
||||
<!-- hhmts end -->
|
||||
</body>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="footer">
|
||||
<div class="wrapper">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="float: left; width: 100%; height: 20px; "> </div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,6 +1,259 @@
|
||||
<html>
|
||||
<head><title>video/avi 3</title></head>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
||||
<title>Simple Pluglet</title>
|
||||
<link href="../../../../style/screen.css" rel="stylesheet" type="text/css" />
|
||||
<script type="text/javascript" src="../../../../style/prototype.js"></script>
|
||||
<script type="text/javascript" src="../../../../style/effects.js"></script>
|
||||
<script type="text/javascript" src="../../../../style/dragdrop.js"></script>
|
||||
<script type="text/javascript" src="../../../../style/controls.js"></script>
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<EMBED type="video/avi" name=JMPlayer SRC="tilego3.avi" width=400 height=400>
|
||||
|
||||
<div id="nav">
|
||||
<ul class="menubar">
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div id="page">
|
||||
<div class="wrapper">
|
||||
|
||||
<div id="logo"><img src="../../../../style/java_get_powered.png" />
|
||||
<h1>Media Player Using Java Media Framework</h1></div>
|
||||
|
||||
|
||||
<div id="content">
|
||||
|
||||
<p>This small example shows how you can leverage the power of the <a
|
||||
href="http://java.sun.com/products/java-media/jmf/index.jsp">Java Media
|
||||
Framework</a> to simply and easily play media content in your
|
||||
browser.</p>
|
||||
|
||||
<div id="example">
|
||||
<div class="wrapper">
|
||||
|
||||
<EMBED type="video/avi" name=JMPlayer SRC="tilego3.avi"
|
||||
width="200" height="175">
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="exampleFooter">
|
||||
<div class="wrapper">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<br />
|
||||
|
||||
<h2>Code Artifacts</h2>
|
||||
|
||||
<p>The "Simple Pluglet" example, which you can access from the <a
|
||||
href="../../../../index.html">index page</a>, gives more of a tutorial
|
||||
view of how to build a pluglet. In this example, I'll just include the
|
||||
source code and you can take it from there.</p>
|
||||
|
||||
<p><div class="source"><a href="#" onclick="if (Element.visible('src0')) { new Effect.SlideUp('src0'); $('src0_btn').src = '../../../../style/page_white_code.gif'; } else { new Effect.SlideDown('src0'); $('src0_btn').src = '../../../../style/page_white_code_red.gif'; } return false;">Details <img id="src0_btn" src="../../../../style/page_white_code.gif" /></a>
|
||||
<div id="src0" class="code" style="display: none; ">
|
||||
<div class="syntax"><div class="java" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="kw2">package</span> jmfplayer;</div></li>
|
||||
<li class="li2"><div class="de2"> </div></li>
|
||||
<li class="li1"><div class="de1"><span class="co2">import java.awt.BorderLayout;</span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"><span class="co2">import java.awt.Dimension;</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="co2">import java.awt.Frame;</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="co2">import java.awt.Panel;</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="co2">import java.awt.print.PrinterJob;</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="co2">import java.io.InputStream;</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="co2">import javax.media.ControllerEvent;</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="co2">import javax.media.ControllerListener;</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="co2">import javax.media.MediaLocator;</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="co2">import javax.media.PrefetchCompleteEvent;</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"><span class="co2">import javax.media.RealizeCompleteEvent;</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="co2">import javax.media.bean.playerbean.MediaPlayer;</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="co2">import org.mozilla.pluglet.Pluglet;</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="co2">import org.mozilla.pluglet.PlugletFactory;</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="co2">import org.mozilla.pluglet.PlugletStreamListener;</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="co2">import org.mozilla.pluglet.mozilla.PlugletManager;</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="co2">import org.mozilla.pluglet.mozilla.PlugletPeer;</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="co2">import org.mozilla.pluglet.mozilla.PlugletStreamInfo;</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="co2">import org.mozilla.pluglet.mozilla.PlugletTagInfo2;</span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> </div></li>
|
||||
<li class="li1"><div class="de1"> </div></li>
|
||||
<li class="li2"><div class="de2"><span class="kw2">public</span> <span class="kw2">class</span> JMFPlayer <span class="kw2">implements</span> PlugletFactory <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">public</span> JMFPlayer<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">public</span> Pluglet createPluglet<span class="br0">(</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1"><span class="kw3">String</span></a> mimeType<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> Pluglet player = <span class="kw2">null</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="kw2">try</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> player = <span class="kw2">new</span> Player<span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw2">catch</span> <span class="br0">(</span><a href="http://www.google.com/search?q=allinurl%3AThrowable+java.sun.com&bntl=1"><span class="kw3">Throwable</span></a> e<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> e.<span class="me1">printStackTrace</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">return</span> player;</div></li>
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">void</span> initialize<span class="br0">(</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1"><span class="kw3">String</span></a> plugletPath, PlugletManager manager<span class="br0">)</span> <span class="br0">{</span> </div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">void</span> shutdown<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> </div></li>
|
||||
|
||||
<li class="li1"><div class="de1"><span class="kw2">class</span> Player <span class="kw2">implements</span> Pluglet, ControllerListener <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> <a href="http://www.google.com/search?q=allinurl%3ADimension+java.sun.com&bntl=1"><span class="kw3">Dimension</span></a> defaultSize;</div></li>
|
||||
<li class="li1"><div class="de1"> <a href="http://www.google.com/search?q=allinurl%3AFrame+java.sun.com&bntl=1"><span class="kw3">Frame</span></a> frm;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="kw4">int</span> w, h;</div></li>
|
||||
<li class="li1"><div class="de1"> MediaPlayer player = <span class="kw2">null</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> <a href="http://www.google.com/search?q=allinurl%3APanel+java.sun.com&bntl=1"><span class="kw3">Panel</span></a> panel;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> </div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw2">public</span> <span class="kw2">synchronized</span> <span class="kw4">void</span> controllerUpdate<span class="br0">(</span>ControllerEvent ce<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw1">if</span><span class="br0">(</span>ce <span class="kw2">instanceof</span> RealizeCompleteEvent<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> player.<span class="me1">prefetch</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw1">if</span><span class="br0">(</span>ce <span class="kw2">instanceof</span> PrefetchCompleteEvent<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <a href="http://www.google.com/search?q=allinurl%3ADimension+java.sun.com&bntl=1"><span class="kw3">Dimension</span></a> dim = player.<span class="me1">getPreferredSize</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> frm.<span class="me1">pack</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> panel.<span class="me1">setSize</span><span class="br0">(</span>dim<span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> frm.<span class="me1">setSize</span><span class="br0">(</span>defaultSize<span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> player.<span class="me1">start</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> frm.<span class="me1">show</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">public</span> Player<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">void</span> initialize<span class="br0">(</span>PlugletPeer peer<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> PlugletTagInfo2 info = <span class="br0">(</span>PlugletTagInfo2<span class="br0">)</span>peer.<span class="me1">getTagInfo</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> w = info.<span class="me1">getWidth</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> h = info.<span class="me1">getHeight</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> defaultSize = <span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3ADimension+java.sun.com&bntl=1"><span class="kw3">Dimension</span></a><span class="br0">(</span>w, h<span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">boolean</span> playFile<span class="br0">(</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1"><span class="kw3">String</span></a> url<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> player.<span class="me1">setMediaLocator</span><span class="br0">(</span><span class="kw2">new</span> MediaLocator<span class="br0">(</span>url<span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="kw1">if</span><span class="br0">(</span>player.<span class="me1">getPlayer</span><span class="br0">(</span><span class="br0">)</span> == <span class="kw2">null</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw2">return</span> <span class="kw2">false</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span> <span class="kw1">else</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> player.<span class="me1">addControllerListener</span><span class="br0">(</span><span class="kw2">this</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> player.<span class="me1">realize</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">return</span> <span class="kw2">true</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">void</span> start<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> player = <span class="kw2">new</span> MediaPlayer<span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> panel = <span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3APanel+java.sun.com&bntl=1"><span class="kw3">Panel</span></a><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> panel.<span class="me1">add</span><span class="br0">(</span>player<span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw2">public</span> <span class="kw4">void</span> stop<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> player.<span class="me1">stop</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> player.<span class="me1">close</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw2">public</span> <span class="kw4">void</span> destroy<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw2">public</span> PlugletStreamListener newStream<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> JMFPlayerStreamListener listener = <span class="kw2">new</span> JMFPlayerStreamListener<span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> listener.<span class="me1">setPlayer</span><span class="br0">(</span><span class="kw2">this</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">return</span> listener;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">void</span> setWindow<span class="br0">(</span><a href="http://www.google.com/search?q=allinurl%3AFrame+java.sun.com&bntl=1"><span class="kw3">Frame</span></a> frame<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw1">if</span><span class="br0">(</span>frame == <span class="kw2">null</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="kw2">return</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> frame.<span class="me1">setSize</span><span class="br0">(</span>defaultSize<span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> frame.<span class="me1">setLayout</span><span class="br0">(</span><span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3ABorderLayout+java.sun.com&bntl=1"><span class="kw3">BorderLayout</span></a><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> frame.<span class="me1">add</span><span class="br0">(</span>panel<span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> frm = frame;</div></li>
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw2">public</span> <span class="kw4">void</span> print<span class="br0">(</span><a href="http://www.google.com/search?q=allinurl%3APrinterJob+java.sun.com&bntl=1"><span class="kw3">PrinterJob</span></a> printerJob<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> </div></li>
|
||||
<li class="li2"><div class="de2"><span class="kw2">class</span> JMFPlayerStreamListener <span class="kw2">implements</span> PlugletStreamListener <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> Player jmp;</div></li>
|
||||
<li class="li2"><div class="de2"> </div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="kw2">public</span> JMFPlayerStreamListener<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">void</span> onStartBinding<span class="br0">(</span>PlugletStreamInfo streamInfo<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="kw1">if</span><span class="br0">(</span>!jmp.<span class="me1">playFile</span><span class="br0">(</span>streamInfo.<span class="me1">getURL</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> <a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&bntl=1"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">(</span><span class="st0">"Error starting player."</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="kw2">return</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span> </div></li>
|
||||
<li class="li2"><div class="de2"> </div></li>
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="kw2">public</span> <span class="kw4">void</span> setPlayer<span class="br0">(</span>Player jmp<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">this</span>.<span class="me1">jmp</span> = jmp;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">void</span> onDataAvailable<span class="br0">(</span>PlugletStreamInfo streamInfo, <a href="http://www.google.com/search?q=allinurl%3AInputStream+java.sun.com&bntl=1"><span class="kw3">InputStream</span></a> input,<span class="kw4">int</span> length<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">void</span> onFileAvailable<span class="br0">(</span>PlugletStreamInfo plugletInfo, <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1"><span class="kw3">String</span></a> fileName<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">void</span> onStopBinding<span class="br0">(</span>PlugletStreamInfo plugletInfo,<span class="kw4">int</span> status<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">int</span> getStreamType<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="kw2">return</span> <span class="nu0">1</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> </div></li>
|
||||
<li class="li1"><div class="de1"><span class="br0">}</span> </div></li></ol></div></div>
|
||||
</div>
|
||||
</div>
|
||||
</p>
|
||||
|
||||
</div> <!-- content -->
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="footer">
|
||||
<div class="wrapper">
|
||||
<a href="../../../../index.html">Back</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="float: left; width: 100%; height: 20px; "> </div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,6 +1,44 @@
|
||||
<html>
|
||||
<head><title>TestPluglet that loads its source file</title><head>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
||||
<title>Simple Pluglet</title>
|
||||
<link href="../../../../style/screen.css" rel="stylesheet" type="text/css" />
|
||||
<script type="text/javascript" src="../../../../style/prototype.js"></script>
|
||||
<script type="text/javascript" src="../../../../style/effects.js"></script>
|
||||
<script type="text/javascript" src="../../../../style/dragdrop.js"></script>
|
||||
<script type="text/javascript" src="../../../../style/controls.js"></script>
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="nav">
|
||||
<ul class="menubar">
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div id="page">
|
||||
<div class="wrapper">
|
||||
|
||||
<div id="logo"><img src="../../../../style/java_get_powered.png" /> <h1>Simple Pluglet</h1></div>
|
||||
|
||||
|
||||
<div id="content">
|
||||
|
||||
<p>This example illustrates how to create a pluglet and package it into
|
||||
a jar which you simply place in the browser's "plugins" directory.
|
||||
Before we get started, let's see it run!</p>
|
||||
|
||||
<br />
|
||||
|
||||
<div id="example">
|
||||
<div class="wrapper">
|
||||
|
||||
|
||||
<EMBED type="application/x-simple-pluglet" name="test"
|
||||
src="index.html" width=400 height=200>
|
||||
|
||||
@@ -68,5 +106,476 @@ var strslen2 = {
|
||||
<input type=button value="Call Pluglet 3 arg" onclick='callPluglet3()'> </input>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="exampleFooter">
|
||||
<div class="wrapper">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<br />
|
||||
|
||||
<h2>Code Artifacts</h2>
|
||||
|
||||
<p>Creating a pluglet requires creating several code arifacts:</p>
|
||||
|
||||
<ol>
|
||||
|
||||
<li><p>A Java class that implements <a
|
||||
href="http://www.mozilla.org/projects/blackwood/java-plugins/api/org/mozilla/pluglet/PlugletFactory.html">PlugletFactory</a>.
|
||||
</p>
|
||||
|
||||
<div class="source"><a href="#" onclick="if (Element.visible('src1')) { new Effect.SlideUp('src1'); $('src1_btn').src = '../../../../style/page_white_code.gif'; } else { new Effect.SlideDown('src1'); $('src1_btn').src = '../../../../style/page_white_code_red.gif'; } return false;">Details <img id="src1_btn" src="../../../../style/page_white_code.gif" /></a>
|
||||
<div id="src1" class="code" style="display: none; ">
|
||||
<div class="syntax"><div class="java" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="kw2">package</span> simple;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> </div></li>
|
||||
<li class="li1"><div class="de1"><span class="co2">import java.awt.Button;</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="co2">import java.awt.Frame;</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="co2">import java.awt.List;</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="co2">import java.awt.Panel;</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="co2">import java.awt.event.ActionEvent;</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="co2">import java.awt.event.ActionListener;</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="co2">import java.awt.print.PrinterJob;</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="co2">import java.io.BufferedReader;</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"><span class="co2">import java.io.InputStream;</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="co2">import java.io.InputStreamReader;</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="co2">import org.mozilla.pluglet.Pluglet;</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="co2">import org.mozilla.pluglet.PlugletFactory;</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="co2">import org.mozilla.pluglet.PlugletStreamListener;</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="co2">import org.mozilla.pluglet.mozilla.PlugletManager;</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="co2">import org.mozilla.pluglet.mozilla.PlugletPeer;</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="co2">import org.mozilla.pluglet.mozilla.PlugletStreamInfo;</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="co2">import org.mozilla.pluglet.mozilla.PlugletTagInfo;</span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"><span class="co2">import org.mozilla.pluglet.mozilla.PlugletTagInfo2;</span></div></li>
|
||||
<li class="li1"><div class="de1"> </div></li>
|
||||
<li class="li2"><div class="de2"> </div></li>
|
||||
<li class="li1"><div class="de1"><span class="kw2">public</span> <span class="kw2">class</span> SimplePluglet <span class="kw2">implements</span> PlugletFactory <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw2">public</span> SimplePluglet<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"--test.test()<span class="es0">\n</span>"</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="coMULTI">/**</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> * Creates a new pluglet instance, based on a MIME type. This</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> * allows different impelementations to be created depending on</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> * the specified MIME type.</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> */</span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="kw2">public</span> Pluglet createPluglet<span class="br0">(</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1"><span class="kw3">String</span></a> mimeType<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"--test.createPlugletInstance<span class="es0">\n</span>"</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="kw2">return</span> <span class="kw2">new</span> SimplePlugletInstance<span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="coMULTI">/**</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> * Initializes the pluglet and will be called before any new instances are</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> * created.</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> */</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw2">public</span> <span class="kw4">void</span> initialize<span class="br0">(</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1"><span class="kw3">String</span></a> plugletPath, PlugletManager manager<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"--test.initialize("</span> + </div></li>
|
||||
<li class="li2"><div class="de2"> plugletPath + <span class="st0">")<span class="es0">\n</span>"</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="coMULTI">/**</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> * Called when the browser is done with the pluglet factory, or when</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> * the pluglet is disabled by the user.</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> */</span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="kw2">public</span> <span class="kw4">void</span> shutdown<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"--test.shutdown<span class="es0">\n</span>"</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="br0">}</span> </div></li></ol></div></div>
|
||||
|
||||
</div></div>
|
||||
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
<li><p>A Java class that implements <a
|
||||
href="http://www.mozilla.org/projects/blackwood/java-plugins/api/org/mozilla/pluglet/Pluglet.html">Pluglet</a>,
|
||||
instances of which are created and returned by the
|
||||
PlugletFactory. </p>
|
||||
|
||||
<div class="source"><a href="#" onclick="if (Element.visible('src2')) { new Effect.SlideUp('src2'); $('src2_btn').src = '../../../../style/page_white_code.gif'; } else { new Effect.SlideDown('src2'); $('src2_btn').src = '../../../../style/page_white_code_red.gif'; } return false;">Details <img id="src2_btn" src="../../../../style/page_white_code.gif" /></a>
|
||||
<div id="src2" class="code" style="display: none; ">
|
||||
<div class="syntax"><div class="java" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="kw2">class</span> SimplePlugletInstance <span class="kw2">implements</span> Pluglet <span class="br0">{</span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <a href="http://www.google.com/search?q=allinurl%3APanel+java.sun.com&bntl=1"><span class="kw3">Panel</span></a> panel;</div></li>
|
||||
<li class="li1"><div class="de1"> <a href="http://www.google.com/search?q=allinurl%3AButton+java.sun.com&bntl=1"><span class="kw3">Button</span></a> button;</div></li>
|
||||
<li class="li2"><div class="de2"> <a href="http://www.google.com/search?q=allinurl%3AList+java.sun.com&bntl=1"><span class="kw3">List</span></a> list;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> PlugletPeer peer;</div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw2">public</span> SimplePlugletInstance<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"--SimplePlugletInstance.SimplePlugletInstance() <span class="es0">\n</span>"</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> panel = <span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3APanel+java.sun.com&bntl=1"><span class="kw3">Panel</span></a><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> button = <span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AButton+java.sun.com&bntl=1"><span class="kw3">Button</span></a><span class="br0">(</span><span class="st0">"Press me :)"</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> button.<span class="me1">addActionListener</span><span class="br0">(</span><span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AActionListener+java.sun.com&bntl=1"><span class="kw3">ActionListener</span></a><span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">void</span> actionPerformed<span class="br0">(</span><a href="http://www.google.com/search?q=allinurl%3AActionEvent+java.sun.com&bntl=1"><span class="kw3">ActionEvent</span></a> e<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="kw4">int</span> t = list.<span class="me1">getSelectedIndex</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> t++; </div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="kw1">if</span> <span class="br0">(</span>t >= list.<span class="me1">getItemCount</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> t = <span class="nu0">0</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> list.<span class="me1">select</span><span class="br0">(</span>t<span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> panel.<span class="me1">add</span><span class="br0">(</span>button<span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> list = <span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AList+java.sun.com&bntl=1"><span class="kw3">List</span></a><span class="br0">(</span><span class="nu0">4</span>,<span class="kw2">false</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> list.<span class="me1">add</span><span class="br0">(</span><span class="st0">"Pluglet"</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> list.<span class="me1">add</span><span class="br0">(</span><span class="st0">"not"</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> list.<span class="me1">add</span><span class="br0">(</span><span class="st0">"bad"</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> list.<span class="me1">select</span><span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> panel.<span class="me1">add</span><span class="br0">(</span>list<span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="coMULTI">/**</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> * Initializes a newly created pluglet instance, passing to it the pluglet</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> * instance peer which it should use for all communication back to the browser.</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> * </span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> * @param peer the corresponding pluglet instance peer</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> */</span></div></li>
|
||||
<li class="li1"><div class="de1"> </div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="kw2">public</span> <span class="kw4">void</span> initialize<span class="br0">(</span>PlugletPeer peer<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">this</span>.<span class="me1">peer</span> = peer;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"--SimplePlugletInstance.initialize<span class="es0">\n</span>"</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> peer.<span class="me1">showStatus</span><span class="br0">(</span><span class="st0">"Hello world"</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"--SimplePlugletInstance.initialize "</span>+peer.<span class="me1">getMIMEType</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="coMULTI">/*</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> try {</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> OutputStreamWriter out = new OutputStreamWriter(peer.newStream("text/plain","_new"));</span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> String msg = "Hello, world";</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> out.write(msg,0,msg.length());</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> out.flush();</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> out.close();</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> } catch (Exception e) {</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> ;</span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> }</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> */</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="coMULTI">/**</span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> * Called to instruct the pluglet instance to start. This will be called after</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> * the pluglet is first created and initialized, and may be called after the</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> * pluglet is stopped (via the Stop method) if the pluglet instance is returned</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> * to in the browser window's history.</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> */</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">void</span> start<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"--SimplePlugletInstance.start<span class="es0">\n</span>"</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="coMULTI">/**</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> * Called to instruct the pluglet instance to stop, thereby suspending its state.</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> * This method will be called whenever the browser window goes on to display</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> * another page and the page containing the pluglet goes into the window's history</span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> * list.</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> */</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw2">public</span> <span class="kw4">void</span> stop<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"--SimplePlugletInstance.stop<span class="es0">\n</span>"</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="coMULTI">/**</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> * Called to instruct the pluglet instance to destroy itself. This is called when</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> * it become no longer possible to return to the pluglet instance, either because </span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> * the browser window's history list of pages is being trimmed, or because the</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> * window containing this page in the history is being closed.</span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> */</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">void</span> destroy<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"--SimplePlugletInstance.destroy<span class="es0">\n</span>"</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="coMULTI">/**</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> * Called to tell the pluglet that the initial src/data stream is</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> * ready. </span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> * </span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> * @result PlugletStreamListener</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> */</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw2">public</span> PlugletStreamListener newStream<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"--SimplePlugletInstance.newStream<span class="es0">\n</span>"</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="kw2">return</span> <span class="kw2">new</span> TestStreamListener<span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="coMULTI">/**</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> * Called when the window containing the pluglet instance changes.</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> *</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> * @param frame the pluglet panel</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> */</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">void</span> setWindow<span class="br0">(</span><a href="http://www.google.com/search?q=allinurl%3AFrame+java.sun.com&bntl=1"><span class="kw3">Frame</span></a> frame<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"--Test...SetWindow "</span>+frame+<span class="st0">"<span class="es0">\n</span>"</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="kw1">if</span><span class="br0">(</span>frame == <span class="kw2">null</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw2">return</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> PlugletTagInfo info = peer.<span class="me1">getTagInfo</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw1">if</span> <span class="br0">(</span>info <span class="kw2">instanceof</span> PlugletTagInfo2<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> PlugletTagInfo2 info2 = <span class="br0">(</span>PlugletTagInfo2<span class="br0">)</span>info;</div></li>
|
||||
<li class="li1"><div class="de1"> frame.<span class="me1">setSize</span><span class="br0">(</span>info2.<span class="me1">getWidth</span><span class="br0">(</span><span class="br0">)</span>,info2.<span class="me1">getHeight</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"--SimplePlugletInstance.SetWindow width "</span>+info2.<span class="me1">getWidth</span><span class="br0">(</span><span class="br0">)</span>+ <span class="st0">" height "</span>+info2.<span class="me1">getHeight</span><span class="br0">(</span><span class="br0">)</span>+<span class="st0">"<span class="es0">\n</span>"</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"--Test...SetWindow "</span>+frame+<span class="st0">"<span class="es0">\n</span>"</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> frame.<span class="me1">add</span><span class="br0">(</span>panel<span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> frame.<span class="me1">pack</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> frame.<span class="me1">show</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="coMULTI">/**</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> * Called to instruct the pluglet instance to print itself to a printer.</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> *</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> * @param print printer information.</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> */</span> </div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw2">public</span> <span class="kw4">void</span> print<span class="br0">(</span><a href="http://www.google.com/search?q=allinurl%3APrinterJob+java.sun.com&bntl=1"><span class="kw3">PrinterJob</span></a> printerJob<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> </div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">protected</span> <span class="kw4">void</span> finalize<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"--SimplePlugletInstance.finalize()<span class="es0">\n</span>"</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> </div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1"><span class="kw3">String</span></a> calledFromJavaScript3<span class="br0">(</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1"><span class="kw3">String</span></a> arg0, <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1"><span class="kw3">String</span></a> arg1, <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1"><span class="kw3">String</span></a> arg2<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"calledFromJavaScript2<span class="es0">\n</span>"</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">return</span> <span class="st0">"3 args. arg0: "</span> + arg0 + <span class="st0">" arg1: "</span> + arg1 + <span class="st0">" arg2: "</span> + arg2 + <span class="st0">""</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> </div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1"><span class="kw3">String</span></a> calledFromJavaScript2<span class="br0">(</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1"><span class="kw3">String</span></a> arg0, <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1"><span class="kw3">String</span></a> arg1<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"calledFromJavaScript2<span class="es0">\n</span>"</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw2">return</span> <span class="st0">"2 args. arg0: "</span> + arg0 + <span class="st0">" arg1: "</span> + arg1 + <span class="st0">""</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> </div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1"><span class="kw3">String</span></a> calledFromJavaScript1<span class="br0">(</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1"><span class="kw3">String</span></a> arg0<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"calledFromJavaScript1<span class="es0">\n</span>"</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="kw2">return</span> <span class="st0">"1 args. arg0: "</span> + arg0 + <span class="st0">""</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> </div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1"><span class="kw3">String</span></a> calledFromJavaScript0<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"calledFromJavaScript0<span class="es0">\n</span>"</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="kw2">return</span> <span class="st0">"0 arg hard coded result"</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> </div></li>
|
||||
<li class="li1"><div class="de1"> </div></li>
|
||||
<li class="li2"><div class="de2"><span class="br0">}</span> </div></li></ol></div></div>
|
||||
</div></div>
|
||||
|
||||
</li>
|
||||
|
||||
<li><p>A Java class that implements <a
|
||||
href="http://www.mozilla.org/projects/blackwood/java-plugins/api/org/mozilla/pluglet/PlugletStreamListener.html">PlugletStreamListener</a>,
|
||||
if the Pluglet uses the getURL() or postURL() methods on the
|
||||
<a
|
||||
href="http://www.mozilla.org/projects/blackwood/java-plugins/api/org/mozilla/pluglet/mozilla/PlugletManager.html">PlugletManager</a>
|
||||
passed to plugletFactory.initialize().
|
||||
|
||||
|
||||
<div class="source"><a href="#" onclick="if (Element.visible('src3')) { new Effect.SlideUp('src3'); $('src3_btn').src = '../../../../style/page_white_code.gif'; } else { new Effect.SlideDown('src3'); $('src3_btn').src = '../../../../style/page_white_code_red.gif'; } return false;">Details <img id="src3_btn" src="../../../../style/page_white_code.gif" /></a>
|
||||
<div id="src3" class="code" style="display: none; ">
|
||||
<div class="syntax"><div class="java" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="kw2">class</span> TestStreamListener <span class="kw2">implements</span> PlugletStreamListener <span class="br0">{</span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="kw2">public</span> TestStreamListener<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"--TestStreamListener.TestStreamListener()<span class="es0">\n</span>"</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="coMULTI">/**</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> * Notify the observer that the URL has started to load. This method is</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> * called only once, at the beginning of a URL load.<BR><BR></span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> */</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">void</span> onStartBinding<span class="br0">(</span>PlugletStreamInfo streamInfo<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"--TestStreamListener.onStartBinding "</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"length "</span>+streamInfo.<span class="me1">getLength</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">" contenet type "</span>+ streamInfo.<span class="me1">getContentType</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">" url "</span>+ streamInfo.<span class="me1">getURL</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">" seekable "</span>+ streamInfo.<span class="me1">isSeekable</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> </div></li>
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="coMULTI">/**</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> * Notify the client that data is available in the input stream. This</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> * method is called whenver data is written into the input stream by the</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> * networking library...<BR><BR></span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> * </span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> * @param input The input stream containing the data. This stream can</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> * be either a blocking or non-blocking stream.</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> * @param length The amount of data that was just pushed into the stream.</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> */</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw2">public</span> <span class="kw4">void</span> onDataAvailable<span class="br0">(</span>PlugletStreamInfo plugletInfo, <a href="http://www.google.com/search?q=allinurl%3AInputStream+java.sun.com&bntl=1"><span class="kw3">InputStream</span></a> input,<span class="kw4">int</span> length<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="kw2">try</span><span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"--TestStreamListener.onDataAvailable "</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"--length "</span>+input.<span class="me1">available</span><span class="br0">(</span><span class="br0">)</span>+<span class="st0">"<span class="es0">\n</span>"</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1"><span class="kw3">String</span></a> cur = <span class="kw2">null</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> <a href="http://www.google.com/search?q=allinurl%3ABufferedReader+java.sun.com&bntl=1"><span class="kw3">BufferedReader</span></a> bufferedReader = <span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3ABufferedReader+java.sun.com&bntl=1"><span class="kw3">BufferedReader</span></a><span class="br0">(</span><span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AInputStreamReader+java.sun.com&bntl=1"><span class="kw3">InputStreamReader</span></a><span class="br0">(</span>input<span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="kw1">while</span> <span class="br0">(</span><span class="kw2">null</span> != <span class="br0">(</span>cur = bufferedReader.<span class="me1">readLine</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span>cur<span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span> <span class="kw2">catch</span><span class="br0">(</span><a href="http://www.google.com/search?q=allinurl%3AException+java.sun.com&bntl=1"><span class="kw3">Exception</span></a> e<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> ;</div></li>
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">void</span> onFileAvailable<span class="br0">(</span>PlugletStreamInfo plugletInfo, <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1"><span class="kw3">String</span></a> fileName<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"--TestStreamListener.onFileAvailable<span class="es0">\n</span>"</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">" fileName"</span> + fileName<span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="coMULTI">/**</span></div></li>
|
||||
<li class="li2"><div class="de2"><span class="coMULTI"> * Notify the observer that the URL has finished loading. </span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="coMULTI"> */</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw2">public</span> <span class="kw4">void</span> onStopBinding<span class="br0">(</span>PlugletStreamInfo plugletInfo,<span class="kw4">int</span> status<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"--TestStreamListener.onStopBinding<span class="es0">\n</span>"</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">int</span> getStreamType<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> org.<span class="me1">mozilla</span>.<span class="me1">util</span>.<span class="me1">DebugPluglet</span>.<span class="me1">print</span><span class="br0">(</span><span class="st0">"--TestStreamListener.getStreamType<span class="es0">\n</span>"</span><span class="br0">)</span>;</div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="kw2">return</span> <span class="nu0">1</span>; <span class="co1">//:)</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"><span class="br0">}</span> </div></li></ol></div></div>
|
||||
</div></div>
|
||||
|
||||
|
||||
</p></li>
|
||||
|
||||
<li><p>A Java JAR file containing the .class files compiled from the
|
||||
above Java files. The manifest for the JAR must contain the following entries:</p>
|
||||
|
||||
<table border="1">
|
||||
<thead>
|
||||
<tr>
|
||||
|
||||
<th>Manifest attribute name</th>
|
||||
|
||||
<th>Explanation</th>
|
||||
|
||||
<th>Value for this example</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
|
||||
<tr>
|
||||
|
||||
<td>MIMEDescription
|
||||
</td>
|
||||
|
||||
<td>The mime-type to be handled by this pluglet.
|
||||
</td>
|
||||
|
||||
<td>application/x-simple-pluglet
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
||||
<td>Pluglet-Class
|
||||
</td>
|
||||
|
||||
<td>The fully qualified class name of the Java class implementing PlugletFactory.
|
||||
</td>
|
||||
|
||||
<td>simple.SimplePluglet
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
|
||||
</li>
|
||||
|
||||
<li><p>Some HTML markup that includes the pluglet. Note: this
|
||||
step is exactly the same as for any other native plugin.
|
||||
|
||||
<div class="source"><a href="#" onclick="if (Element.visible('src0')) { new Effect.SlideUp('src0'); $('src0_btn').src = '../../../../style/page_white_code.gif'; } else { new Effect.SlideDown('src0'); $('src0_btn').src = '../../../../style/page_white_code_red.gif'; } return false;">Details <img id="src0_btn" src="../../../../style/page_white_code.gif" /></a>
|
||||
<div id="src0" class="code" style="display: none; ">
|
||||
|
||||
<div class="syntax"><div class="html4strict" style="font-family: monospace;"><ol><li class="li1"><div class="de1"> </div></li>
|
||||
<li class="li2"><div class="de2"><span class="sc2"><EMBED <span class="kw3">type</span>=<span class="st0">"application/x-simple-pluglet"</span> <span class="kw3">name</span>=<span class="st0">"test"</span> </div></li>
|
||||
|
||||
<li class="li1"><div class="de1"> <span class="kw3">src</span>=<span class="st0">"index.html"</span> <span class="kw3">width</span>=<span class="nu0">400</span> <span class="kw3">height</span>=<span class="nu0">200</span>></span> </div></li></ol></div></div>
|
||||
</div>
|
||||
|
||||
|
||||
</p></li>
|
||||
|
||||
|
||||
|
||||
</ol>
|
||||
|
||||
|
||||
|
||||
</div> <!-- content -->
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="footer">
|
||||
<div class="wrapper">
|
||||
<a href="../../../../index.html">Back</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="float: left; width: 100%; height: 20px; "> </div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
BIN
mozilla/java/plugins/examples/style/bg.gif
Executable file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
mozilla/java/plugins/examples/style/btn.orange.gif
Executable file
|
After Width: | Height: | Size: 881 B |
BIN
mozilla/java/plugins/examples/style/control_end.gif
Executable file
|
After Width: | Height: | Size: 407 B |
BIN
mozilla/java/plugins/examples/style/control_start.gif
Executable file
|
After Width: | Height: | Size: 407 B |
815
mozilla/java/plugins/examples/style/controls.js
vendored
Executable file
@@ -0,0 +1,815 @@
|
||||
// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
|
||||
// (c) 2005 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
|
||||
// (c) 2005 Jon Tirsen (http://www.tirsen.com)
|
||||
// Contributors:
|
||||
// Richard Livsey
|
||||
// Rahul Bhargava
|
||||
// Rob Wills
|
||||
//
|
||||
// See scriptaculous.js for full license.
|
||||
|
||||
// Autocompleter.Base handles all the autocompletion functionality
|
||||
// that's independent of the data source for autocompletion. This
|
||||
// includes drawing the autocompletion menu, observing keyboard
|
||||
// and mouse events, and similar.
|
||||
//
|
||||
// Specific autocompleters need to provide, at the very least,
|
||||
// a getUpdatedChoices function that will be invoked every time
|
||||
// the text inside the monitored textbox changes. This method
|
||||
// should get the text for which to provide autocompletion by
|
||||
// invoking this.getToken(), NOT by directly accessing
|
||||
// this.element.value. This is to allow incremental tokenized
|
||||
// autocompletion. Specific auto-completion logic (AJAX, etc)
|
||||
// belongs in getUpdatedChoices.
|
||||
//
|
||||
// Tokenized incremental autocompletion is enabled automatically
|
||||
// when an autocompleter is instantiated with the 'tokens' option
|
||||
// in the options parameter, e.g.:
|
||||
// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });
|
||||
// will incrementally autocomplete with a comma as the token.
|
||||
// Additionally, ',' in the above example can be replaced with
|
||||
// a token array, e.g. { tokens: [',', '\n'] } which
|
||||
// enables autocompletion on multiple tokens. This is most
|
||||
// useful when one of the tokens is \n (a newline), as it
|
||||
// allows smart autocompletion after linebreaks.
|
||||
|
||||
var Autocompleter = {}
|
||||
Autocompleter.Base = function() {};
|
||||
Autocompleter.Base.prototype = {
|
||||
baseInitialize: function(element, update, options) {
|
||||
this.element = $(element);
|
||||
this.update = $(update);
|
||||
this.hasFocus = false;
|
||||
this.changed = false;
|
||||
this.active = false;
|
||||
this.index = 0;
|
||||
this.entryCount = 0;
|
||||
|
||||
if (this.setOptions)
|
||||
this.setOptions(options);
|
||||
else
|
||||
this.options = options || {};
|
||||
|
||||
this.options.paramName = this.options.paramName || this.element.name;
|
||||
this.options.tokens = this.options.tokens || [];
|
||||
this.options.frequency = this.options.frequency || 0.4;
|
||||
this.options.minChars = this.options.minChars || 1;
|
||||
this.options.onShow = this.options.onShow ||
|
||||
function(element, update){
|
||||
if(!update.style.position || update.style.position=='absolute') {
|
||||
update.style.position = 'absolute';
|
||||
Position.clone(element, update, {setHeight: false, offsetTop: element.offsetHeight});
|
||||
}
|
||||
Effect.Appear(update,{duration:0.15});
|
||||
};
|
||||
this.options.onHide = this.options.onHide ||
|
||||
function(element, update){ new Effect.Fade(update,{duration:0.15}) };
|
||||
|
||||
if (typeof(this.options.tokens) == 'string')
|
||||
this.options.tokens = new Array(this.options.tokens);
|
||||
|
||||
this.observer = null;
|
||||
|
||||
this.element.setAttribute('autocomplete','off');
|
||||
|
||||
Element.hide(this.update);
|
||||
|
||||
Event.observe(this.element, "blur", this.onBlur.bindAsEventListener(this));
|
||||
Event.observe(this.element, "keypress", this.onKeyPress.bindAsEventListener(this));
|
||||
},
|
||||
|
||||
show: function() {
|
||||
if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
|
||||
if(!this.iefix &&
|
||||
(navigator.appVersion.indexOf('MSIE')>0) &&
|
||||
(navigator.userAgent.indexOf('Opera')<0) &&
|
||||
(Element.getStyle(this.update, 'position')=='absolute')) {
|
||||
new Insertion.After(this.update,
|
||||
'<iframe id="' + this.update.id + '_iefix" '+
|
||||
'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
|
||||
'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
|
||||
this.iefix = $(this.update.id+'_iefix');
|
||||
}
|
||||
if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
|
||||
},
|
||||
|
||||
fixIEOverlapping: function() {
|
||||
Position.clone(this.update, this.iefix);
|
||||
this.iefix.style.zIndex = 1;
|
||||
this.update.style.zIndex = 2;
|
||||
Element.show(this.iefix);
|
||||
},
|
||||
|
||||
hide: function() {
|
||||
this.stopIndicator();
|
||||
if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
|
||||
if(this.iefix) Element.hide(this.iefix);
|
||||
},
|
||||
|
||||
startIndicator: function() {
|
||||
if(this.options.indicator) Element.show(this.options.indicator);
|
||||
},
|
||||
|
||||
stopIndicator: function() {
|
||||
if(this.options.indicator) Element.hide(this.options.indicator);
|
||||
},
|
||||
|
||||
onKeyPress: function(event) {
|
||||
if(this.active)
|
||||
switch(event.keyCode) {
|
||||
case Event.KEY_TAB:
|
||||
case Event.KEY_RETURN:
|
||||
this.selectEntry();
|
||||
Event.stop(event);
|
||||
case Event.KEY_ESC:
|
||||
this.hide();
|
||||
this.active = false;
|
||||
Event.stop(event);
|
||||
return;
|
||||
case Event.KEY_LEFT:
|
||||
case Event.KEY_RIGHT:
|
||||
return;
|
||||
case Event.KEY_UP:
|
||||
this.markPrevious();
|
||||
this.render();
|
||||
if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event);
|
||||
return;
|
||||
case Event.KEY_DOWN:
|
||||
this.markNext();
|
||||
this.render();
|
||||
if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event);
|
||||
return;
|
||||
}
|
||||
else
|
||||
if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN ||
|
||||
(navigator.appVersion.indexOf('AppleWebKit') > 0 && event.keyCode == 0)) return;
|
||||
|
||||
this.changed = true;
|
||||
this.hasFocus = true;
|
||||
|
||||
if(this.observer) clearTimeout(this.observer);
|
||||
this.observer =
|
||||
setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
|
||||
},
|
||||
|
||||
activate: function() {
|
||||
this.changed = false;
|
||||
this.hasFocus = true;
|
||||
this.getUpdatedChoices();
|
||||
},
|
||||
|
||||
onHover: function(event) {
|
||||
var element = Event.findElement(event, 'LI');
|
||||
if(this.index != element.autocompleteIndex)
|
||||
{
|
||||
this.index = element.autocompleteIndex;
|
||||
this.render();
|
||||
}
|
||||
Event.stop(event);
|
||||
},
|
||||
|
||||
onClick: function(event) {
|
||||
var element = Event.findElement(event, 'LI');
|
||||
this.index = element.autocompleteIndex;
|
||||
this.selectEntry();
|
||||
this.hide();
|
||||
},
|
||||
|
||||
onBlur: function(event) {
|
||||
// needed to make click events working
|
||||
setTimeout(this.hide.bind(this), 250);
|
||||
this.hasFocus = false;
|
||||
this.active = false;
|
||||
},
|
||||
|
||||
render: function() {
|
||||
if(this.entryCount > 0) {
|
||||
for (var i = 0; i < this.entryCount; i++)
|
||||
this.index==i ?
|
||||
Element.addClassName(this.getEntry(i),"selected") :
|
||||
Element.removeClassName(this.getEntry(i),"selected");
|
||||
|
||||
if(this.hasFocus) {
|
||||
this.show();
|
||||
this.active = true;
|
||||
}
|
||||
} else {
|
||||
this.active = false;
|
||||
this.hide();
|
||||
}
|
||||
},
|
||||
|
||||
markPrevious: function() {
|
||||
if(this.index > 0) this.index--
|
||||
else this.index = this.entryCount-1;
|
||||
},
|
||||
|
||||
markNext: function() {
|
||||
if(this.index < this.entryCount-1) this.index++
|
||||
else this.index = 0;
|
||||
},
|
||||
|
||||
getEntry: function(index) {
|
||||
return this.update.firstChild.childNodes[index];
|
||||
},
|
||||
|
||||
getCurrentEntry: function() {
|
||||
return this.getEntry(this.index);
|
||||
},
|
||||
|
||||
selectEntry: function() {
|
||||
this.active = false;
|
||||
this.updateElement(this.getCurrentEntry());
|
||||
},
|
||||
|
||||
updateElement: function(selectedElement) {
|
||||
if (this.options.updateElement) {
|
||||
this.options.updateElement(selectedElement);
|
||||
return;
|
||||
}
|
||||
var value = '';
|
||||
if (this.options.select) {
|
||||
var nodes = document.getElementsByClassName(this.options.select, selectedElement) || [];
|
||||
if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
|
||||
} else
|
||||
value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
|
||||
|
||||
var lastTokenPos = this.findLastToken();
|
||||
if (lastTokenPos != -1) {
|
||||
var newValue = this.element.value.substr(0, lastTokenPos + 1);
|
||||
var whitespace = this.element.value.substr(lastTokenPos + 1).match(/^\s+/);
|
||||
if (whitespace)
|
||||
newValue += whitespace[0];
|
||||
this.element.value = newValue + value;
|
||||
} else {
|
||||
this.element.value = value;
|
||||
}
|
||||
this.element.focus();
|
||||
|
||||
if (this.options.afterUpdateElement)
|
||||
this.options.afterUpdateElement(this.element, selectedElement);
|
||||
},
|
||||
|
||||
updateChoices: function(choices) {
|
||||
if(!this.changed && this.hasFocus) {
|
||||
this.update.innerHTML = choices;
|
||||
Element.cleanWhitespace(this.update);
|
||||
Element.cleanWhitespace(this.update.firstChild);
|
||||
|
||||
if(this.update.firstChild && this.update.firstChild.childNodes) {
|
||||
this.entryCount =
|
||||
this.update.firstChild.childNodes.length;
|
||||
for (var i = 0; i < this.entryCount; i++) {
|
||||
var entry = this.getEntry(i);
|
||||
entry.autocompleteIndex = i;
|
||||
this.addObservers(entry);
|
||||
}
|
||||
} else {
|
||||
this.entryCount = 0;
|
||||
}
|
||||
|
||||
this.stopIndicator();
|
||||
|
||||
this.index = 0;
|
||||
this.render();
|
||||
}
|
||||
},
|
||||
|
||||
addObservers: function(element) {
|
||||
Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
|
||||
Event.observe(element, "click", this.onClick.bindAsEventListener(this));
|
||||
},
|
||||
|
||||
onObserverEvent: function() {
|
||||
this.changed = false;
|
||||
if(this.getToken().length>=this.options.minChars) {
|
||||
this.startIndicator();
|
||||
this.getUpdatedChoices();
|
||||
} else {
|
||||
this.active = false;
|
||||
this.hide();
|
||||
}
|
||||
},
|
||||
|
||||
getToken: function() {
|
||||
var tokenPos = this.findLastToken();
|
||||
if (tokenPos != -1)
|
||||
var ret = this.element.value.substr(tokenPos + 1).replace(/^\s+/,'').replace(/\s+$/,'');
|
||||
else
|
||||
var ret = this.element.value;
|
||||
|
||||
return /\n/.test(ret) ? '' : ret;
|
||||
},
|
||||
|
||||
findLastToken: function() {
|
||||
var lastTokenPos = -1;
|
||||
|
||||
for (var i=0; i<this.options.tokens.length; i++) {
|
||||
var thisTokenPos = this.element.value.lastIndexOf(this.options.tokens[i]);
|
||||
if (thisTokenPos > lastTokenPos)
|
||||
lastTokenPos = thisTokenPos;
|
||||
}
|
||||
return lastTokenPos;
|
||||
}
|
||||
}
|
||||
|
||||
Ajax.Autocompleter = Class.create();
|
||||
Object.extend(Object.extend(Ajax.Autocompleter.prototype, Autocompleter.Base.prototype), {
|
||||
initialize: function(element, update, url, options) {
|
||||
this.baseInitialize(element, update, options);
|
||||
this.options.asynchronous = true;
|
||||
this.options.onComplete = this.onComplete.bind(this);
|
||||
this.options.defaultParams = this.options.parameters || null;
|
||||
this.url = url;
|
||||
},
|
||||
|
||||
getUpdatedChoices: function() {
|
||||
entry = encodeURIComponent(this.options.paramName) + '=' +
|
||||
encodeURIComponent(this.getToken());
|
||||
|
||||
this.options.parameters = this.options.callback ?
|
||||
this.options.callback(this.element, entry) : entry;
|
||||
|
||||
if(this.options.defaultParams)
|
||||
this.options.parameters += '&' + this.options.defaultParams;
|
||||
|
||||
new Ajax.Request(this.url, this.options);
|
||||
},
|
||||
|
||||
onComplete: function(request) {
|
||||
this.updateChoices(request.responseText);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
// The local array autocompleter. Used when you'd prefer to
|
||||
// inject an array of autocompletion options into the page, rather
|
||||
// than sending out Ajax queries, which can be quite slow sometimes.
|
||||
//
|
||||
// The constructor takes four parameters. The first two are, as usual,
|
||||
// the id of the monitored textbox, and id of the autocompletion menu.
|
||||
// The third is the array you want to autocomplete from, and the fourth
|
||||
// is the options block.
|
||||
//
|
||||
// Extra local autocompletion options:
|
||||
// - choices - How many autocompletion choices to offer
|
||||
//
|
||||
// - partialSearch - If false, the autocompleter will match entered
|
||||
// text only at the beginning of strings in the
|
||||
// autocomplete array. Defaults to true, which will
|
||||
// match text at the beginning of any *word* in the
|
||||
// strings in the autocomplete array. If you want to
|
||||
// search anywhere in the string, additionally set
|
||||
// the option fullSearch to true (default: off).
|
||||
//
|
||||
// - fullSsearch - Search anywhere in autocomplete array strings.
|
||||
//
|
||||
// - partialChars - How many characters to enter before triggering
|
||||
// a partial match (unlike minChars, which defines
|
||||
// how many characters are required to do any match
|
||||
// at all). Defaults to 2.
|
||||
//
|
||||
// - ignoreCase - Whether to ignore case when autocompleting.
|
||||
// Defaults to true.
|
||||
//
|
||||
// It's possible to pass in a custom function as the 'selector'
|
||||
// option, if you prefer to write your own autocompletion logic.
|
||||
// In that case, the other options above will not apply unless
|
||||
// you support them.
|
||||
|
||||
Autocompleter.Local = Class.create();
|
||||
Autocompleter.Local.prototype = Object.extend(new Autocompleter.Base(), {
|
||||
initialize: function(element, update, array, options) {
|
||||
this.baseInitialize(element, update, options);
|
||||
this.options.array = array;
|
||||
},
|
||||
|
||||
getUpdatedChoices: function() {
|
||||
this.updateChoices(this.options.selector(this));
|
||||
},
|
||||
|
||||
setOptions: function(options) {
|
||||
this.options = Object.extend({
|
||||
choices: 10,
|
||||
partialSearch: true,
|
||||
partialChars: 2,
|
||||
ignoreCase: true,
|
||||
fullSearch: false,
|
||||
selector: function(instance) {
|
||||
var ret = []; // Beginning matches
|
||||
var partial = []; // Inside matches
|
||||
var entry = instance.getToken();
|
||||
var count = 0;
|
||||
|
||||
for (var i = 0; i < instance.options.array.length &&
|
||||
ret.length < instance.options.choices ; i++) {
|
||||
|
||||
var elem = instance.options.array[i];
|
||||
var foundPos = instance.options.ignoreCase ?
|
||||
elem.toLowerCase().indexOf(entry.toLowerCase()) :
|
||||
elem.indexOf(entry);
|
||||
|
||||
while (foundPos != -1) {
|
||||
if (foundPos == 0 && elem.length != entry.length) {
|
||||
ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" +
|
||||
elem.substr(entry.length) + "</li>");
|
||||
break;
|
||||
} else if (entry.length >= instance.options.partialChars &&
|
||||
instance.options.partialSearch && foundPos != -1) {
|
||||
if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
|
||||
partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
|
||||
elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
|
||||
foundPos + entry.length) + "</li>");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
foundPos = instance.options.ignoreCase ?
|
||||
elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) :
|
||||
elem.indexOf(entry, foundPos + 1);
|
||||
|
||||
}
|
||||
}
|
||||
if (partial.length)
|
||||
ret = ret.concat(partial.slice(0, instance.options.choices - ret.length))
|
||||
return "<ul>" + ret.join('') + "</ul>";
|
||||
}
|
||||
}, options || {});
|
||||
}
|
||||
});
|
||||
|
||||
// AJAX in-place editor
|
||||
//
|
||||
// see documentation on http://wiki.script.aculo.us/scriptaculous/show/Ajax.InPlaceEditor
|
||||
|
||||
// Use this if you notice weird scrolling problems on some browsers,
|
||||
// the DOM might be a bit confused when this gets called so do this
|
||||
// waits 1 ms (with setTimeout) until it does the activation
|
||||
Field.scrollFreeActivate = function(field) {
|
||||
setTimeout(function() {
|
||||
Field.activate(field);
|
||||
}, 1);
|
||||
}
|
||||
|
||||
Ajax.InPlaceEditor = Class.create();
|
||||
Ajax.InPlaceEditor.defaultHighlightColor = "#FFFF99";
|
||||
Ajax.InPlaceEditor.prototype = {
|
||||
initialize: function(element, url, options) {
|
||||
this.url = url;
|
||||
this.element = $(element);
|
||||
|
||||
this.options = Object.extend({
|
||||
okButton: true,
|
||||
okText: "ok",
|
||||
cancelLink: true,
|
||||
cancelText: "cancel",
|
||||
savingText: "Saving...",
|
||||
clickToEditText: "Click to edit",
|
||||
okText: "ok",
|
||||
rows: 1,
|
||||
onComplete: function(transport, element) {
|
||||
new Effect.Highlight(element, {startcolor: this.options.highlightcolor});
|
||||
},
|
||||
onFailure: function(transport) {
|
||||
alert("Error communicating with the server: " + transport.responseText.stripTags());
|
||||
},
|
||||
callback: function(form) {
|
||||
return Form.serialize(form);
|
||||
},
|
||||
handleLineBreaks: true,
|
||||
loadingText: 'Loading...',
|
||||
savingClassName: 'inplaceeditor-saving',
|
||||
loadingClassName: 'inplaceeditor-loading',
|
||||
formClassName: 'inplaceeditor-form',
|
||||
highlightcolor: Ajax.InPlaceEditor.defaultHighlightColor,
|
||||
highlightendcolor: "#FFFFFF",
|
||||
externalControl: null,
|
||||
submitOnBlur: false,
|
||||
ajaxOptions: {},
|
||||
evalScripts: false
|
||||
}, options || {});
|
||||
|
||||
if(!this.options.formId && this.element.id) {
|
||||
this.options.formId = this.element.id + "-inplaceeditor";
|
||||
if ($(this.options.formId)) {
|
||||
// there's already a form with that name, don't specify an id
|
||||
this.options.formId = null;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.options.externalControl) {
|
||||
this.options.externalControl = $(this.options.externalControl);
|
||||
}
|
||||
|
||||
this.originalBackground = Element.getStyle(this.element, 'background-color');
|
||||
if (!this.originalBackground) {
|
||||
this.originalBackground = "transparent";
|
||||
}
|
||||
|
||||
this.element.title = this.options.clickToEditText;
|
||||
|
||||
this.onclickListener = this.enterEditMode.bindAsEventListener(this);
|
||||
this.mouseoverListener = this.enterHover.bindAsEventListener(this);
|
||||
this.mouseoutListener = this.leaveHover.bindAsEventListener(this);
|
||||
Event.observe(this.element, 'click', this.onclickListener);
|
||||
Event.observe(this.element, 'mouseover', this.mouseoverListener);
|
||||
Event.observe(this.element, 'mouseout', this.mouseoutListener);
|
||||
if (this.options.externalControl) {
|
||||
Event.observe(this.options.externalControl, 'click', this.onclickListener);
|
||||
Event.observe(this.options.externalControl, 'mouseover', this.mouseoverListener);
|
||||
Event.observe(this.options.externalControl, 'mouseout', this.mouseoutListener);
|
||||
}
|
||||
},
|
||||
enterEditMode: function(evt) {
|
||||
if (this.saving) return;
|
||||
if (this.editing) return;
|
||||
this.editing = true;
|
||||
this.onEnterEditMode();
|
||||
if (this.options.externalControl) {
|
||||
Element.hide(this.options.externalControl);
|
||||
}
|
||||
Element.hide(this.element);
|
||||
this.createForm();
|
||||
this.element.parentNode.insertBefore(this.form, this.element);
|
||||
Field.scrollFreeActivate(this.editField);
|
||||
// stop the event to avoid a page refresh in Safari
|
||||
if (evt) {
|
||||
Event.stop(evt);
|
||||
}
|
||||
return false;
|
||||
},
|
||||
createForm: function() {
|
||||
this.form = document.createElement("form");
|
||||
this.form.id = this.options.formId;
|
||||
Element.addClassName(this.form, this.options.formClassName)
|
||||
this.form.onsubmit = this.onSubmit.bind(this);
|
||||
|
||||
this.createEditField();
|
||||
|
||||
if (this.options.textarea) {
|
||||
var br = document.createElement("br");
|
||||
this.form.appendChild(br);
|
||||
}
|
||||
|
||||
if (this.options.okButton) {
|
||||
okButton = document.createElement("input");
|
||||
okButton.type = "submit";
|
||||
okButton.value = this.options.okText;
|
||||
okButton.className = 'editor_ok_button';
|
||||
this.form.appendChild(okButton);
|
||||
}
|
||||
|
||||
if (this.options.cancelLink) {
|
||||
cancelLink = document.createElement("a");
|
||||
cancelLink.href = "#";
|
||||
cancelLink.appendChild(document.createTextNode(this.options.cancelText));
|
||||
cancelLink.onclick = this.onclickCancel.bind(this);
|
||||
cancelLink.className = 'editor_cancel';
|
||||
this.form.appendChild(cancelLink);
|
||||
}
|
||||
},
|
||||
hasHTMLLineBreaks: function(string) {
|
||||
if (!this.options.handleLineBreaks) return false;
|
||||
return string.match(/<br/i) || string.match(/<p>/i);
|
||||
},
|
||||
convertHTMLLineBreaks: function(string) {
|
||||
return string.replace(/<br>/gi, "\n").replace(/<br\/>/gi, "\n").replace(/<\/p>/gi, "\n").replace(/<p>/gi, "");
|
||||
},
|
||||
createEditField: function() {
|
||||
var text;
|
||||
if(this.options.loadTextURL) {
|
||||
text = this.options.loadingText;
|
||||
} else {
|
||||
text = this.getText();
|
||||
}
|
||||
|
||||
var obj = this;
|
||||
|
||||
if (this.options.rows == 1 && !this.hasHTMLLineBreaks(text)) {
|
||||
this.options.textarea = false;
|
||||
var textField = document.createElement("input");
|
||||
textField.obj = this;
|
||||
textField.type = "text";
|
||||
textField.name = "value";
|
||||
textField.value = text;
|
||||
textField.style.backgroundColor = this.options.highlightcolor;
|
||||
textField.className = 'editor_field';
|
||||
var size = this.options.size || this.options.cols || 0;
|
||||
if (size != 0) textField.size = size;
|
||||
if (this.options.submitOnBlur)
|
||||
textField.onblur = this.onSubmit.bind(this);
|
||||
this.editField = textField;
|
||||
} else {
|
||||
this.options.textarea = true;
|
||||
var textArea = document.createElement("textarea");
|
||||
textArea.obj = this;
|
||||
textArea.name = "value";
|
||||
textArea.value = this.convertHTMLLineBreaks(text);
|
||||
textArea.rows = this.options.rows;
|
||||
textArea.cols = this.options.cols || 40;
|
||||
textArea.className = 'editor_field';
|
||||
if (this.options.submitOnBlur)
|
||||
textArea.onblur = this.onSubmit.bind(this);
|
||||
this.editField = textArea;
|
||||
}
|
||||
|
||||
if(this.options.loadTextURL) {
|
||||
this.loadExternalText();
|
||||
}
|
||||
this.form.appendChild(this.editField);
|
||||
},
|
||||
getText: function() {
|
||||
return this.element.innerHTML;
|
||||
},
|
||||
loadExternalText: function() {
|
||||
Element.addClassName(this.form, this.options.loadingClassName);
|
||||
this.editField.disabled = true;
|
||||
new Ajax.Request(
|
||||
this.options.loadTextURL,
|
||||
Object.extend({
|
||||
asynchronous: true,
|
||||
onComplete: this.onLoadedExternalText.bind(this)
|
||||
}, this.options.ajaxOptions)
|
||||
);
|
||||
},
|
||||
onLoadedExternalText: function(transport) {
|
||||
Element.removeClassName(this.form, this.options.loadingClassName);
|
||||
this.editField.disabled = false;
|
||||
this.editField.value = transport.responseText.stripTags();
|
||||
},
|
||||
onclickCancel: function() {
|
||||
this.onComplete();
|
||||
this.leaveEditMode();
|
||||
return false;
|
||||
},
|
||||
onFailure: function(transport) {
|
||||
this.options.onFailure(transport);
|
||||
if (this.oldInnerHTML) {
|
||||
this.element.innerHTML = this.oldInnerHTML;
|
||||
this.oldInnerHTML = null;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
onSubmit: function() {
|
||||
// onLoading resets these so we need to save them away for the Ajax call
|
||||
var form = this.form;
|
||||
var value = this.editField.value;
|
||||
|
||||
// do this first, sometimes the ajax call returns before we get a chance to switch on Saving...
|
||||
// which means this will actually switch on Saving... *after* we've left edit mode causing Saving...
|
||||
// to be displayed indefinitely
|
||||
this.onLoading();
|
||||
|
||||
if (this.options.evalScripts) {
|
||||
new Ajax.Request(
|
||||
this.url, Object.extend({
|
||||
parameters: this.options.callback(form, value),
|
||||
onComplete: this.onComplete.bind(this),
|
||||
onFailure: this.onFailure.bind(this),
|
||||
asynchronous:true,
|
||||
evalScripts:true
|
||||
}, this.options.ajaxOptions));
|
||||
} else {
|
||||
new Ajax.Updater(
|
||||
{ success: this.element,
|
||||
// don't update on failure (this could be an option)
|
||||
failure: null },
|
||||
this.url, Object.extend({
|
||||
parameters: this.options.callback(form, value),
|
||||
onComplete: this.onComplete.bind(this),
|
||||
onFailure: this.onFailure.bind(this)
|
||||
}, this.options.ajaxOptions));
|
||||
}
|
||||
// stop the event to avoid a page refresh in Safari
|
||||
if (arguments.length > 1) {
|
||||
Event.stop(arguments[0]);
|
||||
}
|
||||
return false;
|
||||
},
|
||||
onLoading: function() {
|
||||
this.saving = true;
|
||||
this.removeForm();
|
||||
this.leaveHover();
|
||||
this.showSaving();
|
||||
},
|
||||
showSaving: function() {
|
||||
this.oldInnerHTML = this.element.innerHTML;
|
||||
this.element.innerHTML = this.options.savingText;
|
||||
Element.addClassName(this.element, this.options.savingClassName);
|
||||
this.element.style.backgroundColor = this.originalBackground;
|
||||
Element.show(this.element);
|
||||
},
|
||||
removeForm: function() {
|
||||
if(this.form) {
|
||||
if (this.form.parentNode) Element.remove(this.form);
|
||||
this.form = null;
|
||||
}
|
||||
},
|
||||
enterHover: function() {
|
||||
if (this.saving) return;
|
||||
this.element.style.backgroundColor = this.options.highlightcolor;
|
||||
if (this.effect) {
|
||||
this.effect.cancel();
|
||||
}
|
||||
Element.addClassName(this.element, this.options.hoverClassName)
|
||||
},
|
||||
leaveHover: function() {
|
||||
if (this.options.backgroundColor) {
|
||||
this.element.style.backgroundColor = this.oldBackground;
|
||||
}
|
||||
Element.removeClassName(this.element, this.options.hoverClassName)
|
||||
if (this.saving) return;
|
||||
this.effect = new Effect.Highlight(this.element, {
|
||||
startcolor: this.options.highlightcolor,
|
||||
endcolor: this.options.highlightendcolor,
|
||||
restorecolor: this.originalBackground
|
||||
});
|
||||
},
|
||||
leaveEditMode: function() {
|
||||
Element.removeClassName(this.element, this.options.savingClassName);
|
||||
this.removeForm();
|
||||
this.leaveHover();
|
||||
this.element.style.backgroundColor = this.originalBackground;
|
||||
Element.show(this.element);
|
||||
if (this.options.externalControl) {
|
||||
Element.show(this.options.externalControl);
|
||||
}
|
||||
this.editing = false;
|
||||
this.saving = false;
|
||||
this.oldInnerHTML = null;
|
||||
this.onLeaveEditMode();
|
||||
},
|
||||
onComplete: function(transport) {
|
||||
this.leaveEditMode();
|
||||
this.options.onComplete.bind(this)(transport, this.element);
|
||||
},
|
||||
onEnterEditMode: function() {},
|
||||
onLeaveEditMode: function() {},
|
||||
dispose: function() {
|
||||
if (this.oldInnerHTML) {
|
||||
this.element.innerHTML = this.oldInnerHTML;
|
||||
}
|
||||
this.leaveEditMode();
|
||||
Event.stopObserving(this.element, 'click', this.onclickListener);
|
||||
Event.stopObserving(this.element, 'mouseover', this.mouseoverListener);
|
||||
Event.stopObserving(this.element, 'mouseout', this.mouseoutListener);
|
||||
if (this.options.externalControl) {
|
||||
Event.stopObserving(this.options.externalControl, 'click', this.onclickListener);
|
||||
Event.stopObserving(this.options.externalControl, 'mouseover', this.mouseoverListener);
|
||||
Event.stopObserving(this.options.externalControl, 'mouseout', this.mouseoutListener);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Ajax.InPlaceCollectionEditor = Class.create();
|
||||
Object.extend(Ajax.InPlaceCollectionEditor.prototype, Ajax.InPlaceEditor.prototype);
|
||||
Object.extend(Ajax.InPlaceCollectionEditor.prototype, {
|
||||
createEditField: function() {
|
||||
if (!this.cached_selectTag) {
|
||||
var selectTag = document.createElement("select");
|
||||
var collection = this.options.collection || [];
|
||||
var optionTag;
|
||||
collection.each(function(e,i) {
|
||||
optionTag = document.createElement("option");
|
||||
optionTag.value = (e instanceof Array) ? e[0] : e;
|
||||
if(this.options.value==optionTag.value) optionTag.selected = true;
|
||||
optionTag.appendChild(document.createTextNode((e instanceof Array) ? e[1] : e));
|
||||
selectTag.appendChild(optionTag);
|
||||
}.bind(this));
|
||||
this.cached_selectTag = selectTag;
|
||||
}
|
||||
|
||||
this.editField = this.cached_selectTag;
|
||||
if(this.options.loadTextURL) this.loadExternalText();
|
||||
this.form.appendChild(this.editField);
|
||||
this.options.callback = function(form, value) {
|
||||
return "value=" + encodeURIComponent(value);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Delayed observer, like Form.Element.Observer,
|
||||
// but waits for delay after last key input
|
||||
// Ideal for live-search fields
|
||||
|
||||
Form.Element.DelayedObserver = Class.create();
|
||||
Form.Element.DelayedObserver.prototype = {
|
||||
initialize: function(element, delay, callback) {
|
||||
this.delay = delay || 0.5;
|
||||
this.element = $(element);
|
||||
this.callback = callback;
|
||||
this.timer = null;
|
||||
this.lastValue = $F(this.element);
|
||||
Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
|
||||
},
|
||||
delayedListener: function(event) {
|
||||
if(this.lastValue == $F(this.element)) return;
|
||||
if(this.timer) clearTimeout(this.timer);
|
||||
this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
|
||||
this.lastValue = $F(this.element);
|
||||
},
|
||||
onTimerEvent: function() {
|
||||
this.timer = null;
|
||||
this.callback(this.element, $F(this.element));
|
||||
}
|
||||
};
|
||||
915
mozilla/java/plugins/examples/style/dragdrop.js
vendored
Executable file
@@ -0,0 +1,915 @@
|
||||
// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
|
||||
// (c) 2005 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz)
|
||||
//
|
||||
// See scriptaculous.js for full license.
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
var Droppables = {
|
||||
drops: [],
|
||||
|
||||
remove: function(element) {
|
||||
this.drops = this.drops.reject(function(d) { return d.element==$(element) });
|
||||
},
|
||||
|
||||
add: function(element) {
|
||||
element = $(element);
|
||||
var options = Object.extend({
|
||||
greedy: true,
|
||||
hoverclass: null,
|
||||
tree: false
|
||||
}, arguments[1] || {});
|
||||
|
||||
// cache containers
|
||||
if(options.containment) {
|
||||
options._containers = [];
|
||||
var containment = options.containment;
|
||||
if((typeof containment == 'object') &&
|
||||
(containment.constructor == Array)) {
|
||||
containment.each( function(c) { options._containers.push($(c)) });
|
||||
} else {
|
||||
options._containers.push($(containment));
|
||||
}
|
||||
}
|
||||
|
||||
if(options.accept) options.accept = [options.accept].flatten();
|
||||
|
||||
Element.makePositioned(element); // fix IE
|
||||
options.element = element;
|
||||
|
||||
this.drops.push(options);
|
||||
},
|
||||
|
||||
findDeepestChild: function(drops) {
|
||||
deepest = drops[0];
|
||||
|
||||
for (i = 1; i < drops.length; ++i)
|
||||
if (Element.isParent(drops[i].element, deepest.element))
|
||||
deepest = drops[i];
|
||||
|
||||
return deepest;
|
||||
},
|
||||
|
||||
isContained: function(element, drop) {
|
||||
var containmentNode;
|
||||
if(drop.tree) {
|
||||
containmentNode = element.treeNode;
|
||||
} else {
|
||||
containmentNode = element.parentNode;
|
||||
}
|
||||
return drop._containers.detect(function(c) { return containmentNode == c });
|
||||
},
|
||||
|
||||
isAffected: function(point, element, drop) {
|
||||
return (
|
||||
(drop.element!=element) &&
|
||||
((!drop._containers) ||
|
||||
this.isContained(element, drop)) &&
|
||||
((!drop.accept) ||
|
||||
(Element.classNames(element).detect(
|
||||
function(v) { return drop.accept.include(v) } ) )) &&
|
||||
Position.within(drop.element, point[0], point[1]) );
|
||||
},
|
||||
|
||||
deactivate: function(drop) {
|
||||
if(drop.hoverclass)
|
||||
Element.removeClassName(drop.element, drop.hoverclass);
|
||||
this.last_active = null;
|
||||
},
|
||||
|
||||
activate: function(drop) {
|
||||
if(drop.hoverclass)
|
||||
Element.addClassName(drop.element, drop.hoverclass);
|
||||
this.last_active = drop;
|
||||
},
|
||||
|
||||
show: function(point, element) {
|
||||
if(!this.drops.length) return;
|
||||
var affected = [];
|
||||
|
||||
if(this.last_active) this.deactivate(this.last_active);
|
||||
this.drops.each( function(drop) {
|
||||
if(Droppables.isAffected(point, element, drop))
|
||||
affected.push(drop);
|
||||
});
|
||||
|
||||
if(affected.length>0) {
|
||||
drop = Droppables.findDeepestChild(affected);
|
||||
Position.within(drop.element, point[0], point[1]);
|
||||
if(drop.onHover)
|
||||
drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
|
||||
|
||||
Droppables.activate(drop);
|
||||
}
|
||||
},
|
||||
|
||||
fire: function(event, element) {
|
||||
if(!this.last_active) return;
|
||||
Position.prepare();
|
||||
|
||||
if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
|
||||
if (this.last_active.onDrop)
|
||||
this.last_active.onDrop(element, this.last_active.element, event);
|
||||
},
|
||||
|
||||
reset: function() {
|
||||
if(this.last_active)
|
||||
this.deactivate(this.last_active);
|
||||
}
|
||||
}
|
||||
|
||||
var Draggables = {
|
||||
drags: [],
|
||||
observers: [],
|
||||
|
||||
register: function(draggable) {
|
||||
if(this.drags.length == 0) {
|
||||
this.eventMouseUp = this.endDrag.bindAsEventListener(this);
|
||||
this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
|
||||
this.eventKeypress = this.keyPress.bindAsEventListener(this);
|
||||
|
||||
Event.observe(document, "mouseup", this.eventMouseUp);
|
||||
Event.observe(document, "mousemove", this.eventMouseMove);
|
||||
Event.observe(document, "keypress", this.eventKeypress);
|
||||
}
|
||||
this.drags.push(draggable);
|
||||
},
|
||||
|
||||
unregister: function(draggable) {
|
||||
this.drags = this.drags.reject(function(d) { return d==draggable });
|
||||
if(this.drags.length == 0) {
|
||||
Event.stopObserving(document, "mouseup", this.eventMouseUp);
|
||||
Event.stopObserving(document, "mousemove", this.eventMouseMove);
|
||||
Event.stopObserving(document, "keypress", this.eventKeypress);
|
||||
}
|
||||
},
|
||||
|
||||
activate: function(draggable) {
|
||||
window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
|
||||
this.activeDraggable = draggable;
|
||||
},
|
||||
|
||||
deactivate: function() {
|
||||
this.activeDraggable = null;
|
||||
},
|
||||
|
||||
updateDrag: function(event) {
|
||||
if(!this.activeDraggable) return;
|
||||
var pointer = [Event.pointerX(event), Event.pointerY(event)];
|
||||
// Mozilla-based browsers fire successive mousemove events with
|
||||
// the same coordinates, prevent needless redrawing (moz bug?)
|
||||
if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
|
||||
this._lastPointer = pointer;
|
||||
this.activeDraggable.updateDrag(event, pointer);
|
||||
},
|
||||
|
||||
endDrag: function(event) {
|
||||
if(!this.activeDraggable) return;
|
||||
this._lastPointer = null;
|
||||
this.activeDraggable.endDrag(event);
|
||||
this.activeDraggable = null;
|
||||
},
|
||||
|
||||
keyPress: function(event) {
|
||||
if(this.activeDraggable)
|
||||
this.activeDraggable.keyPress(event);
|
||||
},
|
||||
|
||||
addObserver: function(observer) {
|
||||
this.observers.push(observer);
|
||||
this._cacheObserverCallbacks();
|
||||
},
|
||||
|
||||
removeObserver: function(element) { // element instead of observer fixes mem leaks
|
||||
this.observers = this.observers.reject( function(o) { return o.element==element });
|
||||
this._cacheObserverCallbacks();
|
||||
},
|
||||
|
||||
notify: function(eventName, draggable, event) { // 'onStart', 'onEnd', 'onDrag'
|
||||
if(this[eventName+'Count'] > 0)
|
||||
this.observers.each( function(o) {
|
||||
if(o[eventName]) o[eventName](eventName, draggable, event);
|
||||
});
|
||||
},
|
||||
|
||||
_cacheObserverCallbacks: function() {
|
||||
['onStart','onEnd','onDrag'].each( function(eventName) {
|
||||
Draggables[eventName+'Count'] = Draggables.observers.select(
|
||||
function(o) { return o[eventName]; }
|
||||
).length;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
var Draggable = Class.create();
|
||||
Draggable.prototype = {
|
||||
initialize: function(element) {
|
||||
var options = Object.extend({
|
||||
handle: false,
|
||||
starteffect: function(element) {
|
||||
element._opacity = Element.getOpacity(element);
|
||||
new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7});
|
||||
},
|
||||
reverteffect: function(element, top_offset, left_offset) {
|
||||
var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
|
||||
element._revert = new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur});
|
||||
},
|
||||
endeffect: function(element) {
|
||||
var toOpacity = typeof element._opacity == 'number' ? element._opacity : 1.0
|
||||
new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity});
|
||||
},
|
||||
zindex: 1000,
|
||||
revert: false,
|
||||
scroll: false,
|
||||
scrollSensitivity: 20,
|
||||
scrollSpeed: 15,
|
||||
snap: false // false, or xy or [x,y] or function(x,y){ return [x,y] }
|
||||
}, arguments[1] || {});
|
||||
|
||||
this.element = $(element);
|
||||
|
||||
if(options.handle && (typeof options.handle == 'string')) {
|
||||
var h = Element.childrenWithClassName(this.element, options.handle, true);
|
||||
if(h.length>0) this.handle = h[0];
|
||||
}
|
||||
if(!this.handle) this.handle = $(options.handle);
|
||||
if(!this.handle) this.handle = this.element;
|
||||
|
||||
if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML)
|
||||
options.scroll = $(options.scroll);
|
||||
|
||||
Element.makePositioned(this.element); // fix IE
|
||||
|
||||
this.delta = this.currentDelta();
|
||||
this.options = options;
|
||||
this.dragging = false;
|
||||
|
||||
this.eventMouseDown = this.initDrag.bindAsEventListener(this);
|
||||
Event.observe(this.handle, "mousedown", this.eventMouseDown);
|
||||
|
||||
Draggables.register(this);
|
||||
},
|
||||
|
||||
destroy: function() {
|
||||
Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
|
||||
Draggables.unregister(this);
|
||||
},
|
||||
|
||||
currentDelta: function() {
|
||||
return([
|
||||
parseInt(Element.getStyle(this.element,'left') || '0'),
|
||||
parseInt(Element.getStyle(this.element,'top') || '0')]);
|
||||
},
|
||||
|
||||
initDrag: function(event) {
|
||||
if(Event.isLeftClick(event)) {
|
||||
// abort on form elements, fixes a Firefox issue
|
||||
var src = Event.element(event);
|
||||
if(src.tagName && (
|
||||
src.tagName=='INPUT' ||
|
||||
src.tagName=='SELECT' ||
|
||||
src.tagName=='OPTION' ||
|
||||
src.tagName=='BUTTON' ||
|
||||
src.tagName=='TEXTAREA')) return;
|
||||
|
||||
if(this.element._revert) {
|
||||
this.element._revert.cancel();
|
||||
this.element._revert = null;
|
||||
}
|
||||
|
||||
var pointer = [Event.pointerX(event), Event.pointerY(event)];
|
||||
var pos = Position.cumulativeOffset(this.element);
|
||||
this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });
|
||||
|
||||
Draggables.activate(this);
|
||||
Event.stop(event);
|
||||
}
|
||||
},
|
||||
|
||||
startDrag: function(event) {
|
||||
this.dragging = true;
|
||||
|
||||
if(this.options.zindex) {
|
||||
this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
|
||||
this.element.style.zIndex = this.options.zindex;
|
||||
}
|
||||
|
||||
if(this.options.ghosting) {
|
||||
this._clone = this.element.cloneNode(true);
|
||||
Position.absolutize(this.element);
|
||||
this.element.parentNode.insertBefore(this._clone, this.element);
|
||||
}
|
||||
|
||||
if(this.options.scroll) {
|
||||
if (this.options.scroll == window) {
|
||||
var where = this._getWindowScroll(this.options.scroll);
|
||||
this.originalScrollLeft = where.left;
|
||||
this.originalScrollTop = where.top;
|
||||
} else {
|
||||
this.originalScrollLeft = this.options.scroll.scrollLeft;
|
||||
this.originalScrollTop = this.options.scroll.scrollTop;
|
||||
}
|
||||
}
|
||||
|
||||
Draggables.notify('onStart', this, event);
|
||||
if(this.options.starteffect) this.options.starteffect(this.element);
|
||||
},
|
||||
|
||||
updateDrag: function(event, pointer) {
|
||||
if(!this.dragging) this.startDrag(event);
|
||||
Position.prepare();
|
||||
Droppables.show(pointer, this.element);
|
||||
Draggables.notify('onDrag', this, event);
|
||||
this.draw(pointer);
|
||||
if(this.options.change) this.options.change(this);
|
||||
|
||||
if(this.options.scroll) {
|
||||
this.stopScrolling();
|
||||
|
||||
var p;
|
||||
if (this.options.scroll == window) {
|
||||
with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; }
|
||||
} else {
|
||||
p = Position.page(this.options.scroll);
|
||||
p[0] += this.options.scroll.scrollLeft;
|
||||
p[1] += this.options.scroll.scrollTop;
|
||||
p.push(p[0]+this.options.scroll.offsetWidth);
|
||||
p.push(p[1]+this.options.scroll.offsetHeight);
|
||||
}
|
||||
var speed = [0,0];
|
||||
if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity);
|
||||
if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity);
|
||||
if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity);
|
||||
if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity);
|
||||
this.startScrolling(speed);
|
||||
}
|
||||
|
||||
// fix AppleWebKit rendering
|
||||
if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
|
||||
|
||||
Event.stop(event);
|
||||
},
|
||||
|
||||
finishDrag: function(event, success) {
|
||||
this.dragging = false;
|
||||
|
||||
if(this.options.ghosting) {
|
||||
Position.relativize(this.element);
|
||||
Element.remove(this._clone);
|
||||
this._clone = null;
|
||||
}
|
||||
|
||||
if(success) Droppables.fire(event, this.element);
|
||||
Draggables.notify('onEnd', this, event);
|
||||
|
||||
var revert = this.options.revert;
|
||||
if(revert && typeof revert == 'function') revert = revert(this.element);
|
||||
|
||||
var d = this.currentDelta();
|
||||
if(revert && this.options.reverteffect) {
|
||||
this.options.reverteffect(this.element,
|
||||
d[1]-this.delta[1], d[0]-this.delta[0]);
|
||||
} else {
|
||||
this.delta = d;
|
||||
}
|
||||
|
||||
if(this.options.zindex)
|
||||
this.element.style.zIndex = this.originalZ;
|
||||
|
||||
if(this.options.endeffect)
|
||||
this.options.endeffect(this.element);
|
||||
|
||||
Draggables.deactivate(this);
|
||||
Droppables.reset();
|
||||
},
|
||||
|
||||
keyPress: function(event) {
|
||||
if(event.keyCode!=Event.KEY_ESC) return;
|
||||
this.finishDrag(event, false);
|
||||
Event.stop(event);
|
||||
},
|
||||
|
||||
endDrag: function(event) {
|
||||
if(!this.dragging) return;
|
||||
this.stopScrolling();
|
||||
this.finishDrag(event, true);
|
||||
Event.stop(event);
|
||||
},
|
||||
|
||||
draw: function(point) {
|
||||
var pos = Position.cumulativeOffset(this.element);
|
||||
var d = this.currentDelta();
|
||||
pos[0] -= d[0]; pos[1] -= d[1];
|
||||
|
||||
if(this.options.scroll && (this.options.scroll != window)) {
|
||||
pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft;
|
||||
pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop;
|
||||
}
|
||||
|
||||
var p = [0,1].map(function(i){
|
||||
return (point[i]-pos[i]-this.offset[i])
|
||||
}.bind(this));
|
||||
|
||||
if(this.options.snap) {
|
||||
if(typeof this.options.snap == 'function') {
|
||||
p = this.options.snap(p[0],p[1],this);
|
||||
} else {
|
||||
if(this.options.snap instanceof Array) {
|
||||
p = p.map( function(v, i) {
|
||||
return Math.round(v/this.options.snap[i])*this.options.snap[i] }.bind(this))
|
||||
} else {
|
||||
p = p.map( function(v) {
|
||||
return Math.round(v/this.options.snap)*this.options.snap }.bind(this))
|
||||
}
|
||||
}}
|
||||
|
||||
var style = this.element.style;
|
||||
if((!this.options.constraint) || (this.options.constraint=='horizontal'))
|
||||
style.left = p[0] + "px";
|
||||
if((!this.options.constraint) || (this.options.constraint=='vertical'))
|
||||
style.top = p[1] + "px";
|
||||
if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
|
||||
},
|
||||
|
||||
stopScrolling: function() {
|
||||
if(this.scrollInterval) {
|
||||
clearInterval(this.scrollInterval);
|
||||
this.scrollInterval = null;
|
||||
Draggables._lastScrollPointer = null;
|
||||
}
|
||||
},
|
||||
|
||||
startScrolling: function(speed) {
|
||||
this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];
|
||||
this.lastScrolled = new Date();
|
||||
this.scrollInterval = setInterval(this.scroll.bind(this), 10);
|
||||
},
|
||||
|
||||
scroll: function() {
|
||||
var current = new Date();
|
||||
var delta = current - this.lastScrolled;
|
||||
this.lastScrolled = current;
|
||||
if(this.options.scroll == window) {
|
||||
with (this._getWindowScroll(this.options.scroll)) {
|
||||
if (this.scrollSpeed[0] || this.scrollSpeed[1]) {
|
||||
var d = delta / 1000;
|
||||
this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] );
|
||||
}
|
||||
}
|
||||
} else {
|
||||
this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000;
|
||||
this.options.scroll.scrollTop += this.scrollSpeed[1] * delta / 1000;
|
||||
}
|
||||
|
||||
Position.prepare();
|
||||
Droppables.show(Draggables._lastPointer, this.element);
|
||||
Draggables.notify('onDrag', this);
|
||||
Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer);
|
||||
Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000;
|
||||
Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000;
|
||||
if (Draggables._lastScrollPointer[0] < 0)
|
||||
Draggables._lastScrollPointer[0] = 0;
|
||||
if (Draggables._lastScrollPointer[1] < 0)
|
||||
Draggables._lastScrollPointer[1] = 0;
|
||||
this.draw(Draggables._lastScrollPointer);
|
||||
|
||||
if(this.options.change) this.options.change(this);
|
||||
},
|
||||
|
||||
_getWindowScroll: function(w) {
|
||||
var T, L, W, H;
|
||||
with (w.document) {
|
||||
if (w.document.documentElement && documentElement.scrollTop) {
|
||||
T = documentElement.scrollTop;
|
||||
L = documentElement.scrollLeft;
|
||||
} else if (w.document.body) {
|
||||
T = body.scrollTop;
|
||||
L = body.scrollLeft;
|
||||
}
|
||||
if (w.innerWidth) {
|
||||
W = w.innerWidth;
|
||||
H = w.innerHeight;
|
||||
} else if (w.document.documentElement && documentElement.clientWidth) {
|
||||
W = documentElement.clientWidth;
|
||||
H = documentElement.clientHeight;
|
||||
} else {
|
||||
W = body.offsetWidth;
|
||||
H = body.offsetHeight
|
||||
}
|
||||
}
|
||||
return { top: T, left: L, width: W, height: H };
|
||||
}
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
var SortableObserver = Class.create();
|
||||
SortableObserver.prototype = {
|
||||
initialize: function(element, observer) {
|
||||
this.element = $(element);
|
||||
this.observer = observer;
|
||||
this.lastValue = Sortable.serialize(this.element);
|
||||
},
|
||||
|
||||
onStart: function() {
|
||||
this.lastValue = Sortable.serialize(this.element);
|
||||
},
|
||||
|
||||
onEnd: function() {
|
||||
Sortable.unmark();
|
||||
if(this.lastValue != Sortable.serialize(this.element))
|
||||
this.observer(this.element)
|
||||
}
|
||||
}
|
||||
|
||||
var Sortable = {
|
||||
sortables: {},
|
||||
|
||||
_findRootElement: function(element) {
|
||||
while (element.tagName != "BODY") {
|
||||
if(element.id && Sortable.sortables[element.id]) return element;
|
||||
element = element.parentNode;
|
||||
}
|
||||
},
|
||||
|
||||
options: function(element) {
|
||||
element = Sortable._findRootElement($(element));
|
||||
if(!element) return;
|
||||
return Sortable.sortables[element.id];
|
||||
},
|
||||
|
||||
destroy: function(element){
|
||||
var s = Sortable.options(element);
|
||||
|
||||
if(s) {
|
||||
Draggables.removeObserver(s.element);
|
||||
s.droppables.each(function(d){ Droppables.remove(d) });
|
||||
s.draggables.invoke('destroy');
|
||||
|
||||
delete Sortable.sortables[s.element.id];
|
||||
}
|
||||
},
|
||||
|
||||
create: function(element) {
|
||||
element = $(element);
|
||||
var options = Object.extend({
|
||||
element: element,
|
||||
tag: 'li', // assumes li children, override with tag: 'tagname'
|
||||
dropOnEmpty: false,
|
||||
tree: false,
|
||||
treeTag: 'ul',
|
||||
overlap: 'vertical', // one of 'vertical', 'horizontal'
|
||||
constraint: 'vertical', // one of 'vertical', 'horizontal', false
|
||||
containment: element, // also takes array of elements (or id's); or false
|
||||
handle: false, // or a CSS class
|
||||
only: false,
|
||||
hoverclass: null,
|
||||
ghosting: false,
|
||||
scroll: false,
|
||||
scrollSensitivity: 20,
|
||||
scrollSpeed: 15,
|
||||
format: /^[^_]*_(.*)$/,
|
||||
onChange: Prototype.emptyFunction,
|
||||
onUpdate: Prototype.emptyFunction
|
||||
}, arguments[1] || {});
|
||||
|
||||
// clear any old sortable with same element
|
||||
this.destroy(element);
|
||||
|
||||
// build options for the draggables
|
||||
var options_for_draggable = {
|
||||
revert: true,
|
||||
scroll: options.scroll,
|
||||
scrollSpeed: options.scrollSpeed,
|
||||
scrollSensitivity: options.scrollSensitivity,
|
||||
ghosting: options.ghosting,
|
||||
constraint: options.constraint,
|
||||
handle: options.handle };
|
||||
|
||||
if(options.starteffect)
|
||||
options_for_draggable.starteffect = options.starteffect;
|
||||
|
||||
if(options.reverteffect)
|
||||
options_for_draggable.reverteffect = options.reverteffect;
|
||||
else
|
||||
if(options.ghosting) options_for_draggable.reverteffect = function(element) {
|
||||
element.style.top = 0;
|
||||
element.style.left = 0;
|
||||
};
|
||||
|
||||
if(options.endeffect)
|
||||
options_for_draggable.endeffect = options.endeffect;
|
||||
|
||||
if(options.zindex)
|
||||
options_for_draggable.zindex = options.zindex;
|
||||
|
||||
// build options for the droppables
|
||||
var options_for_droppable = {
|
||||
overlap: options.overlap,
|
||||
containment: options.containment,
|
||||
tree: options.tree,
|
||||
hoverclass: options.hoverclass,
|
||||
onHover: Sortable.onHover
|
||||
//greedy: !options.dropOnEmpty
|
||||
}
|
||||
|
||||
var options_for_tree = {
|
||||
onHover: Sortable.onEmptyHover,
|
||||
overlap: options.overlap,
|
||||
containment: options.containment,
|
||||
hoverclass: options.hoverclass
|
||||
}
|
||||
|
||||
// fix for gecko engine
|
||||
Element.cleanWhitespace(element);
|
||||
|
||||
options.draggables = [];
|
||||
options.droppables = [];
|
||||
|
||||
// drop on empty handling
|
||||
if(options.dropOnEmpty || options.tree) {
|
||||
Droppables.add(element, options_for_tree);
|
||||
options.droppables.push(element);
|
||||
}
|
||||
|
||||
(this.findElements(element, options) || []).each( function(e) {
|
||||
// handles are per-draggable
|
||||
var handle = options.handle ?
|
||||
Element.childrenWithClassName(e, options.handle)[0] : e;
|
||||
options.draggables.push(
|
||||
new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
|
||||
Droppables.add(e, options_for_droppable);
|
||||
if(options.tree) e.treeNode = element;
|
||||
options.droppables.push(e);
|
||||
});
|
||||
|
||||
if(options.tree) {
|
||||
(Sortable.findTreeElements(element, options) || []).each( function(e) {
|
||||
Droppables.add(e, options_for_tree);
|
||||
e.treeNode = element;
|
||||
options.droppables.push(e);
|
||||
});
|
||||
}
|
||||
|
||||
// keep reference
|
||||
this.sortables[element.id] = options;
|
||||
|
||||
// for onupdate
|
||||
Draggables.addObserver(new SortableObserver(element, options.onUpdate));
|
||||
|
||||
},
|
||||
|
||||
// return all suitable-for-sortable elements in a guaranteed order
|
||||
findElements: function(element, options) {
|
||||
return Element.findChildren(
|
||||
element, options.only, options.tree ? true : false, options.tag);
|
||||
},
|
||||
|
||||
findTreeElements: function(element, options) {
|
||||
return Element.findChildren(
|
||||
element, options.only, options.tree ? true : false, options.treeTag);
|
||||
},
|
||||
|
||||
onHover: function(element, dropon, overlap) {
|
||||
if(Element.isParent(dropon, element)) return;
|
||||
|
||||
if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {
|
||||
return;
|
||||
} else if(overlap>0.5) {
|
||||
Sortable.mark(dropon, 'before');
|
||||
if(dropon.previousSibling != element) {
|
||||
var oldParentNode = element.parentNode;
|
||||
element.style.visibility = "hidden"; // fix gecko rendering
|
||||
dropon.parentNode.insertBefore(element, dropon);
|
||||
if(dropon.parentNode!=oldParentNode)
|
||||
Sortable.options(oldParentNode).onChange(element);
|
||||
Sortable.options(dropon.parentNode).onChange(element);
|
||||
}
|
||||
} else {
|
||||
Sortable.mark(dropon, 'after');
|
||||
var nextElement = dropon.nextSibling || null;
|
||||
if(nextElement != element) {
|
||||
var oldParentNode = element.parentNode;
|
||||
element.style.visibility = "hidden"; // fix gecko rendering
|
||||
dropon.parentNode.insertBefore(element, nextElement);
|
||||
if(dropon.parentNode!=oldParentNode)
|
||||
Sortable.options(oldParentNode).onChange(element);
|
||||
Sortable.options(dropon.parentNode).onChange(element);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
onEmptyHover: function(element, dropon, overlap) {
|
||||
var oldParentNode = element.parentNode;
|
||||
var droponOptions = Sortable.options(dropon);
|
||||
|
||||
if(!Element.isParent(dropon, element)) {
|
||||
var index;
|
||||
|
||||
var children = Sortable.findElements(dropon, {tag: droponOptions.tag});
|
||||
var child = null;
|
||||
|
||||
if(children) {
|
||||
var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap);
|
||||
|
||||
for (index = 0; index < children.length; index += 1) {
|
||||
if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) {
|
||||
offset -= Element.offsetSize (children[index], droponOptions.overlap);
|
||||
} else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) {
|
||||
child = index + 1 < children.length ? children[index + 1] : null;
|
||||
break;
|
||||
} else {
|
||||
child = children[index];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dropon.insertBefore(element, child);
|
||||
|
||||
Sortable.options(oldParentNode).onChange(element);
|
||||
droponOptions.onChange(element);
|
||||
}
|
||||
},
|
||||
|
||||
unmark: function() {
|
||||
if(Sortable._marker) Element.hide(Sortable._marker);
|
||||
},
|
||||
|
||||
mark: function(dropon, position) {
|
||||
// mark on ghosting only
|
||||
var sortable = Sortable.options(dropon.parentNode);
|
||||
if(sortable && !sortable.ghosting) return;
|
||||
|
||||
if(!Sortable._marker) {
|
||||
Sortable._marker = $('dropmarker') || document.createElement('DIV');
|
||||
Element.hide(Sortable._marker);
|
||||
Element.addClassName(Sortable._marker, 'dropmarker');
|
||||
Sortable._marker.style.position = 'absolute';
|
||||
document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
|
||||
}
|
||||
var offsets = Position.cumulativeOffset(dropon);
|
||||
Sortable._marker.style.left = offsets[0] + 'px';
|
||||
Sortable._marker.style.top = offsets[1] + 'px';
|
||||
|
||||
if(position=='after')
|
||||
if(sortable.overlap == 'horizontal')
|
||||
Sortable._marker.style.left = (offsets[0]+dropon.clientWidth) + 'px';
|
||||
else
|
||||
Sortable._marker.style.top = (offsets[1]+dropon.clientHeight) + 'px';
|
||||
|
||||
Element.show(Sortable._marker);
|
||||
},
|
||||
|
||||
_tree: function(element, options, parent) {
|
||||
var children = Sortable.findElements(element, options) || [];
|
||||
|
||||
for (var i = 0; i < children.length; ++i) {
|
||||
var match = children[i].id.match(options.format);
|
||||
|
||||
if (!match) continue;
|
||||
|
||||
var child = {
|
||||
id: encodeURIComponent(match ? match[1] : null),
|
||||
element: element,
|
||||
parent: parent,
|
||||
children: new Array,
|
||||
position: parent.children.length,
|
||||
container: Sortable._findChildrenElement(children[i], options.treeTag.toUpperCase())
|
||||
}
|
||||
|
||||
/* Get the element containing the children and recurse over it */
|
||||
if (child.container)
|
||||
this._tree(child.container, options, child)
|
||||
|
||||
parent.children.push (child);
|
||||
}
|
||||
|
||||
return parent;
|
||||
},
|
||||
|
||||
/* Finds the first element of the given tag type within a parent element.
|
||||
Used for finding the first LI[ST] within a L[IST]I[TEM].*/
|
||||
_findChildrenElement: function (element, containerTag) {
|
||||
if (element && element.hasChildNodes)
|
||||
for (var i = 0; i < element.childNodes.length; ++i)
|
||||
if (element.childNodes[i].tagName == containerTag)
|
||||
return element.childNodes[i];
|
||||
|
||||
return null;
|
||||
},
|
||||
|
||||
tree: function(element) {
|
||||
element = $(element);
|
||||
var sortableOptions = this.options(element);
|
||||
var options = Object.extend({
|
||||
tag: sortableOptions.tag,
|
||||
treeTag: sortableOptions.treeTag,
|
||||
only: sortableOptions.only,
|
||||
name: element.id,
|
||||
format: sortableOptions.format
|
||||
}, arguments[1] || {});
|
||||
|
||||
var root = {
|
||||
id: null,
|
||||
parent: null,
|
||||
children: new Array,
|
||||
container: element,
|
||||
position: 0
|
||||
}
|
||||
|
||||
return Sortable._tree (element, options, root);
|
||||
},
|
||||
|
||||
/* Construct a [i] index for a particular node */
|
||||
_constructIndex: function(node) {
|
||||
var index = '';
|
||||
do {
|
||||
if (node.id) index = '[' + node.position + ']' + index;
|
||||
} while ((node = node.parent) != null);
|
||||
return index;
|
||||
},
|
||||
|
||||
sequence: function(element) {
|
||||
element = $(element);
|
||||
var options = Object.extend(this.options(element), arguments[1] || {});
|
||||
|
||||
return $(this.findElements(element, options) || []).map( function(item) {
|
||||
return item.id.match(options.format) ? item.id.match(options.format)[1] : '';
|
||||
});
|
||||
},
|
||||
|
||||
setSequence: function(element, new_sequence) {
|
||||
element = $(element);
|
||||
var options = Object.extend(this.options(element), arguments[2] || {});
|
||||
|
||||
var nodeMap = {};
|
||||
this.findElements(element, options).each( function(n) {
|
||||
if (n.id.match(options.format))
|
||||
nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
|
||||
n.parentNode.removeChild(n);
|
||||
});
|
||||
|
||||
new_sequence.each(function(ident) {
|
||||
var n = nodeMap[ident];
|
||||
if (n) {
|
||||
n[1].appendChild(n[0]);
|
||||
delete nodeMap[ident];
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
serialize: function(element) {
|
||||
element = $(element);
|
||||
var options = Object.extend(Sortable.options(element), arguments[1] || {});
|
||||
var name = encodeURIComponent(
|
||||
(arguments[1] && arguments[1].name) ? arguments[1].name : element.id);
|
||||
|
||||
if (options.tree) {
|
||||
return Sortable.tree(element, arguments[1]).children.map( function (item) {
|
||||
return [name + Sortable._constructIndex(item) + "=" +
|
||||
encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));
|
||||
}).flatten().join('&');
|
||||
} else {
|
||||
return Sortable.sequence(element, arguments[1]).map( function(item) {
|
||||
return name + "[]=" + encodeURIComponent(item);
|
||||
}).join('&');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns true if child is contained within element */
|
||||
Element.isParent = function(child, element) {
|
||||
if (!child.parentNode || child == element) return false;
|
||||
|
||||
if (child.parentNode == element) return true;
|
||||
|
||||
return Element.isParent(child.parentNode, element);
|
||||
}
|
||||
|
||||
Element.findChildren = function(element, only, recursive, tagName) {
|
||||
if(!element.hasChildNodes()) return null;
|
||||
tagName = tagName.toUpperCase();
|
||||
if(only) only = [only].flatten();
|
||||
var elements = [];
|
||||
$A(element.childNodes).each( function(e) {
|
||||
if(e.tagName && e.tagName.toUpperCase()==tagName &&
|
||||
(!only || (Element.classNames(e).detect(function(v) { return only.include(v) }))))
|
||||
elements.push(e);
|
||||
if(recursive) {
|
||||
var grandchildren = Element.findChildren(e, only, recursive, tagName);
|
||||
if(grandchildren) elements.push(grandchildren);
|
||||
}
|
||||
});
|
||||
|
||||
return (elements.length>0 ? elements.flatten() : []);
|
||||
}
|
||||
|
||||
Element.offsetSize = function (element, type) {
|
||||
if (type == 'vertical' || type == 'height')
|
||||
return element.offsetHeight;
|
||||
else
|
||||
return element.offsetWidth;
|
||||
}
|
||||
958
mozilla/java/plugins/examples/style/effects.js
vendored
Executable file
@@ -0,0 +1,958 @@
|
||||
// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
|
||||
// Contributors:
|
||||
// Justin Palmer (http://encytemedia.com/)
|
||||
// Mark Pilgrim (http://diveintomark.org/)
|
||||
// Martin Bialasinki
|
||||
//
|
||||
// See scriptaculous.js for full license.
|
||||
|
||||
// converts rgb() and #xxx to #xxxxxx format,
|
||||
// returns self (or first argument) if not convertable
|
||||
String.prototype.parseColor = function() {
|
||||
var color = '#';
|
||||
if(this.slice(0,4) == 'rgb(') {
|
||||
var cols = this.slice(4,this.length-1).split(',');
|
||||
var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);
|
||||
} else {
|
||||
if(this.slice(0,1) == '#') {
|
||||
if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();
|
||||
if(this.length==7) color = this.toLowerCase();
|
||||
}
|
||||
}
|
||||
return(color.length==7 ? color : (arguments[0] || this));
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
Element.collectTextNodes = function(element) {
|
||||
return $A($(element).childNodes).collect( function(node) {
|
||||
return (node.nodeType==3 ? node.nodeValue :
|
||||
(node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
|
||||
}).flatten().join('');
|
||||
}
|
||||
|
||||
Element.collectTextNodesIgnoreClass = function(element, className) {
|
||||
return $A($(element).childNodes).collect( function(node) {
|
||||
return (node.nodeType==3 ? node.nodeValue :
|
||||
((node.hasChildNodes() && !Element.hasClassName(node,className)) ?
|
||||
Element.collectTextNodesIgnoreClass(node, className) : ''));
|
||||
}).flatten().join('');
|
||||
}
|
||||
|
||||
Element.setContentZoom = function(element, percent) {
|
||||
element = $(element);
|
||||
Element.setStyle(element, {fontSize: (percent/100) + 'em'});
|
||||
if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
|
||||
}
|
||||
|
||||
Element.getOpacity = function(element){
|
||||
var opacity;
|
||||
if (opacity = Element.getStyle(element, 'opacity'))
|
||||
return parseFloat(opacity);
|
||||
if (opacity = (Element.getStyle(element, 'filter') || '').match(/alpha\(opacity=(.*)\)/))
|
||||
if(opacity[1]) return parseFloat(opacity[1]) / 100;
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
Element.setOpacity = function(element, value){
|
||||
element= $(element);
|
||||
if (value == 1){
|
||||
Element.setStyle(element, { opacity:
|
||||
(/Gecko/.test(navigator.userAgent) && !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ?
|
||||
0.999999 : null });
|
||||
if(/MSIE/.test(navigator.userAgent))
|
||||
Element.setStyle(element, {filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'')});
|
||||
} else {
|
||||
if(value < 0.00001) value = 0;
|
||||
Element.setStyle(element, {opacity: value});
|
||||
if(/MSIE/.test(navigator.userAgent))
|
||||
Element.setStyle(element,
|
||||
{ filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'') +
|
||||
'alpha(opacity='+value*100+')' });
|
||||
}
|
||||
}
|
||||
|
||||
Element.getInlineOpacity = function(element){
|
||||
return $(element).style.opacity || '';
|
||||
}
|
||||
|
||||
Element.childrenWithClassName = function(element, className, findFirst) {
|
||||
var classNameRegExp = new RegExp("(^|\\s)" + className + "(\\s|$)");
|
||||
var results = $A($(element).getElementsByTagName('*'))[findFirst ? 'detect' : 'select']( function(c) {
|
||||
return (c.className && c.className.match(classNameRegExp));
|
||||
});
|
||||
if(!results) results = [];
|
||||
return results;
|
||||
}
|
||||
|
||||
Element.forceRerendering = function(element) {
|
||||
try {
|
||||
element = $(element);
|
||||
var n = document.createTextNode(' ');
|
||||
element.appendChild(n);
|
||||
element.removeChild(n);
|
||||
} catch(e) { }
|
||||
};
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
Array.prototype.call = function() {
|
||||
var args = arguments;
|
||||
this.each(function(f){ f.apply(this, args) });
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
var Effect = {
|
||||
tagifyText: function(element) {
|
||||
var tagifyStyle = 'position:relative';
|
||||
if(/MSIE/.test(navigator.userAgent)) tagifyStyle += ';zoom:1';
|
||||
element = $(element);
|
||||
$A(element.childNodes).each( function(child) {
|
||||
if(child.nodeType==3) {
|
||||
child.nodeValue.toArray().each( function(character) {
|
||||
element.insertBefore(
|
||||
Builder.node('span',{style: tagifyStyle},
|
||||
character == ' ' ? String.fromCharCode(160) : character),
|
||||
child);
|
||||
});
|
||||
Element.remove(child);
|
||||
}
|
||||
});
|
||||
},
|
||||
multiple: function(element, effect) {
|
||||
var elements;
|
||||
if(((typeof element == 'object') ||
|
||||
(typeof element == 'function')) &&
|
||||
(element.length))
|
||||
elements = element;
|
||||
else
|
||||
elements = $(element).childNodes;
|
||||
|
||||
var options = Object.extend({
|
||||
speed: 0.1,
|
||||
delay: 0.0
|
||||
}, arguments[2] || {});
|
||||
var masterDelay = options.delay;
|
||||
|
||||
$A(elements).each( function(element, index) {
|
||||
new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
|
||||
});
|
||||
},
|
||||
PAIRS: {
|
||||
'slide': ['SlideDown','SlideUp'],
|
||||
'blind': ['BlindDown','BlindUp'],
|
||||
'appear': ['Appear','Fade']
|
||||
},
|
||||
toggle: function(element, effect) {
|
||||
element = $(element);
|
||||
effect = (effect || 'appear').toLowerCase();
|
||||
var options = Object.extend({
|
||||
queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
|
||||
}, arguments[2] || {});
|
||||
Effect[element.visible() ?
|
||||
Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
|
||||
}
|
||||
};
|
||||
|
||||
var Effect2 = Effect; // deprecated
|
||||
|
||||
/* ------------- transitions ------------- */
|
||||
|
||||
Effect.Transitions = {}
|
||||
|
||||
Effect.Transitions.linear = function(pos) {
|
||||
return pos;
|
||||
}
|
||||
Effect.Transitions.sinoidal = function(pos) {
|
||||
return (-Math.cos(pos*Math.PI)/2) + 0.5;
|
||||
}
|
||||
Effect.Transitions.reverse = function(pos) {
|
||||
return 1-pos;
|
||||
}
|
||||
Effect.Transitions.flicker = function(pos) {
|
||||
return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;
|
||||
}
|
||||
Effect.Transitions.wobble = function(pos) {
|
||||
return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;
|
||||
}
|
||||
Effect.Transitions.pulse = function(pos) {
|
||||
return (Math.floor(pos*10) % 2 == 0 ?
|
||||
(pos*10-Math.floor(pos*10)) : 1-(pos*10-Math.floor(pos*10)));
|
||||
}
|
||||
Effect.Transitions.none = function(pos) {
|
||||
return 0;
|
||||
}
|
||||
Effect.Transitions.full = function(pos) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* ------------- core effects ------------- */
|
||||
|
||||
Effect.ScopedQueue = Class.create();
|
||||
Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), {
|
||||
initialize: function() {
|
||||
this.effects = [];
|
||||
this.interval = null;
|
||||
},
|
||||
_each: function(iterator) {
|
||||
this.effects._each(iterator);
|
||||
},
|
||||
add: function(effect) {
|
||||
var timestamp = new Date().getTime();
|
||||
|
||||
var position = (typeof effect.options.queue == 'string') ?
|
||||
effect.options.queue : effect.options.queue.position;
|
||||
|
||||
switch(position) {
|
||||
case 'front':
|
||||
// move unstarted effects after this effect
|
||||
this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
|
||||
e.startOn += effect.finishOn;
|
||||
e.finishOn += effect.finishOn;
|
||||
});
|
||||
break;
|
||||
case 'end':
|
||||
// start effect after last queued effect has finished
|
||||
timestamp = this.effects.pluck('finishOn').max() || timestamp;
|
||||
break;
|
||||
}
|
||||
|
||||
effect.startOn += timestamp;
|
||||
effect.finishOn += timestamp;
|
||||
|
||||
if(!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
|
||||
this.effects.push(effect);
|
||||
|
||||
if(!this.interval)
|
||||
this.interval = setInterval(this.loop.bind(this), 40);
|
||||
},
|
||||
remove: function(effect) {
|
||||
this.effects = this.effects.reject(function(e) { return e==effect });
|
||||
if(this.effects.length == 0) {
|
||||
clearInterval(this.interval);
|
||||
this.interval = null;
|
||||
}
|
||||
},
|
||||
loop: function() {
|
||||
var timePos = new Date().getTime();
|
||||
this.effects.invoke('loop', timePos);
|
||||
}
|
||||
});
|
||||
|
||||
Effect.Queues = {
|
||||
instances: $H(),
|
||||
get: function(queueName) {
|
||||
if(typeof queueName != 'string') return queueName;
|
||||
|
||||
if(!this.instances[queueName])
|
||||
this.instances[queueName] = new Effect.ScopedQueue();
|
||||
|
||||
return this.instances[queueName];
|
||||
}
|
||||
}
|
||||
Effect.Queue = Effect.Queues.get('global');
|
||||
|
||||
Effect.DefaultOptions = {
|
||||
transition: Effect.Transitions.sinoidal,
|
||||
duration: 1.0, // seconds
|
||||
fps: 25.0, // max. 25fps due to Effect.Queue implementation
|
||||
sync: false, // true for combining
|
||||
from: 0.0,
|
||||
to: 1.0,
|
||||
delay: 0.0,
|
||||
queue: 'parallel'
|
||||
}
|
||||
|
||||
Effect.Base = function() {};
|
||||
Effect.Base.prototype = {
|
||||
position: null,
|
||||
start: function(options) {
|
||||
this.options = Object.extend(Object.extend({},Effect.DefaultOptions), options || {});
|
||||
this.currentFrame = 0;
|
||||
this.state = 'idle';
|
||||
this.startOn = this.options.delay*1000;
|
||||
this.finishOn = this.startOn + (this.options.duration*1000);
|
||||
this.event('beforeStart');
|
||||
if(!this.options.sync)
|
||||
Effect.Queues.get(typeof this.options.queue == 'string' ?
|
||||
'global' : this.options.queue.scope).add(this);
|
||||
},
|
||||
loop: function(timePos) {
|
||||
if(timePos >= this.startOn) {
|
||||
if(timePos >= this.finishOn) {
|
||||
this.render(1.0);
|
||||
this.cancel();
|
||||
this.event('beforeFinish');
|
||||
if(this.finish) this.finish();
|
||||
this.event('afterFinish');
|
||||
return;
|
||||
}
|
||||
var pos = (timePos - this.startOn) / (this.finishOn - this.startOn);
|
||||
var frame = Math.round(pos * this.options.fps * this.options.duration);
|
||||
if(frame > this.currentFrame) {
|
||||
this.render(pos);
|
||||
this.currentFrame = frame;
|
||||
}
|
||||
}
|
||||
},
|
||||
render: function(pos) {
|
||||
if(this.state == 'idle') {
|
||||
this.state = 'running';
|
||||
this.event('beforeSetup');
|
||||
if(this.setup) this.setup();
|
||||
this.event('afterSetup');
|
||||
}
|
||||
if(this.state == 'running') {
|
||||
if(this.options.transition) pos = this.options.transition(pos);
|
||||
pos *= (this.options.to-this.options.from);
|
||||
pos += this.options.from;
|
||||
this.position = pos;
|
||||
this.event('beforeUpdate');
|
||||
if(this.update) this.update(pos);
|
||||
this.event('afterUpdate');
|
||||
}
|
||||
},
|
||||
cancel: function() {
|
||||
if(!this.options.sync)
|
||||
Effect.Queues.get(typeof this.options.queue == 'string' ?
|
||||
'global' : this.options.queue.scope).remove(this);
|
||||
this.state = 'finished';
|
||||
},
|
||||
event: function(eventName) {
|
||||
if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
|
||||
if(this.options[eventName]) this.options[eventName](this);
|
||||
},
|
||||
inspect: function() {
|
||||
return '#<Effect:' + $H(this).inspect() + ',options:' + $H(this.options).inspect() + '>';
|
||||
}
|
||||
}
|
||||
|
||||
Effect.Parallel = Class.create();
|
||||
Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), {
|
||||
initialize: function(effects) {
|
||||
this.effects = effects || [];
|
||||
this.start(arguments[1]);
|
||||
},
|
||||
update: function(position) {
|
||||
this.effects.invoke('render', position);
|
||||
},
|
||||
finish: function(position) {
|
||||
this.effects.each( function(effect) {
|
||||
effect.render(1.0);
|
||||
effect.cancel();
|
||||
effect.event('beforeFinish');
|
||||
if(effect.finish) effect.finish(position);
|
||||
effect.event('afterFinish');
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
Effect.Opacity = Class.create();
|
||||
Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), {
|
||||
initialize: function(element) {
|
||||
this.element = $(element);
|
||||
// make this work on IE on elements without 'layout'
|
||||
if(/MSIE/.test(navigator.userAgent) && (!this.element.hasLayout))
|
||||
this.element.setStyle({zoom: 1});
|
||||
var options = Object.extend({
|
||||
from: this.element.getOpacity() || 0.0,
|
||||
to: 1.0
|
||||
}, arguments[1] || {});
|
||||
this.start(options);
|
||||
},
|
||||
update: function(position) {
|
||||
this.element.setOpacity(position);
|
||||
}
|
||||
});
|
||||
|
||||
Effect.Move = Class.create();
|
||||
Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), {
|
||||
initialize: function(element) {
|
||||
this.element = $(element);
|
||||
var options = Object.extend({
|
||||
x: 0,
|
||||
y: 0,
|
||||
mode: 'relative'
|
||||
}, arguments[1] || {});
|
||||
this.start(options);
|
||||
},
|
||||
setup: function() {
|
||||
// Bug in Opera: Opera returns the "real" position of a static element or
|
||||
// relative element that does not have top/left explicitly set.
|
||||
// ==> Always set top and left for position relative elements in your stylesheets
|
||||
// (to 0 if you do not need them)
|
||||
this.element.makePositioned();
|
||||
this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
|
||||
this.originalTop = parseFloat(this.element.getStyle('top') || '0');
|
||||
if(this.options.mode == 'absolute') {
|
||||
// absolute movement, so we need to calc deltaX and deltaY
|
||||
this.options.x = this.options.x - this.originalLeft;
|
||||
this.options.y = this.options.y - this.originalTop;
|
||||
}
|
||||
},
|
||||
update: function(position) {
|
||||
this.element.setStyle({
|
||||
left: this.options.x * position + this.originalLeft + 'px',
|
||||
top: this.options.y * position + this.originalTop + 'px'
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// for backwards compatibility
|
||||
Effect.MoveBy = function(element, toTop, toLeft) {
|
||||
return new Effect.Move(element,
|
||||
Object.extend({ x: toLeft, y: toTop }, arguments[3] || {}));
|
||||
};
|
||||
|
||||
Effect.Scale = Class.create();
|
||||
Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {
|
||||
initialize: function(element, percent) {
|
||||
this.element = $(element)
|
||||
var options = Object.extend({
|
||||
scaleX: true,
|
||||
scaleY: true,
|
||||
scaleContent: true,
|
||||
scaleFromCenter: false,
|
||||
scaleMode: 'box', // 'box' or 'contents' or {} with provided values
|
||||
scaleFrom: 100.0,
|
||||
scaleTo: percent
|
||||
}, arguments[2] || {});
|
||||
this.start(options);
|
||||
},
|
||||
setup: function() {
|
||||
this.restoreAfterFinish = this.options.restoreAfterFinish || false;
|
||||
this.elementPositioning = this.element.getStyle('position');
|
||||
|
||||
this.originalStyle = {};
|
||||
['top','left','width','height','fontSize'].each( function(k) {
|
||||
this.originalStyle[k] = this.element.style[k];
|
||||
}.bind(this));
|
||||
|
||||
this.originalTop = this.element.offsetTop;
|
||||
this.originalLeft = this.element.offsetLeft;
|
||||
|
||||
var fontSize = this.element.getStyle('font-size') || '100%';
|
||||
['em','px','%'].each( function(fontSizeType) {
|
||||
if(fontSize.indexOf(fontSizeType)>0) {
|
||||
this.fontSize = parseFloat(fontSize);
|
||||
this.fontSizeType = fontSizeType;
|
||||
}
|
||||
}.bind(this));
|
||||
|
||||
this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
|
||||
|
||||
this.dims = null;
|
||||
if(this.options.scaleMode=='box')
|
||||
this.dims = [this.element.offsetHeight, this.element.offsetWidth];
|
||||
if(/^content/.test(this.options.scaleMode))
|
||||
this.dims = [this.element.scrollHeight, this.element.scrollWidth];
|
||||
if(!this.dims)
|
||||
this.dims = [this.options.scaleMode.originalHeight,
|
||||
this.options.scaleMode.originalWidth];
|
||||
},
|
||||
update: function(position) {
|
||||
var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
|
||||
if(this.options.scaleContent && this.fontSize)
|
||||
this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
|
||||
this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
|
||||
},
|
||||
finish: function(position) {
|
||||
if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
|
||||
},
|
||||
setDimensions: function(height, width) {
|
||||
var d = {};
|
||||
if(this.options.scaleX) d.width = width + 'px';
|
||||
if(this.options.scaleY) d.height = height + 'px';
|
||||
if(this.options.scaleFromCenter) {
|
||||
var topd = (height - this.dims[0])/2;
|
||||
var leftd = (width - this.dims[1])/2;
|
||||
if(this.elementPositioning == 'absolute') {
|
||||
if(this.options.scaleY) d.top = this.originalTop-topd + 'px';
|
||||
if(this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
|
||||
} else {
|
||||
if(this.options.scaleY) d.top = -topd + 'px';
|
||||
if(this.options.scaleX) d.left = -leftd + 'px';
|
||||
}
|
||||
}
|
||||
this.element.setStyle(d);
|
||||
}
|
||||
});
|
||||
|
||||
Effect.Highlight = Class.create();
|
||||
Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), {
|
||||
initialize: function(element) {
|
||||
this.element = $(element);
|
||||
var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {});
|
||||
this.start(options);
|
||||
},
|
||||
setup: function() {
|
||||
// Prevent executing on elements not in the layout flow
|
||||
if(this.element.getStyle('display')=='none') { this.cancel(); return; }
|
||||
// Disable background image during the effect
|
||||
this.oldStyle = {
|
||||
backgroundImage: this.element.getStyle('background-image') };
|
||||
this.element.setStyle({backgroundImage: 'none'});
|
||||
if(!this.options.endcolor)
|
||||
this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
|
||||
if(!this.options.restorecolor)
|
||||
this.options.restorecolor = this.element.getStyle('background-color');
|
||||
// init color calculations
|
||||
this._base = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
|
||||
this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
|
||||
},
|
||||
update: function(position) {
|
||||
this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
|
||||
return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) });
|
||||
},
|
||||
finish: function() {
|
||||
this.element.setStyle(Object.extend(this.oldStyle, {
|
||||
backgroundColor: this.options.restorecolor
|
||||
}));
|
||||
}
|
||||
});
|
||||
|
||||
Effect.ScrollTo = Class.create();
|
||||
Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), {
|
||||
initialize: function(element) {
|
||||
this.element = $(element);
|
||||
this.start(arguments[1] || {});
|
||||
},
|
||||
setup: function() {
|
||||
Position.prepare();
|
||||
var offsets = Position.cumulativeOffset(this.element);
|
||||
if(this.options.offset) offsets[1] += this.options.offset;
|
||||
var max = window.innerHeight ?
|
||||
window.height - window.innerHeight :
|
||||
document.body.scrollHeight -
|
||||
(document.documentElement.clientHeight ?
|
||||
document.documentElement.clientHeight : document.body.clientHeight);
|
||||
this.scrollStart = Position.deltaY;
|
||||
this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart;
|
||||
},
|
||||
update: function(position) {
|
||||
Position.prepare();
|
||||
window.scrollTo(Position.deltaX,
|
||||
this.scrollStart + (position*this.delta));
|
||||
}
|
||||
});
|
||||
|
||||
/* ------------- combination effects ------------- */
|
||||
|
||||
Effect.Fade = function(element) {
|
||||
element = $(element);
|
||||
var oldOpacity = element.getInlineOpacity();
|
||||
var options = Object.extend({
|
||||
from: element.getOpacity() || 1.0,
|
||||
to: 0.0,
|
||||
afterFinishInternal: function(effect) {
|
||||
if(effect.options.to!=0) return;
|
||||
effect.element.hide();
|
||||
effect.element.setStyle({opacity: oldOpacity});
|
||||
}}, arguments[1] || {});
|
||||
return new Effect.Opacity(element,options);
|
||||
}
|
||||
|
||||
Effect.Appear = function(element) {
|
||||
element = $(element);
|
||||
var options = Object.extend({
|
||||
from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
|
||||
to: 1.0,
|
||||
// force Safari to render floated elements properly
|
||||
afterFinishInternal: function(effect) {
|
||||
effect.element.forceRerendering();
|
||||
},
|
||||
beforeSetup: function(effect) {
|
||||
effect.element.setOpacity(effect.options.from);
|
||||
effect.element.show();
|
||||
}}, arguments[1] || {});
|
||||
return new Effect.Opacity(element,options);
|
||||
}
|
||||
|
||||
Effect.Puff = function(element) {
|
||||
element = $(element);
|
||||
var oldStyle = { opacity: element.getInlineOpacity(), position: element.getStyle('position') };
|
||||
return new Effect.Parallel(
|
||||
[ new Effect.Scale(element, 200,
|
||||
{ sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }),
|
||||
new Effect.Opacity(element, { sync: true, to: 0.0 } ) ],
|
||||
Object.extend({ duration: 1.0,
|
||||
beforeSetupInternal: function(effect) {
|
||||
effect.effects[0].element.setStyle({position: 'absolute'}); },
|
||||
afterFinishInternal: function(effect) {
|
||||
effect.effects[0].element.hide();
|
||||
effect.effects[0].element.setStyle(oldStyle); }
|
||||
}, arguments[1] || {})
|
||||
);
|
||||
}
|
||||
|
||||
Effect.BlindUp = function(element) {
|
||||
element = $(element);
|
||||
element.makeClipping();
|
||||
return new Effect.Scale(element, 0,
|
||||
Object.extend({ scaleContent: false,
|
||||
scaleX: false,
|
||||
restoreAfterFinish: true,
|
||||
afterFinishInternal: function(effect) {
|
||||
effect.element.hide();
|
||||
effect.element.undoClipping();
|
||||
}
|
||||
}, arguments[1] || {})
|
||||
);
|
||||
}
|
||||
|
||||
Effect.BlindDown = function(element) {
|
||||
element = $(element);
|
||||
var elementDimensions = element.getDimensions();
|
||||
return new Effect.Scale(element, 100,
|
||||
Object.extend({ scaleContent: false,
|
||||
scaleX: false,
|
||||
scaleFrom: 0,
|
||||
scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
|
||||
restoreAfterFinish: true,
|
||||
afterSetup: function(effect) {
|
||||
effect.element.makeClipping();
|
||||
effect.element.setStyle({height: '0px'});
|
||||
effect.element.show();
|
||||
},
|
||||
afterFinishInternal: function(effect) {
|
||||
effect.element.undoClipping();
|
||||
}
|
||||
}, arguments[1] || {})
|
||||
);
|
||||
}
|
||||
|
||||
Effect.SwitchOff = function(element) {
|
||||
element = $(element);
|
||||
var oldOpacity = element.getInlineOpacity();
|
||||
return new Effect.Appear(element, {
|
||||
duration: 0.4,
|
||||
from: 0,
|
||||
transition: Effect.Transitions.flicker,
|
||||
afterFinishInternal: function(effect) {
|
||||
new Effect.Scale(effect.element, 1, {
|
||||
duration: 0.3, scaleFromCenter: true,
|
||||
scaleX: false, scaleContent: false, restoreAfterFinish: true,
|
||||
beforeSetup: function(effect) {
|
||||
effect.element.makePositioned();
|
||||
effect.element.makeClipping();
|
||||
},
|
||||
afterFinishInternal: function(effect) {
|
||||
effect.element.hide();
|
||||
effect.element.undoClipping();
|
||||
effect.element.undoPositioned();
|
||||
effect.element.setStyle({opacity: oldOpacity});
|
||||
}
|
||||
})
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Effect.DropOut = function(element) {
|
||||
element = $(element);
|
||||
var oldStyle = {
|
||||
top: element.getStyle('top'),
|
||||
left: element.getStyle('left'),
|
||||
opacity: element.getInlineOpacity() };
|
||||
return new Effect.Parallel(
|
||||
[ new Effect.Move(element, {x: 0, y: 100, sync: true }),
|
||||
new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
|
||||
Object.extend(
|
||||
{ duration: 0.5,
|
||||
beforeSetup: function(effect) {
|
||||
effect.effects[0].element.makePositioned();
|
||||
},
|
||||
afterFinishInternal: function(effect) {
|
||||
effect.effects[0].element.hide();
|
||||
effect.effects[0].element.undoPositioned();
|
||||
effect.effects[0].element.setStyle(oldStyle);
|
||||
}
|
||||
}, arguments[1] || {}));
|
||||
}
|
||||
|
||||
Effect.Shake = function(element) {
|
||||
element = $(element);
|
||||
var oldStyle = {
|
||||
top: element.getStyle('top'),
|
||||
left: element.getStyle('left') };
|
||||
return new Effect.Move(element,
|
||||
{ x: 20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
|
||||
new Effect.Move(effect.element,
|
||||
{ x: -40, y: 0, duration: 0.1, afterFinishInternal: function(effect) {
|
||||
new Effect.Move(effect.element,
|
||||
{ x: 40, y: 0, duration: 0.1, afterFinishInternal: function(effect) {
|
||||
new Effect.Move(effect.element,
|
||||
{ x: -40, y: 0, duration: 0.1, afterFinishInternal: function(effect) {
|
||||
new Effect.Move(effect.element,
|
||||
{ x: 40, y: 0, duration: 0.1, afterFinishInternal: function(effect) {
|
||||
new Effect.Move(effect.element,
|
||||
{ x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
|
||||
effect.element.undoPositioned();
|
||||
effect.element.setStyle(oldStyle);
|
||||
}}) }}) }}) }}) }}) }});
|
||||
}
|
||||
|
||||
Effect.SlideDown = function(element) {
|
||||
element = $(element);
|
||||
element.cleanWhitespace();
|
||||
// SlideDown need to have the content of the element wrapped in a container element with fixed height!
|
||||
var oldInnerBottom = $(element.firstChild).getStyle('bottom');
|
||||
var elementDimensions = element.getDimensions();
|
||||
return new Effect.Scale(element, 100, Object.extend({
|
||||
scaleContent: false,
|
||||
scaleX: false,
|
||||
scaleFrom: window.opera ? 0 : 1,
|
||||
scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
|
||||
restoreAfterFinish: true,
|
||||
afterSetup: function(effect) {
|
||||
effect.element.makePositioned();
|
||||
effect.element.firstChild.makePositioned();
|
||||
if(window.opera) effect.element.setStyle({top: ''});
|
||||
effect.element.makeClipping();
|
||||
effect.element.setStyle({height: '0px'});
|
||||
effect.element.show(); },
|
||||
afterUpdateInternal: function(effect) {
|
||||
effect.element.firstChild.setStyle({bottom:
|
||||
(effect.dims[0] - effect.element.clientHeight) + 'px' });
|
||||
},
|
||||
afterFinishInternal: function(effect) {
|
||||
effect.element.undoClipping();
|
||||
// IE will crash if child is undoPositioned first
|
||||
if(/MSIE/.test(navigator.userAgent)){
|
||||
effect.element.undoPositioned();
|
||||
effect.element.firstChild.undoPositioned();
|
||||
}else{
|
||||
effect.element.firstChild.undoPositioned();
|
||||
effect.element.undoPositioned();
|
||||
}
|
||||
effect.element.firstChild.setStyle({bottom: oldInnerBottom}); }
|
||||
}, arguments[1] || {})
|
||||
);
|
||||
}
|
||||
|
||||
Effect.SlideUp = function(element) {
|
||||
element = $(element);
|
||||
element.cleanWhitespace();
|
||||
var oldInnerBottom = $(element.firstChild).getStyle('bottom');
|
||||
return new Effect.Scale(element, window.opera ? 0 : 1,
|
||||
Object.extend({ scaleContent: false,
|
||||
scaleX: false,
|
||||
scaleMode: 'box',
|
||||
scaleFrom: 100,
|
||||
restoreAfterFinish: true,
|
||||
beforeStartInternal: function(effect) {
|
||||
effect.element.makePositioned();
|
||||
effect.element.firstChild.makePositioned();
|
||||
if(window.opera) effect.element.setStyle({top: ''});
|
||||
effect.element.makeClipping();
|
||||
effect.element.show(); },
|
||||
afterUpdateInternal: function(effect) {
|
||||
effect.element.firstChild.setStyle({bottom:
|
||||
(effect.dims[0] - effect.element.clientHeight) + 'px' }); },
|
||||
afterFinishInternal: function(effect) {
|
||||
effect.element.hide();
|
||||
effect.element.undoClipping();
|
||||
effect.element.firstChild.undoPositioned();
|
||||
effect.element.undoPositioned();
|
||||
effect.element.setStyle({bottom: oldInnerBottom}); }
|
||||
}, arguments[1] || {})
|
||||
);
|
||||
}
|
||||
|
||||
// Bug in opera makes the TD containing this element expand for a instance after finish
|
||||
Effect.Squish = function(element) {
|
||||
return new Effect.Scale(element, window.opera ? 1 : 0,
|
||||
{ restoreAfterFinish: true,
|
||||
beforeSetup: function(effect) {
|
||||
effect.element.makeClipping(effect.element); },
|
||||
afterFinishInternal: function(effect) {
|
||||
effect.element.hide(effect.element);
|
||||
effect.element.undoClipping(effect.element); }
|
||||
});
|
||||
}
|
||||
|
||||
Effect.Grow = function(element) {
|
||||
element = $(element);
|
||||
var options = Object.extend({
|
||||
direction: 'center',
|
||||
moveTransition: Effect.Transitions.sinoidal,
|
||||
scaleTransition: Effect.Transitions.sinoidal,
|
||||
opacityTransition: Effect.Transitions.full
|
||||
}, arguments[1] || {});
|
||||
var oldStyle = {
|
||||
top: element.style.top,
|
||||
left: element.style.left,
|
||||
height: element.style.height,
|
||||
width: element.style.width,
|
||||
opacity: element.getInlineOpacity() };
|
||||
|
||||
var dims = element.getDimensions();
|
||||
var initialMoveX, initialMoveY;
|
||||
var moveX, moveY;
|
||||
|
||||
switch (options.direction) {
|
||||
case 'top-left':
|
||||
initialMoveX = initialMoveY = moveX = moveY = 0;
|
||||
break;
|
||||
case 'top-right':
|
||||
initialMoveX = dims.width;
|
||||
initialMoveY = moveY = 0;
|
||||
moveX = -dims.width;
|
||||
break;
|
||||
case 'bottom-left':
|
||||
initialMoveX = moveX = 0;
|
||||
initialMoveY = dims.height;
|
||||
moveY = -dims.height;
|
||||
break;
|
||||
case 'bottom-right':
|
||||
initialMoveX = dims.width;
|
||||
initialMoveY = dims.height;
|
||||
moveX = -dims.width;
|
||||
moveY = -dims.height;
|
||||
break;
|
||||
case 'center':
|
||||
initialMoveX = dims.width / 2;
|
||||
initialMoveY = dims.height / 2;
|
||||
moveX = -dims.width / 2;
|
||||
moveY = -dims.height / 2;
|
||||
break;
|
||||
}
|
||||
|
||||
return new Effect.Move(element, {
|
||||
x: initialMoveX,
|
||||
y: initialMoveY,
|
||||
duration: 0.01,
|
||||
beforeSetup: function(effect) {
|
||||
effect.element.hide();
|
||||
effect.element.makeClipping();
|
||||
effect.element.makePositioned();
|
||||
},
|
||||
afterFinishInternal: function(effect) {
|
||||
new Effect.Parallel(
|
||||
[ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
|
||||
new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
|
||||
new Effect.Scale(effect.element, 100, {
|
||||
scaleMode: { originalHeight: dims.height, originalWidth: dims.width },
|
||||
sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
|
||||
], Object.extend({
|
||||
beforeSetup: function(effect) {
|
||||
effect.effects[0].element.setStyle({height: '0px'});
|
||||
effect.effects[0].element.show();
|
||||
},
|
||||
afterFinishInternal: function(effect) {
|
||||
effect.effects[0].element.undoClipping();
|
||||
effect.effects[0].element.undoPositioned();
|
||||
effect.effects[0].element.setStyle(oldStyle);
|
||||
}
|
||||
}, options)
|
||||
)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Effect.Shrink = function(element) {
|
||||
element = $(element);
|
||||
var options = Object.extend({
|
||||
direction: 'center',
|
||||
moveTransition: Effect.Transitions.sinoidal,
|
||||
scaleTransition: Effect.Transitions.sinoidal,
|
||||
opacityTransition: Effect.Transitions.none
|
||||
}, arguments[1] || {});
|
||||
var oldStyle = {
|
||||
top: element.style.top,
|
||||
left: element.style.left,
|
||||
height: element.style.height,
|
||||
width: element.style.width,
|
||||
opacity: element.getInlineOpacity() };
|
||||
|
||||
var dims = element.getDimensions();
|
||||
var moveX, moveY;
|
||||
|
||||
switch (options.direction) {
|
||||
case 'top-left':
|
||||
moveX = moveY = 0;
|
||||
break;
|
||||
case 'top-right':
|
||||
moveX = dims.width;
|
||||
moveY = 0;
|
||||
break;
|
||||
case 'bottom-left':
|
||||
moveX = 0;
|
||||
moveY = dims.height;
|
||||
break;
|
||||
case 'bottom-right':
|
||||
moveX = dims.width;
|
||||
moveY = dims.height;
|
||||
break;
|
||||
case 'center':
|
||||
moveX = dims.width / 2;
|
||||
moveY = dims.height / 2;
|
||||
break;
|
||||
}
|
||||
|
||||
return new Effect.Parallel(
|
||||
[ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
|
||||
new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
|
||||
new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
|
||||
], Object.extend({
|
||||
beforeStartInternal: function(effect) {
|
||||
effect.effects[0].element.makePositioned();
|
||||
effect.effects[0].element.makeClipping(); },
|
||||
afterFinishInternal: function(effect) {
|
||||
effect.effects[0].element.hide();
|
||||
effect.effects[0].element.undoClipping();
|
||||
effect.effects[0].element.undoPositioned();
|
||||
effect.effects[0].element.setStyle(oldStyle); }
|
||||
}, options)
|
||||
);
|
||||
}
|
||||
|
||||
Effect.Pulsate = function(element) {
|
||||
element = $(element);
|
||||
var options = arguments[1] || {};
|
||||
var oldOpacity = element.getInlineOpacity();
|
||||
var transition = options.transition || Effect.Transitions.sinoidal;
|
||||
var reverser = function(pos){ return transition(1-Effect.Transitions.pulse(pos)) };
|
||||
reverser.bind(transition);
|
||||
return new Effect.Opacity(element,
|
||||
Object.extend(Object.extend({ duration: 3.0, from: 0,
|
||||
afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
|
||||
}, options), {transition: reverser}));
|
||||
}
|
||||
|
||||
Effect.Fold = function(element) {
|
||||
element = $(element);
|
||||
var oldStyle = {
|
||||
top: element.style.top,
|
||||
left: element.style.left,
|
||||
width: element.style.width,
|
||||
height: element.style.height };
|
||||
Element.makeClipping(element);
|
||||
return new Effect.Scale(element, 5, Object.extend({
|
||||
scaleContent: false,
|
||||
scaleX: false,
|
||||
afterFinishInternal: function(effect) {
|
||||
new Effect.Scale(element, 1, {
|
||||
scaleContent: false,
|
||||
scaleY: false,
|
||||
afterFinishInternal: function(effect) {
|
||||
effect.element.hide();
|
||||
effect.element.undoClipping();
|
||||
effect.element.setStyle(oldStyle);
|
||||
} });
|
||||
}}, arguments[1] || {}));
|
||||
};
|
||||
|
||||
['setOpacity','getOpacity','getInlineOpacity','forceRerendering','setContentZoom',
|
||||
'collectTextNodes','collectTextNodesIgnoreClass','childrenWithClassName'].each(
|
||||
function(f) { Element.Methods[f] = Element[f]; }
|
||||
);
|
||||
|
||||
Element.Methods.visualEffect = function(element, effect, options) {
|
||||
s = effect.gsub(/_/, '-').camelize();
|
||||
effect_class = s.charAt(0).toUpperCase() + s.substring(1);
|
||||
new Effect[effect_class](element, options);
|
||||
return $(element);
|
||||
};
|
||||
|
||||
Element.addMethods();
|
||||
BIN
mozilla/java/plugins/examples/style/hdr.bg.gif
Executable file
|
After Width: | Height: | Size: 123 B |
BIN
mozilla/java/plugins/examples/style/input.bg.gif
Executable file
|
After Width: | Height: | Size: 107 B |
BIN
mozilla/java/plugins/examples/style/java_get_powered.png
Executable file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
mozilla/java/plugins/examples/style/page_white_code.gif
Executable file
|
After Width: | Height: | Size: 399 B |
BIN
mozilla/java/plugins/examples/style/page_white_code_red.gif
Executable file
|
After Width: | Height: | Size: 403 B |
2006
mozilla/java/plugins/examples/style/prototype.js
vendored
Executable file
313
mozilla/java/plugins/examples/style/screen.css
Executable file
@@ -0,0 +1,313 @@
|
||||
/* Setup defaults since variable in browsers
|
||||
----------------------------------------------- */
|
||||
body, div, dd, dt, dl, img, p, h1, h2, h3, h4, h5, form, pre, code {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
/* Element Defaults
|
||||
----------------------------------------------- */
|
||||
html {
|
||||
height: 100%;
|
||||
background: #7A8593 url(bg.gif) 0 0 repeat-x;
|
||||
background-attachment: fixed;
|
||||
overflow: -moz-scrollbars-vertical;
|
||||
}
|
||||
img {
|
||||
border: 0;
|
||||
vertical-align: middle;
|
||||
}
|
||||
body {
|
||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
||||
#edburns font-size: 11px;
|
||||
color: #67717D;
|
||||
width: 820px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
text-decoration: none;
|
||||
}
|
||||
input {
|
||||
background: #fff url(input.bg.gif) 0 0 repeat-x;
|
||||
text-align: left;
|
||||
padding: 4px;
|
||||
}
|
||||
input, select {
|
||||
border: 1px solid #aaa;
|
||||
vertical-align: middle;
|
||||
}
|
||||
p {
|
||||
padding: 2px 0;
|
||||
text-decoration: none;
|
||||
|
||||
#edburns font-size: 10px;
|
||||
}
|
||||
h1, h2, h3, h4 {
|
||||
font-family: Helvetica, sans-serif;
|
||||
line-height: normal;
|
||||
color: #666;
|
||||
}
|
||||
h1 {
|
||||
text-align: right;
|
||||
font-size: 1.8em;
|
||||
padding: 8px 0;
|
||||
font-weight: normal;
|
||||
color: #5D87A1;
|
||||
}
|
||||
h3 {
|
||||
font-size: 1.4em;
|
||||
color: #58606A;
|
||||
}
|
||||
h4 {
|
||||
margin-top: 20px;
|
||||
font-size: 1.2em;
|
||||
color: #FF9900;
|
||||
}
|
||||
h4 a {
|
||||
color: #FF9900;
|
||||
text-decoration: none;
|
||||
}
|
||||
h4 a {
|
||||
vertical-align: middle;
|
||||
}
|
||||
/* Layout
|
||||
----------------------------------------------- */
|
||||
#page {
|
||||
background: #fff url(win.bg.top.gif) 0 1px repeat-x;
|
||||
float: left;
|
||||
width: 100%;
|
||||
}
|
||||
#page:before {
|
||||
background: transparent url(win.bg.tr.gif) scroll no-repeat top right;
|
||||
margin-bottom: -30px;
|
||||
height: 30px;
|
||||
display: block;
|
||||
border: none;
|
||||
content: url(win.bg.tl.gif);
|
||||
padding: 0;
|
||||
line-height: 0.1;
|
||||
font-size: 1px;
|
||||
}
|
||||
#footer {
|
||||
background: #fff url(win.bg.bottom.gif) 0 100% repeat-x;
|
||||
float: left;
|
||||
width: 100%;
|
||||
color: #7E8A99;
|
||||
text-align: right;
|
||||
line-height: 1.5em;
|
||||
}
|
||||
#footer:after {
|
||||
display: block;
|
||||
line-height: 0.1;
|
||||
font-size: 1px;
|
||||
text-align: left;
|
||||
content: url(win.bg.bl.gif);
|
||||
background: white;
|
||||
background: transparent url(win.bg.br.gif) no-repeat bottom right;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
|
||||
#example {
|
||||
background: #fff url(win.bg.top.gif) 0 1px repeat-x;
|
||||
float: left;
|
||||
width: 100%;
|
||||
}
|
||||
#example:before {
|
||||
background: transparent url(win.bg.tr.gif) scroll no-repeat top right;
|
||||
margin-bottom: -30px;
|
||||
height: 30px;
|
||||
display: block;
|
||||
border: none;
|
||||
content: url(win.bg.tl.gif);
|
||||
padding: 0;
|
||||
line-height: 0.1;
|
||||
font-size: 1px;
|
||||
}
|
||||
#exampleFooter {
|
||||
background: #fff url(win.bg.bottom.gif) 0 100% repeat-x;
|
||||
float: left;
|
||||
width: 100%;
|
||||
color: #7E8A99;
|
||||
text-align: right;
|
||||
line-height: 1.5em;
|
||||
}
|
||||
#exampleFooter:after {
|
||||
display: block;
|
||||
line-height: 0.1;
|
||||
font-size: 1px;
|
||||
text-align: left;
|
||||
content: url(win.bg.bl.gif);
|
||||
background: white;
|
||||
background: transparent url(win.bg.br.gif) no-repeat bottom right;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.wrapper {
|
||||
padding: 15px 25px;
|
||||
}
|
||||
#content {
|
||||
padding-top: 30px;
|
||||
float: left;
|
||||
width: 100%;
|
||||
}
|
||||
/* header
|
||||
----------------------------------------------- */
|
||||
#logo {
|
||||
text-align: left;
|
||||
padding-top: 10px;
|
||||
}
|
||||
/* nav
|
||||
----------------------------------------------- */
|
||||
#nav {
|
||||
padding: 25px 0 8px 0;
|
||||
text-align: right;
|
||||
font-size: 10px;
|
||||
float: left;
|
||||
width: 100%;
|
||||
}
|
||||
.menubar {
|
||||
|
||||
}
|
||||
ul.menubar {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
float: left;
|
||||
width: 100%;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.menubar li {
|
||||
display: inline;
|
||||
}
|
||||
.menubar a {
|
||||
padding: 0 8px;
|
||||
color: #E8EDF3;
|
||||
text-decoration: none;
|
||||
border-right: 1px solid #96A3B4;
|
||||
}
|
||||
.menubar a:hover {
|
||||
color: #fff;
|
||||
}
|
||||
.menubar a.last {
|
||||
border-right: 0;
|
||||
}
|
||||
|
||||
.top {
|
||||
background: #fff url(hdr.bg.gif) 0 100% repeat-x;
|
||||
padding: 4px;
|
||||
border-bottom: 1px solid #CCC;
|
||||
}
|
||||
|
||||
.source {
|
||||
padding-bottom: 20px;
|
||||
text-align: right;
|
||||
}
|
||||
.source a {
|
||||
text-decoration: none;
|
||||
color: #96A3B4;
|
||||
}
|
||||
.code {
|
||||
margin-top: 4px;
|
||||
border: 1px solid #ccc;
|
||||
font-family: "Courier New", Courier, mono;
|
||||
text-align: left;
|
||||
line-height: 1.5em;
|
||||
padding: 5px;
|
||||
color: #333;
|
||||
background: #fafafa;
|
||||
}
|
||||
.code b {
|
||||
color: #900;
|
||||
}
|
||||
.code i {
|
||||
color: #093;
|
||||
}
|
||||
|
||||
/* table
|
||||
----------------------------------------------- */
|
||||
th {
|
||||
|
||||
}
|
||||
|
||||
/* buttons
|
||||
----------------------------------------------- */
|
||||
input.delete {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
background: none;
|
||||
}
|
||||
input.orange{
|
||||
cursor:hand;
|
||||
color:#FFF;
|
||||
font-weight:bold;
|
||||
padding:2px 1px;
|
||||
margin:0px;
|
||||
white-space:nowrap;
|
||||
background: #E76F00 url(btn.orange.gif) 0 100% repeat-x;
|
||||
border-right:1px solid #C06600;
|
||||
border-bottom:1px solid #C06600;
|
||||
border-left:1px solid #FAE2CC;
|
||||
border-top:1px solid #FAE2CC;
|
||||
}
|
||||
|
||||
element.style {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
|
||||
/* GeSHi (c) Nigel McNie 2004 (http://qbnz.com/highlighter) */
|
||||
.html4strict .de1, .html4strict .de2 {font-family: 'Courier New', Courier, monospace; font-weight: normal;}
|
||||
.html4strict {font-family: monospace;}
|
||||
.html4strict .imp {font-weight: bold; color: red;}
|
||||
.html4strict li {background: #ffffff;}
|
||||
.html4strict li.li2 {background: #f8f8f8;}
|
||||
.html4strict .kw1 {color: #b1b100;}
|
||||
.html4strict .kw2 {color: #000000;}
|
||||
.html4strict .kw3 {color: #000066;}
|
||||
.html4strict .coMULTI {color: #008800;}
|
||||
.html4strict .es0 {color: #000099;}
|
||||
.html4strict .br0 {color: #66cc66;}
|
||||
.html4strict .st0 {color: #008888;}
|
||||
.html4strict .nu0 {color: #cc66cc;}
|
||||
.html4strict .sc0 {color: #00bbbb;}
|
||||
.html4strict .sc1 {color: #bb44bb;}
|
||||
.html4strict .sc2 {color: #009900;}
|
||||
.html4strict .sc3 {color: #FF0000;}
|
||||
|
||||
|
||||
/*
|
||||
The cleverer parts of this stylesheet came from
|
||||
The Layout Reservoir - well worth a look.
|
||||
http://www.bluerobot.com/web/layouts/
|
||||
*/
|
||||
|
||||
div.syntax
|
||||
{
|
||||
background:white;
|
||||
}
|
||||
|
||||
div.syntax a
|
||||
{
|
||||
font-family: 'Courier New', Courier, monospace;
|
||||
font-weight: normal;
|
||||
color:black;
|
||||
text-decoration:underline;
|
||||
}
|
||||
|
||||
/* GeSHi (c) Nigel McNie 2004 (http://qbnz.com/highlighter) */
|
||||
.java .de1, .java .de2 {font-family: 'Courier New', Courier, monospace; font-weight: normal;}
|
||||
.java {font-family: monospace;}
|
||||
.java .imp {font-weight: bold; color: red;}
|
||||
.java li {background: #ffffff;}
|
||||
.java li.li2 {background: #f8f8f8;}
|
||||
.java .kw1 {color: #b1b100;}
|
||||
.java .kw2 {color: #000000; font-weight: bold;}
|
||||
.java .kw3 {color: #aaaadd; font-weight: bold;}
|
||||
.java .kw4 {color: #993333;}
|
||||
.java .co1 {color: #808080; font-style: italic;}
|
||||
.java .co2 {color: #a1a100;}
|
||||
.java .coMULTI {color: #808080; font-style: italic;}
|
||||
.java .es0 {color: #000099; font-weight: bold;}
|
||||
.java .br0 {color: #66cc66;}
|
||||
.java .st0 {color: #ff0000;}
|
||||
.java .nu0 {color: #cc66cc;}
|
||||
.java .me1 {color: #006600;}
|
||||
.java .me2 {color: #006600;}
|
||||
BIN
mozilla/java/plugins/examples/style/win.bg.bl.gif
Executable file
|
After Width: | Height: | Size: 160 B |
BIN
mozilla/java/plugins/examples/style/win.bg.bottom.gif
Executable file
|
After Width: | Height: | Size: 411 B |
BIN
mozilla/java/plugins/examples/style/win.bg.br.gif
Executable file
|
After Width: | Height: | Size: 160 B |
BIN
mozilla/java/plugins/examples/style/win.bg.tl.gif
Executable file
|
After Width: | Height: | Size: 186 B |
BIN
mozilla/java/plugins/examples/style/win.bg.top.gif
Executable file
|
After Width: | Height: | Size: 197 B |
BIN
mozilla/java/plugins/examples/style/win.bg.tr.gif
Executable file
|
After Width: | Height: | Size: 185 B |