Merge conflicts

This commit is contained in:
Fergal Moran
2015-11-11 00:12:46 +00:00
36 changed files with 473 additions and 188 deletions

2
.gitignore vendored
View File

@@ -12,8 +12,8 @@ build/*
_working/*
static/CACHE/*
dss/devsettings.py
>>>>>>> release/2.13.01
dss/celery_settings.py
dss/devsettings.py
dss.conf
dss/debugsettings.py
mysql

View File

@@ -6,6 +6,7 @@ from dss import settings
from spa import models
from spa.models import Activity, Message
from spa.models.activity import ActivityDownload, ActivityPlay
from spa.models.blog import Blog
from spa.models.genre import Genre
from spa.models.notification import Notification
from spa.models.show import Show
@@ -509,3 +510,10 @@ class ShowSerializer(serializers.ModelSerializer):
)
"""
class BlogSerializer(serializers.ModelSerializer):
slug = serializers.ReadOnlyField(required=False)
user = InlineUserProfileSerializer(read_only=True)
class Meta:
model = Blog

View File

@@ -23,6 +23,7 @@ router.register(r'activity', views.ActivityViewSet, base_name='activity')
router.register(r'genre', views.GenreViewSet, base_name='genre')
router.register(r'messages', views.MessageViewSet, base_name='messages')
router.register(r'shows', views.ShowViewSet, base_name='shows')
router.register(r'blog', views.BlogViewSet, base_name='shows')
class DebugView(APIView):

View File

@@ -20,6 +20,7 @@ from api import serializers
from dss import settings
from spa import tasks
from spa.models import Message
from spa.models.blog import Blog
from spa.models.genre import Genre
from spa.models.activity import ActivityPlay
from spa.models.mix import Mix
@@ -348,3 +349,12 @@ class ShowViewSet(viewsets.ModelViewSet):
return Response(status=HTTP_400_BAD_REQUEST, data='Performer not found')
except Exception as ex:
return Response(status=HTTP_500_INTERNAL_SERVER_ERROR, data=ex)
class BlogViewSet(viewsets.ModelViewSet):
queryset = Blog.objects.all()
serializer_class = serializers.BlogSerializer
lookup_field = 'slug'
def perform_create(self, serializer):
serializer.save(user=self.request.user.userprofile)

View File

@@ -1,6 +1,5 @@
import requests
from bs4 import BeautifulSoup
from requests.packages.urllib3.connection import ConnectionError
from dss import settings

View File

@@ -1,41 +0,0 @@
import os
DEBUG = True
if os.name == 'posix':
DSS_TEMP_PATH = "/tmp/"
DSS_LAME_PATH = "sox"
DSS_WAVE_PATH = "wav2png"
else:
DSS_TEMP_PATH = "d:\\temp\\"
DSS_LAME_PATH = "D:\\Apps\\lame\\lame.exe"
DSS_WAVE_PATH = "d:\\Apps\\waveformgen.exe"
DATABASE_NAME = 'deepsouthsounds'
DATABASE_USER = 'deepsouthsounds'
DATABASE_PASSWORD = ''
# DATABASE_HOST = ''
PIPELINE_YUI_BINARY = ""
FACEBOOK_APP_SECRET = ''
JS_SETTINGS = {
'CHAT_HOST': "ext-test.deepsouthsounds.com:8081",
'API_URL': "/api/v1/",
'LIVE_STREAM_URL': "radio.deepsouthsounds.com",
'LIVE_STREAM_PORT': "8000",
'LIVE_STREAM_MOUNT': "mp3",
'DEFAULT_AUDIO_VOLUME': "50",
'SM_DEBUG_MODE': DEBUG,
'LIVE_STREAM_INFO_URL': "radio.deepsouthsounds.com:8000/mp3"
}
"""
WAVEFORM_URL = 'http://waveforms.podnoms.com/'
IMAGE_URL = 'http://images.podnoms.com/'
STATIC_URL = 'http://static.podnoms.com/'
"""
IMAGE_URL = 'http://ext-test.deepsouthsounds.com:8000/media/'
GOOGLE_ANALYTICS_CODE = ''
SENDFILE_BACKEND = 'sendfile.backends.development'
#SENDFILE_BACKEND = 'sendfile.backends.xsendfile'
#SENDFILE_BACKEND = 'sendfile.backends.nginx'

0
dss/localsettings.py Executable file → Normal file
View File

View File

@@ -1,91 +0,0 @@
iPIPELINE_TEMPLATE_FUNC = "_.template"
PIPELINE_COMPILERS = (
'pipeline.compilers.coffee.CoffeeScriptCompiler',
)
PIPELINE_CSS = {
'css': {
'source_filenames': (
'css/dss.overrides.css',
'css/ace/dropzone.css',
'css/ace/uncompressed/jquery.gritter.css',
'css/ace/uncompressed/bootstrap.css',
'css/ace/uncompressed/ace.css',
'css/ace/uncompressed/ace-ie.css',
'css/ace/uncompressed/ace-skins.css',
'css/ace/uncompressed/font-awesome.css',
'css/ace/uncompressed/fullcalendar.css',
'css/ace/uncompressed/bootstrap-editable.css',
'css/jasny-bootstrap.css',
'css/select2.css',
'css/jquery.fileupload-ui.css',
'css/peneloplay.css',
'css/toastr.css',
'css/dss.main.css',
),
'output_filename': 'css/site.css'
}
}
PIPELINE_JS = {
'templates': {
'source_filenames': (
'js/dss/templates/*.jst',
),
'variant': 'datauri',
'output_filename': 'js/t.js',
},
'lib': {
'source_filenames': (
'js/lib/jquery.js',
'js/lib/jquery-ui.js',
'js/lib/moment.js',
'js/lib/typeahead.js',
'js/lib/sm/soundmanager2.js',
'js/lib/underscore.js',
'js/lib/underscore.templatehelpers.js',
'js/lib/backbone.js',
'js/lib/backbone.syphon.js',
'js/lib/backbone.associations.js',
'js/lib/backbone.marionette.js',
'js/lib/ace/uncompressed/bootstrap.js',
'js/lib/ace/uncompressed/ace.js',
'js/lib/ace/uncompressed/ace-elements.js',
'js/lib/ace/uncompressed/select2.js',
'js/lib/ace/uncompressed/fuelux/fuelux.wizard.js',
'js/lib/ace/ace/elements.wizard.js',
'js/lib/ace/uncompressed/bootstrap-wysiwyg.js',
'js/lib/ace/uncompressed/jquery.gritter.js',
'js/lib/ace/uncompressed/dropzone.js',
'js/lib/ace/uncompressed/fullcalendar.js',
'js/lib/ace/uncompressed/x-editable/bootstrap-editable.js',
'js/lib/ace/uncompressed/x-editable/ace-editable.js',
'js/lib/ajaxfileupload.js',
'js/lib/jasny.fileinput.js',
'js/lib/jquery.fileupload.js',
'js/lib/jquery.fileupload-process.js',
'js/lib/jquery.fileupload-audio.js',
'js/lib/jquery.fileupload-video.js',
'js/lib/jquery.fileupload-validate.js',
'js/lib/jquery.fileupload-ui.js',
'js/lib/jquery.fileupload-image.js',
'js/lib/jquery.iframe-transport.js',
'js/lib/jquery.ui.widget.js',
'js/lib/toastr.js',
'js/dss/*.coffee',
'js/dss/**/*.coffee',
'js/dss/apps/**/**/*.coffee',
),
'output_filename': 'js/a.js',
},
}

View File

@@ -19,7 +19,6 @@ SOCIAL_AUTH_PIPELINE = (
'social.pipeline.user.get_username',
'social.pipeline.social_auth.associate_by_email',
'social.pipeline.user.create_user',
'spa.pipeline.save_profile',
'social.pipeline.social_auth.associate_user',
'social.pipeline.social_auth.load_extra_data',
'social.pipeline.user.user_details'

View File

@@ -171,12 +171,7 @@ if DEBUG:
REALTIME_HEADERS = {
'content-type': 'application/json'
}
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
if 'test' in sys.argv:
try:
from .test_settings import *
except ImportError:
pass
REST_FRAMEWORK = {
# Use hyperlinked styles by default.

0
dss/storagesettings.py Executable file → Normal file
View File

View File

@@ -1,10 +0,0 @@
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'dss_test.db',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
}
}

View File

@@ -11,8 +11,9 @@ urlpatterns = patterns(
url(r'^admin/', include(admin.site.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
(r'^grappelli/', include('grappelli.urls')),
(r'^social/', include('spa.social.urls')),
(r'^arges/', include('spa.social.urls')),
(r'^_embed/', include('spa.embedding.urls')),
(r'^__redir/blog/', include('spa.blog.urls')),
(r'^__redir/social/', include('spa.social.urls')),
url(r'', include('user_sessions.urls', 'user_sessions')),
url(r'^', include('api.urls')),
)

7
spa/blog/urls.py Executable file
View File

@@ -0,0 +1,7 @@
from django.conf.urls import patterns, url
urlpatterns = patterns(
'',
url(r'^blog/(?P<slug>[\w\d_.-]+)/?$', 'spa.blog.views.entry', name='blog_entry_slug'),
url(r'^$', 'spa.blog.views.index', name='blog_index')
)

58
spa/blog/views.py Executable file
View File

@@ -0,0 +1,58 @@
import urllib.request, urllib.error, urllib.parse
import logging
from django.conf.urls import url
from django.contrib.sites.models import Site
from django.core.urlresolvers import resolve
from django.http import Http404
from django.shortcuts import render_to_response
from django.template.context import RequestContext
import requests
from allauth.socialaccount.models import SocialToken
from core.utils.url import wrap_full
from dss import settings
from spa.models import Playlist, Blog
from spa.models.mix import Mix
from spa.models.userprofile import UserProfile
logger = logging.getLogger(__name__)
"""
Handles callbacks from non javascript browsers
"""
def _getPayload(request):
return {
"app_id": settings.FACEBOOK_APP_ID,
"site_url": 'http://%s' % Site.objects.get_current().domain,
"site_image_url": '%s/img/dss-large.png' % settings.STATIC_URL,
}
def entry(request, slug):
try:
blog = Blog.objects.get(slug=slug)
extras = {
"content": blog.body,
}
payload = dict(list(_getPayload(request).items()) + list(extras.items()))
response = render_to_response(
'blog/entry.html',
payload,
context_instance=RequestContext(request)
)
return response
except Blog.DoesNotExist:
raise Http404
except Exception as ex:
logger.error(ex)
def index(request):
response = render_to_response(
"blog/index.html",
_getPayload(request),
context_instance=RequestContext(request))
return response

View File

@@ -20,12 +20,13 @@ def mix(request, **args):
payload = {
"description": mix.description.replace('<br />', '\n'),
"title": mix.title,
"theme": "light",
"image_url": image,
"audio_url": audio_url,
"mix_url": 'http://%s%s' % (Site.objects.get_current().domain, mix_url)
}
response = render_to_response(
'inc/embed/mix.html',
'embedding/mix.html',
payload,
context_instance=RequestContext(request)
)

View File

@@ -0,0 +1,29 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('spa', '0016_remove_show_recurrence_rrule'),
]
operations = [
migrations.CreateModel(
name='Blog',
fields=[
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)),
('object_created', models.DateTimeField(auto_now_add=True)),
('object_updated', models.DateTimeField(auto_now=True, db_index=True)),
('date_created', models.DateField(auto_now=True)),
('title', models.CharField(max_length=1024)),
('body', models.TextField()),
('user', models.ForeignKey(blank=True, to='spa.UserProfile', null=True)),
],
options={
'abstract': False,
},
),
]

