mirror of
https://github.com/Hopiu/jquery-mobile.git
synced 2026-04-09 17:01:05 +00:00
added tests for external links in dialogs, small refactor for dialogClickHandler function
This commit is contained in:
parent
52f86f2f9a
commit
ffafa78e62
3 changed files with 133 additions and 16 deletions
|
|
@ -11,25 +11,25 @@ $.widget( "mobile.dialog", $.mobile.widget, {
|
|||
var self = this,
|
||||
$el = self.element,
|
||||
$prevPage = $.mobile.activePage,
|
||||
$closeBtn = $('<a href="#" data-icon="delete" data-iconpos="notext">Close</a>');
|
||||
$closeBtn = $('<a href="#" data-icon="delete" data-iconpos="notext">Close</a>'),
|
||||
|
||||
dialogClickHandler = function(e){
|
||||
var $target = $(e.target);
|
||||
|
||||
var dialogClickHandler = function(e){
|
||||
var $target = $(e.target);
|
||||
// fixes issues with target links in dialogs breaking
|
||||
// page transitions by reseting the active page below
|
||||
if( $target.attr('target') || $.mobile.isExternalLink($target) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// fixes issues with target links in dialogs breaking
|
||||
// page transitions by reseting the active page below
|
||||
if( $target.attr('target') || $.mobile.isExternalLink($target) ) {
|
||||
return;
|
||||
}
|
||||
if( e.type == "click" && ( $(e.target).closest('[data-back]')[0] || this==$closeBtn[0] ) ){
|
||||
self.close();
|
||||
return false;
|
||||
}
|
||||
|
||||
if( e.type == "click" && ( $(e.target).closest('[data-back]')[0] || this==$closeBtn[0] ) ){
|
||||
self.close();
|
||||
return false;
|
||||
}
|
||||
|
||||
//otherwise, assume we're headed somewhere new. set activepage to dialog so the transition will work
|
||||
$.mobile.activePage = self.element;
|
||||
};
|
||||
//otherwise, assume we're headed somewhere new. set activepage to dialog so the transition will work
|
||||
$.mobile.activePage = self.element;
|
||||
};
|
||||
|
||||
// NOTE avoid click handler in the case of an external resource
|
||||
// TODO add function in navigation to handle external check
|
||||
|
|
|
|||
39
tests/unit/dialog/dialog_events.js
Normal file
39
tests/unit/dialog/dialog_events.js
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
/*
|
||||
* mobile dialog unit tests
|
||||
*/
|
||||
(function($){
|
||||
var testValue = "a value we can test!";
|
||||
|
||||
module('jquery.mobile.dialog.js', {
|
||||
setup: function(){
|
||||
//bring up the dialog
|
||||
$("a[href='#foo-dialog']").click();
|
||||
|
||||
// We prefer the external links don't send the browser elsewhere
|
||||
$("#foo-dialog").delegate("a", "click", function(e){
|
||||
return false;
|
||||
});
|
||||
|
||||
// set a test value to verify against change
|
||||
$.mobile.activePage = testValue;
|
||||
}
|
||||
});
|
||||
|
||||
test( "external and targeted links do not set the active page", function(){
|
||||
var verifyActivePage = function(selector){
|
||||
$(selector).click();
|
||||
same( $.mobile.activePage, testValue, "mobile active page remains untouched");
|
||||
};
|
||||
|
||||
verifyActivePage("a#http-link");
|
||||
verifyActivePage("a#mailto-link");
|
||||
verifyActivePage("a#rel-link");
|
||||
verifyActivePage("a#target-link");
|
||||
});
|
||||
|
||||
test( "non external links set the active page", function(){
|
||||
$.mobile.activePage = testValue;
|
||||
$("a#internal-link").click();
|
||||
ok( $.mobile.activePage !== testValue, "mobile active page remains untouched");
|
||||
});
|
||||
})(jQuery);
|
||||
78
tests/unit/dialog/index.html
Normal file
78
tests/unit/dialog/index.html
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>jQuery Mobile Dialog Test Suite</title>
|
||||
|
||||
<script type="text/javascript" src="../../../js/jquery.js"></script>
|
||||
<script type="text/javascript" src="../../../js/jquery.ui.widget.js"></script>
|
||||
<script type="text/javascript" src="../../../js/jquery.mobile.widget.js"></script>
|
||||
<script type="text/javascript" src="../../../js/jquery.mobile.media.js"></script>
|
||||
<script type="text/javascript" src="../../../js/jquery.mobile.support.js"></script>
|
||||
<script type="text/javascript" src="../../../js/jquery.mobile.event.js"></script>
|
||||
<script type="text/javascript" src="../../../js/jquery.mobile.hashchange.js"></script>
|
||||
<script type="text/javascript" src="../../../js/jquery.mobile.core.js"></script>
|
||||
<script type="text/javascript" src="../../../js/jquery.mobile.navigation.js"></script>
|
||||
<script type="text/javascript" src="../../../js/jquery.mobile.page.js"></script>
|
||||
<script type="text/javascript" src="../../../js/jquery.ui.position.js"></script>
|
||||
<script type="text/javascript" src="../../../js/jquery.mobile.fixHeaderFooter.js"></script>
|
||||
<script type="text/javascript" src="../../../js/jquery.mobile.forms.checkboxradio.js"></script>
|
||||
<script type="text/javascript" src="../../../js/jquery.mobile.forms.textinput.js"></script>
|
||||
<script type="text/javascript" src="../../../js/jquery.mobile.forms.select.js"></script>
|
||||
<script type="text/javascript" src="../../../js/jquery.mobile.buttonMarkup.js"></script>
|
||||
<script type="text/javascript" src="../../../js/jquery.mobile.forms.button.js"></script>
|
||||
<script type="text/javascript" src="../../../js/jquery.mobile.forms.slider.js"></script>
|
||||
<script type="text/javascript" src="../../../js/jquery.mobile.collapsible.js"></script>
|
||||
<script type="text/javascript" src="../../../js/jquery.mobile.controlGroup.js"></script>
|
||||
<script type="text/javascript" src="../../../js/jquery.mobile.fieldContain.js"></script>
|
||||
<script type="text/javascript" src="../../../js/jquery.mobile.listview.js"></script>
|
||||
<script type="text/javascript" src="../../../js/jquery.mobile.listview.filter.js"></script>
|
||||
<script type="text/javascript" src="../../../js/jquery.mobile.dialog.js"></script>
|
||||
<script type="text/javascript" src="../../../js/jquery.mobile.navbar.js"></script>
|
||||
<script type="text/javascript" src="../../../js/jquery.mobile.grid.js"></script>
|
||||
<script type="text/javascript" src="../../../tests/jquery.testHelper.js"></script>
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../../../themes/default/" type="text/css"/>
|
||||
<link rel="stylesheet" href="../../../external/qunit.css" type="text/css"/>
|
||||
<script type="text/javascript" src="../../../external/qunit.js"></script>
|
||||
|
||||
<script type="text/javascript" src="dialog_events.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1 id="qunit-header">jQuery Mobile Dialog Test Suite</h1>
|
||||
<h2 id="qunit-banner"></h2>
|
||||
<h2 id="qunit-userAgent"></h2>
|
||||
<ol id="qunit-tests">
|
||||
</ol>
|
||||
|
||||
<!-- NOTE body must be used in place of main otherwise transition behaviour fails -->
|
||||
|
||||
<style>
|
||||
[data-role='page'], [data-role='dialog']{
|
||||
position: absolute;
|
||||
top: -10000px;
|
||||
left: -10000px;
|
||||
}
|
||||
|
||||
/* maintain styling */
|
||||
.ui-mobile-viewport {
|
||||
margin: 8px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="bar" data-role="page">
|
||||
<a href="#foo-dialog" data-role="button" data-inline="true" data-rel="dialog"></a>
|
||||
</div>
|
||||
|
||||
<div id="foo-dialog" data-role="dialog">
|
||||
<a href="http://google.com" id="http-link">foo</a>
|
||||
<a href="mailto:foo@bar.com" id="mailto-link">foo</a>
|
||||
<a href="#bar" rel="external" id="rel-link">foo</a>
|
||||
<a href="#bar" target="foo" id="target-link">foo</a>
|
||||
<a href="#bar" id="internal-link">foo</a>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Reference in a new issue