This commit is contained in:
jeena 2013-08-24 00:55:45 +02:00
parent 00e86e3854
commit f262509adb
11 changed files with 13242 additions and 984 deletions

File diff suppressed because one or more lines are too long

3370
css/jquery.mobile.css Normal file

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

Before After
Before After

View file

@ -5,18 +5,13 @@
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<title>Feedthemonkey</title>
<link rel="stylesheet" href="css/jquery.mobile-1.3.1.min.css" />
<title>FeedMonkey</title>
<!-- Extra Codiqa features -->
<link rel="stylesheet" href="css/jquery.mobile.css" />
<link rel="stylesheet" href="css/screen.css" />
<!-- jQuery and jQuery Mobile -->
<script src="js/jquery-1.9.1.min.js"></script>
<script src="js/jquery.mobile-1.3.1.js"></script>
<!-- Extra Codiqa features -->
<script src="js/codiqa.ext.js"></script>
<script src="js/jquery.js"></script>
<script src="js/jquery.mobile.js"></script>
<script src="js/App.js"></script>
<script src="js/TinyTinyRSS.js"></script>
@ -32,7 +27,7 @@
Reload
</a>
<h3>
Feedthemonkey
FeedMonkey
</h3>
<span class="ui-btn-right count" data-theme="a">0 / 0</span>
</div>

View file

