From f3420832e07846fba797e79531133990b590ae61 Mon Sep 17 00:00:00 2001 From: j Date: Mon, 23 Jun 2014 12:15:53 +0200 Subject: [PATCH] bak.ma config --- config.jsonc | 717 ++++++++++++++++++++++++++++++++ install.py | 58 +++ scripts/poster.py | 86 ++++ static/js/home.bakma.js | 707 ++++++++++++++++++++++++++++++++ static/js/infoView.bakma.js | 796 ++++++++++++++++++++++++++++++++++++ static/png/icon.bakma.png | Bin 0 -> 12876 bytes static/png/logo.bakma.png | Bin 0 -> 77961 bytes 7 files changed, 2364 insertions(+) create mode 100644 config.jsonc create mode 100755 install.py create mode 100755 scripts/poster.py create mode 100644 static/js/home.bakma.js create mode 100644 static/js/infoView.bakma.js create mode 100644 static/png/icon.bakma.png create mode 100644 static/png/logo.bakma.png diff --git a/config.jsonc b/config.jsonc new file mode 100644 index 0000000..380747a --- /dev/null +++ b/config.jsonc @@ -0,0 +1,717 @@ +/* + Pan.do/ra Settings + + You can edit this file. +*/ +{ + "annotations": { + "showUsers": true + }, + "cantPlay": { + "icon": "", + "link": "", + "text": "" + }, + /* + Capabilities are per user level. + They can either be general: + {level: true} means a user of that level has the capability) + or related to items: + {level: x} means a user of that level has the capability + for items of a rights level up to and including x + */ + "capabilities": { + "canAddItems": {"staff": true, "admin": true}, + "canDownloadVideo": {"guest": 0, "member": 0, "staff": 4, "admin": 4}, + "canEditAnnotations": {"staff": true, "admin": true}, + "canEditDocuments": {"staff": true, "admin": true}, + "canEditEvents": {"staff": true, "admin": true}, + "canEditFeaturedEdits": {"staff": true, "admin": true}, + "canEditFeaturedLists": {"staff": true, "admin": true}, + "canEditFeaturedTexts": {"staff": true, "admin": true}, + "canEditMedia": {"staff": true, "admin": true}, + "canEditMetadata": {"staff": true, "admin": true}, + "canEditPlaces": {"staff": true, "admin": true}, + "canEditRightsLevel": {"staff": true, "admin": true}, + "canEditSitePages": {"staff": true, "admin": true}, + "canEditUsers": {"admin": true}, + "canImportAnnotations": {"member": true, "staff": true, "admin": true}, + "canManageDocuments": {"member": true, "staff": true, "admin": true}, + "canManagePlacesAndEvents": {"member": true, "staff": true, "admin": true}, + "canManageTitlesAndNames": {"member": true, "staff": true, "admin": true}, + "canManageUsers": {"staff": true, "admin": true}, + "canPlayClips": {"guest": 1, "member": 1, "staff": 4, "admin": 4}, + "canPlayVideo": {"guest": 1, "member": 1, "staff": 4, "admin": 4}, + "canReadText": {"guest": 0, "member": 0, "staff": 1, "admin": 1}, + "canRemoveItems": {"admin": true}, + "canSeeAccessed": {"staff": true, "admin": true}, + "canSeeDebugMenu": {"staff": true, "admin": true}, + "canSeeExtraItemViews": {"staff": true, "admin": true}, + "canSeeMedia": {"staff": true, "admin": true}, + "canSeeItem": {"guest": 1, "member": 1, "staff": 4, "admin": 4}, + "canSeeSize": {"staff": true, "admin": true}, + "canSeeSoftwareVersion": {"staff": true, "admin": true}, + "canSendMail": {"staff": true, "admin": true} + }, + /* + clipKeys are the properties that clips can be sorted by. + If sortOperator is not specified, it will be + for strings and - for numbers. + */ + "clipKeys": [ + {"id": "text", "title": "Text", "type": "string"}, + {"id": "position", "title": "Position", "type": "float", "sortOperator": "+"}, + {"id": "duration", "title": "Duration", "type": "float"}, + {"id": "hue", "title": "Hue", "type": "float", "sortOperator": "+"}, + {"id": "saturation", "title": "Saturation", "type": "float"}, + {"id": "lightness", "title": "Lightness", "type": "float"}, + {"id": "volume", "title": "Volume", "type": "float"} + ], + /* + clipLayers is the ordered list of public layers that will appear as the + text of clips. Excluding a layer from this list means it will not be + included in find annotations. // FIXME: the last bit is not implemented. + */ + "clipLayers": ["subtitles", "keywords", "notes"], + "flags": false, + "help": [ + {"id": "help", "title": "Help"}, + {"id": "accounts", "title": "Accounts"}, + {"id": "navigation", "title": "Navigation"}, + {"id": "views", "title": "Views"}, + {"id": "timelines", "title": "Timelines"}, + {"id": "clips", "title": "Clips"}, + {"id": "maps", "title": "Maps"}, + {"id": "calendars", "title": "Calendars"}, + {"id": "find", "title": "Find"}, + {"id": "filters", "title": "Filters"}, + {"id": "lists", "title": "Lists"}, + {"id": "player", "title": "Player"}, + {"id": "editor", "title": "Editor"}, + {"id": "documents", "title": "Documents"}, + {"id": "edits", "title": "Edits"}, + {"id": "texts", "title": "Texts"}, + {"id": "embeds", "title": "Embeds"} + ], + /* + An itemKey must have the following properties: + id: The id of the key (as known by the server) + title: The title of the key (as displayed by the client) + type: text, string, float, integer, or array of any of these + and can have any of the following properties: + autocomplete: If true, find element will autocomplete + autocompleteSort: Sort order of autocomplete suggestions + capability: A capability required to see this key + columnRequired: If true, the column can't be removed + columnWidth: Default column width in px + filter: if true, one can filter results by this key + find: If true, this key will appear as a find option + format: {type: "...", args: [...]}, for special formatting + (Ox.formatType(args) will be called) + secondaryId: If true, loading /value will redirect to the item + sort: If true, one can sort results by this key + sortOperator: sort operator (+, -), in case it differs from the + default for the key's type (+ for strings, - for numbers) + sortType: special sort type (title, person) + value: {key: "...", type: "..."}, for keys that are derived + from other keys (like number of actors), or "capability" + */ + "itemKeys": [ + { + "id": "*", + "title": "All", + "type": "text", + "find": true + }, + { + "id": "title", + "title": "Title", + "type": "string", + "autocomplete": true, + "autocompleteSort": [{"key": "timesaccessed", "operator": "-"}], + "columnRequired": true, + "columnWidth": 180, + "find": true, + "sort": true, + "sortType": "title" + }, + { + "id": "location", + "title": "Location", + "type": "string", + "autocomplete": true, + "columnWidth": 180, + "filter": true, + "find": true, + "sort": true + }, + { + "id": "date", + "title": "Date", + "type": "string", + "columnWidth": 120, + //"format": {"type": "date", "args": ["%a, %b %e, %Y"]}, + "filter": true, + "sort": true + }, + { + "id": "category", + "title": "Categories", + "type": ["string"], + "autocomplete": true, + "columnWidth": 180, + "filter": true, + "find": true, + "sort": true + }, + { + "id": "tag", + "title": "Tags", + "type": ["string"], + "autocomplete": true, + "columnWidth": 180, + "filter": true, + "find": true, + "sort": true + }, + { + "id": "name", + "title": "People", + "type": ["string"], + "autocomplete": true, + "filter": true, + "find": true + }, + { + "id": "language", + "title": "Language", + "type": ["string"], + "autocomplete": true, + "columnWidth": 120, + "filter": true, + "find": true, + "sort": true + }, + { + "id": "summary", + "title": "Summary", + "type": "text", + "find": true + }, + { + "id": "notes", + "title": "Notes", + "type": "text", + "capability": "canEditMetadata" + }, + { + "id": "id", + "title": "ID", + "type": "string", + "columnWidth": 90, + "sort": true + }, + { + "id": "annotations", + "title": "Annotations", + "type": "string", // fixme: not the best type for this magic key + "find": true + }, + { + "id": "keywords", + "title": "Keywords", + "type": "layer", + "filter": true, + "find": true + }, + { + "id": "notes", + "title": "Notes", + "type": "layer", + "find": true + }, + { + "id": "subtitles", + "title": "Subtitless", + "type": "layer", + "find": true + }, + { + "id": "numberofannotations", + "title": "Annotations", + "type": "integer", + "columnWidth": 60, + "sort": true + }, + { + "id": "duration", + "title": "Duration", + "type": "time", + "columnWidth": 90, + "format": {"type": "duration", "args": [0, "short"]}, + "sort": true + }, + { + "id": "resolution", + "title": "Resolution", + "type": ["integer"], + "columnWidth": 90, + "format": {"type": "resolution", "args": ["px"]}, + "sort": true + }, + { + "id": "aspectratio", + "title": "Aspect Ratio", + "type": "float", + "columnWidth": 90, + "format": {"type": "unit", "args": [":1", 3]}, + "sort": true + }, + { + "id": "pixels", + "title": "Pixels", + "type": "integer", + "columnWidth": 90, + "format": {"type": "value", "args": ["px"]}, + "sort": true + }, + { + "id": "hue", + "title": "Hue", + "type": "hue", + "columnWidth": 90, + "format": {"type": "color", "args": ["hue"]}, + "sort": true, + "sortOperator": "+" + }, + { + "id": "saturation", + "title": "Saturation", + "type": "float", + "columnWidth": 90, + "format": {"type": "color", "args": ["saturation"]}, + "sort": true + }, + { + "id": "lightness", + "title": "Lightness", + "type": "float", + "columnWidth": 90, + "format": {"type": "color", "args": ["lightness"]}, + "sort": true + }, + { + "id": "volume", + "title": "Volume", + "type": "float", + "columnWidth": 60, + "format": {"type": "color", "args": ["lightness"]}, + "sort": true + }, + { + "id": "numberofcuts", + "title": "Number of Cuts", + "type": "integer", + "columnWidth": 60, + "format": {"type": "number", "args": []}, + "sort": true, + "value": {"key": "cuts", "type": "length"} + }, + { + "id": "cutsperminute", + "title": "Cuts per Minute", + "type": "float", + "columnWidth": 60, + "format": {"type": "number", "args": [3]}, + "sort": true, + "value": {"key": "cuts", "type": "lengthperminute"} + }, + { + "id": "words", + "title": "Number of Words", + "type": "integer", + "columnWidth": 60, + "format": {"type": "number", "args": []}, + "sort": true, + "value": {"layer": "subtitles", "type": "words"} + }, + { + "id": "wordsperminute", + "title": "Words per Minute", + "type": "float", + "columnWidth": 60, + "format": {"type": "number", "args": [3]}, + "sort": true, + "value": {"layer": "subtitles", "type": "wordsperminute"} + }, + { + "id": "size", + "title": "Size", + "type": "integer", + "capability": "canSeeMedia", + "columnWidth": 60, + "format": {"type": "value", "args": ["B"]}, + "sort": true + }, + { + "id": "bitrate", + "title": "Bitrate", + "type": "integer", + "columnWidth": 60, + "format": {"type": "value", "args": ["bps"]}, + "sort": true + }, + { + "id": "numberoffiles", + "title": "Number of Files", + "type": "integer", + "capability": "canSeeMedia", + "columnWidth": 60, + "sort": true, + "value": {"key": "files", "type": "length"} + }, + { + "id": "user", + "title": "User", + "type": "string", + "capability": "canSeeMedia", + "find": true + }, + { + "id": "filename", + "title": "Filename", + "type": ["string"], + "capability": "canSeeMedia", + "find": true + }, + { + "id": "created", + "title": "Date Created", + "type": "date", + "columnWidth": 120, + "format": {"type": "date", "args": ["%Y-%m-%d %H:%M:%S"]}, + "sort": true + }, + { + "id": "modified", + "title": "Last Modified", + "type": "date", + "columnWidth": 90, + "format": {"type": "date", "args": ["%Y-%m-%d %H:%M:%S"]}, + "sort": true + }, + { + "id": "accessed", + "title": "Last Accessed", + "type": "date", + "capability": "canSeeAccessed", + "columnWidth": 90, + "format": {"type": "date", "args": ["%Y-%m-%d %H:%M:%S"]}, + "sort": true + }, + { + "id": "timesaccessed", + "title": "Times Accessed", + "type": "integer", + "capability": "canSeeAccessed", + "columnWidth": 60, + "format": {"type": "number", "args": []}, + "sort": true + }, + { + "id": "rightslevel", + "title": "Rights Level", + "type": "enum", + "columnWidth": 90, + "format": {"type": "ColorLevel", "args": [ + ["Public", "Restricted", "Private"] + ]}, + "sort": true, + "sortOperator": "+", + "values": ["Public", "Restricted", "Private", "Unknown"] + }, + { + "id": "random", + "title": "Random", + "type": "integer", + "sort": true + } + ], + "itemName": { + "singular": "Video", + "plural": "Videos" + }, + "itemRequiresVideo": true, + "itemViews": [ + {"id": "info", "title": "Info"}, + {"id": "player", "title": "Player"}, + {"id": "editor", "title": "Editor"}, + {"id": "timeline", "title": "Timeline"}, + {"id": "clips", "title": "Clips"}, + {"id": "map", "title": "Map"}, + {"id": "calendar", "title": "Calendar"}, + // {"id": "documents", "title": "Documents"}, + {"id": "data", "title": "Data"}, + {"id": "media", "title": "Media"} + ], + "language": "en", + "languages": ["en"], + "layers": [ + { + "id": "keywords", + "title": "Keywords", + "canAddAnnotations": {"member": true, "staff": true, "admin": true}, + "hasEvents": true, + "hasPlaces": true, + "item": "Keyword", + "overlap": true, + "type": "string" + }, + { + "id": "notes", + "title": "Notes", + "canAddAnnotations": {"member": true, "staff": true, "admin": true}, + "hasEvents": true, + "hasPlaces": true, + "item": "Description", + "showInfo": true, + "type": "text" + }, + { + "id": "subtitles", + "title": "Subtitles", + "canAddAnnotations": {"member": true, "staff": true, "admin": true}, + "hasEvents": true, + "hasPlaces": true, + "isSubtitles": true, + "item": "Subtitle", + "showInfo": true, + "type": "text" + } + ], + "listViews": [ + {"id": "list", "title": "as List"}, + {"id": "grid", "title": "as Grid"}, + {"id": "timelines", "title": "with Timelines"}, + {"id": "clips", "title": "with Clips"}, + {"id": "clip", "title": "as Clips"}, + {"id": "map", "title": "on Map"}, + {"id": "calendar", "title": "on Calendar"} + ], + "media": { + "importPosters": false, + "importFrames": false + }, + "menuExtras": [ + "user", + //"locale", + "reload" + ], + "personalLists": [ + {"title": "Favorites"} + ], + "posters": { + "ratio": 0.625 + }, + "rightsLevel": {"member": 2, "staff": 2, "admin": 2}, + "rightsLevels": [ + {"name": "Public", "color": [128, 255, 128]}, + {"name": "Restricted", "color": [255, 192, 128]}, + {"name": "Private", "color": [255, 128, 128]} + ], + "sendReferrer": true, + "site": { + "description": "...", + "email": { + // E-mail address in contact form (to) + "contact": "bak.ma@bak.ma", + "footer": "-- \nbak.ma - http://bak.ma", + "prefix": "bak.ma news -", + // E-mail address uses by the system (from) + "system": "system@bak.ma" + }, + "https": true, + "id": "bakma", + "name": "bak.ma", + "url": "bak.ma", + "videoprefix": "" + }, + "sitePages": [ + {"id": "about", "title": "About"}, + {"id": "news", "title": "News"}, + //{"id": "tour", "title": "Take a Tour"}, + {"id": "faq", "title": "Frequently Asked Questions"}, + //{"id": "terms", "title": "Terms of Service"}, + {"id": "license", "title": "License"}, + {"id": "contact", "title": "Contact"} + ], + "sites": [ + {"name": "Pad.ma", "url": "pad.ma", "https": true}, + {"name": "OxDB", "url": "0xdb.org", "https": true} + ], + "textRightsLevels": [ + {"name": "Public", "color": [128, 255, 128]}, + {"name": "Private", "color": [255, 128, 128]} + ], + "themes": ["oxlight", "oxmedium", "oxdark"], + "timelines": [ + {"id": "antialias", "title": "Anti-Alias"}, + {"id": "slitscan", "title": "Slit-Scan"}, + {"id": "keyframes", "title": "Keyframes"}, + {"id": "audio", "title": "Waveform"} + ], + "totals": [ + {"id": "items"}, + {"id": "files", "admin": true}, + {"id": "duration", "admin": true}, + {"id": "size", "admin": true}, + {"id": "pixels"} + ], + "tv": { + "showLogo": false + }, + "user": { + "level": "guest", + "ui": { + "annotationsCalendarSize": 128, + "annotationsMapSize": 128, + "annotationsRange": "position", + "annotationsSize": 256, + "annotationsSort": "position", + "calendarFind": "", + "calendarSelection": "", + "clipColumns": 2, + "columns": { + "Colors": { + "columns": ["title", "date", "location", "language", "hue", "saturation", "brightness"], + "columnWidth": {} + } + }, + "document": "", + "documents": {}, + "documentSize": 256, + "documentsSelection": {}, + "documentsSort": [{"key": "name", "operator": "+"}], + "documentsView": "grid", + "edit": "", + "edits": {}, + "editSelection": [], + "editSort": [ + {"key": "index", "operator": "+"}, + {"key": "year", "operator": "+"}, + {"key": "director", "operator": "+"}, + {"key": "title", "operator": "+"}, + {"key": "position", "operator": "+"}, + {"key": "duration", "operator": "+"} + ], + "editView": "list", + "embedSize": 256, + "filters": [ + {"id": "date", "sort": [{"key": "name", "operator": "+"}]}, + {"id": "category", "sort": [{"key": "name", "operator": "+"}]}, + {"id": "tag", "sort": [{"key": "items", "operator": "-"}]}, + {"id": "keywords", "sort": [{"key": "items", "operator": "-"}]}, + {"id": "name", "sort": [{"key": "items", "operator": "-"}]} + ], + "filtersSize": 176, + "find": {"conditions": [], "operator": "&"}, + "followPlayer": true, + "help": "", + "icons": "frames", + "infoIconSize": 256, + "item": "", + "itemFind": "", + "itemSort": [{"key": "position", "operator": "+"}], + "itemView": "info", + "listColumns": ["title", "date", "location", "tag", "language", "duration"], + "listColumnWidth": {}, + "listSelection": [], + "listSort": [{"key": "title", "operator": "+"}], + "listView": "grid", + "lists": {}, + "locale": "en", + "mapFind": "", + "mapSelection": "", + "onload": "", + "page": "", + "part": { + "api": "", + "documents": "", + "faq": "", + "help": "", + "news": "", + "preferences": "", + "tv": "" + }, + "section": "items", + "sequenceMode": "shape", + "sequenceSort": [{"key": "title", "operator": "+"}], + "showAdvancedEmbedOptions": false, + "showAnnotations": true, + "showAnnotationsCalendar": true, + "showAnnotationsMap": true, + "showBrowser": true, + "showCalendarControls": true, // fixme: should be false + "showClips": true, + "showDocument": true, + "showFilters": true, + "showIconBrowser": false, + "showInfo": true, + "showLayers": { + "keywords": true, + "notes": true, + "subtitles": true + }, + "showMapControls": false, + "showMapLabels": false, + "showFolder": { + "edits": { + "personal": true, + "favorite": true, + "featured": true, + "volumes": true + }, + "items": { + "personal": true, + "favorite": true, + "featured": true, + "volumes": true + }, + "texts": { + "personal": true, + "favorite": true, + "featured": true + } + }, + "showReflections": true, + "showSidebar": true, + "showSitePosters": false, + "showTimeline": true, + "sidebarSize": 256, + "text": "", + "texts": {}, + "theme": "oxlight", + "updateAdvancedFindResults": false, + "videoLoop": false, + "videoMuted": false, + "videoPoints": {}, + "videoResolution": 240, + "videoScale": "fit", + "videoSize": "large", + "videoSubtitles": true, + "videoTimeline": "antialias", + "videoView": "player", + "videoVolume": 1 + }, + "username": "", + "volumes": [] + }, + "userLevels": ["guest", "member", "staff", "admin"], + "video": { + "torrent": true, + "formats": ["webm", "mp4"], + "previewRatio": 1.3333333333, + //supported resolutions are + //1080, 720, 480, 432, 360, 288, 240, 144, 96 + "resolutions": [96, 240, 480] + } +} diff --git a/install.py b/install.py new file mode 100755 index 0000000..4aae60e --- /dev/null +++ b/install.py @@ -0,0 +1,58 @@ +#!/usr/bin/python + +import os +from os.path import join, abspath, basename, dirname + +name = 'bakma' +base = abspath(dirname(__file__)) +os.chdir(base) + +for root, folders, files in os.walk(join(base, 'static')): + for f in files: + src = join(root, f) + target = src.replace(base, '/srv/pandora') + rel_src = os.path.relpath(src, dirname(target)) + if os.path.exists(target): + os.unlink(target) + os.symlink(rel_src, target) + +''' +overwrite = ( + ('home', 'indiancinema'), + ('infoView', 'indiancinema'), +) + +os.chdir('/srv/pandora/static/js') +for filename, sitename in overwrite: + src = '%s.%s.js' % (filename, sitename) + target = '%s.%s.js' % (filename, name) + if os.path.exists(target): + os.unlink(target) + os.symlink(src, target) +''' + +os.chdir(base) +src = join(base, 'config.jsonc') +target = '/srv/pandora/pandora/config.%s.jsonc' % name +rel_src = os.path.relpath(src, dirname(target)) +if os.path.exists(target): + os.unlink(target) +os.symlink(rel_src, target) +t = '/srv/pandora/pandora/config.jsonc' +if os.path.exists(t): + os.unlink(t) +os.symlink(basename(target), t) + +for root, folders, files in os.walk(join(base, 'scripts')): + for f in files: + src = join(root, f) + target = src.replace(base, '/srv/pandora') + rel_src = os.path.relpath(src, dirname(target)) + if os.path.exists(target): + os.unlink(target) + os.symlink(rel_src, target) + +#todo +#custom python module etc +#local_settings.py? + diff --git a/scripts/poster.py b/scripts/poster.py new file mode 100755 index 0000000..70010d3 --- /dev/null +++ b/scripts/poster.py @@ -0,0 +1,86 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# vi:si:et:sw=4:sts=4:ts=4 +from __future__ import division +import os + +root_dir = os.path.normpath(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) + +# using virtualenv's activate_this.py to reorder sys.path +activate_this = os.path.join(root_dir, 'bin', 'activate_this.py') +execfile(activate_this, dict(__file__=activate_this)) + +import Image +import ImageDraw +import json +from optparse import OptionParser +import ox +from ox.image import drawText, wrapText +import sys + +static_root = os.path.join(os.path.dirname(__file__), 'data') + +def render_poster(data, poster): + title = ox.decode_html(data.get('title', '')) + id = data['id'] + frame = data.get('frame') + timeline = data.get('timeline') + + poster_width = 640 + poster_height = 1024 + poster_ratio = poster_width / poster_height + poster_color = (255, 255, 0) + poster_image = Image.new('RGB', (poster_width, poster_height)) + font_file = os.path.join(static_root, 'DejaVuSansCondensedBold.ttf') + font_size = 48 + + # timeline + timeline_height = 64 + timeline_lines = 16 + if timeline: + timeline_image = Image.open(timeline) + timeline_image = timeline_image.resize((10240, timeline_height), Image.ANTIALIAS) + for i in range(timeline_lines): + line_image = timeline_image.crop((i * poster_width, 0, (i + 1) * poster_width, 64)) + poster_image.paste(line_image, (0, i * timeline_height)) + + # id + text = 'Bak.ma/' + id + text_image = Image.new('RGB', (1, 1)) + text_size = drawText(text_image, (0, 0), text, font_file, font_size, poster_color) + text_width = poster_width + text_height = timeline_height + text_left = int((poster_width - text_width) / 2) + text_top = 14 * timeline_height + for y in range(text_top, text_top + text_height): + for x in range(text_left, text_left + text_width): + if y < text_top + 4 or y >= text_top + text_height - 4: + poster_image.putpixel((x, y), poster_color) + else: + pixel = list(poster_image.getpixel((x, y))) + for c in range(3): + pixel[c] = int((pixel[c] + poster_color[c]) / 4) + poster_image.putpixel((x, y), tuple(pixel)) + drawText(poster_image, ((poster_width - text_size[0]) / 2, text_top + (text_height - text_size[1]) / 2), text, font_file, font_size, poster_color) + poster_image.save(poster) + +def main(): + parser = OptionParser() + parser.add_option('-d', '--data', dest='data', help='json file with metadata', default=None) + parser.add_option('-p', '--poster', dest='poster', help='Poster (image file to be written)') + (options, args) = parser.parse_args() + + if None in (options.data, options.poster): + parser.print_help() + sys.exit() + + if options.data == '-': + data = json.load(sys.stdin) + else: + with open(options.data) as f: + data = json.load(f) + render_poster(data, options.poster) + +if __name__ == "__main__": + main() + diff --git a/static/js/home.bakma.js b/static/js/home.bakma.js new file mode 100644 index 0000000..41dee30 --- /dev/null +++ b/static/js/home.bakma.js @@ -0,0 +1,707 @@ +// vim: et:ts=4:sw=4:sts=4:ft=javascript + +'use strict'; + +pandora.ui.home = function() { + + var self = {}, + + that = $('
') + .addClass('OxScreen') + .css({ + position: 'absolute', + width: '100%', + height: '100%', + opacity: 0, + overflowY: 'auto', + zIndex: 1001 + }), + + $box = $('
') + .css({ + position: 'absolute', + left: 0, + top: '80px', + right: 0, + width: '560px', + margin: '0 auto 0 auto' + }) + .appendTo(that), + + $reflectionImage = $('') + .attr({src: '/static/png/logo.png'}) + .css({ + position: 'absolute', + left: 0, + top: '80px', + right: 0, + bottom: 0, + width: '320px', + height: 'auto', + margin: '0 auto 0 auto', + MozTransform: 'scaleY(-1)', + MsTransform: 'scaleY(-1)', + OTransform: 'scaleY(-1)', + WebkitTransform: 'scaleY(-1)' + }) + .appendTo($box), + + $reflectionGradient = $('
') + .addClass('OxReflection') + .css({ + position: 'absolute', + left: 0, + top: '80px', + right: 0, + width: '320px', + height: '160px', + margin: '0 auto 0 auto', + }) + .appendTo($box), + + $logo = Ox.Element({ + element: '', + tooltip: function() { + return Ox._('Enter {0}', [pandora.site.site.name]); + } + }) + .attr({ + id: 'logo', + src: '/static/png/logo.png' + }) + .css({ + position: 'absolute', + left: 0, + right: 0, + width: '320px', + height: 'auto', + margin: '0 auto 0 auto', + cursor: 'pointer' + }) + .bindEvent({ + anyclick: function() { + $browseButton.triggerEvent('click'); + } + }) + .appendTo($box), + + $findInput = Ox.Input({ + width: 252 + }) + .css({ + position: 'absolute', + left: 0, + top: '104px', + right: '260px', + bottom: 0, + margin: '0 auto 0 auto', + opacity: 0 + }) + .click(function(e) { + // fixme: why? + e.stopPropagation(); + }) + .bindEvent({ + submit: function(data) { + if (data.value) { + $findButton.triggerEvent('click'); + } else { + $browseButton.triggerEvent('click'); + } + } + }) + .appendTo($box), + + $findButton = Ox.Button({ + title: Ox._('Find'), + width: 122 + }) + .css({ + position: 'absolute', + left: '130px', + top: '104px', + right: 0, + bottom: 0, + margin: '0 auto 0 auto', + opacity: 0 + }) + .bindEvent({ + click: function() { + var folder = pandora.getListData().folder, + value = $findInput.value(); + folder && pandora.$ui.folderList[folder].options({selected: []}); + if (pandora.user.ui.section == 'items') { + pandora.$ui.findSelect.value('*'); + pandora.$ui.findInput.value(value); + } + that.fadeOutScreen(); + pandora.UI.set({ + page: '', + find: { + conditions: value === '' + ? [] + : [{key: '*', value: value, operator: '='}], + operator: '&' + }, + section: 'items' + }); + } + }) + .appendTo($box), + + $browseButton = Ox.Button({ + title: Ox._('Browse'), + width: 122 + }) + .css({ + position: 'absolute', + left: '390px', + top: '104px', + right: 0, + bottom: 0, + margin: '0 auto 0 auto', + opacity: 0 + }) + .bindEvent({ + click: function() { + pandora.UI.set({ + page: pandora.user.ui.page == 'home' ? '' : pandora.user.ui.page, + section: 'items' + }); + that.fadeOutScreen(); + } + }) + .appendTo($box), + + $signupButton = Ox.Button({ + title: Ox._('Sign Up'), + width: 122 + }) + .css({ + position: 'absolute', + left: 0, + top: '144px', + right: '390px', + bottom: 0, + margin: '0 auto 0 auto', + opacity: 0 + }) + .bindEvent({ + click: function() { + pandora.UI.set({page: 'signup'}); + that.fadeOutScreen(); + } + }), + + $signinButton = Ox.Button({ + title: Ox._('Sign In'), + width: 122 + }) + .css({ + position: 'absolute', + left: 0, + top: '144px', + right: '130px', + bottom: 0, + margin: '0 auto 0 auto', + opacity: 0 + }) + .bindEvent({ + click: function() { + pandora.UI.set({page :'signin'}); + that.fadeOutScreen(); + } + }), + + $preferencesButton = Ox.Button({ + title: Ox._('Preferences'), + width: 252 + }) + .css({ + position: 'absolute', + left: 0, + top: '144px', + right: '260px', + bottom: 0, + margin: '0 auto 0 auto', + opacity: 0 + }) + .bindEvent({ + click: function() { + pandora.UI.set({page: 'preferences'}); + that.fadeOutScreen(); + } + }), + + $aboutButton = Ox.Button({ + title: Ox._('About {0}', [pandora.site.site.name]), + width: 252 + }) + .css({ + position: 'absolute', + left: '260px', + top: '144px', + right: 0, + bottom: 0, + margin: '0 auto 0 auto', + opacity: 0 + }) + .bindEvent({ + click: function() { + pandora.UI.set({page: 'about'}); + that.fadeOutScreen(); + } + }) + .appendTo($box), + + $features = $('
') + .attr({id: 'lists'}) + .css({ + position: 'absolute', + left: 0, + top: '184px', + right: 0, + bottom: 0, + width: '560px', + margin: '0 auto 0 auto', + opacity: 0 + }) + .appendTo($box); + + if (pandora.user.level == 'guest') { + $signupButton.appendTo($box); + $signinButton.appendTo($box); + } else { + $preferencesButton.appendTo($box); + } + + function showFeatures() { + var $space, + featured = {}, + find = { + query: { + conditions: [{key: 'status', value: 'featured', operator: '=='}], + operator: '&' + }, + keys: ['description', 'modified', 'name', 'user'], + sort: [{key: 'position', operator: '+'}] + }, + items, lists, edits, texts; + pandora.api.findLists(find, function(result) { + lists = result.data.items.length; + items = result.data.items.map(function(item) { + return Ox.extend(item, {type: 'list'}); + }); + pandora.api.findEdits(find, function(result) { + edits = result.data.items.length; + items = items.concat(result.data.items.map(function(item) { + return Ox.extend(item, {type: 'edit'}); + })); + pandora.api.findTexts(find, function(result) { + texts = result.data.items.length; + items = items.concat(result.data.items.map(function(item) { + return Ox.extend(item, {type: 'text'}); + })); + $features.empty(); + show(); + }); + }); + }); + function show() { + var counter = 0, max = 8, mouse = false, position = 0, selected = 0, + color = Ox.Theme() == 'oxlight' ? 'rgb(0, 0, 0)' + : Ox.Theme() == 'oxmedium' ? 'rgb(0, 0, 0)' + : 'rgb(255, 255, 255)', + $label, $icon, $text, + $featuresBox, $featuresContainer, $featuresContent, + $featureBox = [], $featureIcon = [], + $previousButton, $nextButton; + if (items.length) { + $label = Ox.Label({ + textAlign: 'center', + title: '' + Ox._('Featured ' + ( + lists == 1 && edits == 0 && texts == 0 ? 'List' + : lists == 0 && edits == 1 && texts == 0 ? 'Edit' + : lists == 0 && edits == 0 && texts == 1 ? 'Text' + : edits == 0 && texts == 0 ? 'Lists' + : lists == 0 && texts == 0 ? 'Edits' + : lists == 0 && edits == 0 ? 'Texts' + : texts == 0 ? 'Lists and Edits' + : edits == 0 ? 'Lists and Texts' + : lists == 0 ? 'Edits and Texts' + : 'Lists, Edits and Texts' + )) + '', + width: 512 + }) + .css({ + position: 'absolute', + left: 0, + top: 0, + right: 0, + bottom: 0, + margin: '0 auto 0 auto' + }) + .appendTo($features); + $text = Ox.Label({ + width: 386 + }) + .addClass('OxSelectable') + .css({ + position: 'absolute', + left: '24px', + top: '24px', + right: 0, + height: '104px', + borderTopLeftRadius: '32px', + borderBottomLeftRadius: '32px', + padding: '8px 8px 8px 130px', + overflowY: 'auto', + textOverflow: 'ellipsis', + whiteSpace: 'normal' + }) + .html( + getHTML(items[selected]) + ) + .appendTo($features); + pandora.createLinks($text); + $icon = Ox.Element({ + element: '', + tooltip: getTooltip(items[selected]) + }) + .attr({ + src: getImageURL(items[selected]) + }) + .css({ + position: 'absolute', + left: 0, + top: '24px', + right: '390px', + width: '122px', + height: '122px', + borderRadius: '32px', + margin: '0 auto 0 auto', + cursor: 'pointer' + }) + .bindEvent({ + anyclick: function() { + openItem(selected); + } + }) + .appendTo($features); + if (items.length > 1) { + $featuresBox = $('
') + .css({ + position: 'absolute', + left: 0, + top: '150px', + right: 0, + height: '65px', // 4+57+4 + width: '560px', // 16+8+512+8+16 + margin: '0 auto 0 auto' + }) + .appendTo($features); + $featuresContainer = $('
') + .css({ + position: 'absolute', + left: '20px', + right: '20px', + height: '65px', + width: '520px', + overflow: 'hidden' + }) + .appendTo($featuresBox); + $featuresContent = $('
') + .css({ + position: 'absolute', + width: items.length * 65 + 'px', + height: '65px', + marginLeft: items.length < max + ? (max - items.length) * 65 / 2 + 'px' + : 0 + }) + .appendTo($featuresContainer); + if (items.length > max) { + $previousButton = Ox.Button({ + title: 'left', + type: 'image' + }) + .addClass(position > 0 ? 'visible' : '') + .css({ + position: 'absolute', + left: 0, + top: '25px', + opacity: 0 + }) + .hide() + .bindEvent({ + mousedown: function() { + counter = 0; + scrollToPosition(position - 1, true); + }, + mouserepeat: function() { + // fixme: arbitrary + if (counter++ % 5 == 0) { + scrollToPosition(position - 1, false); + } + } + }) + .appendTo($featuresBox); + $nextButton = Ox.Button({ + title: 'right', + type: 'image' + }) + .addClass(position < items.length - 1 ? 'visible' : '') + .css({ + position: 'absolute', + right: 0, + top: '25px', + opacity: 0 + }) + .hide() + .bindEvent({ + mousedown: function() { + counter = 0; + scrollToPosition(position + 1, true); + }, + mouserepeat: function() { + // fixme: arbitrary + if (counter++ % 5 == 0) { + scrollToPosition(position + 1, false); + } + } + }) + .appendTo($featuresBox); + $featuresBox.on({ + mouseenter: function() { + mouse = true; + $('.visible').show().stop().animate({ + opacity: 1 + }, 250); + }, + mouseleave: function() { + mouse = false; + $('.visible').stop().animate({ + opacity: 0 + }, 250, function() { + $(this).hide(); + }); + }, + mousewheel: function(e, delta, deltaX, deltaY) { + // fixme: arbitrary + scrollToPosition(position + Math.round(deltaX * 2), true); + } + }); + } + items.forEach(function(item, i) { + $featureBox[i] = $('
') + .css({ + float: 'left', + width: '57px', + height: '57px', + padding: '2px', + margin: '2px', + borderRadius: '16px', + boxShadow: '0 0 2px ' + (i == selected ? color : 'transparent') + }) + .appendTo($featuresContent); + $featureIcon[i] = Ox.Element({ + element: '', + tooltip: ( + (lists && edits) || (lists && texts) || (edits && texts) + ? Ox._(Ox.toTitleCase(item.type)) + ': ' + : '' + ) + + Ox.encodeHTMLEntities(item.name) + }) + .attr({ + src: getImageURL(item) + }) + .css({ + width: '57px', + height: '57px', + borderRadius: '16px', + cursor: 'pointer' + }) + .bindEvent({ + doubleclick: function() { + openItem(i); + }, + singleclick: function() { + selectItem(i); + } + }) + .appendTo($featureBox[i]); + }); + self.keydown = function(e) { + var focused = Ox.Focus.focused(), + key = Ox.KEYS[e.keyCode]; + if ( + focused === null + || !Ox.UI.elements[focused].hasClass('OxInput') + ) { + if (key == 'left' && selected > 0) { + selectItem(selected - 1); + } else if (key == 'up' && selected > 0) { + selectItem(0); + } else if (key == 'right' && selected < items.length - 1) { + selectItem(selected + 1); + } else if (key == 'down' && selected < items.length - 1) { + selectItem(items.length - 1); + } + } + }; + Ox.$document.on({keydown: self.keydown}); + } + $space = $('
') + .css({ + position: 'absolute', + top: items.length == 0 ? '0px' + : items.length == 1 ? '150px' + : '215px', + width: '560px', + height: '80px' + }) + .appendTo($features); + $features.animate({opacity: 1}, 250); + } + + function getHTML(item) { + return '' + + ( + (lists && edits) || (lists && texts) || (edits && texts) + ? Ox._(Ox.toTitleCase(item.type)) + ': ' + : '' + ) + + Ox.encodeHTMLEntities(item.name) + '

' + + item.description; + } + + function getImageURL(item) { + return '/' + item.type + '/' + item.user + + ':' + encodeURIComponent(item.name) + '/icon256.jpg?' + item.modified; + } + + function getTooltip(item) { + return Ox._('View {0}', [Ox._(Ox.toTitleCase(item.type))]) + } + + function openItem(i) { + that.fadeOutScreen(); + pandora.UI.set(Ox.extend({ + section: items[i].type == 'list' ? 'items' : items[i].type + 's', + page: '' + }, items[i].type == 'list' ? { + find: { + conditions: [{ + key: 'list', + value: items[i].user + ':' + + items[i].name, + operator: '==' + }], + operator: '&' + } + } : items[i].type == 'edit' ? { + edit: items[i].user + ':' + items[i].name + } : { + text: items[i].user + ':' + items[i].name + })); + } + + function scrollToPosition(i, animate) { + if (i >= 0 && i <= items.length - max && i != position) { + position = i; + $featuresContent.stop().animate({ + left: (position * -65) + 'px' + }, animate ? 250 : 0, function() { + if (position == 0) { + $previousButton.removeClass('visible').stop().animate({ + opacity: 0 + }, 250, function() { + $previousButton.hide(); + }); + } else { + $previousButton.addClass('visible'); + } + if (position == items.length - max) { + $nextButton.removeClass('visible').stop().animate({ + opacity: 0 + }, 250, function() { + $nextButton.hide(); + }); + } else { + $nextButton.addClass('visible'); + } + if (mouse) { + $featuresBox.trigger('mouseenter'); + } + }); + } + } + + function selectItem(i) { + if (i >= 0 && i <= items.length - 1 && i != selected) { + $featureBox[selected].css({ + boxShadow: 'none' + }); + selected = i; + $featureBox[selected].css({ + boxShadow: '0 0 2px ' + color + }); + if (selected < position) { + scrollToPosition(selected, true); + } else if (selected > position + max - 1) { + scrollToPosition(selected - max + 1, true); + } + $icon.attr({ + src: getImageURL(items[selected]) + }).options({ + tooltip: getTooltip(items[selected]) + }); + $text.html( + getHTML(items[selected]) + ); + } + } + + } + } + + that.fadeInScreen = function() { + that.appendTo(Ox.UI.$body).animate({opacity: 1}, 500, function() { + that.find('*').animate({opacity: 1}, 250, function() { + $findInput.focusInput(true); + showFeatures(); + }); + }); + return that; + }; + + that.fadeOutScreen = function() { + $('.OxTooltip').remove(); + that.animate({opacity: 0}, 500, function() { + that.remove(); + }); + pandora.$ui.tv && pandora.$ui.tv.unmute().find('.OxControls.OxVolume').hide(); + self.keydown && Ox.$document.off({keydown: self.keydown}); + return that; + }; + + that.showScreen = function(callback) { + var $elements = that.find('*'), count = 0; + $box.css({top: window.innerHeight / 2 - 80 + 'px'}); + that.css({opacity: 1}).appendTo(Ox.UI.$body); + $findInput.focusInput(true); + $box.animate({top: '80px'}, 500, function() { + $elements.animate({opacity: 1}, 250, function() { + if (++count == $elements.length) { + showFeatures(); + callback && callback(); + } + }); + }); + return that; + }; + + return that; + +}; diff --git a/static/js/infoView.bakma.js b/static/js/infoView.bakma.js new file mode 100644 index 0000000..aabf5d2 --- /dev/null +++ b/static/js/infoView.bakma.js @@ -0,0 +1,796 @@ +'use strict'; + +pandora.ui.infoView = function(data) { + + var ui = pandora.user.ui, + canEdit = pandora.site.capabilities.canEditMetadata[pandora.user.level] || data.editable, + canRemove = pandora.site.capabilities.canRemoveItems[pandora.user.level] || data.editable, + css = { + marginTop: '4px', + textAlign: 'justify' + }, + descriptions = [], + html, + iconRatio = ui.icons == 'posters' ? data.posterRatio : 1, + iconSize = ui.infoIconSize, + iconWidth = iconRatio > 1 ? iconSize : Math.round(iconSize * iconRatio), + iconHeight = iconRatio < 1 ? iconSize : Math.round(iconSize / iconRatio), + iconLeft = iconSize == 256 ? Math.floor((iconSize - iconWidth) / 2) : 0, + borderRadius = ui.icons == 'posters' ? 0 : iconSize / 8, + margin = 16, + nameKeys = ['director', 'cinematographer', 'featuring'], + listKeys = nameKeys.concat(['language', 'tag', 'category', 'groups']), + statisticsWidth = 128, + + $bar = Ox.Bar({size: 16}) + .bindEvent({ + doubleclick: function(e) { + if ($(e.target).is('.OxBar')) { + $info.animate({scrollTop: 0}, 250); + } + } + }), + + $options = Ox.MenuButton({ + items: [ + { + id: 'delete', + title: Ox._('Delete {0}...', [pandora.site.itemName.singular]), + disabled: !canRemove + } + ], + style: 'square', + title: 'set', + tooltip: Ox._('Options'), + type: 'image', + }) + .css({ + float: 'left', + borderColor: 'rgba(0, 0, 0, 0)', + background: 'rgba(0, 0, 0, 0)' + }) + .bindEvent({ + click: function(data_) { + if (data_.id == 'delete') { + pandora.$ui.deleteItemDialog = pandora.ui.deleteItemDialog(data).open(); + } + } + }) + .appendTo($bar), + + $edit = Ox.MenuButton({ + items: [ + { + id: 'insert', + title: Ox._('Insert HTML...'), + disabled: true + } + ], + style: 'square', + title: 'edit', + tooltip: Ox._('Edit'), + type: 'image', + }) + .css({ + float: 'right', + borderColor: 'rgba(0, 0, 0, 0)', + background: 'rgba(0, 0, 0, 0)' + }) + .bindEvent({ + click: function(data) { + // ... + } + }) + .appendTo($bar), + + $info = Ox.Element().css({overflowY: 'auto'}), + + that = Ox.SplitPanel({ + elements: [ + {element: $bar, size: 16}, + {element: $info} + ], + orientation: 'vertical' + }), + + $left = Ox.Element() + .css({ + position: 'absolute' + }) + .appendTo($info), + + $icon = Ox.Element({ + element: '', + tooltip: 'Switch to ' + Ox.getObjectById( + pandora.site.itemViews, + ui.videoView + ).title + ' View' + }) + .attr({ + src: pandora.getMediaURL('/' + data.id + '/' + ( + ui.icons == 'posters' ? 'poster' : 'icon' + ) + '512.jpg?' + data.modified) + }) + .css({ + position: 'absolute', + left: margin + iconLeft + 'px', + top: margin + 'px', + width: iconWidth + 'px', + height: iconHeight + 'px', + borderRadius: borderRadius + 'px', + cursor: 'pointer' + }) + .bindEvent({ + anyclick: function() { + pandora.UI.set({itemView: ui.videoView}); + } + }) + .appendTo($left), + + $reflection = $('
') + .addClass('OxReflection') + .css({ + position: 'absolute', + left: margin + 'px', + top: margin + iconHeight + 'px', + width: iconSize + 'px', + height: Math.round(iconSize / 2) + 'px', + overflow: 'hidden' + }) + .appendTo($left), + + $reflectionIcon = $('') + .attr({ + src: pandora.getMediaURL('/' + data.id + '/' + ( + ui.icons == 'posters' ? 'poster' : 'icon' + ) + '512.jpg?' + data.modified) + }) + .css({ + position: 'absolute', + left: iconLeft + 'px', + width: iconWidth + 'px', + height: iconHeight + 'px', + borderRadius: borderRadius + 'px' + }) + .appendTo($reflection), + + $reflectionGradient = $('
') + .css({ + position: 'absolute', + width: iconSize + 'px', + height: Math.round(iconSize / 2) + 'px' + }) + .appendTo($reflection), + + $data = $('
') + .addClass('OxTextPage') + .css({ + position: 'absolute', + left: margin + 'px', + top: margin + iconHeight + margin + 'px', + width: iconSize + 'px', + }) + .appendTo($left), + + $text = Ox.Element() + .addClass('OxTextPage') + .css({ + position: 'absolute', + left: margin + (iconSize == 256 ? 256 : iconWidth) + margin + 'px', + top: margin + 'px', + right: margin + statisticsWidth + margin + 'px', + }) + .appendTo($info), + + $statistics = $('
') + .css({ + position: 'absolute', + width: statisticsWidth + 'px', + top: margin + 'px', + right: margin + 'px' + }) + .appendTo($info), + + $capabilities; + + [$options, $edit].forEach(function($element) { + $element.find('input').css({ + borderWidth: 0, + borderRadius: 0, + padding: '3px' + }); + }); + + if (!canEdit) { + pandora.createLinks($info); + } + + // Source & Project -------------------------------------------------------- +/* + ['source', 'project'].forEach(function(key) { + if (canEdit || data[key]) { + var $div = $('
') + .addClass('OxSelectable') + .css(css) + .css({margin: 0}) + .appendTo($data); + $('') + .html( + formatKey({ + category: 'categories', + }[key] || key).replace('', ' ') + ) + .appendTo($div); + Ox.EditableContent({ + clickLink: pandora.clickLink, + format: function(value) { + return formatValue(key, value); + }, + placeholder: formatLight(Ox._('unknown')), + editable: canEdit, + tooltip: canEdit ? pandora.getEditTooltip() : '', + value: listKeys.indexOf(key) >= 0 + ? (data[key] || []).join(', ') + : data[key] || '' + }) + .bindEvent({ + submit: function(event) { + editMetadata(key, event.value); + } + }) + .appendTo($div); + if (canEdit || data[key + 'description']) { + $('
') + .append( + descriptions[key] = Ox.EditableContent({ + clickLink: pandora.clickLink, + editable: canEdit, + format: function(value) { + return value.replace( + /') + .css({ + marginTop: '-2px', + marginBottom: '12px' + }) + .append( + Ox.EditableContent({ + editable: canEdit, + placeholder: formatLight(Ox._('No Title')), + tooltip: canEdit ? pandora.getEditTooltip() : '', + value: data.title + }) + .css({ + fontWeight: 'bold', + fontSize: '13px' + }) + .bindEvent({ + submit: function(event) { + editMetadata('title', event.value); + } + }) + ) + .appendTo($text); + + // Groups ------------------------------------------------------------------ + + renderGroup(['location', 'date', 'language']); + + renderGroup(['category', 'name']); + + renderGroup(['tag']); + + // Summary ------------------------------------------------------------- + + if (canEdit || data.summary) { + $('
') + .css({ + marginTop: '12px', + marginBottom: '12px' + }) + .append( + Ox.EditableContent({ + clickLink: pandora.clickLink, + collapseToEnd: false, + editable: canEdit, + format: function(value) { + return value.replace( + /').css({width: '1px', height: 0, clear: 'both'}).appendTo($text); + } + + // License ----------------------------------------------------------------- + + //renderGroup(['license']); + + + $('
') + .addClass('OxSelectable') + .css(css) + .css({height: '16px'}) + .appendTo($text); + + // Duration, Aspect Ratio -------------------------------------------------- + + ['duration', 'aspectratio'].forEach(function(key) { + var itemKey = Ox.getObjectById(pandora.site.itemKeys, key), + value = data[key] || 0; + $('
') + .css({marginBottom: '4px'}) + .append(formatKey(itemKey.title, 'statistics')) + .append( + Ox.Theme.formatColor(null, 'gradient') + .css({textAlign: 'right'}) + .html( + Ox['format' + Ox.toTitleCase(itemKey.format.type)] + .apply(null, [value].concat(itemKey.format.args)) + ) + ) + .appendTo($statistics); + }); + + // Hue, Saturation, Lightness, Volume -------------------------------------- + + ['hue', 'saturation', 'lightness', 'volume'].forEach(function(key) { + $('
') + .css({marginBottom: '4px'}) + .append(formatKey(key, 'statistics')) + .append( + Ox.Theme.formatColor( + data[key] || 0, key == 'volume' ? 'lightness' : key + ).css({textAlign: 'right'}) + ) + .appendTo($statistics); + }); + + // Cuts per Minute --------------------------------------------------------- + + $('
') + .css({marginBottom: '4px'}) + .append(formatKey('cuts per minute', 'statistics')) + .append( + Ox.Theme.formatColor(null, 'gradient') + .css({textAlign: 'right'}) + .html(Ox.formatNumber(data['cutsperminute'] || 0, 3)) + ) + .appendTo($statistics); + + // Rights Level ------------------------------------------------------------ + + var $rightsLevel = $('
'); + $('
') + .css({marginBottom: '4px'}) + .append(formatKey(Ox._('Rights Level'), 'statistics')) + .append($rightsLevel) + .appendTo($statistics); + renderRightsLevel(); + + // User and Groups --------------------------------------------------------- + + ['user', 'groups'].forEach(function(key) { + (canEdit || data[key] && data[key].length) && $('
') + .css({marginBottom: '4px'}) + .append(formatKey(key, 'statistics')) + .append( + $('
') + .css({margin: '2px 0 0 -1px'}) // fixme: weird + .append( + Ox.Editable({ + placeholder: key == 'groups' ? formatLight(Ox._('No Groups')) : '', + editable: canEdit, + tooltip: canEdit ? pandora.getEditTooltip() : '', + value: key == 'user' ? data[key] : data[key].join(', ') + }) + .bindEvent({ + submit: function(event) { + editMetadata(key, event.value); + } + }) + ) + ) + .appendTo($statistics); + }); + + // Created and Modified ---------------------------------------------------- + + ['created', 'modified'].forEach(function(key) { + $('
') + .css({marginBottom: '4px'}) + .append(formatKey(key, 'statistics')) + .append( + $('
').html(Ox.formatDate(data[key], '%B %e, %Y')) + ) + .appendTo($statistics); + }); + + // Notes -------------------------------------------------------------------- + + if (canEdit) { + $('
') + .css({marginBottom: '4px'}) + .append( + formatKey('Notes', 'statistics').options({ + tooltip: Ox._('Only {0} can see and edit these comments', [ + Object.keys(pandora.site.capabilities.canEditMetadata).map(function(level, i) { + return ( + i == 0 ? '' + : i < Ox.len(pandora.site.capabilities.canEditMetadata) - 1 ? ', ' + : ' ' + Ox._('and') + ' ' + ) + Ox.toTitleCase(level) + }).join('')]) + }) + ) + .append( + Ox.EditableContent({ + height: 128, + placeholder: formatLight(Ox._('No notes')), + tooltip: pandora.getEditTooltip(), + type: 'textarea', + value: data.notes || '', + width: 128 + }) + .bindEvent({ + submit: function(event) { + editMetadata('notes', event.value); + } + }) + ) + .appendTo($statistics); + } + + $('
').css({height: '16px'}).appendTo($statistics); + + function editMetadata(key, value) { + if (value != data[key]) { + var edit = {id: data.id}; + if (key == 'title') { + edit[key] = value; + } else if (listKeys.indexOf(key) >= 0) { + edit[key] = value ? value.split(', ') : []; + } else { + edit[key] = value ? value : null; + } + pandora.api.edit(edit, function(result) { + data[key] = result.data[key]; + descriptions[key] && descriptions[key].options({ + value: result.data[key + 'description'] + }); + Ox.Request.clearCache(); // fixme: too much? can change filter/list etc + if (result.data.id != data.id) { + pandora.UI.set({item: result.data.id}); + pandora.$ui.browser.value(data.id, 'id', result.data.id); + } + pandora.updateItemContext(); + pandora.$ui.browser.value(result.data.id, key, result.data[key]); + pandora.$ui.itemTitle + .options({ + title: '' + result.data.title + + (Ox.len(result.data.director) + ? ' (' + result.data.director.join(', ') + ')' + : '') + + (result.data.year ? ' ' + result.data.year : '') + '' + }); + //pandora.$ui.contentPanel.replaceElement(0, pandora.$ui.browser = pandora.ui.browser()); + }); + } + } + + function formatKey(key, mode) { + var item = Ox.getObjectById(pandora.site.itemKeys, key); + key = Ox._(item ? item.title : key); + mode = mode || 'text'; + return mode == 'text' + ? '' + Ox.toTitleCase(key) + ': ' + : mode == 'description' + ? Ox.toTitleCase(key) + : Ox.Element() + .css({marginBottom: '4px', fontWeight: 'bold'}) + .html(Ox.toTitleCase(key) + .replace(' Per ', ' per ')); + } + + function formatLight(str) { + return '' + str + ''; + } + + function formatLink(key, value, linkValue) { + linkValue = linkValue || value; + return (Ox.isArray(value) ? value : [value]).map(function(value) { + return key + ? '' + value + '' + : value; + }).join(', '); + } + + function formatValue(key, value) { + var ret; + if (key == 'date') { + ret = value ? Ox.formatDate(value, + ['', '%Y', '%B %Y', '%B %e, %Y'][value.split('-').length] + ) : ''; + } else if (listKeys.indexOf(key) > -1) { + ret = value.split(', '); + } else { + ret = value; + } + if (nameKeys.indexOf(key) > -1) { + key = 'name'; + } + return formatLink(key, ret, key == 'date' && value); + } + + function getRightsLevelElement(rightsLevel) { + return Ox.Theme.formatColorLevel( + rightsLevel, + pandora.site.rightsLevels.map(function(rightsLevel) { + return rightsLevel.name; + }) + ); + } + + function getValue(key, value) { + return !value ? '' + : Ox.contains(listKeys, key) ? value.join(', ') + : value; + } + + function renderCapabilities(rightsLevel) { + var capabilities = [].concat( + canEdit ? [{name: 'canSeeItem', symbol: 'Find'}] : [], + [ + {name: 'canPlayClips', symbol: 'PlayInToOut'}, + {name: 'canPlayVideo', symbol: 'Play'}, + {name: 'canDownloadVideo', symbol: 'Download'} + ] + ), + userLevels = canEdit ? pandora.site.userLevels : [pandora.user.level]; + $capabilities.empty(); + userLevels.forEach(function(userLevel, i) { + var $element, + $line = $('
') + .css({ + height: '16px', + marginBottom: '4px' + }) + .appendTo($capabilities); + if (canEdit) { + $element = Ox.Theme.formatColorLevel(i, userLevels.map(function(userLevel) { + return Ox.toTitleCase(userLevel); + }), [0, 240]); + Ox.Label({ + textAlign: 'center', + title: Ox._(Ox.toTitleCase(userLevel)), + width: 60 + }) + .addClass('OxColor OxColorGradient') + .css({ + float: 'left', + height: '12px', + paddingTop: '2px', + background: $element.css('background'), + fontSize: '8px', + color: $element.css('color') + }) + .data({OxColor: $element.data('OxColor')}) + .appendTo($line); + } + capabilities.forEach(function(capability) { + var hasCapability = pandora.site.capabilities[capability.name][userLevel] >= rightsLevel, + $element = Ox.Theme.formatColorLevel(hasCapability, ['', '']); + Ox.Button({ + tooltip: Ox._('{0} ' + + (hasCapability ? 'can' : 'can\'t') + ' ' + + Ox.toSlashes(capability.name) + .split('/').slice(1).join(' ') + .toLowerCase() + .replace('see item', 'see the item') + .replace('play video', 'play the full video') + .replace('download video', 'download the video'), + [canEdit ? Ox._(Ox.toTitleCase(userLevel)) : Ox._('You')]), + title: capability.symbol, + type: 'image' + }) + .addClass('OxColor OxColorGradient') + .css({background: $element.css('background')}) + .css('margin' + (canEdit ? 'Left' : 'Right'), '4px') + .data({OxColor: $element.data('OxColor')}) + .appendTo($line); + }); + if (!canEdit) { + Ox.Button({ + title: Ox._('Help'), + tooltip: Ox._('About Rights'), + type: 'image' + }) + .css({marginLeft: '52px'}) + .bindEvent({ + click: function() { + pandora.UI.set({page: 'rights'}); + } + }) + .appendTo($line); + } + }); + } + + function renderGroup(keys) { + var $element; + if (canEdit || keys.filter(function(key) { + return data[key]; + }).length) { + $element = $('
') + .addClass('OxSelectable') + .css(css); + keys.forEach(function(key, i) { + if (canEdit || data[key]) { + if ($element.children().length) { + $('').html('; ').appendTo($element); + } + $('').html(formatKey(key)).appendTo($element); + Ox.EditableContent({ + clickLink: pandora.clickLink, + format: function(value) { + return formatValue(key, value); + }, + placeholder: formatLight(Ox._('unknown')), + tooltip: canEdit ? pandora.getEditTooltip() : '', + value: getValue(key, data[key]) + }) + .bindEvent({ + submit: function(data) { + editMetadata(key, data.value); + } + }) + .appendTo($element); + } + }); + $element.appendTo($text); + } + } + + function renderRightsLevel() { + var $rightsLevelElement = getRightsLevelElement(data.rightslevel), + $rightsLevelSelect; + $rightsLevel.empty(); + if (canEdit) { + $rightsLevelSelect = Ox.Select({ + items: pandora.site.rightsLevels.map(function(rightsLevel, i) { + return {id: i, title: Ox._(rightsLevel.name)}; + }), + width: 128, + value: data.rightslevel + }) + .addClass('OxColor OxColorGradient') + .css({ + marginBottom: '4px', + background: $rightsLevelElement.css('background') + }) + .data({OxColor: $rightsLevelElement.data('OxColor')}) + .bindEvent({ + change: function(event) { + var rightsLevel = event.value; + $rightsLevelElement = getRightsLevelElement(rightsLevel); + $rightsLevelSelect + .css({background: $rightsLevelElement.css('background')}) + .data({OxColor: $rightsLevelElement.data('OxColor')}) + renderCapabilities(rightsLevel); + pandora.api.edit({id: data.id, rightslevel: rightsLevel}, function(result) { + // ... + }); + } + }) + .appendTo($rightsLevel); + } else { + $rightsLevelElement + .css({ + marginBottom: '4px' + }) + .appendTo($rightsLevel); + } + $capabilities = $('
').appendTo($rightsLevel); + renderCapabilities(data.rightslevel); + } + + function toggleIconSize() { + iconSize = iconSize == 256 ? 512 : 256; + iconWidth = iconRatio > 1 ? iconSize : Math.round(iconSize * iconRatio); + iconHeight = iconRatio < 1 ? iconSize : Math.round(iconSize / iconRatio); + iconLeft = iconSize == 256 ? Math.floor((iconSize - iconWidth) / 2) : 0, + borderRadius = ui.icons == 'posters' ? 0 : iconSize / 8; + $icon.animate({ + left: margin + iconLeft + 'px', + width: iconWidth + 'px', + height: iconHeight + 'px', + borderRadius: borderRadius + 'px' + }, 250); + $reflection.animate({ + top: margin + iconHeight + 'px', + width: iconSize + 'px', + height: iconSize / 2 + 'px' + }, 250); + $reflectionIcon.animate({ + left: iconLeft + 'px', + width: iconWidth + 'px', + height: iconHeight + 'px', + borderRadius: borderRadius + 'px' + }, 250); + $reflectionGradient.animate({ + width: iconSize + 'px', + height: iconSize / 2 + 'px' + }, 250); + $data.animate({ + top: margin + iconHeight + margin + 'px', + width: iconSize + 'px', + }, 250); + $text.animate({ + left: margin + (iconSize == 256 ? 256 : iconWidth) + margin + 'px', + }, 250); + pandora.UI.set({infoIconSize: iconSize}); + } + + that.reload = function() { + var src = pandora.getMediaURL('/' + data.id + '/' + ( + ui.icons == 'posters' ? 'poster' : 'icon' + ) + '512.jpg?' + Ox.uid()); + $icon.attr({src: src}); + $reflectionIcon.attr({src: src}); + iconSize = iconSize == 256 ? 512 : 256; + iconRatio = ui.icons == 'posters' + ? (ui.showSitePosters ? pandora.site.posters.ratio : data.posterRatio) : 1; + toggleIconSize(); + }; + + that.bindEvent({ + pandora_icons: that.reload, + pandora_showsiteposters: function() { + ui.icons == 'posters' && that.reload(); + } + }); + + return that; + +}; diff --git a/static/png/icon.bakma.png b/static/png/icon.bakma.png new file mode 100644 index 0000000000000000000000000000000000000000..09e25023294e9b3aa724c9581e7f83c5268810ad GIT binary patch literal 12876 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 bl_L&$CuAnoZP7Cc0nNipYtsM!AlR&ORW literal 0 HcmV?d00001