from django.utils.translation import gettext as _ import mycreole import pygal from themes import color_icon_url # TODO: Add field descriptions including the filed list choices, if field has a list of limited values (e.g. flash: "fired", ...) # TODO: Describe logic operator order and brackets if possible # TODO: Expend Examples for pictures without flash and high f_number to get potentially good quality images. HELP_UID = 'help' MAIN = mycreole.render_simple(_(""" = PyGal **PyGal** is a File **Gal**ery visulisation tool implementes in **Py**thon. It is designed to visualise images and videos. Nevertheless it is also possible to \ visualise audio files and all other files. == Help * [[faq|Frequently asked questions]] * [[access|Access Conrtrol]] * [[search|Help on Search]] """)) FAQ = mycreole.render_simple(_(""" = Frequently asked questions ==Repeat-Mode On Problems with the Repeat-Mode, please check your Browser \ [[https://www.google.com/search?q=autoplay+enable+browser|properties]] \ for autoplay restrictions! """)) ACCESS = mycreole.render_simple(_(""" = Access control Access Control is defined on folder level. The rights given for a folder \ are the rights for all items in that folder. The folder itself has no access \ restrictions. The content of a folder is defined by the accessable items \ recursive below that folder. **Example:** If a user has only read access to the folder "bar" below the folder "foo", \ but not to "foo", he will see the folder "bar" inside the folder "foo" and all items in \ "foo/bar", but not the items in the folder "foo". """)) SEARCH = mycreole.render_simple(_(""" = Search The search looks up full words in //Itemnames (name)// and //Tags (tag)// without giving \ special search commands in the search string. == Search-Fields The useful search fields depend on the item type. Therefore some fields are given twice or \ more in the different type depending lists. === General search fields * rel_path (TEXT): * name (TEXT): * type (TEXT): * favourite_of (KEYWORD): * datetime (DATETIME): * size (NUMERIC): * tag (KEYWORD): === Image * exposure_program (TEXT): * exposure_time (NUMERIC): * flash (TEXT): * f_number (NUMERIC): * focal_length (NUMERIC): * lon (NUMERIC): * lat (NUMERIC): * height (NUMERIC): * iso (NUMERIC): * camera (TEXT): * orientation (NUMERIC): * width (NUMERIC): === Audio * album (TEXT): * artist (TEXT): * bitrate (NUMERIC): * duration (NUMERIC): * genre (TEXT): * title (TEXT): * track (NUMERIC): * year (NUMERIC): === Video * ratio (NUMERIC): == Search syntax (Whoosh) === Logic operators * AND ** **Example:** "foo AND bar" - Search will find all items with foo and bar. * OR ** **Example:** "foo OR bar" - Search will find all items with foo, bar or with foo and bar. * NOT ** **Example:** "foo NOT bar" - Search will find all items with foo and no bar. === Search in specific fields A search pattern like //foo:bar// does look for //bar// in the field named //foo//. This search pattern can also be combined with other search text via logical operators. === Search for specific content * **Wildcards:** * **Range:** ** From To: ** Above: ** Below: * **Named constants:** ** //now//: Current date ** //-[num]y//: Current date minus [num] years ** ... == Examples * [[/pygal/userview/search?q=type:video AND datetime:2018|type:video AND datetime:2018]] gives results with all videos in year 2018. * [[/pygal/userview/search?q=datetime:[-2y to now]|datetime:[-2y to now]]] gives results with all item of the last two years. * [[/pygal/userview/search?q=rel_path:2018*|rel_path:2018*]] gives results with all item having 2018 in their path. * [[/pygal/userview/search?q=tag:Test|tag:Test]] gives results with all item having Test in their tags. * [[/pygal/userview/search?q=datetime:2016 AND favourite_of:*|datetime:2016 AND favourite_of:*]] gives results with all item having 2018 in their tags or path and are favourite of someone. """)) help_pages = { 'main': MAIN, 'faq': FAQ, 'access': ACCESS, 'search': SEARCH, } def actionbar(context, request, current_help_page=None, **kwargs): actionbar_entries = ( ('1', 'Main'), ('2', 'Faq'), ('3', 'Access'), ('4', 'Search'), ) for num, name in actionbar_entries: context[context.ACTIONBAR].append_entry( HELP_UID + '-%s' % name.lower(), # uid _(name), # name color_icon_url(request, num + '.png'), # icon pygal.url_helpview(request, name.lower()), # url True, # left name.lower() == current_help_page, # active )