@ -14,7 +14,6 @@ function App() {
$("#full").bind("taphold", this.setCurrentUnread.bind(this));
$(".back").on("vclick", this.setCurrentRead.bind(this));
//$(".count").button();
var _this = this;
var aop = function(event, ui) { setTimeout(function() { $("#popup").popup("close") }, 2000) };

View file

@ -1,127 +0,0 @@
window.CodiqaControls = {
types: {},
instances: {},
define: function(type, control) {
control._type = type;
this.types[type] = control;
},
register: function(type, id, opts) {
var instance = new this.types[type]();
instance._type = type;
instance._id = id;
instance._opts = opts;
this.instances[id] = instance;
if(!this.types[type].prototype._isInited) {
this.types[type].prototype.initType();
}
return instance;
},
init: function() {
for(var type in this.types) {
this.types[type].prototype.initType();
}
},
refresh: function() {
for(var x in this.instances) {
this.instances[x].refresh && this.instances[x].refresh();
}
},
callbackInit: function() {
},
getInstances: function(type) {
var x, instance, instances = [];
for(x in this.instances) {
instance = this.instances[x];
if(instance._type === type) {
instances.push(instance);
}
}
return instances;
}
};
CodiqaControls.GoogleMap = function () {};
CodiqaControls.GoogleMap.prototype.initType = function() {
if( window.CodiqaControls.getInstances('googlemaps').length ) {
if(this._isInited) {
if(window.google && window.google.maps) {
CodiqaControls.GoogleMap.prototype.callbackInit();
}
} else {
var script = document.createElement('script');
script.type = "text/javascript";
script.src = "https://maps.googleapis.com/maps/api/js?sensor=true&callback=CodiqaControls.types.googlemaps.prototype.callbackInit";
document.getElementsByTagName("head")[0].appendChild(script);
this._isInited = true;
}
}
};
CodiqaControls.GoogleMap.prototype.callbackInit = function() {
var x, instances = window.CodiqaControls.getInstances('googlemaps');
for(x = 0; x < instances.length; x++) {
instances[x]._opts.ready(instances[x]);
}
};
CodiqaControls.GoogleMap.prototype.refresh = function() {
if( this.map && this.el && $(this.el).closest('.ui-page-active').length ) {
google.maps.event.trigger(this.map, 'resize');
this.center && this.map.setCenter(this.center);
}
};
window.CodiqaControls.define('googlemaps', CodiqaControls.GoogleMap);
(function($) {
$.widget('mobile.tabbar', $.mobile.navbar, {
_create: function() {
// Set the theme before we call the prototype, which will
// ensure buttonMarkup() correctly grabs the inheritied theme.
// We default to the "a" swatch if none is found
var theme = this.element.jqmData('theme') || "a";
this.element.addClass('ui-footer ui-footer-fixed ui-bar-' + theme);
// Make sure the page has padding added to it to account for the fixed bar
this.element.closest('[data-role="page"]').addClass('ui-page-footer-fixed');
// Call the NavBar _create prototype
$.mobile.navbar.prototype._create.call(this);
},
// Set the active URL for the Tab Bar, and highlight that button on the bar
setActive: function(url) {
// Sometimes the active state isn't properly cleared, so we reset it ourselves
this.element.find('a').removeClass('ui-btn-active ui-state-persist');
this.element.find('a[href="' + url + '"]').addClass('ui-btn-active ui-state-persist');
}
});
$(document).on('pagecreate create', function(e) {
return $(e.target).find(":jqmData(role='tabbar')").tabbar();
});
$(document).on('pageshow', ":jqmData(role='page')", function(e) {
// Grab the id of the page that's showing, and select it on the Tab Bar on the page
var tabBar, id = $(e.target).attr('id');
tabBar = $.mobile.activePage.find(':jqmData(role="tabbar")');
if(tabBar.length) {
tabBar.tabbar('setActive', '#' + id);
}
window.CodiqaControls.refresh();
});
window.CodiqaControls.init();
})(jQuery);

File diff suppressed because one or more lines are too long

9003
js/jquery.js vendored Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
/*
* jQuery Mobile 1.3.1
* Git HEAD hash: 74b4bec049fd93e4fe40205e6157de16eb64eb46 <> Date: Wed Apr 10 2013 21:57:23 UTC
/*!
* jQuery Mobile 1.3.2
* Git HEAD hash: 528cf0e96940644ea644096bfeb913ed920ffaef <> Date: Fri Jul 19 2013 22:17:57 UTC
* http://jquerymobile.com
*
* Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors
@ -32,7 +32,7 @@
$.mobile = $.extend($.mobile, {
// Version of the jQuery Mobile Framework
version: "1.3.1",
version: "1.3.2",
// Namespace used framework-wide for data-attrs. Default is no namespace
ns: "",
@ -4281,7 +4281,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau
}
// Reset base to the default document base.
// only reset if we are not prefetching
if ( base && typeof options.prefetch === "undefined" ) {
if ( base && ( typeof options === "undefined" || typeof options.prefetch === "undefined" ) ) {
base.reset();
}
@ -4317,7 +4317,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau
url = fileUrl = path.getFilePath( $( "<div>" + RegExp.$1 + "</div>" ).text() );
}
//dont update the base tag if we are prefetching
if ( base && typeof options.prefetch === "undefined") {
if ( base && ( typeof options === "undefined" || typeof options.prefetch === "undefined" )) {
base.set( fileUrl );
}
@ -5307,6 +5307,10 @@ $.widget( "mobile.dialog", $.mobile.widget, {
}
},
_handlePageBeforeHide: function() {
this._isCloseable = false;
},
_create: function() {
var self = this,
$el = this.element,
@ -5341,7 +5345,8 @@ $.widget( "mobile.dialog", $.mobile.widget, {
});
this._on( $el, {
pagebeforeshow: "_handlePageBeforeShow"
pagebeforeshow: "_handlePageBeforeShow",
pagebeforehide: "_handlePageBeforeHide"
});
$.extend( this, {
@ -5565,11 +5570,6 @@ $.fn.buttonMarkup = function( options ) {
}
}
if ( getAttrFixed( e, nsKey + "rel" ) === "popup" && el.attr( "href" ) ) {
e.setAttribute( "aria-haspopup", true );
e.setAttribute( "aria-owns", el.attr( "href" ) );
}
// Check if this element is already enhanced
buttonElements = $.data( ( ( e.tagName === "INPUT" || e.tagName === "BUTTON" ) ? e.parentNode : e ), "buttonElements" );
@ -7588,7 +7588,7 @@ $.widget( "mobile.slider", $.mobile.widget, $.extend( {
_sliderVMouseDown: function( event ) {
// NOTE: we don't do this in refresh because we still want to
// support programmatic alteration of disabled inputs
if ( this.options.disabled || !( event.which === 1 || event.which === 0 ) ) {
if ( this.options.disabled || !( event.which === 1 || event.which === 0 || event.which === undefined ) ) {
return false;
}
if ( this._trigger( "beforestart", event ) === false ) {
@ -8527,12 +8527,13 @@ $.mobile.document.bind( "pagecreate create", function( e ) {
},
thisPage = this.element.closest( ".ui-page" ),
myId = this.element.attr( "id" ),
self = this;
o = this.options,
key, value;
// We need to adjust the history option to be false if there's no AJAX nav.
// We can't do it in the option declarations because those are run before
// it is determined whether there shall be AJAX nav.
this.options.history = this.options.history && $.mobile.ajaxEnabled && $.mobile.hashListeningEnabled;
o.history = o.history && $.mobile.ajaxEnabled && $.mobile.hashListeningEnabled;
if ( thisPage.length === 0 ) {
thisPage = $( "body" );
@ -8540,7 +8541,7 @@ $.mobile.document.bind( "pagecreate create", function( e ) {
// define the container for navigation event bindings
// TODO this would be nice at the the mobile widget level
this.options.container = this.options.container || $.mobile.pageContainer;
o.container = o.container || $.mobile.pageContainer || thisPage;
// Apply the proto
thisPage.append( ui.screen );
@ -8573,12 +8574,15 @@ $.mobile.document.bind( "pagecreate create", function( e ) {
_orientationchangeInProgress: false
});
$.each( this.options, function( key, value ) {
// Cause initial options to be applied by their handler by temporarily setting the option to undefined
// - the handler then sets it to the initial value
self.options[ key ] = undefined;
self._setOption( key, value, true );
});
// This duplicates the code from the various option setters below for
// better performance. It must be kept in sync with those setters.
this._applyTheme( this.element, o.theme, "body" );
this._applyTheme( this._ui.screen, o.overlayTheme, "overlay" );
this._applyTransition( o.transition );
this.element
.toggleClass( "ui-overlay-shadow", o.shadow )
.toggleClass( "ui-corner-all", o.corners );
this._setTolerance( o.tolerance );
ui.screen.bind( "vclick", $.proxy( this, "_eatEventAndClose" ) );
@ -8706,28 +8710,13 @@ $.mobile.document.bind( "pagecreate create", function( e ) {
},
_setOption: function( key, value ) {
var exclusions, setter = "_set" + key.charAt( 0 ).toUpperCase() + key.slice( 1 );
var setter = "_set" + key.charAt( 0 ).toUpperCase() + key.slice( 1 );
if ( this[ setter ] !== undefined ) {
this[ setter ]( value );
}
// TODO REMOVE FOR 1.2.1 by moving them out to a default options object
exclusions = [
"initSelector",
"closeLinkSelector",
"closeLinkEvents",
"navigateEvents",
"closeEvents",
"history",
"container"
];
$.mobile.widget.prototype._setOption.apply( this, arguments );
if ( $.inArray( key, exclusions ) === -1 ) {
// Record the option change in the options and in the DOM data-* attributes
this.element.attr( "data-" + ( $.mobile.ns || "" ) + ( key.replace( /([A-Z])/, "-$1" ).toLowerCase() ), value );
}
this._super( key, value );
},
// Try and center the overlay over the given coordinates
@ -8886,7 +8875,7 @@ $.mobile.document.bind( "pagecreate create", function( e ) {
_reposition: function( o ) {
// We only care about position-related parameters for repositioning
o = { x: o.x, y: o.y, positionTo: o.positionTo };
this._trigger( "beforeposition", o );
this._trigger( "beforeposition", undefined, o );
this._ui.container.offset( this._placementCoords( this._desiredCoords( o ) ) );
},
@ -8988,13 +8977,16 @@ $.mobile.document.bind( "pagecreate create", function( e ) {
},
_closePrereqsDone: function() {
var opts = this.options;
var container = this._ui.container;
this._ui.container.removeAttr( "tabindex" );
container.removeAttr( "tabindex" );
// remove the global mutex for popups
$.mobile.popup.active = undefined;
// Blur elements inside the container, including the container
$( ":focus", container[ 0 ] ).add( container[ 0 ] ).blur();
// alert users that the popup is closed
this._trigger( "afterclose" );
},
@ -9306,7 +9298,10 @@ $.mobile.document.bind( "pagecreate create", function( e ) {
placeholder: "",
build: function() {
var self = this;
var self = this,
escapeId = function( id ) {
return id.replace( /([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g, "\\$1" );
};
// Create list from select, update state
self.refresh();
@ -9336,9 +9331,9 @@ $.mobile.document.bind( "pagecreate create", function( e ) {
self._decideFormat();
if ( self.menuType === "overlay" ) {
self.button.attr( "href", "#" + self.popupID ).attr( "data-" + ( $.mobile.ns || "" ) + "rel", "popup" );
self.button.attr( "href", "#" + escapeId( self.popupID ) ).attr( "data-" + ( $.mobile.ns || "" ) + "rel", "popup" );
} else {
self.button.attr( "href", "#" + self.dialogID ).attr( "data-" + ( $.mobile.ns || "" ) + "rel", "dialog" );
self.button.attr( "href", "#" + escapeId( self.dialogID ) ).attr( "data-" + ( $.mobile.ns || "" ) + "rel", "dialog" );
}
self.isOpen = true;
// Do not prevent default, so the navigation may have a chance to actually open the chosen format
@ -9745,6 +9740,9 @@ $.mobile.document.bind( "pagecreate create", function( e ) {
// Remove the popup
this.listbox.remove();
// Remove the dialog
this.menuPage.remove();
// Chain up
origDestroy.apply( this, arguments );
}
@ -9874,6 +9872,25 @@ $( document ).bind( "pagecreate create", function( e ) {
$( e.target )
.find( "a" )
.jqmEnhanceable()
.filter( ":jqmData(rel='popup')[href][href!='']" )
.each( function() {
// Accessibility info for popups
var e = this,
href = $( this ).attr( "href" ),
idref = href.substring( 1 );
e.setAttribute( "aria-haspopup", true );
e.setAttribute( "aria-owns", idref );
e.setAttribute( "aria-expanded", false );
$( document )
.on( "popupafteropen", href, function() {
e.setAttribute( "aria-expanded", true );
})
.on( "popupafterclose", href, function() {
e.setAttribute( "aria-expanded", false );
});
})
.end()
.not( ".ui-btn, .ui-link-inherit, :jqmData(role='none'), :jqmData(role='nojs')" )
.addClass( "ui-link" );
@ -10479,8 +10496,14 @@ $.widget( "mobile.panel", $.mobile.widget, {
self._page.on( "click.panel" , "a", function( e ) {
if ( this.href.split( "#" )[ 1 ] === self._panelID && self._panelID !== undefined ) {
e.preventDefault();
var $link = $( this );
var $link = $( this ),
$parent;
if ( ! $link.hasClass( "ui-link" ) ) {
// Check if we are in a listview
$parent = $link.parent().parent();
if ( $parent.hasClass( "ui-li" ) ) {
$link = $parent.parent();
}
$link.addClass( $.mobile.activeBtnClass );
self.element.one( "panelopen panelclose", function() {
$link.removeClass( $.mobile.activeBtnClass );
@ -11097,6 +11120,10 @@ $.mobile.document.delegate( ":jqmData(role='table')", "tablecreate refresh", fun
// define page container
$.mobile.pageContainer = $.mobile.firstPage.parent().addClass( "ui-mobile-viewport" );
// initialize navigation events now, after mobileinit has occurred and the page container
// has been created but before the rest of the library is alerted to that fact
$.mobile.navreadyDeferred.resolve();
// alert listeners that the pagecontainer has been determined for binding
// to events triggered on it
$window.trigger( "pagecontainercreate" );
@ -11149,9 +11176,6 @@ $.mobile.document.delegate( ":jqmData(role='table')", "tablecreate refresh", fun
}
});
// initialize events now, after mobileinit has occurred
$.mobile.navreadyDeferred.resolve();
// check which scrollTop value should be used by scrolling to 1 immediately at domready
// then check what the scroll top is. Android will report 0... others 1
// note that this initial scroll won't hide the address bar. It's just for the check.

View file

@ -1,7 +1,7 @@
{
"name": "Feedthemonkey",
"description": "A TinyTinyRSS mobile client.",
"launch_path": "index.html",
"name": "FeedMonkey",
"description": "A TinyTinyRSS mobile client with which you can read your RSS feeds and mark them as read on your server. Works also offline.",
"launch_path": "/index.html",
"icons": {
"58": "/img/icon-58.png",
"60": "/img/icon-60.png",
@ -14,7 +14,9 @@
"default_locale": "en",
"type": "privileged",
"permissions": {
"systemXHR": {}
"systemXHR": {
"description": "Connection with your own TinyTinyRSS server."
}
},
"installs_allowed_from": ["*"],
"version": "0.1"