mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-09-18 21:50:56 +00:00
Adding in new mobile site. Doesn't sohwing anything but a stubbed in list view.
This commit is contained in:
parent
0e3d48b9b1
commit
6d0c0c3cdc
20 changed files with 7001 additions and 43 deletions
0
apps/mobile/__init__.py
Normal file
0
apps/mobile/__init__.py
Normal file
3
apps/mobile/models.py
Normal file
3
apps/mobile/models.py
Normal file
|
@ -0,0 +1,3 @@
|
|||
from django.db import models
|
||||
|
||||
# Create your models here.
|
23
apps/mobile/tests.py
Normal file
23
apps/mobile/tests.py
Normal file
|
@ -0,0 +1,23 @@
|
|||
"""
|
||||
This file demonstrates two different styles of tests (one doctest and one
|
||||
unittest). These will both pass when you run "manage.py test".
|
||||
|
||||
Replace these with more appropriate tests for your application.
|
||||
"""
|
||||
|
||||
from django.test import TestCase
|
||||
|
||||
class SimpleTest(TestCase):
|
||||
def test_basic_addition(self):
|
||||
"""
|
||||
Tests that 1 + 1 always equals 2.
|
||||
"""
|
||||
self.failUnlessEqual(1 + 1, 2)
|
||||
|
||||
__test__ = {"doctest": """
|
||||
Another way to test that 1 + 1 is equal to 2.
|
||||
|
||||
>>> 1 + 1 == 2
|
||||
True
|
||||
"""}
|
||||
|
6
apps/mobile/urls.py
Normal file
6
apps/mobile/urls.py
Normal file
|
@ -0,0 +1,6 @@
|
|||
from django.conf.urls.defaults import *
|
||||
from apps.mobile import views
|
||||
|
||||
urlpatterns = patterns('apps.mobile.views',
|
||||
url(r'^$', views.index, name='mobile-index'),
|
||||
)
|
15
apps/mobile/views.py
Normal file
15
apps/mobile/views.py
Normal file
|
@ -0,0 +1,15 @@
|
|||
import os
|
||||
import base64
|
||||
import yaml
|
||||
from django.conf import settings
|
||||
from django.http import HttpResponse
|
||||
from django.shortcuts import render_to_response
|
||||
from django.template import RequestContext
|
||||
from apps.profile.models import Profile
|
||||
from apps.reader.models import UserSubscription, UserSubscriptionFolders
|
||||
from utils import json_functions as json
|
||||
from utils import log as logging
|
||||
|
||||
def index(request):
|
||||
return render_to_response('mobile/mobile_workspace.xhtml', {},
|
||||
context_instance=RequestContext(request))
|
1
media/css/mobile/images
Symbolic link
1
media/css/mobile/images
Symbolic link
|
@ -0,0 +1 @@
|
|||
../../img/mobile
|
1659
media/css/mobile/jquery.mobile-1.0a4.css
Normal file
1659
media/css/mobile/jquery.mobile-1.0a4.css
Normal file
File diff suppressed because it is too large
Load diff
0
media/css/mobile/mobile.css
Normal file
0
media/css/mobile/mobile.css
Normal file
BIN
media/img/mobile/ajax-loader.png
Normal file
BIN
media/img/mobile/ajax-loader.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 503 B |
BIN
media/img/mobile/icon-search-black.png
Normal file
BIN
media/img/mobile/icon-search-black.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
BIN
media/img/mobile/icons-18-black.png
Normal file
BIN
media/img/mobile/icons-18-black.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
BIN
media/img/mobile/icons-18-white.png
Normal file
BIN
media/img/mobile/icons-18-white.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.2 KiB |
BIN
media/img/mobile/icons-36-black.png
Normal file
BIN
media/img/mobile/icons-36-black.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.9 KiB |
BIN
media/img/mobile/icons-36-white.png
Normal file
BIN
media/img/mobile/icons-36-white.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.2 KiB |
113
media/js/jquery-1.6.js → media/js/jquery-1.6.1.js
vendored
113
media/js/jquery-1.6.js → media/js/jquery-1.6.1.js
vendored
|
@ -1,5 +1,5 @@
|
|||
/*!
|
||||
* jQuery JavaScript Library v1.6.1pre Live From Git (8bb6e95b66413c484006288691a82c44ba50554e)
|
||||
* jQuery JavaScript Library v1.6.1
|
||||
* http://jquery.com/
|
||||
*
|
||||
* Copyright 2011, John Resig
|
||||
|
@ -11,7 +11,7 @@
|
|||
* Copyright 2011, The Dojo Foundation
|
||||
* Released under the MIT, BSD, and GPL Licenses.
|
||||
*
|
||||
* Date: Sun May 8 01:20:01 UTC 2011
|
||||
* Date: Thu May 12 15:04:36 2011 -0400
|
||||
*/
|
||||
(function( window, undefined ) {
|
||||
|
||||
|
@ -204,7 +204,7 @@ jQuery.fn = jQuery.prototype = {
|
|||
selector: "",
|
||||
|
||||
// The current version of jQuery being used
|
||||
jquery: "1.6.1pre Live From Git (8bb6e95b66413c484006288691a82c44ba50554e)",
|
||||
jquery: "1.6.1",
|
||||
|
||||
// The default length of a jQuery object is 0
|
||||
length: 0,
|
||||
|
@ -1055,7 +1055,7 @@ jQuery.extend({
|
|||
if ( jQuery.isFunction( fn ) ) {
|
||||
deferred[ handler ](function() {
|
||||
returned = fn.apply( this, arguments );
|
||||
if ( jQuery.isFunction( returned.promise ) ) {
|
||||
if ( returned && jQuery.isFunction( returned.promise ) ) {
|
||||
returned.promise().then( newDefer.resolve, newDefer.reject );
|
||||
} else {
|
||||
newDefer[ action ]( returned );
|
||||
|
@ -1137,6 +1137,7 @@ jQuery.extend({
|
|||
jQuery.support = (function() {
|
||||
|
||||
var div = document.createElement( "div" ),
|
||||
documentElement = document.documentElement,
|
||||
all,
|
||||
a,
|
||||
select,
|
||||
|
@ -1284,7 +1285,7 @@ jQuery.support = (function() {
|
|||
body.style[ i ] = bodyStyle[ i ];
|
||||
}
|
||||
body.appendChild( div );
|
||||
document.documentElement.appendChild( body );
|
||||
documentElement.insertBefore( body, documentElement.firstChild );
|
||||
|
||||
// Check if a disconnected checkbox will retain its checked
|
||||
// value of true after appended to the DOM (IE6/7)
|
||||
|
@ -1339,12 +1340,12 @@ jQuery.support = (function() {
|
|||
marginDiv.style.marginRight = "0";
|
||||
div.appendChild( marginDiv );
|
||||
support.reliableMarginRight =
|
||||
( parseInt( document.defaultView.getComputedStyle( marginDiv, null ).marginRight, 10 ) || 0 ) === 0;
|
||||
( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
|
||||
}
|
||||
|
||||
// Remove the body element we added
|
||||
body.innerHTML = "";
|
||||
document.documentElement.removeChild( body );
|
||||
documentElement.removeChild( body );
|
||||
|
||||
// Technique from Juriy Zaytsev
|
||||
// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
|
||||
|
@ -1475,7 +1476,7 @@ jQuery.extend({
|
|||
}
|
||||
|
||||
if ( data !== undefined ) {
|
||||
thisCache[ name ] = data;
|
||||
thisCache[ jQuery.camelCase( name ) ] = data;
|
||||
}
|
||||
|
||||
// TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should
|
||||
|
@ -1485,7 +1486,7 @@ jQuery.extend({
|
|||
return thisCache[ internalKey ] && thisCache[ internalKey ].events;
|
||||
}
|
||||
|
||||
return getByName ? thisCache[ name ] : thisCache;
|
||||
return getByName ? thisCache[ jQuery.camelCase( name ) ] : thisCache;
|
||||
},
|
||||
|
||||
removeData: function( elem, name, pvt /* Internal Use Only */ ) {
|
||||
|
@ -2175,10 +2176,15 @@ jQuery.extend({
|
|||
if ( pass && name in jQuery.attrFn ) {
|
||||
return jQuery( elem )[ name ]( value );
|
||||
}
|
||||
|
||||
|
||||
// Fallback to prop when attributes are not supported
|
||||
if ( !("getAttribute" in elem) ) {
|
||||
return jQuery.prop( elem, name, value );
|
||||
}
|
||||
|
||||
var ret, hooks,
|
||||
notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
|
||||
|
||||
|
||||
// Normalize the name if needed
|
||||
name = notxml && jQuery.attrFix[ name ] || name;
|
||||
|
||||
|
@ -2255,7 +2261,7 @@ jQuery.extend({
|
|||
// Setting the type on a radio button after the value resets the value in IE6-9
|
||||
// Reset value to it's default in case type is set after value
|
||||
// This is for element creation
|
||||
var val = elem.getAttribute("value");
|
||||
var val = elem.value;
|
||||
elem.setAttribute( "type", value );
|
||||
if ( val ) {
|
||||
elem.value = val;
|
||||
|
@ -2278,7 +2284,7 @@ jQuery.extend({
|
|||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
propFix: {
|
||||
tabindex: "tabIndex",
|
||||
readonly: "readOnly",
|
||||
|
@ -2296,32 +2302,32 @@ jQuery.extend({
|
|||
|
||||
prop: function( elem, name, value ) {
|
||||
var nType = elem.nodeType;
|
||||
|
||||
|
||||
// don't get/set properties on text, comment and attribute nodes
|
||||
if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
|
||||
var ret, hooks,
|
||||
notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
|
||||
|
||||
|
||||
// Try to normalize/fix the name
|
||||
name = notxml && jQuery.propFix[ name ] || name;
|
||||
|
||||
hooks = jQuery.propHooks[ name ];
|
||||
|
||||
|
||||
if ( value !== undefined ) {
|
||||
if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
|
||||
return ret;
|
||||
|
||||
|
||||
} else {
|
||||
return (elem[ name ] = value);
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) {
|
||||
return ret;
|
||||
|
||||
|
||||
} else {
|
||||
return elem[ name ];
|
||||
}
|
||||
|
@ -2359,6 +2365,24 @@ boolHook = {
|
|||
}
|
||||
};
|
||||
|
||||
// Use the value property for back compat
|
||||
// Use the formHook for button elements in IE6/7 (#1954)
|
||||
jQuery.attrHooks.value = {
|
||||
get: function( elem, name ) {
|
||||
if ( formHook && jQuery.nodeName( elem, "button" ) ) {
|
||||
return formHook.get( elem, name );
|
||||
}
|
||||
return elem.value;
|
||||
},
|
||||
set: function( elem, value, name ) {
|
||||
if ( formHook && jQuery.nodeName( elem, "button" ) ) {
|
||||
return formHook.set( elem, value, name );
|
||||
}
|
||||
// Does not return so that setAttribute is also used
|
||||
elem.value = value;
|
||||
}
|
||||
};
|
||||
|
||||
// IE6/7 do not support getting/setting some attributes with get/setAttribute
|
||||
if ( !jQuery.support.getSetAttribute ) {
|
||||
|
||||
|
@ -2366,12 +2390,9 @@ if ( !jQuery.support.getSetAttribute ) {
|
|||
jQuery.attrFix = jQuery.propFix;
|
||||
|
||||
// Use this for any attribute on a form in IE6/7
|
||||
formHook = jQuery.attrHooks.name = jQuery.attrHooks.value = jQuery.valHooks.button = {
|
||||
formHook = jQuery.attrHooks.name = jQuery.valHooks.button = {
|
||||
get: function( elem, name ) {
|
||||
var ret;
|
||||
if ( name === "value" && !jQuery.nodeName( elem, "button" ) ) {
|
||||
return elem.getAttribute( name );
|
||||
}
|
||||
ret = elem.getAttributeNode( name );
|
||||
// Return undefined if nodeValue is empty string
|
||||
return ret && ret.nodeValue !== "" ?
|
||||
|
@ -3126,6 +3147,9 @@ var withinElement = function( event ) {
|
|||
// Check if mouse(over|out) are still within the same parent element
|
||||
var parent = event.relatedTarget;
|
||||
|
||||
// set the correct event type
|
||||
event.type = event.data;
|
||||
|
||||
// Firefox sometimes assigns relatedTarget a XUL element
|
||||
// which we cannot access the parentNode property of
|
||||
try {
|
||||
|
@ -3135,15 +3159,13 @@ var withinElement = function( event ) {
|
|||
if ( parent && parent !== document && !parent.parentNode ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Traverse up the tree
|
||||
while ( parent && parent !== this ) {
|
||||
parent = parent.parentNode;
|
||||
}
|
||||
|
||||
if ( parent !== this ) {
|
||||
// set the correct event type
|
||||
event.type = event.data;
|
||||
|
||||
// handle event if we actually just moused on to a non sub-element
|
||||
jQuery.event.handle.apply( this, arguments );
|
||||
}
|
||||
|
@ -4331,7 +4353,8 @@ var Expr = Sizzle.selectors = {
|
|||
},
|
||||
|
||||
reset: function( elem ) {
|
||||
return elem.nodeName.toLowerCase() === "input" && "reset" === elem.type;
|
||||
var name = elem.nodeName.toLowerCase();
|
||||
return (name === "input" || name === "button") && "reset" === elem.type;
|
||||
},
|
||||
|
||||
button: function( elem ) {
|
||||
|
@ -4597,6 +4620,16 @@ if ( document.documentElement.compareDocumentPosition ) {
|
|||
|
||||
} else {
|
||||
sortOrder = function( a, b ) {
|
||||
// The nodes are identical, we can exit early
|
||||
if ( a === b ) {
|
||||
hasDuplicate = true;
|
||||
return 0;
|
||||
|
||||
// Fallback to using sourceIndex (in IE) if it's available on both nodes
|
||||
} else if ( a.sourceIndex && b.sourceIndex ) {
|
||||
return a.sourceIndex - b.sourceIndex;
|
||||
}
|
||||
|
||||
var al, bl,
|
||||
ap = [],
|
||||
bp = [],
|
||||
|
@ -4604,13 +4637,8 @@ if ( document.documentElement.compareDocumentPosition ) {
|
|||
bup = b.parentNode,
|
||||
cur = aup;
|
||||
|
||||
// The nodes are identical, we can exit early
|
||||
if ( a === b ) {
|
||||
hasDuplicate = true;
|
||||
return 0;
|
||||
|
||||
// If the nodes are siblings (or identical) we can do a quick check
|
||||
} else if ( aup === bup ) {
|
||||
if ( aup === bup ) {
|
||||
return siblingCheck( a, b );
|
||||
|
||||
// If no parents were found then the nodes are disconnected
|
||||
|
@ -5434,6 +5462,7 @@ var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
|
|||
// checked="checked" or checked
|
||||
rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
|
||||
rscriptType = /\/(java|ecma)script/i,
|
||||
rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
|
||||
wrapMap = {
|
||||
option: [ 1, "<select multiple='multiple'>", "</select>" ],
|
||||
legend: [ 1, "<fieldset>", "</fieldset>" ],
|
||||
|
@ -5924,7 +5953,7 @@ jQuery.each({
|
|||
function getAll( elem ) {
|
||||
if ( "getElementsByTagName" in elem ) {
|
||||
return elem.getElementsByTagName( "*" );
|
||||
|
||||
|
||||
} else if ( "querySelectorAll" in elem ) {
|
||||
return elem.querySelectorAll( "*" );
|
||||
|
||||
|
@ -6162,7 +6191,7 @@ function evalScript( i, elem ) {
|
|||
dataType: "script"
|
||||
});
|
||||
} else {
|
||||
jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
|
||||
jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
|
||||
}
|
||||
|
||||
if ( elem.parentNode ) {
|
||||
|
@ -8039,6 +8068,9 @@ jQuery.fn.extend({
|
|||
return this.each( optall.complete, [ false ] );
|
||||
}
|
||||
|
||||
// Do not change referenced properties as per-property easing will be lost
|
||||
prop = jQuery.extend( {}, prop );
|
||||
|
||||
return this[ optall.queue === false ? "each" : "queue" ](function() {
|
||||
// XXX 'this' does not always have a nodeName when running the
|
||||
// test suite
|
||||
|
@ -8071,7 +8103,7 @@ jQuery.fn.extend({
|
|||
// easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
|
||||
if ( jQuery.isArray( val ) ) {
|
||||
opt.animatedProperties[ name ] = val[ 1 ];
|
||||
val = val[ 0 ];
|
||||
val = prop[ name ] = val[ 0 ];
|
||||
} else {
|
||||
opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
|
||||
}
|
||||
|
@ -8168,7 +8200,6 @@ jQuery.fn.extend({
|
|||
if ( !gotoEnd ) {
|
||||
jQuery._unmark( true, this );
|
||||
}
|
||||
// go in reverse order so anything added to the queue during the loop is ignored
|
||||
while ( i-- ) {
|
||||
if ( timers[i].elem === this ) {
|
||||
if (gotoEnd) {
|
||||
|
@ -8432,11 +8463,9 @@ jQuery.fx.prototype = {
|
|||
|
||||
jQuery.extend( jQuery.fx, {
|
||||
tick: function() {
|
||||
var timers = jQuery.timers,
|
||||
i = timers.length;
|
||||
while ( i-- ) {
|
||||
for ( var timers = jQuery.timers, i = 0 ; i < timers.length ; ++i ) {
|
||||
if ( !timers[i]() ) {
|
||||
timers.splice(i, 1);
|
||||
timers.splice(i--, 1);
|
||||
}
|
||||
}
|
||||
|
5116
media/js/mobile/jquery.mobile-1.0a4.js
Normal file
5116
media/js/mobile/jquery.mobile-1.0a4.js
Normal file
File diff suppressed because it is too large
Load diff
11
media/js/mobile/newsblur/mobile_workspace.js
Normal file
11
media/js/mobile/newsblur/mobile_workspace.js
Normal file
|
@ -0,0 +1,11 @@
|
|||
(function($) {
|
||||
|
||||
NEWSBLUR.MobileReader = function() {
|
||||
|
||||
};
|
||||
|
||||
NEWSBLUR.MobileReader.prototype = {
|
||||
|
||||
};
|
||||
|
||||
})(jQuery);
|
24
settings.py
24
settings.py
|
@ -155,7 +155,7 @@ LOGGING = {
|
|||
COMPRESS_JS = {
|
||||
'all': {
|
||||
'source_filenames': (
|
||||
'js/jquery-1.6.js',
|
||||
'js/jquery-1.6.1.js',
|
||||
'js/inflector.js',
|
||||
'js/jquery.json.js',
|
||||
'js/jquery.easing.js',
|
||||
|
@ -204,6 +204,19 @@ COMPRESS_JS = {
|
|||
),
|
||||
'output_filename': 'js/all-compressed-?.js'
|
||||
},
|
||||
'mobile': {
|
||||
'source_filenames': (
|
||||
'js/jquery-1.6.1.js',
|
||||
'js/mobile/jquery.mobile-1.0a4.js',
|
||||
'js/inflector.js',
|
||||
'js/jquery.json.js',
|
||||
'js/jquery.easing.js',
|
||||
'js/jquery.newsblur.js',
|
||||
'js/newsblur/assetmodel.js',
|
||||
'js/mobile/newsblur/mobile_workspace.js',
|
||||
),
|
||||
'output_filename': 'js/mobile-compressed-?.js',
|
||||
},
|
||||
'paypal': {
|
||||
'source_filenames': (
|
||||
'js/newsblur/paypal_return.js',
|
||||
|
@ -234,6 +247,13 @@ COMPRESS_CSS = {
|
|||
),
|
||||
'output_filename': 'css/all-compressed-?.css'
|
||||
},
|
||||
'mobile': {
|
||||
'source_filenames': (
|
||||
'css/mobile/jquery.mobile-1.0a4.css',
|
||||
'css/mobile/mobile.css',
|
||||
),
|
||||
'output_filename': 'css/mobile-compressed-?.css',
|
||||
},
|
||||
'paypal': {
|
||||
'source_filenames': (
|
||||
'css/paypal_return.css',
|
||||
|
@ -305,6 +325,8 @@ INSTALLED_APPS = (
|
|||
'apps.profile',
|
||||
'apps.recommendations',
|
||||
'apps.statistics',
|
||||
'apps.static',
|
||||
'apps.mobile',
|
||||
'south',
|
||||
'utils',
|
||||
'vendor',
|
||||
|
|
71
templates/mobile/mobile_workspace.xhtml
Normal file
71
templates/mobile/mobile_workspace.xhtml
Normal file
|
@ -0,0 +1,71 @@
|
|||
{% load compressed utils_tags %}
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>{% block title %}NewsBlur{% endblock %}</title>
|
||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
|
||||
<link rel="shortcut icon" HREF="/media/img/favicon.png">
|
||||
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
var NEWSBLUR = {};
|
||||
</script>
|
||||
|
||||
{% compressed_css 'mobile' %}
|
||||
{% block head_js %}
|
||||
{% compressed_js 'mobile' %}
|
||||
{% endblock head_js %}
|
||||
{% block extra_head_js %}
|
||||
{% endblock extra_head_js %}
|
||||
|
||||
{% if not debug %}
|
||||
<script type="text/javascript">
|
||||
|
||||
var _gaq = _gaq || [];
|
||||
_gaq.push(['_setAccount', 'UA-8371683-2']);
|
||||
_gaq.push(['_trackPageview']);
|
||||
|
||||
(function() {
|
||||
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||
})();
|
||||
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
<div data-role="page" id="NB-feeds">
|
||||
<div data-role="header">
|
||||
<h1>{{ request.user.username }}</h1>
|
||||
</div>
|
||||
<div data-role="content">
|
||||
<ul data-role="listview">
|
||||
<li><a href="index.html"><img src="images/gf.png" alt="France" class="ui-li-icon">France <span class="ui-li-count">4</span></a></li>
|
||||
<li><a href="index.html"><img src="images/de.png" alt="Germany" class="ui-li-icon">Germany <span class="ui-li-count">4</span></a></li>
|
||||
<li><a href="index.html"><img src="images/gb.png" alt="Great Britain" class="ui-li-icon">Great Britain <span class="ui-li-count">0</span></a></li>
|
||||
<li><a href="index.html"><img src="images/fi.png" alt="Finland" class="ui-li-icon">Finland <span class="ui-li-count">12</span><span class="ui-li-count">12</span></a></li>
|
||||
|
||||
|
||||
|
||||
<li><a href="index.html"><img src="images/sj.png" alt="Norway" class="ui-li-icon">Norway <span class="ui-li-count">328</span></a></li>
|
||||
<li><a href="index.html"><img src="images/us.png" alt="United States" class="ui-li-icon">United States <span class="ui-li-count">62</span></a></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div data-role="footer"> 1
|
||||
<div class="NB-footer-site-count ui-li-count">12 sites</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
NEWSBLUR.mobile_reader = new NEWSBLUR.MobileReader();
|
||||
});
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
2
urls.py
2
urls.py
|
@ -13,6 +13,8 @@ urlpatterns = patterns('',
|
|||
(r'^api/', include('apps.api.urls')),
|
||||
(r'^recommendations/', include('apps.recommendations.urls')),
|
||||
(r'^statistics/', include('apps.statistics.urls')),
|
||||
(r'^mobile/', include('apps.mobile.urls')),
|
||||
(r'^m/', include('apps.mobile.urls')),
|
||||
url(r'^about/?', static_views.about, name='about'),
|
||||
url(r'^faq/?', static_views.faq, name='faq'),
|
||||
url(r'^api/?', static_views.api, name='api'),
|
||||
|
|
Loading…
Add table
Reference in a new issue