View File

@@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('spa', '0017_blog'),
]
operations = [
migrations.AddField(
model_name='blog',
name='published',
field=models.BooleanField(default=False),
),
]

View File

@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('spa', '0018_blog_published'),
]
operations = [
migrations.AddField(
model_name='blog',
name='slug',
field=models.SlugField(default='arse'),
preserve_default=False,
),
]

View File

@@ -0,0 +1,29 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('spa', '0019_blog_slug'),
]
operations = [
migrations.CreateModel(
name='BlogComment',
fields=[
('id', models.AutoField(primary_key=True, auto_created=True, serialize=False, verbose_name='ID')),
('object_created', models.DateTimeField(auto_now_add=True)),
('object_updated', models.DateTimeField(auto_now=True, db_index=True)),
('comment', models.CharField(max_length=1024)),
('date_created', models.DateField(auto_now_add=True)),
('blog', models.ForeignKey(to='spa.Blog')),
('user', models.ForeignKey(null=True, to='spa.UserProfile', blank=True)),
],
options={
'abstract': False,
},
),
]

View File

@@ -16,3 +16,4 @@ from .release import Release
from .playlist import Playlist
from .message import Message
from .show import Show
from .blog import Blog

26
spa/models/blog.py Normal file
View File

@@ -0,0 +1,26 @@
from core.utils.url import unique_slugify
from spa.models import BaseModel, UserProfile
from django.db import models
class Blog(BaseModel):
user = models.ForeignKey(UserProfile, null=True, blank=True)
date_created = models.DateField(auto_now=True)
published = models.BooleanField(default=False)
slug = models.SlugField()
title = models.CharField(max_length=1024)
body = models.TextField()
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
if not self.id:
self.slug = unique_slugify(self, self.title)
super(Blog, self).save(force_insert, force_update, using, update_fields)
class BlogComment(BaseModel):
blog = models.ForeignKey(Blog)
user = models.ForeignKey(UserProfile, null=True, blank=True)
comment = models.CharField(max_length=1024)
date_created = models.DateField(auto_now_add=True)

View File

@@ -1,34 +0,0 @@
from django.core.files.base import ContentFile
from requests import request, ConnectionError
def save_profile(backend, user, response, is_new, *args, **kwargs):
if backend.name == 'google-oauth2':
if response.get('image') and response['image'].get('url'):
url = response['image'].get('url')
profile = user.userprofile
try:
response = request('GET', url)
response.raise_for_status()
except ConnectionError:
pass
else:
profile.avatar_image.save('',
ContentFile(response.content),
save=False)
profile.save()
elif backend.name == 'facebook':
profile = user.userprofile
url = 'http://graph.facebook.com/{0}/picture'.format(response['id'])
try:
response = request('GET', url, params={'type': 'large'})
response.raise_for_status()
except ConnectionError:
pass
else:
profile.avatar_image.save('',
ContentFile(response.content),
save=False
)
profile.save()

1
static/css/player.css Normal file
View File

@@ -0,0 +1 @@
.webPlayer{display:inline-block;position:relative;font-family:'Segoe UI',Verdana,sans-serif;clear:both;margin-bottom:10px;line-height:1.4;font-size:13px;box-shadow:0 0 1px rgba(0,0,0,0.5);-webkit-box-shadow:0 0 1px rgba(0,0,0,0.5);text-align:center}.webPlayer a.smooth{transition:all 0.1s linear;-webkit-transition:all 0.1s linear;-moz-transition:all 0.1s linear;-o-transition:all 0.1s linear}.webPlayer *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.webPlayer.jp-video-full>.controls{position:absolute;left:0;right:0;bottom:0;opacity:0.8;z-index:1000}.webPlayer.jp-video-full,.webPlayer.jp-video-full object,.webPlayer.jp-video-full video{position:fixed;top:0;left:0;right:0;bottom:0;display:block;z-index:999}.webPlayer.jp-video-full>.playerScreen,.webPlayer.jp-video-full>.playerScreen>.video-play{z-index:1000}.webPlayer .playerScreen{cursor:pointer}.webPlayer .playerScreen .video-play{display:block;position:absolute;z-index:990;width:100%;top:0;left:0;right:0;bottom:50px;background:url('./../img/preimg.png') no-repeat center center;opacity:0.4;background-color:rgba(0,0,0,0.4)}.webPlayer .controls{display:block;position:relative;height:40px;background:#0b0b0b;color:#969696;padding:5px 10px;z-index:996;border:1px solid #000000}.webPlayer .controls .leftblock{position:absolute;left:3px;width:50px}.webPlayer .controls .leftblock .play{display:block;margin:0 auto;width:40px;height:40px;background:url('./../img/playerUI.png') no-repeat 0 1px;opacity:0.8}.webPlayer .controls .leftblock .play:hover{opacity:1}.webPlayer .controls .leftblock .pause{display:block;margin:0 auto;width:40px;height:40px;background:url('./../img/playerUI.png') no-repeat -40px 1px;opacity:0.8}.webPlayer .controls .leftblock .pause:hover{opacity:1}.webPlayer .controls .play-progress{position:relative;display:block;margin:0 130px 0 50px;text-align:left}.webPlayer .controls .play-progress span{font-size:12px;margin-left:1px;color:#f0f0f0}.webPlayer .controls .play-progress .progressbar{display:block;height:4px;background-color:#3C3C3C;background:rgba(255,255,255,0.05);margin:2.5px 0}.webPlayer .controls .play-progress .progressbar .seekBar{position:relative;display:block;cursor:pointer;padding:1px;background:rgba(255,255,255,0.1)}.webPlayer .controls .play-progress .progressbar .seekBar .playBar{display:block;height:2px;padding:0;background:#FFFFFF}.webPlayer .controls .play-progress .progressbar .seekBar a{display:block;position:absolute;top:-2px;width:8px;height:8px;border-radius:5px;background:#ffffff;margin-left:-3px}.webPlayer .controls .play-progress .progressbar .seekBar a div{width:8px;height:8px}.webPlayer .controls .play-progress .time{display:block;position:absolute;width:50px;font-size:11px}.webPlayer .controls .play-progress .time.current{left:1px;text-align:left;color:#f0f0f0}.webPlayer .controls .play-progress .time.duration{right:0px;text-align:right}.webPlayer .controls .rightblock{position:absolute;right:10px;width:110px;top:5px}.webPlayer .controls .rightblock .volumeText{display:block;position:absolute;bottom:-12px;text-align:center;width:80px;font-size:11px}.webPlayer .controls .rightblock .volumeBar{display:block;position:absolute;height:4px;background-color:#3C3C3C;background:rgba(255,255,255,0.05);width:80px;top:19px;left:0;cursor:pointer}.webPlayer .controls .rightblock .volumeBar .currentVolume{position:relative;height:2px;padding:1px}.webPlayer .controls .rightblock .volumeBar .currentVolume .curvol{display:block;height:2px;padding:0;background:#FFFFFF}.webPlayer .controls .rightblock .volumeBar .currentVolume a{display:block;position:absolute;top:-2px;margin-left:-3px;width:8px;height:8px;border-radius:5px;background:#ffffff}.webPlayer .controls .rightblock .volumeBar .currentVolume a div{display:block;width:8px;height:8px}.webPlayer .controls .rightblock .fullScreen{display:block;float:right;width:16px;height:16px;background:url('./../img/playerUI.png') no-repeat 0 -50px;margin-top:12px;opacity:0.4}.webPlayer .controls .rightblock .fullScreen:hover{opacity:0.8}.webPlayer .controls .rightblock .fullScreenOFF{display:block;float:right;width:16px;height:16px;background:url('./../img/playerUI.png') no-repeat 0 -68px;margin-top:12px;opacity:0.4}.webPlayer .controls .rightblock .fullScreenOFF:hover{opacity:0.8}.webPlayer.audioPlayer .progress{margin-right:100px}.webPlayer.audioPlayer .rightblock{width:85px}.webPlayer.audioPlayer .rightblock .volumeText{bottom:-42px}.webPlayer.audioPlayer .fullScreen{display:none}.webPlayer.audioPlayer .fullScreenOFF{display:none}

View File

@@ -0,0 +1 @@
.webPlayer.light{display:inline-block;position:relative;font-family:'Segoe UI',Verdana,sans-serif;clear:both;margin-bottom:10px;line-height:1.4;font-size:13px;box-shadow:0 0 1px rgba(255,255,255,0.5);-webkit-box-shadow:0 0 1px rgba(255,255,255,0.5);text-align:center}.webPlayer.light a.smooth{transition:all 0.1s linear;-webkit-transition:all 0.1s linear;-moz-transition:all 0.1s linear;-o-transition:all 0.1s linear}.webPlayer.light *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.webPlayer.light.jp-video-full>.controls{position:absolute;left:0;right:0;bottom:0;opacity:0.8;z-index:1000}.webPlayer.light.jp-video-full,.webPlayer.light.jp-video-full object,.webPlayer.light.jp-video-full video{position:fixed;top:0;left:0;right:0;bottom:0;display:block;z-index:999}.webPlayer.light.jp-video-full>.playerScreen,.webPlayer.light.jp-video-full>.playerScreen>.video-play{z-index:1000}.webPlayer.light .playerScreen{cursor:pointer}.webPlayer.light .playerScreen .video-play{display:block;position:absolute;z-index:990;width:100%;top:0;left:0;right:0;bottom:50px;background:url('./../img/preimg.light.png') no-repeat center center;opacity:0.8;background-color:rgba(255,255,255,0.1)}.webPlayer.light .controls{display:block;position:relative;height:40px;background:#FAFAFA;color:#646464;padding:5px 10px;z-index:996;border:1px solid #e6e6e6}.webPlayer.light .controls .leftblock{position:absolute;left:3px;width:50px}.webPlayer.light .controls .leftblock .play{display:block;margin:0 auto;width:40px;height:40px;background:url('./../img/playerUI.light.png') no-repeat 0 1px;opacity:0.8}.webPlayer.light .controls .leftblock .play:hover{opacity:1}.webPlayer.light .controls .leftblock .pause{display:block;margin:0 auto;width:40px;height:40px;background:url('./../img/playerUI.light.png') no-repeat -40px 1px;opacity:0.8}.webPlayer.light .controls .leftblock .pause:hover{opacity:1}.webPlayer.light .controls .play-progress{position:relative;display:block;margin:0 130px 0 50px;text-align:left}.webPlayer.light .controls .play-progress span{font-size:12px;margin-left:1px;color:#282828}.webPlayer.light .controls .play-progress .progressbar{display:block;height:4px;background-color:#3C3C3C;background:rgba(0,0,0,0.1);margin:2.5px 0}.webPlayer.light .controls .play-progress .progressbar .seekBar{position:relative;display:block;cursor:pointer;padding:1px;background:rgba(0,0,0,0.05)}.webPlayer.light .controls .play-progress .progressbar .seekBar .playBar{display:block;height:2px;padding:0;background:#191919}.webPlayer.light .controls .play-progress .progressbar .seekBar a{display:block;position:absolute;top:-2px;width:8px;height:8px;border-radius:5px;background:#191919;margin-left:-3px}.webPlayer.light .controls .play-progress .progressbar .seekBar a div{width:8px;height:8px}.webPlayer.light .controls .play-progress .time{display:block;position:absolute;width:50px;font-size:11px}.webPlayer.light .controls .play-progress .time.current{left:1px;text-align:left;color:#282828}.webPlayer.light .controls .play-progress .time.duration{right:0px;text-align:right}.webPlayer.light .controls .rightblock{position:absolute;right:10px;width:110px;top:5px}.webPlayer.light .controls .rightblock .volumeText{display:block;position:absolute;bottom:-12px;text-align:center;width:80px;font-size:11px}.webPlayer.light .controls .rightblock .volumeBar{display:block;position:absolute;height:4px;background-color:#EBEBEB;background:rgba(0,0,0,0.1);width:80px;top:19px;left:0;cursor:pointer}.webPlayer.light .controls .rightblock .volumeBar .currentVolume{position:relative;height:2px;padding:1px}.webPlayer.light .controls .rightblock .volumeBar .currentVolume .curvol{display:block;height:2px;padding:0;background:#191919}.webPlayer.light .controls .rightblock .volumeBar .currentVolume a{display:block;position:absolute;top:-2px;margin-left:-3px;width:8px;height:8px;border-radius:5px;background:#191919}.webPlayer.light .controls .rightblock .volumeBar .currentVolume a div{display:block;width:8px;height:8px}.webPlayer.light .controls .rightblock .fullScreen{display:block;float:right;width:16px;height:16px;background:url('./../img/playerUI.light.png') no-repeat 0 -50px;margin-top:12px;opacity:0.4}.webPlayer.light .controls .rightblock .fullScreen:hover{opacity:0.8}.webPlayer.light .controls .rightblock .fullScreenOFF{display:block;float:right;width:16px;height:16px;background:url('./../img/playerUI.light.png') no-repeat 0 -68px;margin-top:12px;opacity:0.4}.webPlayer.light .controls .rightblock .fullScreenOFF:hover{opacity:0.8}.webPlayer.light.audioPlayer .progress{margin-right:100px}.webPlayer.light.audioPlayer .rightblock{width:85px}.webPlayer.light.audioPlayer .rightblock .volumeText{bottom:-42px}.webPlayer.light.audioPlayer .fullScreen{display:none}.webPlayer.light.audioPlayer .fullScreenOFF{display:none}

BIN
static/img/Jplayer.swf Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
static/img/playerUI.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
static/img/preimg.light.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
static/img/preimg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

18
templates/blog/entry.html Normal file
View File

@@ -0,0 +1,18 @@
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:og="http://ogp.me/ns#"
xmlns:fb="https://www.facebook.com/2008/fbml">
<head>
<meta property="fb:app_id" content="{{ app_id }}"/>
<meta property="og:url" content="{{ mix_url }}/"/>
<meta property="og:site_name" content="Deep South Sounds"/>
<meta property="og:type" content="deepsouthsounds:blog"/>
<meta property="og:title" content="{{ title }}"/>
<meta property="og:description" content="{{ description }}"/>
<meta property="og:image" content="{{ image }}"/>
</head>
<body>
{{ content }}
</body>
</html>

19
templates/blog/index.html Normal file
View File

@@ -0,0 +1,19 @@
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:og="http://ogp.me/ns#"
xmlns:fb="https://www.facebook.com/2008/fbml">
<head>
<meta property="fb:app_id" content="{{ app_id }}"/>
<meta property="og:url" content="{{ mix_url }}/"/>
<meta property="og:site_name" content="Deep South Sounds"/>
<meta property="og:type" content="deepsouthsounds:blog"/>
<meta property="og:title" content="{{ title }}"/>
<meta property="og:description" content="{{ description }}"/>
<meta property="og:image" content="{{ image }}"/>
</head>
<body>
<h1>Blog Index</h1>
{{ content }}
</body>
</html>

View File

@@ -0,0 +1,17 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{ title }}</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
{% block css %}
{% endblock %}
</head>
<body>
{% block content %}
{% endblock %}
{% block scripts %}
{% endblock %}
</body>
</html>

View File

@@ -0,0 +1,30 @@
{% extends 'embedding/master.html' %}
{% block css %}
<link rel="stylesheet" href="/assets/css/player.css">
<link rel="stylesheet" href="/assets/css/player.light.css">
{% endblock %}
{% block content %}
<div id="uniquePlayer-1" class="webPlayer {{ theme }} audioPlayer">
<div id="uniqueContainer-1" class="videoPlayer"></div>
</div>
{% endblock %}
{% block scripts %}
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jplayer/2.9.2/jplayer/jquery.jplayer.js"></script>
<script src="/assets/js/jplayer.cleanskin.js"></script>
<script>
$(document).ready(function () {
$('.webPlayer').videoPlayer({
name: '{{ title }}',
media: {
mp3: '{{ audio_url }}'
},
size: {
width: '600px'
}
});
});
</script>
{% endblock %}