XBlock to embed video content using iframe along with download buttons
######################################################################
Usage
*****
1. Go to `Settings -> Advanced Settings` in a specific course within Studio.
2. Add `"video_iframe"` to `Advanced Module List` and save.
3. Add `Advanced -> Video Iframe` unit to the course.
4. Add a valid URL to the `Video URL` field and optionally add `Video Description`, `Video Download URL` and `Captions Download URL` and/or modify `Video Title`.
Testing with Docker
********************
This XBlock comes with a Docker test environment ready to build, based on the xblock-sdk workbench. To build and run it::
$ make dev.run
The XBlock SDK Workbench, including this XBlock, will be available on the list of XBlocks at http://localhost:8000
Translating
*************
Internationalization (i18n) is when a program is made aware of multiple languages.
Localization (l10n) is adapting a program to local language and cultural habits.
Use the locale directory to provide internationalized strings for your XBlock project.
For more information on how to enable translations, visit the
`Open edX XBlock tutorial on Internationalization <https://edx.readthedocs.org/projects/xblock-tutorial/en/latest/edx_platform/edx_lms.html>`_.
This cookiecutter template uses `django-statici18n <https://django-statici18n.readthedocs.io/en/latest/>`_
to provide translations to static javascript using ``gettext``.
The included Makefile contains targets for extracting, compiling and validating translatable strings.
The general steps to provide multilingual messages for a Python program (or an XBlock) are:
1. Mark translatable strings.
2. Run i18n tools to create raw message catalogs.
3. Create language specific translations for each message in the catalogs.
4. Use ``gettext`` to translate strings.
1. Mark translatable strings
=============================
Mark translatable strings in python::
from django.utils.translation import ugettext as _
# Translators: This comment will appear in the `.po` file.
message = _("This will be marked.")
See `edx-developer-guide <https://edx.readthedocs.io/projects/edx-developer-guide/en/latest/internationalization/i18n.html#python-source-code>`__
for more information.
You can also use ``gettext`` to mark strings in javascript::
// Translators: This comment will appear in the `.po` file.
var message = gettext("Custom message.");
See `edx-developer-guide <https://edx.readthedocs.io/projects/edx-developer-guide/en/latest/internationalization/i18n.html#javascript-files>`__
for more information.
2. Run i18n tools to create Raw message catalogs
=================================================
This cookiecutter template offers multiple make targets which are shortcuts to
use `edx-i18n-tools <https://github.com/openedx/i18n-tools>`_.
After marking strings as translatable we have to create the raw message catalogs.
These catalogs are created in ``.po`` files. For more information see
`GNU PO file documentation <https://www.gnu.org/software/gettext/manual/html_node/PO-Files.html>`_.
These catalogs can be created by running::
$ make extract_translations
The previous command will create the necessary ``.po`` files under
``xblock-video-iframe/video_iframe/conf/locale/en/LC_MESSAGES/text.po``.
The ``text.po`` file is created from the ``django-partial.po`` file created by
``django-admin makemessages`` (`makemessages documentation <https://docs.djangoproject.com/en/3.2/topics/i18n/translation/#message-files>`_),
this is why you will not see a ``django-partial.po`` file.
3. Create language specific translations
==============================================
3.1 Add translated strings
---------------------------
After creating the raw message catalogs, all translations should be filled out by the translator.
One or more translators must edit the entries created in the message catalog, i.e. the ``.po`` file(s).
The format of each entry is as follows::
# translator-comments
A. extracted-comments
#: reference…
#, flag…
#| msgid previous-untranslated-string
msgid 'untranslated message'
msgstr 'mensaje traducido (translated message)'
For more information see
`GNU PO file documentation <https://www.gnu.org/software/gettext/manual/html_node/PO-Files.html>`_.
To use translations from transifex use the follow Make target to pull translations::
$ make pull_translations
See `config instructions <https://github.com/openedx/i18n-tools#transifex-commands>`_ for information on how to set up your
transifex credentials.
See `transifex documentation <https://docs.transifex.com/integrations/django>`_ for more details about integrating
django with transiflex.
3.2 Compile translations
-------------------------
Once translations are in place, use the following Make target to compile the translation catalogs ``.po`` into
``.mo`` message files::
$ make compile_translations
The previous command will compile ``.po`` files using
``django-admin compilemessages`` (`compilemessages documentation <https://docs.djangoproject.com/en/3.2/topics/i18n/translation/#compiling-message-files>`_).
After compiling the ``.po`` file(s), ``django-statici18n`` is used to create language specific catalogs. See
``django-statici18n`` `documentation <https://django-statici18n.readthedocs.io/en/latest/>`_ for more information.
To upload translations to transiflex use the follow Make target::
$ make push_translations
See `config instructions <https://github.com/openedx/i18n-tools#transifex-commands>`_ for information on how to set up your
transifex credentials.
See `transifex documentation <https://docs.transifex.com/integrations/django>`_ for more details about integrating
django with transiflex.
**Note:** The ``dev.run`` make target will automatically compile any translations.
**Note:** To check if the source translation files (``.po``) are up-to-date run::
$ make detect_changed_source_translations
4. Use ``gettext`` to translate strings
========================================
Django will automatically use ``gettext`` and the compiled translations to translate strings.
Troubleshooting
****************
If there are any errors compiling ``.po`` files run the following command to validate your ``.po`` files::
$ make validate
See `django's i18n troubleshooting documentation
<https://docs.djangoproject.com/en/3.2/topics/i18n/translation/#troubleshooting-gettext-incorrectly-detects-python-format-in-strings-with-percent-signs>`_
for more information.
Change Log
##########
..
All enhancements and patches to video_iframe will be documented
in this file. It adheres to the structure of https://keepachangelog.com/ ,
but in reStructuredText instead of Markdown (for ease of incorporation into
Sphinx documentation and the PyPI description).
This project adheres to Semantic Versioning (https://semver.org/).
.. There should always be an "Unreleased" section for changes pending release.
Unreleased
**********
*
1.0.0 – 2024-06-18
**********************************************
Added
=====
* Author view to display custom message with instructions if no video url is detected. Also disable validations for author view to supress default validation failure messages.
Removed
=======
* `autoplay` from allow attribute passed to the iframe.
Changed
=======
* Title of `display_name` field to `Video Title` and modified the description.
* Default display name of the XBlock as displayed in the Advanced XBlocks selection list from `Video` to `Video Iframe`.
0.1.0 – 2024-04-28
**********************************************
Added
=====
* First iteration of XBlock.
Raw data
{
"_id": null,
"home_page": "https://github.com/open-craft/xblock-video-iframe",
"name": "xblock-video-iframe",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "Python edx",
"author": "OpenCraft",
"author_email": "help@opencraft.com",
"download_url": "https://files.pythonhosted.org/packages/84/cc/b018cd0a21919a6d66b724cd6b005524c1ba057a5bd0cdf07c86266d885f/xblock_video_iframe-1.0.0.tar.gz",
"platform": null,
"description": "XBlock to embed video content using iframe along with download buttons\n######################################################################\n\n\nUsage\n*****\n\n1. Go to `Settings -> Advanced Settings` in a specific course within Studio.\n2. Add `\"video_iframe\"` to `Advanced Module List` and save.\n3. Add `Advanced -> Video Iframe` unit to the course.\n4. Add a valid URL to the `Video URL` field and optionally add `Video Description`, `Video Download URL` and `Captions Download URL` and/or modify `Video Title`.\n\n\nTesting with Docker\n********************\n\nThis XBlock comes with a Docker test environment ready to build, based on the xblock-sdk workbench. To build and run it::\n\n $ make dev.run\n\nThe XBlock SDK Workbench, including this XBlock, will be available on the list of XBlocks at http://localhost:8000\n\nTranslating\n*************\n\nInternationalization (i18n) is when a program is made aware of multiple languages.\nLocalization (l10n) is adapting a program to local language and cultural habits.\n\nUse the locale directory to provide internationalized strings for your XBlock project.\nFor more information on how to enable translations, visit the\n`Open edX XBlock tutorial on Internationalization <https://edx.readthedocs.org/projects/xblock-tutorial/en/latest/edx_platform/edx_lms.html>`_.\n\nThis cookiecutter template uses `django-statici18n <https://django-statici18n.readthedocs.io/en/latest/>`_\nto provide translations to static javascript using ``gettext``.\n\nThe included Makefile contains targets for extracting, compiling and validating translatable strings.\nThe general steps to provide multilingual messages for a Python program (or an XBlock) are:\n\n1. Mark translatable strings.\n2. Run i18n tools to create raw message catalogs.\n3. Create language specific translations for each message in the catalogs.\n4. Use ``gettext`` to translate strings.\n\n1. Mark translatable strings\n=============================\n\nMark translatable strings in python::\n\n\n from django.utils.translation import ugettext as _\n\n # Translators: This comment will appear in the `.po` file.\n message = _(\"This will be marked.\")\n\nSee `edx-developer-guide <https://edx.readthedocs.io/projects/edx-developer-guide/en/latest/internationalization/i18n.html#python-source-code>`__\nfor more information.\n\nYou can also use ``gettext`` to mark strings in javascript::\n\n\n // Translators: This comment will appear in the `.po` file.\n var message = gettext(\"Custom message.\");\n\nSee `edx-developer-guide <https://edx.readthedocs.io/projects/edx-developer-guide/en/latest/internationalization/i18n.html#javascript-files>`__\nfor more information.\n\n2. Run i18n tools to create Raw message catalogs\n=================================================\n\nThis cookiecutter template offers multiple make targets which are shortcuts to\nuse `edx-i18n-tools <https://github.com/openedx/i18n-tools>`_.\n\nAfter marking strings as translatable we have to create the raw message catalogs.\nThese catalogs are created in ``.po`` files. For more information see\n`GNU PO file documentation <https://www.gnu.org/software/gettext/manual/html_node/PO-Files.html>`_.\nThese catalogs can be created by running::\n\n\n $ make extract_translations\n\nThe previous command will create the necessary ``.po`` files under\n``xblock-video-iframe/video_iframe/conf/locale/en/LC_MESSAGES/text.po``.\nThe ``text.po`` file is created from the ``django-partial.po`` file created by\n``django-admin makemessages`` (`makemessages documentation <https://docs.djangoproject.com/en/3.2/topics/i18n/translation/#message-files>`_),\nthis is why you will not see a ``django-partial.po`` file.\n\n3. Create language specific translations\n==============================================\n\n3.1 Add translated strings\n---------------------------\n\nAfter creating the raw message catalogs, all translations should be filled out by the translator.\nOne or more translators must edit the entries created in the message catalog, i.e. the ``.po`` file(s).\nThe format of each entry is as follows::\n\n # translator-comments\n A. extracted-comments\n #: reference\u2026\n #, flag\u2026\n #| msgid previous-untranslated-string\n msgid 'untranslated message'\n msgstr 'mensaje traducido (translated message)'\n\nFor more information see\n`GNU PO file documentation <https://www.gnu.org/software/gettext/manual/html_node/PO-Files.html>`_.\n\nTo use translations from transifex use the follow Make target to pull translations::\n\n $ make pull_translations\n\nSee `config instructions <https://github.com/openedx/i18n-tools#transifex-commands>`_ for information on how to set up your\ntransifex credentials.\n\nSee `transifex documentation <https://docs.transifex.com/integrations/django>`_ for more details about integrating\ndjango with transiflex.\n\n3.2 Compile translations\n-------------------------\n\nOnce translations are in place, use the following Make target to compile the translation catalogs ``.po`` into\n``.mo`` message files::\n\n $ make compile_translations\n\nThe previous command will compile ``.po`` files using\n``django-admin compilemessages`` (`compilemessages documentation <https://docs.djangoproject.com/en/3.2/topics/i18n/translation/#compiling-message-files>`_).\nAfter compiling the ``.po`` file(s), ``django-statici18n`` is used to create language specific catalogs. See\n``django-statici18n`` `documentation <https://django-statici18n.readthedocs.io/en/latest/>`_ for more information.\n\nTo upload translations to transiflex use the follow Make target::\n\n $ make push_translations\n\nSee `config instructions <https://github.com/openedx/i18n-tools#transifex-commands>`_ for information on how to set up your\ntransifex credentials.\n\nSee `transifex documentation <https://docs.transifex.com/integrations/django>`_ for more details about integrating\ndjango with transiflex.\n\n **Note:** The ``dev.run`` make target will automatically compile any translations.\n\n **Note:** To check if the source translation files (``.po``) are up-to-date run::\n\n $ make detect_changed_source_translations\n\n4. Use ``gettext`` to translate strings\n========================================\n\nDjango will automatically use ``gettext`` and the compiled translations to translate strings.\n\nTroubleshooting\n****************\n\nIf there are any errors compiling ``.po`` files run the following command to validate your ``.po`` files::\n\n $ make validate\n\nSee `django's i18n troubleshooting documentation\n<https://docs.djangoproject.com/en/3.2/topics/i18n/translation/#troubleshooting-gettext-incorrectly-detects-python-format-in-strings-with-percent-signs>`_\nfor more information.\n\n\nChange Log\n##########\n\n..\n All enhancements and patches to video_iframe will be documented\n in this file. It adheres to the structure of https://keepachangelog.com/ ,\n but in reStructuredText instead of Markdown (for ease of incorporation into\n Sphinx documentation and the PyPI description).\n\n This project adheres to Semantic Versioning (https://semver.org/).\n\n.. There should always be an \"Unreleased\" section for changes pending release.\n\nUnreleased\n**********\n\n* \n\n1.0.0 \u2013 2024-06-18\n**********************************************\n\nAdded\n=====\n\n* Author view to display custom message with instructions if no video url is detected. Also disable validations for author view to supress default validation failure messages.\n\nRemoved\n=======\n\n* `autoplay` from allow attribute passed to the iframe.\n\nChanged\n=======\n\n* Title of `display_name` field to `Video Title` and modified the description.\n* Default display name of the XBlock as displayed in the Advanced XBlocks selection list from `Video` to `Video Iframe`.\n\n\n0.1.0 \u2013 2024-04-28\n**********************************************\n\nAdded\n=====\n\n* First iteration of XBlock.\n",
"bugtrack_url": null,
"license": "AGPL 3.0",
"summary": "XBlock to embed video content using iframe along with download buttons",
"version": "1.0.0",
"project_urls": {
"Homepage": "https://github.com/open-craft/xblock-video-iframe"
},
"split_keywords": [
"python",
"edx"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "38e944ad172e0e35204e76ecf799c89cf2a652fb23755a4cb97bde7f6a3d0d2c",
"md5": "8b151df8f3c38428c0e6f931584edeb2",
"sha256": "2d1929f6f7549aad2391f88ca8ccac31fb6cc7a1f7912ff9e9d84f4bbe68aeb3"
},
"downloads": -1,
"filename": "xblock_video_iframe-1.0.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "8b151df8f3c38428c0e6f931584edeb2",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": ">=3.8",
"size": 21513,
"upload_time": "2024-06-18T05:05:05",
"upload_time_iso_8601": "2024-06-18T05:05:05.647548Z",
"url": "https://files.pythonhosted.org/packages/38/e9/44ad172e0e35204e76ecf799c89cf2a652fb23755a4cb97bde7f6a3d0d2c/xblock_video_iframe-1.0.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "84ccb018cd0a21919a6d66b724cd6b005524c1ba057a5bd0cdf07c86266d885f",
"md5": "eb9578e396480663c4a8e204ea0c09f0",
"sha256": "8ddfffbb71ef3dbafef19f95f5bea051d272db5dd07119c9405f4df444c3605e"
},
"downloads": -1,
"filename": "xblock_video_iframe-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "eb9578e396480663c4a8e204ea0c09f0",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 26521,
"upload_time": "2024-06-18T05:05:11",
"upload_time_iso_8601": "2024-06-18T05:05:11.160280Z",
"url": "https://files.pythonhosted.org/packages/84/cc/b018cd0a21919a6d66b724cd6b005524c1ba057a5bd0cdf07c86266d885f/xblock_video_iframe-1.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-06-18 05:05:11",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "open-craft",
"github_project": "xblock-video-iframe",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"tox": true,
"lcname": "xblock-video-iframe"
}