Commit 8276d060 authored by Dele Olajide's avatar Dele Olajide

ofmeet plugin removal

Move openfire meetings from core repository
parent b7216469

Too many changes to show.

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Openfire Meetings Plugin Changelog</title>
<style type="text/css">
BODY {
font-size: 100%;
}
BODY, TD, TH {
font-family: tahoma, verdana, arial, helvetica, sans-serif;
font-size: 0.8em;
}
H2 {
font-size: 10pt;
font-weight: bold;
padding-left: 1em;
}
A:hover {
text-decoration: none;
}
H1 {
font-family: tahoma, arial, helvetica, sans-serif;
font-size: 1.4em;
font-weight: bold;
border-bottom: 1px #ccc solid;
padding-bottom: 2px;
}
TT {
font-family: courier new;
font-weight: bold;
color: #060;
}
PRE {
font-family: courier new;
font-size: 100%;
}
</style>
</head>
<body>
<h1>
Openfire Meetings Plugin Changelog
</h1>
<p><b>0.3.1</b> -- December 12, 2015</p>
<ul>
<li>Fixed issue with broken presence broadcast</li>
<li>Fixed issue with broken desktop/screen sharing</li>
<li>Fixed issue with missing jnsctp.dll dependencies</li>
<li>Removed some more redundant or duplicate jar files in jitsivideobridge lib</li>
</ul>
<p><b>0.3.0</b> -- October 12, 2015</p>
<ul>
<li>[<a href='http://www.igniterealtime.org/issues/browse/OF-953'>OF-953</a>] - Updated JSP libraries.</li>
<li>Requires Openfire 3.11.0.</li>
</ul>
<p><b>0.2.3</b> -- Nov 14th, 2015</p>
<ul>
<li>Simplified build, removed classes folder in WEB-INF</li>
<li>Changed default value for voip gateway to false</li>
<li>Removed some redundant and duplicate jar file in jitsivideobridge lib</li>
<li>Removed tinder.jar and whack.jar which caused ComponentManagerFactory.getComponentManager() to fail with OF 3.11</li>
</ul>
<p><b>0.2.2</b> -- Oct 9th, 2015</p>
<ul>
<li>Reverted Jitsi Videobridge latest code because of issues on linux builds</li>
</ul>
<p><b>0.2.1</b> -- Oct 8th, 2015</p>
<ul>
<li>Updated Jitsi Videobridge to latest code</li>
<li>Fixed issues with Jigasi voip gateway</li>
<li>Added Multicast RTP to Jigasi voip gateway</li>
</ul>
<p><b>0.2.0</b> -- Aug 29th, 2015</p>
<ul>
<li>Updated Jitsi Videobridge to latest code</li>
<li>Removed support for jingle nodes, redundant.</li>
<li>Used IP Address instead of host name for NAT_HARVESTER_LOCAL_ADDRESS and NAT_HARVESTER_PUBLIC_ADDRESS.</li>
</ul>
<p><b>0.1.9</b> -- Aug 4th, 2015</p>
<ul>
<li>Fixed issue in build process (the J2EE version that is used should not be platform-dependant).</li>
</ul>
<p><b>0.1.8</b> -- May 20th, 2015</p>
<ul>
<li>Added conference UI customization to Meetings Settings Admin web page</li>
<li>Fixed issue with room locking not working</li>
<li>Updated Jitsi Videobridge</li>
</ul>
<p><b>0.1.7</b> -- May 13th, 2015</p>
<ul>
<li>Logs openfire meeting audit events with Openfire security auditor</li>
<li>Logs meeting SIP calls via SIP plugin</li>
<li>Added support for audio conferencing meetings (no video)</li>
<li>Updated Jitsi Videobridge</li>
</ul>
<p><b>0.1.6</b> -- May 9th, 2015</p>
<ul>
<li>Added support for media relaying using the JingleNodes plugin</li>
</ul>
<p><b>0.1.5</b> -- May 4th, 2015</p>
<ul>
<li>Implemented Meeting Planner and automatic invites. Requires bookmarks from the clientcontrol plugin</li>
<li>Fixed error modified setLocalDescription failed with desktop share</li>
<li>Prevents sending invalid presence packets, before MUC jid is defined</li>
<li>Added support for web+meet: protocol handling</li>
<li>Updated Jitsi Videobridge</li>
</ul>
<p><b>0.1.4</b> -- March 13th, 2015</p>
<ul>
<li>Added focus username and password to the admin settings page</li>
<li>Updated Jitsi Videobridge</li>
</ul>
<p><b>0.1.3</b> -- Feb 28th, 2015</p>
<ul>
<li>Implemented server-side Smack Virtual XMPP Connection for conference focus instead of default TCP connection</li>
<li>Updated chrome extension to 0.0.5</li>
<li>Updated Jitsi Videobridge</li>
</ul>
<p><b>0.1.2</b> -- Feb 15th, 2015</p>
<ul>
<li>Added shared scrum board (post-it notes) Openfire Meetings Collaboration Application</li>
<li>Added "disable cursor" feature to Openfire Meetings Collaboration API</li>
<li>Added "ofmeet.js" and "ofmeet.css" to enable Openfire Meetings to be used as an API in other web applications</li>
<li>Provided webcomponent to wrap Openfire Meetings API into an HTML tag &lt;openfire-meetings&gt;</li>
<li>Updated chrome extension to 0.0.3</li>
</ul>
<p><b>0.1.1</b> -- Feb 8th, 2015</p>
<ul>
<li>Added co-browsing to collaboration api</li>
<li>Moved collaboration api to chrome extension for co-browsing</li>
<li>Updated chrome extension to 0.0.2</li>
</ul>
<p><b>0.1.0</b> -- Feb 4th, 2015</p>
<ul>
<li>Implemented Openfire Meeting collaborative applications api</li>
<li>Added simple sample applications for rich text editing and whiteboard</li>
</ul>
<p><b>0.0.9</b> -- Jan 26th, 2015</p>
<ul>
<li>Fixed error when webcam is not available</li>
<li>Jitsi Videobridge server code refresh</li>
</ul>
<p><b>0.0.8</b> -- Jan 16th, 2015</p>
<ul>
<li>Fixed race condition causing focus xmpp connection to fail</li>
<li>Increased response timeout for focus</li>
<li>Improved error handling for read-only user providers like LDAP</li>
<li>Disable SIP gateway with a property (org.jitsi.videobridge.ofmeet.sip.enabled)</li>
</ul>
<p><b>0.0.7</b> -- Jan 5th, 2015</p>
<ul>
<li>Implemented PDF cursor sharing</li>
</ul>
<p><b>0.0.6</b> -- Dec 29th, 2014</p>
<ul>
<li>Fixed fault with exception when clientcontrol plugin is missing</li>
<li>Fixed fault with focus when hostname is localhost</li>
<li>Removed install logic for chrome extension. Always requires a manual install</li>
<li>Fixed broken audio and video bandwidth configuration with server-side focus change.</li>
</ul>
<p><b>0.0.5</b> -- Dec 15th, 2014</p>
<ul>
<li>Added support for clientcontrol plugin groupchat bookmarks and pdf urls</li>
<li>Added jicofo, server-side conference focus</li>
<li>Updated to latest Jitsi Meet and Jitsi Videobridge</li>
</ul>
<p><b>0.0.3</b> -- Dec 6th, 2014</p>
<ul>
<li>Changed version to 3.9.9 to overcome bug in openfire version control</li>
<li>Added recording parameters to admin web page</li>
<li>Updated Jitsi Meet and Jitsi Videobridge</li>
<li>Added Spark plugin</li>
<li>Added support for Openfire vCard avatars</li>
</ul>
<p><b>0.0.2</b> -- Nov 30th, 2014</p>
<ul>
<li>Added Candy and Fastpath.</li>
</ul>
<p><b>0.0.1</b> -- Nov 27th, 2014</p>
<ul>
<li>Initial release.</li>
</ul>
</body>
</html>
handlers= java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level = ALL
java.util.logging.ConsoleHandler.formatter = net.java.sip.communicator.util.ScLogFormatter
.level=INFO
# FIXME: remove once RTT issue is fixed
org.jitsi.impl.neomedia.MediaStreamStatsImpl.level=WARNING
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<plugin>
<class>org.jivesoftware.openfire.plugin.ofmeet.OfMeetPlugin</class>
<name>Openfire Meetings</name>
<description>Provides high quality, scalable video conferences using Jitsi Meet and Jitsi Videobridge</description>
<author>Ignite Realtime</author>
<version>0.3.1</version>
<date>12/12/2015</date>
<minServerVersion>3.11.0 alpha</minServerVersion>
<adminconsole>
<tab id="tab-ofmeet" name="${plugin.title}" url="ofmeet-summary.jsp" description="${plugin.description}">
<sidebar id="siderbar-ofmeet" name="${plugin.title}">
<item id="ofmeet-summary" name="${config.page.summary.title}" description="${config.page.summary.description}" url="ofmeet-summary.jsp"/>
<item id="ofmeet-settings" name="${config.page.settings.title}" description="${config.page.settings.description}" url="ofmeet-settings.jsp"/>
<item id="ofmeet-planner" name="${config.page.planner.title}" description="${config.page.planner.description}" url="ofmeet-planner.jsp"/>
</sidebar>
</tab>
</adminconsole>
</plugin>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Openfire Meetings Plugin Readme</title>
<style type="text/css">
BODY {
font-size: 100%;
}
BODY, TD, TH {
font-family: tahoma, verdana, arial, helvetica, sans-serif;
font-size: 0.8em;
}
H2 {
font-size: 10pt;
font-weight: bold;
}
A:hover {
text-decoration: none;
}
H1 {
font-family: tahoma, arial, helvetica, sans-serif;
font-size: 1.4em;
font-weight: bold;
border-bottom: 1px #ccc solid;
padding-bottom: 2px;
}
TT {
font-family: courier new;
font-weight: bold;
color: #060;
}
PRE {
font-family: courier new;
font-size: 100%;
}
</style>
</head>
<body>
<h1>
Openfire Meetings Plugin Readme
</h1>
<h2>Overview</h2>
<p>
Openfire Meetings
</p>
<div>
<p>Ignite Realtime is pleased to announce "Openfire Meetings", a new plugin for Openfire that continues the development of the ofmeet web application which was part of the now deprecated <a href="https://community.igniterealtime.org/community/support/jitsi_videobridge_plugin">Jitsi-videobridge plugin</a>.</p>
<p style="min-height: 8pt; padding: 0px;">&nbsp;</p><p><strong>PLEASE NOTE</strong> - You will need at least Openfire 3.10.0 to use this plugin. You will also need the <a href="https://chrome.google.com/webstore/detail/openfire-meetings-chrome/fohfnhgabmicpkjcpjpjongpijcffaba?hl=en-GB">Openfire Meetings Chrome extension</a> for screen sharing, co-browsing and application sharing.</p>
<p><a href="https://community.igniterealtime.org/servlet/JiveServlet/showImage/38-1730-22181/ofmeet1.png"><img alt="ofmeet1.png" height="272" src="https://community.igniterealtime.org/servlet/JiveServlet/downloadImage/38-1730-22181/432-272/ofmeet1.png" style="width:432px; height: 272.438709677419px;" width="432"/></a></p>
<p style="min-height: 8pt; padding: 0px;">&nbsp;</p><p>Openfire Meetings is a complete standalone plugin powered by Jitsi Videobridge. It does not depend on any other plugins. It can be enhanced by adding the optional client control and fastpath plugins. The client control plugin will enable the management and user provisioning of PDF presentation urls and conference bookmarks. Users can select presentations and conferences from a pull down list.</p><p style="min-height: 8pt; padding: 0px;">&nbsp;</p>
<p><a href="https://community.igniterealtime.org/servlet/JiveServlet/showImage/38-1730-22275/ofmeet3.png"><img alt="ofmeet3.png" height="160" src="https://community.igniterealtime.org/servlet/JiveServlet/downloadImage/38-1730-22275/428-160/ofmeet3.png" style="width:428px; height: 160.325732899023px;" width="428"/></a></p>
<p style="min-height: 8pt; padding: 0px;">&nbsp;</p><p>The front-end web application is a combination of Candy and Jitsi Meet and enables the following features</p>
<ul>
<li>Openfire user authentication directly from web browser for both Candy and Jitsi Meet</li>
<li>Audio, Video and Telephone (SIP) conferencing directly with Jitsi Meet and from Candy</li>
<li>Desktop sharing (screen and applications) using the Openfire Meetings Chrome extension</li>
<li>Fastpath user agent with audio and video using the Candy and Jitsi Meet web applications. It also requires Fastpath plugin to be installed.</li>
<li>Configuration directly from Openfire admin web pages.</li>
</ul>
<p style="min-height: 8pt; padding: 0px;">&nbsp;</p><p><a href="https://community.igniterealtime.org/servlet/JiveServlet/showImage/38-1730-22276/ofmeet2.png"><img alt="ofmeet2.png" height="224" src="https://community.igniterealtime.org/servlet/JiveServlet/downloadImage/38-1730-22276/397-224/ofmeet2.png" style="width:397px; height: 223.661971830986px;" width="397"/></a></p>
<p><strong>How to use</strong></p>
<p><span>Jitsi Meet - </span>select room - https://your-server.com:7443/ofmeet<br/>specify room - https://your-server.com:7443/ofmeet/?r=xxxxx<br/>audio only (no video) - https://your-server.com:7443/ofmeet/?r=xxxxx&novideo=true</p>
<p><span>Spark Plugin - </span>download https://your-server.com:7443/ofmeet/spark/ofmeet-plugin.jar</p>
<p>Candy - https://your-server.com:7443/ofmeet/candy.html</p>
<p>JavaScript example - https://your-server.com:7443/ofmeet/api</p>
<p>Replace port 7443 by 7070 for http instead of https</p>
<p style="min-height: 8pt; padding: 0px;">&nbsp;</p><p><a href="https://community.igniterealtime.org/servlet/JiveServlet/showImage/38-1730-22278/ofmeet5.png"><img alt="ofmeet5.png" height="93" src="https://community.igniterealtime.org/servlet/JiveServlet/downloadImage/38-1730-22278/ofmeet5.png" style="height: auto;" width="300"/></a></p>
</div>
<div>
<p>It also has a meeting planner feature that enables you to schedule meetings in advance using a calendar. When you add a meeting to the calendar, a request to join the meeting is automatically generated and sent to each participant using Openfire's email service 15 mins before the meeting starts. Included in the email is a link to join the meeting from a Chrome web browser.</p><p><a href="https://community.igniterealtime.org/servlet/JiveServlet/showImage/38-1762-66498/Image2.jpg"><img alt="Image2.jpg" height="215" src="https://community.igniterealtime.org/servlet/JiveServlet/downloadImage/38-1762-66498/379-215/Image2.jpg" style="width:379px; height: 215.108108108108px;" width="379"></a><a href="https://community.igniterealtime.org/servlet/JiveServlet/showImage/38-1762-66502/Image5.jpg"><img alt="Image5.jpg" height="175" src="https://community.igniterealtime.org/servlet/JiveServlet/downloadImage/38-1762-66502/212-175/Image5.jpg" style="width:212px; height: 174.9px;" width="212"></a></p><p>In order to use this feature, you will need:<br><br></p><ul><li>Registered Openfire users with valid email address,</li><li>A persistent MUC room to host each planned meeting</li><li>The Openfire ClientControl plugin installed to create a room bookmark that links the room to users or user groups. Bookmarks with all users selected are ignored.<br><a href="https://community.igniterealtime.org/servlet/JiveServlet/showImage/38-1762-66501/Image6.jpg"><img alt="Image6.jpg" height="210" src="https://community.igniterealtime.org/servlet/JiveServlet/downloadImage/38-1762-66501/375-210/Image6.jpg" style="width:375px; height: 209.879032258065px;" width="375"></a></li><li>The Openfire Email Service configured to deliver emails<br><a href="https://community.igniterealtime.org/servlet/JiveServlet/showImage/38-1762-66500/Image4.jpg"><img alt="Image4.jpg" height="408" src="https://community.igniterealtime.org/servlet/JiveServlet/downloadImage/38-1762-66500/Image4.jpg" style="width: 620px; height: 209px;" width="1210"></a></li></ul><p>The calendar is implemented using the excellent open source <a href="http://fullcalendar.io/" rel="nofollow" target="_blank">FullCalendar</a> jQuery plugin by Adam Shaw.</p>
</div>
<p>Discussion place is in the <a href="https://community.igniterealtime.org/community/plugins/commplugins/openfire-meetings/activity">community plugins, here</a></p>
<div>
</div>
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>proxy</servlet-name>
<servlet-class>org.jitsi.videobridge.openfire.HttpProxy</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>proxy</servlet-name>
<url-pattern>/proxy</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>config</servlet-name>
<servlet-class>org.jitsi.videobridge.openfire.Config</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>config</servlet-name>
<url-pattern>/config</url-pattern>
</servlet-mapping>
</web-app>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff is collapsed.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="480"
height="270"
id="svg2"
version="1.1"
inkscape:version="0.48.2 r9819"
sodipodi:docname="videomask.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="-16.428571"
inkscape:cy="520"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="998"
inkscape:window-height="711"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-782.36218)">
<rect
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.92795467;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
id="rect2985"
width="479.07202"
height="269.07205"
x="0.46397734"
y="782.82617"
ry="20" />
</g>
</svg>
<html>
<head>
<style>
html, body{
margin:0px;
height:100%;
color: #424242;
font-family:'Helvetica Neue', Helvetica, sans-serif;
font-weight: 400;
background: #000000;
overflow-x: hidden;
}
</style>
<script src="../chrome-extension/ofmeet-api.js?v=1"></script>
<script>
var conn = null;
var visible = false;
var joined = false;
function urlParam(name)
{
var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
if (!results) { return undefined; }
return unescape(results[1] || undefined);
};
$(document).bind('ofmeet.connected', function (event, connection)
{
console.log("ofmeet connected", connection);
ofmeet.joinRoom("alizecornet", true);
//ofmeet.VideoLayout.inputDisplayNameHandler("Frank Dodd");
conn = connection;
visible = true;
joined = true;
setInterval(function()
{
/*
ofmeet.toggleVideo();
ofmeet.toggleAudio();
ofmeet.toggleScreenSharing();
ofmeet.toggleFilmStrip();
ofmeet.visible(visible);
visible = !visible;
if (joined)
{
ofmeet.leaveRoom();
joined = false;
} else {
ofmeet.joinRoom("alizecornet", true);
joined = true;
}
*/
}, 60000);
});
$(document).bind('ofmeet.ready', function ()
{
console.log("ofmeet.ready");
ofmeet.connect(urlParam("novideo"));
});
$(document).ready(function ()
{
console.log("document.ready");
//ofmeet.ready("username", "password");
ofmeet.ready();
});
$(document).bind('remotevideo.resized', function (event, width, height)
{
//console.log("remotevideo.resized", event, width, height);
});
$(document).bind('audiomuted.muc', function (event, jid, isMuted)
{
//console.log("audiomuted.muc", event, jid, isMuted);
});
$(document).bind('videomuted.muc', function (event, jid, isMuted)
{
//console.log("videomuted.muc", event, jid, isMuted);
});
$(document).bind('displaynamechanged', function (event, jid, displayName, status)
{
//console.log("displaynamechanged", event, jid, displayName, status);
});
$(document).bind('dominantspeakerchanged', function (event, resourceJid)
{
//console.log("dominantspeakerchanged", event, resourceJid);
});
$(document).bind('lastnchanged', function ( event, lastNEndpoints, endpointsEnteringLastN, stream)
{
//console.log("lastnchanged", event, lastNEndpoints, endpointsEnteringLastN, stream);
});
$(document).bind('videoactive.jingle', function (event, videoelem)
{
//console.log("videoactive.jingle", event, videoelem);
});
$(document).bind('simulcastlayerschanging', function (event, endpointSimulcastLayers)
{
//console.log("simulcastlayerschanging", event, endpointSimulcastLayers);
});
$(document).bind('simulcastlayerschanged', function (event, endpointSimulcastLayers)
{
//console.log("simulcastlayerschanged", event, endpointSimulcastLayers);
});
$(document).bind('startsimulcastlayer', function (event, simulcastLayer)
{
//console.log("startsimulcastlayer", event, simulcastLayer);
});
$(document).bind('stopsimulcastlayer', function (event, simulcastLayer)
{
//console.log("startsimulcastlayer", event, simulcastLayer);
});
$(document).bind('role.changed.muc', function (event, jid, info, pres)
{
//console.log("role.changed.muc", event, jid, info, pres);
});
$(document).bind('local.role.changed.muc', function (event, jid, info, pres)
{
//console.log("local.role.changed.muc", event, jid, info, pres);
});
$(document).bind('remotestreamadded.jingle', function (event, data, sid)
{
//console.log("remotestreamadded.jingle", event, data, sid);
});
$(document).bind('callincoming.jingle', function (event, sid)
{
console.log("callincoming.jingle", event, sid);
});
$(document).bind('conferenceCreated.jingle', function (event, focus)
{
console.log("conferenceCreated.jingle", event, focus);
});
$(document).bind('setLocalDescription.jingle', function (event, sid)
{
console.log("setLocalDescription.jingle", event, sid);
});
$(document).bind('setLocalDescription.jingle', function (event, sid)
{
console.log("setLocalDescription.jingle", event, sid);
});
$(document).bind('iceconnectionstatechange.jingle', function (event, sid, session)
{
console.log("iceconnectionstatechange.jingle", event, sid, session);
});
$(document).bind('left.muc', function (event, jid)
{
//console.log("left.muc", event, jid);
});
$(document).bind('joined.muc', function (event, jid, info)
{
//console.log("joined.muc", event, jid, info);
});
$(document).bind('entered.muc', function (event, jid, info, pres)
{
//console.log("entered.muc", event, jid, info, pres);
});
$(document).bind('presence.muc', function (event, jid, info, pres)
{
//console.log("presence.muc", event, jid, info, pres);
});
$(document).bind('presence.status.muc', function (event, jid, info, pres)
{
//console.log("presence.status.muc", event, jid, info, pres);
});
$(document).bind('kicked.muc', function (event, jid)
{
//console.log("kicked.muc", event, jid);
});
$(document).bind('passwordrequired.muc', function (event, jid)
{
//console.log("passwordrequired.muc", event, jid);
});
$(document).bind("selectedendpointchanged", function(event, userJid)
{
//console.log("selectedendpointchanged", event, userJid);
});
$(document).bind("pinnedendpointchanged", function(event, userJid)
{
//console.log("pinnedendpointchanged", event, userJid);
});
$(document).bind('fatalError.jingle', function (event, session, error)
{
//console.log("fatalError.jingle", event, session, error);
});
$(document).bind('error.jingle', function (event, session, error)
{
//console.log("error.jingle", event, session, error);
});
</script>
</head>
<body>
<h1>Openfire Meetings</h1>
</body>
</html>
This diff is collapsed.
<html>
<head>
<title>Testing openfire-meetings web component</title>
<link rel="import" href="openfire-meetings.html"></link>
<script>
var visible = true;
var joined = false;
$(document).bind('ofmeet.connected', function (event, connection)
{
console.log("ofmeet connected", connection);
ofmeet.joinRoom("alizecornet", true);
joined = true;
//ofmeet.VideoLayout.inputDisplayNameHandler("Frank Dodd");
setInterval(function()
{
console.log("ofmeet test cycle", joined);
/*
ofmeet.toggleVideo();
ofmeet.toggleAudio();
ofmeet.toggleScreenSharing();
ofmeet.toggleFilmStrip();
ofmeet.visible(visible);
visible = !visible;
if (joined)
{
ofmeet.leaveRoom();
joined = false;
} else {
ofmeet.joinRoom("alizecornet", true);
joined = true;
}
*/
}, 60000);
});
$(document).bind('ofmeet.ready', function ()
{
console.log("ofmeet ready");
ofmeet.connect();
});
$(document).ready(function ()
{
console.log("document.ready");
ofmeet.ready("jamesbond", "007");
});
$(document).bind('remotevideo.resized', function (event, width, height)
{
//console.log("remotevideo.resized", event, width, height);
});
$(document).bind('audiomuted.muc', function (event, jid, isMuted)
{
//console.log("audiomuted.muc", event, jid, isMuted);
});
$(document).bind('videomuted.muc', function (event, jid, isMuted)
{
//console.log("videomuted.muc", event, jid, isMuted);
});
$(document).bind('displaynamechanged', function (event, jid, displayName, status)
{
//console.log("displaynamechanged", event, jid, displayName, status);
});
$(document).bind('dominantspeakerchanged', function (event, resourceJid)
{
//console.log("dominantspeakerchanged", event, resourceJid);
});
$(document).bind('lastnchanged', function ( event, lastNEndpoints, endpointsEnteringLastN, stream)
{
//console.log("lastnchanged", event, lastNEndpoints, endpointsEnteringLastN, stream);
});
$(document).bind('videoactive.jingle', function (event, videoelem)
{
//console.log("videoactive.jingle", event, videoelem);
});
$(document).bind('simulcastlayerschanging', function (event, endpointSimulcastLayers)
{
//console.log("simulcastlayerschanging", event, endpointSimulcastLayers);
});
$(document).bind('simulcastlayerschanged', function (event, endpointSimulcastLayers)
{
//console.log("simulcastlayerschanged", event, endpointSimulcastLayers);
});
$(document).bind('startsimulcastlayer', function (event, simulcastLayer)
{
//console.log("startsimulcastlayer", event, simulcastLayer);
});
$(document).bind('stopsimulcastlayer', function (event, simulcastLayer)
{
//console.log("startsimulcastlayer", event, simulcastLayer);
});
$(document).bind('role.changed.muc', function (event, jid, info, pres)
{
//console.log("role.changed.muc", event, jid, info, pres);
});
$(document).bind('local.role.changed.muc', function (event, jid, info, pres)
{
//console.log("local.role.changed.muc", event, jid, info, pres);
});
$(document).bind('remotestreamadded.jingle', function (event, data, sid)
{
//console.log("remotestreamadded.jingle", event, data, sid);
});
$(document).bind('callincoming.jingle', function (event, sid)
{
//console.log("callincoming.jingle", event, sid);
});
$(document).bind('conferenceCreated.jingle', function (event, focus)
{
//console.log("conferenceCreated.jingle", event, focus);
});
$(document).bind('setLocalDescription.jingle', function (event, sid)
{
//console.log("setLocalDescription.jingle", event, sid);
});
$(document).bind('setLocalDescription.jingle', function (event, sid)
{
//console.log("setLocalDescription.jingle", event, sid);
});
$(document).bind('iceconnectionstatechange.jingle', function (event, sid, session)
{
//console.log("iceconnectionstatechange.jingle", event, sid, session);
});
$(document).bind('left.muc', function (event, jid)
{
//console.log("left.muc", event, jid);
});
$(document).bind('joined.muc', function (event, jid, info)
{
//console.log("joined.muc", event, jid, info);
});
$(document).bind('entered.muc', function (event, jid, info, pres)
{
//console.log("joined.muc", event, jid, info, pres, ofmeet);
});
$(document).bind('presence.muc', function (event, jid, info, pres)
{
//console.log("presence.muc", event, jid, info, pres, ofmeet);
});
$(document).bind('presence.status.muc', function (event, jid, info, pres)
{
//console.log("presence.status.muc", event, jid, info, pres);
});
$(document).bind('kicked.muc', function (event, jid)
{
//console.log("kicked.muc", event, jid);
});
$(document).bind('passwordrequired.muc', function (event, jid)
{
//console.log("passwordrequired.muc", event, jid);
});
$(document).bind("selectedendpointchanged", function(event, userJid)
{
//console.log("selectedendpointchanged", event, userJid);
});
$(document).bind("pinnedendpointchanged", function(event, userJid)
{
//console.log("pinnedendpointchanged", event, userJid);
});
$(document).bind('fatalError.jingle', function (event, session, error)
{
//console.log("fatalError.jingle", event, session, error);
});
$(document).bind('error.jingle', function (event, session, error)
{
//console.log("error.jingle", event, session, error);
});
</script>
</head>
<body>
<openfire-meetings></openfire-meetings>
</body>
</html>
\ No newline at end of file
<html>
<script src="../chrome-extension/ofmeet-api.js?v=1"></script>
<script>
var proto = Object.create(HTMLElement.prototype);
proto.createdCallback = function()
{
var room = this.getAttribute("room");
$(document).bind('ofmeet.connected', function (event, connection)
{
//console.log("ofmeet connected", connection);
if (room) ofmeet.joinRoom(room, true);
});
};
document.registerElement("openfire-meetings", {prototype: proto});
</script>
</html>
\ No newline at end of file
/**
* Implements API class that communicates with external api class
* and provides interface to access Jitsi Meet features by external
* applications that embed Jitsi Meet
*/
var APIConnector = (function () {
function APIConnector() { }
/**
* List of the available commands.
* @type {{
* displayName: inputDisplayNameHandler,
* muteAudio: toggleAudio,
* muteVideo: toggleVideo,
* filmStrip: toggleFilmStrip
* }}
*/
var commands =
{
displayName: VideoLayout.inputDisplayNameHandler,
muteAudio: toggleAudio,
muteVideo: toggleVideo,
toggleFilmStrip: BottomToolbar.toggleFilmStrip,
toggleChat: BottomToolbar.toggleChat,
toggleContactList: BottomToolbar.toggleContactList
};
/**
* Maps the supported events and their status
* (true it the event is enabled and false if it is disabled)
* @type {{
* incomingMessage: boolean,
* outgoingMessage: boolean,
* displayNameChange: boolean,
* participantJoined: boolean,
* participantLeft: boolean
* }}
*/
var events =
{
incomingMessage: false,
outgoingMessage:false,
displayNameChange: false,
participantJoined: false,
participantLeft: false
};
/**
* Check whether the API should be enabled or not.
* @returns {boolean}
*/
APIConnector.isEnabled = function () {
var hash = location.hash;
if(hash && hash.indexOf("external") > -1 && window.postMessage)
return true;
return false;
};
/**
* Initializes the APIConnector. Setups message event listeners that will
* receive information from external applications that embed Jitsi Meet.
* It also sends a message to the external application that APIConnector
* is initialized.
*/
APIConnector.init = function () {
if (window.addEventListener)
{
window.addEventListener('message',
APIConnector.processMessage, false);
}
else
{
window.attachEvent('onmessage', APIConnector.processMessage);
}
APIConnector.sendMessage({type: "system", loaded: true});
};
/**
* Sends message to the external application.
* @param object
*/
APIConnector.sendMessage = function (object) {
window.parent.postMessage(JSON.stringify(object), "*");
};
/**
* Processes a message event from the external application
* @param event the message event
*/
APIConnector.processMessage = function(event)
{
var message;
try {
message = JSON.parse(event.data);
} catch (e) {}
if(!message.type)
return;
switch (message.type)
{
case "command":
APIConnector.processCommand(message);
break;
case "event":
APIConnector.processEvent(message);
break;
default:
console.error("Unknown type of the message");
return;
}
};
/**
* Processes commands from external applicaiton.
* @param message the object with the command
*/
APIConnector.processCommand = function (message)
{
if(message.action != "execute")
{
console.error("Unknown action of the message");
return;
}
for(var key in message)
{
if(commands[key])
commands[key].apply(null, message[key]);
}
};
/**
* Processes events objects from external applications
* @param event the event
*/
APIConnector.processEvent = function (event) {
if(!event.action)
{
console.error("Event with no action is received.");
return;
}
switch(event.action)
{
case "add":
for(var i = 0; i < event.events.length; i++)
{
events[event.events[i]] = true;
}
break;
case "remove":
for(var i = 0; i < event.events.length; i++)
{
events[event.events[i]] = false;
}
break;
default:
console.error("Unknown action for event.");
}
};
/**
* Checks whether the event is enabled ot not.
* @param name the name of the event.
* @returns {*}
*/
APIConnector.isEventEnabled = function (name) {
return events[name];
};
/**
* Sends event object to the external application that has been subscribed
* for that event.
* @param name the name event
* @param object data associated with the event
*/
APIConnector.triggerEvent = function (name, object) {
APIConnector.sendMessage({
type: "event", action: "result", event: name, result: object});
};
/**
* Removes the listeners.
*/
APIConnector.dispose = function () {
if(window.removeEventListener)
{
window.removeEventListener("message",
APIConnector.processMessage, false);
}
else
{
window.detachEvent('onmessage', APIConnector.processMessage);
}
};
return APIConnector;
})();
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
/* GLOBAL STYLES
-------------------------------------------------- */
/* Padding below the footer and lighter body text */
body {
padding-bottom: 40px;
color: #5a5a5a;
}
/* CUSTOMIZE THE NAVBAR
-------------------------------------------------- */
/* Special class on .container surrounding .navbar, used for positioning it into place. */
.navbar-wrapper {
position: relative;
z-index: 15;
}
/* CUSTOMIZE THE CAROUSEL
-------------------------------------------------- */
/* Carousel base class */
.carousel {
padding-top: 60px;
padding-bottom: 60px;
background: #ccc;
/* Negative margin to pull up carousel. 90px is roughly margins and height of navbar. */
/*margin-top: -90px;*/
}
/* Since positioning the image, we need to help out the caption */
.carousel-caption {
z-index: 10;
}
/* Declare heights because of positioning of img element */
.carousel .item {
height: 500px;
}
.carousel-inner > .item > img {
position: absolute;
top: 0;
left: 0;
min-width: 100%;
height: 500px;
}
/* MARKETING CONTENT
-------------------------------------------------- */
/* Pad the edges of the mobile views a bit */
.marketing {
padding-left: 15px;
padding-right: 15px;
}
/* Center align the text within the three columns below the carousel */
.marketing .col-lg-4 {
text-align: center;
margin-bottom: 20px;
}
.marketing h2 {
font-weight: normal;
}
.marketing .col-lg-4 p {
margin-left: 10px;
margin-right: 10px;
}
/* Featurettes
------------------------- */
.featurette-divider {
margin: 80px 0; /* Space out the Bootstrap <hr> more */
}
.featurette {
padding-top: 120px; /* Vertically center images part 1: add padding above and below text. */
overflow: hidden; /* Vertically center images part 2: clear their floats. */
}
.featurette-image {
margin-top: -120px; /* Vertically center images part 3: negative margin up the image the same amount of the padding to center it. */
}
/* Give some space on the sides of the floated elements so text doesn't run right into it. */
.featurette-image.pull-left {
margin-right: 40px;
}
.featurette-image.pull-right {
margin-left: 40px;
}
/* Thin out the marketing headings */
.featurette-heading {
font-size: 50px;
font-weight: 300;
line-height: 1;
letter-spacing: -1px;
}
/* RESPONSIVE CSS
-------------------------------------------------- */
@media (min-width: 768px) {
/* Remve the edge padding needed for mobile */
.marketing {
padding-left: 0;
padding-right: 0;
}
/* Navbar positioning foo */
.navbar-wrapper {
margin-top: 20px;
}
/* The navbar becomes detached from the top, so we round the corners */
.navbar-wrapper .navbar {
border-radius: 4px;
}
/* Bump up size of carousel content */
.carousel-caption p {
margin-bottom: 20px;
font-size: 21px;
line-height: 1.4;
}
}
/*THESE ARE GUIDELINES*/
.container {
/* padding-left: 15px;
padding-right: 15px;*/
}
.row {
margin-bottom: 20px;
}
.row .row {
margin-top: 10px;
margin-bottom: 0;
}
[class*="col-"] {
padding-top: 15px;
padding-bottom: 15px;
border: 1px solid #ddd;
/*background-color: rgba(0,0,0,.15);*/
border: 0px solid rgba(86,61,124,.2);
}
hr {
margin-top: 40px;
margin-bottom: 40px;
}
\ No newline at end of file
body {
padding-bottom: 20px;
}
/* Wrapping element */
/* Set some basic padding to keep content from hitting the edges */
.body-content {
padding-left: 15px;
padding-right: 15px;
}
/* Responsive: Portrait tablets and up */
@media screen and (min-width: 768px) {
/* Let the jumbotron breathe */
.jumbotron {
margin-top: 20px;
}
/* Remove padding from wrapping element since we kick in the grid classes here */
.body-content {
padding: 0;
}
}
\ No newline at end of file
.upper-button {
border-bottom-left-radius: 0px;
border-bottom-right-radius: 0px;
}
.bottom-button {
border-top-left-radius: 0px;
border-top-right-radius: 0px;
}
.black-pick:hover {
background-color: #000;
border-color: #000;
}
.black-pick {
background-color: #202020;
border-color: #202020;
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
// retina.js, a high-resolution image swapper (http://retinajs.com), v0.0.2
(function(){function t(e){this.path=e;var t=this.path.split("."),n=t.slice(0,t.length-1).join("."),r=t[t.length-1];this.at_2x_path=n+"@2x."+r}function n(e){this.el=e,this.path=new t(this.el.getAttribute("src"));var n=this;this.path.check_2x_variant(function(e){e&&n.swap()})}var e=typeof exports=="undefined"?window:exports;e.RetinaImagePath=t,t.confirmed_paths=[],t.prototype.is_external=function(){return!!this.path.match(/^https?\:/i)&&!this.path.match("//"+document.domain)},t.prototype.check_2x_variant=function(e){var n,r=this;if(this.is_external())return e(!1);if(this.at_2x_path in t.confirmed_paths)return e(!0);n=new XMLHttpRequest,n.open("HEAD",this.at_2x_path),n.onreadystatechange=function(){return n.readyState!=4?e(!1):n.status>=200&&n.status<=399?(t.confirmed_paths.push(r.at_2x_path),e(!0)):e(!1)},n.send()},e.RetinaImage=n,n.prototype.swap=function(e){function n(){t.el.complete?(t.el.setAttribute("width",t.el.offsetWidth),t.el.setAttribute("height",t.el.offsetHeight),t.el.setAttribute("src",e)):setTimeout(n,5)}typeof e=="undefined"&&(e=this.path.at_2x_path);var t=this;n()},e.devicePixelRatio>1&&(window.onload=function(){var e=document.getElementsByTagName("img"),t=[],r,i;for(r=0;r<e.length;r++)i=e[r],t.push(new n(i))})})();
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
// Generated by CoffeeScript 1.6.2
/*
jQuery Waypoints - v2.0.3
Copyright (c) 2011-2013 Caleb Troughton
Dual licensed under the MIT license and GPL license.
https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt
*/
(function(){var t=[].indexOf||function(t){for(var e=0,n=this.length;e<n;e++){if(e in this&&this[e]===t)return e}return-1},e=[].slice;(function(t,e){if(typeof define==="function"&&define.amd){return define("waypoints",["jquery"],function(n){return e(n,t)})}else{return e(t.jQuery,t)}})(this,function(n,r){var i,o,l,s,f,u,a,c,h,d,p,y,v,w,g,m;i=n(r);c=t.call(r,"ontouchstart")>=0;s={horizontal:{},vertical:{}};f=1;a={};u="waypoints-context-id";p="resize.waypoints";y="scroll.waypoints";v=1;w="waypoints-waypoint-ids";g="waypoint";m="waypoints";o=function(){function t(t){var e=this;this.$element=t;this.element=t[0];this.didResize=false;this.didScroll=false;this.id="context"+f++;this.oldScroll={x:t.scrollLeft(),y:t.scrollTop()};this.waypoints={horizontal:{},vertical:{}};t.data(u,this.id);a[this.id]=this;t.bind(y,function(){var t;if(!(e.didScroll||c)){e.didScroll=true;t=function(){e.doScroll();return e.didScroll=false};return r.setTimeout(t,n[m].settings.scrollThrottle)}});t.bind(p,function(){var t;if(!e.didResize){e.didResize=true;t=function(){n[m]("refresh");return e.didResize=false};return r.setTimeout(t,n[m].settings.resizeThrottle)}})}t.prototype.doScroll=function(){var t,e=this;t={horizontal:{newScroll:this.$element.scrollLeft(),oldScroll:this.oldScroll.x,forward:"right",backward:"left"},vertical:{newScroll:this.$element.scrollTop(),oldScroll:this.oldScroll.y,forward:"down",backward:"up"}};if(c&&(!t.vertical.oldScroll||!t.vertical.newScroll)){n[m]("refresh")}n.each(t,function(t,r){var i,o,l;l=[];o=r.newScroll>r.oldScroll;i=o?r.forward:r.backward;n.each(e.waypoints[t],function(t,e){var n,i;if(r.oldScroll<(n=e.offset)&&n<=r.newScroll){return l.push(e)}else if(r.newScroll<(i=e.offset)&&i<=r.oldScroll){return l.push(e)}});l.sort(function(t,e){return t.offset-e.offset});if(!o){l.reverse()}return n.each(l,function(t,e){if(e.options.continuous||t===l.length-1){return e.trigger([i])}})});return this.oldScroll={x:t.horizontal.newScroll,y:t.vertical.newScroll}};t.prototype.refresh=function(){var t,e,r,i=this;r=n.isWindow(this.element);e=this.$element.offset();this.doScroll();t={horizontal:{contextOffset:r?0:e.left,contextScroll:r?0:this.oldScroll.x,contextDimension:this.$element.width(),oldScroll:this.oldScroll.x,forward:"right",backward:"left",offsetProp:"left"},vertical:{contextOffset:r?0:e.top,contextScroll:r?0:this.oldScroll.y,contextDimension:r?n[m]("viewportHeight"):this.$element.height(),oldScroll:this.oldScroll.y,forward:"down",backward:"up",offsetProp:"top"}};return n.each(t,function(t,e){return n.each(i.waypoints[t],function(t,r){var i,o,l,s,f;i=r.options.offset;l=r.offset;o=n.isWindow(r.element)?0:r.$element.offset()[e.offsetProp];if(n.isFunction(i)){i=i.apply(r.element)}else if(typeof i==="string"){i=parseFloat(i);if(r.options.offset.indexOf("%")>-1){i=Math.ceil(e.contextDimension*i/100)}}r.offset=o-e.contextOffset+e.contextScroll-i;if(r.options.onlyOnScroll&&l!=null||!r.enabled){return}if(l!==null&&l<(s=e.oldScroll)&&s<=r.offset){return r.trigger([e.backward])}else if(l!==null&&l>(f=e.oldScroll)&&f>=r.offset){return r.trigger([e.forward])}else if(l===null&&e.oldScroll>=r.offset){return r.trigger([e.forward])}})})};t.prototype.checkEmpty=function(){if(n.isEmptyObject(this.waypoints.horizontal)&&n.isEmptyObject(this.waypoints.vertical)){this.$element.unbind([p,y].join(" "));return delete a[this.id]}};return t}();l=function(){function t(t,e,r){var i,o;r=n.extend({},n.fn[g].defaults,r);if(r.offset==="bottom-in-view"){r.offset=function(){var t;t=n[m]("viewportHeight");if(!n.isWindow(e.element)){t=e.$element.height()}return t-n(this).outerHeight()}}this.$element=t;this.element=t[0];this.axis=r.horizontal?"horizontal":"vertical";this.callback=r.handler;this.context=e;this.enabled=r.enabled;this.id="waypoints"+v++;this.offset=null;this.options=r;e.waypoints[this.axis][this.id]=this;s[this.axis][this.id]=this;i=(o=t.data(w))!=null?o:[];i.push(this.id);t.data(w,i)}t.prototype.trigger=function(t){if(!this.enabled){return}if(this.callback!=null){this.callback.apply(this.element,t)}if(this.options.triggerOnce){return this.destroy()}};t.prototype.disable=function(){return this.enabled=false};t.prototype.enable=function(){this.context.refresh();return this.enabled=true};t.prototype.destroy=function(){delete s[this.axis][this.id];delete this.context.waypoints[this.axis][this.id];return this.context.checkEmpty()};t.getWaypointsByElement=function(t){var e,r;r=n(t).data(w);if(!r){return[]}e=n.extend({},s.horizontal,s.vertical);return n.map(r,function(t){return e[t]})};return t}();d={init:function(t,e){var r;if(e==null){e={}}if((r=e.handler)==null){e.handler=t}this.each(function(){var t,r,i,s;t=n(this);i=(s=e.context)!=null?s:n.fn[g].defaults.context;if(!n.isWindow(i)){i=t.closest(i)}i=n(i);r=a[i.data(u)];if(!r){r=new o(i)}return new l(t,r,e)});n[m]("refresh");return this},disable:function(){return d._invoke(this,"disable")},enable:function(){return d._invoke(this,"enable")},destroy:function(){return d._invoke(this,"destroy")},prev:function(t,e){return d._traverse.call(this,t,e,function(t,e,n){if(e>0){return t.push(n[e-1])}})},next:function(t,e){return d._traverse.call(this,t,e,function(t,e,n){if(e<n.length-1){return t.push(n[e+1])}})},_traverse:function(t,e,i){var o,l;if(t==null){t="vertical"}if(e==null){e=r}l=h.aggregate(e);o=[];this.each(function(){var e;e=n.inArray(this,l[t]);return i(o,e,l[t])});return this.pushStack(o)},_invoke:function(t,e){t.each(function(){var t;t=l.getWaypointsByElement(this);return n.each(t,function(t,n){n[e]();return true})});return this}};n.fn[g]=function(){var t,r;r=arguments[0],t=2<=arguments.length?e.call(arguments,1):[];if(d[r]){return d[r].apply(this,t)}else if(n.isFunction(r)){return d.init.apply(this,arguments)}else if(n.isPlainObject(r)){return d.init.apply(this,[null,r])}else if(!r){return n.error("jQuery Waypoints needs a callback function or handler option.")}else{return n.error("The "+r+" method does not exist in jQuery Waypoints.")}};n.fn[g].defaults={context:r,continuous:true,enabled:true,horizontal:false,offset:0,triggerOnce:false};h={refresh:function(){return n.each(a,function(t,e){return e.refresh()})},viewportHeight:function(){var t;return(t=r.innerHeight)!=null?t:i.height()},aggregate:function(t){var e,r,i;e=s;if(t){e=(i=a[n(t).data(u)])!=null?i.waypoints:void 0}if(!e){return[]}r={horizontal:[],vertical:[]};n.each(r,function(t,i){n.each(e[t],function(t,e){return i.push(e)});i.sort(function(t,e){return t.offset-e.offset});r[t]=n.map(i,function(t){return t.element});return r[t]=n.unique(r[t])});return r},above:function(t){if(t==null){t=r}return h._filter(t,"vertical",function(t,e){return e.offset<=t.oldScroll.y})},below:function(t){if(t==null){t=r}return h._filter(t,"vertical",function(t,e){return e.offset>t.oldScroll.y})},left:function(t){if(t==null){t=r}return h._filter(t,"horizontal",function(t,e){return e.offset<=t.oldScroll.x})},right:function(t){if(t==null){t=r}return h._filter(t,"horizontal",function(t,e){return e.offset>t.oldScroll.x})},enable:function(){return h._invoke("enable")},disable:function(){return h._invoke("disable")},destroy:function(){return h._invoke("destroy")},extendFn:function(t,e){return d[t]=e},_invoke:function(t){var e;e=n.extend({},s.vertical,s.horizontal);return n.each(e,function(e,n){n[t]();return true})},_filter:function(t,e,r){var i,o;i=a[n(t).data(u)];if(!i){return[]}o=[];n.each(i.waypoints[e],function(t,e){if(r(i,e)){return o.push(e)}});o.sort(function(t,e){return t.offset-e.offset});return n.map(o,function(t){return t.element})}};n[m]=function(){var t,n;n=arguments[0],t=2<=arguments.length?e.call(arguments,1):[];if(h[n]){return h[n].apply(null,t)}else{return h.aggregate.call(null,n)}};n[m].settings={resizeThrottle:100,scrollThrottle:30};return i.load(function(){return n[m]("refresh")})})}).call(this);
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment