mirror of
https://github.com/fergalmoran/dss.api.git
synced 2026-01-27 02:45:42 +00:00
Merge conflicts
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
10
api/views.py
10
api/views.py
@@ -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)
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import requests
|
||||
from bs4 import BeautifulSoup
|
||||
from requests.packages.urllib3.connection import ConnectionError
|
||||
from dss import settings
|
||||
|
||||
|
||||
|
||||
@@ -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
0
dss/localsettings.py
Executable file → Normal 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',
|
||||
},
|
||||
}
|
||||
@@ -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'
|
||||
|
||||
@@ -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
0
dss/storagesettings.py
Executable file → Normal file
@@ -1,10 +0,0 @@
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
'NAME': 'dss_test.db',
|
||||
'USER': '',
|
||||
'PASSWORD': '',
|
||||
'HOST': '',
|
||||
'PORT': '',
|
||||
}
|
||||
}
|
||||
@@ -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
7
spa/blog/urls.py
Executable 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
58
spa/blog/views.py
Executable 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
|
||||
@@ -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)
|
||||
)
|
||||
|
||||
29
spa/migrations/0017_blog.py
Normal file
29
spa/migrations/0017_blog.py
Normal 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,
|
||||
},
|
||||
),
|
||||
]
|
||||
19
spa/migrations/0018_blog_published.py
Normal file
19
spa/migrations/0018_blog_published.py
Normal 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),
|
||||
),
|
||||
]
|
||||
20
spa/migrations/0019_blog_slug.py
Normal file
20
spa/migrations/0019_blog_slug.py
Normal 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,
|
||||
),
|
||||
]
|
||||
29
spa/migrations/0020_blogcomment.py
Normal file
29
spa/migrations/0020_blogcomment.py
Normal 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,
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -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
26
spa/models/blog.py
Normal 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)
|
||||
@@ -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
1
static/css/player.css
Normal 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}
|
||||
1
static/css/player.light.css
Normal file
1
static/css/player.light.css
Normal 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
BIN
static/img/Jplayer.swf
Normal file
Binary file not shown.
BIN
static/img/playerUI.light.png
Normal file
BIN
static/img/playerUI.light.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.7 KiB |
BIN
static/img/playerUI.png
Normal file
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
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
BIN
static/img/preimg.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
172
static/js/jplayer.cleanskin.js
Normal file
172
static/js/jplayer.cleanskin.js
Normal file
File diff suppressed because one or more lines are too long
18
templates/blog/entry.html
Normal file
18
templates/blog/entry.html
Normal 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
19
templates/blog/index.html
Normal 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>
|
||||
17
templates/embedding/master.html
Normal file
17
templates/embedding/master.html
Normal 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>
|
||||
30
templates/embedding/mix.html
Normal file
30
templates/embedding/mix.html
Normal 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 %}
|
||||
Reference in New Issue
Block a user