def _idol_sub_unit_to_cuteform(k): if float(k) - 2 < 0: return staticImageURL(k, folder='i_unit', extension='png') elif float(k) - 10 < 0: return staticImageURL(int(k) - 2, folder='i_subunit', extension='png') else: return FAVORITE_CHARACTERS_IMAGES[int(k) - 10]
def ordering_fields(self, item, only_fields=None, *args, **kwargs): fields = super(CardCollection.ListView, self).ordering_fields(item, *args, only_fields=only_fields, **kwargs) if 'max_smile' in only_fields: fields['max_smile'] = { 'verbose_name': _('Smile'), 'value': item.smile_max_idol or item.smile_max or item.smile_min or '???', 'type': 'text', 'image': staticImageURL('0', folder='i_attribute', extension='png'), } if 'max_pure' in only_fields: fields['max_pure'] = { 'verbose_name': _('Pure'), 'value': item.pure_max_idol or item.pure_max or item.pure_min or '???', 'type': 'text', 'image': staticImageURL('1', folder='i_attribute', extension='png'), } if 'max_cool' in only_fields: fields['max_cool'] = { 'verbose_name': _('Cool'), 'value': item.cool_max_idol or item.cool_max or item.cool_min or '???', 'type': 'text', 'image': staticImageURL('2', folder='i_attribute', extension='png'), } return fields
def gallery(request): ajax = request.path_info.startswith('/ajax/') context = ajaxContext(request) if ajax else getGlobalContext(request) context['ajax'] = ajax context['extends'] = 'base.html' if not context['ajax'] else 'ajax.html' context['page_title'] = _('Gallery') context['categories'] = [ { 'title': details['translation'], 'url': u'/assets/{}/'.format(type), 'icon': 'pictures', 'image': staticImageURL(type, folder='gallery', extension='png'), } for i_type, (type, details) in enumerate(models.Asset.TYPES.items()) ] + [ { 'icon': 'present', 'title': _('Area items'), 'url': '/areas/', 'image': staticImageURL('area_items', folder='gallery', extension='png'), }, { 'icon': 'star', 'title': _('Items'), 'url': '/items/', 'image': staticImageURL('items', folder='gallery', extension='png'), }, ] return render(request, 'pages/gallery.html', context)
def bandField(band, i): return { 'image': staticImageURL('mini_band_icon/{}.png'.format(band)), 'verbose_name': _('Band'), 'type': 'image_link', 'link': u'/members/?i_band={}'.format(i), 'ajax_link': u'/ajax/members/?i_band={}&ajax_modal_only'.format(i), 'link_text': band, 'value': staticImageURL('band/{}.png'.format(band)), }
def to_fields(self, view, item, *args, **kwargs): fields = super(SongCollection, self).to_fields(view, item, *args, icons=SONGS_ICONS, images={ 'attribute': staticImageURL(item.i_attribute, folder='i_attribute', extension='png'), 'unit': staticImageURL(item.i_unit, folder='i_unit', extension='png'), 'subunit': staticImageURL(item.i_subunit, folder='i_subunit', extension='png'), }, **kwargs) setSubField(fields, 'b_side_start', key='timezones', value=['Asia/Tokyo', 'Local time']) setSubField(fields, 'b_side_end', key='timezones', value=['Asia/Tokyo', 'Local time']) setSubField(fields, 'release', key='timezones', value=['Asia/Tokyo', 'Local time']) setSubField(fields, 'length', key='value', value=lambda f: item.length_in_minutes) return fields
def to_fields(self, view, item, *args, **kwargs): _photo_images = PHOTO_IMAGES.copy() _photo_images.update({ 'color': staticImageURL(item.color, folder='color', extension='png'), 'rarity': staticImageURL(item.rarity, folder='rarity', extension='png'), }) fields = super(PhotoCollection, self).to_fields(view, item, *args, icons=PHOTO_ICONS, images=_photo_images, **kwargs) return fields
class StaffConfiguration(MagiModel): collection_name = 'staffconfiguration' owner = models.ForeignKey(User, related_name='added_configurations') key = models.CharField(max_length=100) verbose_key = models.CharField('Name', max_length=100) value = models.TextField('Value', null=True) LANGUAGE_CHOICES = django_settings.LANGUAGES LANGUAGE_WITHOUT_I_CHOICES = True LANGUAGE_SOFT_CHOICES = True i_language = models.CharField(_('Language'), max_length=10, null=True) language_image_url = property(lambda _s: staticImageURL(_s.language, folder=u'language', extension='png')) is_long = models.BooleanField(default=False) is_markdown = models.BooleanField(default=False) is_boolean = models.BooleanField(default=False) # Owner is always pre-selected @property def cached_owner(self): self.owner.unicode = unicode(self.owner) return self.owner @property def boolean_value(self): if self.is_boolean: if self.value == 'True': return True if self.value == 'False': return False return None return self.value @property def representation_value(self): if self.is_markdown: return u'<div class="list-group-item to-markdown">{}</div>'.format(self.value) if self.value else '' elif self.is_boolean: if self.value == 'True': return u'<i class="flaticon-checked"></i>' if self.value == 'False': return u'<i class="flaticon-delete"></i>' return '' return self.value or '' @property def field_type(self): if self.key.endswith('_image_url') or self.key.endswith('_image'): return 'image' if self.is_markdown or self.is_boolean: return 'html' return 'text' def __unicode__(self): return self.verbose_key class Meta: unique_together = (('key', 'i_language'),)
def to_fields(self, view, item, *args, **kwargs): # Add/Edit view auto-see All-attribute rarity symbols #Item/List view see proper attribute v. when known if item.attribute: rarityfolder='rarity_' + str(item.i_attribute) else: rarityfolder='rarity_3' fields = super(CardCollection, self).to_fields(view, item, *args, icons=CARDS_ICONS, images={ 'attribute': staticImageURL(item.i_attribute, folder='i_attribute', extension='png'), 'rarity': staticImageURL(item.i_rarity, folder=rarityfolder, extension='png'), }, **kwargs) setSubField(fields, 'release', key='timezones', value=['Asia/Tokyo']) setSubField(fields, 'card_id', key='type', value='text') setSubField(fields, 'card_id', key='value', value=u'#{}'.format(item.card_id)) return fields
def generate_settings(): print 'Get staff configurations and latest news' staff_configurations, latest_news = getStaffConfigurations() print 'Show a happy birthday banner for the users whose birthday is today' latest_news = getUsersBirthdaysToday( staticImageURL('happy_birthday.png'), latest_news=latest_news, max_usernames=4, ) print 'Cache all CCCs' all_cccs = OrderedDict([(ccc.id, { 'name': unicode(ccc), 't_names': getAllTranslations(lambda _language: ccc, unique=True), 'image_url': ccc.image_url, 'acronym': ccc.acronym, }) for ccc in models.CCC.objects.all().order_by('-start_date')]) print 'Links in navbar' links_in_navbar = OrderedDict([(link.id, { 'name': unicode(link), 't_names': getAllTranslations(lambda _language: link, unique=True), 'url': link.url, }) for link in models.Link.objects.filter(in_navbar=True).order_by('id')]) print 'Add CCC to latest news' recent_cccs = getCurrentEvents(models.CCC.objects.all(), starts_within=1360, ends_within=1360) # todo not working latest_news += [{ 't_titles': getAllTranslations(lambda _language: item), 'image': ccc.image_url, 'url': ccc.item_url, } for ccc in recent_cccs] print 'Save generated settings' generateSettings( { 'LATEST_NEWS': latest_news, 'STAFF_CONFIGURATIONS': staff_configurations, 'CCCS': all_cccs, 'LINKS_IN_NAVBAR': links_in_navbar, }, imports=[ 'from collections import OrderedDict', ])
def generateDifficulty(difficulty): note_image = staticImageURL('note.png') return u'{big_images}{small_images}'.format( big_images=( u'<img src="{}" class="song-big-note">'.format(note_image) * (difficulty // 5)), small_images=( u'<img src="{}" class="song-small-note">'.format(note_image) * (difficulty % 5)), )
def to_fields(self, view, item, *args, **kwargs): fields = super(IdolCollection, self).to_fields(view, item, *args, icons=IDOLS_ICONS, images={ 'attribute': staticImageURL(item.i_attribute, folder='i_attribute', extension='png'), 'unit': staticImageURL(item.i_unit, folder='i_unit', extension='png'), 'subunit': staticImageURL(item.i_subunit, folder='i_subunit', extension='png'), 'astrological_sign': staticImageURL( item.i_astrological_sign, folder='i_astrological_sign', extension='png', ), }, **kwargs) if item.japanese_name and get_language() == 'ja': setSubField(fields, 'name', key='value', value=item.japanese_name) setSubField(fields, 'birthday', key='type', value='text') setSubField(fields, 'birthday', key='value', value=lambda f: date_format(item.birthday, format='MONTH_DAY_FORMAT', use_l10n=True)) return fields
def gallery(request, context): context['categories'] = [ { 'title': details['translation'], 'url': u'/assets/{}/'.format(type), 'icon': 'pictures', 'image': staticImageURL(type, folder='gallery', extension='png'), } for i_type, (type, details) in enumerate(models.Asset.TYPES.items()) ] + [ { 'icon': 'present', 'title': _('Area items'), 'url': '/areas/', 'image': staticImageURL('area_items', folder='gallery', extension='png'), }, { 'icon': 'star', 'title': _('Items'), 'url': '/items/', 'image': staticImageURL('items', folder='gallery', extension='png'), }, ]
def memberBandMergeCuteForm(cuteform): mergedFieldCuteForm( cuteform, { 'title': string_concat(_('Member'), '/', _('Band')), 'extra_settings': { 'modal': 'true', 'modal-text': 'true', }, }, OrderedDict([ ('member', lambda k, v: FAVORITE_CHARACTERS_IMAGES[int(k)]), ('i_band', lambda k, v: staticImageURL(v, folder='band', extension='png')), ]))
def to_fields(self, item, order=None, extra_fields=None, exclude_fields=None, *args, **kwargs): if extra_fields is None: extra_fields = [] if exclude_fields is None: exclude_fields = [] if order is None: order = [] values = [] for fieldName, verbose_name in models.Idol.MEASUREMENT_DETAILS: value = getattr(item, fieldName) exclude_fields.append(fieldName) if value: values.append(mark_safe(u'<b>{}</b>: {} cm'.format(verbose_name, value))) if values: extra_fields.append(('measurements', { 'verbose_name': _('Measurements'), 'type': 'list', 'value': values, 'icon': 'measurements', })) if item.school is not None: exclude_fields.append('i_year') if item.birthday is not None: exclude_fields += ['age', 'i_astrological_sign'] exclude_fields.append('japanese_name') order = IDOL_ORDER + order fields = super(IdolCollection.ItemView, self).to_fields(item, *args, order=order, extra_fields=extra_fields, exclude_fields=exclude_fields, **kwargs) if item.birthday: if item.astrological_sign is not None: setSubField(fields, 'birthday', key='icon', value=None) setSubField(fields, 'birthday', key='image', value=staticImageURL(item.i_astrological_sign, folder='i_astrological_sign', extension='png')) if item.age: setSubField(fields, 'birthday', key='type', value='text_annotation') setSubField(fields, 'birthday', key='annotation', value=_('{age} years old').format(age=item.age)) if item.school and item.year: setSubField(fields, 'school', key='type', value='title_text') setSubField(fields, 'school', key='title', value=item.t_school) setSubField(fields, 'school', key='value', value='{}'.format(unicode(item.t_year))) setSubField(fields, 'description', key='type', value='long_text') if item.japanese_name: if get_language() == 'ja': setSubField(fields, 'name', key='value', value=item.japanese_name) else: setSubField(fields, 'name', key='type', value='text_annotation') setSubField(fields, 'name', key='annotation', value=item.japanese_name) return fields
def memberBandMergeCuteForm(cuteform): mergedFieldCuteForm( cuteform, { 'title': string_concat(_('Member'), '/', _('Band')), 'extra_settings': { 'modal': 'true', 'modal-text': 'true', }, }, OrderedDict([ ('member', lambda k, v: getCharacterImageFromPk(int(k))), ('i_band', lambda k, v: staticImageURL(v, folder='band', extension='png')), ]))
def to_fields(self, item, images=None, *args, **kwargs): if images is None: images = {} images.update({ 'website': item.website_image, 'groups': staticImageURL(item.groups[0], folder='groups', extension='png') if item.groups else None, }) fields = super(AccountCollection.ItemView, self).to_fields(item, *args, images=images, **kwargs) setSubField(fields, 'website', key='type', value=u'link') setSubField(fields, 'website', key='value', value=item.website_url) setSubField(fields, 'website', key='link_text', value=item.website) return fields
def to_fields(self, view, item, *args, **kwargs): fields = super(SIFEventCollection, self).to_fields(view, item, *args, icons=EVENTS_ICONS, images={ 'unit': staticImageURL(item.i_unit, folder='i_unit', extension='png'), }, **kwargs) setSubField(fields, 'jp_start_date', key='timezones', value=['Asia/Tokyo', 'Local time']) setSubField(fields, 'jp_end_date', key='timezones', value=['Asia/Tokyo', 'Local time']) setSubField(fields, 'ww_start_date', key='timezones', value=['UTC', 'Local time']) setSubField(fields, 'ww_end_date', key='timezones', value=['UTC', 'Local time']) setSubField(fields, 'tw_start_date', key='timezones', value=['Asia/Taipei', 'Local time']) setSubField(fields, 'tw_end_date', key='timezones', value=['Asia/Taipei', 'Local time']) setSubField(fields, 'kr_start_date', key='timezones', value=['Asia/Seoul', 'Local time']) setSubField(fields, 'kr_end_date', key='timezones', value=['Asia/Seoul', 'Local time']) setSubField(fields, 'cn_start_date', key='timezones', value=['UTC', 'Local time']) setSubField(fields, 'cn_end_date', key='timezones', value=['UTC', 'Local time']) return fields
def bangGlobalContext(request): context = globalContext(request) # Change font depending on language if context['current_language'] in FONTS_PER_LANGUAGE: f = FONTS_PER_LANGUAGE[context['current_language']] if 'name' in f and 'url' in f: context['extracss'] = context.get( 'extracss', '') + u'\n @import url({url});{title_url}\n\ body {{ font-family: \'{name}\', sans-serif; }}\n {css_classes} {{ font-family: \'{title_name}\', monospace;{title_weight} }}'.format( url=f['url'], title_url=(u'\n@import url({url});'.format( url=f['title_url']) if 'title_url' in f else ''), name=f['name'], css_classes=TITLE_CSS_CLASSES, title_name=f.get('title', f['name']), title_weight=(u' font-weight: {weight};'.format( weight=f['title_weight']) if 'title_weight' in f else ''), ) for popup_name, popup in context.get('corner_popups', {}).items(): popup['image_overflow'] = True if popup_name == 'happy_birthday': popup['image'] = staticImageURL('birthday_kanae.png') return context
def rank_image_url(self): return staticImageURL(u'medal{}'.format(self.rank), folder='badges', extension='png')
def _get_share_image(context, collection_view, item=None): return staticImageURL(collection_view.share_image(context, item), full=True)
RAW_CONTEXT['collectible_collections'] = collectible_collections RAW_CONTEXT['account_model'] = ACCOUNT_MODEL RAW_CONTEXT['site_name'] = SITE_NAME RAW_CONTEXT['site_name_per_language'] = SITE_NAME_PER_LANGUAGE RAW_CONTEXT['site_url'] = SITE_URL RAW_CONTEXT['github_repository'] = GITHUB_REPOSITORY RAW_CONTEXT['site_description'] = SITE_DESCRIPTION RAW_CONTEXT['staff_configurations'] = STAFF_CONFIGURATIONS RAW_CONTEXT['get_started_video'] = GET_STARTED_VIDEO RAW_CONTEXT['game_name'] = GAME_NAME RAW_CONTEXT['static_uploaded_files_prefix'] = STATIC_UPLOADED_FILES_PREFIX RAW_CONTEXT['static_url'] = SITE_STATIC_URL + 'static/' RAW_CONTEXT['static_files_version'] = STATIC_FILES_VERSION RAW_CONTEXT['empty_image'] = EMPTY_IMAGE RAW_CONTEXT['full_static_url'] = u'http{}:{}'.format('' if settings.DEBUG else 's', RAW_CONTEXT['static_url']) if 'http' not in RAW_CONTEXT['static_url'] else RAW_CONTEXT['static_url'] RAW_CONTEXT['site_logo'] = staticImageURL(SITE_LOGO) RAW_CONTEXT['full_site_logo'] = u'http{}:{}'.format('' if settings.DEBUG else 's',RAW_CONTEXT['site_logo']) if 'http' not in RAW_CONTEXT['site_logo'] else RAW_CONTEXT['site_logo'] RAW_CONTEXT['site_nav_logo'] = SITE_NAV_LOGO RAW_CONTEXT['disqus_shortname'] = DISQUS_SHORTNAME RAW_CONTEXT['javascript_translated_terms'] = JAVASCRIPT_TRANSLATED_TERMS RAW_CONTEXT['javascript_commons'] = JAVASCRIPT_COMMONS RAW_CONTEXT['site_color'] = COLOR RAW_CONTEXT['site_image'] = staticImageURL(SITE_IMAGE) RAW_CONTEXT['site_image_per_language'] = { _l: staticImageURL(_url) for _l, _url in SITE_IMAGE_PER_LANGUAGE.items() } RAW_CONTEXT['full_site_image'] = u'http{}:{}'.format('' if settings.DEBUG else 's',RAW_CONTEXT['site_image']) if 'http' not in RAW_CONTEXT['site_image'] else RAW_CONTEXT['site_image'] RAW_CONTEXT['full_site_image_per_language'] = { _l: (u'http:{}'.format(_url) if 'http' not in _url else _url) for _l, _url in RAW_CONTEXT['site_image_per_language'].items() } RAW_CONTEXT['email_image'] = staticImageURL(EMAIL_IMAGE if EMAIL_IMAGE else SITE_IMAGE) RAW_CONTEXT['email_image_per_language'] = { _l: staticImageURL(_url) for _l, _url in EMAIL_IMAGE_PER_LANGUAGE.items() } RAW_CONTEXT['full_email_image'] = u'http{}:{}'.format('' if settings.DEBUG else 's',RAW_CONTEXT['email_image']) if 'http' not in RAW_CONTEXT['email_image'] else RAW_CONTEXT['email_image'] RAW_CONTEXT['full_email_image_per_language'] = { _l: (u'http:{}'.format(_url) if 'http' not in _url else _url) for _l, _url in RAW_CONTEXT['email_image_per_language'].items() } RAW_CONTEXT['translation_help_url'] = TRANSLATION_HELP_URL
RAW_CONTEXT['site_name'] = SITE_NAME RAW_CONTEXT['site_name_per_language'] = SITE_NAME_PER_LANGUAGE RAW_CONTEXT['site_url'] = SITE_URL RAW_CONTEXT['github_repository'] = GITHUB_REPOSITORY RAW_CONTEXT['site_description'] = SITE_DESCRIPTION RAW_CONTEXT['staff_configurations'] = STAFF_CONFIGURATIONS RAW_CONTEXT['get_started_video'] = GET_STARTED_VIDEO RAW_CONTEXT['game_name'] = GAME_NAME RAW_CONTEXT['static_uploaded_files_prefix'] = STATIC_UPLOADED_FILES_PREFIX RAW_CONTEXT['static_url'] = SITE_STATIC_URL + 'static/' RAW_CONTEXT['static_files_version'] = STATIC_FILES_VERSION RAW_CONTEXT['empty_image'] = EMPTY_IMAGE RAW_CONTEXT['full_static_url'] = u'http{}:{}'.format( '' if settings.DEBUG else 's', RAW_CONTEXT['static_url'] ) if 'http' not in RAW_CONTEXT['static_url'] else RAW_CONTEXT['static_url'] RAW_CONTEXT['site_logo'] = staticImageURL(SITE_LOGO) RAW_CONTEXT['full_site_logo'] = u'http{}:{}'.format( '' if settings.DEBUG else 's', RAW_CONTEXT['site_logo'] ) if 'http' not in RAW_CONTEXT['site_logo'] else RAW_CONTEXT['site_logo'] RAW_CONTEXT['site_nav_logo'] = SITE_NAV_LOGO RAW_CONTEXT['disqus_shortname'] = DISQUS_SHORTNAME RAW_CONTEXT['javascript_translated_terms'] = JAVASCRIPT_TRANSLATED_TERMS RAW_CONTEXT['javascript_commons'] = JAVASCRIPT_COMMONS RAW_CONTEXT['site_color'] = COLOR RAW_CONTEXT['site_image'] = staticImageURL(SITE_IMAGE) RAW_CONTEXT['site_image_per_language'] = { _l: staticImageURL(_url) for _l, _url in SITE_IMAGE_PER_LANGUAGE.items() } RAW_CONTEXT['full_site_image'] = u'http{}:{}'.format( '' if settings.DEBUG else 's', RAW_CONTEXT['site_image']
class BaseEventWithVersions(_BaseEvent): ############################################################ # Versions FIELDS_PER_VERSION = ['image', 'start_date', 'end_date'] VERSIONS = versions VERSIONS_CHOICES = [(_name, _info['translation']) for _name, _info in VERSIONS.items()] c_versions = models.TextField( _('Server availability'), blank=True, null=True, default=u'"{}"'.format(versions.keys()[0]), ) ############################################################ # Utils # Pick version automatically @property def relevant_version(self): return getRelevantVersion(item=self) def get_relevant_name(self, return_version=False): return self.get_translated_value_for_relevant_version( 'name', return_version=return_version, default=default_name() if callable(default_name) else default_name, ) relevant_name = property(get_relevant_name) image = property(lambda _s: _s.relevant_image) def get_field_for_relevant_version(self, field_name, default=None, get_value=None, return_version=False, fallback=True): return getFieldForRelevantVersion( self, field_name, default=default, get_value=get_value, return_version=return_version, fallback=fallback, ) def get_translated_value_for_relevant_version(self, field_name, default=None, return_version=False): return getTranslatedValueForRelevantVersion( self, field_name, default=default, return_version=return_version) # Specify version get_name_for_version = lambda _s, _v: _s.get_relevant_translated_value_for_version( 'name', _v) def get_field_for_version(self, field_name, version_name, get_value=None): return getFieldForVersion(self, field_name, version_name, self.VERSIONS[version_name], get_value=get_value) def get_status_for_version(self, version_name): return getEventStatus( self.get_field_for_version('start_date', version_name), self.get_field_for_version('end_date', version_name), ) def get_translated_values_for_version(self, field_name, version_name): return getTranslatedValuesForVersion(self, field_name, self.VERSIONS[version_name]) def get_relevant_translated_value_for_version(self, field_name, version_name, fallback=False, default=None): return getRelevantTranslatedValueForVersion( self, field_name, version_name, self.VERSIONS[version_name], fallback=fallback, default=default, ) ############################################################ # Class utils get_version_name = classmethod( lambda _s, _v: _s.get_version_info(_v, 'translation')) get_version_image = classmethod( lambda _s, _v: staticImageURL(_s.get_version_info(_v, 'image'))) get_version_icon = classmethod( lambda _s, _v: _s.get_version_info(_v, 'icon')) @classmethod def get_field_name_for_version(self, field_name, version_name): return getFieldNameForVersion(field_name, self.VERSIONS[version_name]) @classmethod def get_field_names_all_versions(self, field_name): return [ self.get_field_name_for_version(field_name, version_name) for version_name in self.VERSIONS.keys() ] @classmethod def get_version_languages(self, version_name): return getLanguagesForVersion(self.VERSIONS[version_name]) @classmethod def get_version_info(self, version_name, field_name, default=None): return self.VERSIONS[version_name].get(field_name, default) ############################################################ # Views utils @property def top_image(self): return self.relevant_image_url ############################################################ # Utility method get_{}_for_version for all fields def __getattr__(self, name): if name.startswith('get_') and name.endswith('_for_version'): return lambda version_name: self.get_field_for_version( name[len('get_'):len('_for_version') * -1], version_name, ) elif name.startswith('get_relevant_'): field_name = name[len('get_relevant_'):] default = defaults.get(field_name, None) fallback = fallbacks.get(field_name, True) return lambda _self, return_version=False: _self.get_field_for_relevant_version( field_name, default=default() if callable(default) else default, return_version=return_version, fallback=fallback, ) elif name.startswith('relevant_'): return getattr( self, u'get_relevant_{}'.format(name[len('relevant_'):]))(self) return super(BaseEventWithVersions, self).__getattr__(name) ############################################################ # Unicode def __unicode__(self): return unicode(self.relevant_name or _('Event')) class Meta(MagiModel.Meta): abstract = True
def map(request): context = mapDefaultContext(request) context['share_image'] = staticImageURL('screenshots/map.png') return render(request, 'pages/map.html', context)
RAW_CONTEXT['account_model'] = ACCOUNT_MODEL RAW_CONTEXT['site_name'] = SITE_NAME RAW_CONTEXT['site_name_per_language'] = SITE_NAME_PER_LANGUAGE RAW_CONTEXT['site_url'] = SITE_URL RAW_CONTEXT['github_repository'] = GITHUB_REPOSITORY RAW_CONTEXT['site_description'] = SITE_DESCRIPTION RAW_CONTEXT['staff_configurations'] = STAFF_CONFIGURATIONS RAW_CONTEXT['get_started_video'] = GET_STARTED_VIDEO RAW_CONTEXT['game_name'] = GAME_NAME RAW_CONTEXT['game_name_per_language'] = GAME_NAME_PER_LANGUAGE RAW_CONTEXT['static_uploaded_files_prefix'] = STATIC_UPLOADED_FILES_PREFIX RAW_CONTEXT['static_url'] = SITE_STATIC_URL + 'static/' RAW_CONTEXT['static_files_version'] = STATIC_FILES_VERSION RAW_CONTEXT['empty_image'] = EMPTY_IMAGE RAW_CONTEXT['full_static_url'] = u'http{}:{}'.format('' if settings.DEBUG else 's', RAW_CONTEXT['static_url']) if 'http' not in RAW_CONTEXT['static_url'] else RAW_CONTEXT['static_url'] RAW_CONTEXT['site_logo'] = staticImageURL(SITE_LOGO) RAW_CONTEXT['full_site_logo'] = u'http{}:{}'.format('' if settings.DEBUG else 's',RAW_CONTEXT['site_logo']) if 'http' not in RAW_CONTEXT['site_logo'] else RAW_CONTEXT['site_logo'] RAW_CONTEXT['site_nav_logo'] = SITE_NAV_LOGO RAW_CONTEXT['comments_engine'] = COMMENTS_ENGINE if RAW_CONTEXT['comments_engine'] == 'disqus': RAW_CONTEXT['disqus_shortname'] = DISQUS_SHORTNAME RAW_CONTEXT['max_activity_height'] = MAX_ACTIVITY_HEIGHT RAW_CONTEXT['javascript_translated_terms'] = JAVASCRIPT_TRANSLATED_TERMS RAW_CONTEXT['javascript_commons'] = JAVASCRIPT_COMMONS RAW_CONTEXT['site_color'] = COLOR RAW_CONTEXT['site_image'] = staticImageURL(SITE_IMAGE) RAW_CONTEXT['site_image_per_language'] = { _l: staticImageURL(_url) for _l, _url in SITE_IMAGE_PER_LANGUAGE.items() } RAW_CONTEXT['full_site_image'] = u'http{}:{}'.format('' if settings.DEBUG else 's',RAW_CONTEXT['site_image']) if 'http' not in RAW_CONTEXT['site_image'] else RAW_CONTEXT['site_image'] RAW_CONTEXT['full_site_image_per_language'] = { _l: (u'http:{}'.format(_url) if 'http' not in _url else _url) for _l, _url in RAW_CONTEXT['site_image_per_language'].items() } RAW_CONTEXT['email_image'] = staticImageURL(EMAIL_IMAGE if EMAIL_IMAGE else SITE_IMAGE) RAW_CONTEXT['email_image_per_language'] = { _l: staticImageURL(_url) for _l, _url in EMAIL_IMAGE_PER_LANGUAGE.items() }
def static_image_url(*args, **kwargs): return staticImageURL(**kwargs)
def _view(request, *args, **kwargs): # Check permissions permissions_context = { 'current_url': request.get_full_path() } if page.get('logout_required', False) and request.user.is_authenticated(): raise PermissionDenied() if page.get('authentication_required'): redirectWhenNotAuthenticated(request, permissions_context, next_title=page.get('title', '')) if page.get('staff_required', False): redirectWhenNotAuthenticated(request, permissions_context, next_title=page.get('title', '')) if not request.user.is_staff and not request.user.is_superuser: raise PermissionDenied() if page.get('prelaunch_staff_required', False): redirectWhenNotAuthenticated(request, permissions_context, next_title=page.get('title', '')) if not request.user.hasPermission('access_site_before_launch'): raise PermissionDenied() if page.get('permissions_required', []): redirectWhenNotAuthenticated(request, permissions_context, next_title=page.get('title', '')) if not hasPermissions(request.user, page['permissions_required']): raise PermissionDenied() if page.get('one_of_permissions_required', []): redirectWhenNotAuthenticated(request, permissions_context, next_title=page.get('title', '')) if not hasOneOfPermissions(request.user, page['one_of_permissions_required']): raise PermissionDenied() if boilerplate: # Context context = getGlobalContext(request=request) context['extends'] = 'base.html' if not context['ajax'] else 'ajax.html' context['disqus_identifier'] = context['current'] # Settings from page context['show_small_title'] = page.get('show_small_title', True) context['show_title'] = page.get('show_title', False) context['share_image'] = staticImageURL(page.get('share_image', None)) context['page_description'] = page.get('page_description', None) context['comments_enabled'] = page.get('comments_enabled', False) context['template'] = page.get('template', name) # Set title and prefixes context['title_prefixes'] = [] if 'navbar_link_list' in page: getNavbarPrefix(page['navbar_link_list'], request, context, append_to=context['title_prefixes']) default_page_title = page.get('title', None) if callable(default_page_title): default_page_title = default_page_title(context) h1 = { 'title': default_page_title, 'icon': page.get('icon', None), 'image': page.get('image', None), } h1ToContext(h1, context) context['page_title'] = pageTitleFromPrefixes(context['title_prefixes'], default_page_title) # Call function if function: result = function(request, context, *args, **kwargs) # Render with full template if page.get('full_template', False): return render(request, u'pages/{}.html'.format( name if page['full_template'] == True else page['full_template']), context) # Render with boilerplate if page.get('as_json', False): if result is None: return HttpResponse('') return JsonResponse(result) elif page.get('as_form', False): return render(request, 'form.html', context) elif page.get('as_sidebar', False): context['sidebar_show_title'] = True context['sidebar_template'] = 'include/{}.html'.format( page.get('sidebar_template', '{}_sidebar'.format(name))) context['template'] = 'pages/{}.html'.format(context['template']) return render(request, 'sidebar.html', context) return render(request, 'pages/boilerplate.html', context) else: # Render expected to be called by function return function(request, *args, **kwargs)
def getSchoolImageFromPk(pk): return django_settings.SCHOOLS[int(pk)]['image'] or staticImageURL('default/default_school.png')
def to_fields(self, item, order=None, extra_fields=None, exclude_fields=None, *args, **kwargs): if extra_fields is None: extra_fields = [] if exclude_fields is None: exclude_fields = [] if order is None: order = [] values = u' ' for fieldName, verbose_name in models.Song.SONGWRITERS: value = getattr(item, fieldName) exclude_fields.append(fieldName) if value: values+=u'<b>{}:</b> {}<br />'.format(verbose_name, value) if values and values is not u' ': extra_fields.append(('songwriters', { 'verbose_name': _('Songwriters'), 'type': 'html', 'value': mark_safe(u'<div class="songwriters-details">{}</div>'.format(values)), 'icon': 'id', })) status = getattr(item, 'status') if status and status != 'ended': start_date = getattr(item, 'b_side_start') end_date = getattr(item, 'b_side_end') if item.b_side_master is True: verbose = string_concat(_('B-Side'), ' - ', _('Countdown'), ' (MASTER)') else: verbose = string_concat(_('B-Side'), ' - ', _('Countdown')) extra_fields += [ ('countdown', { 'verbose_name': verbose, 'value': mark_safe(u'<span class="fontx1-5 countdown" data-date="{date}" data-format="{sentence}"></h4>').format( date=torfc2822(end_date if status == 'current' else start_date), sentence=_('{time} left') if status == 'current' else _('Starts in {time}'), ), 'icon': 'hourglass', 'type': 'html', }), ] else: exclude_fields.append('b_side_start') exclude_fields.append('b_side_end') available = getattr(item, 'available') if available == True: av_value = True else: av_value = False extra_fields += [ ('availability', { 'verbose_name': _('Currently available'), 'value': av_value, 'icon': 'help', 'type': 'bool', }), ] for difficulty, d_verbose in models.Song.DIFFICULTIES: difficulties = u' ' difficultystar = u'{}_difficulty'.format(difficulty) difficultynote = u'{}_notes'.format(difficulty) difficultystars = getattr(item, difficultystar) difficultynotes = getattr(item, difficultynote) temps = u'{} ☆ rating'.format(difficultystars) tempn = u'{} notes'.format(difficultynotes) if difficultystars: if difficultynotes: difficulties += u'{}<br />{}'.format(temps, tempn) if difficulty is 'master' and item.master_swipe is True: difficulties += u'<br />{}'.format(_('with SWIPE notes')) else: difficulties += u'{}'.format(temps) elif difficultynotes: difficulties += u'{}'.format(tempn) if difficulty is 'master' and item.master_swipe is True: difficulties += u'<br />{}'.format(_('with SWIPE notes')) if difficulties is not u' ': extra_fields.append((difficulty, { 'verbose_name': d_verbose, 'type': 'html', 'value': difficulties, })) exclude_fields.append(difficulty) exclude_fields.append(difficultynote) exclude_fields.append(difficultystar) exclude_fields.append('title') exclude_fields.append('romaji') exclude_fields.append('cover') exclude_fields.append('i_attribute') exclude_fields.append('i_unit') exclude_fields.append('i_subunit') exclude_fields.append('c_locations') exclude_fields.append('b_side_master') exclude_fields.append('master_swipe') order = ['itunes_id', 'length', 'bpm', 'c_versions', 'availability', 'unlock', 'daily', 'countdown', 'b_side_start', 'b_side_end', 'easy', 'normal', 'hard', 'expert', 'master', 'songwriters', 'release'] + order fields = super(SongCollection.ItemView, self).to_fields( item, *args, order=order, extra_fields=extra_fields, exclude_fields=exclude_fields, **kwargs) if item.romaji and item.romaji != item.title: setSubField(fields, 'title', key='type', value='title_text') setSubField(fields, 'title', key='title', value=item.title) setSubField(fields, 'title', key='value', value=item.romaji) setSubField(fields, 'unlock', key='type', value='text') setSubField(fields, 'unlock', key='value', value=u'Rank {}'.format(item.unlock)) setSubField(fields, 'easy', key='image', value=staticImageURL('easy', folder='difficulty', extension='png')) setSubField(fields, 'normal', key='image', value=staticImageURL('normal', folder='difficulty', extension='png')) setSubField(fields, 'hard', key='image', value=staticImageURL('hard', folder='difficulty', extension='png')) setSubField(fields, 'expert', key='image', value=staticImageURL('expert', folder='difficulty', extension='png')) setSubField(fields, 'master', key='image', value=staticImageURL('master', folder='difficulty', extension='png')) return fields
class SongCollection(MagiCollection): queryset = models.Song.objects.all() title = _('Song') plural_title = _('Songs') multipart = True form_class = forms.SongForm reportable = False blockable = False translated_fields = ('title', ) icon = 'song' navbar_link_list = 'lovelive' _version_images = { _k: _v['image'] for _k, _v in models.Account.VERSIONS.items() } _version_prefixes = { _k: _v['prefix'] for _k, _v in models.Account.VERSIONS.items() } _location_to_cuteform = { 'hits': 'deck', 'daily': 'trade', 'bside': 'times', } filter_cuteform = { 'i_attribute': { }, 'i_unit': { }, 'i_subunit': { 'image_folder': 'i_subunit', 'title': _('Subunit'), 'extra_settings': { 'modal': 'true', 'modal-text': 'true', }, }, 'version': { 'to_cuteform': lambda k, v: SongCollection._version_images[k], 'image_folder': 'language', 'transform': CuteFormTransform.ImagePath, }, 'available': { 'type': CuteFormType.YesNo, }, 'location': { 'transform': CuteFormTransform.Flaticon, 'to_cuteform': lambda k, v: SongCollection._location_to_cuteform[k], }, 'sub_unit': { 'to_cuteform': lambda k, v: ( staticImageURL(k, folder='i_unit', extension='png') if float(k) - 2 < 0 else staticImageURL(int(k) - 2, folder='i_subunit', extension='png') ), 'title': _('Unit'), 'extra_settings': { 'modal': 'true', 'modal-text': 'true', }, }, } def to_fields(self, view, item, *args, **kwargs): fields = super(SongCollection, self).to_fields(view, item, *args, icons=SONGS_ICONS, images={ 'attribute': staticImageURL(item.i_attribute, folder='i_attribute', extension='png'), 'unit': staticImageURL(item.i_unit, folder='i_unit', extension='png'), 'subunit': staticImageURL(item.i_subunit, folder='i_subunit', extension='png'), }, **kwargs) setSubField(fields, 'b_side_start', key='timezones', value=['Asia/Tokyo', 'Local time']) setSubField(fields, 'b_side_end', key='timezones', value=['Asia/Tokyo', 'Local time']) setSubField(fields, 'release', key='timezones', value=['Asia/Tokyo', 'Local time']) setSubField(fields, 'length', key='value', value=lambda f: item.length_in_minutes) return fields class ItemView(MagiCollection.ItemView): top_illustration = 'include/topSongItem' def to_fields(self, item, order=None, extra_fields=None, exclude_fields=None, *args, **kwargs): if extra_fields is None: extra_fields = [] if exclude_fields is None: exclude_fields = [] if order is None: order = [] values = u' ' for fieldName, verbose_name in models.Song.SONGWRITERS: value = getattr(item, fieldName) exclude_fields.append(fieldName) if value: values+=u'<b>{}:</b> {}<br />'.format(verbose_name, value) if values and values is not u' ': extra_fields.append(('songwriters', { 'verbose_name': _('Songwriters'), 'type': 'html', 'value': mark_safe(u'<div class="songwriters-details">{}</div>'.format(values)), 'icon': 'id', })) status = getattr(item, 'status') if status and status != 'ended': start_date = getattr(item, 'b_side_start') end_date = getattr(item, 'b_side_end') if item.b_side_master is True: verbose = string_concat(_('B-Side'), ' - ', _('Countdown'), ' (MASTER)') else: verbose = string_concat(_('B-Side'), ' - ', _('Countdown')) extra_fields += [ ('countdown', { 'verbose_name': verbose, 'value': mark_safe(u'<span class="fontx1-5 countdown" data-date="{date}" data-format="{sentence}"></h4>').format( date=torfc2822(end_date if status == 'current' else start_date), sentence=_('{time} left') if status == 'current' else _('Starts in {time}'), ), 'icon': 'hourglass', 'type': 'html', }), ] else: exclude_fields.append('b_side_start') exclude_fields.append('b_side_end') available = getattr(item, 'available') if available == True: av_value = True else: av_value = False extra_fields += [ ('availability', { 'verbose_name': _('Currently available'), 'value': av_value, 'icon': 'help', 'type': 'bool', }), ] for difficulty, d_verbose in models.Song.DIFFICULTIES: difficulties = u' ' difficultystar = u'{}_difficulty'.format(difficulty) difficultynote = u'{}_notes'.format(difficulty) difficultystars = getattr(item, difficultystar) difficultynotes = getattr(item, difficultynote) temps = u'{} ☆ rating'.format(difficultystars) tempn = u'{} notes'.format(difficultynotes) if difficultystars: if difficultynotes: difficulties += u'{}<br />{}'.format(temps, tempn) if difficulty is 'master' and item.master_swipe is True: difficulties += u'<br />{}'.format(_('with SWIPE notes')) else: difficulties += u'{}'.format(temps) elif difficultynotes: difficulties += u'{}'.format(tempn) if difficulty is 'master' and item.master_swipe is True: difficulties += u'<br />{}'.format(_('with SWIPE notes')) if difficulties is not u' ': extra_fields.append((difficulty, { 'verbose_name': d_verbose, 'type': 'html', 'value': difficulties, })) exclude_fields.append(difficulty) exclude_fields.append(difficultynote) exclude_fields.append(difficultystar) exclude_fields.append('title') exclude_fields.append('romaji') exclude_fields.append('cover') exclude_fields.append('i_attribute') exclude_fields.append('i_unit') exclude_fields.append('i_subunit') exclude_fields.append('c_locations') exclude_fields.append('b_side_master') exclude_fields.append('master_swipe') order = ['itunes_id', 'length', 'bpm', 'c_versions', 'availability', 'unlock', 'daily', 'countdown', 'b_side_start', 'b_side_end', 'easy', 'normal', 'hard', 'expert', 'master', 'songwriters', 'release'] + order fields = super(SongCollection.ItemView, self).to_fields( item, *args, order=order, extra_fields=extra_fields, exclude_fields=exclude_fields, **kwargs) if item.romaji and item.romaji != item.title: setSubField(fields, 'title', key='type', value='title_text') setSubField(fields, 'title', key='title', value=item.title) setSubField(fields, 'title', key='value', value=item.romaji) setSubField(fields, 'unlock', key='type', value='text') setSubField(fields, 'unlock', key='value', value=u'Rank {}'.format(item.unlock)) setSubField(fields, 'easy', key='image', value=staticImageURL('easy', folder='difficulty', extension='png')) setSubField(fields, 'normal', key='image', value=staticImageURL('normal', folder='difficulty', extension='png')) setSubField(fields, 'hard', key='image', value=staticImageURL('hard', folder='difficulty', extension='png')) setSubField(fields, 'expert', key='image', value=staticImageURL('expert', folder='difficulty', extension='png')) setSubField(fields, 'master', key='image', value=staticImageURL('master', folder='difficulty', extension='png')) return fields def _modification_extra_context(self, context): if 'js_variables' not in context: context['js_variables'] = {} context['js_variables']['version_prefixes'] = jsv(self._version_prefixes) class ListView(MagiCollection.ListView): filter_form = forms.SongFilterForm item_template = custom_item_template per_line = 4 default_ordering = '-release' ajax_pagination_callback = 'loadSongs' def extra_context(self, context): super(SongCollection.ListView, self).extra_context(context) self.collection._modification_extra_context(context) class AddView(MagiCollection.AddView): staff_required = True permissions_required = ['manage_main_items'] ajax_callback = 'loadSongs' def extra_context(self, context): super(SongCollection.AddView, self).extra_context(context) self.collection._modification_extra_context(context) class EditView(MagiCollection.EditView): staff_required = True permissions_required = ['manage_main_items'] ajax_callback = 'loadSongs' allow_delete = True def extra_context(self, context): super(SongCollection.EditView, self).extra_context(context) self.collection._modification_extra_context(context)
} IDOL_ORDER = [ 'image', 'name', 'japanese_name', 'attribute', 'unit', 'subunit', 'school', 'year', 'astrological_sign', 'birthday', 'age', 'blood', 'measurements', 'color', 'hobbies', 'favorite_food', 'least_favorite_food', 'description', ] IDOLS_CUTEFORM = { 'i_unit': { }, 'i_subunit': { }, 'sub_unit': { 'to_cuteform': lambda k, v: ( staticImageURL(k, folder='i_unit', extension='png') if float(k) - 2 < 0 else staticImageURL(int(k) - 2, folder='i_subunit', extension='png') ), 'title': _('Unit'), 'extra_settings': { 'modal': 'true', 'modal-text': 'true', }, }, 'i_attribute': { }, 'i_year': { 'type': CuteFormType.HTML, }, 'i_astrological_sign': { },