diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..06339c5 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,39 @@ +# Ensure the test course and libraries can be imported. + +name: CI + +on: + pull_request: + branches: ["master"] + push: + branches: ["master"] + +jobs: + + source_and_tars_match: + runs-on: ubuntu-latest + steps: + - name: Check out this repo + uses: actions/checkout@v2 + + - name: Unpack tars + run: make unpack + + - name: Confirm that unpacked tars match source + run: | + git update-index --refresh && git diff-index HEAD -- && { + echo -e "\033[1;32m=============================================================================\033[0m" + echo -e "\033[1;32mUnpacked .tar.gz files do match source XML, all is well.\033[0m" + echo -e "\033[1;32m=============================================================================\033[0m" + exit 0 + } || { + echo -e "\033[1;31m=============================================================================\033[0m" + echo -e "\033[1;31mERROR: Unpacked .tar.gz files do not match source XML! See differences below.\033[0m" + echo -e "\033[0;31mYou can fix this by either:\033[0m" + echo -e "\033[0;31m * updating the source using the tars (run: make unpack), or\033[0m" + echo -e "\033[0;31m * updating the tars using the source (run: make dist).\033[0m" + echo -e "\033[1;31m=============================================================================\033[0m" + git diff + exit 1 + } + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2d1e60a --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.DS_Store +.DS_Store? +.ehthumbs.db +Icon? +Thumbs.db +._* diff --git a/AGPL_LICENSE b/AGPL_LICENSE deleted file mode 100644 index dba13ed..0000000 --- a/AGPL_LICENSE +++ /dev/null @@ -1,661 +0,0 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0ad25db --- /dev/null +++ b/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5aae5a2 --- /dev/null +++ b/Makefile @@ -0,0 +1,40 @@ +.PHONY: clean dist help import unpack + +REPO_NAME=openedx-demo-course + +COURSE=demo-course +COURSE_TAR=dist/$(COURSE).tar.gz +LIBRARY=demo-content-library +LIBRARY_TAR=dist/$(LIBRARY).tar.gz + +TUTOR:=tutor +TUTOR_CONTEXT:=local +LIBRARY_IMPORT_USER:=admin + +help: ## Display this help message. + @echo "Please use \`make ' where is one of" + @grep '^[a-zA-Z]' $(MAKEFILE_LIST) | sort | awk -F ':.*?## ' 'NF==2 {printf "\033[36m %-25s\033[0m %s\n", $$1, $$2}' + +clean: ## Delete all generated course and library exports. + rm -f $(COURSE_TAR) $(LIBRARY_TAR) + +dist: clean ## Create/overwrite exports in ./dist/ folder for course and libary. + cd $(COURSE) && tar czfv ../$(COURSE_TAR) ./course/ + cd $(LIBRARY) && tar czfv ../$(LIBRARY_TAR) ./library/ + +clean: ## Remove hidden system files that are ignored by git. + git clean -dfX + +unpack: ## Unpack course and library exports from ./dist/ folder into source OLX. + [ -f $(COURSE_TAR) ] && mkdir -p $(COURSE) && (cd $(COURSE) && tar xzfv ../$(COURSE_TAR)) || echo "No course to unpack." + [ -f $(LIBRARY_TAR) ] && mkdir -p $(LIBRARY) && (cd $(LIBRARY) && tar xzfv ../$(LIBRARY_TAR)) || echo "No content library to unpack." + +import: dist ## Import course and libraries into a locally-running Tutor instance. Requires an admin user. + $(TUTOR) mounts add cms,cms-worker:.:/openedx/data/$(REPO_NAME) + yes | \ + $(TUTOR) $(TUTOR_CONTEXT) run $(MOUNT_REPO) cms \ + ./manage.py cms import_content_library /openedx/data/$(REPO_NAME)/$(LIBRARY_TAR) $(LIBRARY_IMPORT_USER) + $(TUTOR) $(TUTOR_CONTEXT) run $(MOUNT_REPO) cms \ + ./manage.py cms import /openedx/data $(REPO_NAME)/$(COURSE)/course + $(TUTOR) $(TUTOR_CONTEXT) run cms \ + ./manage.py cms reindex_course --all --setup diff --git a/README.md b/README.md deleted file mode 100644 index 211a205..0000000 --- a/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# Open edX Demonstration Course - -This is a demonstration course you can import into edX Studio. - -* Download the [gzipped tarball][] (make sure your OS doesn't gunzip it for - you). -* In Studio, create an empty course. -* Under Tools, select Import and choose the downloaded, gzipped tarball. - -All content is made available under a [Creative Commons BY-NC-SA 3.0 US -License][cc]. - -All code is made available under an [AGPLv3 License][agpl]. - - -[agpl]: AGPL_LICENSE -[cc]: http://creativecommons.org/licenses/by-nc-sa/3.0/us/ -[gzipped tarball]: https://github.com/openedx/edx-demo-course/releases/download/v1.1/edx_demo_course_1_1.tar.gz diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..d913e9f --- /dev/null +++ b/README.rst @@ -0,0 +1,126 @@ +Open edX Demo Course, v2 +######################## + +Contents +******** + +This repository contains a course and some libraries that you can import into your Open edX instance to learn more about platform features. This course is geared mainly towards instructors, but learners can also benefit from learning how the platform and problem types work. For convenience, we include both: + +* The ``.tar.gz`` files for you to import into Studio, located in the ``./dist/`` folder. +* The source code (a.k.a. "OLX") in the other top-level folders. + +.. list-table:: + :header-rows: 1 + + * - Name + - Key + - Download + - Source OLX + * - *Open edX demo Course* + - ``course-v1:demo+Course+1`` + - `<./dist/demo-course.tar.gz>`_ + - `<./demo-course>`_ + * - *Open edX Example Content Library* + - ``library-v1:demo+ContentLibrary`` + - `<./dist/demo-content-library.tar.gz>`_ + - `<./demo-content-library>`_ + +Rationale +********* + +This course and its associated libraries aim to expose as many Open edX Studio & courseware features as possible. +It does so by providing example usages of various block types and features such as cohorts and discussion forums. + +This course serves as a user-facing introduction and tutorial to the Open edX platform. + +It is useful for basic testing, but also needs to remain a suitable first experience for Open edX learners. +For deep testing, we recommend using the `Open edX Test Course `_. + +Status +****** + +This course is new as of the Redwood (June 2024) release. + +Usage +***** + +To use this course and its libraries, you will need to import them into an Open edX instance. All new Open edX +instances will get this course installed by default. + +Manual import +============= + +In Studio: + +1. Create a library with the org ``demo`` and the slug ``ContentLibrary``. +2. Import ``dist/demo-content-library.tar.gz`` into the library. +3. Create a course run with the org ``demo``, name ``Course``, and run ``1``. +4. Import ``dist/demo-course.tar.gz`` into the course run. + +Scripted import (for Tutor users) +================================= + +In the same environment that use to run tutor, execute the command:: + + make import TUTOR=... TUTOR_CONTEXT=... LIBRARY_IMPORT_USER=... + +where: + +* ``TUTOR`` should be the command that you use to run Tutor (defaults to simply ``tutor``). +* ``TUTOR_CONTEXT`` should be the mode in which you want to import the course (defaults to ``local``, other acceptable values are ``k8s`` and ``dev``). +* ``LIBRARY_IMPORT_USER`` is the username of an existing user in your Open edX instance that will be given ownership of the imported library (defaults to ``admin``). + +For example:: + + # Import in developer mode using a custom tutor root, and make alice the library admin. + make import TUTOR='tutor --root=~/tutor-root' TUTOR_CONTEXT=dev LIBRARY_IMPORT_USER=alice + +Or:: + + # Import in kubernetes mode, and make bob the library admin. + make import TUTOR_CONTEXT=k8s LIBRARY_IMPORT_USER=bob + +Re-generating the importable content +==================================== + +If you make changes to the course or library OLX and want to re-generate the importable ``.tar.gz`` files, simply run:: + + make dist + +This will package the OLX into the ``dist`` directory. + +Contributing +************ + +Contributions of bug fixes are welcome. There are two ways you can make changes to this course. + +OLX Editing +=========== + +If you are experienced with editing raw OLX, then you can make changes directly to the XML and asset files this repository. Before opening a pull request, please: + +* Run ``make dist``, which will generate the ``dist/*.tar.gz`` archives. Include these changes in your commit. +* Import the updated ``dist/*.tar.gz`` archives into an Open edX Studio (as described above) and ensure the test course still works as expected, both in Studio and LMS. + +Studio Editing +============== + +Once you've imported the test course and libraries into an Open edX instance (as described above), you can edit the course and its libraries in Studio. Make sure to Publish any changes you make from Studio so that you can test them out in LMS. + +When you're ready to contribute the changes back into this repository, simply: + +1. Export the course and any libraries you changed. +2. Move to exported ``.tar.gz`` archives into this repository's ``dist/`` folder, and name them to match the top-level OLX folders. For example, the course archive should be named ``dist/demo-course.tar.gz``, and the problem bank archive should be named ``dist/demo-content-library.tar.gz``. +3. Run ``make unpack``, which will unpack the archives into OLX. +4. Review your OLX changes using ``git diff``. +5. Commit your changes and open a pull request. + +Tag @openedx/openedx-demo-course-maintainers in all pull requests. We'll do our best to take a look! All pull requests should pass the GitHub Actions suite, which ensures that the course and libraries can be imported into a freshly-provisioned Tutor instance. + +License +******* + +All content is made available under a `Creative Commons BY-NC-SA 3.0 US +License `_. + +All code is made available under an `AGPLv3 License <./AGPL_LICENSE>`_ diff --git a/about/overview.html b/about/overview.html deleted file mode 100644 index 3e7b50f..0000000 --- a/about/overview.html +++ /dev/null @@ -1,49 +0,0 @@ -
-

About This Course

-

Include your long course description here. The long course description should contain 150-400 words.

- -

This is paragraph 2 of the long course description. Add more paragraphs as needed. Make sure to enclose them in paragraph tags.

-
- -
-

Prerequisites

-

Add information about course prerequisites here.

-
- -
-

Course Staff

-
-
- -
- -

Staff Member #1

-

Biography of instructor/staff member #1

-
- -
-
- -
- -

Staff Member #2

-

Biography of instructor/staff member #2

-
-
- -
-
-

Frequently Asked Questions

-
-

What web browser should I use?

-

The Open edX platform works best with current versions of Chrome, Firefox or Safari, or with Internet Explorer version 9 and above.

- -

See our list of supported browsers for the most up-to-date information.

-
- -
-

Question #2

-

Your answer would be displayed here.

-
-
-
diff --git a/catalog-info.yaml b/catalog-info.yaml new file mode 100644 index 0000000..44136b7 --- /dev/null +++ b/catalog-info.yaml @@ -0,0 +1,32 @@ +# This file records information about this repo. Its use is described in OEP-55: +# https://open-edx-proposals.readthedocs.io/en/latest/processes/oep-0055-proc-project-maintainers.html + +apiVersion: backstage.io/v1alpha1 +# (Required) Acceptable Values: Component, Resource, System +# A repo will almost certainly be a Component. +kind: Component +metadata: + name: 'openedx-demo-course' + description: "Open edX DemoX Course" + links: + annotations: + # (Optional) Annotation keys and values can be whatever you want. + # We use it in Open edX repos to have a comma-separated list of GitHub user + # names that might be interested in changes to the architecture of this + # component. + openedx.org/arch-interest-groups: "sarina" +spec: + + # (Required) This can be a group (`group:`) or a user (`user:`). + # Don't forget the "user:" or "group:" prefix. Groups must be GitHub team + # names in the openedx GitHub organization: https://github.com/orgs/openedx/teams + # + # If you need a new team created, create an issue with tCRIL engineering: + # https://github.com/openedx/tcril-engineering/issues/new/choose + owner: user:sarina + + # (Required) Acceptable Type Values: service, website, library + type: 'website' + + # (Required) Acceptable Lifecycle Values: experimental, production, deprecated + lifecycle: 'production' diff --git a/chapter/1414ffd5143b4b508f739b563ab468b7.xml b/chapter/1414ffd5143b4b508f739b563ab468b7.xml deleted file mode 100644 index ce4ae8d..0000000 --- a/chapter/1414ffd5143b4b508f739b563ab468b7.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/chapter/d8a6192ade314473a78242dfeedfbf5b.xml b/chapter/d8a6192ade314473a78242dfeedfbf5b.xml deleted file mode 100644 index 6434a4a..0000000 --- a/chapter/d8a6192ade314473a78242dfeedfbf5b.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/chapter/graded_interactions.xml b/chapter/graded_interactions.xml deleted file mode 100644 index 656d503..0000000 --- a/chapter/graded_interactions.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/chapter/interactive_demonstrations.xml b/chapter/interactive_demonstrations.xml deleted file mode 100644 index 1a1edbf..0000000 --- a/chapter/interactive_demonstrations.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/chapter/social_integration.xml b/chapter/social_integration.xml deleted file mode 100644 index 9ab937f..0000000 --- a/chapter/social_integration.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/course.xml b/course.xml deleted file mode 100644 index c1e37f7..0000000 --- a/course.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/course/Demo_Course.xml b/course/Demo_Course.xml deleted file mode 100644 index 313d4c4..0000000 --- a/course/Demo_Course.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/demo-content-library/README.rst b/demo-content-library/README.rst new file mode 100644 index 0000000..877414d --- /dev/null +++ b/demo-content-library/README.rst @@ -0,0 +1,9 @@ +Demo Content Library +==================== + +This directory contains all the content for the demo library in an unzipped view. You can use it to: + +- Inspect the OLX code +- Review the assets in the library + +It should not be used to import the library into your Open edX® instance. To import the library into your Open edX® instance, you should import the library's .tar.gz file found in the `dist folder <../../dist>`_. \ No newline at end of file diff --git a/demo-content-library/library/library.xml b/demo-content-library/library/library.xml new file mode 100644 index 0000000..1310f62 --- /dev/null +++ b/demo-content-library/library/library.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/demo-content-library/library/policies/assets.json b/demo-content-library/library/policies/assets.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/demo-content-library/library/policies/assets.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/demo-content-library/library/problem/19c4d31df12b423c8944cf66ed8aa11d.xml b/demo-content-library/library/problem/19c4d31df12b423c8944cf66ed8aa11d.xml new file mode 100644 index 0000000..6b04466 --- /dev/null +++ b/demo-content-library/library/problem/19c4d31df12b423c8944cf66ed8aa11d.xml @@ -0,0 +1,17 @@ + + + + + A. Diaphragm + B. Biceps + C. Hamstrings + D. Triceps + + +
+

Answer: A. Diaphragm

+

The diaphragm contracts during inhalation, increasing the volume of the thoracic cavity and allowing air to be drawn into the lungs.

+
+
+
+
diff --git a/demo-content-library/library/problem/4e98cc7d3ed6413b9afbdf64e4a1b682.xml b/demo-content-library/library/problem/4e98cc7d3ed6413b9afbdf64e4a1b682.xml new file mode 100644 index 0000000..d3a40a1 --- /dev/null +++ b/demo-content-library/library/problem/4e98cc7d3ed6413b9afbdf64e4a1b682.xml @@ -0,0 +1,17 @@ + + + + + A. Producing mucus + B. Vocalization + C. Gas exchange + D. Humidifying incoming air + + +
+

Answer: C. Gas exchange

+

The alveoli are tiny sacs in the lungs where oxygen is exchanged for carbon dioxide in the blood.

+
+
+
+
diff --git a/demo-content-library/library/problem/5cd09d2566e8409b8ddcb57b0ff2361f.xml b/demo-content-library/library/problem/5cd09d2566e8409b8ddcb57b0ff2361f.xml new file mode 100644 index 0000000..ac5304d --- /dev/null +++ b/demo-content-library/library/problem/5cd09d2566e8409b8ddcb57b0ff2361f.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/demo-content-library/library/problem/6b74196a21a245ceb52873f50fb4c1b4.xml b/demo-content-library/library/problem/6b74196a21a245ceb52873f50fb4c1b4.xml new file mode 100644 index 0000000..1fa727f --- /dev/null +++ b/demo-content-library/library/problem/6b74196a21a245ceb52873f50fb4c1b4.xml @@ -0,0 +1,17 @@ + + + + + A. Nostrils + B. Trachea + C. Bronchioles + D. Alveoli + + +
+

Answer: A. Nostrils

+

Air first enters the respiratory system through the nostrils (or mouth) and then continues down the trachea and into the lungs.

+
+
+
+
diff --git a/demo-content-library/library/problem/b7597ae2c50d49e69dd0379465edbdd0.xml b/demo-content-library/library/problem/b7597ae2c50d49e69dd0379465edbdd0.xml new file mode 100644 index 0000000..d414af8 --- /dev/null +++ b/demo-content-library/library/problem/b7597ae2c50d49e69dd0379465edbdd0.xml @@ -0,0 +1,17 @@ + + + + + A. Gas exchange + B. Producing sounds + C. Moving mucus and trapped particles + D. Assisting with the sense of smell + + +
+

Answer: C. Moving mucus and trapped particles

+

Cilia are tiny hair-like structures that line the airways and move mucus and trapped particles up and out of the respiratory system, helping to keep the airways clear.

+
+
+
+
diff --git a/demo-content-library/library/problem/dd88975768314dcd91363359d38371a8.xml b/demo-content-library/library/problem/dd88975768314dcd91363359d38371a8.xml new file mode 100644 index 0000000..c4c7f40 --- /dev/null +++ b/demo-content-library/library/problem/dd88975768314dcd91363359d38371a8.xml @@ -0,0 +1,17 @@ + + + + + A. Bronchi + B. Epiglottis + C. Alveoli + D. Diaphragm + + +
+

Answer: B. Epiglottis

+

The epiglottis is a flap-like structure that covers the entrance to the trachea when swallowing, preventing food and liquids from entering the airway.

+
+
+
+
diff --git a/demo-course/README.rst b/demo-course/README.rst new file mode 100644 index 0000000..71666a1 --- /dev/null +++ b/demo-course/README.rst @@ -0,0 +1,10 @@ +Course Content +============== + +This directory contains all the course content in an unzipped view. You can use it to: + +- Inspect the OLX code +- Review the assets in the course + +It should not be used to import into your Open edX® instance. To import the course into your Open edX® instance, follow the Tutor Import or Manual Import instructions at the main `README <../../README.md>`_. + diff --git a/html/6b6bee43c7c641509da71c9299cc9f5a.html b/demo-course/course/about/about_sidebar_html.html similarity index 100% rename from html/6b6bee43c7c641509da71c9299cc9f5a.html rename to demo-course/course/about/about_sidebar_html.html diff --git a/static/jsmol/j2s/java/lang/annotation/Documented.js b/demo-course/course/about/description.html similarity index 100% rename from static/jsmol/j2s/java/lang/annotation/Documented.js rename to demo-course/course/about/description.html diff --git a/static/jsmol/j2s/java/lang/annotation/Inherited.js b/demo-course/course/about/duration.html similarity index 100% rename from static/jsmol/j2s/java/lang/annotation/Inherited.js rename to demo-course/course/about/duration.html diff --git a/static/jsmol/j2s/java/lang/annotation/Retention.js b/demo-course/course/about/entrance_exam_enabled.html similarity index 100% rename from static/jsmol/j2s/java/lang/annotation/Retention.js rename to demo-course/course/about/entrance_exam_enabled.html diff --git a/static/jsmol/j2s/java/lang/annotation/Target.js b/demo-course/course/about/entrance_exam_id.html similarity index 100% rename from static/jsmol/j2s/java/lang/annotation/Target.js rename to demo-course/course/about/entrance_exam_id.html diff --git a/demo-course/course/about/entrance_exam_minimum_score_pct.html b/demo-course/course/about/entrance_exam_minimum_score_pct.html new file mode 100644 index 0000000..c5b431b --- /dev/null +++ b/demo-course/course/about/entrance_exam_minimum_score_pct.html @@ -0,0 +1 @@ +50 \ No newline at end of file diff --git a/demo-course/course/about/overview.html b/demo-course/course/about/overview.html new file mode 100644 index 0000000..36b4a42 --- /dev/null +++ b/demo-course/course/about/overview.html @@ -0,0 +1,53 @@ +
+

About This Course

+

Welcome to the Open edX® Demo Course! This course is designed for anyone who wants to learn more about the capabilities of the Open edX® platform and how it can be used to support your learning experiences.

+

In this course, we will discuss the tools and features that can leverage your learning program. After providing details about the platform, we will discuss the different types of content that can be created, showcase the variety of assessment tools, and explore the different ways that you can engage your learners with social interactions. Be sure to check out the final module that includes stories from current community members about their experience with the platform!

+
    +
  • Module 1: Dive into the Open edX® platform!
  • +
  • Module 2: Crafting Captivating Content
  • +
  • Module 3: Ace the Assessments!
  • +
  • Module 4: Social Learning: Engaging Through Interaction
  • +
  • Module 5: Your Open edX Community
  • +
+
+ +
+

Requirements

+

There are no pre-requisites or requirements to take this demo course.

+
+ + +
+
+

Frequently Asked Questions

+
+

Who is this course intended for?

+

This course is intended for

+
    +
  • Course Developers who aren't aware of what Open edX is capable of and how it can meet their needs. 
  • +
  • People who are new to online learning and/or instructional design - or are new to developing courses on this platform. 
  • +
  • Community members who are looking for reference materials and examples.
  • +
+
+ + +
+

Is the Open edX® LMS free?

+

The Open edX® Platform is an open source piece of software. Therefore, the code necessary to install and run the Open edX Platform on a server is free. However, Open edX® operators do pay for the hosting, maintenance, and support of your site.

+
+ +
+

How long is the course?

+

This course may take you around 2 hours to complete from start to finish. However, this course is designed to be navigated as a reference to go back to as needed.

+
+ +
+

Can I reuse parts of this course?

+

Yes, you are welcome to reuse parts of this course, but you will have to check the license and provide the correct attribution. 

+

All content is made available under a Creative Commons BY-NC-SA 3.0 US License <http://creativecommons.org/licenses/by-nc-sa/3.0/us/>.

+

All code is made available under an AGPLv3 License.

+
+ + You can find more frequently asked questions and their answers on the Open edX® FAQ page. +
+
diff --git a/demo-course/course/about/short_description.html b/demo-course/course/about/short_description.html new file mode 100644 index 0000000..0c7b161 --- /dev/null +++ b/demo-course/course/about/short_description.html @@ -0,0 +1 @@ +Explore Open edX® capabilities in this demo course, covering platform tools, content creation, assessments, social learning, and community stories. Ideal for course developers, online learning newcomers, and community members. \ No newline at end of file diff --git a/demo-course/course/about/subtitle.html b/demo-course/course/about/subtitle.html new file mode 100644 index 0000000..e69de29 diff --git a/demo-course/course/about/title.html b/demo-course/course/about/title.html new file mode 100644 index 0000000..e69de29 diff --git a/demo-course/course/annotatable/b1067ae88289450f9887c38b28d8868b.xml b/demo-course/course/annotatable/b1067ae88289450f9887c38b28d8868b.xml new file mode 100644 index 0000000..af13dbc --- /dev/null +++ b/demo-course/course/annotatable/b1067ae88289450f9887c38b28d8868b.xml @@ -0,0 +1,19 @@ + +

Sonnet 27 focuses on the obsessive, restless side of love and infatuation: the speaker is trying to sleep after a long, exhausting day, but his mind won't let him rest. Read the sonnet and answer the questions below.

+

Sonnet 27 - William Shakespeare

+

Weary with toil, I haste me to my bed,
+The dear repose for limbs with travel tired;
+But then begins a journey in my head
+To work my mind, when body's work's expired:
+For then my thoughts--from far where I abide--
+ Intend a zealous pilgrimage to thee,
+And keep my drooping eyelids open wide,
+Looking on darkness which the blind do see:
+Save that my soul's imaginary sight
+Presents thy shadow to my sightless view,
+Which, like a jewel hung in ghastly night,
+Makes black night beauteous, and her old face new.
+ Lo! thus, by day my limbs, by night my mind,
+ For thee, and for myself, no quiet find. +

+
diff --git a/assets/assets.xml b/demo-course/course/assets/assets.xml similarity index 100% rename from assets/assets.xml rename to demo-course/course/assets/assets.xml diff --git a/demo-course/course/chapter/30b3fbb840024953b2d4b2e700a53002.xml b/demo-course/course/chapter/30b3fbb840024953b2d4b2e700a53002.xml new file mode 100644 index 0000000..5f47b94 --- /dev/null +++ b/demo-course/course/chapter/30b3fbb840024953b2d4b2e700a53002.xml @@ -0,0 +1,4 @@ + + + + diff --git a/demo-course/course/chapter/35283385dd4947619c558f8bb888a031.xml b/demo-course/course/chapter/35283385dd4947619c558f8bb888a031.xml new file mode 100644 index 0000000..6c99ccb --- /dev/null +++ b/demo-course/course/chapter/35283385dd4947619c558f8bb888a031.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/demo-course/course/chapter/478db06a3afb417d87e26c0eafe5e962.xml b/demo-course/course/chapter/478db06a3afb417d87e26c0eafe5e962.xml new file mode 100644 index 0000000..dbead55 --- /dev/null +++ b/demo-course/course/chapter/478db06a3afb417d87e26c0eafe5e962.xml @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/chapter/7281f869d5f44704b56d6fe6ee96d886.xml b/demo-course/course/chapter/7281f869d5f44704b56d6fe6ee96d886.xml new file mode 100644 index 0000000..8e06f44 --- /dev/null +++ b/demo-course/course/chapter/7281f869d5f44704b56d6fe6ee96d886.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/demo-course/course/chapter/b17a430abc234382a04e7835b013912d.xml b/demo-course/course/chapter/b17a430abc234382a04e7835b013912d.xml new file mode 100644 index 0000000..8e0c13d --- /dev/null +++ b/demo-course/course/chapter/b17a430abc234382a04e7835b013912d.xml @@ -0,0 +1,4 @@ + + + + diff --git a/demo-course/course/chapter/d6780558bc3042c7ab6dd441a06d3478.xml b/demo-course/course/chapter/d6780558bc3042c7ab6dd441a06d3478.xml new file mode 100644 index 0000000..c5e27d2 --- /dev/null +++ b/demo-course/course/chapter/d6780558bc3042c7ab6dd441a06d3478.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/demo-course/course/course.xml b/demo-course/course/course.xml new file mode 100644 index 0000000..55b5de5 --- /dev/null +++ b/demo-course/course/course.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/demo-course/course/course/demo_course.xml b/demo-course/course/course/demo_course.xml new file mode 100644 index 0000000..6437f73 --- /dev/null +++ b/demo-course/course/course/demo_course.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/demo-course/course/html/013c611e421e43d6a10857ea388bf510.html b/demo-course/course/html/013c611e421e43d6a10857ea388bf510.html new file mode 100644 index 0000000..767086b --- /dev/null +++ b/demo-course/course/html/013c611e421e43d6a10857ea388bf510.html @@ -0,0 +1,28 @@ +
+
+

+ Try It: Import a Content Library

+
+
+
+
    +
  • Download the importable library package here.
  • +
  • Navigate to your Studio homepage and then the Libraries tab +

    Screenshot of the studio home page with Libraries tab highlighted

    +
  • +
  • Add a new library, and give it a name, organization, and library code. +

    New Library button in studio

    +
  • +
  • Within your new library, choose "import" from the Tools menu to import a library package. +

    Studio Tools menu with Import highlighted

    +
  • +
  • Follow the prompts to select the package you just downloaded and import it into your library shell. 
  • +
  • Return to this course, and either add a new Library Content or use an existing Library Content component to 'Select a Library' +

    A Randomized content block with Select a Library highlighted

    +
  • +
  • Edit your Randomized Content Block and select the library you just imported. Modify other setting as you like. +

    The Select a Library dropdown from the Randomized Content Block with a library highlighted

    +
  • +
+
+
+
\ No newline at end of file diff --git a/demo-course/course/html/013c611e421e43d6a10857ea388bf510.xml b/demo-course/course/html/013c611e421e43d6a10857ea388bf510.xml new file mode 100644 index 0000000..6376b4c --- /dev/null +++ b/demo-course/course/html/013c611e421e43d6a10857ea388bf510.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/043493f197854f74a2659f467b45b84d.html b/demo-course/course/html/043493f197854f74a2659f467b45b84d.html new file mode 100644 index 0000000..048a68f --- /dev/null +++ b/demo-course/course/html/043493f197854f74a2659f467b45b84d.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/html/043493f197854f74a2659f467b45b84d.xml b/demo-course/course/html/043493f197854f74a2659f467b45b84d.xml new file mode 100644 index 0000000..a97ae24 --- /dev/null +++ b/demo-course/course/html/043493f197854f74a2659f467b45b84d.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/04be59e2549545388140a196f39f7b67.html b/demo-course/course/html/04be59e2549545388140a196f39f7b67.html new file mode 100644 index 0000000..705336d --- /dev/null +++ b/demo-course/course/html/04be59e2549545388140a196f39f7b67.html @@ -0,0 +1,8 @@ +
+
+

Code Grading assessment, sometimes referred to as auto-graded coding assignments, are evaluations where learners submit code as their answer and it is automatically tested and graded by a system. Typically, the submitted code is run against pre-defined test cases and the correctness is determined based on whether the output matches the expected results for those tests.

+
+

menu_bookUseful documentation can be found in  Python Grading  and  LTI  problem types.

+
+
+
\ No newline at end of file diff --git a/demo-course/course/html/04be59e2549545388140a196f39f7b67.xml b/demo-course/course/html/04be59e2549545388140a196f39f7b67.xml new file mode 100644 index 0000000..59de314 --- /dev/null +++ b/demo-course/course/html/04be59e2549545388140a196f39f7b67.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/04be74248d434e92912275b816549c2c.html b/demo-course/course/html/04be74248d434e92912275b816549c2c.html new file mode 100644 index 0000000..ebd923d --- /dev/null +++ b/demo-course/course/html/04be74248d434e92912275b816549c2c.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/04be74248d434e92912275b816549c2c.xml b/demo-course/course/html/04be74248d434e92912275b816549c2c.xml new file mode 100644 index 0000000..3cbd792 --- /dev/null +++ b/demo-course/course/html/04be74248d434e92912275b816549c2c.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/054cef851ecc415e969cd82c06a3307b.html b/demo-course/course/html/054cef851ecc415e969cd82c06a3307b.html new file mode 100644 index 0000000..9740084 --- /dev/null +++ b/demo-course/course/html/054cef851ecc415e969cd82c06a3307b.html @@ -0,0 +1,3 @@ +

Images play a vital role in visualizing complex ideas, illustrating examples, and enhancing understanding. They can include diagrams, charts, infographics, and illustrations that supplement the text and provide visual context.

+

To simply insert an image into an HTML component, you can click the image button on the editor toolbar of a text component and this will open up a dialogue box allowing you to simply drag your image in to upload it or to search for and select one of your previously uploaded images. Once you've uploaded or selected an image, you'll be able to add alt text and adjust the size. 

+

An image of the Open edX Image upload wizard showing the options for sizing and adding an alt tag

\ No newline at end of file diff --git a/demo-course/course/html/054cef851ecc415e969cd82c06a3307b.xml b/demo-course/course/html/054cef851ecc415e969cd82c06a3307b.xml new file mode 100644 index 0000000..6fd0e59 --- /dev/null +++ b/demo-course/course/html/054cef851ecc415e969cd82c06a3307b.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/0679cf65f2e04d868ba268f58023e8fe.html b/demo-course/course/html/0679cf65f2e04d868ba268f58023e8fe.html new file mode 100644 index 0000000..851dc18 --- /dev/null +++ b/demo-course/course/html/0679cf65f2e04d868ba268f58023e8fe.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/0679cf65f2e04d868ba268f58023e8fe.xml b/demo-course/course/html/0679cf65f2e04d868ba268f58023e8fe.xml new file mode 100644 index 0000000..8da7b52 --- /dev/null +++ b/demo-course/course/html/0679cf65f2e04d868ba268f58023e8fe.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/0759938f5e374463978e75d5dc7c254e.html b/demo-course/course/html/0759938f5e374463978e75d5dc7c254e.html new file mode 100644 index 0000000..246ee07 --- /dev/null +++ b/demo-course/course/html/0759938f5e374463978e75d5dc7c254e.html @@ -0,0 +1,12 @@ +
+

Try it!

+

This assignment type is commonly used in smaller courses where students upload a file like a document or a presentation for faculty grading. To try this below, you can follow the following steps:

+
    +
  1. Upload your file for the assignment
  2. +
  3. If you have staff privileges on this course, you can click the "Grade Submissions" button.
  4. +
+

The Staff graded assignment with the Grade Submissions button highlighted

+
    +
  1. Click "Enter Grade" next to your submission to assign a score
  2. +
+
\ No newline at end of file diff --git a/demo-course/course/html/0759938f5e374463978e75d5dc7c254e.xml b/demo-course/course/html/0759938f5e374463978e75d5dc7c254e.xml new file mode 100644 index 0000000..8039467 --- /dev/null +++ b/demo-course/course/html/0759938f5e374463978e75d5dc7c254e.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/075b7a2318474e30b8b55cbde99207c8.html b/demo-course/course/html/075b7a2318474e30b8b55cbde99207c8.html new file mode 100644 index 0000000..241a7f8 --- /dev/null +++ b/demo-course/course/html/075b7a2318474e30b8b55cbde99207c8.html @@ -0,0 +1,10 @@ +
+
+

Text provides the the most basic means of delivering information, explanations, and instructions to students. It allows for detailed explanations, supporting concepts with written content, and providing textual resources for further study.

+

Text can be added to a course in Studio using our WYSIWYG ("What you see is what you get") HTML editor.

+
+
+

A WYSIWYG text editor demonstrating some rich text

+
+
+

With the simple WYSIWYG editor, you can write and format your text to your heart's desire. But let's look at some more interesting ways to use these components than simply text!

\ No newline at end of file diff --git a/demo-course/course/html/075b7a2318474e30b8b55cbde99207c8.xml b/demo-course/course/html/075b7a2318474e30b8b55cbde99207c8.xml new file mode 100644 index 0000000..8b02ce9 --- /dev/null +++ b/demo-course/course/html/075b7a2318474e30b8b55cbde99207c8.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/0764f43072bb486abbd9ca7ed5af9ac6.html b/demo-course/course/html/0764f43072bb486abbd9ca7ed5af9ac6.html new file mode 100644 index 0000000..6daf53d --- /dev/null +++ b/demo-course/course/html/0764f43072bb486abbd9ca7ed5af9ac6.html @@ -0,0 +1,4 @@ +
+

Try it!

+

In the passage below, we've prepared an annotation problem for you to try for yourself. You may find the annotation comment helpful, in that it will give you the answer!

+
\ No newline at end of file diff --git a/demo-course/course/html/0764f43072bb486abbd9ca7ed5af9ac6.xml b/demo-course/course/html/0764f43072bb486abbd9ca7ed5af9ac6.xml new file mode 100644 index 0000000..2b3bba9 --- /dev/null +++ b/demo-course/course/html/0764f43072bb486abbd9ca7ed5af9ac6.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/084430631c4f4bad96e82a3a92887959.html b/demo-course/course/html/084430631c4f4bad96e82a3a92887959.html new file mode 100644 index 0000000..94452d3 --- /dev/null +++ b/demo-course/course/html/084430631c4f4bad96e82a3a92887959.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/084430631c4f4bad96e82a3a92887959.xml b/demo-course/course/html/084430631c4f4bad96e82a3a92887959.xml new file mode 100644 index 0000000..84a5d81 --- /dev/null +++ b/demo-course/course/html/084430631c4f4bad96e82a3a92887959.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/09b8cfb6dbee418ab28debc45b676ed1.html b/demo-course/course/html/09b8cfb6dbee418ab28debc45b676ed1.html new file mode 100644 index 0000000..048a68f --- /dev/null +++ b/demo-course/course/html/09b8cfb6dbee418ab28debc45b676ed1.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/html/09b8cfb6dbee418ab28debc45b676ed1.xml b/demo-course/course/html/09b8cfb6dbee418ab28debc45b676ed1.xml new file mode 100644 index 0000000..ffeda99 --- /dev/null +++ b/demo-course/course/html/09b8cfb6dbee418ab28debc45b676ed1.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/09bb83c18c224480b4db165a0c929e74.html b/demo-course/course/html/09bb83c18c224480b4db165a0c929e74.html new file mode 100644 index 0000000..cd4a2c3 --- /dev/null +++ b/demo-course/course/html/09bb83c18c224480b4db165a0c929e74.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/09bb83c18c224480b4db165a0c929e74.xml b/demo-course/course/html/09bb83c18c224480b4db165a0c929e74.xml new file mode 100644 index 0000000..83fc3d8 --- /dev/null +++ b/demo-course/course/html/09bb83c18c224480b4db165a0c929e74.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/0a62845ebea142cc817cbd83a639bc65.html b/demo-course/course/html/0a62845ebea142cc817cbd83a639bc65.html new file mode 100644 index 0000000..200fd58 --- /dev/null +++ b/demo-course/course/html/0a62845ebea142cc817cbd83a639bc65.html @@ -0,0 +1,7 @@ +
+

As discussed on the previous page, cohorts aren't just used for dividing discussions, they can also be used for serving up a different learning experience to different learners!

+

These are known as Content Groups, which can be used for content experiments, A/B testing and serving different learning experiences for different learner personas within the same course. The content below is a basic example of this. As staff you'll see two components - one intended for Cohort A, and one intended for Cohort B. At the top of the page, you'll see the View As... bar, which will allow you to switch your view to each of those groups.

+
+

Screenshot of the view course as dropdown with staff highlighted

+
+
\ No newline at end of file diff --git a/demo-course/course/html/0a62845ebea142cc817cbd83a639bc65.xml b/demo-course/course/html/0a62845ebea142cc817cbd83a639bc65.xml new file mode 100644 index 0000000..6269cbc --- /dev/null +++ b/demo-course/course/html/0a62845ebea142cc817cbd83a639bc65.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/0b8b94b1a09b44bd9f94b84c7d86c88e.html b/demo-course/course/html/0b8b94b1a09b44bd9f94b84c7d86c88e.html new file mode 100644 index 0000000..45bfb3a --- /dev/null +++ b/demo-course/course/html/0b8b94b1a09b44bd9f94b84c7d86c88e.html @@ -0,0 +1,14 @@ +
+

The Survey component functions similarly to a Poll except it allows you to ask many questions at once with a standard set of answers. This is great for gathering general opinion data on things like the performance of your course or to ask whether learners agree with a range of statements following a video or reading.

+
+

menu_bookDocumentation 

+
+
+

Best Practices

+
    +
  • Much like polls, ensure you ask opinion-based questions where possible
  • +
  • Ensure every question you ask in a single survey has the same set of possible answers
  • +
  • Keep your answer options short and concise
  • +
+
+
\ No newline at end of file diff --git a/demo-course/course/html/0b8b94b1a09b44bd9f94b84c7d86c88e.xml b/demo-course/course/html/0b8b94b1a09b44bd9f94b84c7d86c88e.xml new file mode 100644 index 0000000..8f15ecc --- /dev/null +++ b/demo-course/course/html/0b8b94b1a09b44bd9f94b84c7d86c88e.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/0ba8dd8378b8419cbd035e1b98f7a6f2.html b/demo-course/course/html/0ba8dd8378b8419cbd035e1b98f7a6f2.html new file mode 100644 index 0000000..7df8427 --- /dev/null +++ b/demo-course/course/html/0ba8dd8378b8419cbd035e1b98f7a6f2.html @@ -0,0 +1,4 @@ +
+

Configuration Note:

+

If you cannot access the inline discussions or see the Discussions tab, then you likely need to install the Open edX® LMS Forum Plugin. Work with your site administrator to do this, if needed. 

+
\ No newline at end of file diff --git a/demo-course/course/html/0ba8dd8378b8419cbd035e1b98f7a6f2.xml b/demo-course/course/html/0ba8dd8378b8419cbd035e1b98f7a6f2.xml new file mode 100644 index 0000000..a0ddf6f --- /dev/null +++ b/demo-course/course/html/0ba8dd8378b8419cbd035e1b98f7a6f2.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/0bebeccf41994851b596500392bd8527.html b/demo-course/course/html/0bebeccf41994851b596500392bd8527.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/0bebeccf41994851b596500392bd8527.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/0bebeccf41994851b596500392bd8527.xml b/demo-course/course/html/0bebeccf41994851b596500392bd8527.xml new file mode 100644 index 0000000..0452115 --- /dev/null +++ b/demo-course/course/html/0bebeccf41994851b596500392bd8527.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/0c1e42d979664c8ab46b6ae6a3bba438.html b/demo-course/course/html/0c1e42d979664c8ab46b6ae6a3bba438.html new file mode 100644 index 0000000..867bf2b --- /dev/null +++ b/demo-course/course/html/0c1e42d979664c8ab46b6ae6a3bba438.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/0c1e42d979664c8ab46b6ae6a3bba438.xml b/demo-course/course/html/0c1e42d979664c8ab46b6ae6a3bba438.xml new file mode 100644 index 0000000..355049f --- /dev/null +++ b/demo-course/course/html/0c1e42d979664c8ab46b6ae6a3bba438.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/0e634aa5d93a4ca9aeef2f3538de1e9c.html b/demo-course/course/html/0e634aa5d93a4ca9aeef2f3538de1e9c.html new file mode 100644 index 0000000..a149af9 --- /dev/null +++ b/demo-course/course/html/0e634aa5d93a4ca9aeef2f3538de1e9c.html @@ -0,0 +1 @@ +

Please Note: This activity type is not suitable for learners with additional accessibility needs, and may impact the accessibility of your course.

\ No newline at end of file diff --git a/demo-course/course/html/0e634aa5d93a4ca9aeef2f3538de1e9c.xml b/demo-course/course/html/0e634aa5d93a4ca9aeef2f3538de1e9c.xml new file mode 100644 index 0000000..c651f04 --- /dev/null +++ b/demo-course/course/html/0e634aa5d93a4ca9aeef2f3538de1e9c.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/0f594fe7afb947bbbac7f7cc18b58958.html b/demo-course/course/html/0f594fe7afb947bbbac7f7cc18b58958.html new file mode 100644 index 0000000..a4cc2c8 --- /dev/null +++ b/demo-course/course/html/0f594fe7afb947bbbac7f7cc18b58958.html @@ -0,0 +1,11 @@ +
+

XBlocks

+

One example of the way the skills and expertise of the open source community enhance the learner experience is the XBlock architecture. Community members have created XBlocks to allow for additional customization in courses, and you can use them too.  XBlocks are "pluggable" components that can be installed to enable additional features in your course. You've already seen some of them in this course! Some of the most popular and useful XBlocks include:

+
    +
  • Google Drive - Embed Google Documents or Google Calendar within your course
  • +
  • H5P - Host and play H5P content in your Open edX® instance.
  • +
  • Choose your own Adventure - Create a simple choose your own adventure style simulation.
  • +
  • SCORM - Host and run SCORM content in your Open edX® instance. It will save student state and report scores to the progress tab of the course. Currently supports SCORM 1.2 and SCORM 2004 standard.
  • +
+

Most XBlocks are built in such a way that they can easily plug into the Open edX platform, enabling you to add tools without requiring extensive integration efforts. To find more XBlocks that you can add to your platform, check out the XBlock Directory. If you are interested in creating your own custom functionality via XBlocks, check out this introduction to XBlock development.

+
\ No newline at end of file diff --git a/demo-course/course/html/0f594fe7afb947bbbac7f7cc18b58958.xml b/demo-course/course/html/0f594fe7afb947bbbac7f7cc18b58958.xml new file mode 100644 index 0000000..00e0989 --- /dev/null +++ b/demo-course/course/html/0f594fe7afb947bbbac7f7cc18b58958.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/1001a658c8c643dc80f02a00cf434c65.html b/demo-course/course/html/1001a658c8c643dc80f02a00cf434c65.html new file mode 100644 index 0000000..23308b0 --- /dev/null +++ b/demo-course/course/html/1001a658c8c643dc80f02a00cf434c65.html @@ -0,0 +1,9 @@ +
+
+

SCORM, or Sharable Content Object Reference Model, is another educational standard for sharing learning objects. SCORM is an output format used by many popular authoring tools such as Articulate 360 and Adobe Captivate, allowing you to inject powerful custom content into your Open edX courses using the SCORM XBlock.

+

We strongly recommend using SCORM support to embed individual learning activities where possible rather than full courses, as this allows you to use interactive SCORM tools to augment your learning experiences, rather than replacing them! This provides your learners with the best of both worlds.

+
+

menu_bookDocumentation 

+
+
+
\ No newline at end of file diff --git a/demo-course/course/html/1001a658c8c643dc80f02a00cf434c65.xml b/demo-course/course/html/1001a658c8c643dc80f02a00cf434c65.xml new file mode 100644 index 0000000..4ddde88 --- /dev/null +++ b/demo-course/course/html/1001a658c8c643dc80f02a00cf434c65.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/1092b3e345d14a1d9e60901f8e103ed9.html b/demo-course/course/html/1092b3e345d14a1d9e60901f8e103ed9.html new file mode 100644 index 0000000..43dcc9a --- /dev/null +++ b/demo-course/course/html/1092b3e345d14a1d9e60901f8e103ed9.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/1092b3e345d14a1d9e60901f8e103ed9.xml b/demo-course/course/html/1092b3e345d14a1d9e60901f8e103ed9.xml new file mode 100644 index 0000000..834e126 --- /dev/null +++ b/demo-course/course/html/1092b3e345d14a1d9e60901f8e103ed9.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/115778d323ec4aa78a395154e1e35c0d.html b/demo-course/course/html/115778d323ec4aa78a395154e1e35c0d.html new file mode 100644 index 0000000..048a68f --- /dev/null +++ b/demo-course/course/html/115778d323ec4aa78a395154e1e35c0d.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/html/115778d323ec4aa78a395154e1e35c0d.xml b/demo-course/course/html/115778d323ec4aa78a395154e1e35c0d.xml new file mode 100644 index 0000000..6e3b19c --- /dev/null +++ b/demo-course/course/html/115778d323ec4aa78a395154e1e35c0d.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/143e1b1c017d4cb5b1055b2451ae4f15.html b/demo-course/course/html/143e1b1c017d4cb5b1055b2451ae4f15.html new file mode 100644 index 0000000..297d8f3 --- /dev/null +++ b/demo-course/course/html/143e1b1c017d4cb5b1055b2451ae4f15.html @@ -0,0 +1,37 @@ +
+

The assessment tools we'll be looking at in this subsection are as follows:

+
+
+ + + + + + + + + + + + + + + + + + + +
Component TypeExample(s)
Interactive Periodic Table +
    +
  • Explore the elements of the periodic table with detailed information about each element
  • +
+
Electric Circuit Simulator +
    +
  • Design an electronic circuit
  • +
+
Protein Creator +
    +
  •  Create a protein shape by using the building blocks of proteins and amino acids
  • +
+
+
\ No newline at end of file diff --git a/demo-course/course/html/143e1b1c017d4cb5b1055b2451ae4f15.xml b/demo-course/course/html/143e1b1c017d4cb5b1055b2451ae4f15.xml new file mode 100644 index 0000000..0b28961 --- /dev/null +++ b/demo-course/course/html/143e1b1c017d4cb5b1055b2451ae4f15.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/167d94be902c4ed783b3f1e4104034aa.html b/demo-course/course/html/167d94be902c4ed783b3f1e4104034aa.html new file mode 100644 index 0000000..048a68f --- /dev/null +++ b/demo-course/course/html/167d94be902c4ed783b3f1e4104034aa.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/html/167d94be902c4ed783b3f1e4104034aa.xml b/demo-course/course/html/167d94be902c4ed783b3f1e4104034aa.xml new file mode 100644 index 0000000..ea1f705 --- /dev/null +++ b/demo-course/course/html/167d94be902c4ed783b3f1e4104034aa.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/16fe7737394d4eb7872d79b9159cb513.html b/demo-course/course/html/16fe7737394d4eb7872d79b9159cb513.html new file mode 100644 index 0000000..c5a834e --- /dev/null +++ b/demo-course/course/html/16fe7737394d4eb7872d79b9159cb513.html @@ -0,0 +1,11 @@ +
+

Course Outline

+

The course outline (which you'll find if you click the "Course" link in the top left) shows an overview of the entire course and your progress throughout it. You'll notice that there are green checkmarks shown throughout the course (if they're not, please ask your site administrator to enable learner progress tracking!). These allow the learner to see the content they have completed throughout the course. A green check means that all components in a given unit are marked as complete, and if all units are marked as complete, the subsection will be marked as complete, and so on. Completion means something different for each component, but generally:

+
    +
  • If a component is interactive or graded, you'll need to submit a response for it to be considered completed
  • +
  • If the content is simply HTML, it just has to have loaded for a few seconds
  • +
  • If the content is a video, you'll need to watch at least 95% of the video for it to be considered complete
  • +
+

Completion measures can be tweaked from the backend, so if you want to change them for all learners, speak with your site administrator!

+
Screenshot of Open edX course outline showing sections and subsections with green progress checks
+
\ No newline at end of file diff --git a/demo-course/course/html/16fe7737394d4eb7872d79b9159cb513.xml b/demo-course/course/html/16fe7737394d4eb7872d79b9159cb513.xml new file mode 100644 index 0000000..91b1438 --- /dev/null +++ b/demo-course/course/html/16fe7737394d4eb7872d79b9159cb513.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/173842b2bea048c797e53a9ace870471.html b/demo-course/course/html/173842b2bea048c797e53a9ace870471.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/173842b2bea048c797e53a9ace870471.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/173842b2bea048c797e53a9ace870471.xml b/demo-course/course/html/173842b2bea048c797e53a9ace870471.xml new file mode 100644 index 0000000..a537662 --- /dev/null +++ b/demo-course/course/html/173842b2bea048c797e53a9ace870471.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/18e2f6127df949c59954c26354aa32d8.html b/demo-course/course/html/18e2f6127df949c59954c26354aa32d8.html new file mode 100644 index 0000000..4706065 --- /dev/null +++ b/demo-course/course/html/18e2f6127df949c59954c26354aa32d8.html @@ -0,0 +1,7 @@ +

To access the Raw HTML editor, you can either select the Raw HTML template when inserting your HTML component:

+

A list of templates for HTML components, with 'Raw HTML' highlighted.

+

Or select HTML from within the editor itself:

+

The editing view of an HTML component. The button 'HTML' is highlighted on the far right end of the toolbar

+

Either way, you'll end up with the HTML editor, which looks something like this for this component.

+

A screenshot of a simple HTML editor. The HTML within lays out the text and images of the component that you are currently reading, including this alternative text.

+

If you've got the skills, the flexibility of HTML will let you build it in Studio.

\ No newline at end of file diff --git a/demo-course/course/html/18e2f6127df949c59954c26354aa32d8.xml b/demo-course/course/html/18e2f6127df949c59954c26354aa32d8.xml new file mode 100644 index 0000000..29d5872 --- /dev/null +++ b/demo-course/course/html/18e2f6127df949c59954c26354aa32d8.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/19ab5d2f4c9241a3855ef1a9ed5460fb.html b/demo-course/course/html/19ab5d2f4c9241a3855ef1a9ed5460fb.html new file mode 100644 index 0000000..984e05b --- /dev/null +++ b/demo-course/course/html/19ab5d2f4c9241a3855ef1a9ed5460fb.html @@ -0,0 +1,10 @@ +
+

Learn More

+

There is lots to learn about Studio. You will gain a high level understanding of the various content, assessment, and social learning tools available to you by taking this course, but you can also review the Open edX Studio documentation for more details: 

+

menu_book Documentation

+

Additionally, there are free, on-demand courses available on edX.org on how to use studio: 

+

StudioX: Creating a Course with edX Studio

+

Studio Advanced: Expanded Course Creation Techniques

+

Finally, you can access a public Open edX® platform sandbox with studio access. Ideal for scenarios where you can't use your own instance or want to share the Open edX® experience with someone outside of your institution: 

+

Open edX® Sandbox

+
\ No newline at end of file diff --git a/demo-course/course/html/19ab5d2f4c9241a3855ef1a9ed5460fb.xml b/demo-course/course/html/19ab5d2f4c9241a3855ef1a9ed5460fb.xml new file mode 100644 index 0000000..7fa0ab1 --- /dev/null +++ b/demo-course/course/html/19ab5d2f4c9241a3855ef1a9ed5460fb.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/1a68f0a492c14451acbdef1f87a2e567.html b/demo-course/course/html/1a68f0a492c14451acbdef1f87a2e567.html new file mode 100644 index 0000000..1b20412 --- /dev/null +++ b/demo-course/course/html/1a68f0a492c14451acbdef1f87a2e567.html @@ -0,0 +1,5 @@ +
+

Learning Sequence

+

The learning sequence is where a subsection of content is displayed to learners. It's where you are now, in fact! Each unit forms a page of the learning sequence and provides a linear experience through the area of the course that the learner is currently studying.

+
An open edx learning sequence navigation bar showing four units. One is completed.
+
\ No newline at end of file diff --git a/demo-course/course/html/1a68f0a492c14451acbdef1f87a2e567.xml b/demo-course/course/html/1a68f0a492c14451acbdef1f87a2e567.xml new file mode 100644 index 0000000..3e31fbf --- /dev/null +++ b/demo-course/course/html/1a68f0a492c14451acbdef1f87a2e567.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/1b6d50cee32745e58c29e10e2789fcad.html b/demo-course/course/html/1b6d50cee32745e58c29e10e2789fcad.html new file mode 100644 index 0000000..bea137e --- /dev/null +++ b/demo-course/course/html/1b6d50cee32745e58c29e10e2789fcad.html @@ -0,0 +1,4 @@ +
+

Welcome, Group A!

+

You're seeing this special message because you're in Group A, and you're definitely my favorite group of learners.

+
\ No newline at end of file diff --git a/demo-course/course/html/1b6d50cee32745e58c29e10e2789fcad.xml b/demo-course/course/html/1b6d50cee32745e58c29e10e2789fcad.xml new file mode 100644 index 0000000..faef304 --- /dev/null +++ b/demo-course/course/html/1b6d50cee32745e58c29e10e2789fcad.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/1d752c400aba4e39ba75f7ae1d582441.html b/demo-course/course/html/1d752c400aba4e39ba75f7ae1d582441.html new file mode 100644 index 0000000..468d3cb --- /dev/null +++ b/demo-course/course/html/1d752c400aba4e39ba75f7ae1d582441.html @@ -0,0 +1,40 @@ +
+

The social learning tools we'll be looking at in this subsection are as follows:

+

+ + + + + + + + + + + + + + + + + + + +
Component TypeExample(s)
Polls +
    +
  • Gather student responses to a poll question with pre-defined options. 
  • +
  • Results can be public to all students or private only to course staff.
  • +
+
Surveys +
    +
  • Gather student responses to a survey with several questions. 
  • +
  • Results can be public to all students or private only to course staff.
  • +
+
Peer Assessment +
    +
  • Students answer questions about a shared reading. In peer grading, student receive feedback and also get a chance to see how their peers interpreted the reading. 
  • +
  • Students submit a link to a video presentation, and are given feedback by their peers. 
  • +
  • Students submit an essay in a foreign language, and are assessed by their peers for vocabulary, grammar, and overall writing. 
  • +
+
+
\ No newline at end of file diff --git a/demo-course/course/html/1d752c400aba4e39ba75f7ae1d582441.xml b/demo-course/course/html/1d752c400aba4e39ba75f7ae1d582441.xml new file mode 100644 index 0000000..ecf911c --- /dev/null +++ b/demo-course/course/html/1d752c400aba4e39ba75f7ae1d582441.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/1da25c5f0de340de95336b5f0dc35832.html b/demo-course/course/html/1da25c5f0de340de95336b5f0dc35832.html new file mode 100644 index 0000000..af1e914 --- /dev/null +++ b/demo-course/course/html/1da25c5f0de340de95336b5f0dc35832.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/1da25c5f0de340de95336b5f0dc35832.xml b/demo-course/course/html/1da25c5f0de340de95336b5f0dc35832.xml new file mode 100644 index 0000000..b9d9588 --- /dev/null +++ b/demo-course/course/html/1da25c5f0de340de95336b5f0dc35832.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/1dfb67930c744dbbae5660652a16bd6e.html b/demo-course/course/html/1dfb67930c744dbbae5660652a16bd6e.html new file mode 100644 index 0000000..a48552b --- /dev/null +++ b/demo-course/course/html/1dfb67930c744dbbae5660652a16bd6e.html @@ -0,0 +1,12 @@ +
+
+

Contribute

+
+
+

An open source community relies on contributions from the community. You can contribute in a number of ways from adding to the platform's code to helping with documentation to providing ideas and suggestions for new features. 

+

If you're a developer, or have access to a development team who will be making improvements to the ever-growing Open edX platform, you can help the platform evolve by contributing your bug fixes, features, XBlocks, and improvements back into the open source community. To learn more, check out the Contributing to Open edX documentation.

+

If you're not a developer, we still want you to contribute to the community! You could contribute to the platform documentation or keep an eye on the Slack channels and discussion forums for opportunities to share your feedback on various features, do some user testing, or provide suggestions for new features. 

+

Contributors who remain active and regular over a longer period of time can be recognized as core contributors to the Open edX® community.

+

You can learn more about contributing and the core contributor program here. 

+
+
\ No newline at end of file diff --git a/demo-course/course/html/1dfb67930c744dbbae5660652a16bd6e.xml b/demo-course/course/html/1dfb67930c744dbbae5660652a16bd6e.xml new file mode 100644 index 0000000..971b0ed --- /dev/null +++ b/demo-course/course/html/1dfb67930c744dbbae5660652a16bd6e.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/1e53adefe9494b3ea1ebf7b01a89f56a.html b/demo-course/course/html/1e53adefe9494b3ea1ebf7b01a89f56a.html new file mode 100644 index 0000000..2ca8acd --- /dev/null +++ b/demo-course/course/html/1e53adefe9494b3ea1ebf7b01a89f56a.html @@ -0,0 +1,4 @@ +
+

Attribution

+

"Storyline 360 Sample course" provided by e-Learning Heroes. Available at https://community.articulate.com/discussions/articulate-storyline/looking-for-example-scorms-for-an-lms.

+
\ No newline at end of file diff --git a/demo-course/course/html/1e53adefe9494b3ea1ebf7b01a89f56a.xml b/demo-course/course/html/1e53adefe9494b3ea1ebf7b01a89f56a.xml new file mode 100644 index 0000000..94f4748 --- /dev/null +++ b/demo-course/course/html/1e53adefe9494b3ea1ebf7b01a89f56a.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/1e75b1cb182a41f09ee1a1f77da5198d.html b/demo-course/course/html/1e75b1cb182a41f09ee1a1f77da5198d.html new file mode 100644 index 0000000..c3e5ebd --- /dev/null +++ b/demo-course/course/html/1e75b1cb182a41f09ee1a1f77da5198d.html @@ -0,0 +1,5 @@ +
+

Troubleshooting

+

If you don't see two random questions, then the library was likely not imported along with the course. Library objects are separate from course objects, which is one of the reasons why they can be referenced by several different courses. 

+

Not to worry, you can follow the video and the "Try It" section below to import a library, or try creating your own. 

+
\ No newline at end of file diff --git a/demo-course/course/html/1e75b1cb182a41f09ee1a1f77da5198d.xml b/demo-course/course/html/1e75b1cb182a41f09ee1a1f77da5198d.xml new file mode 100644 index 0000000..5bdc56f --- /dev/null +++ b/demo-course/course/html/1e75b1cb182a41f09ee1a1f77da5198d.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/1fa75541b9b9433b98153b2f36a0da23.html b/demo-course/course/html/1fa75541b9b9433b98153b2f36a0da23.html new file mode 100644 index 0000000..c85b46c --- /dev/null +++ b/demo-course/course/html/1fa75541b9b9433b98153b2f36a0da23.html @@ -0,0 +1,4 @@ +
+

Welcome, Group B!

+

You're seeing this special message because you're in Group B, and you're definitely my favorite group of learners. Don't believe anyone in Group A who tells you otherwise.

+
\ No newline at end of file diff --git a/demo-course/course/html/1fa75541b9b9433b98153b2f36a0da23.xml b/demo-course/course/html/1fa75541b9b9433b98153b2f36a0da23.xml new file mode 100644 index 0000000..1cc5ad2 --- /dev/null +++ b/demo-course/course/html/1fa75541b9b9433b98153b2f36a0da23.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/20c5a892c6fa4bc697b9887cf4267592.html b/demo-course/course/html/20c5a892c6fa4bc697b9887cf4267592.html new file mode 100644 index 0000000..ac4109b --- /dev/null +++ b/demo-course/course/html/20c5a892c6fa4bc697b9887cf4267592.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/20c5a892c6fa4bc697b9887cf4267592.xml b/demo-course/course/html/20c5a892c6fa4bc697b9887cf4267592.xml new file mode 100644 index 0000000..d94c377 --- /dev/null +++ b/demo-course/course/html/20c5a892c6fa4bc697b9887cf4267592.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/20f689ce47c2413697fccf4935622da1.html b/demo-course/course/html/20f689ce47c2413697fccf4935622da1.html new file mode 100644 index 0000000..fd16333 --- /dev/null +++ b/demo-course/course/html/20f689ce47c2413697fccf4935622da1.html @@ -0,0 +1,4 @@ +
+

Try it!

+

Try out the problems below! In the second example, you'll receive adaptive hints if you select any wrong answers or miss a correct answer.

+
\ No newline at end of file diff --git a/demo-course/course/html/20f689ce47c2413697fccf4935622da1.xml b/demo-course/course/html/20f689ce47c2413697fccf4935622da1.xml new file mode 100644 index 0000000..2d794b6 --- /dev/null +++ b/demo-course/course/html/20f689ce47c2413697fccf4935622da1.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/21ca4c53f6864d16812c51db0d99e171.html b/demo-course/course/html/21ca4c53f6864d16812c51db0d99e171.html new file mode 100644 index 0000000..c83196f --- /dev/null +++ b/demo-course/course/html/21ca4c53f6864d16812c51db0d99e171.html @@ -0,0 +1,5 @@ +
+

Try it!

+

The first problem is a simple example of a custom Python-powered problem. The values of x and y integers between 0 and 20 that are randomly generated integers for each student. 

+

The second problem is an example of a problem that adjusts based on student inputs. The student can choose the size of their group and all the resulting answers adjust based on that selection. In addition, the second problem demonstrates partial grading and feedback for specific input fields. 

+
\ No newline at end of file diff --git a/demo-course/course/html/21ca4c53f6864d16812c51db0d99e171.xml b/demo-course/course/html/21ca4c53f6864d16812c51db0d99e171.xml new file mode 100644 index 0000000..f5e654b --- /dev/null +++ b/demo-course/course/html/21ca4c53f6864d16812c51db0d99e171.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/21d9723b06224af5b5a2cc2edfde7226.html b/demo-course/course/html/21d9723b06224af5b5a2cc2edfde7226.html new file mode 100644 index 0000000..1fe969c --- /dev/null +++ b/demo-course/course/html/21d9723b06224af5b5a2cc2edfde7226.html @@ -0,0 +1,43 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/21d9723b06224af5b5a2cc2edfde7226.xml b/demo-course/course/html/21d9723b06224af5b5a2cc2edfde7226.xml new file mode 100644 index 0000000..95e2af4 --- /dev/null +++ b/demo-course/course/html/21d9723b06224af5b5a2cc2edfde7226.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/2340901b5a114beebc730a90800361a9.html b/demo-course/course/html/2340901b5a114beebc730a90800361a9.html new file mode 100644 index 0000000..df5f5fd --- /dev/null +++ b/demo-course/course/html/2340901b5a114beebc730a90800361a9.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/2340901b5a114beebc730a90800361a9.xml b/demo-course/course/html/2340901b5a114beebc730a90800361a9.xml new file mode 100644 index 0000000..039e8c7 --- /dev/null +++ b/demo-course/course/html/2340901b5a114beebc730a90800361a9.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/240fae6c3f52468588dbfba00793a4e3.html b/demo-course/course/html/240fae6c3f52468588dbfba00793a4e3.html new file mode 100644 index 0000000..21f00cf --- /dev/null +++ b/demo-course/course/html/240fae6c3f52468588dbfba00793a4e3.html @@ -0,0 +1,3 @@ +
+

Everyone needs a little help sometimes. If you're running into trouble with your Open edX courses, you have a few things that you can try to get un-stuck.

+
\ No newline at end of file diff --git a/demo-course/course/html/240fae6c3f52468588dbfba00793a4e3.xml b/demo-course/course/html/240fae6c3f52468588dbfba00793a4e3.xml new file mode 100644 index 0000000..3843348 --- /dev/null +++ b/demo-course/course/html/240fae6c3f52468588dbfba00793a4e3.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/24243fc0b36d42f895838b9a46df428d.html b/demo-course/course/html/24243fc0b36d42f895838b9a46df428d.html new file mode 100644 index 0000000..0b3750b --- /dev/null +++ b/demo-course/course/html/24243fc0b36d42f895838b9a46df428d.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/24243fc0b36d42f895838b9a46df428d.xml b/demo-course/course/html/24243fc0b36d42f895838b9a46df428d.xml new file mode 100644 index 0000000..bc9b0a0 --- /dev/null +++ b/demo-course/course/html/24243fc0b36d42f895838b9a46df428d.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/244491ffc19c43ce8f048e0c51638542.html b/demo-course/course/html/244491ffc19c43ce8f048e0c51638542.html new file mode 100644 index 0000000..048a68f --- /dev/null +++ b/demo-course/course/html/244491ffc19c43ce8f048e0c51638542.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/html/244491ffc19c43ce8f048e0c51638542.xml b/demo-course/course/html/244491ffc19c43ce8f048e0c51638542.xml new file mode 100644 index 0000000..c57b721 --- /dev/null +++ b/demo-course/course/html/244491ffc19c43ce8f048e0c51638542.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/25621f1e85714aed8a6a4035a5a526f6.html b/demo-course/course/html/25621f1e85714aed8a6a4035a5a526f6.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/25621f1e85714aed8a6a4035a5a526f6.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/25621f1e85714aed8a6a4035a5a526f6.xml b/demo-course/course/html/25621f1e85714aed8a6a4035a5a526f6.xml new file mode 100644 index 0000000..2b28e5f --- /dev/null +++ b/demo-course/course/html/25621f1e85714aed8a6a4035a5a526f6.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/25d5f3d6f2eb4155be6d1d53904e1034.html b/demo-course/course/html/25d5f3d6f2eb4155be6d1d53904e1034.html new file mode 100644 index 0000000..3f17766 --- /dev/null +++ b/demo-course/course/html/25d5f3d6f2eb4155be6d1d53904e1034.html @@ -0,0 +1,9 @@ +
+
+

Drag and Drop activities provide a simple way to ask image-based questions that require learners to drag labels into the correct positions on a background image.

+

While drag and drop activities are inherently visual in their nature, the Open edX drag and drop XBlock is extremely accessible, providing support for keyboard controls and best practices for making the activity completable by vision-impaired users.

+
+

menu_bookDocumentation 

+
+
+
\ No newline at end of file diff --git a/demo-course/course/html/25d5f3d6f2eb4155be6d1d53904e1034.xml b/demo-course/course/html/25d5f3d6f2eb4155be6d1d53904e1034.xml new file mode 100644 index 0000000..6d18936 --- /dev/null +++ b/demo-course/course/html/25d5f3d6f2eb4155be6d1d53904e1034.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/25e760bb3e50476c89fa6e4f8c8cbed5.html b/demo-course/course/html/25e760bb3e50476c89fa6e4f8c8cbed5.html new file mode 100644 index 0000000..c0ebc76 --- /dev/null +++ b/demo-course/course/html/25e760bb3e50476c89fa6e4f8c8cbed5.html @@ -0,0 +1,63 @@ +
+

The assessment tools we'll be looking at in this subsection are as follows:

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Component TypeExample(s)
Drag-and-Drop +
    +
  • Sorting historical events in chronological order.
  • +
  • Matching country flags to their respective countries.
  • +
+
Image Mapped Input ("Point on a Picture") +
    +
  • Identify a specific region of a larger diagram, like the heart in a diagram of the organs.
  • +
  • Identify certain phenomenon in satellite or other mapping images.
  • +
+
Open Response Assessment (ORA) +
    +
  • Submitting an essay to be self-graded and then peer-graded.
  • +
+
Staff-Graded Assignment +
    +
  • An assessment requiring a student upload (e.g. a powerpoint presentation) for staff grading.
  • +
+
Staff-Graded Points +
    +
  • A staff-determined grade that does not require a student upload (e.g. a "participation" score).
  • +
+
'Done' +
    +
  • Marking a video lecture as viewed after completion.
  • +
  • Signifying the end of a self-paced reading module.
  • +
+
+
\ No newline at end of file diff --git a/demo-course/course/html/25e760bb3e50476c89fa6e4f8c8cbed5.xml b/demo-course/course/html/25e760bb3e50476c89fa6e4f8c8cbed5.xml new file mode 100644 index 0000000..ab8f621 --- /dev/null +++ b/demo-course/course/html/25e760bb3e50476c89fa6e4f8c8cbed5.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/2648d66c9fd94c218dd049427d0a4695.html b/demo-course/course/html/2648d66c9fd94c218dd049427d0a4695.html new file mode 100644 index 0000000..5087360 --- /dev/null +++ b/demo-course/course/html/2648d66c9fd94c218dd049427d0a4695.html @@ -0,0 +1,8 @@ +
+
+

A dropdown problem functions similarly to a single-select multiple choice problem but allows learners to select their answer from a dropdown menu, rather than a list.

+
+

menu_bookDocumentation 

+
+
+
\ No newline at end of file diff --git a/demo-course/course/html/2648d66c9fd94c218dd049427d0a4695.xml b/demo-course/course/html/2648d66c9fd94c218dd049427d0a4695.xml new file mode 100644 index 0000000..9edc887 --- /dev/null +++ b/demo-course/course/html/2648d66c9fd94c218dd049427d0a4695.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/2801889b57b34f05be3c940a84136a19.html b/demo-course/course/html/2801889b57b34f05be3c940a84136a19.html new file mode 100644 index 0000000..6f61eda --- /dev/null +++ b/demo-course/course/html/2801889b57b34f05be3c940a84136a19.html @@ -0,0 +1,14 @@ +
+

Prompt:

+

A Chinese proverb states:

+
+

To learn a new language is to have one more window from which to look at the world.

+
Unknown
+

What are the most effective tools and practices you have used to learn a new language?

+
Instructions:
+
    +
  1. Click "Add a Post" to respond to the prompt.
  2. +
  3. Post your contribution in the available text area. 
  4. +
  5. Read and reply to the posts of your peers. 
  6. +
+
\ No newline at end of file diff --git a/demo-course/course/html/2801889b57b34f05be3c940a84136a19.xml b/demo-course/course/html/2801889b57b34f05be3c940a84136a19.xml new file mode 100644 index 0000000..b22f6db --- /dev/null +++ b/demo-course/course/html/2801889b57b34f05be3c940a84136a19.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/28beb8239c564b11ad035ce489ecc160.html b/demo-course/course/html/28beb8239c564b11ad035ce489ecc160.html new file mode 100644 index 0000000..048a68f --- /dev/null +++ b/demo-course/course/html/28beb8239c564b11ad035ce489ecc160.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/html/28beb8239c564b11ad035ce489ecc160.xml b/demo-course/course/html/28beb8239c564b11ad035ce489ecc160.xml new file mode 100644 index 0000000..d1a556e --- /dev/null +++ b/demo-course/course/html/28beb8239c564b11ad035ce489ecc160.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/2942ccd3ee024ca096a96270017d9a70.html b/demo-course/course/html/2942ccd3ee024ca096a96270017d9a70.html new file mode 100644 index 0000000..048a68f --- /dev/null +++ b/demo-course/course/html/2942ccd3ee024ca096a96270017d9a70.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/html/2942ccd3ee024ca096a96270017d9a70.xml b/demo-course/course/html/2942ccd3ee024ca096a96270017d9a70.xml new file mode 100644 index 0000000..731edd2 --- /dev/null +++ b/demo-course/course/html/2942ccd3ee024ca096a96270017d9a70.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/2c67dd8fe6f0498b941ed11180887a8d.html b/demo-course/course/html/2c67dd8fe6f0498b941ed11180887a8d.html new file mode 100644 index 0000000..2a4b540 --- /dev/null +++ b/demo-course/course/html/2c67dd8fe6f0498b941ed11180887a8d.html @@ -0,0 +1,5 @@ +
+

+
\ No newline at end of file diff --git a/demo-course/course/html/2c67dd8fe6f0498b941ed11180887a8d.xml b/demo-course/course/html/2c67dd8fe6f0498b941ed11180887a8d.xml new file mode 100644 index 0000000..76ec575 --- /dev/null +++ b/demo-course/course/html/2c67dd8fe6f0498b941ed11180887a8d.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/2d1debe4a78442979b7117a5bdc96cd4.html b/demo-course/course/html/2d1debe4a78442979b7117a5bdc96cd4.html new file mode 100644 index 0000000..048a68f --- /dev/null +++ b/demo-course/course/html/2d1debe4a78442979b7117a5bdc96cd4.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/html/2d1debe4a78442979b7117a5bdc96cd4.xml b/demo-course/course/html/2d1debe4a78442979b7117a5bdc96cd4.xml new file mode 100644 index 0000000..7a30b6d --- /dev/null +++ b/demo-course/course/html/2d1debe4a78442979b7117a5bdc96cd4.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/2e57c5bece314c38b5a73545fbfe88e8.html b/demo-course/course/html/2e57c5bece314c38b5a73545fbfe88e8.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/2e57c5bece314c38b5a73545fbfe88e8.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/2e57c5bece314c38b5a73545fbfe88e8.xml b/demo-course/course/html/2e57c5bece314c38b5a73545fbfe88e8.xml new file mode 100644 index 0000000..c62dac9 --- /dev/null +++ b/demo-course/course/html/2e57c5bece314c38b5a73545fbfe88e8.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/2f6ee1584ff94a6cbbcb1b1c7db9412a.html b/demo-course/course/html/2f6ee1584ff94a6cbbcb1b1c7db9412a.html new file mode 100644 index 0000000..499c8f7 --- /dev/null +++ b/demo-course/course/html/2f6ee1584ff94a6cbbcb1b1c7db9412a.html @@ -0,0 +1 @@ +

By joining the community, you can gain access to the collective wisdom of all its members and can help our community to grow by adding your own. Here are some of the ways you can join us:

\ No newline at end of file diff --git a/demo-course/course/html/2f6ee1584ff94a6cbbcb1b1c7db9412a.xml b/demo-course/course/html/2f6ee1584ff94a6cbbcb1b1c7db9412a.xml new file mode 100644 index 0000000..b8ab70e --- /dev/null +++ b/demo-course/course/html/2f6ee1584ff94a6cbbcb1b1c7db9412a.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/2f968a00567b42589fcb20b823e2dd0b.html b/demo-course/course/html/2f968a00567b42589fcb20b823e2dd0b.html new file mode 100644 index 0000000..6a525c1 --- /dev/null +++ b/demo-course/course/html/2f968a00567b42589fcb20b823e2dd0b.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/2f968a00567b42589fcb20b823e2dd0b.xml b/demo-course/course/html/2f968a00567b42589fcb20b823e2dd0b.xml new file mode 100644 index 0000000..0a1aa91 --- /dev/null +++ b/demo-course/course/html/2f968a00567b42589fcb20b823e2dd0b.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/303f2de0126a419683abb2be35083380.html b/demo-course/course/html/303f2de0126a419683abb2be35083380.html new file mode 100644 index 0000000..35d4663 --- /dev/null +++ b/demo-course/course/html/303f2de0126a419683abb2be35083380.html @@ -0,0 +1,14 @@ +
+
+

3 Ask the communityan icon representing community

+
+
+

If you can't find the answer to your question anywhere, and your provider isn't able to help, then asking the community is a great way to get a discussion going. If you are having an issue, chances are others are also looking for the answer or have already found a solution that they can share. 

+

There are two main ways to ask a question in the community:

+ +

Make sure you search for keywords related to your question first as it may have already been asked and answered. Please remember to follow the community code of conduct when posting. 

+
+
\ No newline at end of file diff --git a/demo-course/course/html/303f2de0126a419683abb2be35083380.xml b/demo-course/course/html/303f2de0126a419683abb2be35083380.xml new file mode 100644 index 0000000..47735d4 --- /dev/null +++ b/demo-course/course/html/303f2de0126a419683abb2be35083380.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/311b566c613244fd8d8dc95d983f785e.html b/demo-course/course/html/311b566c613244fd8d8dc95d983f785e.html new file mode 100644 index 0000000..dfc9f86 --- /dev/null +++ b/demo-course/course/html/311b566c613244fd8d8dc95d983f785e.html @@ -0,0 +1,66 @@ +
+
+

+ Click here to get the Click to Reveal code

+
+
+
<!--####BEGIN HTML#####-->
<div class="hint-wrapper" id="Hint-title-1" onclick="expandHintFunction(1)"> + <div class="hint-title"> + <h4><span class="icon">+</span> Click here to reveal</h4> + </div> + <div class="hint-body" id="Hint-body-1" style="height: 0px;"> + <p>Your content goes here...</p> + </div> +</div> +<!--####END HTML#####-->

<!--####BEGIN JAVASCRIPT#####-->
<script>
function expandHintFunction(a) { + var x = document.getElementById("Hint-body-" + a); + var y = document.getElementById("Hint-title-" + a).querySelector('.icon'); + + if (x.style.height === "0px" || x.style.Height === "") { + x.style.height = x.scrollHeight + "px"; + y.textContent = '-'; + x.classList.add("expanded"); + } else { + x.style.height = "0px"; + y.textContent = '+'; + x.classList.remove("expanded"); + } +}
</script>
<!--####END JAVASCRIPT#####--> 

<!--####BEGIN CSS#####-->
<style type="text/css">
.hint-wrapper { + border: 1px solid #d7d7d7; + margin-bottom: 20px; + overflow: hidden; /* Keeps the content from being shown when it is animating */ +} + +.hint-title { + padding: 10px; + cursor: pointer; + display: flex; + align-items: center; + background-color: #033769; + padding: 10px; +} + +.hint-title h2, +.hint-title h3, +.hint-title h4, +.hint-title p { +margin-bottom: 0 !important; +color: #fff !important; +} + +.hint-body { + height: 0; + overflow: hidden; + /*Oddly, transition seems to break this. The box gets clipped at the bottom of a unit. */ + /*transition: height 0.4s ease-in-out; */ +} + +.hint-body.expanded { +padding: 10px; +} + +.icon { + margin-right: 10px; +}
<style> +<!--####END CSS#####-->
+
+
\ No newline at end of file diff --git a/demo-course/course/html/311b566c613244fd8d8dc95d983f785e.xml b/demo-course/course/html/311b566c613244fd8d8dc95d983f785e.xml new file mode 100644 index 0000000..27a5b7f --- /dev/null +++ b/demo-course/course/html/311b566c613244fd8d8dc95d983f785e.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/329ed543e9944756874e2f051067de75.html b/demo-course/course/html/329ed543e9944756874e2f051067de75.html new file mode 100644 index 0000000..5ffcbaf --- /dev/null +++ b/demo-course/course/html/329ed543e9944756874e2f051067de75.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/329ed543e9944756874e2f051067de75.xml b/demo-course/course/html/329ed543e9944756874e2f051067de75.xml new file mode 100644 index 0000000..e2e784b --- /dev/null +++ b/demo-course/course/html/329ed543e9944756874e2f051067de75.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/377ae766c6bc482f85f712aa55cf4acf.html b/demo-course/course/html/377ae766c6bc482f85f712aa55cf4acf.html new file mode 100644 index 0000000..048a68f --- /dev/null +++ b/demo-course/course/html/377ae766c6bc482f85f712aa55cf4acf.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/html/377ae766c6bc482f85f712aa55cf4acf.xml b/demo-course/course/html/377ae766c6bc482f85f712aa55cf4acf.xml new file mode 100644 index 0000000..0f60fb5 --- /dev/null +++ b/demo-course/course/html/377ae766c6bc482f85f712aa55cf4acf.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/37b076574319470aa06643087a405266.html b/demo-course/course/html/37b076574319470aa06643087a405266.html new file mode 100644 index 0000000..df6ba70 --- /dev/null +++ b/demo-course/course/html/37b076574319470aa06643087a405266.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/37b076574319470aa06643087a405266.xml b/demo-course/course/html/37b076574319470aa06643087a405266.xml new file mode 100644 index 0000000..42ba794 --- /dev/null +++ b/demo-course/course/html/37b076574319470aa06643087a405266.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/38bdffe7b57341a88ad60585594382d4.html b/demo-course/course/html/38bdffe7b57341a88ad60585594382d4.html new file mode 100644 index 0000000..cdb8434 --- /dev/null +++ b/demo-course/course/html/38bdffe7b57341a88ad60585594382d4.html @@ -0,0 +1,4 @@ +
+

Attribution

+

"Ohm's Law" by PhET Interactive Simulations, University of Colorado Boulder, licensed under CC BY-NC 4.0. Available at https://phet.colorado.edu/en/simulations/ohms-law.

+
\ No newline at end of file diff --git a/demo-course/course/html/38bdffe7b57341a88ad60585594382d4.xml b/demo-course/course/html/38bdffe7b57341a88ad60585594382d4.xml new file mode 100644 index 0000000..51723b9 --- /dev/null +++ b/demo-course/course/html/38bdffe7b57341a88ad60585594382d4.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/399682423344482a810e368d8d336a81.html b/demo-course/course/html/399682423344482a810e368d8d336a81.html new file mode 100644 index 0000000..0653ca3 --- /dev/null +++ b/demo-course/course/html/399682423344482a810e368d8d336a81.html @@ -0,0 +1,2 @@ +

The Open edX® logoThe Open edX® platform is an open-source learning management software (LMS). With it, learning providers can build and deliver learning experiences to their users. It is trusted by providers from all over the world managing thousands of instances to support millions of learners.

+

The Open edX® platform is the product of The Open edX® Project, managed by Axim Collaborative, a nonprofit organization created by education innovators from Harvard and MIT. With their guidance, the project is supported and developed by its passionate open source community of developers, instructional designers, academic institutions, and companies such as Microsoft and IBM. As open source software, The Open edX® platform is freely available to use, remix, and customize. 

\ No newline at end of file diff --git a/demo-course/course/html/399682423344482a810e368d8d336a81.xml b/demo-course/course/html/399682423344482a810e368d8d336a81.xml new file mode 100644 index 0000000..0eb1015 --- /dev/null +++ b/demo-course/course/html/399682423344482a810e368d8d336a81.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/3ab2cc23c77c4f22a8eecb9936ad5c09.html b/demo-course/course/html/3ab2cc23c77c4f22a8eecb9936ad5c09.html new file mode 100644 index 0000000..b0691a7 --- /dev/null +++ b/demo-course/course/html/3ab2cc23c77c4f22a8eecb9936ad5c09.html @@ -0,0 +1 @@ +

Our final batch of assessment tools present in the Open edX platform includes some specialized tools designed for STEM teaching. They're powerful and designed specifically for their chosen subjects, and show off just how powerful and customizable the Open edX platform is for extremely specialized use cases.

\ No newline at end of file diff --git a/demo-course/course/html/3ab2cc23c77c4f22a8eecb9936ad5c09.xml b/demo-course/course/html/3ab2cc23c77c4f22a8eecb9936ad5c09.xml new file mode 100644 index 0000000..e0291d4 --- /dev/null +++ b/demo-course/course/html/3ab2cc23c77c4f22a8eecb9936ad5c09.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/3abeb8a06979456db6fd6d135f5ef636.html b/demo-course/course/html/3abeb8a06979456db6fd6d135f5ef636.html new file mode 100644 index 0000000..adde849 --- /dev/null +++ b/demo-course/course/html/3abeb8a06979456db6fd6d135f5ef636.html @@ -0,0 +1,2 @@ +

Beyond the basic problem types, there are slightly more advanced interactive activities which you can include in your course for both formative activities and summative assessments.

+

As a reminder, while these all return a grade and can be used for assessment, there's nothing that stops you including any these activities as simply interactive learning tools!

\ No newline at end of file diff --git a/demo-course/course/html/3abeb8a06979456db6fd6d135f5ef636.xml b/demo-course/course/html/3abeb8a06979456db6fd6d135f5ef636.xml new file mode 100644 index 0000000..c819885 --- /dev/null +++ b/demo-course/course/html/3abeb8a06979456db6fd6d135f5ef636.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/3b0fa87061544ec2adab9d8f7ebd24a2.html b/demo-course/course/html/3b0fa87061544ec2adab9d8f7ebd24a2.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/3b0fa87061544ec2adab9d8f7ebd24a2.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/3b0fa87061544ec2adab9d8f7ebd24a2.xml b/demo-course/course/html/3b0fa87061544ec2adab9d8f7ebd24a2.xml new file mode 100644 index 0000000..7477fe0 --- /dev/null +++ b/demo-course/course/html/3b0fa87061544ec2adab9d8f7ebd24a2.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/3b9e32e4cf9f44ef9bc9a5c5684d8d00.html b/demo-course/course/html/3b9e32e4cf9f44ef9bc9a5c5684d8d00.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/3b9e32e4cf9f44ef9bc9a5c5684d8d00.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/3b9e32e4cf9f44ef9bc9a5c5684d8d00.xml b/demo-course/course/html/3b9e32e4cf9f44ef9bc9a5c5684d8d00.xml new file mode 100644 index 0000000..c43c72b --- /dev/null +++ b/demo-course/course/html/3b9e32e4cf9f44ef9bc9a5c5684d8d00.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/3d1563d2cc4f4f0ba68bb7abaf574742.html b/demo-course/course/html/3d1563d2cc4f4f0ba68bb7abaf574742.html new file mode 100644 index 0000000..86ed49a --- /dev/null +++ b/demo-course/course/html/3d1563d2cc4f4f0ba68bb7abaf574742.html @@ -0,0 +1,17 @@ + + + + diff --git a/demo-course/course/html/3d1563d2cc4f4f0ba68bb7abaf574742.xml b/demo-course/course/html/3d1563d2cc4f4f0ba68bb7abaf574742.xml new file mode 100644 index 0000000..f97ddde --- /dev/null +++ b/demo-course/course/html/3d1563d2cc4f4f0ba68bb7abaf574742.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/3f20c4da397a445fb39a8857edee98a2.html b/demo-course/course/html/3f20c4da397a445fb39a8857edee98a2.html new file mode 100644 index 0000000..81443c7 --- /dev/null +++ b/demo-course/course/html/3f20c4da397a445fb39a8857edee98a2.html @@ -0,0 +1,69 @@ +
+

The assessment tools we'll be looking at in this subsection are as follows:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Component TypeExample(s)
Python-Evaluated Input +
    +
  • Create flexible problems, case study assessments, simulations or games using Python.
  • +
+
Custom Javascript Problems +
    +
  • Create flexible problems, case study assessments, simulations or games using Javascript.
  • +
+
LTI +
    +
  • Let your students connect with compatible learning experiences across the web without leaving the Open edX® LMS.
  • +
+
Code Grading +
    +
  • Assign and automatically assess programming exercises.
  • +
+
SCORM
+
    +
  • Import complete learning experiences that can be served and graded within the Open edX® LMS.
  • +
+
Randomized Content +
    +
  • Randomly shuffle questions and other content from a problem bank (e.g. for a quiz where you want to discourage answer sharing).
  • +
+
Annotation Problems +
    +
  • Highlight specific text inside a larger text block and then ask questions about that text.
  • +
+
+
\ No newline at end of file diff --git a/demo-course/course/html/3f20c4da397a445fb39a8857edee98a2.xml b/demo-course/course/html/3f20c4da397a445fb39a8857edee98a2.xml new file mode 100644 index 0000000..ed32f24 --- /dev/null +++ b/demo-course/course/html/3f20c4da397a445fb39a8857edee98a2.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/3fffb1ad732e410cbeec57ac50a869f4.html b/demo-course/course/html/3fffb1ad732e410cbeec57ac50a869f4.html new file mode 100644 index 0000000..638416d --- /dev/null +++ b/demo-course/course/html/3fffb1ad732e410cbeec57ac50a869f4.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
diff --git a/demo-course/course/html/3fffb1ad732e410cbeec57ac50a869f4.xml b/demo-course/course/html/3fffb1ad732e410cbeec57ac50a869f4.xml new file mode 100644 index 0000000..be5dc6a --- /dev/null +++ b/demo-course/course/html/3fffb1ad732e410cbeec57ac50a869f4.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/4320c8f0158b473ab18a8a02cad7deaf.html b/demo-course/course/html/4320c8f0158b473ab18a8a02cad7deaf.html new file mode 100644 index 0000000..a4d35a0 --- /dev/null +++ b/demo-course/course/html/4320c8f0158b473ab18a8a02cad7deaf.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/4320c8f0158b473ab18a8a02cad7deaf.xml b/demo-course/course/html/4320c8f0158b473ab18a8a02cad7deaf.xml new file mode 100644 index 0000000..4967d84 --- /dev/null +++ b/demo-course/course/html/4320c8f0158b473ab18a8a02cad7deaf.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/43af79ace3084334bf674132dfde17b4.html b/demo-course/course/html/43af79ace3084334bf674132dfde17b4.html new file mode 100644 index 0000000..17f4a0a --- /dev/null +++ b/demo-course/course/html/43af79ace3084334bf674132dfde17b4.html @@ -0,0 +1,5 @@ + + + + + diff --git a/demo-course/course/html/43af79ace3084334bf674132dfde17b4.xml b/demo-course/course/html/43af79ace3084334bf674132dfde17b4.xml new file mode 100644 index 0000000..e7fd0fc --- /dev/null +++ b/demo-course/course/html/43af79ace3084334bf674132dfde17b4.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/4502a078f72c43dfb5a954bb21a6948c.html b/demo-course/course/html/4502a078f72c43dfb5a954bb21a6948c.html new file mode 100644 index 0000000..ddbdaf2 --- /dev/null +++ b/demo-course/course/html/4502a078f72c43dfb5a954bb21a6948c.html @@ -0,0 +1,18 @@ + + + + + + diff --git a/demo-course/course/html/4502a078f72c43dfb5a954bb21a6948c.xml b/demo-course/course/html/4502a078f72c43dfb5a954bb21a6948c.xml new file mode 100644 index 0000000..5c50113 --- /dev/null +++ b/demo-course/course/html/4502a078f72c43dfb5a954bb21a6948c.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/46ab2518d90741eab3858787f7d33465.html b/demo-course/course/html/46ab2518d90741eab3858787f7d33465.html new file mode 100644 index 0000000..31d17dc --- /dev/null +++ b/demo-course/course/html/46ab2518d90741eab3858787f7d33465.html @@ -0,0 +1,4 @@ +
+

Try it!

+

Click the Discussions tab at the top of the page to go to the main discussion forum. You'll be able to see the discussion you just participated in, as well as the general topics we've set up to demonstrate. Create your choice of a Question or Post in the Off Topic area, and then come back for more social learning tools!

+
\ No newline at end of file diff --git a/demo-course/course/html/46ab2518d90741eab3858787f7d33465.xml b/demo-course/course/html/46ab2518d90741eab3858787f7d33465.xml new file mode 100644 index 0000000..61f8b76 --- /dev/null +++ b/demo-course/course/html/46ab2518d90741eab3858787f7d33465.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/485d767850874a3897f466b7f7be2863.html b/demo-course/course/html/485d767850874a3897f466b7f7be2863.html new file mode 100644 index 0000000..956ffa9 --- /dev/null +++ b/demo-course/course/html/485d767850874a3897f466b7f7be2863.html @@ -0,0 +1,4 @@ +
+

Try it!

+

Vote in the poll below. Note that this poll is not "seeded" so you'll only see results for your instance of this course. 

+
\ No newline at end of file diff --git a/demo-course/course/html/485d767850874a3897f466b7f7be2863.xml b/demo-course/course/html/485d767850874a3897f466b7f7be2863.xml new file mode 100644 index 0000000..c66bc1f --- /dev/null +++ b/demo-course/course/html/485d767850874a3897f466b7f7be2863.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/48d73ae31e9e42009ce7f46528def654.html b/demo-course/course/html/48d73ae31e9e42009ce7f46528def654.html new file mode 100644 index 0000000..d940502 --- /dev/null +++ b/demo-course/course/html/48d73ae31e9e42009ce7f46528def654.html @@ -0,0 +1,18 @@ +
+

Teams allow your learners to join student-formed or staff-assigned small groups for interaction and collaboration on activities.

+
+

A page in Open edx with a selection of team titles that a user can choose from

+
+

There three variations to the way learners join teams:

+
    +
  • Open sets up a team group where learner can create, join, leave, and see all teams within the group.
  • +
  • Public managed allows only course staff to control team creation and membership. Learners can see other teams but cannot join or leave their team.
  • +
  • Private managed allows only course staff to control team creation and membership. Additionally, learners can only see the teams they are members of, unlike other options that give them visibility into other teams. This type is helpful in particular if team assignments are being used in a course.
  • +
+

Staff can monitor and moderate the small discussion area that is provided to each team, as well as promoting team members to Group Discussion TAs who gain limited moderation rights over their fellow teammates. This allows your learners to take control of group discussions for themselves, under a team leader.

+

For more information about the Teams feature, check out the documentation.

+
+

Try it!

+

Navigate to the "Teams" tab at the top of this course. Enter a pre-built topic (Social or Study) and try to create a public team. 

+
+
\ No newline at end of file diff --git a/demo-course/course/html/48d73ae31e9e42009ce7f46528def654.xml b/demo-course/course/html/48d73ae31e9e42009ce7f46528def654.xml new file mode 100644 index 0000000..b5b0b30 --- /dev/null +++ b/demo-course/course/html/48d73ae31e9e42009ce7f46528def654.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/4961612a17ac4f8697fedc528e79064f.html b/demo-course/course/html/4961612a17ac4f8697fedc528e79064f.html new file mode 100644 index 0000000..5c6994d --- /dev/null +++ b/demo-course/course/html/4961612a17ac4f8697fedc528e79064f.html @@ -0,0 +1,5 @@ +
+

Learner Progress Page

+

The learner progress page displays information to the learner about their progress through the course, as well as their performance on graded activities. You can access yours by clicking the Progress button at the top of this page.

+
A screenshot of an edx Progress page showing 63% completion
+
\ No newline at end of file diff --git a/demo-course/course/html/4961612a17ac4f8697fedc528e79064f.xml b/demo-course/course/html/4961612a17ac4f8697fedc528e79064f.xml new file mode 100644 index 0000000..0166e1f --- /dev/null +++ b/demo-course/course/html/4961612a17ac4f8697fedc528e79064f.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/4964823174f444349526d4b232dba0c2.html b/demo-course/course/html/4964823174f444349526d4b232dba0c2.html new file mode 100644 index 0000000..d5d2668 --- /dev/null +++ b/demo-course/course/html/4964823174f444349526d4b232dba0c2.html @@ -0,0 +1,9 @@ +
+
+

LTI, or Learning Tools Interoperability, allows you to establish a secure connection between your LMS and another tool, allowing your learners to securely transfer the data necessary to complete an activity in an external learning tool without having to register. This also allows you to pass grades and other data between the two tools, making it invaluable for technical integrations. LTI is a standard across the learning industry and requires that the tool being used provides support for this type of connection, but this provides access to a huge number of potential learning tools available for your courses.

+

As of December 2023, the Open edX platform supports LTI 1.1 and LTI 1.3.

+
+

menu_bookDocumentation 

+
+
+
\ No newline at end of file diff --git a/demo-course/course/html/4964823174f444349526d4b232dba0c2.xml b/demo-course/course/html/4964823174f444349526d4b232dba0c2.xml new file mode 100644 index 0000000..51c787a --- /dev/null +++ b/demo-course/course/html/4964823174f444349526d4b232dba0c2.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/49bb433c39564ab0874b9dbdea5a8b6f.html b/demo-course/course/html/49bb433c39564ab0874b9dbdea5a8b6f.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/49bb433c39564ab0874b9dbdea5a8b6f.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/49bb433c39564ab0874b9dbdea5a8b6f.xml b/demo-course/course/html/49bb433c39564ab0874b9dbdea5a8b6f.xml new file mode 100644 index 0000000..1c1bf86 --- /dev/null +++ b/demo-course/course/html/49bb433c39564ab0874b9dbdea5a8b6f.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/49ffc6e78c1f457b9e4a970cf80e86ef.html b/demo-course/course/html/49ffc6e78c1f457b9e4a970cf80e86ef.html new file mode 100644 index 0000000..13b4cb8 --- /dev/null +++ b/demo-course/course/html/49ffc6e78c1f457b9e4a970cf80e86ef.html @@ -0,0 +1,3 @@ +

A Thank you image with happy people and the Open edX Logo

+

You've reached the end of the course! Hopefully you've learned a lot about the structure and capabilities of Open edX and how it can support your educational goals.

+

Once again, welcome to the Open edX® learning management system!

\ No newline at end of file diff --git a/demo-course/course/html/49ffc6e78c1f457b9e4a970cf80e86ef.xml b/demo-course/course/html/49ffc6e78c1f457b9e4a970cf80e86ef.xml new file mode 100644 index 0000000..73fe1f9 --- /dev/null +++ b/demo-course/course/html/49ffc6e78c1f457b9e4a970cf80e86ef.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/4b7ec0cd7d5f4bd4b52f7bfeb1b04fb4.html b/demo-course/course/html/4b7ec0cd7d5f4bd4b52f7bfeb1b04fb4.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/4b7ec0cd7d5f4bd4b52f7bfeb1b04fb4.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/4b7ec0cd7d5f4bd4b52f7bfeb1b04fb4.xml b/demo-course/course/html/4b7ec0cd7d5f4bd4b52f7bfeb1b04fb4.xml new file mode 100644 index 0000000..4de782b --- /dev/null +++ b/demo-course/course/html/4b7ec0cd7d5f4bd4b52f7bfeb1b04fb4.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/4c23d094a3ee4145bf864cad70f23f67.html b/demo-course/course/html/4c23d094a3ee4145bf864cad70f23f67.html new file mode 100644 index 0000000..8e11b04 --- /dev/null +++ b/demo-course/course/html/4c23d094a3ee4145bf864cad70f23f67.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
diff --git a/demo-course/course/html/4c23d094a3ee4145bf864cad70f23f67.xml b/demo-course/course/html/4c23d094a3ee4145bf864cad70f23f67.xml new file mode 100644 index 0000000..d449eaf --- /dev/null +++ b/demo-course/course/html/4c23d094a3ee4145bf864cad70f23f67.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/4c2a70c10a3547cf8a19c558946fc887.html b/demo-course/course/html/4c2a70c10a3547cf8a19c558946fc887.html new file mode 100644 index 0000000..4378a6d --- /dev/null +++ b/demo-course/course/html/4c2a70c10a3547cf8a19c558946fc887.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/4c2a70c10a3547cf8a19c558946fc887.xml b/demo-course/course/html/4c2a70c10a3547cf8a19c558946fc887.xml new file mode 100644 index 0000000..c9c75ed --- /dev/null +++ b/demo-course/course/html/4c2a70c10a3547cf8a19c558946fc887.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/4d5baeb302b6401988c7d016de4b0443.html b/demo-course/course/html/4d5baeb302b6401988c7d016de4b0443.html new file mode 100644 index 0000000..eaf5a04 --- /dev/null +++ b/demo-course/course/html/4d5baeb302b6401988c7d016de4b0443.html @@ -0,0 +1,6 @@ +
+

Try it!

+

We've included two sample JavaScript problems below for you to try.

+

The first is a demonstration of a very simple Javascript application that is hosted elsewhere that can send a grade and feedback back to the platform. It can be used as a template for building your own Javascript exercises. 

+

The second assessment is a "choose-your-own-adventure" style simulation in which you play the role of a doctor diagnosing a patient. This is built in a free tool called Twinery as an example of the kinds of interactive exercises that can be built using just HTML, CSS, and Javascript. It demonstrates partial credit and adaptive feedback based on how a learner progresses through the exercise. 

+
\ No newline at end of file diff --git a/demo-course/course/html/4d5baeb302b6401988c7d016de4b0443.xml b/demo-course/course/html/4d5baeb302b6401988c7d016de4b0443.xml new file mode 100644 index 0000000..90697ed --- /dev/null +++ b/demo-course/course/html/4d5baeb302b6401988c7d016de4b0443.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/4ddc95dc381743b5828a249091741881.html b/demo-course/course/html/4ddc95dc381743b5828a249091741881.html new file mode 100644 index 0000000..face5c8 --- /dev/null +++ b/demo-course/course/html/4ddc95dc381743b5828a249091741881.html @@ -0,0 +1 @@ +

A step beyond the simplicity of the WYSIWYG editor is the Raw HTML component which allows you to use HTML, CSS, and Javascript to create highly flexible content that looks good, excites your learners, and keeps them engaged and coming back to your courses. Unlike many learning platforms, the Open edX platform does not restrict authors in terms of what can be used in HTML components. If you can build it, the platform will not stop you. But use judgement and consider consulting with a web design expert. When used correctly, custom HTML, CSS and Javascript can be powerful tools for a course developer. But they can also lead to experiences that are inaccessible, unpleasant or even insecure to the learner and the provider. 

\ No newline at end of file diff --git a/demo-course/course/html/4ddc95dc381743b5828a249091741881.xml b/demo-course/course/html/4ddc95dc381743b5828a249091741881.xml new file mode 100644 index 0000000..4d8e168 --- /dev/null +++ b/demo-course/course/html/4ddc95dc381743b5828a249091741881.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/4e21c85cda3c429bb552726ee6df1a1a.html b/demo-course/course/html/4e21c85cda3c429bb552726ee6df1a1a.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/4e21c85cda3c429bb552726ee6df1a1a.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/4e21c85cda3c429bb552726ee6df1a1a.xml b/demo-course/course/html/4e21c85cda3c429bb552726ee6df1a1a.xml new file mode 100644 index 0000000..4c3b40a --- /dev/null +++ b/demo-course/course/html/4e21c85cda3c429bb552726ee6df1a1a.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/4f8c257183224e61a91e444738263ccb.html b/demo-course/course/html/4f8c257183224e61a91e444738263ccb.html new file mode 100644 index 0000000..0abb17f --- /dev/null +++ b/demo-course/course/html/4f8c257183224e61a91e444738263ccb.html @@ -0,0 +1,4 @@ +
+

Try it!

+

In the example below the shape that you are asked to form is a simple line. Try it out! Remember to click fold before you check your answer.

+
\ No newline at end of file diff --git a/demo-course/course/html/4f8c257183224e61a91e444738263ccb.xml b/demo-course/course/html/4f8c257183224e61a91e444738263ccb.xml new file mode 100644 index 0000000..9c7f130 --- /dev/null +++ b/demo-course/course/html/4f8c257183224e61a91e444738263ccb.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/51ef861f65a84bed8b64133cdd1dd074.html b/demo-course/course/html/51ef861f65a84bed8b64133cdd1dd074.html new file mode 100644 index 0000000..99c6994 --- /dev/null +++ b/demo-course/course/html/51ef861f65a84bed8b64133cdd1dd074.html @@ -0,0 +1,4 @@ +
+

Try it!

+

Try out this problem type by completing the problem below.

+
\ No newline at end of file diff --git a/demo-course/course/html/51ef861f65a84bed8b64133cdd1dd074.xml b/demo-course/course/html/51ef861f65a84bed8b64133cdd1dd074.xml new file mode 100644 index 0000000..899e900 --- /dev/null +++ b/demo-course/course/html/51ef861f65a84bed8b64133cdd1dd074.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/52bb9cc38eec46d293106427529f970a.html b/demo-course/course/html/52bb9cc38eec46d293106427529f970a.html new file mode 100644 index 0000000..fe88262 --- /dev/null +++ b/demo-course/course/html/52bb9cc38eec46d293106427529f970a.html @@ -0,0 +1,8 @@ +
+
+

The Staff-Graded Points does not require a student submission. It exists to allow a staff to grant points directly to learners! This is useful in instructor-led courses where learners are expected to complete an activity outside of the platform, conduct an activity that can't be graded or to award your learners points for other participation such as contributions to your discussion forum community.

+
+

menu_bookDocumentation 

+
+
+
\ No newline at end of file diff --git a/demo-course/course/html/52bb9cc38eec46d293106427529f970a.xml b/demo-course/course/html/52bb9cc38eec46d293106427529f970a.xml new file mode 100644 index 0000000..4997fde --- /dev/null +++ b/demo-course/course/html/52bb9cc38eec46d293106427529f970a.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/5504334e25b148888774fd7145fdaf54.html b/demo-course/course/html/5504334e25b148888774fd7145fdaf54.html new file mode 100644 index 0000000..b0df58e --- /dev/null +++ b/demo-course/course/html/5504334e25b148888774fd7145fdaf54.html @@ -0,0 +1,10 @@ +
+

This flexibility means that you can provide different course experiences for your learners in different cohorts without having to start an entirely separate course run.  Some examples of how this can be useful include:

+
    +
  • Providing different viewpoints on issues or questions to learners through different video case studies, then inviting them to discuss or debate their perspectives
  • +
  • Delivering context-specific content to learners based on their specializations, such as different programming languages or job roles
  • +
  • Performing research on the efficacy of different learning materials in a live course setting
  • +
  •  Conducting different assessments based on different subsets of users, such as learners who have paid for access to additional content
  • +
+

Content groups can be assigned at both the component and the unit level, so the difference can be as small as a single component, or an entire page of content, giving you the flexibility to hand-craft your experience for different cohorts.

+
\ No newline at end of file diff --git a/demo-course/course/html/5504334e25b148888774fd7145fdaf54.xml b/demo-course/course/html/5504334e25b148888774fd7145fdaf54.xml new file mode 100644 index 0000000..209d7f8 --- /dev/null +++ b/demo-course/course/html/5504334e25b148888774fd7145fdaf54.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/557a067dcde747fa8a12d117304eb957.html b/demo-course/course/html/557a067dcde747fa8a12d117304eb957.html new file mode 100644 index 0000000..048a68f --- /dev/null +++ b/demo-course/course/html/557a067dcde747fa8a12d117304eb957.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/html/557a067dcde747fa8a12d117304eb957.xml b/demo-course/course/html/557a067dcde747fa8a12d117304eb957.xml new file mode 100644 index 0000000..4b35f87 --- /dev/null +++ b/demo-course/course/html/557a067dcde747fa8a12d117304eb957.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/56f3cbaeff724ac896010cf96b5f0222.html b/demo-course/course/html/56f3cbaeff724ac896010cf96b5f0222.html new file mode 100644 index 0000000..0c6eb4b --- /dev/null +++ b/demo-course/course/html/56f3cbaeff724ac896010cf96b5f0222.html @@ -0,0 +1,11 @@ +
+

Best Practices

+

The following guidelines and best practices are recommended for your course images:

+
    +
  • Do not "upscale" your images - keep their maximum dimensions no larger than the original image, or you'll lose quality.
  • +
  • Images wider than 944px will be scaled down to fit, so you should scale down your images before uploading them in order to save on load times.
  • +
  • Images up to 1988px may look slightly clearer on high pixel-density screens, but most learners do not possess these.
  • +
  • For in-course images, do not exceed 512kb per image where possible. The smaller the file size, the better, as this will affect load times and data usage for your learners. Studio will let you upload larger images, but your learners will not thank you for it!
  • +
  • Ensure all images have clear and concise alternative text for learners with accessibility needs, unless they are purely decorative or they are already described by the surrounding text.
  • +
+
\ No newline at end of file diff --git a/demo-course/course/html/56f3cbaeff724ac896010cf96b5f0222.xml b/demo-course/course/html/56f3cbaeff724ac896010cf96b5f0222.xml new file mode 100644 index 0000000..5fb719c --- /dev/null +++ b/demo-course/course/html/56f3cbaeff724ac896010cf96b5f0222.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/572b7bd7623e460a9b58a576a3dbf963.html b/demo-course/course/html/572b7bd7623e460a9b58a576a3dbf963.html new file mode 100644 index 0000000..048a68f --- /dev/null +++ b/demo-course/course/html/572b7bd7623e460a9b58a576a3dbf963.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/html/572b7bd7623e460a9b58a576a3dbf963.xml b/demo-course/course/html/572b7bd7623e460a9b58a576a3dbf963.xml new file mode 100644 index 0000000..e94b8ca --- /dev/null +++ b/demo-course/course/html/572b7bd7623e460a9b58a576a3dbf963.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/59c1faa969394e819e67d0c3e31a86e1.html b/demo-course/course/html/59c1faa969394e819e67d0c3e31a86e1.html new file mode 100644 index 0000000..ca19857 --- /dev/null +++ b/demo-course/course/html/59c1faa969394e819e67d0c3e31a86e1.html @@ -0,0 +1,9 @@ +
+
+

The Randomized Content block allows you to randomly load in problems from a content library increasing the likelihood that each learner's combination of questions will be different. This helps to ensure that your quizzes are kept fair and discourages cheating (if your 'B' isn't the same as my 'B', I can't tell you the answer!)

+

This is the same tool as describe in Module 2's Library Content unit. In this case it is used to create a randomized assessment. 

+
+

menu_book Documentation 

+
+
+
\ No newline at end of file diff --git a/demo-course/course/html/59c1faa969394e819e67d0c3e31a86e1.xml b/demo-course/course/html/59c1faa969394e819e67d0c3e31a86e1.xml new file mode 100644 index 0000000..2486891 --- /dev/null +++ b/demo-course/course/html/59c1faa969394e819e67d0c3e31a86e1.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/5a126b8687ef42f6bc656cdd42551223.html b/demo-course/course/html/5a126b8687ef42f6bc656cdd42551223.html new file mode 100644 index 0000000..048a68f --- /dev/null +++ b/demo-course/course/html/5a126b8687ef42f6bc656cdd42551223.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/html/5a126b8687ef42f6bc656cdd42551223.xml b/demo-course/course/html/5a126b8687ef42f6bc656cdd42551223.xml new file mode 100644 index 0000000..e10fc1e --- /dev/null +++ b/demo-course/course/html/5a126b8687ef42f6bc656cdd42551223.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/5a64f73c603549b0ac182aad87f5a45b.html b/demo-course/course/html/5a64f73c603549b0ac182aad87f5a45b.html new file mode 100644 index 0000000..142d753 --- /dev/null +++ b/demo-course/course/html/5a64f73c603549b0ac182aad87f5a45b.html @@ -0,0 +1,6 @@ + + + + + + diff --git a/demo-course/course/html/5a64f73c603549b0ac182aad87f5a45b.xml b/demo-course/course/html/5a64f73c603549b0ac182aad87f5a45b.xml new file mode 100644 index 0000000..656688a --- /dev/null +++ b/demo-course/course/html/5a64f73c603549b0ac182aad87f5a45b.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/5b89f3c2f6c343d497c2581518f2e7db.html b/demo-course/course/html/5b89f3c2f6c343d497c2581518f2e7db.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/5b89f3c2f6c343d497c2581518f2e7db.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/5b89f3c2f6c343d497c2581518f2e7db.xml b/demo-course/course/html/5b89f3c2f6c343d497c2581518f2e7db.xml new file mode 100644 index 0000000..9ec6d0f --- /dev/null +++ b/demo-course/course/html/5b89f3c2f6c343d497c2581518f2e7db.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/5d743e15c76148baa83b34ba2938b246.html b/demo-course/course/html/5d743e15c76148baa83b34ba2938b246.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/5d743e15c76148baa83b34ba2938b246.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/5d743e15c76148baa83b34ba2938b246.xml b/demo-course/course/html/5d743e15c76148baa83b34ba2938b246.xml new file mode 100644 index 0000000..651fc2a --- /dev/null +++ b/demo-course/course/html/5d743e15c76148baa83b34ba2938b246.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/5dd796da0de64ed782b0ef0e4fa8c2eb.html b/demo-course/course/html/5dd796da0de64ed782b0ef0e4fa8c2eb.html new file mode 100644 index 0000000..11c8162 --- /dev/null +++ b/demo-course/course/html/5dd796da0de64ed782b0ef0e4fa8c2eb.html @@ -0,0 +1,9 @@ +
+

Cohorts are course-level groups of learners that you can use for a variety of purposes, including:

+
    +
  • Dividing discussion forums into smaller sub-sets of learners
  • +
  • Segmenting your learners into groups for reporting
  • +
  • Providing a different learning experience for different groups of learners
  • +
+

For example, if you were offering a training course and you wanted manager-level employees to have additional or slightly different content than the rest of the learners, you might opt to use cohorts! Let's take a look at how they work.

+
\ No newline at end of file diff --git a/demo-course/course/html/5dd796da0de64ed782b0ef0e4fa8c2eb.xml b/demo-course/course/html/5dd796da0de64ed782b0ef0e4fa8c2eb.xml new file mode 100644 index 0000000..7377da8 --- /dev/null +++ b/demo-course/course/html/5dd796da0de64ed782b0ef0e4fa8c2eb.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/5deeaa02f22f4d9fba307ab04cf128fb.html b/demo-course/course/html/5deeaa02f22f4d9fba307ab04cf128fb.html new file mode 100644 index 0000000..2d780d6 --- /dev/null +++ b/demo-course/course/html/5deeaa02f22f4d9fba307ab04cf128fb.html @@ -0,0 +1,4 @@ +
+

Try it!

+

Below this callout box are two questions. If you inspect these questions in Studio, you will see that they are randomly pulled from a content library. Not only that, but the questions randomly chosen for you may not be the same as another user in this course. 

+
\ No newline at end of file diff --git a/demo-course/course/html/5deeaa02f22f4d9fba307ab04cf128fb.xml b/demo-course/course/html/5deeaa02f22f4d9fba307ab04cf128fb.xml new file mode 100644 index 0000000..acc40be --- /dev/null +++ b/demo-course/course/html/5deeaa02f22f4d9fba307ab04cf128fb.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/604ec6d962dd423592af33b609e763de.html b/demo-course/course/html/604ec6d962dd423592af33b609e763de.html new file mode 100644 index 0000000..fc9ab5c --- /dev/null +++ b/demo-course/course/html/604ec6d962dd423592af33b609e763de.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/604ec6d962dd423592af33b609e763de.xml b/demo-course/course/html/604ec6d962dd423592af33b609e763de.xml new file mode 100644 index 0000000..6b402a7 --- /dev/null +++ b/demo-course/course/html/604ec6d962dd423592af33b609e763de.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/62ab8e173c134075b0d5051e7f5a357e.html b/demo-course/course/html/62ab8e173c134075b0d5051e7f5a357e.html new file mode 100644 index 0000000..e7db335 --- /dev/null +++ b/demo-course/course/html/62ab8e173c134075b0d5051e7f5a357e.html @@ -0,0 +1,8 @@ +
+
+

A numerical input problem requires that the learner enters a number in response to a question. You can allow a tolerance on either side of your desired answer, and require your learners to enter a mathematical equation, as well as integers, fractions, and constants such as pi and g.

+
+

menu_bookDocumentation 

+
+
+
\ No newline at end of file diff --git a/demo-course/course/html/62ab8e173c134075b0d5051e7f5a357e.xml b/demo-course/course/html/62ab8e173c134075b0d5051e7f5a357e.xml new file mode 100644 index 0000000..30ce145 --- /dev/null +++ b/demo-course/course/html/62ab8e173c134075b0d5051e7f5a357e.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/630575c34cd24b57beddcb227647ef6f.html b/demo-course/course/html/630575c34cd24b57beddcb227647ef6f.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/630575c34cd24b57beddcb227647ef6f.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/630575c34cd24b57beddcb227647ef6f.xml b/demo-course/course/html/630575c34cd24b57beddcb227647ef6f.xml new file mode 100644 index 0000000..7f9b6ff --- /dev/null +++ b/demo-course/course/html/630575c34cd24b57beddcb227647ef6f.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/6314c7a4f066492fa9745de65cfb6bd1.html b/demo-course/course/html/6314c7a4f066492fa9745de65cfb6bd1.html new file mode 100644 index 0000000..ec30d86 --- /dev/null +++ b/demo-course/course/html/6314c7a4f066492fa9745de65cfb6bd1.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/6314c7a4f066492fa9745de65cfb6bd1.xml b/demo-course/course/html/6314c7a4f066492fa9745de65cfb6bd1.xml new file mode 100644 index 0000000..c7212cf --- /dev/null +++ b/demo-course/course/html/6314c7a4f066492fa9745de65cfb6bd1.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/631c04cc3f8f42368e58d2e4045ab418.html b/demo-course/course/html/631c04cc3f8f42368e58d2e4045ab418.html new file mode 100644 index 0000000..bb08ef5 --- /dev/null +++ b/demo-course/course/html/631c04cc3f8f42368e58d2e4045ab418.html @@ -0,0 +1,4 @@ +
+

Try it!

+

The assessment below uses a service called Codeboard and is connected via LTI. Because it is an LTI-connected tool, the student can use this external code-grading service from within the LMS without having to log in separately or share any personal information. When the work is submitted, the external service can submit a grade back to the LMS. 

+
\ No newline at end of file diff --git a/demo-course/course/html/631c04cc3f8f42368e58d2e4045ab418.xml b/demo-course/course/html/631c04cc3f8f42368e58d2e4045ab418.xml new file mode 100644 index 0000000..89aab78 --- /dev/null +++ b/demo-course/course/html/631c04cc3f8f42368e58d2e4045ab418.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/6636d0c9c7d74b679838b7a171bdc534.html b/demo-course/course/html/6636d0c9c7d74b679838b7a171bdc534.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/6636d0c9c7d74b679838b7a171bdc534.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/6636d0c9c7d74b679838b7a171bdc534.xml b/demo-course/course/html/6636d0c9c7d74b679838b7a171bdc534.xml new file mode 100644 index 0000000..d828885 --- /dev/null +++ b/demo-course/course/html/6636d0c9c7d74b679838b7a171bdc534.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/673d673dc5084b30a8454898cb564f6b.html b/demo-course/course/html/673d673dc5084b30a8454898cb564f6b.html new file mode 100644 index 0000000..048a68f --- /dev/null +++ b/demo-course/course/html/673d673dc5084b30a8454898cb564f6b.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/html/673d673dc5084b30a8454898cb564f6b.xml b/demo-course/course/html/673d673dc5084b30a8454898cb564f6b.xml new file mode 100644 index 0000000..394ecf0 --- /dev/null +++ b/demo-course/course/html/673d673dc5084b30a8454898cb564f6b.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/67c25ccfb4ff43cc93f221fb77677a83.html b/demo-course/course/html/67c25ccfb4ff43cc93f221fb77677a83.html new file mode 100644 index 0000000..cdd287d --- /dev/null +++ b/demo-course/course/html/67c25ccfb4ff43cc93f221fb77677a83.html @@ -0,0 +1,13 @@ +
+
+

Join the Conversation

+
+
+

The number one way to get involved with the Open edX community is to join our community channels:

+
    +
  • The Open edX community Slack is a great place to chat with like-minded people, get quick answers to quick questions, and discuss the platform.
  • +
  • The Open edX community forum is a place for ongoing conversations. You can search for topics that are of interest to you or view streams based on your interests or role (ie. site operators, educators, development, etc.). 
  • +
+

Participating in the Open edX community means agreeing to follow the community guidelines and code of conduct, so please ensure you read them in advance of participating.

+
+
\ No newline at end of file diff --git a/demo-course/course/html/67c25ccfb4ff43cc93f221fb77677a83.xml b/demo-course/course/html/67c25ccfb4ff43cc93f221fb77677a83.xml new file mode 100644 index 0000000..f5089cb --- /dev/null +++ b/demo-course/course/html/67c25ccfb4ff43cc93f221fb77677a83.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/684d568354fa49fdba0c47a7d1fe072c.html b/demo-course/course/html/684d568354fa49fdba0c47a7d1fe072c.html new file mode 100644 index 0000000..0e84a71 --- /dev/null +++ b/demo-course/course/html/684d568354fa49fdba0c47a7d1fe072c.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/684d568354fa49fdba0c47a7d1fe072c.xml b/demo-course/course/html/684d568354fa49fdba0c47a7d1fe072c.xml new file mode 100644 index 0000000..24a6444 --- /dev/null +++ b/demo-course/course/html/684d568354fa49fdba0c47a7d1fe072c.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/6a188f29f34c4371846be8127bb284b2.html b/demo-course/course/html/6a188f29f34c4371846be8127bb284b2.html new file mode 100644 index 0000000..938c1a0 --- /dev/null +++ b/demo-course/course/html/6a188f29f34c4371846be8127bb284b2.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/6a188f29f34c4371846be8127bb284b2.xml b/demo-course/course/html/6a188f29f34c4371846be8127bb284b2.xml new file mode 100644 index 0000000..a4fbecb --- /dev/null +++ b/demo-course/course/html/6a188f29f34c4371846be8127bb284b2.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/6d7f574dc4cc4a9cbcfe73c27c926425.html b/demo-course/course/html/6d7f574dc4cc4a9cbcfe73c27c926425.html new file mode 100644 index 0000000..efb506b --- /dev/null +++ b/demo-course/course/html/6d7f574dc4cc4a9cbcfe73c27c926425.html @@ -0,0 +1,7 @@ +
+

Video transcripts are an important part of an educational video. Transcripts and subtitles help learners with hearing impairments understand audio content and they are helpful for learners who speak other languages, as well as being shown to increase the information retention levels of all learners. The Open edX video player goes beyond this by providing an interactive transcript, dynamically generated using standard SRT files. Try navigating the video below by clicking through the interactive transcript!

+

If your transcript is not already open, you can open it up by clicking the button on the far right of the player. Your preferences for both transcripts and closed captions will be remembered for future videos.

+
+

The Open edX Video Player toolbar with the Caption icon highlighted

+
+
\ No newline at end of file diff --git a/demo-course/course/html/6d7f574dc4cc4a9cbcfe73c27c926425.xml b/demo-course/course/html/6d7f574dc4cc4a9cbcfe73c27c926425.xml new file mode 100644 index 0000000..33cb9fe --- /dev/null +++ b/demo-course/course/html/6d7f574dc4cc4a9cbcfe73c27c926425.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/6db598da8c294afaa9b17f4d771017d6.html b/demo-course/course/html/6db598da8c294afaa9b17f4d771017d6.html new file mode 100644 index 0000000..21a8b24 --- /dev/null +++ b/demo-course/course/html/6db598da8c294afaa9b17f4d771017d6.html @@ -0,0 +1,8 @@ +
+
+

The Circuit Schematic Builder problem is a specialist electronics activity that allows learners to arrange circuit elements such as voltage sources, capacitors, resistors and MOSFETs on an interactive grid. They then submit a DC, AC or transient analysis of their circuit to the system for grading.

+
+

menu_bookDocumentation 

+
+
+
\ No newline at end of file diff --git a/demo-course/course/html/6db598da8c294afaa9b17f4d771017d6.xml b/demo-course/course/html/6db598da8c294afaa9b17f4d771017d6.xml new file mode 100644 index 0000000..094b3a2 --- /dev/null +++ b/demo-course/course/html/6db598da8c294afaa9b17f4d771017d6.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/6df88c5b0ec042b88ee3415cbdffe0bd.html b/demo-course/course/html/6df88c5b0ec042b88ee3415cbdffe0bd.html new file mode 100644 index 0000000..1e87194 --- /dev/null +++ b/demo-course/course/html/6df88c5b0ec042b88ee3415cbdffe0bd.html @@ -0,0 +1,8 @@ +
+
+

Subsection Pre-Requisites allows you to limit access to certain content until your learner has achieved either a minimum score or a minimum completion percentage in a subsection you designate. For example, this can be used if you want to make sure they check off an honor code before proceeding into the course. Or, if you need to ensure that your student watches a video before proceeding to the next section. 

+
+

menu_bookDocumentation

+
+
+
\ No newline at end of file diff --git a/demo-course/course/html/6df88c5b0ec042b88ee3415cbdffe0bd.xml b/demo-course/course/html/6df88c5b0ec042b88ee3415cbdffe0bd.xml new file mode 100644 index 0000000..be2af84 --- /dev/null +++ b/demo-course/course/html/6df88c5b0ec042b88ee3415cbdffe0bd.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/7096731a771d4703b8453c68ef7d56eb.html b/demo-course/course/html/7096731a771d4703b8453c68ef7d56eb.html new file mode 100644 index 0000000..048a68f --- /dev/null +++ b/demo-course/course/html/7096731a771d4703b8453c68ef7d56eb.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/html/7096731a771d4703b8453c68ef7d56eb.xml b/demo-course/course/html/7096731a771d4703b8453c68ef7d56eb.xml new file mode 100644 index 0000000..9121883 --- /dev/null +++ b/demo-course/course/html/7096731a771d4703b8453c68ef7d56eb.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/70b04bd789c54c90aedb8c5edb90479f.html b/demo-course/course/html/70b04bd789c54c90aedb8c5edb90479f.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/70b04bd789c54c90aedb8c5edb90479f.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/70b04bd789c54c90aedb8c5edb90479f.xml b/demo-course/course/html/70b04bd789c54c90aedb8c5edb90479f.xml new file mode 100644 index 0000000..03c6406 --- /dev/null +++ b/demo-course/course/html/70b04bd789c54c90aedb8c5edb90479f.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/7105c1c9424f4ba2869708c8aa86a677.html b/demo-course/course/html/7105c1c9424f4ba2869708c8aa86a677.html new file mode 100644 index 0000000..9282644 --- /dev/null +++ b/demo-course/course/html/7105c1c9424f4ba2869708c8aa86a677.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
diff --git a/demo-course/course/html/7105c1c9424f4ba2869708c8aa86a677.xml b/demo-course/course/html/7105c1c9424f4ba2869708c8aa86a677.xml new file mode 100644 index 0000000..f1c5b29 --- /dev/null +++ b/demo-course/course/html/7105c1c9424f4ba2869708c8aa86a677.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/730b4217e8284e5abf4ae820889bd78b.html b/demo-course/course/html/730b4217e8284e5abf4ae820889bd78b.html new file mode 100644 index 0000000..89256fb --- /dev/null +++ b/demo-course/course/html/730b4217e8284e5abf4ae820889bd78b.html @@ -0,0 +1,9 @@ +
+
+

We introduced the Peer Assessment feature of the Open Response Assessment tool in the Intermediate Assessment Tools section earlier. However, its significance warrants another discussion.

+

While you might have used its Self-Assessment mode, it also functions as a peer assessment tool. Here, students submit responses to a prompt and their peers provide feedback and grades based on a staff-defined rubric. This process teaches students to give proper feedback, as well as being able to measure their own work against their peers.

+
+

menu_bookDocumentation 

+
+
+
\ No newline at end of file diff --git a/demo-course/course/html/730b4217e8284e5abf4ae820889bd78b.xml b/demo-course/course/html/730b4217e8284e5abf4ae820889bd78b.xml new file mode 100644 index 0000000..16332d2 --- /dev/null +++ b/demo-course/course/html/730b4217e8284e5abf4ae820889bd78b.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/74948cd6472b4910bcfcf0194ed497c6.html b/demo-course/course/html/74948cd6472b4910bcfcf0194ed497c6.html new file mode 100644 index 0000000..ce6587b --- /dev/null +++ b/demo-course/course/html/74948cd6472b4910bcfcf0194ed497c6.html @@ -0,0 +1,4 @@ +
+

Try it!

+

Let us know what you think of the course so far in the survey below!

+
\ No newline at end of file diff --git a/demo-course/course/html/74948cd6472b4910bcfcf0194ed497c6.xml b/demo-course/course/html/74948cd6472b4910bcfcf0194ed497c6.xml new file mode 100644 index 0000000..a95b619 --- /dev/null +++ b/demo-course/course/html/74948cd6472b4910bcfcf0194ed497c6.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/75d303f76f334a7ab968794972809d15.html b/demo-course/course/html/75d303f76f334a7ab968794972809d15.html new file mode 100644 index 0000000..21eeaa1 --- /dev/null +++ b/demo-course/course/html/75d303f76f334a7ab968794972809d15.html @@ -0,0 +1,8 @@ +
+

Posts vs. Questions

+

Posts are the standard type of discussion starter. They allow learners to make a post which can be replied to and discussed.

+
A screenshot of the Open edX® platform discussion forum with the Discussion button highlighted.
+

Questions are a special type of post where learners are able to ask a question in order to get an answer. Staff and the original poster can mark any response as the answer to their question, allowing your courses to use discussions for peer-led Q&A, as well as fielding common questions as a community.

+
A screenshot of the Open edX® platform discussion forum with the Question button highlighted.
+

+
\ No newline at end of file diff --git a/demo-course/course/html/75d303f76f334a7ab968794972809d15.xml b/demo-course/course/html/75d303f76f334a7ab968794972809d15.xml new file mode 100644 index 0000000..40b7465 --- /dev/null +++ b/demo-course/course/html/75d303f76f334a7ab968794972809d15.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/785a48bb3f8e4052bb4eb4a6aad304c6.html b/demo-course/course/html/785a48bb3f8e4052bb4eb4a6aad304c6.html new file mode 100644 index 0000000..8172d00 --- /dev/null +++ b/demo-course/course/html/785a48bb3f8e4052bb4eb4a6aad304c6.html @@ -0,0 +1 @@ +

With HTML at your disposal, you can also iFrame content from other websites that you are allowed to use in your course. For example, here is an Open Education Resource shown in an iFrame:

\ No newline at end of file diff --git a/demo-course/course/html/785a48bb3f8e4052bb4eb4a6aad304c6.xml b/demo-course/course/html/785a48bb3f8e4052bb4eb4a6aad304c6.xml new file mode 100644 index 0000000..1d700e3 --- /dev/null +++ b/demo-course/course/html/785a48bb3f8e4052bb4eb4a6aad304c6.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/7867025db2784bc9b7a8211a09a3844e.html b/demo-course/course/html/7867025db2784bc9b7a8211a09a3844e.html new file mode 100644 index 0000000..048a68f --- /dev/null +++ b/demo-course/course/html/7867025db2784bc9b7a8211a09a3844e.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/html/7867025db2784bc9b7a8211a09a3844e.xml b/demo-course/course/html/7867025db2784bc9b7a8211a09a3844e.xml new file mode 100644 index 0000000..25c86c4 --- /dev/null +++ b/demo-course/course/html/7867025db2784bc9b7a8211a09a3844e.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/79271f08958c4386b7ad6e0cc8f777d4.html b/demo-course/course/html/79271f08958c4386b7ad6e0cc8f777d4.html new file mode 100644 index 0000000..75a2194 --- /dev/null +++ b/demo-course/course/html/79271f08958c4386b7ad6e0cc8f777d4.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/79271f08958c4386b7ad6e0cc8f777d4.xml b/demo-course/course/html/79271f08958c4386b7ad6e0cc8f777d4.xml new file mode 100644 index 0000000..a3ee5aa --- /dev/null +++ b/demo-course/course/html/79271f08958c4386b7ad6e0cc8f777d4.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/79b901455aba4f8b944a9f735fa00a5b.html b/demo-course/course/html/79b901455aba4f8b944a9f735fa00a5b.html new file mode 100644 index 0000000..3cd0d51 --- /dev/null +++ b/demo-course/course/html/79b901455aba4f8b944a9f735fa00a5b.html @@ -0,0 +1,22 @@ +
+

Setting up Cohorts

+

Cohorts are defined in your Instructor Dashboard, in the Cohorts panel.

+
+

The instructor dashboard tab, with the cohorts tab selected. A single cohort is shown, containing 253 members.

+
+
+

Note:

+

Cohort configurations do not migrate with courses, so cohorts will not be set up in this course unless you set them up.

+
+

There are two modes for cohorts - automatic and manual:

+
    +
  • Automatic cohorts assign learners to the cohort the moment they join the course. If there are multiple automatic cohorts set up, learners will be divided between them.
  • +
  • Manual cohorts wait for you to assign learners to them manually from the Cohorts panel, either through a list of email addresses or usernames.
  • +
+

If you use this feature for your courses, we recommend setting up at least one automatic cohort to 'catch' all learners who aren't manually assigned to cohorts, even if you intend to use manual cohorts. That way you can easily review which learners might have fallen through the cracks by checking the membership of that automatic cohort!

+

Once cohorts are set up, you can configure your discussion settings to set which discussions should be divided by cohort, and which should be available to your entire course.

+
+

Discussion settings in Studio, under Pages and Resources. The screenshot shows a message stating that learners will only be able to view and respond to discussions posted by members of their cohort.

+
+

For more information on this feature and some best practices for divided discussions, check out the documentation!

+
\ No newline at end of file diff --git a/demo-course/course/html/79b901455aba4f8b944a9f735fa00a5b.xml b/demo-course/course/html/79b901455aba4f8b944a9f735fa00a5b.xml new file mode 100644 index 0000000..26aeec6 --- /dev/null +++ b/demo-course/course/html/79b901455aba4f8b944a9f735fa00a5b.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/7a7e8bb6ae314f82adf278de1e78efc7.html b/demo-course/course/html/7a7e8bb6ae314f82adf278de1e78efc7.html new file mode 100644 index 0000000..a4a4ef6 --- /dev/null +++ b/demo-course/course/html/7a7e8bb6ae314f82adf278de1e78efc7.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/7a7e8bb6ae314f82adf278de1e78efc7.xml b/demo-course/course/html/7a7e8bb6ae314f82adf278de1e78efc7.xml new file mode 100644 index 0000000..7133403 --- /dev/null +++ b/demo-course/course/html/7a7e8bb6ae314f82adf278de1e78efc7.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/7b43fdfffd1e4213aa90b9577ba5528a.html b/demo-course/course/html/7b43fdfffd1e4213aa90b9577ba5528a.html new file mode 100644 index 0000000..048a68f --- /dev/null +++ b/demo-course/course/html/7b43fdfffd1e4213aa90b9577ba5528a.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/html/7b43fdfffd1e4213aa90b9577ba5528a.xml b/demo-course/course/html/7b43fdfffd1e4213aa90b9577ba5528a.xml new file mode 100644 index 0000000..0caf413 --- /dev/null +++ b/demo-course/course/html/7b43fdfffd1e4213aa90b9577ba5528a.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/7baf508793614569b1496f7c112ca852.html b/demo-course/course/html/7baf508793614569b1496f7c112ca852.html new file mode 100644 index 0000000..85df10e --- /dev/null +++ b/demo-course/course/html/7baf508793614569b1496f7c112ca852.html @@ -0,0 +1,2 @@ +

PDFs are a classic way of distributing documents and an invaluable tool for providing handouts to your learners that they can view, download and print.

+

Using a little basic HTML, we can embed a PDF into our learning content. Here's an example:

\ No newline at end of file diff --git a/demo-course/course/html/7baf508793614569b1496f7c112ca852.xml b/demo-course/course/html/7baf508793614569b1496f7c112ca852.xml new file mode 100644 index 0000000..4a8dc00 --- /dev/null +++ b/demo-course/course/html/7baf508793614569b1496f7c112ca852.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/7c7c073ce8c148e08c908ff46bc2fa7c.html b/demo-course/course/html/7c7c073ce8c148e08c908ff46bc2fa7c.html new file mode 100644 index 0000000..85cbce5 --- /dev/null +++ b/demo-course/course/html/7c7c073ce8c148e08c908ff46bc2fa7c.html @@ -0,0 +1,8 @@ +
+
+

Python-evaluated input problems, also known as Write-Your-Own-Grader problems, allow you to unleash the power of Python in order to create truly custom assignments, comparing a learner's answer (most commonly text or numerical input) against a custom Python script.

+
+

menu_bookDocumentation 

+
+
+
\ No newline at end of file diff --git a/demo-course/course/html/7c7c073ce8c148e08c908ff46bc2fa7c.xml b/demo-course/course/html/7c7c073ce8c148e08c908ff46bc2fa7c.xml new file mode 100644 index 0000000..eccbcb5 --- /dev/null +++ b/demo-course/course/html/7c7c073ce8c148e08c908ff46bc2fa7c.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/7d564d3b529e4e588f4c3fcc8433052f.html b/demo-course/course/html/7d564d3b529e4e588f4c3fcc8433052f.html new file mode 100644 index 0000000..6b25b88 --- /dev/null +++ b/demo-course/course/html/7d564d3b529e4e588f4c3fcc8433052f.html @@ -0,0 +1,6 @@ +
+
+

Open source software is software that is freely shared under an open source license, just like the Open edX® platform.

+

Open source software, at its core, is a collaborative approach to software development, where the source code of a program is made available to the public. This allows a wide community of contributors to improve the software and review contributions given by other members of the community. The primary benefit to this is that it fosters innovation, ownership, and creativity in the community by allowing a diverse group of developers of different backgrounds and skills to collectively enhance the platform's functionality and security.

+
+
\ No newline at end of file diff --git a/demo-course/course/html/7d564d3b529e4e588f4c3fcc8433052f.xml b/demo-course/course/html/7d564d3b529e4e588f4c3fcc8433052f.xml new file mode 100644 index 0000000..1cf8a95 --- /dev/null +++ b/demo-course/course/html/7d564d3b529e4e588f4c3fcc8433052f.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/7e22ae35da924b678866813f8cc6eef6.html b/demo-course/course/html/7e22ae35da924b678866813f8cc6eef6.html new file mode 100644 index 0000000..d5211f9 --- /dev/null +++ b/demo-course/course/html/7e22ae35da924b678866813f8cc6eef6.html @@ -0,0 +1,155 @@ +
+ + + +
\ No newline at end of file diff --git a/demo-course/course/html/7e22ae35da924b678866813f8cc6eef6.xml b/demo-course/course/html/7e22ae35da924b678866813f8cc6eef6.xml new file mode 100644 index 0000000..968a595 --- /dev/null +++ b/demo-course/course/html/7e22ae35da924b678866813f8cc6eef6.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/7e2a73522ce1455baf54c156bb43fb11.html b/demo-course/course/html/7e2a73522ce1455baf54c156bb43fb11.html new file mode 100644 index 0000000..8c854a7 --- /dev/null +++ b/demo-course/course/html/7e2a73522ce1455baf54c156bb43fb11.html @@ -0,0 +1,10 @@ +
+
+
+

Course Staff Moderators

+
+

Discussion Moderation tools are available to users with either of the Discussion Admin or Discussion Moderator roles, which you'll find in the Instructor Dashboard under Course Team Management.

+

+

Discussion moderators can receive email notifications for posts flagged as breaking your community guidelines, as well as move, edit, delete, pin, and lock posts, among other useful moderation tools in your discussion forum. Their posts are flagged as being from special course team members whenever they post and they even have the power to endorse valuable learner comments to highlight them to the rest of the discussion.

+
+
\ No newline at end of file diff --git a/demo-course/course/html/7e2a73522ce1455baf54c156bb43fb11.xml b/demo-course/course/html/7e2a73522ce1455baf54c156bb43fb11.xml new file mode 100644 index 0000000..94d62d6 --- /dev/null +++ b/demo-course/course/html/7e2a73522ce1455baf54c156bb43fb11.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/7ec3167b131a4d9ebf09da8353ef17d6.html b/demo-course/course/html/7ec3167b131a4d9ebf09da8353ef17d6.html new file mode 100644 index 0000000..160cfca --- /dev/null +++ b/demo-course/course/html/7ec3167b131a4d9ebf09da8353ef17d6.html @@ -0,0 +1,5 @@ +
+

Try it!

+

Try the two problems below. 

+

In the second example, you can opt to receive hints and view an explanation of the correct answer. 

+
\ No newline at end of file diff --git a/demo-course/course/html/7ec3167b131a4d9ebf09da8353ef17d6.xml b/demo-course/course/html/7ec3167b131a4d9ebf09da8353ef17d6.xml new file mode 100644 index 0000000..8c03af4 --- /dev/null +++ b/demo-course/course/html/7ec3167b131a4d9ebf09da8353ef17d6.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/7f4f36fb901440b996354820e0c78fb0.html b/demo-course/course/html/7f4f36fb901440b996354820e0c78fb0.html new file mode 100644 index 0000000..d928c1f --- /dev/null +++ b/demo-course/course/html/7f4f36fb901440b996354820e0c78fb0.html @@ -0,0 +1 @@ +

The advanced assessment tools in this section are powerful but may require a little more setup and configuration to be used effectively, such as writing XML or using an external system. Reading the documentation is recommended in order to use these tools effectively.

\ No newline at end of file diff --git a/demo-course/course/html/7f4f36fb901440b996354820e0c78fb0.xml b/demo-course/course/html/7f4f36fb901440b996354820e0c78fb0.xml new file mode 100644 index 0000000..f98818e --- /dev/null +++ b/demo-course/course/html/7f4f36fb901440b996354820e0c78fb0.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/800b885c167a4e45916218b876df8d02.html b/demo-course/course/html/800b885c167a4e45916218b876df8d02.html new file mode 100644 index 0000000..74c099e --- /dev/null +++ b/demo-course/course/html/800b885c167a4e45916218b876df8d02.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/800b885c167a4e45916218b876df8d02.xml b/demo-course/course/html/800b885c167a4e45916218b876df8d02.xml new file mode 100644 index 0000000..6838783 --- /dev/null +++ b/demo-course/course/html/800b885c167a4e45916218b876df8d02.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/802cdc6f1e57413b9b2091ae4f34f372.html b/demo-course/course/html/802cdc6f1e57413b9b2091ae4f34f372.html new file mode 100644 index 0000000..4100505 --- /dev/null +++ b/demo-course/course/html/802cdc6f1e57413b9b2091ae4f34f372.html @@ -0,0 +1,6 @@ +
+

Subsections

+

Sections are divided into subsections, which in turn contain one or more units. A subsection may represent a topic in your course, or another organizing principle. The subsection you are in now is called "the Structure of the Open edX® platform". Subsections are sometimes also referred to by Open edX® users as "sequences", "lessons", or "activities".

+

Subsections allow you to set visibility rules and release dates for all the content within that subsection, so that you don't have to set it at the unit level. Grades are also assigned at the subsection level. That way, a subsection can have multiple units with multiple types of content that all roll up into one graded element. For example, you might have a weekly assessment that includes some multiple choice questions and a reading assignment, and you want a student's performance on those items to all count as a single weekly assessment. 

+
a diagram representation of an Open edX course showing the sections branching out from a course and the subsections branching from sections
+
\ No newline at end of file diff --git a/demo-course/course/html/802cdc6f1e57413b9b2091ae4f34f372.xml b/demo-course/course/html/802cdc6f1e57413b9b2091ae4f34f372.xml new file mode 100644 index 0000000..84cd8c6 --- /dev/null +++ b/demo-course/course/html/802cdc6f1e57413b9b2091ae4f34f372.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/804179fb34604ec380351f92807a3896.html b/demo-course/course/html/804179fb34604ec380351f92807a3896.html new file mode 100644 index 0000000..3e8f9a2 --- /dev/null +++ b/demo-course/course/html/804179fb34604ec380351f92807a3896.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/804179fb34604ec380351f92807a3896.xml b/demo-course/course/html/804179fb34604ec380351f92807a3896.xml new file mode 100644 index 0000000..669b52f --- /dev/null +++ b/demo-course/course/html/804179fb34604ec380351f92807a3896.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/81a88593851345189983cb33e119b99c.html b/demo-course/course/html/81a88593851345189983cb33e119b99c.html new file mode 100644 index 0000000..048a68f --- /dev/null +++ b/demo-course/course/html/81a88593851345189983cb33e119b99c.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/html/81a88593851345189983cb33e119b99c.xml b/demo-course/course/html/81a88593851345189983cb33e119b99c.xml new file mode 100644 index 0000000..5cd7996 --- /dev/null +++ b/demo-course/course/html/81a88593851345189983cb33e119b99c.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/82a239bf94264ab6b2b70e502209175c.html b/demo-course/course/html/82a239bf94264ab6b2b70e502209175c.html new file mode 100644 index 0000000..53f53a8 --- /dev/null +++ b/demo-course/course/html/82a239bf94264ab6b2b70e502209175c.html @@ -0,0 +1,4 @@ +
+

Try it!

+

Use the staff-only drop-down at the top of the page to switch between Group A and Group B and observe the difference on the page. 

+
\ No newline at end of file diff --git a/demo-course/course/html/82a239bf94264ab6b2b70e502209175c.xml b/demo-course/course/html/82a239bf94264ab6b2b70e502209175c.xml new file mode 100644 index 0000000..adddac5 --- /dev/null +++ b/demo-course/course/html/82a239bf94264ab6b2b70e502209175c.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/843161a15efa4098ab509df193ebd2f7.html b/demo-course/course/html/843161a15efa4098ab509df193ebd2f7.html new file mode 100644 index 0000000..18f7f74 --- /dev/null +++ b/demo-course/course/html/843161a15efa4098ab509df193ebd2f7.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/843161a15efa4098ab509df193ebd2f7.xml b/demo-course/course/html/843161a15efa4098ab509df193ebd2f7.xml new file mode 100644 index 0000000..66d9d33 --- /dev/null +++ b/demo-course/course/html/843161a15efa4098ab509df193ebd2f7.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/87080557f93346b9b73a6d002202ba07.html b/demo-course/course/html/87080557f93346b9b73a6d002202ba07.html new file mode 100644 index 0000000..b2460b8 --- /dev/null +++ b/demo-course/course/html/87080557f93346b9b73a6d002202ba07.html @@ -0,0 +1,6 @@ +
+
+

Custom JavaScript problems allow you to create custom interactive activities that can be graded using the grading tools within the Open edX platform. If you'd like to build one of these for your own use, we strongly recommend checking out the documentation!

+
menu_bookDocumentation 
+
+
\ No newline at end of file diff --git a/demo-course/course/html/87080557f93346b9b73a6d002202ba07.xml b/demo-course/course/html/87080557f93346b9b73a6d002202ba07.xml new file mode 100644 index 0000000..2c1291b --- /dev/null +++ b/demo-course/course/html/87080557f93346b9b73a6d002202ba07.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/87e235ad0a964812b4a1c0cb1dd31f3e.html b/demo-course/course/html/87e235ad0a964812b4a1c0cb1dd31f3e.html new file mode 100644 index 0000000..8bbb4d5 --- /dev/null +++ b/demo-course/course/html/87e235ad0a964812b4a1c0cb1dd31f3e.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/87e235ad0a964812b4a1c0cb1dd31f3e.xml b/demo-course/course/html/87e235ad0a964812b4a1c0cb1dd31f3e.xml new file mode 100644 index 0000000..154cab1 --- /dev/null +++ b/demo-course/course/html/87e235ad0a964812b4a1c0cb1dd31f3e.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/89cf7133f93f40379f4626f171642852.html b/demo-course/course/html/89cf7133f93f40379f4626f171642852.html new file mode 100644 index 0000000..cc45a55 --- /dev/null +++ b/demo-course/course/html/89cf7133f93f40379f4626f171642852.html @@ -0,0 +1 @@ +

IFrames won't work on every site, and they can be blocked by security settings, but it's a powerful capability that you can use to allow your learners to access web content without leaving the bounds of your course.

\ No newline at end of file diff --git a/demo-course/course/html/89cf7133f93f40379f4626f171642852.xml b/demo-course/course/html/89cf7133f93f40379f4626f171642852.xml new file mode 100644 index 0000000..6af5b3a --- /dev/null +++ b/demo-course/course/html/89cf7133f93f40379f4626f171642852.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/8a70fc9fb1ad40e4bb5a1e3620d1607d.html b/demo-course/course/html/8a70fc9fb1ad40e4bb5a1e3620d1607d.html new file mode 100644 index 0000000..2c2e4a2 --- /dev/null +++ b/demo-course/course/html/8a70fc9fb1ad40e4bb5a1e3620d1607d.html @@ -0,0 +1,4 @@ +
+

Try it!

+

Try out a drag-and-drop activity below!

+
\ No newline at end of file diff --git a/demo-course/course/html/8a70fc9fb1ad40e4bb5a1e3620d1607d.xml b/demo-course/course/html/8a70fc9fb1ad40e4bb5a1e3620d1607d.xml new file mode 100644 index 0000000..9d6699d --- /dev/null +++ b/demo-course/course/html/8a70fc9fb1ad40e4bb5a1e3620d1607d.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/8c9006dcebbe4cd7aed2b89088c1a9d9.html b/demo-course/course/html/8c9006dcebbe4cd7aed2b89088c1a9d9.html new file mode 100644 index 0000000..4761fef --- /dev/null +++ b/demo-course/course/html/8c9006dcebbe4cd7aed2b89088c1a9d9.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/8c9006dcebbe4cd7aed2b89088c1a9d9.xml b/demo-course/course/html/8c9006dcebbe4cd7aed2b89088c1a9d9.xml new file mode 100644 index 0000000..a5adc86 --- /dev/null +++ b/demo-course/course/html/8c9006dcebbe4cd7aed2b89088c1a9d9.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/8d4dabcfaf76423db9b17bea6d789bf0.html b/demo-course/course/html/8d4dabcfaf76423db9b17bea6d789bf0.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/8d4dabcfaf76423db9b17bea6d789bf0.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/8d4dabcfaf76423db9b17bea6d789bf0.xml b/demo-course/course/html/8d4dabcfaf76423db9b17bea6d789bf0.xml new file mode 100644 index 0000000..54f19ea --- /dev/null +++ b/demo-course/course/html/8d4dabcfaf76423db9b17bea6d789bf0.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/906288f0d9d945c8af7e76c42dc4c147.html b/demo-course/course/html/906288f0d9d945c8af7e76c42dc4c147.html new file mode 100644 index 0000000..7f056fa --- /dev/null +++ b/demo-course/course/html/906288f0d9d945c8af7e76c42dc4c147.html @@ -0,0 +1,17 @@ +
+

In-Content vs. General Topics

+

In-Content Topics function the way you've just seen, they put the discussion topic within the content itself, focusing the discussion and allowing learners to participate without breaking the flow of their learning.

+

Examples:

+
    +
  • Week 1 > Introduce yourself
  • +
  • Week 7 > Key Factors Influencing the Fall of the Roman Empire
  • +
+

General Topics can be defined on a course-by-course basis and allow you to have high-level topics that are available at all times, unconnected to any specific content.

+

Examples:

+
    +
  • General
  • +
  • Tech Support
  • +
  • Off Topic
  • +
+

No matter the topic type, you can see all discussion topics in your course by selecting the Discussions tab at the top of the page.

+
\ No newline at end of file diff --git a/demo-course/course/html/906288f0d9d945c8af7e76c42dc4c147.xml b/demo-course/course/html/906288f0d9d945c8af7e76c42dc4c147.xml new file mode 100644 index 0000000..cc010af --- /dev/null +++ b/demo-course/course/html/906288f0d9d945c8af7e76c42dc4c147.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/92ae0639039040ec9da1d0dc0e31eff7.html b/demo-course/course/html/92ae0639039040ec9da1d0dc0e31eff7.html new file mode 100644 index 0000000..a71ebe3 --- /dev/null +++ b/demo-course/course/html/92ae0639039040ec9da1d0dc0e31eff7.html @@ -0,0 +1,10 @@ +
+
+
+

Course Community Moderators

+
+

Sometimes, learners demonstrate that they're exceptionally engaged with discussion forums, and can even be trusted to perform moderation tasks on your behalf!

+

For this reason, Open edX discussions include the Community TA role, which is assigned in the same way as a discussion moderator and provides similar powers within your discussion forums. This role is intended for members of your learning community who demonstrate exceptional commitment to their peers, allowing your learners to take ownership of their discussions (and reducing some of the load on your discussion moderators at the same time)!

+

With great power comes great responsibility, and the Community TA feature should be used with care, but it can be a powerful way to reward the very best of your learners, or even allow the wider cohort to elect community representatives within your course.

+
+
\ No newline at end of file diff --git a/demo-course/course/html/92ae0639039040ec9da1d0dc0e31eff7.xml b/demo-course/course/html/92ae0639039040ec9da1d0dc0e31eff7.xml new file mode 100644 index 0000000..fed8cce --- /dev/null +++ b/demo-course/course/html/92ae0639039040ec9da1d0dc0e31eff7.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/92e8671cbb814598a54040238508fda9.html b/demo-course/course/html/92e8671cbb814598a54040238508fda9.html new file mode 100644 index 0000000..98a66af --- /dev/null +++ b/demo-course/course/html/92e8671cbb814598a54040238508fda9.html @@ -0,0 +1,95 @@ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Discussion AdminDiscussion ModeratorCommunity TAStandard User
Read All commentscheckcheckcheckcheck
Create a commentcheckcheckcheckcheck
Like and Follow commentscheckcheckcheckcheck
Flag inappropriate contentcheckcheckcheckcheck
Review Flagged commentscheckcheckcheckclose
Course Staff comments are indicated by an iconcheckcheckcheckclose
Edit or Delete other users' commentscheckcheckcheckclose
Endorse a Replycheckcheckcheckclose
Close or reopen postscheckcheckcheckclose
Pin/Unpin Postscheckcheckcheckclose
Add or remove Discussion Moderatorscheckclosecloseclose
+
+

Community TAs and Discussion Moderators have the same privileges, but different badges on their posts.

+

"Group Community TA" is another role for courses that leverage cohorts. Group Community TAs have the same privileges as a Community TA, but only within their cohort.

+

\ No newline at end of file diff --git a/demo-course/course/html/92e8671cbb814598a54040238508fda9.xml b/demo-course/course/html/92e8671cbb814598a54040238508fda9.xml new file mode 100644 index 0000000..e932601 --- /dev/null +++ b/demo-course/course/html/92e8671cbb814598a54040238508fda9.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/93dea66736094ad18fa054766e695599.html b/demo-course/course/html/93dea66736094ad18fa054766e695599.html new file mode 100644 index 0000000..45834bf --- /dev/null +++ b/demo-course/course/html/93dea66736094ad18fa054766e695599.html @@ -0,0 +1,10 @@ +
+

Best Practices & Generating SRT Files

+

It's important to ensure all of your videos have subtitles (and by extension transcripts) so that they are accessible to all learners, especially those with hearing difficulties. Transcripts are useful for all learners as they can be used to navigate the video to rewatch important points, and they can even show up in course search results, allowing learners to find exactly where they covered a piece of content they're struggling with.

+

If you include an .SRT file with your video component then your video will automatically display an option to view the interactive transcript.

+

SRT files can be generated via several tools you can find on the web, including:

+
    +
  • YouTube offers a free captioning tool
  • +
  • Various free, freemium, and paid services, of which there are many. Google "Transcriptions & Subtitles tool" to find a selection. 
  • +
+
\ No newline at end of file diff --git a/demo-course/course/html/93dea66736094ad18fa054766e695599.xml b/demo-course/course/html/93dea66736094ad18fa054766e695599.xml new file mode 100644 index 0000000..83f0b7b --- /dev/null +++ b/demo-course/course/html/93dea66736094ad18fa054766e695599.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/9488cc17b5e74c3eb02409f6a1a596ef.html b/demo-course/course/html/9488cc17b5e74c3eb02409f6a1a596ef.html new file mode 100644 index 0000000..2546128 --- /dev/null +++ b/demo-course/course/html/9488cc17b5e74c3eb02409f6a1a596ef.html @@ -0,0 +1,168 @@ +

Module 3 covers the various assessment options offered by the Open edX® platform. You can use the links below to navigate directly to assessments if you choose.

+
+

Basic Assessments

+
+

Common, easy to set up assessment types that can leverage hinting and feedback.

+ + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ +
+

+
+

Intermediate Assessments

+
+

+

Work with kinetic and peer-based assessments for more assessment variety and adaptability.

+ + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+
+

Advanced Assessments

+
+

Leverage code and external assessment tools for massive customization and flexibility. 

+ + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ +
+

+
+

Specialty Assessment

+
+

STEM and other specialty assessments for particular use cases. 

+ + + + + + + + + + + +
+ + + +
+ +
\ No newline at end of file diff --git a/demo-course/course/html/9488cc17b5e74c3eb02409f6a1a596ef.xml b/demo-course/course/html/9488cc17b5e74c3eb02409f6a1a596ef.xml new file mode 100644 index 0000000..3948192 --- /dev/null +++ b/demo-course/course/html/9488cc17b5e74c3eb02409f6a1a596ef.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/994f177a47dd4c8d9f9d7f55e680163d.html b/demo-course/course/html/994f177a47dd4c8d9f9d7f55e680163d.html new file mode 100644 index 0000000..ccdee46 --- /dev/null +++ b/demo-course/course/html/994f177a47dd4c8d9f9d7f55e680163d.html @@ -0,0 +1,4 @@ +
+

As you learn more about the components available to you in Studio, you'll be able to build courses that include rich text, images, videos, engaging assessments, social interaction, and more! 

+
A screenshot of 8 Add component buttons in Studio
+
\ No newline at end of file diff --git a/demo-course/course/html/994f177a47dd4c8d9f9d7f55e680163d.xml b/demo-course/course/html/994f177a47dd4c8d9f9d7f55e680163d.xml new file mode 100644 index 0000000..57e5fa3 --- /dev/null +++ b/demo-course/course/html/994f177a47dd4c8d9f9d7f55e680163d.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/99bb8563c80d4434825953355f3430cc.html b/demo-course/course/html/99bb8563c80d4434825953355f3430cc.html new file mode 100644 index 0000000..3431481 --- /dev/null +++ b/demo-course/course/html/99bb8563c80d4434825953355f3430cc.html @@ -0,0 +1,4 @@ +
+

Try it!

+

We've added a Staff-Graded Points component below for you to try out for yourself. You'll need to download and re-upload the CSV file it provides you in order to give yourself points for this assessment.

+
\ No newline at end of file diff --git a/demo-course/course/html/99bb8563c80d4434825953355f3430cc.xml b/demo-course/course/html/99bb8563c80d4434825953355f3430cc.xml new file mode 100644 index 0000000..ab90327 --- /dev/null +++ b/demo-course/course/html/99bb8563c80d4434825953355f3430cc.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/9a2f4f75927e476c992d688f2ba62916.html b/demo-course/course/html/9a2f4f75927e476c992d688f2ba62916.html new file mode 100644 index 0000000..485ffd9 --- /dev/null +++ b/demo-course/course/html/9a2f4f75927e476c992d688f2ba62916.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/9a2f4f75927e476c992d688f2ba62916.xml b/demo-course/course/html/9a2f4f75927e476c992d688f2ba62916.xml new file mode 100644 index 0000000..8d6719b --- /dev/null +++ b/demo-course/course/html/9a2f4f75927e476c992d688f2ba62916.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/9a30c10669084861a493d604cfa9c579.html b/demo-course/course/html/9a30c10669084861a493d604cfa9c579.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/9a30c10669084861a493d604cfa9c579.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/9a30c10669084861a493d604cfa9c579.xml b/demo-course/course/html/9a30c10669084861a493d604cfa9c579.xml new file mode 100644 index 0000000..69ac442 --- /dev/null +++ b/demo-course/course/html/9a30c10669084861a493d604cfa9c579.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/9b4148c7893d43d9ad7c870ea7294ebb.html b/demo-course/course/html/9b4148c7893d43d9ad7c870ea7294ebb.html new file mode 100644 index 0000000..a429dc8 --- /dev/null +++ b/demo-course/course/html/9b4148c7893d43d9ad7c870ea7294ebb.html @@ -0,0 +1,4 @@ +
+

Try it!

+

Complete the peer assessment activity below. Due to the nature of peer assessment, if there are no other learners currently taking this course then you won't be able to receive peer feedback or a final grade on the assignment. 

+
\ No newline at end of file diff --git a/demo-course/course/html/9b4148c7893d43d9ad7c870ea7294ebb.xml b/demo-course/course/html/9b4148c7893d43d9ad7c870ea7294ebb.xml new file mode 100644 index 0000000..fae5ea7 --- /dev/null +++ b/demo-course/course/html/9b4148c7893d43d9ad7c870ea7294ebb.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/9dc5a2d3e24d4531889b41a242e930b1.html b/demo-course/course/html/9dc5a2d3e24d4531889b41a242e930b1.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/9dc5a2d3e24d4531889b41a242e930b1.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/9dc5a2d3e24d4531889b41a242e930b1.xml b/demo-course/course/html/9dc5a2d3e24d4531889b41a242e930b1.xml new file mode 100644 index 0000000..12daa43 --- /dev/null +++ b/demo-course/course/html/9dc5a2d3e24d4531889b41a242e930b1.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/9de5c1f7f6af49ca969f257406343017.html b/demo-course/course/html/9de5c1f7f6af49ca969f257406343017.html new file mode 100644 index 0000000..555d607 --- /dev/null +++ b/demo-course/course/html/9de5c1f7f6af49ca969f257406343017.html @@ -0,0 +1,9 @@ +
+

Discussions give learners the opportunity interact and engage with one each other and help to grow your course community by introducing social elements to their learning. Discussion forums are included by default in every course, though they can be closed during certain times by configuring "blackout dates".

+

Best Practices

+
    +
  • Be available to students in the discussion prompt. Don't just let them ask questions in an empty void. 
  • +
  • Use encouraging language, upvoting, and pinning to promote good discussion.
  • +
  • Add a text "prompt" before each discussion component to introduce the topic that you want learners to discuss. The discussion component itself does not contain any text and can be easy for learners to overlook, and you should always tell your learners exactly what they are expected to do.
  • +
+
\ No newline at end of file diff --git a/demo-course/course/html/9de5c1f7f6af49ca969f257406343017.xml b/demo-course/course/html/9de5c1f7f6af49ca969f257406343017.xml new file mode 100644 index 0000000..07666a3 --- /dev/null +++ b/demo-course/course/html/9de5c1f7f6af49ca969f257406343017.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/9ea15e93acf54c0c8b94024ba86dbb42.html b/demo-course/course/html/9ea15e93acf54c0c8b94024ba86dbb42.html new file mode 100644 index 0000000..048a68f --- /dev/null +++ b/demo-course/course/html/9ea15e93acf54c0c8b94024ba86dbb42.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/html/9ea15e93acf54c0c8b94024ba86dbb42.xml b/demo-course/course/html/9ea15e93acf54c0c8b94024ba86dbb42.xml new file mode 100644 index 0000000..c0c3bda --- /dev/null +++ b/demo-course/course/html/9ea15e93acf54c0c8b94024ba86dbb42.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/a01fc100e5e64fc5bbca09daa190cfee.html b/demo-course/course/html/a01fc100e5e64fc5bbca09daa190cfee.html new file mode 100644 index 0000000..2fb90e3 --- /dev/null +++ b/demo-course/course/html/a01fc100e5e64fc5bbca09daa190cfee.html @@ -0,0 +1,3 @@ +

The Open edX Logo

+

Welcome to the Open edX®  learning management system! The Open edX platform is one of the globe's leading open-source online learning platforms which has been widely adopted by educational institutions, corporations, governments and other organizations around the world to offer Massive Open Online Courses (MOOCs) and online learning programs.

+

You can use this course to learn about the Open edX platform, understand what tools and features you can leverage for your learning program, and get support from the active Open edX community. 

\ No newline at end of file diff --git a/demo-course/course/html/a01fc100e5e64fc5bbca09daa190cfee.xml b/demo-course/course/html/a01fc100e5e64fc5bbca09daa190cfee.xml new file mode 100644 index 0000000..e11c4b4 --- /dev/null +++ b/demo-course/course/html/a01fc100e5e64fc5bbca09daa190cfee.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/a0a0c0dd749740adaf128c9828e36c9d.html b/demo-course/course/html/a0a0c0dd749740adaf128c9828e36c9d.html new file mode 100644 index 0000000..ee3ea91 --- /dev/null +++ b/demo-course/course/html/a0a0c0dd749740adaf128c9828e36c9d.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/a0a0c0dd749740adaf128c9828e36c9d.xml b/demo-course/course/html/a0a0c0dd749740adaf128c9828e36c9d.xml new file mode 100644 index 0000000..dd474df --- /dev/null +++ b/demo-course/course/html/a0a0c0dd749740adaf128c9828e36c9d.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/a0bdfd5da3564da2a82aec81a512476b.html b/demo-course/course/html/a0bdfd5da3564da2a82aec81a512476b.html new file mode 100644 index 0000000..87ab576 --- /dev/null +++ b/demo-course/course/html/a0bdfd5da3564da2a82aec81a512476b.html @@ -0,0 +1,22 @@ +

Another example is this image hotspot using only HTML, CSS, and a small snippet of Javascript: 

+

Click on the '+' sign below to view facts about different parts of the piano. 

+
+
Image of a grand piano with three plus signs, one on the keys, one on the pedals and one on the harp +
+
+

Pedals on pianos are called – from left to right – una corda, sostenuto, and the sustain pedal.

+
+
+
+
+

Up until the 1950s, piano keys were made from elephant tusks. Today, in order to protect and preserve elephants, most piano keys are made from plastic.

+
+
+
+
+

On larger grand pianos the "harp", or metal frame, can hold up to 30 tons of tension!

+
+
+
+
+

\ No newline at end of file diff --git a/demo-course/course/html/a0bdfd5da3564da2a82aec81a512476b.xml b/demo-course/course/html/a0bdfd5da3564da2a82aec81a512476b.xml new file mode 100644 index 0000000..82d98ef --- /dev/null +++ b/demo-course/course/html/a0bdfd5da3564da2a82aec81a512476b.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/a20a7b0044a34d23a0a8fdd639a9e5d3.html b/demo-course/course/html/a20a7b0044a34d23a0a8fdd639a9e5d3.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/a20a7b0044a34d23a0a8fdd639a9e5d3.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/a20a7b0044a34d23a0a8fdd639a9e5d3.xml b/demo-course/course/html/a20a7b0044a34d23a0a8fdd639a9e5d3.xml new file mode 100644 index 0000000..2959f7d --- /dev/null +++ b/demo-course/course/html/a20a7b0044a34d23a0a8fdd639a9e5d3.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/a27e0ccd256c4714b6f685fe44b8bcfe.html b/demo-course/course/html/a27e0ccd256c4714b6f685fe44b8bcfe.html new file mode 100644 index 0000000..c6237d4 --- /dev/null +++ b/demo-course/course/html/a27e0ccd256c4714b6f685fe44b8bcfe.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/a27e0ccd256c4714b6f685fe44b8bcfe.xml b/demo-course/course/html/a27e0ccd256c4714b6f685fe44b8bcfe.xml new file mode 100644 index 0000000..ee0bf08 --- /dev/null +++ b/demo-course/course/html/a27e0ccd256c4714b6f685fe44b8bcfe.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/a2993cb9ff4e466db1c319cce50be8cd.html b/demo-course/course/html/a2993cb9ff4e466db1c319cce50be8cd.html new file mode 100644 index 0000000..3e366b8 --- /dev/null +++ b/demo-course/course/html/a2993cb9ff4e466db1c319cce50be8cd.html @@ -0,0 +1,4 @@ +
+

Try it!

+

Try the drop-down problems below. The second problem combines several drop-down problems into a table, each problem with their own score and feedback. 

+
\ No newline at end of file diff --git a/demo-course/course/html/a2993cb9ff4e466db1c319cce50be8cd.xml b/demo-course/course/html/a2993cb9ff4e466db1c319cce50be8cd.xml new file mode 100644 index 0000000..9635269 --- /dev/null +++ b/demo-course/course/html/a2993cb9ff4e466db1c319cce50be8cd.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/a7df8d8a1b5f4775ad546ef83afa34e7.html b/demo-course/course/html/a7df8d8a1b5f4775ad546ef83afa34e7.html new file mode 100644 index 0000000..ce9bd78 --- /dev/null +++ b/demo-course/course/html/a7df8d8a1b5f4775ad546ef83afa34e7.html @@ -0,0 +1,5 @@ +
+

Try it!

+

The first problem uses the Open edX® LMS's internal Python problem type to assess a simple SQL query. There is some logic for error handling, so this can be appropriate for very simple, well-defined coding questions. 

+

The second problem uses an external tool connected via LTI to execute and assess the code using unit tests. These kinds of tools can be used to assess more complicated coding scenarios. 

+
\ No newline at end of file diff --git a/demo-course/course/html/a7df8d8a1b5f4775ad546ef83afa34e7.xml b/demo-course/course/html/a7df8d8a1b5f4775ad546ef83afa34e7.xml new file mode 100644 index 0000000..c08e45d --- /dev/null +++ b/demo-course/course/html/a7df8d8a1b5f4775ad546ef83afa34e7.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/a8c7df65677b43219d5fcc5fc9f84125.html b/demo-course/course/html/a8c7df65677b43219d5fcc5fc9f84125.html new file mode 100644 index 0000000..b2d717c --- /dev/null +++ b/demo-course/course/html/a8c7df65677b43219d5fcc5fc9f84125.html @@ -0,0 +1,14 @@ +
+
+

The Open Response Assessment (commonly known as ORA) assignment type allows you to ask learners to submit text, images and more for grading according to a rubric. There are many different ways to set up ORA assessments, including any combination of:

+
    +
  • Self-Assessment - Student assesses their own submission based on a rubric. 
  • +
  • Peer-Assessment - Submission is distributed to peers in the course for assessment based on a rubric. The learner’s final score on a response is the sum of the median scores from all peer assessors for all of the required criteria. More information on how scores are calculated can be found in the documentation
  • +
  • Staff-Assessment - Staff assess the submission of a student based on a rubric. 
  • +
+

These modes allow you to assess the same submission in different ways before returning a grade back to your learners. ORAs are one of the most powerful assignment types on the Open edX platform and they can be used for a large number of different use-cases.

+
+

menu_bookDocumentation 

+
+
+
\ No newline at end of file diff --git a/demo-course/course/html/a8c7df65677b43219d5fcc5fc9f84125.xml b/demo-course/course/html/a8c7df65677b43219d5fcc5fc9f84125.xml new file mode 100644 index 0000000..23d7881 --- /dev/null +++ b/demo-course/course/html/a8c7df65677b43219d5fcc5fc9f84125.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/aa1eb42464f14ccd91999ed88e3a154c.html b/demo-course/course/html/aa1eb42464f14ccd91999ed88e3a154c.html new file mode 100644 index 0000000..69048da --- /dev/null +++ b/demo-course/course/html/aa1eb42464f14ccd91999ed88e3a154c.html @@ -0,0 +1,8 @@ +
+

Note: Configuration Required

+

There are two pieces of configuration that may be required to view the SCORM demonstration. If you choose not to do either, then you may also review the video to see the functionality. 

+
SCORM XBlock
+

The SCORM X-block may not be installed by default on your instance of the Open edX® platform. If it is not installed, then the "Try it!" examples below will not work correctly. If you would like to install the SCORM XBlock, follow the documentation.

+
SCORM Demonstration Package
+

SCORM packages do not migrate with courses, so you will have to upload the SCORM package in studio. The package can be downloaded here. Review the video to see how to upload the package into the SCORM XBlock. 

+
\ No newline at end of file diff --git a/demo-course/course/html/aa1eb42464f14ccd91999ed88e3a154c.xml b/demo-course/course/html/aa1eb42464f14ccd91999ed88e3a154c.xml new file mode 100644 index 0000000..1699b97 --- /dev/null +++ b/demo-course/course/html/aa1eb42464f14ccd91999ed88e3a154c.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/aa51a9fe09ed4d399ff713e13f3578a1.html b/demo-course/course/html/aa51a9fe09ed4d399ff713e13f3578a1.html new file mode 100644 index 0000000..8c5d65e --- /dev/null +++ b/demo-course/course/html/aa51a9fe09ed4d399ff713e13f3578a1.html @@ -0,0 +1,9 @@ +
+

Try it!

+

Try out some examples of how to use this problem below. We've included three versions of this problem type so you can see how flexible it is:

+
    +
  • A simple check against a list of correct answers
  • +
  • A question where the answer is checked against a regular expression (regex)
  • +
  • A question where there is no singular correct answer and any input is accepted
  • +
+
\ No newline at end of file diff --git a/demo-course/course/html/aa51a9fe09ed4d399ff713e13f3578a1.xml b/demo-course/course/html/aa51a9fe09ed4d399ff713e13f3578a1.xml new file mode 100644 index 0000000..feaa6de --- /dev/null +++ b/demo-course/course/html/aa51a9fe09ed4d399ff713e13f3578a1.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/ad89e35b42c34d9da26e0c4d12f131af.html b/demo-course/course/html/ad89e35b42c34d9da26e0c4d12f131af.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/ad89e35b42c34d9da26e0c4d12f131af.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/ad89e35b42c34d9da26e0c4d12f131af.xml b/demo-course/course/html/ad89e35b42c34d9da26e0c4d12f131af.xml new file mode 100644 index 0000000..7c9e70c --- /dev/null +++ b/demo-course/course/html/ad89e35b42c34d9da26e0c4d12f131af.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/aebdc7b4444c44398ad2147cd7ed80d8.html b/demo-course/course/html/aebdc7b4444c44398ad2147cd7ed80d8.html new file mode 100644 index 0000000..295338c --- /dev/null +++ b/demo-course/course/html/aebdc7b4444c44398ad2147cd7ed80d8.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
diff --git a/demo-course/course/html/aebdc7b4444c44398ad2147cd7ed80d8.xml b/demo-course/course/html/aebdc7b4444c44398ad2147cd7ed80d8.xml new file mode 100644 index 0000000..7d6cd43 --- /dev/null +++ b/demo-course/course/html/aebdc7b4444c44398ad2147cd7ed80d8.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/af1c8a6377cc4cfcb2a34d2993124388.html b/demo-course/course/html/af1c8a6377cc4cfcb2a34d2993124388.html new file mode 100644 index 0000000..e1e7867 --- /dev/null +++ b/demo-course/course/html/af1c8a6377cc4cfcb2a34d2993124388.html @@ -0,0 +1,4 @@ +
+

Try it!

+

Check out the interactive periodic table tool by hovering over an element to display its information over the table. You can also click on certain attributes to compare the table by those attributes. 

+
\ No newline at end of file diff --git a/demo-course/course/html/af1c8a6377cc4cfcb2a34d2993124388.xml b/demo-course/course/html/af1c8a6377cc4cfcb2a34d2993124388.xml new file mode 100644 index 0000000..abd651c --- /dev/null +++ b/demo-course/course/html/af1c8a6377cc4cfcb2a34d2993124388.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/af7a544353084ef58811068ec3f63f6c.html b/demo-course/course/html/af7a544353084ef58811068ec3f63f6c.html new file mode 100644 index 0000000..d2db4d7 --- /dev/null +++ b/demo-course/course/html/af7a544353084ef58811068ec3f63f6c.html @@ -0,0 +1,4 @@ +
+

Try it!

+

Try out the circuit schematic builder in the activity below. This is a problem that first featured in MITx’s course 6.002.1x - Circuits and Electronics 1: Basic Circuit Analysis.

+
\ No newline at end of file diff --git a/demo-course/course/html/af7a544353084ef58811068ec3f63f6c.xml b/demo-course/course/html/af7a544353084ef58811068ec3f63f6c.xml new file mode 100644 index 0000000..acc8ffa --- /dev/null +++ b/demo-course/course/html/af7a544353084ef58811068ec3f63f6c.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/b1334633b96147b8809f64e2d403ee1b.html b/demo-course/course/html/b1334633b96147b8809f64e2d403ee1b.html new file mode 100644 index 0000000..170a603 --- /dev/null +++ b/demo-course/course/html/b1334633b96147b8809f64e2d403ee1b.html @@ -0,0 +1,23 @@ + + +
+ + + + +
+

The video below will prompt the user with a question at the 8 second mark.

\ No newline at end of file diff --git a/demo-course/course/html/b1334633b96147b8809f64e2d403ee1b.xml b/demo-course/course/html/b1334633b96147b8809f64e2d403ee1b.xml new file mode 100644 index 0000000..dbb2272 --- /dev/null +++ b/demo-course/course/html/b1334633b96147b8809f64e2d403ee1b.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/b14823564ee64c4e8724da061ab21d16.html b/demo-course/course/html/b14823564ee64c4e8724da061ab21d16.html new file mode 100644 index 0000000..e48e800 --- /dev/null +++ b/demo-course/course/html/b14823564ee64c4e8724da061ab21d16.html @@ -0,0 +1,8 @@ +
+
+

The Protein Builder asks learners to create specified protein shapes by using the building blocks of proteins and amino acids. They will be able to see how that string will form into a structure. They are presented with a goal protein shape and their task is to try to recreate it.

+
+

menu_bookDocumentation 

+
+
+
\ No newline at end of file diff --git a/demo-course/course/html/b14823564ee64c4e8724da061ab21d16.xml b/demo-course/course/html/b14823564ee64c4e8724da061ab21d16.xml new file mode 100644 index 0000000..90a7185 --- /dev/null +++ b/demo-course/course/html/b14823564ee64c4e8724da061ab21d16.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/b2510cd7b1fe4555bf2f49543fd0947f.html b/demo-course/course/html/b2510cd7b1fe4555bf2f49543fd0947f.html new file mode 100644 index 0000000..26cf3fe --- /dev/null +++ b/demo-course/course/html/b2510cd7b1fe4555bf2f49543fd0947f.html @@ -0,0 +1,8 @@ +
+
+

The Image-Mapped Input problem, also known as Point on Picture, requires learners to identify a point on a picture, as you might expect from the name. You can use XML to specify the coordinates of an area on the image, and the learner must place a pin in that area in order to submit their answer to the question correctly.

+
+

menu_bookDocumentation 

+
+
+
\ No newline at end of file diff --git a/demo-course/course/html/b2510cd7b1fe4555bf2f49543fd0947f.xml b/demo-course/course/html/b2510cd7b1fe4555bf2f49543fd0947f.xml new file mode 100644 index 0000000..0bbfeda --- /dev/null +++ b/demo-course/course/html/b2510cd7b1fe4555bf2f49543fd0947f.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/b38b15de1c404e13935a9fd342a1fcf9.html b/demo-course/course/html/b38b15de1c404e13935a9fd342a1fcf9.html new file mode 100644 index 0000000..b95b63f --- /dev/null +++ b/demo-course/course/html/b38b15de1c404e13935a9fd342a1fcf9.html @@ -0,0 +1,6 @@ +
+

Units

+

Units are pages of content which exist within subsections. At the top of this page there is a horizontal navigation bar with blocks shown across it. That navigation bar shows all of the units present within the subsection you are currently in, with each unit represented by a block and each icon dynamically chosen based on the type of content present in that unit.

+

A unit can be made up of any number of different components, allowing you create entirely custom learning experiences on each page.

+
a diagram representation of an Open edX course showing the sections, subsections, and units branching from a course
+
\ No newline at end of file diff --git a/demo-course/course/html/b38b15de1c404e13935a9fd342a1fcf9.xml b/demo-course/course/html/b38b15de1c404e13935a9fd342a1fcf9.xml new file mode 100644 index 0000000..97516b3 --- /dev/null +++ b/demo-course/course/html/b38b15de1c404e13935a9fd342a1fcf9.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/b3c8810f76d54157abcdc54c55640457.html b/demo-course/course/html/b3c8810f76d54157abcdc54c55640457.html new file mode 100644 index 0000000..0736238 --- /dev/null +++ b/demo-course/course/html/b3c8810f76d54157abcdc54c55640457.html @@ -0,0 +1,4 @@ +
+

In the example above, you can see a common use case for Content Libraries: delivering randomized problems in a quiz or exam. The questions are stored in the content library and then pulled into the course by the randomized content block. If we modify any of those problems, that course then starts using its own version of the problem, so any modifications made to that problem are unique to the course. If we wanted to change this problem across all courses using that problem, we would instead update the content library and pull the updated version down into those courses instead.

+

The randomized content block will deliver a randomized subset and order of those problems to each individual learner and even only deliver a subset of those problems (such as only 3 of the 4 available problems), but where the modified problem appears, it will always be that courses' version of the problem, not the core content library's original. This same tool can be used for non-problem content too, allowing for a randomized content experience!

+
\ No newline at end of file diff --git a/demo-course/course/html/b3c8810f76d54157abcdc54c55640457.xml b/demo-course/course/html/b3c8810f76d54157abcdc54c55640457.xml new file mode 100644 index 0000000..45e4b76 --- /dev/null +++ b/demo-course/course/html/b3c8810f76d54157abcdc54c55640457.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/b3ff2896af854665bc903d5ea42e65f0.html b/demo-course/course/html/b3ff2896af854665bc903d5ea42e65f0.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/b3ff2896af854665bc903d5ea42e65f0.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/b3ff2896af854665bc903d5ea42e65f0.xml b/demo-course/course/html/b3ff2896af854665bc903d5ea42e65f0.xml new file mode 100644 index 0000000..31fc8e6 --- /dev/null +++ b/demo-course/course/html/b3ff2896af854665bc903d5ea42e65f0.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/b521687f25a84d87a3c5895f4cfdb5ac.html b/demo-course/course/html/b521687f25a84d87a3c5895f4cfdb5ac.html new file mode 100644 index 0000000..10a5fa5 --- /dev/null +++ b/demo-course/course/html/b521687f25a84d87a3c5895f4cfdb5ac.html @@ -0,0 +1,4 @@ +
+

Try it!

+

We've prepared a short self-assessment activity for you to complete using the ORA tool below. You'll be reviewing and grading your own answer in the next step of this activity according to a rubric we've set up in Studio, so give yourself something to work with!

+
\ No newline at end of file diff --git a/demo-course/course/html/b521687f25a84d87a3c5895f4cfdb5ac.xml b/demo-course/course/html/b521687f25a84d87a3c5895f4cfdb5ac.xml new file mode 100644 index 0000000..d9eb7f7 --- /dev/null +++ b/demo-course/course/html/b521687f25a84d87a3c5895f4cfdb5ac.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/b539ed5ff0044a1eae21c93269feb4e0.html b/demo-course/course/html/b539ed5ff0044a1eae21c93269feb4e0.html new file mode 100644 index 0000000..18d4660 --- /dev/null +++ b/demo-course/course/html/b539ed5ff0044a1eae21c93269feb4e0.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/b539ed5ff0044a1eae21c93269feb4e0.xml b/demo-course/course/html/b539ed5ff0044a1eae21c93269feb4e0.xml new file mode 100644 index 0000000..ed14222 --- /dev/null +++ b/demo-course/course/html/b539ed5ff0044a1eae21c93269feb4e0.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/b570eab98f9a4c19a067ba8bd6ff570e.html b/demo-course/course/html/b570eab98f9a4c19a067ba8bd6ff570e.html new file mode 100644 index 0000000..e0624aa --- /dev/null +++ b/demo-course/course/html/b570eab98f9a4c19a067ba8bd6ff570e.html @@ -0,0 +1,3 @@ +

Let's look at some other social tools you can use to make use of the most powerful learning assets at your disposal - your learners.

+

Online learning can be isolating and it can be hard to stay engaged in a course when you feel alone. Discussions are great for alleviating this, but can be intimidating to some learners, and social learning activities allow your learners to engage with each other for specific learning purposes and feel like part of a wider learning cohort. This in turn increases engagement, retention and overall learner happiness! So where you can, look for opportunities to include social learning in your Open edX courses.

+

Most of the activities and tools we'll be covering in this subsection will only really work if your courses have concurrent learners, so use them with caution on self-paced courses that might not have an active group of learners.

\ No newline at end of file diff --git a/demo-course/course/html/b570eab98f9a4c19a067ba8bd6ff570e.xml b/demo-course/course/html/b570eab98f9a4c19a067ba8bd6ff570e.xml new file mode 100644 index 0000000..20da6e4 --- /dev/null +++ b/demo-course/course/html/b570eab98f9a4c19a067ba8bd6ff570e.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/b5ed3e61623f4c16add2394a45f2add1.html b/demo-course/course/html/b5ed3e61623f4c16add2394a45f2add1.html new file mode 100644 index 0000000..28772aa --- /dev/null +++ b/demo-course/course/html/b5ed3e61623f4c16add2394a45f2add1.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/b5ed3e61623f4c16add2394a45f2add1.xml b/demo-course/course/html/b5ed3e61623f4c16add2394a45f2add1.xml new file mode 100644 index 0000000..fd8e0ad --- /dev/null +++ b/demo-course/course/html/b5ed3e61623f4c16add2394a45f2add1.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/b6e5dc9098e84e89834cda1082adeb25.html b/demo-course/course/html/b6e5dc9098e84e89834cda1082adeb25.html new file mode 100644 index 0000000..c8484bb --- /dev/null +++ b/demo-course/course/html/b6e5dc9098e84e89834cda1082adeb25.html @@ -0,0 +1,6 @@ +
+

While the two are related, "edX" only ever refers to the 2U brand and their edX.org website, whereas "Open edX®" refers to the open-source learning project. At this moment, you're not using edX - you're using the Open edX® platform!

+
Infographic showing the relationship between Open edX Platform, Axim, edx.org and other users
+
+

+

\ No newline at end of file diff --git a/demo-course/course/html/b6e5dc9098e84e89834cda1082adeb25.xml b/demo-course/course/html/b6e5dc9098e84e89834cda1082adeb25.xml new file mode 100644 index 0000000..e468f00 --- /dev/null +++ b/demo-course/course/html/b6e5dc9098e84e89834cda1082adeb25.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/b8ba5a08c4c143dda02b1f804b252322.html b/demo-course/course/html/b8ba5a08c4c143dda02b1f804b252322.html new file mode 100644 index 0000000..71dbbb3 --- /dev/null +++ b/demo-course/course/html/b8ba5a08c4c143dda02b1f804b252322.html @@ -0,0 +1,8 @@ +
+
+

Annotation problems allow you to ask questions based on an annotated passage of text. This is great for subjects with a large amount of text analysis, such as law, literature or even programming, as you can ask questions about specific passages while providing their context so that your learners are sure about exactly which portion of the text or code you are asking about.

+
+

menu_bookDocumentation 

+
+
+
\ No newline at end of file diff --git a/demo-course/course/html/b8ba5a08c4c143dda02b1f804b252322.xml b/demo-course/course/html/b8ba5a08c4c143dda02b1f804b252322.xml new file mode 100644 index 0000000..ca4cfa3 --- /dev/null +++ b/demo-course/course/html/b8ba5a08c4c143dda02b1f804b252322.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/b8fbaf2d8fe845f8b2ead7a9abeddb34.html b/demo-course/course/html/b8fbaf2d8fe845f8b2ead7a9abeddb34.html new file mode 100644 index 0000000..be12245 --- /dev/null +++ b/demo-course/course/html/b8fbaf2d8fe845f8b2ead7a9abeddb34.html @@ -0,0 +1,6 @@ +
+

Sections

+

A section is the largest organizational piece of an Open edX course. Sections contain content and are commonly used to organize "Modules" or "Weeks" in a course. 

+

Sections are used to control release dates and visibility for all content they contain and to provide a logical structure for learners. The section you are currently in is called "Module 1: Introduction to the Open edX® platform".

+
a diagram representation of an Open edX course showing only the sections branching out from a course
+
\ No newline at end of file diff --git a/demo-course/course/html/b8fbaf2d8fe845f8b2ead7a9abeddb34.xml b/demo-course/course/html/b8fbaf2d8fe845f8b2ead7a9abeddb34.xml new file mode 100644 index 0000000..5ca599e --- /dev/null +++ b/demo-course/course/html/b8fbaf2d8fe845f8b2ead7a9abeddb34.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/b8ff88e9af9240b3aab7ec7949c6734d.html b/demo-course/course/html/b8ff88e9af9240b3aab7ec7949c6734d.html new file mode 100644 index 0000000..f4fb2a0 --- /dev/null +++ b/demo-course/course/html/b8ff88e9af9240b3aab7ec7949c6734d.html @@ -0,0 +1,4 @@ +
+

Try it!

+

There is a sub-section after this one called "Unlocked Content" which you can only access after you've answered the problem below correctly. Try moving on to the next section without completing the problem or completing it incorrectly. Then answer the problem correctly and move to the next section again. Note where you end up. 

+
\ No newline at end of file diff --git a/demo-course/course/html/b8ff88e9af9240b3aab7ec7949c6734d.xml b/demo-course/course/html/b8ff88e9af9240b3aab7ec7949c6734d.xml new file mode 100644 index 0000000..2f82e8c --- /dev/null +++ b/demo-course/course/html/b8ff88e9af9240b3aab7ec7949c6734d.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/bb48f8b8f68d4a7fbf70a4d77a27f13d.html b/demo-course/course/html/bb48f8b8f68d4a7fbf70a4d77a27f13d.html new file mode 100644 index 0000000..7a312f2 --- /dev/null +++ b/demo-course/course/html/bb48f8b8f68d4a7fbf70a4d77a27f13d.html @@ -0,0 +1,6495 @@ +
+
+
+
+

An Interactive Reference Table

+

This interactive periodic table of the elements was first used in MIT's 3.091x: Introduction to Solid State Chemistry. The table reveals detailed information about each element as you mouse over it.

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ 1 +
+
+ H +
+
+ Hydrogen +
+
+ + 1.00794 + + + g/mol + +
+
+
+
+ + + + + + + + +
+ Atomic Weight +
+
+ + 1.00794 + + + g/mol + +
+ + + +
+ Atomic Volume +
+
+ + 14.1 + + + cm³/mol + +
+ + + +
+ Ionic Radius +
+
+ + - + + + pm + +
+ + + +
+ Density +
+
+ + 0.0899 + + + g/cm³ + +
+ + + +
+ Melting Point +
+
+ + -259.34 + + + C + +
+ + + +
+ Boiling Point +
+
+ + -252.87 + + + C + +
+ + + +
+ Polarizability +
+
+ + 0.667 + + + + +
+ + + +
+ Electronegativity +
+
+ + 2.2 + + + + +
+ + + +
+ First Ionization Potential +
+
+ + 13.598 + + + eV + +
+ + + +
+ Crystal Structure +
+
+ + Hex + + + + +
+ + + +
+ Oxidation States +
+
+ + 1 + + + + +
+ + + +
+ Electronic Configuration +
+
+ + 1s¹ + + + + +
+ + + +
+ Enthalpy of Fusion +
+
+ + 0.0586 + + + kJ/mol + +
+ + + +
+ Enthalpy of Vaporization +
+
+ + 0.449 + + + kJ/mol + +
+ + + +
+ Covalent Radius +
+
+ + 0.32 + + + Å + +
+ + + +
+ Thermal Conductivity +
+
+ + 0.001815 + + + W⋅cm⁻¹⋅K⁻¹ + +
+ + + +
+ Specific Heat Capacity +
+
+ + 14.304 + + + J⋅g⁻¹⋅K⁻¹ + +
+ + + +
+ Enthalpy of Atomization +
+
+ + 217.57 + + + kJ/mol + +
+ + +
+
+
+
+ +
Hydrogen
+ +
H
+ +
1
+ +
1.00794
+ +
14.1
+ +
0.0899
+ +
-259.34
+ +
-252.87
+ +
13.598
+ +
2.2
+ +
1s¹
+ +
1
+ +
0.667
+ +
-
+ +
Hex
+ +
0.0586
+ +
0.449
+ +
0.32
+ +
0.001815
+ +
14.304
+ +
217.57
+ +
1
+ +
1
+ +
+
+
+ +
Helium
+ +
He
+ +
2
+ +
4.002602
+ +
31.8
+ +
0.1785
+ +
-272.2
+ +
-268.93
+ +
24.587
+ +
-
+ +
1s²
+ +
-
+ +
0.205
+ +
-
+ +
Hex
+ +
-
+ +
0.0829
+ +
0.31
+ +
0.00152
+ +
5.193
+ +
-
+ +
1
+ +
18
+ +
+
+
+ +
Lithium
+ +
Li
+ +
3
+ +
6.941
+ +
13
+ +
0.534
+ +
180.5
+ +
1342
+ +
5.392
+ +
0.98
+ +
[He]2s¹
+ +
1
+ +
24.3
+ +
76
+ +
BCC
+ +
3.00
+ +
134.68
+ +
1.23
+ +
0.848
+ +
3.582
+ +
160.67
+ +
2
+ +
1
+ +
+
+
+ +
Beryllium
+ +
Be
+ +
4
+ +
9.012182
+ +
4.88
+ +
1.8477
+ +
1287
+ +
2471
+ +
9.322
+ +
1.57
+ +
[He]2s²
+ +
2
+ +
5.6
+ +
27
+ +
Hex
+ +
11.72
+ +
294.66
+ +
0.89
+ +
2.01
+ +
1.825
+ +
326.35
+ +
2
+ +
2
+ +
+
+
+ +
Boron
+ +
B
+ +
5
+ +
10.811
+ +
4.68
+ +
2.31
+ +
2075
+ +
4000
+ +
8.298
+ +
2.04
+ +
[He]2s²p¹
+ +
3
+ +
3.03
+ +
11
+ +
Rhom
+ +
22.18
+ +
480
+ +
0.82
+ +
0.274
+ +
1.026
+ +
573.21
+ +
2
+ +
13
+ +
+
+
+ +
Carbon
+ +
C
+ +
6
+ +
12.011
+ +
5.34
+ +
2.25
+ +
4492
+ +
3825
+ +
11.26
+ +
2.55
+ +
[He]2s²p²
+ +
2,+/-4
+ +
1.76
+ +
-
+ +
Hex
+ +
104.60
+ +
716.72
+ +
0.77
+ +
1.2-1.5
+ +
0.709
+ +
-
+ +
2
+ +
14
+ +
+
+
+ +
Nitrogen
+ +
N
+ +
7
+ +
14.00674
+ +
17.3
+ +
1.25046
+ +
-210
+ +
-195.79
+ +
14.534
+ +
3.04
+ +
[He]2s²p³
+ +
2,+/-3,4,5
+ +
1.1
+ +
146
+ +
Hex
+ +
0.3605
+ +
2.79
+ +
0.75
+ +
0.0002598
+ +
1.040
+ +
472.79
+ +
2
+ +
15
+ +
+
+
+ +
Oxygen
+ +
O
+ +
8
+ +
15.9994
+ +
14
+ +
1.429
+ +
-218.79
+ +
-182.95
+ +
13.618
+ +
3.44
+ +
[He]2s²p⁴
+ +
-2
+ +
0.802
+ +
138
+ +
SC
+ +
0.2224
+ +
3.41
+ +
0.73
+ +
0.0002575
+ +
0.918
+ +
249.37
+ +
2
+ +
16
+ +
+
+
+ +
Fluorine
+ +
F
+ +
9
+ +
18.9984032
+ +
17.1
+ +
1.69
+ +
-219.62
+ +
-188.12
+ +
17.422
+ +
3.98
+ +
[He]2s²p⁵
+ +
-1
+ +
0.557
+ +
131
+ +
SC
+ +
0.255
+ +
3.31
+ +
0.72
+ +
0.000279
+ +
0.824
+ +
79.08
+ +
2
+ +
17
+ +
+
+
+ +
Neon
+ +
Ne
+ +
10
+ +
20.1797
+ +
16.8
+ +
0.9002
+ +
-248.59
+ +
-246.08
+ +
21.564
+ +
-
+ +
[He]2s²p⁶
+ +
-
+ +
0.396
+ +
-
+ +
FCC
+ +
0.3347
+ +
1.71
+ +
0.71
+ +
0.000493
+ +
1.03
+ +
-
+ +
2
+ +
18
+ +
+
+
+ +
Sodium
+ +
Na
+ +
11
+ +
22.989768
+ +
23.7
+ +
0.97
+ +
97.72
+ +
883
+ +
5.139
+ +
0.93
+ +
[Ne]3s¹
+ +
1
+ +
23.6
+ +
102
+ +
BCC
+ +
2.594
+ +
89.04
+ +
1.54
+ +
1.42
+ +
1.228
+ +
108.37
+ +
3
+ +
1
+ +
+
+
+ +
Magnesium
+ +
Mg
+ +
12
+ +
24.305
+ +
13.97
+ +
1.74
+ +
650
+ +
1090
+ +
7.646
+ +
1.31
+ +
[Ne]3s²
+ +
2
+ +
10.6
+ +
72
+ +
Hex
+ +
11.72
+ +
294.66
+ +
1.36
+ +
1.56
+ +
1.023
+ +
148.53
+ +
3
+ +
2
+ +
+
+
+ +
Aluminum
+ +
Al
+ +
13
+ +
26.981539
+ +
9.99
+ +
2.702
+ +
660.32
+ +
2519
+ +
5.986
+ +
1.61
+ +
[Ne]3s²p¹
+ +
3
+ +
6.8
+ +
54
+ +
FCC
+ +
10.669
+ +
293.72
+ +
1.18
+ +
2.37
+ +
0.897
+ +
322.17
+ +
3
+ +
13
+ +
+
+
+ +
Silicon
+ +
Si
+ +
14
+ +
28.0855
+ +
12.05
+ +
2.33
+ +
1414
+ +
3265
+ +
8.151
+ +
1.9
+ +
[Ne]3s²p²
+ +
4
+ +
5.38
+ +
40
+ +
FCC
+ +
46.44
+ +
439
+ +
1.11
+ +
1.49
+ +
0.705
+ +
439.32
+ +
3
+ +
14
+ +
+
+
+ +
Phosphorus
+ +
P
+ +
15
+ +
30.973762
+ +
17
+ +
1.82
+ +
44.15
+ +
277
+ +
10.486
+ +
2.19
+ +
[Ne]3s²p³
+ +
+/-3,4,5
+ +
3.63
+ +
17
+ +
Hex
+ +
0.628
+ +
12.43
+ +
1.06
+ +
0.00236
+ +
0.769
+ +
314.64
+ +
3
+ +
15
+ +
+
+
+ +
Sulfur
+ +
S
+ +
16
+ +
32.066
+ +
15.5
+ +
2.07
+ +
115.21
+ +
444.6
+ +
10.36
+ +
2.58
+ +
[Ne]3s²p⁴
+ +
+/-2,4,6
+ +
2.9
+ +
184
+ +
Ortho
+ +
1.72
+ +
9.62
+ +
1.02
+ +
0.00270
+ +
0.71
+ +
278.65
+ +
3
+ +
16
+ +
+
+
+ +
Chlorine
+ +
Cl
+ +
17
+ +
35.4527
+ +
18.7
+ +
3.214
+ +
-101.5
+ +
-34.04
+ +
12.967
+ +
3.16
+ +
[Ne]3s²p⁵
+ +
+/-1,3,5,7
+ +
2.18
+ +
181
+ +
Ortho
+ +
3.38
+ +
10.21
+ +
0.99
+ +
0.000089
+ +
0.479
+ +
121.75
+ +
3
+ +
17
+ +
+
+
+ +
Argon
+ +
Ar
+ +
18
+ +
39.948
+ +
24.2
+ +
1.784
+ +
-189.35
+ +
-185.85
+ +
15.759
+ +
-
+ +
[Ne]3s²p⁶
+ +
-
+ +
1.64
+ +
-
+ +
FCC
+ +
1.176
+ +
6.43
+ +
0.98
+ +
0.0001772
+ +
0.52
+ +
-
+ +
3
+ +
18
+ +
+
+
+ +
Potassium
+ +
K
+ +
19
+ +
39.0983
+ +
45.46
+ +
0.86
+ +
63.38
+ +
759
+ +
4.341
+ +
0.82
+ +
[Ar]4s¹
+ +
1
+ +
43.4
+ +
138
+ +
BCC
+ +
2.32
+ +
77.5
+ +
2.03
+ +
1.025
+ +
0.757
+ +
89.54
+ +
4
+ +
1
+ +
+
+
+ +
Calcium
+ +
Ca
+ +
20
+ +
40.078
+ +
26.02
+ +
1.54
+ +
842
+ +
1484
+ +
6.113
+ +
1
+ +
[Ar]4s²
+ +
2
+ +
22.8
+ +
100
+ +
FCC
+ +
8.54
+ +
150
+ +
1.74
+ +
2.01
+ +
0.647
+ +
184
+ +
4
+ +
2
+ +
+
+
+ +
Scandium
+ +
Sc
+ +
21
+ +
44.95591
+ +
15.04
+ +
2.989
+ +
1541
+ +
2830
+ +
6.54
+ +
1.36
+ +
[Ar]3d¹4s²
+ +
3
+ +
17.8
+ +
75
+ +
Hex
+ +
14.1
+ +
314.2
+ +
1.44
+ +
0.158
+ +
0.568
+ +
343
+ +
4
+ +
3
+ +
+
+
+ +
Titanium
+ +
Ti
+ +
22
+ +
47.88
+ +
10.64
+ +
4.5
+ +
1668
+ +
3287
+ +
6.82
+ +
1.54
+ +
[Ar]3d²4s²
+ +
3,4
+ +
14.6
+ +
67
+ +
Hex
+ +
15.481
+ +
429
+ +
1.32
+ +
0.219
+ +
0.523
+ +
468.61
+ +
4
+ +
4
+ +
+
+
+ +
Vanadium
+ +
V
+ +
23
+ +
50.9415
+ +
8.55
+ +
5.96
+ +
1910
+ +
3407
+ +
6.74
+ +
1.63
+ +
[Ar]3d³4s²
+ +
2,3,4,5
+ +
12.4
+ +
64
+ +
BCC
+ +
17.573
+ +
458.6
+ +
1.22
+ +
0.307
+ +
0.489
+ +
514.63
+ +
4
+ +
5
+ +
+
+
+ +
Chromium
+ +
Cr
+ +
24
+ +
51.9961
+ +
7.78
+ +
7.2
+ +
1907
+ +
2671
+ +
6.766
+ +
1.66
+ +
[Ar]3d⁵4s¹
+ +
2,3,6
+ +
11.6
+ +
62
+ +
BCC
+ +
15.31
+ +
348.8
+ +
1.18
+ +
0.939
+ +
0.449
+ +
397.48
+ +
4
+ +
6
+ +
+
+
+ +
Manganese
+ +
Mn
+ +
25
+ +
54.93805
+ +
7.35
+ +
7.47
+ +
1246
+ +
2061
+ +
7.435
+ +
1.55
+ +
[Ar]3d⁵4s²
+ +
2,3,4,6,7
+ +
9.4
+ +
65
+ +
BCC
+ +
14.644
+ +
219.7
+ +
1.17
+ +
0.0781
+ +
0.479
+ +
280.33
+ +
4
+ +
7
+ +
+
+
+ +
Iron
+ +
Fe
+ +
26
+ +
55.847
+ +
7.11
+ +
7.86
+ +
1538
+ +
2861
+ +
7.87
+ +
1.83
+ +
[Ar]3d⁶4s²
+ +
2,3
+ +
8.4
+ +
78
+ +
BCC
+ +
14.9
+ +
351.04
+ +
1.17
+ +
0.804
+ +
0.449
+ +
414.2
+ +
4
+ +
8
+ +
+
+
+ +
Cobalt
+ +
Co
+ +
27
+ +
58.9332
+ +
6.61
+ +
8.92
+ +
1495
+ +
2927
+ +
7.86
+ +
1.88
+ +
[Ar]3d⁷4s²
+ +
2,3
+ +
7.5
+ +
75
+ +
Hex
+ +
15.23
+ +
382.4
+ +
1.16
+ +
1.00
+ +
0.421
+ +
426.77
+ +
4
+ +
9
+ +
+
+
+ +
Nickel
+ +
Ni
+ +
28
+ +
58.6934
+ +
6.59
+ +
8.9
+ +
1455
+ +
2913
+ +
7.635
+ +
1.91
+ +
[Ar]3d⁸4s²
+ +
2,3
+ +
6.8
+ +
69
+ +
FCC
+ +
17.57
+ +
371.8
+ +
1.15
+ +
0.909
+ +
0.444
+ +
422.58
+ +
4
+ +
10
+ +
+
+
+ +
Copper
+ +
Cu
+ +
29
+ +
63.546
+ +
7.11
+ +
8.94
+ +
1084.62
+ +
2562
+ +
7.726
+ +
1.9
+ +
[Ar]3d¹⁰4s¹
+ +
1,2
+ +
6.1
+ +
65
+ +
FCC
+ +
13.012
+ +
304.6
+ +
1.17
+ +
4.01
+ +
0.385
+ +
338.9
+ +
4
+ +
11
+ +
+
+
+ +
Zinc
+ +
Zn
+ +
30
+ +
65.39
+ +
9.16
+ +
7.14
+ +
419.53
+ +
907
+ +
9.394
+ +
1.65
+ +
[Ar]3d¹⁰4s²
+ +
2
+ +
7.1
+ +
74
+ +
Hex
+ +
7.32
+ +
115.5
+ +
1.25
+ +
1.16
+ +
0.388
+ +
129.7
+ +
4
+ +
12
+ +
+
+
+ +
Gallium
+ +
Ga
+ +
31
+ +
69.723
+ +
11.44
+ +
6.095
+ +
29.76
+ +
2204
+ +
5.999
+ +
1.81
+ +
[Ar]3d¹⁰4s²p¹
+ +
3
+ +
8.12
+ +
62
+ +
Ortho
+ +
5.59
+ +
256.1
+ +
1.26
+ +
0.281
+ +
0.371
+ +
276.14
+ +
4
+ +
13
+ +
+
+
+ +
Germanium
+ +
Ge
+ +
32
+ +
72.61
+ +
13.57
+ +
5.35
+ +
938.25
+ +
2833
+ +
7.899
+ +
2.01
+ +
[Ar]3d¹⁰4s²p²
+ +
4
+ +
6.07
+ +
53
+ +
FCC
+ +
34.7
+ +
334.3
+ +
1.22
+ +
0.602
+ +
0.32
+ +
376.56
+ +
4
+ +
14
+ +
+
+
+ +
Arsenic
+ +
As
+ +
33
+ +
74.92159
+ +
13.08
+ +
5.727
+ +
817
+ +
614
+ +
9.81
+ +
2.18
+ +
[Ar]3d¹⁰4s²p³
+ +
+/-3,5
+ +
4.31
+ +
46
+ +
Rhom
+ +
24.44
+ +
34.76
+ +
1.2
+ +
0.502
+ +
0.329
+ +
301.25
+ +
4
+ +
15
+ +
+
+
+ +
Selenium
+ +
Se
+ +
34
+ +
78.96
+ +
16.42
+ +
4.81
+ +
221
+ +
685
+ +
9.752
+ +
2.55
+ +
[Ar]3d¹⁰4s²p⁴
+ +
-2,4,6
+ +
3.77
+ +
198
+ +
Hex
+ +
6.69
+ +
26.3
+ +
1.17
+ +
0.048
+ +
0.321
+ +
205.85
+ +
4
+ +
16
+ +
+
+
+ +
Bromine
+ +
Br
+ +
35
+ +
79.904
+ +
25.62
+ +
3.119
+ +
-7.2
+ +
58.8
+ +
11.814
+ +
2.96
+ +
[Ar]3d¹⁰4s²p⁵
+ +
+/-1,5
+ +
3.05
+ +
196
+ +
Ortho
+ +
5.285
+ +
15.46
+ +
1.14
+ +
0.00122
+ +
0.226
+ +
111.71
+ +
4
+ +
17
+ +
+
+
+ +
Krypton
+ +
Kr
+ +
36
+ +
83.8
+ +
32.2
+ +
3.74
+ +
-157.36
+ +
-153.22
+ +
13.999
+ +
-
+ +
[Ar]3d¹⁰4s²p⁶
+ +
-
+ +
2.48
+ +
-
+ +
FCC
+ +
1.636
+ +
9.03
+ +
1.12
+ +
0.0000949
+ +
0.248
+ +
-
+ +
4
+ +
18
+ +
+
+
+ +
Rubidium
+ +
Rb
+ +
37
+ +
85.4678
+ +
55.79
+ +
1.532
+ +
39.31
+ +
688
+ +
4.177
+ +
0.82
+ +
[Kr]5s¹
+ +
1
+ +
47.3
+ +
152
+ +
BCC
+ +
2.19
+ +
69.2
+ +
2.16
+ +
0.582
+ +
0.363
+ +
82
+ +
5
+ +
1
+ +
+
+
+ +
Strontium
+ +
Sr
+ +
38
+ +
87.62
+ +
33.7
+ +
2.6
+ +
777
+ +
1382
+ +
5.695
+ +
0.95
+ +
[Kr]5s²
+ +
2
+ +
27.6
+ +
118
+ +
FCC
+ +
9.16
+ +
150
+ +
1.91
+ +
0.354
+ +
0.301
+ +
163.2
+ +
5
+ +
2
+ +
+
+
+ +
Yttrium
+ +
Y
+ +
39
+ +
88.90585
+ +
19.89
+ +
4.469
+ +
1526
+ +
3336
+ +
6.38
+ +
1.22
+ +
[Kr]4d¹5s²
+ +
3
+ +
22.7
+ +
-
+ +
Hex
+ +
17.15
+ +
393
+ +
1.62
+ +
0.172
+ +
0.298
+ +
418
+ +
5
+ +
3
+ +
+
+
+ +
Zirconium
+ +
Zr
+ +
40
+ +
91.224
+ +
14.06
+ +
6.49
+ +
1855
+ +
4409
+ +
6.84
+ +
1.33
+ +
[Kr]4d²5s²
+ +
4
+ +
17.9
+ +
72
+ +
Hex
+ +
20.9
+ +
581.6
+ +
1.45
+ +
0.227
+ +
0.278
+ +
598
+ +
5
+ +
4
+ +
+
+
+ +
Niobium
+ +
Nb
+ +
41
+ +
92.90638
+ +
10.84
+ +
8.57
+ +
2477
+ +
4744
+ +
6.9
+ +
1.6
+ +
[Kr]4d⁴5s¹
+ +
3,5
+ +
15.7
+ +
68
+ +
BCC
+ +
27.2
+ +
696.6
+ +
1.34
+ +
0.537
+ +
0.265
+ +
745
+ +
5
+ +
5
+ +
+
+
+ +
Molybdenum
+ +
Mo
+ +
42
+ +
95.94
+ +
9.41
+ +
10.2
+ +
2623
+ +
4639
+ +
7.099
+ +
2.16
+ +
[Kr]4d⁵5s¹
+ +
2,3,4,5,6
+ +
12.8
+ +
59
+ +
BCC
+ +
27.61
+ +
594.1
+ +
1.3
+ +
1.38
+ +
0.251
+ +
653
+ +
5
+ +
6
+ +
+
+
+ +
Technetium
+ +
Tc
+ +
43
+ +
97.9072
+ +
8.51
+ +
11.5
+ +
2157
+ +
4265
+ +
7.28
+ +
1.9
+ +
[Kr]4d⁵5s²
+ +
7
+ +
11.4
+ +
65
+ +
-
+ +
23.01
+ +
660
+ +
1.27
+ +
0.506
+ +
0.21
+ +
649
+ +
5
+ +
7
+ +
+
+
+ +
Ruthenium
+ +
Ru
+ +
44
+ +
101.07
+ +
8.22
+ +
12.3
+ +
2334
+ +
4150
+ +
7.37
+ +
2.2
+ +
[Kr]4d⁷5s¹
+ +
2,3,4,6,8
+ +
9.6
+ +
68
+ +
Hex
+ +
25.5
+ +
567.77
+ +
1.25
+ +
1.17
+ +
0.238
+ +
603
+ +
5
+ +
8
+ +
+
+
+ +
Rhodium
+ +
Rh
+ +
45
+ +
102.9055
+ +
8.3
+ +
12.4
+ +
1964
+ +
3695
+ +
7.46
+ +
2.28
+ +
[Kr]4d⁸5s¹
+ +
2,3,4
+ +
8.6
+ +
67
+ +
FCC
+ +
21.76
+ +
495.39
+ +
1.25
+ +
1.5
+ +
0.243
+ +
556.5
+ +
5
+ +
9
+ +
+
+
+ +
Palladium
+ +
Pd
+ +
46
+ +
106.42
+ +
8.85
+ +
12.02
+ +
1554.9
+ +
2963
+ +
8.34
+ +
2.2
+ +
[Kr]4d¹⁰
+ +
2,4
+ +
4.8
+ +
86
+ +
FCC
+ +
16.74
+ +
376.6
+ +
1.28
+ +
0.718
+ +
0.244
+ +
393.3
+ +
5
+ +
10
+ +
+
+
+ +
Silver
+ +
Ag
+ +
47
+ +
107.8682
+ +
10.27
+ +
10.5
+ +
961.78
+ +
2162
+ +
7.576
+ +
1.93
+ +
[Kr]4d¹⁰5s¹
+ +
1
+ +
7.2
+ +
115
+ +
FCC
+ +
11.3
+ +
255.1
+ +
1.34
+ +
4.29
+ +
0.235
+ +
284.5
+ +
5
+ +
11
+ +
+
+
+ +
Cadmium
+ +
Cd
+ +
48
+ +
112.411
+ +
13.01
+ +
8.642
+ +
321.07
+ +
767
+ +
8.993
+ +
1.69
+ +
[Kr]4d¹⁰5s²
+ +
2
+ +
7.2
+ +
95
+ +
Hex
+ +
6.19
+ +
100
+ +
1.48
+ +
0.969
+ +
0.232
+ +
113
+ +
5
+ +
12
+ +
+
+
+ +
Indium
+ +
In
+ +
49
+ +
114.818
+ +
15.73
+ +
7.3
+ +
156.6
+ +
2072
+ +
5.786
+ +
1.78
+ +
[Kr]4d¹⁰5s²p¹
+ +
3
+ +
10.2
+ +
80
+ +
Tet
+ +
3.28
+ +
226.4
+ +
1.44
+ +
0.818
+ +
0.233
+ +
242.67
+ +
5
+ +
13
+ +
+
+
+ +
Tin
+ +
Sn
+ +
50
+ +
118.71
+ +
16.31
+ +
7.28
+ +
231.93
+ +
2602
+ +
7.344
+ +
1.96
+ +
[Kr]4d¹⁰5s²p²
+ +
2,4
+ +
7.7
+ +
69
+ +
Tet
+ +
7.03
+ +
290.4
+ +
1.4
+ +
0.668
+ +
0.228
+ +
301.25
+ +
5
+ +
14
+ +
+
+
+ +
Antimony
+ +
Sb
+ +
51
+ +
121.757
+ +
18.22
+ +
6.684
+ +
630.63
+ +
1587
+ +
8.641
+ +
2.05
+ +
[Kr]4d¹⁰5s²p³
+ +
+/-3,5
+ +
6.6
+ +
76
+ +
Rhom
+ +
19.87
+ +
67.9
+ +
1.4
+ +
0.244
+ +
0.207
+ +
263.59
+ +
5
+ +
15
+ +
+
+
+ +
Tellurium
+ +
Te
+ +
52
+ +
127.6
+ +
20.42
+ +
6.25
+ +
449.51
+ +
988
+ +
9.009
+ +
2.1
+ +
[Kr]4d¹⁰5s²p⁴
+ +
-2,4,6
+ +
5.5
+ +
221
+ +
Hex
+ +
17.49
+ +
50.6
+ +
1.36
+ +
0.0338
+ +
0.202
+ +
190.37
+ +
5
+ +
16
+ +
+
+
+ +
Iodine
+ +
I
+ +
53
+ +
126.90447
+ +
25.74
+ +
4.93
+ +
113.7
+ +
184.4
+ +
10.451
+ +
2.66
+ +
[Kr]4d¹⁰5s²p⁵
+ +
+/-1,5,7
+ +
5.35
+ +
220
+ +
Ortho
+ +
7.76
+ +
20.88
+ +
1.33
+ +
0.00449
+ +
0.145
+ +
106.7
+ +
5
+ +
17
+ +
+
+
+ +
Xenon
+ +
Xe
+ +
54
+ +
131.29
+ +
42.9
+ +
5.89
+ +
-111.75
+ +
-108.04
+ +
12.13
+ +
-
+ +
[Kr]4d¹⁰5s²p⁶
+ +
-
+ +
4.04
+ +
-
+ +
FCC
+ +
2.3
+ +
12.64
+ +
1.31
+ +
0.0000569
+ +
0.158
+ +
-
+ +
5
+ +
18
+ +
+
+
+ +
Cesium
+ +
Cs
+ +
55
+ +
132.90543
+ +
70.73
+ +
1.879
+ +
28.44
+ +
671
+ +
3.894
+ +
0.79
+ +
[Xe]6s¹
+ +
1
+ +
59.6
+ +
167
+ +
BCC
+ +
2.1
+ +
65.9
+ +
2.35
+ +
0.359
+ +
0.242
+ +
78.24
+ +
6
+ +
1
+ +
+
+
+ +
Barium
+ +
Ba
+ +
56
+ +
137.327
+ +
38.21
+ +
3.594
+ +
727
+ +
1897
+ +
5.212
+ +
0.89
+ +
[Xe]6s²
+ +
2
+ +
39.7
+ +
135
+ +
BCC
+ +
7.66
+ +
140
+ +
1.98
+ +
0.184
+ +
0.204
+ +
175.7
+ +
6
+ +
2
+ +
+
+
+ +
Lanthanum
+ +
La
+ +
57
+ +
138.9055
+ +
22.6
+ +
6.146
+ +
920
+ +
3455
+ +
5.577
+ +
1.1
+ +
[Xe]5d¹6s²
+ +
3
+ +
31.1
+ +
103
+ +
Hex
+ +
6.2
+ +
399.6
+ +
1.69
+ +
0.134
+ +
0.195
+ +
431
+ +
6
+ +
3
+ +
+
+
+ +
Hafnium
+ +
Hf
+ +
72
+ +
178.49
+ +
13.41
+ +
13.31
+ +
2233
+ +
4603
+ +
7
+ +
1.3
+ +
[Xe]4f¹⁴5d²6s²
+ +
4
+ +
16.2
+ +
71
+ +
Hex
+ +
25.1
+ +
661.1
+ +
1.44
+ +
0.23
+ +
0.144
+ +
703
+ +
6
+ +
4
+ +
+
+
+ +
Tantalum
+ +
Ta
+ +
73
+ +
180.9479
+ +
10.9
+ +
16.6
+ +
3017
+ +
5458
+ +
7.89
+ +
1.5
+ +
[Xe]4f¹⁴5d³6s²
+ +
5
+ +
13.1
+ +
72
+ +
BCC
+ +
31.4
+ +
753.1
+ +
1.34
+ +
0.575
+ +
0.14
+ +
782
+ +
6
+ +
5
+ +
+
+
+ +
Tungsten
+ +
W
+ +
74
+ +
183.84
+ +
9.5
+ +
19.35
+ +
3422
+ +
5555
+ +
7.98
+ +
2.36
+ +
[Xe]4f¹⁴5d⁴6s²
+ +
2,3,4,5,6
+ +
11.1
+ +
42
+ +
BCC
+ +
35.23
+ +
799.1
+ +
1.3
+ +
1.73
+ +
0.132
+ +
837
+ +
6
+ +
6
+ +
+
+
+ +
Rhenium
+ +
Re
+ +
75
+ +
186.207
+ +
9.07
+ +
20.5
+ +
3186
+ +
5596
+ +
7.88
+ +
1.9
+ +
[Xe]4f¹⁴5d⁵6s²
+ +
-1,2,4,6,7
+ +
9.7
+ +
63
+ +
Hex
+ +
33.05
+ +
707.1
+ +
1.28
+ +
0.48
+ +
0.137
+ +
791
+ +
6
+ +
7
+ +
+
+
+ +
Osmium
+ +
Os
+ +
76
+ +
190.23
+ +
8.41
+ +
22.61
+ +
3033
+ +
5012
+ +
8.7
+ +
2.2
+ +
[Xe]4f¹⁴5d⁶6s²
+ +
2,3,4,6,8
+ +
8.5
+ +
63
+ +
Hex
+ +
29.3
+ +
627.6
+ +
1.26
+ +
0.876
+ +
0.13
+ +
669
+ +
6
+ +
8
+ +
+
+
+ +
Iridium
+ +
Ir
+ +
77
+ +
192.22
+ +
8.49
+ +
22.65
+ +
2446
+ +
4428
+ +
9.1
+ +
2.2
+ +
[Xe]4f¹⁴5d⁷6s²
+ +
2,3,4,6
+ +
7.6
+ +
68
+ +
FCC
+ +
26.4
+ +
563.6
+ +
1.27
+ +
1.47
+ +
0.131
+ +
628
+ +
6
+ +
9
+ +
+
+
+ +
Platinum
+ +
Pt
+ +
78
+ +
195.08
+ +
9.09
+ +
21.45
+ +
1768.4
+ +
3825
+ +
9
+ +
2.28
+ +
[Xe]4f¹⁴5d⁹6s¹
+ +
2,4
+ +
6.5
+ +
80
+ +
FCC
+ +
19.7
+ +
510.5
+ +
1.3
+ +
0.716
+ +
0.133
+ +
565
+ +
6
+ +
10
+ +
+
+
+ +
Gold
+ +
Au
+ +
79
+ +
196.96654
+ +
10.2
+ +
19.31
+ +
1064.18
+ +
2856
+ +
9.225
+ +
2.54
+ +
[Xe]4f¹⁴5d¹⁰6s¹
+ +
1,3
+ +
5.8
+ +
137
+ +
FCC
+ +
12.55
+ +
324.4
+ +
1.34
+ +
3.18
+ +
0.129
+ +
364
+ +
6
+ +
11
+ +
+
+
+ +
Mercury
+ +
Hg
+ +
80
+ +
200.59
+ +
14.81
+ +
13.546
+ +
-38.83
+ +
356.73
+ +
10.437
+ +
2
+ +
[Xe]4f¹⁴5d¹⁰6s²
+ +
1,2
+ +
5.7
+ +
102
+ +
Rhom
+ +
2.29
+ +
56.9
+ +
1.49
+ +
0.083
+ +
0.14
+ +
61.5
+ +
6
+ +
12
+ +
+
+
+ +
Thallium
+ +
Tl
+ +
81
+ +
204.3833
+ +
17.25
+ +
11.85
+ +
304
+ +
1473
+ +
6.108
+ +
2.04
+ +
[Xe]4f¹⁴5d¹⁰6s²p¹
+ +
1,3
+ +
7.6
+ +
150
+ +
Hex
+ +
4.27
+ +
162.1
+ +
1.48
+ +
0.461
+ +
0.129
+ +
179.9
+ +
6
+ +
13
+ +
+
+
+ +
Lead
+ +
Pb
+ +
82
+ +
207.2
+ +
18.27
+ +
11.34
+ +
327.46
+ +
1749
+ +
7.416
+ +
2.33
+ +
[Xe]4f¹⁴5d¹⁰6s²p²
+ +
2,4
+ +
6.8
+ +
119
+ +
FCC
+ +
4.77
+ +
179.4
+ +
1.47
+ +
0.353
+ +
0.129
+ +
194.6
+ +
6
+ +
14
+ +
+
+
+ +
Bismuth
+ +
Bi
+ +
83
+ +
208.98037
+ +
21.37
+ +
9.78
+ +
271.4
+ +
1564
+ +
7.289
+ +
2.02
+ +
[Xe]4f¹⁴5d¹⁰6s²p³
+ +
3,5
+ +
7.4
+ +
103
+ +
Rhom
+ +
10.9
+ +
151
+ +
1.46
+ +
0.0792
+ +
0.122
+ +
207.1
+ +
6
+ +
15
+ +
+
+
+ +
Polonium
+ +
Po
+ +
84
+ +
208.9824
+ +
22.73
+ +
9.196
+ +
254
+ +
962
+ +
8.42
+ +
2
+ +
[Xe]4f¹⁴5d¹⁰6s²p⁴
+ +
2,4
+ +
6.8
+ +
94
+ +
SC
+ +
-
+ +
60.3
+ +
1.46
+ +
0.2
+ +
-
+ +
134
+ +
6
+ +
16
+ +
+
+
+ +
Astatine
+ +
At
+ +
85
+ +
209.9871
+ +
-
+ +
-
+ +
302
+ +
337
+ +
-
+ +
2.2
+ +
[Xe]4f¹⁴5d¹⁰6s²p⁵
+ +
+/-1,3,5,7
+ +
6
+ +
62
+ +
-
+ +
-
+ +
-
+ +
1.45
+ +
0.017
+ +
-
+ +
92
+ +
6
+ +
17
+ +
+
+
+ +
Radon
+ +
Rn
+ +
86
+ +
222.0176
+ +
50.5
+ +
9.73
+ +
-71
+ +
-61.7
+ +
10.748
+ +
-
+ +
[Xe]4f¹⁴5d¹⁰6s²p⁶
+ +
-
+ +
5.3
+ +
-
+ +
FCC
+ +
2.89
+ +
16.4
+ +
-
+ +
0.0000364
+ +
0.094
+ +
-
+ +
6
+ +
18
+ +
+
+
+ +
Francium
+ +
Fr
+ +
87
+ +
223.0197
+ +
-
+ +
-
+ +
27
+ +
677
+ +
-
+ +
0.7
+ +
[Rn]7s¹
+ +
1
+ +
48.7
+ +
180
+ +
BCC
+ +
-
+ +
-
+ +
-
+ +
0.15
+ +
-
+ +
71
+ +
7
+ +
1
+ +
+
+
+ +
Radium
+ +
Ra
+ +
88
+ +
226.0254
+ +
39
+ +
5.8
+ +
700
+ +
1140
+ +
5.279
+ +
0.9
+ +
[Rn]7s²
+ +
2
+ +
38.3
+ +
148
+ +
BCC
+ +
-
+ +
-
+ +
-
+ +
0.186
+ +
-
+ +
163
+ +
7
+ +
2
+ +
+
+
+ +
Actinium
+ +
Ac
+ +
89
+ +
227.0278
+ +
22.54
+ +
10.07
+ +
1051
+ +
3198
+ +
6.9
+ +
1.1
+ +
[Rn]6d¹7s²
+ +
3
+ +
32.1
+ +
112
+ +
FCC
+ +
-
+ +
-
+ +
-
+ +
0.12
+ +
0.12
+ +
301
+ +
7
+ +
3
+ +
+
+
+ +
Rutherfordium
+ +
Rf
+ +
104
+ +
261
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
[Rn]5f¹⁴6d²7s²
+ +
4
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
0.23
+ +
-
+ +
-
+ +
7
+ +
4
+ +
+
+
+ +
Dubnium
+ +
Db
+ +
105
+ +
262
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
[Rn]5f¹⁴6d³7s²
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
0.58
+ +
-
+ +
-
+ +
7
+ +
5
+ +
+
+
+ +
Seaborgium
+ +
Sg
+ +
106
+ +
263
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
[Rn]5f¹⁴6d⁴7s²
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
7
+ +
6
+ +
+
+
+ +
Bohrium
+ +
Bh
+ +
107
+ +
262
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
[Rn]5f¹⁴6d⁵7s²
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
7
+ +
7
+ +
+
+
+ +
Hassium
+ +
Hs
+ +
108
+ +
265
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
[Rn]5f¹⁴6d⁶7s²
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
7
+ +
8
+ +
+
+
+ +
Meitnerium
+ +
Mt
+ +
109
+ +
266
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
[Rn]5f¹⁴6d⁷7s²
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
7
+ +
9
+ +
+
+
+ +
Ununnilium
+ +
Uun
+ +
110
+ +
269
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
[Rn]5f¹⁴6d⁹7s¹
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
7
+ +
10
+ +
+
+
+ +
Unununium
+ +
Uuu
+ +
111
+ +
272
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
[Rn]5f¹⁴6d¹⁰7s¹
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
7
+ +
11
+ +
+
+
+ +
Ununbium
+ +
Uub
+ +
112
+ +
277
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
[Rn]5f¹⁴6d¹⁰7s²
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
7
+ +
12
+ +
+
+
+ +
Ununtrium
+ +
Uut
+ +
113
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
7
+ +
13
+ +
+
+
+ +
Ununquadium
+ +
Uuq
+ +
114
+ +
285
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
[Rn]5f¹⁴6d¹⁰7s²7p²
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
7
+ +
14
+ +
+
+
+ +
Ununpentium
+ +
Uup
+ +
115
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
7
+ +
15
+ +
+
+
+ +
Ununhexium
+ +
Uuh
+ +
116
+ +
289
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
[Rn]5f¹⁴6d¹⁰7s²7p⁴
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
7
+ +
16
+ +
+
+
+ +
Ununseptium
+ +
Uus
+ +
117
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
7
+ +
17
+ +
+
+
+ +
Ununoctium
+ +
Uuo
+ +
118
+ +
293
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
[Rn]5f¹⁴6d¹⁰7s²7p⁶
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
7
+ +
18
+ +
+
+
+ +
Cerium
+ +
Ce
+ +
58
+ +
140.115
+ +
20.7
+ +
6.77
+ +
799
+ +
3424
+ +
5.466
+ +
1.12
+ +
[Xe]4f¹5d¹6s²
+ +
3,4
+ +
29.6
+ +
101
+ +
FCC
+ +
5.46
+ +
414
+ +
1.65
+ +
0.113
+ +
0.192
+ +
381
+ +
8
+ +
5
+ +
+
+
+ +
Praseodymium
+ +
Pr
+ +
59
+ +
140.90765
+ +
20.8
+ +
6.773
+ +
931
+ +
3510
+ +
5.422
+ +
1.13
+ +
[Xe]4f³6s²
+ +
3,4
+ +
28.2
+ +
99
+ +
Hex
+ +
6.89
+ +
296.8
+ +
1.64
+ +
0.125
+ +
0.193
+ +
368
+ +
8
+ +
6
+ +
+
+
+ +
Neodymium
+ +
Nd
+ +
60
+ +
144.24
+ +
20.6
+ +
7
+ +
1016
+ +
3066
+ +
5.489
+ +
1.14
+ +
[Xe]4f⁴6s²
+ +
3
+ +
31.4
+ +
111
+ +
Hex
+ +
7.14
+ +
273
+ +
1.64
+ +
0.165
+ +
0.19
+ +
322
+ +
8
+ +
7
+ +
+
+
+ +
Promethium
+ +
Pm
+ +
61
+ +
144.9127
+ +
19.95
+ +
7.264
+ +
1042
+ +
3000
+ +
5.554
+ +
1.13
+ +
[Xe]4f⁵6s²
+ +
3
+ +
30.1
+ +
97
+ +
Hex
+ +
7.5
+ +
-
+ +
1.63
+ +
0.179
+ +
-
+ +
310
+ +
8
+ +
8
+ +
+
+
+ +
Samarium
+ +
Sm
+ +
62
+ +
150.36
+ +
19.95
+ +
7.536
+ +
1072
+ +
1790
+ +
5.631
+ +
1.17
+ +
[Xe]4f⁶6s²
+ +
2,3
+ +
28.8
+ +
96
+ +
Rhom
+ +
8.62
+ +
166.4
+ +
1.62
+ +
0.133
+ +
0.197
+ +
209
+ +
8
+ +
9
+ +
+
+
+ +
Europium
+ +
Eu
+ +
63
+ +
151.965
+ +
28.98
+ +
5.244
+ +
822
+ +
1596
+ +
5.666
+ +
1.2
+ +
[Xe]4f⁷6s²
+ +
2,3
+ +
27.7
+ +
117
+ +
BCC
+ +
9.21
+ +
143.5
+ +
1.85
+ +
0.139
+ +
0.182
+ +
180
+ +
8
+ +
10
+ +
+
+
+ +
Gadolinium
+ +
Gd
+ +
64
+ +
157.25
+ +
19.9
+ +
7.901
+ +
1314
+ +
3264
+ +
6.141
+ +
1.2
+ +
[Xe]4f⁷5d¹6s²
+ +
3
+ +
23.5
+ +
94
+ +
Hex
+ +
10.05
+ +
359.4
+ +
1.62
+ +
0.104
+ +
0.236
+ +
352
+ +
8
+ +
11
+ +
+
+
+ +
Terbium
+ +
Tb
+ +
65
+ +
158.92534
+ +
19.31
+ +
8.23
+ +
1359
+ +
3221
+ +
5.842
+ +
1.2
+ +
[Xe]4f⁹6s²
+ +
3,4
+ +
25.5
+ +
92
+ +
Hex
+ +
10.8
+ +
330.9
+ +
1.61
+ +
0.111
+ +
0.182
+ +
314
+ +
8
+ +
12
+ +
+
+
+ +
Dysprosium
+ +
Dy
+ +
66
+ +
162.50
+ +
19
+ +
8.551
+ +
1411
+ +
2561
+ +
5.927
+ +
1.22
+ +
[Xe]4f¹⁰6s²
+ +
3
+ +
24.5
+ +
107
+ +
Hex
+ +
11.05
+ +
230
+ +
1.6
+ +
0.107
+ +
0.173
+ +
301
+ +
8
+ +
13
+ +
+
+
+ +
Holmium
+ +
Ho
+ +
67
+ +
164.93032
+ +
18.74
+ +
8.8
+ +
1472
+ +
2694
+ +
6.018
+ +
1.23
+ +
[Xe]4f¹16s²
+ +
3
+ +
23.6
+ +
90
+ +
Hex
+ +
11.76
+ +
241
+ +
1.58
+ +
0.162
+ +
0.165
+ +
301
+ +
8
+ +
14
+ +
+
+
+ +
Erbium
+ +
Er
+ +
68
+ +
167.26
+ +
18.45
+ +
9.066
+ +
1529
+ +
2862
+ +
6.101
+ +
1.24
+ +
[Xe]4f¹26s²
+ +
3
+ +
22.7
+ +
89
+ +
Hex
+ +
17.2
+ +
261
+ +
1.58
+ +
0.145
+ +
0.168
+ +
314
+ +
8
+ +
15
+ +
+
+
+ +
Thulium
+ +
Tm
+ +
69
+ +
168.93421
+ +
18.12
+ +
9.321
+ +
1545
+ +
1946
+ +
6.18436
+ +
1.25
+ +
[Xe]4f¹36s²
+ +
2,3
+ +
21.8
+ +
103
+ +
Hex
+ +
16.8
+ +
191
+ +
1.58
+ +
0.169
+ +
0.16
+ +
247
+ +
8
+ +
16
+ +
+
+
+ +
Ytterbium
+ +
Yb
+ +
70
+ +
173.04
+ +
24.84
+ +
6.966
+ +
824
+ +
1194
+ +
6.25394
+ +
1.1
+ +
[Xe]4f¹⁴6s²
+ +
2,3
+ +
21
+ +
87
+ +
FCC
+ +
7.66
+ +
128.9
+ +
1.74
+ +
0.349
+ +
0.155
+ +
180
+ +
8
+ +
17
+ +
+
+
+ +
Lutetium
+ +
Lu
+ +
71
+ +
174.967
+ +
17.78
+ +
9.84
+ +
1663
+ +
3393
+ +
5.42589
+ +
1.27
+ +
[Xe]4f¹⁴5d¹6s²
+ +
3
+ +
21.9
+ +
86
+ +
Hex
+ +
18.7
+ +
355.9
+ +
1.56
+ +
0.164
+ +
0.154
+ +
398
+ +
8
+ +
18
+ +
+
+
+ +
Thorium
+ +
Th
+ +
90
+ +
232.0381
+ +
19.8
+ +
11.72
+ +
1750
+ +
4788
+ +
6.08
+ +
1.3
+ +
[Rn]6d²7s²
+ +
4
+ +
32.1
+ +
109
+ +
FCC
+ +
15.65
+ +
543.92
+ +
1.65
+ +
0.54
+ +
0.113
+ +
565
+ +
9
+ +
5
+ +
+
+
+ +
Protactinium
+ +
Pa
+ +
91
+ +
231.03588
+ +
15.03
+ +
15.37
+ +
1572
+ +
-
+ +
5.89
+ +
1.5
+ +
[Rn]5f²6d¹7s²
+ +
4,5
+ +
25.4
+ +
104
+ +
Ortho
+ +
12.34
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
9
+ +
6
+ +
+
+
+ +
Uranium
+ +
U
+ +
92
+ +
238.0289
+ +
12.49
+ +
19.05
+ +
1135
+ +
4131
+ +
6.05
+ +
1.38
+ +
[Rn]5f³6d¹7s²
+ +
3,4,5,6
+ +
27.4
+ +
100
+ +
Ortho
+ +
15.48
+ +
477
+ +
1.42
+ +
0.275
+ +
0.116
+ +
489.5
+ +
9
+ +
7
+ +
+
+
+ +
Neptunium
+ +
Np
+ +
93
+ +
237.0482
+ +
11.59
+ +
20.45
+ +
644
+ +
-
+ +
6.19
+ +
1.36
+ +
[Rn]5f⁴6d¹7s²
+ +
3,4,5,6
+ +
24.8
+ +
110
+ +
Ortho
+ +
3.2
+ +
-
+ +
-
+ +
0.063
+ +
0.12
+ +
-
+ +
9
+ +
8
+ +
+
+
+ +
Plutonium
+ +
Pu
+ +
94
+ +
244.0642
+ +
12.32
+ +
19.816
+ +
640
+ +
3228
+ +
5.8
+ +
1.28
+ +
[Rn]5f⁶7s²
+ +
3,4,5,6
+ +
24.5
+ +
100
+ +
Mono
+ +
2.82
+ +
344
+ +
-
+ +
0.067
+ +
0.13
+ +
360
+ +
9
+ +
9
+ +
+
+
+ +
Americium
+ +
Am
+ +
95
+ +
243.0614
+ +
17.78
+ +
13.67
+ +
1176
+ +
2607
+ +
5.993
+ +
1.3
+ +
[Rn]5f⁷7s²
+ +
3,4,5,6
+ +
23.3
+ +
97.5
+ +
Hex
+ +
14.39
+ +
-
+ +
-
+ +
0.1
+ +
0.11
+ +
268
+ +
9
+ +
10
+ +
+
+
+ +
Curium
+ +
Cm
+ +
96
+ +
247.0703
+ +
18.29
+ +
13.51
+ +
1345
+ +
-
+ +
6.02
+ +
1.3
+ +
[Rn]5f⁷6d¹7s²
+ +
3
+ +
23
+ +
97
+ +
Hex
+ +
15
+ +
-
+ +
-
+ +
0.1
+ +
-
+ +
-
+ +
9
+ +
11
+ +
+
+
+ +
Berkelium
+ +
Bk
+ +
97
+ +
247.0703
+ +
-
+ +
14.78
+ +
1050
+ +
-
+ +
6.23
+ +
1.3
+ +
[Rn]5f⁹7s²
+ +
3,4
+ +
22.7
+ +
96
+ +
Hex
+ +
-
+ +
-
+ +
-
+ +
0.1
+ +
-
+ +
-
+ +
9
+ +
12
+ +
+
+
+ +
Californium
+ +
Cf
+ +
98
+ +
251.0796
+ +
-
+ +
-
+ +
900
+ +
-
+ +
6.3
+ +
1.3
+ +
[Rn]5f¹⁰7s²
+ +
3
+ +
20.5
+ +
95
+ +
Hex
+ +
-
+ +
-
+ +
-
+ +
0.1
+ +
-
+ +
-
+ +
9
+ +
13
+ +
+
+
+ +
Einsteinium
+ +
Es
+ +
99
+ +
252.083
+ +
-
+ +
-
+ +
860
+ +
-
+ +
6.42
+ +
1.3
+ +
[Rn]5f¹¹7s²
+ +
3
+ +
19.7
+ +
-
+ +
Hex
+ +
-
+ +
-
+ +
-
+ +
0.1
+ +
-
+ +
-
+ +
9
+ +
14
+ +
+
+
+ +
Fermium
+ +
Fm
+ +
100
+ +
257.0951
+ +
-
+ +
-
+ +
1527
+ +
-
+ +
6.5
+ +
1.3
+ +
[Rn]5f¹²7s²
+ +
3
+ +
23.8
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
0.1
+ +
-
+ +
-
+ +
9
+ +
15
+ +
+
+
+ +
Mendelevium
+ +
Md
+ +
101
+ +
258.10
+ +
-
+ +
-
+ +
827
+ +
-
+ +
6.58
+ +
1.3
+ +
[Rn]5f¹³7s²
+ +
2,3
+ +
18.2
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
0.1
+ +
-
+ +
-
+ +
9
+ +
16
+ +
+
+
+ +
Nobelium
+ +
No
+ +
102
+ +
259.1009
+ +
-
+ +
-
+ +
827
+ +
-
+ +
6.65
+ +
1.3
+ +
[Rn]5f¹⁴7s²
+ +
2,3
+ +
17.5
+ +
110
+ +
-
+ +
-
+ +
-
+ +
-
+ +
0.1
+ +
-
+ +
-
+ +
9
+ +
17
+ +
+
+
+ +
Lawrencium
+ +
Lr
+ +
103
+ +
262.11
+ +
-
+ +
-
+ +
1627
+ +
-
+ +
-
+ +
-
+ +
[Rn]5f¹⁴6d¹7s²
+ +
3
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
-
+ +
0.1
+ +
-
+ +
-
+ +
9
+ +
18
+ +
+
+ +
+
+
 
+
+
\ No newline at end of file diff --git a/demo-course/course/html/bb48f8b8f68d4a7fbf70a4d77a27f13d.xml b/demo-course/course/html/bb48f8b8f68d4a7fbf70a4d77a27f13d.xml new file mode 100644 index 0000000..089526c --- /dev/null +++ b/demo-course/course/html/bb48f8b8f68d4a7fbf70a4d77a27f13d.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/bbab6eeb9eb740b7ad84f73248f29b16.html b/demo-course/course/html/bbab6eeb9eb740b7ad84f73248f29b16.html new file mode 100644 index 0000000..58f633a --- /dev/null +++ b/demo-course/course/html/bbab6eeb9eb740b7ad84f73248f29b16.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/bbab6eeb9eb740b7ad84f73248f29b16.xml b/demo-course/course/html/bbab6eeb9eb740b7ad84f73248f29b16.xml new file mode 100644 index 0000000..342424a --- /dev/null +++ b/demo-course/course/html/bbab6eeb9eb740b7ad84f73248f29b16.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/bc9000c4b44f484fab3c013400cbeb11.html b/demo-course/course/html/bc9000c4b44f484fab3c013400cbeb11.html new file mode 100644 index 0000000..f24faf0 --- /dev/null +++ b/demo-course/course/html/bc9000c4b44f484fab3c013400cbeb11.html @@ -0,0 +1,2 @@ +

Basic assessment types allow you to put graded or ungraded questions anywhere inside your learning content, as well as allowing you to build out quizzes by filling a subsection with many problem components.

+

\ No newline at end of file diff --git a/demo-course/course/html/bc9000c4b44f484fab3c013400cbeb11.xml b/demo-course/course/html/bc9000c4b44f484fab3c013400cbeb11.xml new file mode 100644 index 0000000..1430469 --- /dev/null +++ b/demo-course/course/html/bc9000c4b44f484fab3c013400cbeb11.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/bcfcb4e3443b49cb8d4397b90b55ce3c.html b/demo-course/course/html/bcfcb4e3443b49cb8d4397b90b55ce3c.html new file mode 100644 index 0000000..0dac179 --- /dev/null +++ b/demo-course/course/html/bcfcb4e3443b49cb8d4397b90b55ce3c.html @@ -0,0 +1,5 @@ +

Video content brings an interactive and dynamic element to the course. It allows instructors to deliver lectures, demonstrations and presentations, enabling students to see and hear the instructor in action. Videos can also incorporate animations, simulations and real-world examples, enhancing engagement and providing a more immersive learning experience.

+

The Open edX platform's Video XBlock allows you to embed videos directly from YouTube into your learning sequences while providing enhanced accessibility features such as the powerful interactive transcript function. In a moment you be able to try the video player directly, but first, here's a guide to the basic features and functionality of the standard player.

+
+

The Open edX video player, annotated with the controls for: Playback speed, volume, quality, full-screen, closed captions, interactive transcript.

+
\ No newline at end of file diff --git a/demo-course/course/html/bcfcb4e3443b49cb8d4397b90b55ce3c.xml b/demo-course/course/html/bcfcb4e3443b49cb8d4397b90b55ce3c.xml new file mode 100644 index 0000000..dede0dc --- /dev/null +++ b/demo-course/course/html/bcfcb4e3443b49cb8d4397b90b55ce3c.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/bf821eb77de44d01ab26fdbaea9a1419.html b/demo-course/course/html/bf821eb77de44d01ab26fdbaea9a1419.html new file mode 100644 index 0000000..9c1d521 --- /dev/null +++ b/demo-course/course/html/bf821eb77de44d01ab26fdbaea9a1419.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/bf821eb77de44d01ab26fdbaea9a1419.xml b/demo-course/course/html/bf821eb77de44d01ab26fdbaea9a1419.xml new file mode 100644 index 0000000..0343977 --- /dev/null +++ b/demo-course/course/html/bf821eb77de44d01ab26fdbaea9a1419.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/c08ced50af3f49c8980e98ea6f8670f3.html b/demo-course/course/html/c08ced50af3f49c8980e98ea6f8670f3.html new file mode 100644 index 0000000..034e545 --- /dev/null +++ b/demo-course/course/html/c08ced50af3f49c8980e98ea6f8670f3.html @@ -0,0 +1,14 @@ +
+

Components

+

Components (also known as XBlocks) are specific learning objects and include, but are not limited to:

+
    +
  • Videos
  • +
  • HTML (text, images, iframed content)
  • +
  • Basic CAPA Problems (such as multiple choice or text entry)
  • +
  • Advanced Problems (such as drag-and-drop problems or Javascript assessments)
  • +
  • Peer- and staff-assessed assignments (referred to as Open Response Assignments, or ORA)
  • +
  • Third-party XBlocks (plugin components, such as Polls, Surveys, or integrations with third-party software)
  • +
+

You can think of components as the building blocks of your course pages (your units), allowing you to put together your learning activities in whatever way you want learners to experience them!

+
a diagram representation of an Open edX course showing a tree diagram of sections, subsections, units, and components. Sections is the highest level and components is the lowest.
+
\ No newline at end of file diff --git a/demo-course/course/html/c08ced50af3f49c8980e98ea6f8670f3.xml b/demo-course/course/html/c08ced50af3f49c8980e98ea6f8670f3.xml new file mode 100644 index 0000000..fb77bbd --- /dev/null +++ b/demo-course/course/html/c08ced50af3f49c8980e98ea6f8670f3.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/c136b9c30ef24daebf9021b393d97e00.html b/demo-course/course/html/c136b9c30ef24daebf9021b393d97e00.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/c136b9c30ef24daebf9021b393d97e00.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/c136b9c30ef24daebf9021b393d97e00.xml b/demo-course/course/html/c136b9c30ef24daebf9021b393d97e00.xml new file mode 100644 index 0000000..2a840ac --- /dev/null +++ b/demo-course/course/html/c136b9c30ef24daebf9021b393d97e00.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/c2015f46431c46b8bc6ff8899e235d50.html b/demo-course/course/html/c2015f46431c46b8bc6ff8899e235d50.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/c2015f46431c46b8bc6ff8899e235d50.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/c2015f46431c46b8bc6ff8899e235d50.xml b/demo-course/course/html/c2015f46431c46b8bc6ff8899e235d50.xml new file mode 100644 index 0000000..05b22d8 --- /dev/null +++ b/demo-course/course/html/c2015f46431c46b8bc6ff8899e235d50.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/c295251ca38f4a4ab87e4b7883edd295.html b/demo-course/course/html/c295251ca38f4a4ab87e4b7883edd295.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/c295251ca38f4a4ab87e4b7883edd295.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/c295251ca38f4a4ab87e4b7883edd295.xml b/demo-course/course/html/c295251ca38f4a4ab87e4b7883edd295.xml new file mode 100644 index 0000000..c6acb2f --- /dev/null +++ b/demo-course/course/html/c295251ca38f4a4ab87e4b7883edd295.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/c323bb3d5a934fc8afd29af2c28a6bd0.html b/demo-course/course/html/c323bb3d5a934fc8afd29af2c28a6bd0.html new file mode 100644 index 0000000..79233fd --- /dev/null +++ b/demo-course/course/html/c323bb3d5a934fc8afd29af2c28a6bd0.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/c323bb3d5a934fc8afd29af2c28a6bd0.xml b/demo-course/course/html/c323bb3d5a934fc8afd29af2c28a6bd0.xml new file mode 100644 index 0000000..aedffec --- /dev/null +++ b/demo-course/course/html/c323bb3d5a934fc8afd29af2c28a6bd0.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/c40636fdf6c14ef0b9dd08f21b288f0b.html b/demo-course/course/html/c40636fdf6c14ef0b9dd08f21b288f0b.html new file mode 100644 index 0000000..51c88b6 --- /dev/null +++ b/demo-course/course/html/c40636fdf6c14ef0b9dd08f21b288f0b.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/c40636fdf6c14ef0b9dd08f21b288f0b.xml b/demo-course/course/html/c40636fdf6c14ef0b9dd08f21b288f0b.xml new file mode 100644 index 0000000..4d3c22e --- /dev/null +++ b/demo-course/course/html/c40636fdf6c14ef0b9dd08f21b288f0b.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/c729096cc76441478c6b4aa9346bcbde.html b/demo-course/course/html/c729096cc76441478c6b4aa9346bcbde.html new file mode 100644 index 0000000..03c61e4 --- /dev/null +++ b/demo-course/course/html/c729096cc76441478c6b4aa9346bcbde.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/c729096cc76441478c6b4aa9346bcbde.xml b/demo-course/course/html/c729096cc76441478c6b4aa9346bcbde.xml new file mode 100644 index 0000000..dfec955 --- /dev/null +++ b/demo-course/course/html/c729096cc76441478c6b4aa9346bcbde.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/c7cf3ffbe1a943a7b38e10235aee1b96.html b/demo-course/course/html/c7cf3ffbe1a943a7b38e10235aee1b96.html new file mode 100644 index 0000000..2f30530 --- /dev/null +++ b/demo-course/course/html/c7cf3ffbe1a943a7b38e10235aee1b96.html @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/demo-course/course/html/c7cf3ffbe1a943a7b38e10235aee1b96.xml b/demo-course/course/html/c7cf3ffbe1a943a7b38e10235aee1b96.xml new file mode 100644 index 0000000..4aedc9e --- /dev/null +++ b/demo-course/course/html/c7cf3ffbe1a943a7b38e10235aee1b96.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/c892b90392a1494fb985ab3a9dabc745.html b/demo-course/course/html/c892b90392a1494fb985ab3a9dabc745.html new file mode 100644 index 0000000..22d25d6 --- /dev/null +++ b/demo-course/course/html/c892b90392a1494fb985ab3a9dabc745.html @@ -0,0 +1,9 @@ +
+
+

A multi-select multiple choice problem, also known as a "checkbox" problem, functions similarly to a single-select multiple choice problem but requires that learners select a combination of correct answers to answer the question instead of just one. All the correct answers must be selected for a checkbox problem to be considered correct.

+

Rich text, images, hints, and feedback can all be incorporated into multiple choice questions. 

+
+

menu_bookDocumentation 

+
+
+
\ No newline at end of file diff --git a/demo-course/course/html/c892b90392a1494fb985ab3a9dabc745.xml b/demo-course/course/html/c892b90392a1494fb985ab3a9dabc745.xml new file mode 100644 index 0000000..252fdfd --- /dev/null +++ b/demo-course/course/html/c892b90392a1494fb985ab3a9dabc745.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/c912821348e0498eab881430f3399e06.html b/demo-course/course/html/c912821348e0498eab881430f3399e06.html new file mode 100644 index 0000000..bafe0a6 --- /dev/null +++ b/demo-course/course/html/c912821348e0498eab881430f3399e06.html @@ -0,0 +1,15 @@ +
+

Content libraries allow you to create a "bank" of content and re-use it across several courses. 

+

Some examples of how content libraries are used include:

+
    +
  • Standardized learner satisfaction surveys
  • +
  • Question banks for randomized learner exams
  • +
  • Decorative components for course branding
  • +
  • Reusable interactive components
  • +
+

Content libraries can be centrally managed or course specific:

+

Centrally managed (default): Changes made at the library level can be synched to the course(s) where that library is in use. That way, courses can easily stay up to date with minimal duplicate maintenance.

+

Course Specific:  Changes made at the course level will override the library. Those changes will not be synched back to the library, and new changes in the library won't overwrite your course-specific changes. Components become course-specific automatically if you modify them from within a specific course. 

+
+

+

Three columns illustrating the example. In the first, a content library holds 4 problems. In the second, a unit has delivered those problems in a random order, and in the third, one of those problems has been edited, and is no longer linked to the library.

\ No newline at end of file diff --git a/demo-course/course/html/c912821348e0498eab881430f3399e06.xml b/demo-course/course/html/c912821348e0498eab881430f3399e06.xml new file mode 100644 index 0000000..1583933 --- /dev/null +++ b/demo-course/course/html/c912821348e0498eab881430f3399e06.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/caa3defbf96243e6be321f04cb8a11c0.html b/demo-course/course/html/caa3defbf96243e6be321f04cb8a11c0.html new file mode 100644 index 0000000..e435458 --- /dev/null +++ b/demo-course/course/html/caa3defbf96243e6be321f04cb8a11c0.html @@ -0,0 +1,8 @@ +
+
+

The Interactive Periodic Table tool was built using the custom JavaScript functionality and shows how custom interactivity can be built directly into your courses with a little technical wizardry.

+
+

menu_bookDocumentation 

+
+
+
\ No newline at end of file diff --git a/demo-course/course/html/caa3defbf96243e6be321f04cb8a11c0.xml b/demo-course/course/html/caa3defbf96243e6be321f04cb8a11c0.xml new file mode 100644 index 0000000..bd7fa5a --- /dev/null +++ b/demo-course/course/html/caa3defbf96243e6be321f04cb8a11c0.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/cc191d19b25b47e9b39edd6bb90559fc.html b/demo-course/course/html/cc191d19b25b47e9b39edd6bb90559fc.html new file mode 100644 index 0000000..cd6b4fa --- /dev/null +++ b/demo-course/course/html/cc191d19b25b47e9b39edd6bb90559fc.html @@ -0,0 +1,8 @@ +
+
+

The 'Done' XBlock, also known as the Completion Tool, allows you to provide learners with a simple button to mark a page or activity as having been completed. This effectively gives them a point for manually marking that they've done what has been asked of them, which makes it useful for tracking the completion of activities for staff grading and for assignments that require them to perform actions outside of your learning platform.

+
+

menu_bookDocumentation 

+
+
+
\ No newline at end of file diff --git a/demo-course/course/html/cc191d19b25b47e9b39edd6bb90559fc.xml b/demo-course/course/html/cc191d19b25b47e9b39edd6bb90559fc.xml new file mode 100644 index 0000000..6854d34 --- /dev/null +++ b/demo-course/course/html/cc191d19b25b47e9b39edd6bb90559fc.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/cc28f491e7964ffa9f3ea8d1123cfc17.html b/demo-course/course/html/cc28f491e7964ffa9f3ea8d1123cfc17.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/cc28f491e7964ffa9f3ea8d1123cfc17.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/cc28f491e7964ffa9f3ea8d1123cfc17.xml b/demo-course/course/html/cc28f491e7964ffa9f3ea8d1123cfc17.xml new file mode 100644 index 0000000..c934624 --- /dev/null +++ b/demo-course/course/html/cc28f491e7964ffa9f3ea8d1123cfc17.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/cda11ea3cf004156b9d209d5b69a2873.html b/demo-course/course/html/cda11ea3cf004156b9d209d5b69a2873.html new file mode 100644 index 0000000..c42a25e --- /dev/null +++ b/demo-course/course/html/cda11ea3cf004156b9d209d5b69a2873.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/cda11ea3cf004156b9d209d5b69a2873.xml b/demo-course/course/html/cda11ea3cf004156b9d209d5b69a2873.xml new file mode 100644 index 0000000..095c358 --- /dev/null +++ b/demo-course/course/html/cda11ea3cf004156b9d209d5b69a2873.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/cea795f46e564477a1b4c60affd0852b.html b/demo-course/course/html/cea795f46e564477a1b4c60affd0852b.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/cea795f46e564477a1b4c60affd0852b.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/cea795f46e564477a1b4c60affd0852b.xml b/demo-course/course/html/cea795f46e564477a1b4c60affd0852b.xml new file mode 100644 index 0000000..989fd08 --- /dev/null +++ b/demo-course/course/html/cea795f46e564477a1b4c60affd0852b.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/cea9cb88b66d48b68b34e59979d819e1.html b/demo-course/course/html/cea9cb88b66d48b68b34e59979d819e1.html new file mode 100644 index 0000000..3262d9f --- /dev/null +++ b/demo-course/course/html/cea9cb88b66d48b68b34e59979d819e1.html @@ -0,0 +1,48 @@ + + + + + \ No newline at end of file diff --git a/demo-course/course/html/cea9cb88b66d48b68b34e59979d819e1.xml b/demo-course/course/html/cea9cb88b66d48b68b34e59979d819e1.xml new file mode 100644 index 0000000..fae682b --- /dev/null +++ b/demo-course/course/html/cea9cb88b66d48b68b34e59979d819e1.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/cf4b54acedfb4d998c8377390aaad5c8.html b/demo-course/course/html/cf4b54acedfb4d998c8377390aaad5c8.html new file mode 100644 index 0000000..4ebf40e --- /dev/null +++ b/demo-course/course/html/cf4b54acedfb4d998c8377390aaad5c8.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/cf4b54acedfb4d998c8377390aaad5c8.xml b/demo-course/course/html/cf4b54acedfb4d998c8377390aaad5c8.xml new file mode 100644 index 0000000..1c055bb --- /dev/null +++ b/demo-course/course/html/cf4b54acedfb4d998c8377390aaad5c8.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/cf9e4e0c237644a19c969bf4f4c4a529.html b/demo-course/course/html/cf9e4e0c237644a19c969bf4f4c4a529.html new file mode 100644 index 0000000..1bc5199 --- /dev/null +++ b/demo-course/course/html/cf9e4e0c237644a19c969bf4f4c4a529.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/cf9e4e0c237644a19c969bf4f4c4a529.xml b/demo-course/course/html/cf9e4e0c237644a19c969bf4f4c4a529.xml new file mode 100644 index 0000000..15b5466 --- /dev/null +++ b/demo-course/course/html/cf9e4e0c237644a19c969bf4f4c4a529.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/d03a56d49bb445839dffb53e8748daa3.html b/demo-course/course/html/d03a56d49bb445839dffb53e8748daa3.html new file mode 100644 index 0000000..048a68f --- /dev/null +++ b/demo-course/course/html/d03a56d49bb445839dffb53e8748daa3.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/html/d03a56d49bb445839dffb53e8748daa3.xml b/demo-course/course/html/d03a56d49bb445839dffb53e8748daa3.xml new file mode 100644 index 0000000..83dcca0 --- /dev/null +++ b/demo-course/course/html/d03a56d49bb445839dffb53e8748daa3.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/d1beb17e1ffa45b89d636c24265fc736.html b/demo-course/course/html/d1beb17e1ffa45b89d636c24265fc736.html new file mode 100644 index 0000000..e58e3cf --- /dev/null +++ b/demo-course/course/html/d1beb17e1ffa45b89d636c24265fc736.html @@ -0,0 +1,12 @@ +
+
+

The Staff-Graded Assignment XBlock is another third-party component that was originally created by the Massachusetts Institute of Technology (MIT) and provides a light-weight alternative to Open Response Assessments. Learners can upload a file that is then simply given a numerical grade by course staff.

+

This XBlock is installed by default, so you will not need to install it, but you may find the link to the repository on GitHub useful.

+
+

menu_bookDocumentation 

+
+
+

terminalGitHub Repository 

+
+
+
\ No newline at end of file diff --git a/demo-course/course/html/d1beb17e1ffa45b89d636c24265fc736.xml b/demo-course/course/html/d1beb17e1ffa45b89d636c24265fc736.xml new file mode 100644 index 0000000..31d4304 --- /dev/null +++ b/demo-course/course/html/d1beb17e1ffa45b89d636c24265fc736.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/d207aa8ca9884e7c9016d7530006ba66.html b/demo-course/course/html/d207aa8ca9884e7c9016d7530006ba66.html new file mode 100644 index 0000000..d3e5293 --- /dev/null +++ b/demo-course/course/html/d207aa8ca9884e7c9016d7530006ba66.html @@ -0,0 +1,11 @@ +
+
+

The advanced video features enabled here are as follows:

+
    +
  • This short excerpt is pulled out of the 49 minute-long original video from the 2023 Open edX conference. Rather than embedding all 49 minutes, we chose the section we wanted to share, without having to download and edit the video.
  • +
  • The SRT closed captions and interactive transcript can be viewed in Spanish, as well as English.
  • +
  • By clicking download transcript, you will be taken to a PDF version of the transcript, formatted and prepared for offline use.
  • +
  • By clicking download handout, you will download the slide from the presentation itself. This could be anything, from the full PowerPoint slide deck, to an activity sheet to download. In this case, we've used a simple image.
  • +
+
+
\ No newline at end of file diff --git a/demo-course/course/html/d207aa8ca9884e7c9016d7530006ba66.xml b/demo-course/course/html/d207aa8ca9884e7c9016d7530006ba66.xml new file mode 100644 index 0000000..03ecaa6 --- /dev/null +++ b/demo-course/course/html/d207aa8ca9884e7c9016d7530006ba66.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/d27c1daad9b942b9ae0041b45241f86f.html b/demo-course/course/html/d27c1daad9b942b9ae0041b45241f86f.html new file mode 100644 index 0000000..048a68f --- /dev/null +++ b/demo-course/course/html/d27c1daad9b942b9ae0041b45241f86f.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/html/d27c1daad9b942b9ae0041b45241f86f.xml b/demo-course/course/html/d27c1daad9b942b9ae0041b45241f86f.xml new file mode 100644 index 0000000..2712c14 --- /dev/null +++ b/demo-course/course/html/d27c1daad9b942b9ae0041b45241f86f.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/d305d51d5cff47cd855e9bceb73babed.html b/demo-course/course/html/d305d51d5cff47cd855e9bceb73babed.html new file mode 100644 index 0000000..11c8804 --- /dev/null +++ b/demo-course/course/html/d305d51d5cff47cd855e9bceb73babed.html @@ -0,0 +1,5 @@ +
+ +

Unable to display PDF file. This may be restricted by your settings, or you may lack a PDF reader plugin for your browser. You can download this resource instead using the button below.

+
+
\ No newline at end of file diff --git a/demo-course/course/html/d305d51d5cff47cd855e9bceb73babed.xml b/demo-course/course/html/d305d51d5cff47cd855e9bceb73babed.xml new file mode 100644 index 0000000..53ce32f --- /dev/null +++ b/demo-course/course/html/d305d51d5cff47cd855e9bceb73babed.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/d444d721bd8d44e89b8dd880c90224a4.html b/demo-course/course/html/d444d721bd8d44e89b8dd880c90224a4.html new file mode 100644 index 0000000..2a15d72 --- /dev/null +++ b/demo-course/course/html/d444d721bd8d44e89b8dd880c90224a4.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/d444d721bd8d44e89b8dd880c90224a4.xml b/demo-course/course/html/d444d721bd8d44e89b8dd880c90224a4.xml new file mode 100644 index 0000000..08d1c5f --- /dev/null +++ b/demo-course/course/html/d444d721bd8d44e89b8dd880c90224a4.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/d44762a484f74c5a80bbea382f4ee2f8.html b/demo-course/course/html/d44762a484f74c5a80bbea382f4ee2f8.html new file mode 100644 index 0000000..344740a --- /dev/null +++ b/demo-course/course/html/d44762a484f74c5a80bbea382f4ee2f8.html @@ -0,0 +1,15 @@ +
+

Being a part of the Open edX community means you have access to experts from around the world. 

+

If you are looking for a provider who can help you with a wide range of needs, the best way to find them is by checking out the Open edX marketplace. The marketplace contains categories of providers in all areas of expertise, including:

+
+
    +
  • Platform installation and hosting
  • +
  • Platform customization
  • +
  • Custom course development & instructional design
  • +
  • 3rd Party Services
  • +
  • Content providers
  • +
  • Mobile applications
  • +
+

You can explore the different vendors based on your needs and you can contact each provider directly to learn more about their services.

+
+
\ No newline at end of file diff --git a/demo-course/course/html/d44762a484f74c5a80bbea382f4ee2f8.xml b/demo-course/course/html/d44762a484f74c5a80bbea382f4ee2f8.xml new file mode 100644 index 0000000..a47ad87 --- /dev/null +++ b/demo-course/course/html/d44762a484f74c5a80bbea382f4ee2f8.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/d453bb4012ea4e818bee9869bc0f3b9b.html b/demo-course/course/html/d453bb4012ea4e818bee9869bc0f3b9b.html new file mode 100644 index 0000000..048a68f --- /dev/null +++ b/demo-course/course/html/d453bb4012ea4e818bee9869bc0f3b9b.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/html/d453bb4012ea4e818bee9869bc0f3b9b.xml b/demo-course/course/html/d453bb4012ea4e818bee9869bc0f3b9b.xml new file mode 100644 index 0000000..ba449ba --- /dev/null +++ b/demo-course/course/html/d453bb4012ea4e818bee9869bc0f3b9b.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/d4e2624ae8b3479db698413bd8947b6f.html b/demo-course/course/html/d4e2624ae8b3479db698413bd8947b6f.html new file mode 100644 index 0000000..53def76 --- /dev/null +++ b/demo-course/course/html/d4e2624ae8b3479db698413bd8947b6f.html @@ -0,0 +1,10 @@ +
+

An Open edX® course is made up of some fundamental building blocks. These are:

+
    +
  • Sections
  • +
  • Subsections
  • +
  • Units
  • +
  • Components
  • +
+

Let's take a quick look at each piece of the puzzle to understand how they all fit together to form a course.

+
\ No newline at end of file diff --git a/demo-course/course/html/d4e2624ae8b3479db698413bd8947b6f.xml b/demo-course/course/html/d4e2624ae8b3479db698413bd8947b6f.xml new file mode 100644 index 0000000..337fd5b --- /dev/null +++ b/demo-course/course/html/d4e2624ae8b3479db698413bd8947b6f.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/d6f9462c66c449b3b0118ba590402f70.html b/demo-course/course/html/d6f9462c66c449b3b0118ba590402f70.html new file mode 100644 index 0000000..048a68f --- /dev/null +++ b/demo-course/course/html/d6f9462c66c449b3b0118ba590402f70.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/html/d6f9462c66c449b3b0118ba590402f70.xml b/demo-course/course/html/d6f9462c66c449b3b0118ba590402f70.xml new file mode 100644 index 0000000..c32e716 --- /dev/null +++ b/demo-course/course/html/d6f9462c66c449b3b0118ba590402f70.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/d8535fedd71d4e84806e2212b9c0c4af.html b/demo-course/course/html/d8535fedd71d4e84806e2212b9c0c4af.html new file mode 100644 index 0000000..3a32818 --- /dev/null +++ b/demo-course/course/html/d8535fedd71d4e84806e2212b9c0c4af.html @@ -0,0 +1,3 @@ +

The edx.org logoedX®, or edX.org, is the online learning platform from world-leading digital education company 2U, Inc. 

+

edX.org was the original developer for the Open edX® software, which it released as open source in 2013. Since that time, edX.org functions as a very important stakeholder in the Open edX® community, but it is not an owner of the software itself.

+

Today, edX.org maintains its own deployment of the Open edX® platform and works with a number of partner institutions to deliver high-quality MOOCs and other learning experiences to students across the globe. 

\ No newline at end of file diff --git a/demo-course/course/html/d8535fedd71d4e84806e2212b9c0c4af.xml b/demo-course/course/html/d8535fedd71d4e84806e2212b9c0c4af.xml new file mode 100644 index 0000000..b133c25 --- /dev/null +++ b/demo-course/course/html/d8535fedd71d4e84806e2212b9c0c4af.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/d897984a61d54127a77f0643c2fe00bb.html b/demo-course/course/html/d897984a61d54127a77f0643c2fe00bb.html new file mode 100644 index 0000000..1ba0532 --- /dev/null +++ b/demo-course/course/html/d897984a61d54127a77f0643c2fe00bb.html @@ -0,0 +1,4 @@ +
+

Note: 

+

This ORA is configured as a self-graded ORA. That means that you will be able to grade your own submission and the grade is immediately saved to the Open edX® LMS. If it included peer-grading or staff-grading steps, then it would be submitted into those queues and the grade would only be received after those processes are completed successfully. 

+
\ No newline at end of file diff --git a/demo-course/course/html/d897984a61d54127a77f0643c2fe00bb.xml b/demo-course/course/html/d897984a61d54127a77f0643c2fe00bb.xml new file mode 100644 index 0000000..efa10f9 --- /dev/null +++ b/demo-course/course/html/d897984a61d54127a77f0643c2fe00bb.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/d8f19b6bd2894cb5a296fcf90f8263f7.html b/demo-course/course/html/d8f19b6bd2894cb5a296fcf90f8263f7.html new file mode 100644 index 0000000..dbefd00 --- /dev/null +++ b/demo-course/course/html/d8f19b6bd2894cb5a296fcf90f8263f7.html @@ -0,0 +1,12 @@ +
+

Cohorts, Content Groups, and Components

+

Cohorts can map to one content group. Course Components can map to one or more content groups. In this way, a course developer has flexibility in how cohort visibility can be configured. In the following image: 

+
    +
  • Cohort A can view both components
  • +
  • Cohort B can only view component Y
  • +
  • Cohort C cannot view either component
  • +
+
+

a diagram with three columns: cohorts, content groups, course components. One cohort is connected to one group which is connected to one course component. Another cohort is connected to one group which is connected to to course components. A third cohort is not connected to anything.

+
+
\ No newline at end of file diff --git a/demo-course/course/html/d8f19b6bd2894cb5a296fcf90f8263f7.xml b/demo-course/course/html/d8f19b6bd2894cb5a296fcf90f8263f7.xml new file mode 100644 index 0000000..2173192 --- /dev/null +++ b/demo-course/course/html/d8f19b6bd2894cb5a296fcf90f8263f7.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/d90f66db17114d33ab341541c2157720.html b/demo-course/course/html/d90f66db17114d33ab341541c2157720.html new file mode 100644 index 0000000..7920241 --- /dev/null +++ b/demo-course/course/html/d90f66db17114d33ab341541c2157720.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/d90f66db17114d33ab341541c2157720.xml b/demo-course/course/html/d90f66db17114d33ab341541c2157720.xml new file mode 100644 index 0000000..01268a6 --- /dev/null +++ b/demo-course/course/html/d90f66db17114d33ab341541c2157720.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/dbad3cf2e0b44ce69c3fb14c21ad359e.html b/demo-course/course/html/dbad3cf2e0b44ce69c3fb14c21ad359e.html new file mode 100644 index 0000000..57b2d8a --- /dev/null +++ b/demo-course/course/html/dbad3cf2e0b44ce69c3fb14c21ad359e.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/dbad3cf2e0b44ce69c3fb14c21ad359e.xml b/demo-course/course/html/dbad3cf2e0b44ce69c3fb14c21ad359e.xml new file mode 100644 index 0000000..f22cd4f --- /dev/null +++ b/demo-course/course/html/dbad3cf2e0b44ce69c3fb14c21ad359e.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/dc2e63662af34b598fbc3813653fb955.html b/demo-course/course/html/dc2e63662af34b598fbc3813653fb955.html new file mode 100644 index 0000000..8adac6a --- /dev/null +++ b/demo-course/course/html/dc2e63662af34b598fbc3813653fb955.html @@ -0,0 +1,4 @@ +
+

There's More

+

Some community members have made some impressive customizations to the platform using Javascript. Below is an in-video assessment capability developed by HarvardX. Their work which includes several other useful capabilities like code highlighting and image sliders are available open source here

+
\ No newline at end of file diff --git a/demo-course/course/html/dc2e63662af34b598fbc3813653fb955.xml b/demo-course/course/html/dc2e63662af34b598fbc3813653fb955.xml new file mode 100644 index 0000000..6e8b262 --- /dev/null +++ b/demo-course/course/html/dc2e63662af34b598fbc3813653fb955.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/dcc2fd556b3749a8b10b05d03540908f.html b/demo-course/course/html/dcc2fd556b3749a8b10b05d03540908f.html new file mode 100644 index 0000000..4432b84 --- /dev/null +++ b/demo-course/course/html/dcc2fd556b3749a8b10b05d03540908f.html @@ -0,0 +1,8 @@ +
+
+

Text input problems can be used to ask learners to input a text-based response to your question. You can list any number of common spelling mistakes, alternatives, or variants to your answer to ensure that learners who know the answer, but fail to express it properly, can still be given the same points.

+
+

menu_bookDocumentation 

+
+
+
\ No newline at end of file diff --git a/demo-course/course/html/dcc2fd556b3749a8b10b05d03540908f.xml b/demo-course/course/html/dcc2fd556b3749a8b10b05d03540908f.xml new file mode 100644 index 0000000..28748d2 --- /dev/null +++ b/demo-course/course/html/dcc2fd556b3749a8b10b05d03540908f.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/dcdf63995e954a92a450eadabb439950.html b/demo-course/course/html/dcdf63995e954a92a450eadabb439950.html new file mode 100644 index 0000000..c5bd374 --- /dev/null +++ b/demo-course/course/html/dcdf63995e954a92a450eadabb439950.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/dcdf63995e954a92a450eadabb439950.xml b/demo-course/course/html/dcdf63995e954a92a450eadabb439950.xml new file mode 100644 index 0000000..d1785a0 --- /dev/null +++ b/demo-course/course/html/dcdf63995e954a92a450eadabb439950.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/dd6f19932ddd422395d755a1c0aa57a8.html b/demo-course/course/html/dd6f19932ddd422395d755a1c0aa57a8.html new file mode 100644 index 0000000..3e6fdab --- /dev/null +++ b/demo-course/course/html/dd6f19932ddd422395d755a1c0aa57a8.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/dd6f19932ddd422395d755a1c0aa57a8.xml b/demo-course/course/html/dd6f19932ddd422395d755a1c0aa57a8.xml new file mode 100644 index 0000000..a9a4978 --- /dev/null +++ b/demo-course/course/html/dd6f19932ddd422395d755a1c0aa57a8.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/dd810c6113a446469334c6f3d1e377b5.html b/demo-course/course/html/dd810c6113a446469334c6f3d1e377b5.html new file mode 100644 index 0000000..44dd75c --- /dev/null +++ b/demo-course/course/html/dd810c6113a446469334c6f3d1e377b5.html @@ -0,0 +1,9 @@ +
+
+

A single-select multiple choice problem assesses a student's knowledge or understanding by presenting a question with multiple answer choices, where the student must select only one correct option, commonly used for formative or summative assessments in a course. 

+

Rich text, images, hints and feedback can all be incorporated into multiple choice questions. 

+
+

menu_bookDocumentation 

+
+
+
\ No newline at end of file diff --git a/demo-course/course/html/dd810c6113a446469334c6f3d1e377b5.xml b/demo-course/course/html/dd810c6113a446469334c6f3d1e377b5.xml new file mode 100644 index 0000000..45b5b3a --- /dev/null +++ b/demo-course/course/html/dd810c6113a446469334c6f3d1e377b5.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/e0061f43dbdb4df3800d4bb11b8d7d92.html b/demo-course/course/html/e0061f43dbdb4df3800d4bb11b8d7d92.html new file mode 100644 index 0000000..360482b --- /dev/null +++ b/demo-course/course/html/e0061f43dbdb4df3800d4bb11b8d7d92.html @@ -0,0 +1 @@ +

To continue through this course, click the "Next" button below. The "Next" button will automatically take you to the next available page in the course, whereas "Previous" will return you to the previous available page. At any time, you can also use the navigation links at the top of the page to return to the course outline if you want to skip to a particular unit in the course. 

\ No newline at end of file diff --git a/demo-course/course/html/e0061f43dbdb4df3800d4bb11b8d7d92.xml b/demo-course/course/html/e0061f43dbdb4df3800d4bb11b8d7d92.xml new file mode 100644 index 0000000..c67ba14 --- /dev/null +++ b/demo-course/course/html/e0061f43dbdb4df3800d4bb11b8d7d92.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/e028516042bc4d2d8a08147699230594.html b/demo-course/course/html/e028516042bc4d2d8a08147699230594.html new file mode 100644 index 0000000..b36eec8 --- /dev/null +++ b/demo-course/course/html/e028516042bc4d2d8a08147699230594.html @@ -0,0 +1,5 @@ +
+

Try It!

+

Inline discussions are one of the most powerful forms of discussion, as they put your discussion inside your learning content, focusing your learners' attention on that topic.

+

Read and respond to the following inline discussion prompt below.

+
\ No newline at end of file diff --git a/demo-course/course/html/e028516042bc4d2d8a08147699230594.xml b/demo-course/course/html/e028516042bc4d2d8a08147699230594.xml new file mode 100644 index 0000000..ab6695a --- /dev/null +++ b/demo-course/course/html/e028516042bc4d2d8a08147699230594.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/e165e3d43ff04527ae0eb18dbdfe44b8.html b/demo-course/course/html/e165e3d43ff04527ae0eb18dbdfe44b8.html new file mode 100644 index 0000000..0e7bd40 --- /dev/null +++ b/demo-course/course/html/e165e3d43ff04527ae0eb18dbdfe44b8.html @@ -0,0 +1,18 @@ +
+

The Poll component allows you to pose simple questions for your learners, allowing them to vote for their favorite answer from a predefined list.

+

This tool is exceptionally useful for teeing up discussions as you'll see in the example below! Unlike most other social tools, Polls can be also useful in long-running self-paced courses, allowing you to slowly collect results from your learners over a long period of time as they pass through the content, and allowing them to leave something behind for future learners taking that same course. Members of the course team can export the results of these polls at any time allowing you to do in-depth analysis of poll results at your leisure.

+
+

menu_bookDocumentation 

+
+
+

+
+

Best Practices

+
    +
  • Don't ask questions that have a single correct answer, else almost all votes will be for the same thing!
  • +
  • Make sure all of your poll options are reasonable responses to the question and aren't just objectively wrong.
  • +
  • 'Seed' your results with a few answers using staff or testing accounts so that the first learner voting has something to look at when they view the results.
  • +
+
+

+

\ No newline at end of file diff --git a/demo-course/course/html/e165e3d43ff04527ae0eb18dbdfe44b8.xml b/demo-course/course/html/e165e3d43ff04527ae0eb18dbdfe44b8.xml new file mode 100644 index 0000000..203f4ae --- /dev/null +++ b/demo-course/course/html/e165e3d43ff04527ae0eb18dbdfe44b8.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/e276c31d8de14720a377f779e96c873e.html b/demo-course/course/html/e276c31d8de14720a377f779e96c873e.html new file mode 100644 index 0000000..2a4836c --- /dev/null +++ b/demo-course/course/html/e276c31d8de14720a377f779e96c873e.html @@ -0,0 +1,15 @@ +
+
+

Attend the Conference

+
+
+

The Open edX community hosts a yearly in-person Open edX conference. This is a great opportunity to gather with educators and developers from all over the world to discuss the challenges and opportunities of online education. You can get involved by:

+
    +
  • Attending the conference
  • +
  • Submitting a proposal to share your work and/or your research
  • +
  • Watching previous conference presentations and webinars on the Open edX YouTube channel
  • +
+

We also have a range of online and virtual meetups. The details can be found in our community channels (like the Slack channel or discussion forums) or you can add the online Event Calendar to your Google calendar. 

+
+
\ No newline at end of file diff --git a/demo-course/course/html/e276c31d8de14720a377f779e96c873e.xml b/demo-course/course/html/e276c31d8de14720a377f779e96c873e.xml new file mode 100644 index 0000000..b66ff07 --- /dev/null +++ b/demo-course/course/html/e276c31d8de14720a377f779e96c873e.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/e31a297e28e041358e887da81dbd620b.html b/demo-course/course/html/e31a297e28e041358e887da81dbd620b.html new file mode 100644 index 0000000..9c2d7e7 --- /dev/null +++ b/demo-course/course/html/e31a297e28e041358e887da81dbd620b.html @@ -0,0 +1,22 @@ +
+

You made it!

+

This content is only available to staff and learners who have completed the previous subsection and achieved a passing grade. In Studio you'll be able to see that this content has the prerequisite set:

+
+

The subsection in Studio, with the text 'Prerequisite: other learning tools'

+
+

By accessing the settings for this subsection via the cogwheel ( ) icon, you can see what exactly governs our prerequisite:

+
+

The settings for the prerequisite in Studio, displaying the values of 100% progress and 100% grade as the requirements.

+
+

As you can see, there are two factors that can be used either individually or combined together to form a prerequisite:

+
    +
  • Minimum score only allows learners access when a percentage score within the chosen subsection is reached.
  • +
  • Minimum completion only allows learners access when their completion % for the chosen subsection reaches the threshold.
  • +
+

This means you can use various combinations for scenarios such as:

+
    +
  • 100% Minimum Score, 0% Minimum completion - The "Mastery Path" experience - content that is intended for learners who achieve the maximum grade on a graded activity.
  • +
  • 0% Minimum Score, 100% completion - "You must watch this video to continue."
  • +
  • 70% Minimum Score, 100% completion - "You must complete and pass the quiz to proceed to the next module."
  • +
+
\ No newline at end of file diff --git a/demo-course/course/html/e31a297e28e041358e887da81dbd620b.xml b/demo-course/course/html/e31a297e28e041358e887da81dbd620b.xml new file mode 100644 index 0000000..da600ca --- /dev/null +++ b/demo-course/course/html/e31a297e28e041358e887da81dbd620b.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/e474e9927e2441ef820a97f7a384f60a.html b/demo-course/course/html/e474e9927e2441ef820a97f7a384f60a.html new file mode 100644 index 0000000..dd23983 --- /dev/null +++ b/demo-course/course/html/e474e9927e2441ef820a97f7a384f60a.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/e474e9927e2441ef820a97f7a384f60a.xml b/demo-course/course/html/e474e9927e2441ef820a97f7a384f60a.xml new file mode 100644 index 0000000..5fac968 --- /dev/null +++ b/demo-course/course/html/e474e9927e2441ef820a97f7a384f60a.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/e68f6a622fa947d186bf94566c863ca3.html b/demo-course/course/html/e68f6a622fa947d186bf94566c863ca3.html new file mode 100644 index 0000000..22bb48a --- /dev/null +++ b/demo-course/course/html/e68f6a622fa947d186bf94566c863ca3.html @@ -0,0 +1,10 @@ +
+

Studio–also called the CMS or Content Management System–is where courses are built and configured. It's where course creators can find all the many different learning tools needed to build a course, as well as enable or disable tools and features on a per-course basis.

+

Studio is home to features such as:

+
    +
  • Content and assessment creation tools
  • +
  • Course-wide settings
  • +
  • Course promotion tools (such as the course 'About' page, introduction video, and course card images)
  • +
+

Creating content in Studio is simple, intuitive and flexible, allowing course creators to quickly build out frameworks for their course materials and iterate on them.

+
\ No newline at end of file diff --git a/demo-course/course/html/e68f6a622fa947d186bf94566c863ca3.xml b/demo-course/course/html/e68f6a622fa947d186bf94566c863ca3.xml new file mode 100644 index 0000000..5254783 --- /dev/null +++ b/demo-course/course/html/e68f6a622fa947d186bf94566c863ca3.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/e738fc0c95be4fc8ab818a6108c4060e.html b/demo-course/course/html/e738fc0c95be4fc8ab818a6108c4060e.html new file mode 100644 index 0000000..d469213 --- /dev/null +++ b/demo-course/course/html/e738fc0c95be4fc8ab818a6108c4060e.html @@ -0,0 +1,12 @@ +
+

Instructor Dashboard

+

Last but not least, the Instructor Dashboard is the part of the LMS where you, as an instructor, can manage your learners and includes things like:

+
    +
  • Course enrolment metrics
  • +
  • Data downloads
  • +
  • A gradebook showing the grades of all learners in the course
  • +
  • Tools to manage due date extensions, invite learners to your course, group your learners into cohorts, and adjust grades
  • +
+

You'll only see the instructor dashboard if you're a staff member on this course. If you are, you'll see it on the menu at the top of the page.

+
A screenshot of the instructor dashboard navigation menu
+
\ No newline at end of file diff --git a/demo-course/course/html/e738fc0c95be4fc8ab818a6108c4060e.xml b/demo-course/course/html/e738fc0c95be4fc8ab818a6108c4060e.xml new file mode 100644 index 0000000..27ae398 --- /dev/null +++ b/demo-course/course/html/e738fc0c95be4fc8ab818a6108c4060e.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/e771da4389ef4c65ba2e1a2c0da9d5dc.html b/demo-course/course/html/e771da4389ef4c65ba2e1a2c0da9d5dc.html new file mode 100644 index 0000000..5686aca --- /dev/null +++ b/demo-course/course/html/e771da4389ef4c65ba2e1a2c0da9d5dc.html @@ -0,0 +1,10 @@ +
+

The features of the Video player don't stop there, however, with a number of optional advanced video player features available, including:

+

download_for_offline Downloadable transcripts

+

picture_as_pdf Handout attachments -gGreat for slide decks and downloadable activity introductions!

+

translate Multi-language transcripts and captions

+

live_tv Support for other video hosting arrangements via direct links

+

schedule Video start and end times - allowing you to embed just the relevant portion without editing the video!

+

And more, which you'll find further details of in the documentation.

+

Check out this short excerpt from the 2023 Open edX conference to see some of these features in action:

+
\ No newline at end of file diff --git a/demo-course/course/html/e771da4389ef4c65ba2e1a2c0da9d5dc.xml b/demo-course/course/html/e771da4389ef4c65ba2e1a2c0da9d5dc.xml new file mode 100644 index 0000000..406cd8f --- /dev/null +++ b/demo-course/course/html/e771da4389ef4c65ba2e1a2c0da9d5dc.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/e831369ef236481a81dd274ee9292ce1.html b/demo-course/course/html/e831369ef236481a81dd274ee9292ce1.html new file mode 100644 index 0000000..7dcb42b --- /dev/null +++ b/demo-course/course/html/e831369ef236481a81dd274ee9292ce1.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/e831369ef236481a81dd274ee9292ce1.xml b/demo-course/course/html/e831369ef236481a81dd274ee9292ce1.xml new file mode 100644 index 0000000..e82aaf1 --- /dev/null +++ b/demo-course/course/html/e831369ef236481a81dd274ee9292ce1.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/e94bffee633e47d2bd4dae43c1c9b535.html b/demo-course/course/html/e94bffee633e47d2bd4dae43c1c9b535.html new file mode 100644 index 0000000..b297344 --- /dev/null +++ b/demo-course/course/html/e94bffee633e47d2bd4dae43c1c9b535.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/e94bffee633e47d2bd4dae43c1c9b535.xml b/demo-course/course/html/e94bffee633e47d2bd4dae43c1c9b535.xml new file mode 100644 index 0000000..e6aaf65 --- /dev/null +++ b/demo-course/course/html/e94bffee633e47d2bd4dae43c1c9b535.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/eab21df0c9df4e7fb7e97f7bc42cfdd9.html b/demo-course/course/html/eab21df0c9df4e7fb7e97f7bc42cfdd9.html new file mode 100644 index 0000000..048a68f --- /dev/null +++ b/demo-course/course/html/eab21df0c9df4e7fb7e97f7bc42cfdd9.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/html/eab21df0c9df4e7fb7e97f7bc42cfdd9.xml b/demo-course/course/html/eab21df0c9df4e7fb7e97f7bc42cfdd9.xml new file mode 100644 index 0000000..e3e6d76 --- /dev/null +++ b/demo-course/course/html/eab21df0c9df4e7fb7e97f7bc42cfdd9.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/eb66e80494744cad8deb89fff581e8f9.html b/demo-course/course/html/eb66e80494744cad8deb89fff581e8f9.html new file mode 100644 index 0000000..746b484 --- /dev/null +++ b/demo-course/course/html/eb66e80494744cad8deb89fff581e8f9.html @@ -0,0 +1,12 @@ +

Here's an example for you, check out this click-to-reveal button we've built to demonstrate this capability using a combination of HTML, CSS and Javascript:

+
+
+

+ Click here to reveal

+
+
+

HTML, CSS, and Javascript can be powerful tools in the course builders toolbelt. But use them judiciously.

+
gif of a rabit in a top hat
+
+
+

+

If you want to use the code for this simply grab the code below and modify it for your purpose.

\ No newline at end of file diff --git a/demo-course/course/html/eb66e80494744cad8deb89fff581e8f9.xml b/demo-course/course/html/eb66e80494744cad8deb89fff581e8f9.xml new file mode 100644 index 0000000..a6030d1 --- /dev/null +++ b/demo-course/course/html/eb66e80494744cad8deb89fff581e8f9.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/ec2fad41f0784dc5af806604182bcdcb.html b/demo-course/course/html/ec2fad41f0784dc5af806604182bcdcb.html new file mode 100644 index 0000000..cfefbe3 --- /dev/null +++ b/demo-course/course/html/ec2fad41f0784dc5af806604182bcdcb.html @@ -0,0 +1,142 @@ +
+
+

+ Click here to get the Image Hotspot code

+
+
+
<!--####BEGIN HTML#####-->
<div class="row tooltip-sec">
 <div class="hotspot-img">
    <img src="/static/grand_piano_freepik.jpeg" alt="inforgraphic for three steps for combatting information manipulation" />
    <div class="circle first">
       <div class="bubble left">
          <p>Pedals on pianos are called – from left to right – una corda, sostenuto, and the sustain pedal.</p>
       </div>
    </div>
    <div class="circle second">
       <div class="bubble left">
          <p>Up until the 1950s, piano keys were made from elephant tusks. Today, in order to protect and preserve elephants, most piano keys are made from plastic.</p>
       </div>
    </div>
    <div class="circle third">
       <div class="bubble right">
          <p>On larger grand pianos the "harp", or metal frame, can hold up to 30 tons of tension!</p>
       </div>
    </div>
 </div>
</div>
<p></p>
<!--####END HTML#####-->

<!--####BEGIN JAVASCRIPT#####-->
<script>
 (function( $ ){
   $(".flip-card, .circle").click(function() {
       $(this).toggleClass("active")
   });
   $(document).on("click", function(e) {
   if ($(e.target).is(".circle") === false) {
     $(".circle").removeClass("active");
   }
 });
 })(jQuery);
</script>
<!--####END JAVASCRIPT#####--> 

<!--####BEGIN CSS#####-->
<style type="text/css"> .row.tooltip-sec .hotspot-img { + position: relative; +} + .row.tooltip-sec .hotspot-img img { + width: 100%; +} + .circle { + width: 20px; + height: 20px; + border-radius: 100%; + background: #3a7fac; + box-shadow: 0 0.2rem 0.6rem rgb(0 0 0 / 75%); + cursor: pointer; + text-align: center; + padding: 5px; + border: 2px solid transparent; + transition: .3s all ease; + position: absolute; +} + .circle:hover { + border: 2px solid #ffffff; +} + .circle:before { + content: '+'; + font-size: 20px; + font-weight: 700; + color: #fff; + position: relative; + top: 0px; +} + .circle.active { + background: #fff; +} + .circle.active:hover { + border: 2px solid #3a7fac; +} + .circle.active:before { + color: #3a7fac; +} + .circle .bubble { + display: none; + background: #fff; + padding: 2rem; + width: 375px; + border-radius: 0.4rem; + border-bottom: 0 solid #3a7fac; + box-shadow: 0 0 1rem rgb(0 0 0 / 50%); + text-align: left; + box-sizing: border-box; + font-size: 14px; + position: absolute; +} + .circle.active .bubble { + display: block; + border-bottom-width: 0.4rem; + border-color: #3a7fac; + z-index: 5; + top: -20px; +} + .circle.active .bubble:before { + content: ""; + position: absolute; + height: 0; + width: 0; + border: 0.6rem solid transparent; + top: 20px; +} + .circle.first { + top: 75%; + left: 70%; +} + .circle.second { + top: 50%; + left: 71%; +} + .circle.third { + top: 32%; + left: 50%; +} + .circle.active .bubble.right { + right: calc(0px - 400px); +} + .circle.active .bubble.left { + left: calc(0px - 400px); +} + .circle.active .bubble.left:before { + right: -1.1rem; + border-left-color: #fff; +} + .circle.active .bubble.right:before { + left: -1.1rem; + border-right-color: #fff; +} + @media only screen and (max-width: 1024px) { +} + @media only screen and (max-width: 768px) { + .circle { + width: 10px; + height: 10px; + border: 1px solid transparent; + } + .circle:hover { + border: 1px solid #3a7fac; + } + .circle.active:hover { + border: 1px solid #fff; + } + .circle:before { + font-size: 15px; + top: -7px; + } + .circle .bubble { + width: 240px; + padding: 1.5rem; + } + .circle.active .bubble.left{ + left: calc(0px - 255px); + } + .circle.active .bubble.right { + right: calc(0px - 260px); + } +} + @media only screen and (max-width: 520px) { + .circle .bubble { + width: 180px; + padding: 1.3rem; + } + .circle.active .bubble.left{ + left: calc(0px - 205px); + } + .circle.active .bubble.right { + right: calc(0px - 205px); + } +} + </style>
<!--####END CSS#####-->
+
+
\ No newline at end of file diff --git a/demo-course/course/html/ec2fad41f0784dc5af806604182bcdcb.xml b/demo-course/course/html/ec2fad41f0784dc5af806604182bcdcb.xml new file mode 100644 index 0000000..3913bc5 --- /dev/null +++ b/demo-course/course/html/ec2fad41f0784dc5af806604182bcdcb.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/ec983644cc414ac597503da5b80dc671.html b/demo-course/course/html/ec983644cc414ac597503da5b80dc671.html new file mode 100644 index 0000000..8ecf85f --- /dev/null +++ b/demo-course/course/html/ec983644cc414ac597503da5b80dc671.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/ec983644cc414ac597503da5b80dc671.xml b/demo-course/course/html/ec983644cc414ac597503da5b80dc671.xml new file mode 100644 index 0000000..f1fdda9 --- /dev/null +++ b/demo-course/course/html/ec983644cc414ac597503da5b80dc671.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/eccf3ee3e2c4456fb9032e243a5a2aa4.html b/demo-course/course/html/eccf3ee3e2c4456fb9032e243a5a2aa4.html new file mode 100644 index 0000000..28d8db8 --- /dev/null +++ b/demo-course/course/html/eccf3ee3e2c4456fb9032e243a5a2aa4.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/eccf3ee3e2c4456fb9032e243a5a2aa4.xml b/demo-course/course/html/eccf3ee3e2c4456fb9032e243a5a2aa4.xml new file mode 100644 index 0000000..881d67a --- /dev/null +++ b/demo-course/course/html/eccf3ee3e2c4456fb9032e243a5a2aa4.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/ecd00380bae44a4c878a6ec9a9120148.html b/demo-course/course/html/ecd00380bae44a4c878a6ec9a9120148.html new file mode 100644 index 0000000..d6eef64 --- /dev/null +++ b/demo-course/course/html/ecd00380bae44a4c878a6ec9a9120148.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
diff --git a/demo-course/course/html/ecd00380bae44a4c878a6ec9a9120148.xml b/demo-course/course/html/ecd00380bae44a4c878a6ec9a9120148.xml new file mode 100644 index 0000000..a2a2491 --- /dev/null +++ b/demo-course/course/html/ecd00380bae44a4c878a6ec9a9120148.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/ef2a07230610407e9165937d65eb1746.html b/demo-course/course/html/ef2a07230610407e9165937d65eb1746.html new file mode 100644 index 0000000..4512264 --- /dev/null +++ b/demo-course/course/html/ef2a07230610407e9165937d65eb1746.html @@ -0,0 +1,14 @@ +
+
+

1 Read the documentation an icon for documentation

+
+
+

You can find documentation in a variety of places:

+
    +
  • Docs.OpenedX.org is the main documentation site for the Open edX platform.
  • +
  • 2U provides their own documentation for edX.org, which can be found at Docs.edX.org. Just remember that the information found there is often specific to edX.org's version of the platform.
  • +
  • Google it! There's a wealth of information available online from various providers and experts outside of the official documentation sites.
  • +
+

If reading and searching through the available doesn't help, then you're going to need some more help. Let's look now at who can help.

+
+
\ No newline at end of file diff --git a/demo-course/course/html/ef2a07230610407e9165937d65eb1746.xml b/demo-course/course/html/ef2a07230610407e9165937d65eb1746.xml new file mode 100644 index 0000000..4564d4d --- /dev/null +++ b/demo-course/course/html/ef2a07230610407e9165937d65eb1746.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/ef65c5c7c37f46b1a2a11fac55afd5d1.html b/demo-course/course/html/ef65c5c7c37f46b1a2a11fac55afd5d1.html new file mode 100644 index 0000000..bde9f37 --- /dev/null +++ b/demo-course/course/html/ef65c5c7c37f46b1a2a11fac55afd5d1.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/ef65c5c7c37f46b1a2a11fac55afd5d1.xml b/demo-course/course/html/ef65c5c7c37f46b1a2a11fac55afd5d1.xml new file mode 100644 index 0000000..1d50c90 --- /dev/null +++ b/demo-course/course/html/ef65c5c7c37f46b1a2a11fac55afd5d1.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/f01347fd0ce14a9383ad95c7bde042d0.html b/demo-course/course/html/f01347fd0ce14a9383ad95c7bde042d0.html new file mode 100644 index 0000000..3b22c1d --- /dev/null +++ b/demo-course/course/html/f01347fd0ce14a9383ad95c7bde042d0.html @@ -0,0 +1,5 @@ +
+

Image Attribution: 

+

Frank Bernard Dicksee, Public domain, via Wikimedia Commons

+

+
\ No newline at end of file diff --git a/demo-course/course/html/f01347fd0ce14a9383ad95c7bde042d0.xml b/demo-course/course/html/f01347fd0ce14a9383ad95c7bde042d0.xml new file mode 100644 index 0000000..dc2021b --- /dev/null +++ b/demo-course/course/html/f01347fd0ce14a9383ad95c7bde042d0.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/f1cd3645a04f446ba979fbb01c5228b5.html b/demo-course/course/html/f1cd3645a04f446ba979fbb01c5228b5.html new file mode 100644 index 0000000..a7d3f64 --- /dev/null +++ b/demo-course/course/html/f1cd3645a04f446ba979fbb01c5228b5.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/f1cd3645a04f446ba979fbb01c5228b5.xml b/demo-course/course/html/f1cd3645a04f446ba979fbb01c5228b5.xml new file mode 100644 index 0000000..154299e --- /dev/null +++ b/demo-course/course/html/f1cd3645a04f446ba979fbb01c5228b5.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/f2a9ce2abef8469b85506335db5778b0.html b/demo-course/course/html/f2a9ce2abef8469b85506335db5778b0.html new file mode 100644 index 0000000..a3dbcb9 --- /dev/null +++ b/demo-course/course/html/f2a9ce2abef8469b85506335db5778b0.html @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/demo-course/course/html/f2a9ce2abef8469b85506335db5778b0.xml b/demo-course/course/html/f2a9ce2abef8469b85506335db5778b0.xml new file mode 100644 index 0000000..eab88fd --- /dev/null +++ b/demo-course/course/html/f2a9ce2abef8469b85506335db5778b0.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/f35aa25f61e4421482afa1304296b5ea.html b/demo-course/course/html/f35aa25f61e4421482afa1304296b5ea.html new file mode 100644 index 0000000..7096f61 --- /dev/null +++ b/demo-course/course/html/f35aa25f61e4421482afa1304296b5ea.html @@ -0,0 +1,5 @@ +
+

The next component demonstrates a more advanced and flexible way of integrating code assessment into the Open edX® platform. It is an instance of an open source IDE called OpenJupyter which is graciously hosted for this demo course by openHPI

+

The assessment will open in a new tab but be able to return a grade back to the Open edX® LMS at the end of the exercise. 

+

You can also view a video of the process just below the assessment. 

+
\ No newline at end of file diff --git a/demo-course/course/html/f35aa25f61e4421482afa1304296b5ea.xml b/demo-course/course/html/f35aa25f61e4421482afa1304296b5ea.xml new file mode 100644 index 0000000..029fcff --- /dev/null +++ b/demo-course/course/html/f35aa25f61e4421482afa1304296b5ea.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/f4396b1ac05d43fc8b86bf8792fddedc.html b/demo-course/course/html/f4396b1ac05d43fc8b86bf8792fddedc.html new file mode 100644 index 0000000..1fe969c --- /dev/null +++ b/demo-course/course/html/f4396b1ac05d43fc8b86bf8792fddedc.html @@ -0,0 +1,43 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/f4396b1ac05d43fc8b86bf8792fddedc.xml b/demo-course/course/html/f4396b1ac05d43fc8b86bf8792fddedc.xml new file mode 100644 index 0000000..90609e1 --- /dev/null +++ b/demo-course/course/html/f4396b1ac05d43fc8b86bf8792fddedc.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/f48dfe40f51a41f0bdfeffc2bc53f83a.html b/demo-course/course/html/f48dfe40f51a41f0bdfeffc2bc53f83a.html new file mode 100644 index 0000000..8d10cd0 --- /dev/null +++ b/demo-course/course/html/f48dfe40f51a41f0bdfeffc2bc53f83a.html @@ -0,0 +1,2 @@ +

The Open EdXIf you've made it this far, then welcome! You're part of the Open edX® community, a proud host of thousands of educators, learning technologists, researchers and specialists spanning the globe. The Open edX® community creates instances that cater to millions of learners across some of the world's largest institutions, as well as smaller independent sites.

+

Check out our introduction video below where you'll hear from a range of community members from software developers, to course builders to educational researchers. 

\ No newline at end of file diff --git a/demo-course/course/html/f48dfe40f51a41f0bdfeffc2bc53f83a.xml b/demo-course/course/html/f48dfe40f51a41f0bdfeffc2bc53f83a.xml new file mode 100644 index 0000000..d15fb1c --- /dev/null +++ b/demo-course/course/html/f48dfe40f51a41f0bdfeffc2bc53f83a.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/f4f8e84fa48b4990a6a4986ff6f33dc4.html b/demo-course/course/html/f4f8e84fa48b4990a6a4986ff6f33dc4.html new file mode 100644 index 0000000..1516a0e --- /dev/null +++ b/demo-course/course/html/f4f8e84fa48b4990a6a4986ff6f33dc4.html @@ -0,0 +1,4 @@ +
+

Try it!

+

To complete this activity, simply click Mark as Complete below.

+
\ No newline at end of file diff --git a/demo-course/course/html/f4f8e84fa48b4990a6a4986ff6f33dc4.xml b/demo-course/course/html/f4f8e84fa48b4990a6a4986ff6f33dc4.xml new file mode 100644 index 0000000..68673f3 --- /dev/null +++ b/demo-course/course/html/f4f8e84fa48b4990a6a4986ff6f33dc4.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/f5c48d15a4964d18b5ead12c9199915a.html b/demo-course/course/html/f5c48d15a4964d18b5ead12c9199915a.html new file mode 100644 index 0000000..02c00e1 --- /dev/null +++ b/demo-course/course/html/f5c48d15a4964d18b5ead12c9199915a.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/f5c48d15a4964d18b5ead12c9199915a.xml b/demo-course/course/html/f5c48d15a4964d18b5ead12c9199915a.xml new file mode 100644 index 0000000..f16efda --- /dev/null +++ b/demo-course/course/html/f5c48d15a4964d18b5ead12c9199915a.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/f7b92f7fc6ee409b986c5f803b1f7d23.html b/demo-course/course/html/f7b92f7fc6ee409b986c5f803b1f7d23.html new file mode 100644 index 0000000..38cbd22 --- /dev/null +++ b/demo-course/course/html/f7b92f7fc6ee409b986c5f803b1f7d23.html @@ -0,0 +1,8 @@ +
+
+

2 Consult with your site administrator an icon representing web hosting

+
+
+

If you are working with a site administrator or provider to host your instance, check with them as they may have experience with your question specifically for your site, or they may be able to install or enable certain features to support your need

+
+
\ No newline at end of file diff --git a/demo-course/course/html/f7b92f7fc6ee409b986c5f803b1f7d23.xml b/demo-course/course/html/f7b92f7fc6ee409b986c5f803b1f7d23.xml new file mode 100644 index 0000000..368775e --- /dev/null +++ b/demo-course/course/html/f7b92f7fc6ee409b986c5f803b1f7d23.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/f7ee293ed3064ff69ed77f31f0a6265c.html b/demo-course/course/html/f7ee293ed3064ff69ed77f31f0a6265c.html new file mode 100644 index 0000000..963d78c --- /dev/null +++ b/demo-course/course/html/f7ee293ed3064ff69ed77f31f0a6265c.html @@ -0,0 +1,4 @@ +
+

Try it!

+

The SCORM demonstration below was built in Storyline 360 and demonstrates the progression of a course with a quiz at the end. Keep in mind there are many tools and ways to configure SCORM exercises.

+
\ No newline at end of file diff --git a/demo-course/course/html/f7ee293ed3064ff69ed77f31f0a6265c.xml b/demo-course/course/html/f7ee293ed3064ff69ed77f31f0a6265c.xml new file mode 100644 index 0000000..115b5d2 --- /dev/null +++ b/demo-course/course/html/f7ee293ed3064ff69ed77f31f0a6265c.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/f814195eb3b149c4a3c1fdf7bc4447c6.html b/demo-course/course/html/f814195eb3b149c4a3c1fdf7bc4447c6.html new file mode 100644 index 0000000..048a68f --- /dev/null +++ b/demo-course/course/html/f814195eb3b149c4a3c1fdf7bc4447c6.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/html/f814195eb3b149c4a3c1fdf7bc4447c6.xml b/demo-course/course/html/f814195eb3b149c4a3c1fdf7bc4447c6.xml new file mode 100644 index 0000000..843b049 --- /dev/null +++ b/demo-course/course/html/f814195eb3b149c4a3c1fdf7bc4447c6.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/f8253934ef534e6f82775222343e54e6.html b/demo-course/course/html/f8253934ef534e6f82775222343e54e6.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/f8253934ef534e6f82775222343e54e6.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/f8253934ef534e6f82775222343e54e6.xml b/demo-course/course/html/f8253934ef534e6f82775222343e54e6.xml new file mode 100644 index 0000000..ae49af5 --- /dev/null +++ b/demo-course/course/html/f8253934ef534e6f82775222343e54e6.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/f9d837afc2ef4b44b967c47fc22db7cd.html b/demo-course/course/html/f9d837afc2ef4b44b967c47fc22db7cd.html new file mode 100644 index 0000000..048a68f --- /dev/null +++ b/demo-course/course/html/f9d837afc2ef4b44b967c47fc22db7cd.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/html/f9d837afc2ef4b44b967c47fc22db7cd.xml b/demo-course/course/html/f9d837afc2ef4b44b967c47fc22db7cd.xml new file mode 100644 index 0000000..47b1885 --- /dev/null +++ b/demo-course/course/html/f9d837afc2ef4b44b967c47fc22db7cd.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/faaa44ad7cd64564a9693bcba3077e15.html b/demo-course/course/html/faaa44ad7cd64564a9693bcba3077e15.html new file mode 100644 index 0000000..16112d2 --- /dev/null +++ b/demo-course/course/html/faaa44ad7cd64564a9693bcba3077e15.html @@ -0,0 +1,56 @@ +
+

The basic assessment tools we'll be looking at in this subsection are as follows:

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Component TypeExample(s)
Single-Select Multiple Choice +
    +
  • Formative "Check your Understanding" questions with hints and feedback
  • +
  • Multiple choice quizzes on historical dates.
  • +
+
Multi-Select Multiple Choice +
    +
  • Assessment on nutritional components of a meal where multiple nutrients are present.
  • +
  • Selecting the countries that belong to a particular continent from a list of options.
  • +
+
Dropdown +
    +
  • True/false questions about scientific principles.
  • +
  • Selecting the correct verb tense from a dropdown in a language learning module.
  • +
+
Numerical Input +
    +
  • Calculating the answer to a math problem and inputting the solution.
  • +
+
Text Input +
    +
  • Fill-in-the-blank exercises for vocabulary.
  • +
  • Entering the correct year for a historical event based on a provided hint.
  • +
+
+
\ No newline at end of file diff --git a/demo-course/course/html/faaa44ad7cd64564a9693bcba3077e15.xml b/demo-course/course/html/faaa44ad7cd64564a9693bcba3077e15.xml new file mode 100644 index 0000000..9b8d982 --- /dev/null +++ b/demo-course/course/html/faaa44ad7cd64564a9693bcba3077e15.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/fc6f4d4673364e01a6c302aa7b25c7ea.html b/demo-course/course/html/fc6f4d4673364e01a6c302aa7b25c7ea.html new file mode 100644 index 0000000..2d176d7 --- /dev/null +++ b/demo-course/course/html/fc6f4d4673364e01a6c302aa7b25c7ea.html @@ -0,0 +1,4 @@ +
+

Try it!

+

Try the three problems below! We've enabled the Show Answer button for these questions in case your math skills are a little rusty.

+
\ No newline at end of file diff --git a/demo-course/course/html/fc6f4d4673364e01a6c302aa7b25c7ea.xml b/demo-course/course/html/fc6f4d4673364e01a6c302aa7b25c7ea.xml new file mode 100644 index 0000000..353a84f --- /dev/null +++ b/demo-course/course/html/fc6f4d4673364e01a6c302aa7b25c7ea.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/fe30a17a91464188a5f7a9b75b2a1d0a.html b/demo-course/course/html/fe30a17a91464188a5f7a9b75b2a1d0a.html new file mode 100644 index 0000000..4af7818 --- /dev/null +++ b/demo-course/course/html/fe30a17a91464188a5f7a9b75b2a1d0a.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/demo-course/course/html/fe30a17a91464188a5f7a9b75b2a1d0a.xml b/demo-course/course/html/fe30a17a91464188a5f7a9b75b2a1d0a.xml new file mode 100644 index 0000000..ac538ca --- /dev/null +++ b/demo-course/course/html/fe30a17a91464188a5f7a9b75b2a1d0a.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/fe6b09752fe74a38bbaa48292cfee1dc.html b/demo-course/course/html/fe6b09752fe74a38bbaa48292cfee1dc.html new file mode 100644 index 0000000..ba43f83 --- /dev/null +++ b/demo-course/course/html/fe6b09752fe74a38bbaa48292cfee1dc.html @@ -0,0 +1,3 @@ +

A screenshot of codeboard with steps. Step 1 is to run the application. Step 2 is to submit.

+

+

A screenshot of codeboard with steps. Step 3 is to verify you got your score.

\ No newline at end of file diff --git a/demo-course/course/html/fe6b09752fe74a38bbaa48292cfee1dc.xml b/demo-course/course/html/fe6b09752fe74a38bbaa48292cfee1dc.xml new file mode 100644 index 0000000..3ec504a --- /dev/null +++ b/demo-course/course/html/fe6b09752fe74a38bbaa48292cfee1dc.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/ff536eb66cd44f94a0df2c9e9e06ab66.html b/demo-course/course/html/ff536eb66cd44f94a0df2c9e9e06ab66.html new file mode 100644 index 0000000..acfc78d --- /dev/null +++ b/demo-course/course/html/ff536eb66cd44f94a0df2c9e9e06ab66.html @@ -0,0 +1,8 @@ +
+

Do you find this page useful?

+
+ + + +
+
\ No newline at end of file diff --git a/demo-course/course/html/ff536eb66cd44f94a0df2c9e9e06ab66.xml b/demo-course/course/html/ff536eb66cd44f94a0df2c9e9e06ab66.xml new file mode 100644 index 0000000..7727b75 --- /dev/null +++ b/demo-course/course/html/ff536eb66cd44f94a0df2c9e9e06ab66.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/html/ff5c95a828ed4aadb5403c7e6c3a5fbf.html b/demo-course/course/html/ff5c95a828ed4aadb5403c7e6c3a5fbf.html new file mode 100644 index 0000000..b6ab645 --- /dev/null +++ b/demo-course/course/html/ff5c95a828ed4aadb5403c7e6c3a5fbf.html @@ -0,0 +1,9 @@ +
+

The Learning Management System (or LMS) is the live site that is presented to your learners. It's where all learning activities take place, and it's also where live courses are managed. The key pieces of this are:

+
    +
  • The course outline
  • +
  • The learning sequence
  • +
  • Learner progress
  • +
  • The Instructor dashboard
  • +
+
\ No newline at end of file diff --git a/demo-course/course/html/ff5c95a828ed4aadb5403c7e6c3a5fbf.xml b/demo-course/course/html/ff5c95a828ed4aadb5403c7e6c3a5fbf.xml new file mode 100644 index 0000000..9603a3e --- /dev/null +++ b/demo-course/course/html/ff5c95a828ed4aadb5403c7e6c3a5fbf.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/info/handouts.html b/demo-course/course/info/handouts.html new file mode 100644 index 0000000..ac601ba --- /dev/null +++ b/demo-course/course/info/handouts.html @@ -0,0 +1 @@ +
    \ No newline at end of file diff --git a/demo-course/course/info/updates.html b/demo-course/course/info/updates.html new file mode 100644 index 0000000..e69de29 diff --git a/demo-course/course/info/updates.items.json b/demo-course/course/info/updates.items.json new file mode 100644 index 0000000..bc81bc2 --- /dev/null +++ b/demo-course/course/info/updates.items.json @@ -0,0 +1,8 @@ +[ + { + "content": "\"A

    Welcome to the Open edX\u00ae Demo Course! This course is designed for anyone who wants to learn more about the capabilities of the Open edX\u00ae platform and how it can be used to support your learning experiences. We are glad you are here!

    \n

    To begin, click on the \"Start/Resume Course\" button at the top of this page.

    ", + "date": "November 5, 2023", + "id": 1, + "status": "visible" + } +] \ No newline at end of file diff --git a/demo-course/course/library_content/34a4d5e71d974c029cbde1956bd7c820.xml b/demo-course/course/library_content/34a4d5e71d974c029cbde1956bd7c820.xml new file mode 100644 index 0000000..647ec22 --- /dev/null +++ b/demo-course/course/library_content/34a4d5e71d974c029cbde1956bd7c820.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/demo-course/course/lti/8e71d278e94f4913bc564cc6141fde53.xml b/demo-course/course/lti/8e71d278e94f4913bc564cc6141fde53.xml new file mode 100644 index 0000000..11183eb --- /dev/null +++ b/demo-course/course/lti/8e71d278e94f4913bc564cc6141fde53.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/lti/94231b63c6c34ead863d2876a4762751.xml b/demo-course/course/lti/94231b63c6c34ead863d2876a4762751.xml new file mode 100644 index 0000000..1793f3e --- /dev/null +++ b/demo-course/course/lti/94231b63c6c34ead863d2876a4762751.xml @@ -0,0 +1 @@ + diff --git a/demo-course/course/policies/assets.json b/demo-course/course/policies/assets.json new file mode 100644 index 0000000..c36f2ab --- /dev/null +++ b/demo-course/course/policies/assets.json @@ -0,0 +1,2496 @@ +{ + "Abacus.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "Abacus.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "Abacus.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@Abacus.png", + "import_path": "Abacus.png", + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "Abacus-png.jpg", + null + ] + }, + "Abacus_solution.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "Abacus_solution.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "Abacus_solution.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@Abacus_solution.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "Abacus_solution-png.jpg", + null + ] + }, + "Brain_green.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "Brain_green.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "Brain green.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@Brain_green.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "Brain_green-png.jpg", + null + ] + }, + "Brain_red.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "Brain_red.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "Brain red.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@Brain_red.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "Brain_red-png.jpg", + null + ] + }, + "Brain_target_sm.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "Brain_target_sm.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "Brain_target_sm.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@Brain_target_sm.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "Brain_target_sm-png.jpg", + null + ] + }, + "Brain_yellow.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "Brain_yellow.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "Brain yellow.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@Brain_yellow.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "Brain_yellow-png.jpg", + null + ] + }, + "DiagnosisSimulation.html": { + "contentType": "text/html", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "DiagnosisSimulation.html", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "DiagnosisSimulation.html", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@DiagnosisSimulation.html", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "DiagnosisSimulation2.html": { + "contentType": "text/html", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "DiagnosisSimulation2.html", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "DiagnosisSimulation2.html", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@DiagnosisSimulation2.html", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "DiagnosisSimulation_h2_1.html": { + "contentType": "text/html", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "DiagnosisSimulation_h2_1.html", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "DiagnosisSimulation_h2_1.html", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@DiagnosisSimulation_h2_1.html", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "Discussion_Post.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "Discussion_Post.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "Discussion_Post.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@Discussion_Post.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "Discussion_Post-png.jpg", + null + ] + }, + "HXEditor.js": { + "contentType": "text/javascript", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "HXEditor.js", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "HXEditor.js", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@HXEditor.js", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "HXPopUpProblems.js": { + "contentType": "text/javascript", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "HXPopUpProblems.js", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "HXPopUpProblems.js", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@HXPopUpProblems.js", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "HXVideoChime.js": { + "contentType": "text/javascript", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "HXVideoChime.js", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "HXVideoChime.js", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@HXVideoChime.js", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "HXVideoLinks.js": { + "contentType": "text/javascript", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "HXVideoLinks.js", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "HXVideoLinks.js", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@HXVideoLinks.js", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "Jellyfish_720_10s_2MB.mp4": { + "contentType": "video/mp4", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "Jellyfish_720_10s_2MB.mp4", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "Jellyfish_720_10s_2MB.mp4", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@Jellyfish_720_10s_2MB.mp4", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "Learning_Goals.pdf": { + "contentType": "application/pdf", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "Learning_Goals.pdf", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "Learning Goals.pdf", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@Learning_Goals.pdf", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "Library_Content_graphic-100.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "Library_Content_graphic-100.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "Library Content graphic-100.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@Library_Content_graphic-100.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "Library_Content_graphic-100-png.jpg", + null + ] + }, + "Marketplace-Open-edX_v2.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "Marketplace-Open-edX_v2.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "Marketplace-Open-edX v2.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@Marketplace-Open-edX_v2.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "Marketplace-Open-edX_v2-png.jpg", + null + ] + }, + "OpenedX_Ecosystem.jpg": { + "contentType": "image/jpeg", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "OpenedX_Ecosystem.jpg", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "OpenedX_Ecosystem.jpg", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@OpenedX_Ecosystem.jpg", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "OpenedX_Ecosystem.jpg", + null + ] + }, + "OpenedX_vs_edx_infographic_v2.jpeg": { + "contentType": "image/jpeg", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "OpenedX_vs_edx_infographic_v2.jpeg", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "OpenedX_vs_edx_infographic_v2.jpeg", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@OpenedX_vs_edx_infographic_v2.jpeg", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "OpenedX_vs_edx_infographic_v2-jpeg.jpg", + null + ] + }, + "Pendleton_Sinking_Ship.jpeg": { + "contentType": "image/jpeg", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "Pendleton_Sinking_Ship.jpeg", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "Pendleton_Sinking_Ship.jpeg", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@Pendleton_Sinking_Ship.jpeg", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "Pendleton_Sinking_Ship-jpeg.jpg", + null + ] + }, + "Periodic-Table-Colors.css": { + "contentType": "text/css", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "Periodic-Table-Colors.css", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "Periodic-Table-Colors.css", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@Periodic-Table-Colors.css", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "Periodic-Table.css": { + "contentType": "text/css", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "Periodic-Table.css", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "Periodic-Table.css", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@Periodic-Table.css", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "Periodic-Table.js": { + "contentType": "text/javascript", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "Periodic-Table.js", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "Periodic-Table.js", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@Periodic-Table.js", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "Question_Post.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "Question_Post.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "Question_Post.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@Question_Post.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "Question_Post-png.jpg", + null + ] + }, + "Reach_of_Open_edX_Downloadable_Transcript.pdf": { + "contentType": "application/pdf", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "Reach_of_Open_edX_Downloadable_Transcript.pdf", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "Reach of Open edX Downloadable Transcript.pdf", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@Reach_of_Open_edX_Downloadable_Transcript.pdf", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "VideoLinks.css": { + "contentType": "text/css", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "VideoLinks.css", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "VideoLinks.css", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@VideoLinks.css", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "Video_Player_Elements_Image-100.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "Video_Player_Elements_Image-100.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "Video Player Elements Image-100.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@Video_Player_Elements_Image-100.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "Video_Player_Elements_Image-100-png.jpg", + null + ] + }, + "Video_Toolbar.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "Video_Toolbar.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "Video_Toolbar.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@Video_Toolbar.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "Video_Toolbar-png.jpg", + null + ] + }, + "ajax-loader.gif": { + "contentType": "image/gif", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "ajax-loader.gif", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "ajax-loader.gif", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@ajax-loader.gif", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "ajax-loader-gif.jpg", + null + ] + }, + "arrow-clicked.svg": { + "contentType": "image/svg+xml", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "arrow-clicked.svg", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "arrow-clicked.svg", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@arrow-clicked.svg", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "arrow-clicked.svg", + null + ] + }, + "bobcat_upload_orig_template.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "bobcat_upload_orig_template.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "bobcat_upload_orig_template.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@bobcat_upload_orig_template.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "bobcat_upload_orig_template-png.jpg", + null + ] + }, + "callout_bg.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "callout_bg.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "callout_bg.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@callout_bg.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "callout_bg-png.jpg", + null + ] + }, + "choose_library_component.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "choose_library_component.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "choose_library_component.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@choose_library_component.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "choose_library_component-png.jpg", + null + ] + }, + "cm_style_guide_demox.css": { + "contentType": "text/css", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "cm_style_guide_demox.css", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "cm_style_guide_demox.css", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@cm_style_guide_demox.css", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "code_editor_orig.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "code_editor_orig.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "code_editor_orig.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@code_editor_orig.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "code_editor_orig-png.jpg", + null + ] + }, + "codeboard_demo.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "codeboard_demo.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "codeboard_demo.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@codeboard_demo.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "codeboard_demo-png.jpg", + null + ] + }, + "codeboard_demo_step3.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "codeboard_demo_step3.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "codeboard_demo_step3.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@codeboard_demo_step3.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "codeboard_demo_step3-png.jpg", + null + ] + }, + "cohorts-groups-components.jpeg": { + "contentType": "image/jpeg", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "cohorts-groups-components.jpeg", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "cohorts-groups-components.jpeg", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@cohorts-groups-components.jpeg", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "cohorts-groups-components-jpeg.jpg", + null + ] + }, + "cohorts-setup.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "cohorts-setup.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "cohorts-setup.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@cohorts-setup.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "cohorts-setup-png.jpg", + null + ] + }, + "community-icon.svg": { + "contentType": "image/svg+xml", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "community-icon.svg", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "community-icon.svg", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@community-icon.svg", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "community-icon.svg", + null + ] + }, + "components_orig.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "components_orig.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "components_orig.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@components_orig.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "components_orig-png.jpg", + null + ] + }, + "content-group-switcher.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "content-group-switcher.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "content-group-switcher.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@content-group-switcher.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "content-group-switcher-png.jpg", + null + ] + }, + "course_components.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "course_components.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "course_components.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@course_components.png", + "import_path": "course_components.png", + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "course_components-png.jpg", + null + ] + }, + "course_outline.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "course_outline.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "course_outline.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@course_outline.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "course_outline-png.jpg", + null + ] + }, + "course_structure_1.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "course_structure_1.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "course_structure_1.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@course_structure_1.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "course_structure_1-png.jpg", + null + ] + }, + "course_structure_2.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "course_structure_2.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "course_structure_2.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@course_structure_2.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "course_structure_2-png.jpg", + null + ] + }, + "course_structure_3.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "course_structure_3.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "course_structure_3.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@course_structure_3.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "course_structure_3-png.jpg", + null + ] + }, + "course_structure_full.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "course_structure_full.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "course_structure_full.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@course_structure_full.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "course_structure_full-png.jpg", + null + ] + }, + "database-icon.svg": { + "contentType": "image/svg+xml", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "database-icon.svg", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "database-icon.svg", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@database-icon.svg", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "database-icon.svg", + null + ] + }, + "demox_js.js": { + "contentType": "text/javascript", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "demox_js.js", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "demox_js.js", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@demox_js.js", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "discussion-admin-add.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "discussion-admin-add.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "discussion-admin-add.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@discussion-admin-add.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "discussion-admin-add-png.jpg", + null + ] + }, + "divide-by-cohort.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "divide-by-cohort.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "divide-by-cohort.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@divide-by-cohort.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "divide-by-cohort-png.jpg", + null + ] + }, + "documentation_icon.svg": { + "contentType": "image/svg+xml", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "documentation_icon.svg", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "documentation icon.svg", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@documentation_icon.svg", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "documentation_icon.svg", + null + ] + }, + "download-icon.svg": { + "contentType": "image/svg+xml", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "download-icon.svg", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "download-icon.svg", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@download-icon.svg", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "download-icon.svg", + null + ] + }, + "draft.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "draft.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "draft.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@draft.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "draft-png.jpg", + null + ] + }, + "edX_logo.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "edX_logo.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "edX_logo.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@edX_logo.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "edX_logo-png.jpg", + null + ] + }, + "feedback.js": { + "contentType": "text/javascript", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "feedback.js", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "feedback.js", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@feedback.js", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "grade_submissions.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "grade_submissions.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "grade_submissions.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@grade_submissions.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "grade_submissions-png.jpg", + null + ] + }, + "gradient-triangle.svg": { + "contentType": "image/svg+xml", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "gradient-triangle.svg", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "gradient-triangle.svg", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@gradient-triangle.svg", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "gradient-triangle.svg", + null + ] + }, + "grand_piano_freepik.jpeg": { + "contentType": "image/jpeg", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "grand_piano_freepik.jpeg", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "grand_piano_freepik.jpeg", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@grand_piano_freepik.jpeg", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "grand_piano_freepik-jpeg.jpg", + null + ] + }, + "html_button_orig.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "html_button_orig.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "html_button_orig.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@html_button_orig.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "html_button_orig-png.jpg", + null + ] + }, + "hx.css": { + "contentType": "text/css", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "hx.css", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "hx.css", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@hx.css", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "hx.js": { + "contentType": "text/javascript", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "hx.js", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "hx.js", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@hx.js", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "hxGlobalOptions.js": { + "contentType": "text/javascript", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "hxGlobalOptions.js", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "hxGlobalOptions.js", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@hxGlobalOptions.js", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "imageMapResizer.min.js": { + "contentType": "text/javascript", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "imageMapResizer.min.js", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "imageMapResizer.min.js", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@imageMapResizer.min.js", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "images_logic_gate_image.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "images_logic_gate_image.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "images_logic_gate_image.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@images_logic_gate_image.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "images_logic_gate_image-png.jpg", + null + ] + }, + "images_logic_gate_sln.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "images_logic_gate_sln.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "images_logic_gate_sln.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@images_logic_gate_sln.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "images_logic_gate_sln-png.jpg", + null + ] + }, + "instructor_dashboard_orig.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "instructor_dashboard_orig.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "instructor_dashboard_orig.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@instructor_dashboard_orig.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "instructor_dashboard_orig-png.jpg", + null + ] + }, + "intro_accessible.js": { + "contentType": "text/javascript", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "intro_accessible.js", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "intro_accessible.js", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@intro_accessible.js", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "introjs.css": { + "contentType": "text/css", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "introjs.css", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "introjs.css", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@introjs.css", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "learning_sequence_orig.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "learning_sequence_orig.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "learning_sequence_orig.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@learning_sequence_orig.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "learning_sequence_orig-png.jpg", + null + ] + }, + "library_import.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "library_import.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "library_import.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@library_import.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "library_import-png.jpg", + null + ] + }, + "lightbulb-opacity-5.svg": { + "contentType": "image/svg+xml", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "lightbulb-opacity-5.svg", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "lightbulb-opacity-5.svg", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@lightbulb-opacity-5.svg", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "lightbulb-opacity-5.svg", + null + ] + }, + "new_library.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "new_library.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "new_library.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@new_library.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "new_library-png.jpg", + null + ] + }, + "ohms_law.html": { + "contentType": "text/html", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "ohms_law.html", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "ohms_law.html", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@ohms_law.html", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "open-edx-celebratory-icon.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "open-edx-celebratory-icon.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "open-edx-celebratory-icon.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@open-edx-celebratory-icon.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "open-edx-celebratory-icon-png.jpg", + null + ] + }, + "open-edx-reach-slide.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "open-edx-reach-slide.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "open-edx-reach-slide.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@open-edx-reach-slide.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "open-edx-reach-slide-png.jpg", + null + ] + }, + "open_source_guy.svg": { + "contentType": "image/svg+xml", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "open_source_guy.svg", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "open source guy.svg", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@open_source_guy.svg", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "open_source_guy.svg", + null + ] + }, + "openedx_logo.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "openedx_logo.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "openedx_logo.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@openedx_logo.png", + "import_path": "openedx_logo.png", + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "openedx_logo-png.jpg", + null + ] + }, + "outline.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "outline.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "outline.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@outline.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "outline-png.jpg", + null + ] + }, + "prerequisite-settings.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "prerequisite-settings.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "prerequisite-settings.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@prerequisite-settings.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "prerequisite-settings-png.jpg", + null + ] + }, + "prerequisite.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "prerequisite.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "prerequisite.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@prerequisite.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "prerequisite-png.jpg", + null + ] + }, + "prism.css": { + "contentType": "text/css", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "prism.css", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "prism.css", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@prism.css", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "prism.js": { + "contentType": "text/javascript", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "prism.js", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "prism.js", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@prism.js", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "progress_page.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "progress_page.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "progress_page.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@progress_page.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "progress_page-png.jpg", + null + ] + }, + "protein_sln.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "protein_sln.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "protein_sln.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@protein_sln.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "protein_sln-png.jpg", + null + ] + }, + "quote-left.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "quote-left.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "quote-left.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@quote-left.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "quote-left-png.jpg", + null + ] + }, + "quote-right.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "quote-right.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "quote-right.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@quote-right.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "quote-right-png.jpg", + null + ] + }, + "rabbit_gif_canva.gif": { + "contentType": "image/gif", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "rabbit_gif_canva.gif", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "rabbit_gif_canva.gif", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@rabbit_gif_canva.gif", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "rabbit_gif_canva-gif.jpg", + null + ] + }, + "raw.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "raw.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "raw.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@raw.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "raw-png.jpg", + null + ] + }, + "raw_html_orig.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "raw_html_orig.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "raw_html_orig.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@raw_html_orig.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "raw_html_orig-png.jpg", + null + ] + }, + "rich_text_orig_with_template.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "rich_text_orig_with_template.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "rich_text_orig_with_template.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@rich_text_orig_with_template.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "rich_text_orig_with_template-png.jpg", + null + ] + }, + "romeo_juliet_commons.jpeg": { + "contentType": "image/jpeg", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "romeo_juliet_commons.jpeg", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "romeo_juliet_commons.jpeg", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@romeo_juliet_commons.jpeg", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "romeo_juliet_commons-jpeg.jpg", + null + ] + }, + "sahara_desert_pexels.jpeg": { + "contentType": "image/jpeg", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "sahara_desert_pexels.jpeg", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "sahara_desert_pexels.jpeg", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@sahara_desert_pexels.jpeg", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "sahara_desert_pexels-jpeg.jpg", + null + ] + }, + "select_library.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "select_library.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "select_library.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@select_library.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "select_library-png.jpg", + null + ] + }, + "slick-theme.css": { + "contentType": "text/css", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "slick-theme.css", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "slick-theme.css", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@slick-theme.css", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "slick.css": { + "contentType": "text/css", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "slick.css", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "slick.css", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@slick.css", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "slick.eot": { + "contentType": "application/octet-stream", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "slick.eot", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "slick.eot", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@slick.eot", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "slick.js": { + "contentType": "text/javascript", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "slick.js", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "slick.js", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@slick.js", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "slick.svg": { + "contentType": "image/svg+xml", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "slick.svg", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "slick.svg", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@slick.svg", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "slick.svg", + null + ] + }, + "slick.ttf": { + "contentType": "font/ttf", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "slick.ttf", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "slick.ttf", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@slick.ttf", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "slick.woff": { + "contentType": "application/font-woff", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "slick.woff", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "slick.woff", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@slick.woff", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "studio-home-libraries.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "studio-home-libraries.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "studio-home-libraries.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@studio-home-libraries.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "studio-home-libraries-png.jpg", + null + ] + }, + "summernote-lite.min.css": { + "contentType": "text/css", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "summernote-lite.min.css", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "summernote-lite.min.css", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@summernote-lite.min.css", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "summernote-lite.min.js": { + "contentType": "text/javascript", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "summernote-lite.min.js", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "summernote-lite.min.js", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@summernote-lite.min.js", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "summernote.eot": { + "contentType": "application/octet-stream", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "summernote.eot", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "summernote.eot", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@summernote.eot", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "summernote.ttf": { + "contentType": "font/ttf", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "summernote.ttf", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "summernote.ttf", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@summernote.ttf", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "summernote.woff": { + "contentType": "application/font-woff", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "summernote.woff", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "summernote.woff", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@summernote.woff", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "summernote.woff2": { + "contentType": "application/octet-stream", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "summernote.woff2", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "summernote.woff2", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@summernote.woff2", + "import_path": null, + "locked": false, + "thumbnail_location": null + }, + "teams_application_screen.webp": { + "contentType": "image/webp", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "teams_application_screen.webp", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "teams_application_screen.webp", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@teams_application_screen.webp", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "teams_application_screen-webp.jpg", + null + ] + }, + "thank_you.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "thank_you.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "thank you.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@thank_you.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "thank_you-png.jpg", + null + ] + }, + "thumbnail_draft.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "thumbnail_draft.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "thumbnail_draft.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@thumbnail_draft.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "thumbnail_draft-png.jpg", + null + ] + }, + "try-it-bg.jpg": { + "contentType": "image/jpeg", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "try-it-bg.jpg", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "try-it-bg.jpg", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@try-it-bg.jpg", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "try-it-bg.jpg", + null + ] + }, + "yellow_sq.png": { + "contentType": "image/png", + "content_son": { + "category": "asset", + "course": "DemoX", + "name": "yellow_sq.png", + "org": "Axim", + "revision": null, + "run": "demo_course", + "tag": "c4x" + }, + "displayname": "yellow_sq.png", + "filename": "asset-v1:Axim+DemoX+demo_course+type@asset+block@yellow_sq.png", + "import_path": null, + "locked": false, + "thumbnail_location": [ + "c4x", + "Axim", + "DemoX", + "thumbnail", + "yellow_sq-png.jpg", + null + ] + } +} \ No newline at end of file diff --git a/demo-course/course/policies/demo_course/grading_policy.json b/demo-course/course/policies/demo_course/grading_policy.json new file mode 100644 index 0000000..cc8485d --- /dev/null +++ b/demo-course/course/policies/demo_course/grading_policy.json @@ -0,0 +1,28 @@ +{ + "GRADER": [ + { + "drop_count": 0, + "min_count": 1, + "short_label": "Basic", + "type": "Basic Assessment Tools", + "weight": 0.3 + }, + { + "drop_count": 0, + "min_count": 1, + "short_label": "Intermediate", + "type": "Intermediate Assessment Tools", + "weight": 0.35 + }, + { + "drop_count": 0, + "min_count": 1, + "short_label": "Advanced", + "type": "Advanced Assessment Tools", + "weight": 0.35 + } + ], + "GRADE_CUTOFFS": { + "Pass": 0.5 + } +} \ No newline at end of file diff --git a/demo-course/course/policies/demo_course/policy.json b/demo-course/course/policies/demo_course/policy.json new file mode 100644 index 0000000..ffdd651 --- /dev/null +++ b/demo-course/course/policies/demo_course/policy.json @@ -0,0 +1,146 @@ +{ + "course/demo_course": { + "advanced_modules": [ + "edx_sga", + "lti", + "scorm", + "library_content", + "annotatable", + "poll", + "survey", + "ubcpi", + "pdf", + "freetextresponse", + "peer_instruction" + ], + "allow_anonymous": true, + "allow_anonymous_to_peers": true, + "cert_html_view_enabled": true, + "course_image": "thumbnail_draft.png", + "discussion_blackouts": [], + "discussion_topics": { + "General": { + "id": "course" + }, + "Off Topic": { + "id": "ef5f389c-6b64-4d67-9b7e-f7d946f7cc7c" + } + }, + "discussions_settings": { + "enable_graded_units": false, + "enable_in_context": true, + "legacy": { + "group_at_subsection": false + }, + "provider_type": "legacy", + "unit_level_visibility": true + }, + "display_name": "Open edX Demo Course", + "enable_subsection_gating": true, + "graceperiod": "", + "instructor_info": { + "instructors": [] + }, + "language": "en", + "learning_info": [], + "lti_passports": [ + "codeboard:codeboard_key_1:codeboard_secret_1234", + "jupyter:811a447706c152588c436ee13addeeb889e7f256033679408737bd5bc4118225:869e9639af7de74929b13ae17ad22e4efb60d9d112143e287589289102e1de00" + ], + "minimum_grade_credit": 0.8, + "self_paced": true, + "start": "2020-01-01T00:00:00Z", + "tabs": [ + { + "course_staff_only": false, + "name": "Home", + "type": "course_info" + }, + { + "course_staff_only": false, + "name": "Course", + "type": "courseware" + }, + { + "course_staff_only": false, + "name": "Textbooks", + "type": "textbooks" + }, + { + "course_staff_only": false, + "name": "Discussion", + "type": "discussion" + }, + { + "course_staff_only": false, + "is_hidden": true, + "name": "Wiki", + "type": "wiki" + }, + { + "course_staff_only": false, + "name": "Progress", + "type": "progress" + }, + { + "course_staff_only": false, + "name": "Dates", + "type": "dates" + }, + { + "course_staff_only": false, + "name": "Teams", + "type": "teams" + } + ], + "teams_configuration": { + "max_team_size": 10, + "topics": [ + { + "description": "A place to join groups that would like to socialize", + "id": "social", + "name": "Social" + }, + { + "description": "A place to join groups that want to organize around specific study topics", + "id": "study", + "name": "Study" + } + ] + }, + "user_partitions": [ + { + "active": true, + "description": "The groups in this configuration can be mapped to cohorts in the Instructor Dashboard.", + "groups": [ + { + "id": 1819362822, + "name": "Content Group A", + "version": 1 + }, + { + "id": 259161138, + "name": "Test", + "version": 1 + }, + { + "id": 205150518, + "name": "Content Group B", + "version": 1 + } + ], + "id": 18587404, + "name": "Content Groups", + "parameters": {}, + "scheme": "cohort", + "version": 3 + } + ], + "xml_attributes": { + "filename": [ + "course/Demo_Course_v2.xml", + "course/Demo_Course_v2.xml" + ] + } + } +} \ No newline at end of file diff --git a/demo-course/course/problem/0135258373e648f2b57a80ae06bade61.xml b/demo-course/course/problem/0135258373e648f2b57a80ae06bade61.xml new file mode 100644 index 0000000..c426f04 --- /dev/null +++ b/demo-course/course/problem/0135258373e648f2b57a80ae06bade61.xml @@ -0,0 +1,36 @@ + + + +There are 3 correct answers. + + Bats are blind + Bats actually have keener eyesight than most humans! + + The Lion King was released closer to the Moon landing than it was to the present day + One of the true facts you're missing makes me feel extremely old. + + Adding salt to water makes it boil faster + Salt doesn't actually make a meaningful difference to anything but the taste! + + Oxford University is older than the Aztec Empire + Oxford University was founded in 1096. + + Pluto has not yet finished a complete orbit of the sun since its discovery in 1930 + Pluto's orbital period is 248 years. + + + +
    +

    Explanation

    + +

    In case you're wondering:

    +
      +
    • The Lion King was released in 1994, 25 years after the Moon landing in 1969. 25 years from 1994 is 2019.
    • +
    • Oxford University was founded in 1096, and the Aztec Empire was founded in 1428.
    • +
    • Pluto's orbital period is 248 years, and it was discovered in 1930. This means it'll finish its first orbit on March 23, 2178.
    • +
    + +
    +
    +
    +
    diff --git a/demo-course/course/problem/0895f1b6c0b329e50b90.xml b/demo-course/course/problem/0895f1b6c0b329e50b90.xml new file mode 100644 index 0000000..f8be12a --- /dev/null +++ b/demo-course/course/problem/0895f1b6c0b329e50b90.xml @@ -0,0 +1,17 @@ + + + + + A. Bronchi + B. Epiglottis + C. Alveoli + D. Diaphragm + + +
    +

    Answer: B. Epiglottis

    +

    The epiglottis is a flap-like structure that covers the entrance to the trachea when swallowing, preventing food and liquids from entering the airway.

    +
    +
    +
    +
    diff --git a/demo-course/course/problem/0d127d7942ec4be7a464eabafb286d02.xml b/demo-course/course/problem/0d127d7942ec4be7a464eabafb286d02.xml new file mode 100644 index 0000000..35f647d --- /dev/null +++ b/demo-course/course/problem/0d127d7942ec4be7a464eabafb286d02.xml @@ -0,0 +1,29 @@ + + + + + + + + + +

    + Many protein sequences, such as the following example, fold to a straight line.You can play around with the protein builder if you're curious. + The protein canvas with R-R-R-R-R-R-R displayed +

    +
      +
    • + Stick: RRRRRRR +
    • +
    +
    +
    diff --git a/demo-course/course/problem/10d6abada29b45df87f3bd9a9af86e72.xml b/demo-course/course/problem/10d6abada29b45df87f3bd9a9af86e72.xml new file mode 100644 index 0000000..73de186 --- /dev/null +++ b/demo-course/course/problem/10d6abada29b45df87f3bd9a9af86e72.xml @@ -0,0 +1,12 @@ + + +

    What country is home to the Great Pyramid of Giza as well as the cities of Cairo and Memphis? Click the country on the map below.

    + + +
    +

    Explanation

    +

    Egypt is home to not only the Pyramids, Cairo, and Memphis, but also the Sphinx and the ancient Royal Library of Alexandria.

    +
    +
    +
    +
    diff --git a/demo-course/course/problem/29fb15ec7b5f462cab0a8216108df8dc.xml b/demo-course/course/problem/29fb15ec7b5f462cab0a8216108df8dc.xml new file mode 100644 index 0000000..f1c9d04 --- /dev/null +++ b/demo-course/course/problem/29fb15ec7b5f462cab0a8216108df8dc.xml @@ -0,0 +1,19 @@ + + + + + What is your analysis of the sonnet so far? + Discuss: + zealous pilgrimage + Where is the speaker going on their pilgrimage? + + + + + + + + +

    The "zealous pilgrimage" upon which the speaker's thoughts embark in line 6 refers to a mental journey, as if his thoughts are capable of traveling physical distance like his body. The speaker is lying in bed thinking, not physically travelling anywhere.

    +
    +
    diff --git a/demo-course/course/problem/330956aa9c304a0a8e944d3caac15494.xml b/demo-course/course/problem/330956aa9c304a0a8e944d3caac15494.xml new file mode 100644 index 0000000..8fe5a00 --- /dev/null +++ b/demo-course/course/problem/330956aa9c304a0a8e944d3caac15494.xml @@ -0,0 +1,12 @@ + + + + + +
    +

    Explanation

    +

    This problem uses extremely simple regex to evaluate answers, so anything with two B's, such as "bubble", "bobble" or "rubble" will be marked as correct (even if it's not a real word).

    +
    +
    +
    +
    diff --git a/demo-course/course/problem/3956d029fa74441cbfca3a97913ccaa8.xml b/demo-course/course/problem/3956d029fa74441cbfca3a97913ccaa8.xml new file mode 100644 index 0000000..c8925c9 --- /dev/null +++ b/demo-course/course/problem/3956d029fa74441cbfca3a97913ccaa8.xml @@ -0,0 +1,10 @@ + + + + + Puffer fish + Jellyfish + Shark + + + diff --git a/demo-course/course/problem/3b8100660f3947c198e0a9b35f7c6cf6.xml b/demo-course/course/problem/3b8100660f3947c198e0a9b35f7c6cf6.xml new file mode 100644 index 0000000..32bb876 --- /dev/null +++ b/demo-course/course/problem/3b8100660f3947c198e0a9b35f7c6cf6.xml @@ -0,0 +1,8 @@ + + + + For demonstration purposes, your answer may be 5 higher or lower than the actual answer. + + + + diff --git a/demo-course/course/problem/3e5a945f54374fc7ababadc080660f2d.xml b/demo-course/course/problem/3e5a945f54374fc7ababadc080660f2d.xml new file mode 100644 index 0000000..5ce5d57 --- /dev/null +++ b/demo-course/course/problem/3e5a945f54374fc7ababadc080660f2d.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/demo-course/course/problem/53083a812536472ba8ea8182ee354363.xml b/demo-course/course/problem/53083a812536472ba8ea8182ee354363.xml new file mode 100644 index 0000000..9c7473c --- /dev/null +++ b/demo-course/course/problem/53083a812536472ba8ea8182ee354363.xml @@ -0,0 +1,81 @@ + + + +
    Sandy dunes in the Sahara Desert +
    + +

    A Trip Across the Sahara

    + +

    You are about to embark upon a 5-day trip across the Sahara desert, a beautiful but harsh and unforgiving expanse. You are bringing a group of your closest friends who were willing to make the trip with you. How many friends will you be bringing? (choose a number between 2 and 5)

    + +

    On your trip, you will be accompanied by three camels that will be able to carry water jugs. Each person on your trip (your friends and yourself) will require 2 gallons of water per day and each camel will require 10 gallons of water per day. If you are preparing for a 5-day trip, how many gallons of water will you need?

    + +

    The three camels will carry all of the water. If you distribute the water evenly, how many gallons will each camel be carrying to start the trip?

    + +

    After day 3, each person drank 6 gallons each. But the camels have only drank 15 gallons each. Now, how many gallons is each camel carrying if they are still carrying equal amounts?

    + + +
    +

    + + + + +

    +
    +

    + + diff --git a/demo-course/course/problem/58f6371c54254596ac91699557af449c.xml b/demo-course/course/problem/58f6371c54254596ac91699557af449c.xml new file mode 100644 index 0000000..5c412e4 --- /dev/null +++ b/demo-course/course/problem/58f6371c54254596ac91699557af449c.xml @@ -0,0 +1,29 @@ + + + +

    The input below is an iframe embedding a resource from a third party location that returns a grade back to the platform. You can use this to build custom JavaScript activities and interactive exercises and allow them to be graded.

    + + +
    diff --git a/demo-course/course/problem/7071a317a0744a37924ef5dea17d47e1.xml b/demo-course/course/problem/7071a317a0744a37924ef5dea17d47e1.xml new file mode 100644 index 0000000..1debd35 --- /dev/null +++ b/demo-course/course/problem/7071a317a0744a37924ef5dea17d47e1.xml @@ -0,0 +1,10 @@ + +

    Text input problems can also be used for short reflective questions that have no "incorrect" answer.

    + + + + + + + +
    diff --git a/demo-course/course/problem/720cac326b684155b4845d32af4aeef0.xml b/demo-course/course/problem/720cac326b684155b4845d32af4aeef0.xml new file mode 100644 index 0000000..586046e --- /dev/null +++ b/demo-course/course/problem/720cac326b684155b4845d32af4aeef0.xml @@ -0,0 +1,22 @@ + +

    Solve the following equation:

    + +

    Let x = $x and y = $y. What is the value of (x + y)?

    + + + + + +
    +

    Explanation

    + +

    x = $x and y = $y. Therefore x + y = $z

    +

    If you reset the problem you can get a new randomly generated set of variables.

    + +
    +
    +
    diff --git a/demo-course/course/problem/73ccaa75b5b6036b48fd.xml b/demo-course/course/problem/73ccaa75b5b6036b48fd.xml new file mode 100644 index 0000000..d1c69a9 --- /dev/null +++ b/demo-course/course/problem/73ccaa75b5b6036b48fd.xml @@ -0,0 +1,17 @@ + + + + + A. Diaphragm + B. Biceps + C. Hamstrings + D. Triceps + + +
    +

    Answer: A. Diaphragm

    +

    The diaphragm contracts during inhalation, increasing the volume of the thoracic cavity and allowing air to be drawn into the lungs.

    +
    +
    +
    +
    diff --git a/demo-course/course/problem/7c95e593b148415e97ac02811c7daf1b.xml b/demo-course/course/problem/7c95e593b148415e97ac02811c7daf1b.xml new file mode 100644 index 0000000..317f74a --- /dev/null +++ b/demo-course/course/problem/7c95e593b148415e97ac02811c7daf1b.xml @@ -0,0 +1,32 @@ + + +

    Step into the shoes of a medical professional as a patient enters your waiting room complaining of stomach pain. Listen carefully to their symptoms to determine the most likely diagnosis.

    + + + +
    diff --git a/demo-course/course/problem/85f3f7f9b72548af880975112f27817c.xml b/demo-course/course/problem/85f3f7f9b72548af880975112f27817c.xml new file mode 100644 index 0000000..fb6a126 --- /dev/null +++ b/demo-course/course/problem/85f3f7f9b72548af880975112f27817c.xml @@ -0,0 +1,72 @@ + +

    For each of the following major scientific discoveries, identify the discoverer and their country of origin.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Scientific DiscoveryScientist Credited with DiscoveryScientist's Country of Origin
    + Theory of Relativity + + + + + + + + +
    + Periodic Table of Elements + + + + + + + + +
    + Law of Universal Gravitation + + + + + + + + +
    + Development of the Polio Vaccine + + + + + + + + +
    +
    diff --git a/demo-course/course/problem/861cd64b013d1addc68f.xml b/demo-course/course/problem/861cd64b013d1addc68f.xml new file mode 100644 index 0000000..110d6f4 --- /dev/null +++ b/demo-course/course/problem/861cd64b013d1addc68f.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/demo-course/course/problem/870b16e640d541af94a308caac834d2e.xml b/demo-course/course/problem/870b16e640d541af94a308caac834d2e.xml new file mode 100644 index 0000000..2cce0f7 --- /dev/null +++ b/demo-course/course/problem/870b16e640d541af94a308caac834d2e.xml @@ -0,0 +1,10 @@ + + + + + Lion + Tiger + Elephant + + + diff --git a/demo-course/course/problem/8a4f31060c1f666f9d75.xml b/demo-course/course/problem/8a4f31060c1f666f9d75.xml new file mode 100644 index 0000000..1b5c972 --- /dev/null +++ b/demo-course/course/problem/8a4f31060c1f666f9d75.xml @@ -0,0 +1,17 @@ + + + + + A. Nostrils + B. Trachea + C. Bronchioles + D. Alveoli + + +
    +

    Answer: A. Nostrils

    +

    Air first enters the respiratory system through the nostrils (or mouth) and then continues down the trachea and into the lungs.

    +
    +
    +
    +
    diff --git a/demo-course/course/problem/9f898b5307d841fcb03f5ee4eb206a9a.xml b/demo-course/course/problem/9f898b5307d841fcb03f5ee4eb206a9a.xml new file mode 100644 index 0000000..4ec2714 --- /dev/null +++ b/demo-course/course/problem/9f898b5307d841fcb03f5ee4eb206a9a.xml @@ -0,0 +1,25 @@ + + +

    Use the quadratic formulaThe first hint of this problem will remind you of the quadratic formula, if you've forgotten. to find the roots of the equation \(x^2 - 3x + 2 = 0\). Input the higher of the two roots in the response box below.

    + + Full marks are given for the highest root. Partial credit is given for the other root. + + +
    + +
    + +

    Explanation:

    +

    + Using the quadratic formula, the roots are found to be \(x = 2\) and \(x = 1\). Thus, the higher value, 2, is the correct answer here. The lower value, 1, would receive partial credit. +

    + +
    +
    + + Recall the quadratic equation: \(x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}\) + For the given equation \(x^2 - 3x + 2 = 0\), a = 1, b = -3, and c = 2. + Using the quadratic formula, one root is \(x = 2\) and the other is \(x = 1\). + + +
    diff --git a/demo-course/course/problem/b1ddf9b3553941cfa55b3cc8a56ab1a0.xml b/demo-course/course/problem/b1ddf9b3553941cfa55b3cc8a56ab1a0.xml new file mode 100644 index 0000000..d954d31 --- /dev/null +++ b/demo-course/course/problem/b1ddf9b3553941cfa55b3cc8a56ab1a0.xml @@ -0,0 +1,11 @@ + + + + + Monarch butterfly + Brown bear + Arctic tern + Giraffe + + + diff --git a/demo-course/course/problem/b20c43dfbd874a729762ab44a1dfc282.xml b/demo-course/course/problem/b20c43dfbd874a729762ab44a1dfc282.xml new file mode 100644 index 0000000..df69c90 --- /dev/null +++ b/demo-course/course/problem/b20c43dfbd874a729762ab44a1dfc282.xml @@ -0,0 +1,23 @@ + + +
    The SS Pendleton sinking into the ocean waters
    +

    The SS Pendleton was a 1950's era tanker. On February 18, while en route from New Orleans to Boston, Pendleton broke in two in a gale south of Cape Cod, Massachusetts. The subsequent rescue of the Pendleton's crew from the stormy waters is considered one of the most daring rescues in the history of the United States Coast Guard.

    + + + 1592 The 1950's era ship did not sink in 1592. With this answered incorrectly, you will not be able to see the conditional subsection next. + + 1952 Correct! Now, move on to the next section to see the hidden content. + + 2052 The 1950's era ship did not sink in the future. With this answered incorrectly, you will not be able to see the conditional subsection next. + + + +
    +

    Explanation

    + +

    Short explanation

    + +
    +
    +
    +
    diff --git a/demo-course/course/problem/c4f36f420bea1c8fb6a8.xml b/demo-course/course/problem/c4f36f420bea1c8fb6a8.xml new file mode 100644 index 0000000..b067b92 --- /dev/null +++ b/demo-course/course/problem/c4f36f420bea1c8fb6a8.xml @@ -0,0 +1,17 @@ + + + + + A. Gas exchange + B. Producing sounds + C. Moving mucus and trapped particles + D. Assisting with the sense of smell + + +
    +

    Answer: C. Moving mucus and trapped particles

    +

    Cilia are tiny hair-like structures that line the airways and move mucus and trapped particles up and out of the respiratory system, helping to keep the airways clear.

    +
    +
    +
    +
    diff --git a/demo-course/course/problem/c89f56c74a3a424dbffb665d4643b42f.xml b/demo-course/course/problem/c89f56c74a3a424dbffb665d4643b42f.xml new file mode 100644 index 0000000..5d627ec --- /dev/null +++ b/demo-course/course/problem/c89f56c74a3a424dbffb665d4643b42f.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/demo-course/course/problem/ced178178f4440e08f15a408ea14cbf1.xml b/demo-course/course/problem/ced178178f4440e08f15a408ea14cbf1.xml new file mode 100644 index 0000000..d9bf1ae --- /dev/null +++ b/demo-course/course/problem/ced178178f4440e08f15a408ea14cbf1.xml @@ -0,0 +1,40 @@ + + + + \(u_x(L/2) = \) + + + +
    +

    Obtaining the displacement at the mid-section \( u_{x}(x = L / 2)\):

    According to the definition of strain,

    + \[ \frac {du_{x}(x)} {dx} = \epsilon_a(x).\] +

    Therefore, we can obtain the displacement field as

    + \[ u_x(x) = u_x(0) + \int_0^x \epsilon_a (x') dx' = u_x(0) + \left[ \frac{\rho \omega^2}{E} \left(\frac{L^2x'}{2} - \frac{(x')^3}{6} + RLx' - \frac{R(x')^2}{2} \right) \right]_0^x\] +

    Since the bar is fixed at x=0, therefore \(u_x(0)=0\). Hence we obtain

    + \[\Rightarrow u_x(x) = \frac{\rho\omega^2}{E} \left( \frac{L^2x}{2} - \frac{x^3}{6} + RLx - \frac{Rx^2}{2} \right).\] +

    The displacement of the bar at \(x=L/2\) is

    + \[u_{x}(L/2) = \frac {\rho\omega^2L^2}{E} \left( \frac {11L}{48} + \frac {3R}{8} \right).\] +
    +
    +
    + + + + \(\delta = \) + + + +
    + \[ \delta = \frac {\rho \omega^2}{E} \left( \frac {L^3} {3} + \frac { RL^2} {2} \right) \] +

    Obtaining the total elongation of the blade \( \delta \):

    +

    The strain field in the bar is

    + \[ \epsilon_a(x) = \frac {\mathcal{N}(x)}{EA} = \frac {\rho \omega^2 \left( \frac {L^2 - x^2}{2} + R\left(L-x\right)\right)}{E}. \] +

    We can now calculate the elongation of the bar as the following.

    + \[ \delta = \int_0^L \epsilon_{a}(x)dx = \int_0^L \frac {\rho \omega^2}{E} \left( \frac {L^2 - x^2}{2} + R\left(L-x\right)\right)dx. \] + \[ \Rightarrow \delta= \left[ \frac { \rho \omega^2}{E} \left( \frac {L^2x}{2} - \frac {x^3}{6} + RLx - \frac {Rx^2}{2} \right)\right]_0^L.\] + \[ \Rightarrow \delta = \frac {\rho \omega^2}{E} \left( \frac {L^3}{2} - \frac{L^3}{6} + RL^2 - \frac {RL^2}{2} \right).\] + \[\Rightarrow \delta= \frac {\rho \omega^2}{E} \left( \frac {L^3}{3} + \frac {RL^2}{2} \right). \] +
    +
    +
    +
    diff --git a/demo-course/course/problem/dc37b89aade5444fbb1ecdaa0d22d180.xml b/demo-course/course/problem/dc37b89aade5444fbb1ecdaa0d22d180.xml new file mode 100644 index 0000000..f8ecbd7 --- /dev/null +++ b/demo-course/course/problem/dc37b89aade5444fbb1ecdaa0d22d180.xml @@ -0,0 +1,102 @@ + + + +

    The following problem statement was originally contained within the 6.002x: Circuits and Electronics course.

    +

    Design a circuit that implements a +3-input logic gate that implements \(Z = \lnot{(C(A+B))}\)

    +

    Please add the appropriate pulldown network of mosfet +switches connected to node Z to implement the truth table above, with +\(R_{ON}\) of the mosfets chosen so that \(V_{ol}\) of the logic gate is less than +\(0.25V\) for any combination of inputs. In the schematic tool, the mosfet +model has \(V_{th} = 0.5V\), so \(V_{ol} \lt 0.25V\) +will ensure that when the output of the logic gate is 0, if it is used +as the input to some other logic gate, the mosfet to which +it connects will be off.

    +

    In the +schematic tool, the mosfet model has \(R_n \approx 26.5k\Omega\) when +using a \(3V\) power supply. To adjust \(R_{ON}\), double click the +mosfet and select an appropriate value for the W/L parameter. For +example, setting a mosfet's W/L to 10 would result in \(R_{ON} = +2.65k\Omega\).

    +

    Note that the "Plot offset" property of the scope probes +on the A, B and C signals has been set so that the plots will not +overlap, making it easier to see what's happening.

    +

    Please do not change the voltages of the voltage sources or the +resistance of the pullup resistor.

    + + +
    + +
    + +# for a schematic response, submission[i] is the json representation +# of the diagram and analysis results for the i-th schematic tag + +def get_tran(json,signal): + for element in json: + if element[0] == 'transient': + return element[1].get(signal,[]) + return [] + +def get_value(at,output): + for (t,v) in output: + if at == t: return v + return None + +output = get_tran(submission[0],'Z') +okay = True + +# output should be 1, 1, 1, 1, 1, 0, 0, 0 +if get_value(0.0000004,output) < 2.7: okay = False; +if get_value(0.0000009,output) < 2.7: okay = False; +if get_value(0.0000014,output) < 2.7: okay = False; +if get_value(0.0000019,output) < 2.7: okay = False; +if get_value(0.0000024,output) < 2.7: okay = False; +if get_value(0.0000029,output) > 0.25: okay = False; +if get_value(0.0000034,output) > 0.25: okay = False; +if get_value(0.0000039,output) > 0.25: okay = False; + +correct = ['correct' if okay else 'incorrect'] + + +
    + +

    When your circuit is ready for testing, run a \(4\mu s\) transient +simulation to verify correct functionality and appropriate \(V_{ol}\) +when the output of the gate is logic 0. To submit, please click +CHECK. The checker will be verifying the voltage of the +output node at several different times, so you'll earn a checkmark +only after you've performed the transient simulation so that +the checker will have a waveform to check!

    +

    When the gate is correctly implemented, the plot produced by the transient +analysis should appear similar to the following figure.

    +
    A plot of voltage over time with four lines of red, green, blue and teal.
    Figure 1. Example plot output +
    +

    Food for thought: You'll notice there are little spikes, +sometimes called glitches, in the output waveform (see the +bottom cyan-colored waveform in Figure 1). These only occur when the +A and B inputs are changing simultaneously and the C input is high. +Can you explain why? Think about what is happening in the pulldown +circuitry at the time the glitches occur.

    + + +
    +

    Explanation:

    +

    We are asked to implement the logic function \( \overline{C\cdot\left(A + B\right)}\). This can be achieved with three transistors, as shown below; a series connection between \(C\) and \(\left(A+B\right)\) to implement the AND function, and a parallel connection between \(A\) and \(B\) to implement the OR function:

    + A completed circuit that generated the required output +

    We are told that \(V_{DD} = 3V\) and that \(R_{n} = 26.5K\Omega\). Furthermore, we +are told that we are to use the switch-resistor model of the MOSFETS, treating +them like resistors with resistances \(R_{ON}\) when they are given a high input. \(R_{ON}\) +has the form \(R_{ON} = 26.5K \cdot \frac{L}{W}\) . We need to determine \(R_{ON}\) by choosing +the ratio \(\frac{L}{W}\) such that \(V_{OL}\) is always \(\lt 0.25V\).

    +

    The first thing to do is to identify the scenario in which \(V_{OUT}\) takes on its maximum possible value in the context of a logical 0. This scenario corresponds to the worst-case \(V_{OL}\). +There must be a full conducting path from \(V_{OUT}\) to ground to have a logical 0, which imposes the first condition. And because \(V_{OUT}\) is in the middle of a voltage divider between \(R_{pullup}\) and the equivalent "on" resistance of the MOS- FETs, we should be able to convince ourselves that \(V_{OL}\) takes on its highest value whenever the equivalent resistance of the "on" MOSFET network is the LARGEST because it is still constrained by an existing conducting path from \(V_{OUT}\) to ground.

    +

    Finding the largest combination of resistances is simple: if we replace "on" transistors with resistors of resistance \(R_{ON}\), and "off" transistors with open circuits, we find the largest combination of resistance comes from a series connection between \(C\) and only one of \(A\) or \(B\), but NOT both. This results in an equivalent resistance of \(R_{EQ}=2\cdot R_{ON}\).

    +

    We now solve for REQ using the voltage divider forumla: +\[\frac{V_{DD}\cdot R_{EQ}}{R_{pullup} +R_{EQ}} \lt 0.25 \\ \]

    +

    Plugging in for our values, we end up with \(R_{ON} \lt 454.56\) as our constraint. +Plugging in once more into the given form of \(R_{ON}\), we end up with our final constraint on the transistor sizing: +\[\frac{W}{L} \gt 58.3\\ \]

    +
    +
    +
    diff --git a/demo-course/course/problem/eb57b81093d048df975c957d005b1f74.xml b/demo-course/course/problem/eb57b81093d048df975c957d005b1f74.xml new file mode 100644 index 0000000..dc51667 --- /dev/null +++ b/demo-course/course/problem/eb57b81093d048df975c957d005b1f74.xml @@ -0,0 +1,36 @@ + + + + return { 'overall_message': overall_message, + 'input_list': [ + { 'ok': friends_answer, 'msg': friends_message, 'grade_decimal': friends_grade}, + { 'ok': total_gallons_answer, 'grade_decimal': total_gallons_grade }, + { 'ok': gallons_camel_day1_answer, 'grade_decimal': gallons_camel_day1_grade }, + { 'ok': gallons_camel_day3_answer, 'grade_decimal': gallons_camel_day3_grade }, + ] + } + +

    Write an SQL query to select all products where the price is greater than 20.

    +

    In this case, products is in the table called "products" and price is in a column titled "price".

    + + + + + Don't forget the semi-colon (;) at the end. Select * from ______ where ______ > _______; + +
    diff --git a/demo-course/course/problem/ef8c3814d2ce47c6927a8310bba4b849.xml b/demo-course/course/problem/ef8c3814d2ce47c6927a8310bba4b849.xml new file mode 100644 index 0000000..32e53de --- /dev/null +++ b/demo-course/course/problem/ef8c3814d2ce47c6927a8310bba4b849.xml @@ -0,0 +1,26 @@ + + +

    An abacus with two beads pushed up in the last column, 1 bead in the 2nd to last, and one bead pushed down on the top right.

    + + + 3 + 8 + 12 + 16 + 17 + + +
    +

    Explanation

    + +

    The last column represents 7 (5 + 1 + 1). The second to last column represents 10. For a total of 17

    +

    An abacus with 5, 1, and 1 highlighted in the last column. 10 highlighted in the second to last column. For a total of 17

    + +
    +
    +
    + + The "top row" represents the number 5. + The furthest right row represents single digits. The second to furthest right represents 10's place. + +
    diff --git a/demo-course/course/problem/fa55e7ce7a529c3aadf2.xml b/demo-course/course/problem/fa55e7ce7a529c3aadf2.xml new file mode 100644 index 0000000..2f48e45 --- /dev/null +++ b/demo-course/course/problem/fa55e7ce7a529c3aadf2.xml @@ -0,0 +1,17 @@ + + + + + A. Producing mucus + B. Vocalization + C. Gas exchange + D. Humidifying incoming air + + +
    +

    Answer: C. Gas exchange

    +

    The alveoli are tiny sacs in the lungs where oxygen is exchanged for carbon dioxide in the blood.

    +
    +
    +
    +
    diff --git a/demo-course/course/sequential/0ce96364b5b144db9a94c969fba59f09.xml b/demo-course/course/sequential/0ce96364b5b144db9a94c969fba59f09.xml new file mode 100644 index 0000000..3a1596d --- /dev/null +++ b/demo-course/course/sequential/0ce96364b5b144db9a94c969fba59f09.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/demo-course/course/sequential/238baaf16b3c4157ad0c01701cf57e25.xml b/demo-course/course/sequential/238baaf16b3c4157ad0c01701cf57e25.xml new file mode 100644 index 0000000..dabc38e --- /dev/null +++ b/demo-course/course/sequential/238baaf16b3c4157ad0c01701cf57e25.xml @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/sequential/276a277f5a784f53a7525e28b96e9a1b.xml b/demo-course/course/sequential/276a277f5a784f53a7525e28b96e9a1b.xml new file mode 100644 index 0000000..4189dd1 --- /dev/null +++ b/demo-course/course/sequential/276a277f5a784f53a7525e28b96e9a1b.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/demo-course/course/sequential/462452ab42084a4ab4a2039d46deb509.xml b/demo-course/course/sequential/462452ab42084a4ab4a2039d46deb509.xml new file mode 100644 index 0000000..bb29f6a --- /dev/null +++ b/demo-course/course/sequential/462452ab42084a4ab4a2039d46deb509.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/demo-course/course/sequential/4e1de5e13fc3422997fe246b40a43aa1.xml b/demo-course/course/sequential/4e1de5e13fc3422997fe246b40a43aa1.xml new file mode 100644 index 0000000..b5bd51e --- /dev/null +++ b/demo-course/course/sequential/4e1de5e13fc3422997fe246b40a43aa1.xml @@ -0,0 +1,4 @@ + + + + diff --git a/demo-course/course/sequential/5aecf320a7dd4866bdd768cbef9d2131.xml b/demo-course/course/sequential/5aecf320a7dd4866bdd768cbef9d2131.xml new file mode 100644 index 0000000..8e3d66b --- /dev/null +++ b/demo-course/course/sequential/5aecf320a7dd4866bdd768cbef9d2131.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/demo-course/course/sequential/606ee7182eb54bf797d0697c1c4abd23.xml b/demo-course/course/sequential/606ee7182eb54bf797d0697c1c4abd23.xml new file mode 100644 index 0000000..b0514b7 --- /dev/null +++ b/demo-course/course/sequential/606ee7182eb54bf797d0697c1c4abd23.xml @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/sequential/6ba8902b2179452dad8a55e342882fd3.xml b/demo-course/course/sequential/6ba8902b2179452dad8a55e342882fd3.xml new file mode 100644 index 0000000..fbe0422 --- /dev/null +++ b/demo-course/course/sequential/6ba8902b2179452dad8a55e342882fd3.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/demo-course/course/sequential/747014a9a0aa42d683b2b05ee2c6f72e.xml b/demo-course/course/sequential/747014a9a0aa42d683b2b05ee2c6f72e.xml new file mode 100644 index 0000000..e9c82ec --- /dev/null +++ b/demo-course/course/sequential/747014a9a0aa42d683b2b05ee2c6f72e.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/demo-course/course/sequential/8d709659aba644edac0da66cd322ba7c.xml b/demo-course/course/sequential/8d709659aba644edac0da66cd322ba7c.xml new file mode 100644 index 0000000..68557f5 --- /dev/null +++ b/demo-course/course/sequential/8d709659aba644edac0da66cd322ba7c.xml @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/sequential/971737e543204551bb34c4ca44e12b86.xml b/demo-course/course/sequential/971737e543204551bb34c4ca44e12b86.xml new file mode 100644 index 0000000..d784ba0 --- /dev/null +++ b/demo-course/course/sequential/971737e543204551bb34c4ca44e12b86.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/demo-course/course/sequential/c0b796e411ff423cb1b56ccd927d7e6d.xml b/demo-course/course/sequential/c0b796e411ff423cb1b56ccd927d7e6d.xml new file mode 100644 index 0000000..f675432 --- /dev/null +++ b/demo-course/course/sequential/c0b796e411ff423cb1b56ccd927d7e6d.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/demo-course/course/sequential/e2206f6f2cd449ab85a7aa424fd0fb72.xml b/demo-course/course/sequential/e2206f6f2cd449ab85a7aa424fd0fb72.xml new file mode 100644 index 0000000..f9ff018 --- /dev/null +++ b/demo-course/course/sequential/e2206f6f2cd449ab85a7aa424fd0fb72.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/demo-course/course/sequential/e25d8eac15224f91bd3aa22bfe28a602.xml b/demo-course/course/sequential/e25d8eac15224f91bd3aa22bfe28a602.xml new file mode 100644 index 0000000..6d6c367 --- /dev/null +++ b/demo-course/course/sequential/e25d8eac15224f91bd3aa22bfe28a602.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/demo-course/course/sequential/f5ac527b7c4c4684a5df6da5aa6f8a7b.xml b/demo-course/course/sequential/f5ac527b7c4c4684a5df6da5aa6f8a7b.xml new file mode 100644 index 0000000..6d2e40a --- /dev/null +++ b/demo-course/course/sequential/f5ac527b7c4c4684a5df6da5aa6f8a7b.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/demo-course/course/sequential/f5c59ce5928f42f4af485e187a93963e.xml b/demo-course/course/sequential/f5c59ce5928f42f4af485e187a93963e.xml new file mode 100644 index 0000000..0d77720 --- /dev/null +++ b/demo-course/course/sequential/f5c59ce5928f42f4af485e187a93963e.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/demo-course/course/sequential/f80c166b31da4a129f2d23f9fe8bb97b.xml b/demo-course/course/sequential/f80c166b31da4a129f2d23f9fe8bb97b.xml new file mode 100644 index 0000000..55325d1 --- /dev/null +++ b/demo-course/course/sequential/f80c166b31da4a129f2d23f9fe8bb97b.xml @@ -0,0 +1,3 @@ + + + diff --git a/demo-course/course/static/10840580-cf26-4aeb-8076-7cacf5eaf5ae-en.srt b/demo-course/course/static/10840580-cf26-4aeb-8076-7cacf5eaf5ae-en.srt new file mode 100644 index 0000000..95eb879 --- /dev/null +++ b/demo-course/course/static/10840580-cf26-4aeb-8076-7cacf5eaf5ae-en.srt @@ -0,0 +1,72 @@ +0 +00:00:00,000 --> 00:00:04,500 +Voiceover: Meet the system that is behind the revolution of digital learning. + +1 +00:00:04,573 --> 00:00:11,821 +The Open edX platform is an innovative, robust, scalable, and learner-centred + +2 +00:00:12,021 --> 00:00:16,661 +web-based platform trusted by premier institutions throughout the world. + +3 +00:00:16,800 --> 00:00:21,128 +It is developed in collaboration with top universities, technology partners, + +4 +00:00:21,129 --> 00:00:23,729 +learning communities, and research centres. + +5 +00:00:24,114 --> 00:00:28,436 +It can be used on any cloud infrastructure, or your own servers + +6 +00:00:28,437 --> 00:00:31,386 +to support any number of learners you want. + +7 +00:00:31,586 --> 00:00:35,520 +It is a category-defining, unified learning platform + +8 +00:00:35,521 --> 00:00:38,457 +that can support degree programs, online campuses, + +9 +00:00:38,458 --> 00:00:42,329 +and instructor- and self-paced courses. + +10 +00:00:42,529 --> 00:00:46,000 +The Open edX Platform's innovative and flexible architecture + +11 +00:00:46,001 --> 00:00:50,512 +enables you to create your own highly-customized learner + +12 +00:00:50,513 --> 00:00:53,814 +experiences quickly and cost-effectively. + +13 +00:00:54,043 --> 00:00:58,371 +It provides a seamless learner experience on all platforms + +14 +00:00:58,372 --> 00:01:02,943 +and extensive data and analytics in near real-time. + +15 +00:01:02,944 --> 00:01:07,900 +It includes an integrated authoring tool, Studio, for content development. + +16 +00:01:08,043 --> 00:01:12,643 +And you are part of a comprehensive ecosystem once you start using it. + +17 +00:01:12,644 --> 00:01:21,850 +Open edX, e-learning on any scale, any content, any course, any device. + diff --git a/demo-course/course/static/29425bc9-05c6-48fd-8232-c795ddf4e193-en.srt b/demo-course/course/static/29425bc9-05c6-48fd-8232-c795ddf4e193-en.srt new file mode 100644 index 0000000..a9dd614 --- /dev/null +++ b/demo-course/course/static/29425bc9-05c6-48fd-8232-c795ddf4e193-en.srt @@ -0,0 +1,56 @@ +0 +00:00:00,000 --> 00:00:09,240 +Open edX® is a software. Specifically, it's  a learning management software which means that   + +1 +00:00:09,240 --> 00:00:14,560 +it can be used to create and deploy learning  experiences. The Open edX® platform is also an   + +2 +00:00:14,560 --> 00:00:20,040 +open source software which means that anyone  can use, modify or distribute the Open edX® code   + +3 +00:00:20,040 --> 00:00:25,600 +for free. Axim Collaborative is an education  focused non-profit organization that invests   + +4 +00:00:25,600 --> 00:00:31,480 +in partnerships in digital technologies. Together  with a committee of community members Axim provides   + +5 +00:00:31,480 --> 00:00:36,440 +stewardship for the Open edX® software and the  community supporting it. Thousands of academic   + +6 +00:00:36,440 --> 00:00:43,000 +institutions, companies, NGO's and individuals are  utilizing the Open edX® platform to create and   + +7 +00:00:43,000 --> 00:00:48,880 +deliver learning experiences to their learners. The largest deployment of the Open edX® platform   + +8 +00:00:48,880 --> 00:00:56,800 +is edX.org. edX.org was founded in 2012 and it was  the original developer of the Open edX® software   + +9 +00:00:56,800 --> 00:01:03,520 +which it released as open source in 2013. Today  edX.org operates with a select group of partners   + +10 +00:01:03,520 --> 00:01:09,080 +to create MOOCs and other high quality learning  experiences for their platform. Only edX partners   + +11 +00:01:09,080 --> 00:01:14,160 +can create courses on edX.org. So, regardless  of whether you're an individual running a  . + +12 +00:01:14,160 --> 00:01:20,800 +blended classroom experience for 30 users or an  edX.org partner offering a MOOC to 30,000 Learners   + +13 +00:01:20,800 --> 00:01:28,834 +you are both running on the same underlying  Open edX® software to deliver your learning experiences. + diff --git a/demo-course/course/static/48c991fb-083c-45e1-adad-930d2b11b11e-en.srt b/demo-course/course/static/48c991fb-083c-45e1-adad-930d2b11b11e-en.srt new file mode 100644 index 0000000..b34ef6c --- /dev/null +++ b/demo-course/course/static/48c991fb-083c-45e1-adad-930d2b11b11e-en.srt @@ -0,0 +1,5220 @@ +0 +00:00:01,199 --> 00:00:04,380 +um next up we're going to be hearing + +1 +00:00:02,520 --> 00:00:06,240 +about the state of open edx from Ed + +2 +00:00:04,380 --> 00:00:08,519 +xericore and Jenna mikowski from the + +3 +00:00:06,240 --> 00:00:09,840 +Center for reimagining Learning that is + +4 +00:00:08,519 --> 00:00:11,519 +the vice president of engineering for + +5 +00:00:09,840 --> 00:00:13,080 +the open edx project and the chair of + +6 +00:00:11,519 --> 00:00:15,000 +the openatix technical oversight + +7 +00:00:13,080 --> 00:00:17,039 +committee Jenna is the senior project + +8 +00:00:15,000 --> 00:00:19,320 +manager for the open addicts project and + +9 +00:00:17,039 --> 00:00:21,300 +lead of the open edit product open edx + +10 +00:00:19,320 --> 00:00:25,250 +product working group and they will also + +11 +00:00:21,300 --> 00:00:32,079 +be joined by a special guest Ed + +12 +00:00:25,250 --> 00:00:32,079 +[Applause] + +13 +00:00:32,880 --> 00:00:36,899 +thanks everyone can you hear me okay + +14 +00:00:34,980 --> 00:00:37,860 +yep all right + +15 +00:00:36,899 --> 00:00:40,620 +um + +16 +00:00:37,860 --> 00:00:42,980 +welcome to open edx and welcome to the + +17 +00:00:40,620 --> 00:00:45,840 +state of open edx talk + +18 +00:00:42,980 --> 00:00:48,420 +it's always super energizing for me to + +19 +00:00:45,840 --> 00:00:49,860 +look out into the the crowd and see so + +20 +00:00:48,420 --> 00:00:51,559 +many familiar faces people that have + +21 +00:00:49,860 --> 00:00:53,719 +been working on this project + +22 +00:00:51,559 --> 00:00:57,059 +for so many years + +23 +00:00:53,719 --> 00:00:58,440 +really enjoy this event and it keeps me + +24 +00:00:57,059 --> 00:01:00,079 +going for the remainder of the year + +25 +00:00:58,440 --> 00:01:02,699 +every year we're able to meet in person + +26 +00:01:00,079 --> 00:01:04,379 +so I'm glad we're past the Cova times + +27 +00:01:02,699 --> 00:01:05,880 +and we're here together again for the + +28 +00:01:04,379 --> 00:01:07,799 +second year in a row + +29 +00:01:05,880 --> 00:01:10,260 +I wanted to briefly mention some + +30 +00:01:07,799 --> 00:01:12,720 +housekeeping stuff if you're posting if + +31 +00:01:10,260 --> 00:01:15,360 +you're tweeting to Twitter at all uh we + +32 +00:01:12,720 --> 00:01:19,040 +have a hashtag for conference materials + +33 +00:01:15,360 --> 00:01:22,259 +so please use the open edx 2023 hashtag + +34 +00:01:19,040 --> 00:01:24,240 +and if you have any questions or content + +35 +00:01:22,259 --> 00:01:26,400 +that you want to post for folks at the + +36 +00:01:24,240 --> 00:01:28,200 +conference please use the events channel + +37 +00:01:26,400 --> 00:01:30,720 +in the open edx Slack if you're not + +38 +00:01:28,200 --> 00:01:34,400 +registered you can follow that bitly + +39 +00:01:30,720 --> 00:01:34,400 +link to get yourself registered + +40 +00:01:34,500 --> 00:01:39,860 +and I wanted to start by you know a + +41 +00:01:37,740 --> 00:01:43,740 +really appreciated Cheryl's presentation + +42 +00:01:39,860 --> 00:01:46,619 +but wanted to start by thanking MIT open + +43 +00:01:43,740 --> 00:01:48,119 +learning their generous support in + +44 +00:01:46,619 --> 00:01:50,280 +sponsoring us and letting us use the + +45 +00:01:48,119 --> 00:01:51,259 +space at MIT has made this conference + +46 +00:01:50,280 --> 00:01:53,340 +possible + +47 +00:01:51,259 --> 00:01:55,619 +you know as she said we're in one of the + +48 +00:01:53,340 --> 00:01:58,500 +most iconic classrooms in all of MIT + +49 +00:01:55,619 --> 00:02:01,259 +which doesn't Inspire the least bit of + +50 +00:01:58,500 --> 00:02:03,180 +imposter syndrome at all + +51 +00:02:01,259 --> 00:02:05,939 +um but let's give another round of a + +52 +00:02:03,180 --> 00:02:08,299 +round of applause to the MIT folks for + +53 +00:02:05,939 --> 00:02:08,299 +hosting us + +54 +00:02:08,538 --> 00:02:15,459 +[Applause] + +55 +00:02:15,540 --> 00:02:21,000 +um and I'm especially grateful to be at + +56 +00:02:18,180 --> 00:02:22,620 +MIT this year and to be hosting part of + +57 +00:02:21,000 --> 00:02:25,379 +our conference in the stata center + +58 +00:02:22,620 --> 00:02:27,720 +because it is literally where the open + +59 +00:02:25,379 --> 00:02:30,060 +edx project began I mentioned this in + +60 +00:02:27,720 --> 00:02:33,000 +the welcome letter in the program but + +61 +00:02:30,060 --> 00:02:34,680 +the first lines of code that uh that + +62 +00:02:33,000 --> 00:02:38,099 +were written that are now the platform + +63 +00:02:34,680 --> 00:02:40,319 +that we all work on and use today were + +64 +00:02:38,099 --> 00:02:43,860 +written in a small room in the third + +65 +00:02:40,319 --> 00:02:45,959 +floor of status Center in 2011. uh + +66 +00:02:43,860 --> 00:02:47,879 +clarify that I was not involved in 2011 + +67 +00:02:45,959 --> 00:02:49,560 +I came later in the project but we + +68 +00:02:47,879 --> 00:02:52,680 +actually have an engineer who works on + +69 +00:02:49,560 --> 00:02:54,480 +tcrill today who was amongst those first + +70 +00:02:52,680 --> 00:02:56,700 +three Engineers cramped into the third + +71 +00:02:54,480 --> 00:02:58,800 +floor of stata Center uh writing the + +72 +00:02:56,700 --> 00:03:01,019 +platform and so it feels really + +73 +00:02:58,800 --> 00:03:04,260 +important to be back at MIT in stata + +74 +00:03:01,019 --> 00:03:06,480 +this year as we are launching or + +75 +00:03:04,260 --> 00:03:09,420 +continuing our journey as an open source + +76 +00:03:06,480 --> 00:03:12,300 +project and trying to become the + +77 +00:03:09,420 --> 00:03:14,840 +inclusive duocacy that we aspire to be + +78 +00:03:12,300 --> 00:03:14,840 +as a project + +79 +00:03:15,480 --> 00:03:21,239 +and I want to thank our sponsors as well + +80 +00:03:18,680 --> 00:03:25,879 +our first sponsor our Cornerstone + +81 +00:03:21,239 --> 00:03:25,879 +sponsor is a university technology + +82 +00:03:27,319 --> 00:03:33,360 +UTech is an organization from Uruguay + +83 +00:03:30,420 --> 00:03:35,459 +that concentrates on providing + +84 +00:03:33,360 --> 00:03:38,519 +educational opportunities to college + +85 +00:03:35,459 --> 00:03:40,860 +students outside of the urban areas they + +86 +00:03:38,519 --> 00:03:44,340 +serve students in all 19 provinces of + +87 +00:03:40,860 --> 00:03:46,860 +Uruguay and and the majority of their + +88 +00:03:44,340 --> 00:03:49,019 +students are the first the first student + +89 +00:03:46,860 --> 00:03:50,159 +to attend University and their family so + +90 +00:03:49,019 --> 00:03:53,340 +it's a really really great Mission + +91 +00:03:50,159 --> 00:03:55,140 +they've been using openedx since 2014. + +92 +00:03:53,340 --> 00:03:58,340 +we're glad to have them here and we + +93 +00:03:55,140 --> 00:03:58,340 +really appreciate their sponsorship + +94 +00:04:02,780 --> 00:04:08,099 +and our Premier sponsor is edley also + +95 +00:04:06,659 --> 00:04:10,200 +long-standing members of the community + +96 +00:04:08,099 --> 00:04:14,220 +they've been contributors to the open + +97 +00:04:10,200 --> 00:04:16,680 +edx project since 2013. they provide a + +98 +00:04:14,220 --> 00:04:20,100 +wide range of services related to the to + +99 +00:04:16,680 --> 00:04:22,199 +the platform Ed Lee UTech and the rest + +100 +00:04:20,100 --> 00:04:24,360 +of our sponsors have tables in the + +101 +00:04:22,199 --> 00:04:26,460 +sponsor Hall I encourage you to stop by + +102 +00:04:24,360 --> 00:04:30,860 +and speak with them and understand what + +103 +00:04:26,460 --> 00:04:30,860 +they're doing so thanks to edley as well + +104 +00:04:34,320 --> 00:04:38,160 +so let's get into the meat of the + +105 +00:04:36,060 --> 00:04:40,680 +presentation and review the state of + +106 +00:04:38,160 --> 00:04:43,520 +open edx and this presentation is going + +107 +00:04:40,680 --> 00:04:46,259 +to be broken down into three segments + +108 +00:04:43,520 --> 00:04:47,240 +I'm going to talk about the present of + +109 +00:04:46,259 --> 00:04:49,560 +the project + +110 +00:04:47,240 --> 00:04:51,600 +Jenna Makowski is going to come up and + +111 +00:04:49,560 --> 00:04:53,699 +talk about product management for the + +112 +00:04:51,600 --> 00:04:56,280 +open source project and kind of the + +113 +00:04:53,699 --> 00:04:58,020 +future Direction and priorities and then + +114 +00:04:56,280 --> 00:05:01,440 +finally we're going to be joined by + +115 +00:04:58,020 --> 00:05:03,000 +Adrian devison of Empower Empower is a + +116 +00:05:01,440 --> 00:05:04,620 +user of open edx and member of the + +117 +00:05:03,000 --> 00:05:06,660 +community it's doing some really amazing + +118 +00:05:04,620 --> 00:05:08,639 +work and we'll learn more about the + +119 +00:05:06,660 --> 00:05:12,380 +Empower organization and the project + +120 +00:05:08,639 --> 00:05:12,380 +that that they are working on + +121 +00:05:12,900 --> 00:05:17,580 +um so let's start with the present I'm + +122 +00:05:15,060 --> 00:05:19,440 +going to talk about uh three + +123 +00:05:17,580 --> 00:05:21,660 +three main things here + +124 +00:05:19,440 --> 00:05:23,940 +um I want to review the open edx vision + +125 +00:05:21,660 --> 00:05:25,440 +statement that was developed by the + +126 +00:05:23,940 --> 00:05:27,120 +product working group in the fall and + +127 +00:05:25,440 --> 00:05:30,840 +reviewed by the technical oversight + +128 +00:05:27,120 --> 00:05:33,360 +Committee of the project in December + +129 +00:05:30,840 --> 00:05:35,880 +I want to review the reach of the + +130 +00:05:33,360 --> 00:05:38,759 +platform we'll talk a little bit about + +131 +00:05:35,880 --> 00:05:40,680 +some metrics about how many instances of + +132 +00:05:38,759 --> 00:05:42,660 +the platform exist how many users have + +133 +00:05:40,680 --> 00:05:46,259 +been learning on it how many degrees + +134 +00:05:42,660 --> 00:05:48,479 +have been issued + +135 +00:05:46,259 --> 00:05:50,520 +and finally we'll look at Community + +136 +00:05:48,479 --> 00:05:52,500 +Health some key metrics that help us + +137 +00:05:50,520 --> 00:05:55,740 +understand how healthy we are as a + +138 +00:05:52,500 --> 00:05:58,500 +community because our community is the + +139 +00:05:55,740 --> 00:06:02,400 +the engine that advances the open edx + +140 +00:05:58,500 --> 00:06:04,620 +platform really okay that advances the + +141 +00:06:02,400 --> 00:06:06,780 +open edx platform so we need to keep a + +142 +00:06:04,620 --> 00:06:09,539 +close eye on our help + +143 +00:06:06,780 --> 00:06:11,280 +and also I can I can see from the timing + +144 +00:06:09,539 --> 00:06:13,199 +cards that reviewing the recently + +145 +00:06:11,280 --> 00:06:15,180 +shipped features is probably going to + +146 +00:06:13,199 --> 00:06:18,360 +get skipped over but Jenna is going to + +147 +00:06:15,180 --> 00:06:20,520 +give us a tour of how you can track that + +148 +00:06:18,360 --> 00:06:22,319 +continuously in real time when she gets + +149 +00:06:20,520 --> 00:06:26,120 +into this segment about the product the + +150 +00:06:22,319 --> 00:06:26,120 +how-to for the product roadmap + +151 +00:06:27,240 --> 00:06:31,500 +all right so let's start with the vision + +152 +00:06:29,280 --> 00:06:33,479 +statement this was developed by a + +153 +00:06:31,500 --> 00:06:36,900 +segment of the product working group who + +154 +00:06:33,479 --> 00:06:40,919 +conducted interviews surveys and worked + +155 +00:06:36,900 --> 00:06:43,919 +with the community to try to compose a + +156 +00:06:40,919 --> 00:06:46,979 +mission based on everything that we + +157 +00:06:43,919 --> 00:06:48,780 +valued and and I'll present that today + +158 +00:06:46,979 --> 00:06:50,039 +this has been presented in other forums + +159 +00:06:48,780 --> 00:06:52,440 +you may have seen it but if you haven't + +160 +00:06:50,039 --> 00:06:54,360 +we'll talk it through today + +161 +00:06:52,440 --> 00:06:55,979 +um so the vision statement as they + +162 +00:06:54,360 --> 00:06:59,100 +defined it was that we're leveraging + +163 +00:06:55,979 --> 00:07:01,800 +open source to democratize education and + +164 +00:06:59,100 --> 00:07:03,300 +power advances in learning + +165 +00:07:01,800 --> 00:07:05,100 +and let's + +166 +00:07:03,300 --> 00:07:07,580 +let's kind of break that down a little + +167 +00:07:05,100 --> 00:07:07,580 +bit all right + +168 +00:07:09,600 --> 00:07:13,080 +all right the first part of it is about + +169 +00:07:11,220 --> 00:07:14,580 +how we do it and I don't think this is + +170 +00:07:13,080 --> 00:07:16,220 +controversial we're an open source + +171 +00:07:14,580 --> 00:07:20,039 +project we're an open source Community + +172 +00:07:16,220 --> 00:07:23,759 +we believe that communities that have + +173 +00:07:20,039 --> 00:07:24,900 +shared values and have a shared uh kind + +174 +00:07:23,759 --> 00:07:27,240 +of + +175 +00:07:24,900 --> 00:07:28,680 +requirements for the platform when they + +176 +00:07:27,240 --> 00:07:31,740 +collaborate in the open and create open + +177 +00:07:28,680 --> 00:07:33,900 +source software create powerful Dynamics + +178 +00:07:31,740 --> 00:07:35,580 +and + +179 +00:07:33,900 --> 00:07:37,319 +so leveraging open source is pretty + +180 +00:07:35,580 --> 00:07:39,720 +obvious to us + +181 +00:07:37,319 --> 00:07:41,340 +the next two parts of it are really what + +182 +00:07:39,720 --> 00:07:43,580 +we aspire to do + +183 +00:07:41,340 --> 00:07:45,960 +the first is to democratize education + +184 +00:07:43,580 --> 00:07:48,900 +and we'll dig into this a little bit + +185 +00:07:45,960 --> 00:07:50,580 +more in the next slides because we want + +186 +00:07:48,900 --> 00:07:52,259 +this to be more than just pretty words + +187 +00:07:50,580 --> 00:07:54,479 +we want this to be something that helps + +188 +00:07:52,259 --> 00:07:56,099 +us frame our priorities and Inspire us + +189 +00:07:54,479 --> 00:07:58,800 +as we move forward + +190 +00:07:56,099 --> 00:08:01,620 +and the second part of the what is power + +191 +00:07:58,800 --> 00:08:04,080 +advances in learning and this has been a + +192 +00:08:01,620 --> 00:08:06,060 +part of the mission of edx and open edx + +193 +00:08:04,080 --> 00:08:08,819 +since very early it was framed + +194 +00:08:06,060 --> 00:08:11,039 +originally as improved in educa + +195 +00:08:08,819 --> 00:08:12,900 +improving education online and on campus + +196 +00:08:11,039 --> 00:08:14,400 +and it continues to be an important part + +197 +00:08:12,900 --> 00:08:16,919 +of our mission but maybe a place where + +198 +00:08:14,400 --> 00:08:18,360 +we stand to improve a little bit + +199 +00:08:16,919 --> 00:08:21,199 +all right so let's start with + +200 +00:08:18,360 --> 00:08:24,180 +democratizing education + +201 +00:08:21,199 --> 00:08:26,639 +for me democratizing education boils + +202 +00:08:24,180 --> 00:08:29,039 +down into two key things that we want to + +203 +00:08:26,639 --> 00:08:30,780 +achieve one is improving access to + +204 +00:08:29,039 --> 00:08:33,320 +educational opportunities of high + +205 +00:08:30,780 --> 00:08:35,700 +quality for students all over the world + +206 +00:08:33,320 --> 00:08:38,459 +and remove impediments to those + +207 +00:08:35,700 --> 00:08:41,700 +opportunities whenever we can technology + +208 +00:08:38,458 --> 00:08:44,339 +is you know an enabling tool to help us + +209 +00:08:41,700 --> 00:08:48,300 +do that but it is not necessary and + +210 +00:08:44,339 --> 00:08:51,060 +sufficient it requires uh you know that + +211 +00:08:48,300 --> 00:08:53,160 +it requires also the organizations that + +212 +00:08:51,060 --> 00:08:55,680 +produce the content to make it available + +213 +00:08:53,160 --> 00:08:58,140 +to students and a commitment to to + +214 +00:08:55,680 --> 00:09:00,120 +knocking down barriers to access + +215 +00:08:58,140 --> 00:09:01,860 +and the second part of it is kind of + +216 +00:09:00,120 --> 00:09:02,519 +impact so + +217 +00:09:01,860 --> 00:09:04,920 +um + +218 +00:09:02,519 --> 00:09:07,380 +the platform itself as software can't + +219 +00:09:04,920 --> 00:09:08,820 +guarantee impact in the lives of our + +220 +00:09:07,380 --> 00:09:11,640 +learners but ultimately that's what + +221 +00:09:08,820 --> 00:09:14,880 +we're aspiring to do so we need to have + +222 +00:09:11,640 --> 00:09:17,519 +a platform that can deliver the highest + +223 +00:09:14,880 --> 00:09:19,560 +quality educational opportunities and we + +224 +00:09:17,519 --> 00:09:20,519 +need a way to measure the efficacy of + +225 +00:09:19,560 --> 00:09:22,980 +the different + +226 +00:09:20,519 --> 00:09:26,700 +things that the platform does and to + +227 +00:09:22,980 --> 00:09:29,480 +prioritize adding advancing the platform + +228 +00:09:26,700 --> 00:09:29,480 +in that respect + +229 +00:09:29,760 --> 00:09:33,540 +all right and then let's talk a little + +230 +00:09:31,920 --> 00:09:35,040 +bit about what driving advances in + +231 +00:09:33,540 --> 00:09:36,959 +learning could look like I think this is + +232 +00:09:35,040 --> 00:09:38,580 +again the vision statement is + +233 +00:09:36,959 --> 00:09:39,779 +aspirational we don't claim that these + +234 +00:09:38,580 --> 00:09:42,120 +are things that we've already achieved + +235 +00:09:39,779 --> 00:09:43,920 +these are things that we want to achieve + +236 +00:09:42,120 --> 00:09:45,899 +as a community + +237 +00:09:43,920 --> 00:09:47,459 +all right so we obviously have the open + +238 +00:09:45,899 --> 00:09:50,399 +edx platform we're all familiar with + +239 +00:09:47,459 --> 00:09:52,560 +that the platform has some some key + +240 +00:09:50,399 --> 00:09:55,260 +features in it today that really enable + +241 +00:09:52,560 --> 00:09:57,959 +experimentation and Innovation extension + +242 +00:09:55,260 --> 00:10:01,500 +points like Xbox things like a b testing + +243 +00:09:57,959 --> 00:10:04,560 +cohorts that are really powerful ways of + +244 +00:10:01,500 --> 00:10:07,260 +of conducting tests within online + +245 +00:10:04,560 --> 00:10:09,899 +courses and as students interact with + +246 +00:10:07,260 --> 00:10:12,420 +those with that content + +247 +00:10:09,899 --> 00:10:13,740 +we produce data and learning traces + +248 +00:10:12,420 --> 00:10:16,800 +everyone's familiar with the tracking + +249 +00:10:13,740 --> 00:10:19,140 +logs we also have X API versions of data + +250 +00:10:16,800 --> 00:10:22,320 +traces that data can then become the + +251 +00:10:19,140 --> 00:10:23,459 +input into research and advances in + +252 +00:10:22,320 --> 00:10:25,320 +learning + +253 +00:10:23,459 --> 00:10:27,120 +um and there have been a lot of + +254 +00:10:25,320 --> 00:10:28,860 +interesting papers I mean and I can + +255 +00:10:27,120 --> 00:10:30,959 +probably quote the number of papers that + +256 +00:10:28,860 --> 00:10:32,640 +have been produced from from edx data + +257 +00:10:30,959 --> 00:10:34,200 +but a lot of interesting research has + +258 +00:10:32,640 --> 00:10:36,660 +been produced from the data that we + +259 +00:10:34,200 --> 00:10:39,060 +generate on the edx platform and also in + +260 +00:10:36,660 --> 00:10:41,399 +other instances of the platform but for + +261 +00:10:39,060 --> 00:10:44,820 +me the key thing that we haven't done + +262 +00:10:41,399 --> 00:10:45,980 +well enough is this last arrow is how do + +263 +00:10:44,820 --> 00:10:49,680 +we then + +264 +00:10:45,980 --> 00:10:52,140 +turn that research into advances in + +265 +00:10:49,680 --> 00:10:54,240 +learning into a complete feedback loop + +266 +00:10:52,140 --> 00:10:55,800 +that helps us prioritize and Advance the + +267 +00:10:54,240 --> 00:10:58,320 +platform in a way that makes it more + +268 +00:10:55,800 --> 00:11:00,120 +efficacious for our users so that I + +269 +00:10:58,320 --> 00:11:01,880 +think is a challenge that lies before us + +270 +00:11:00,120 --> 00:11:06,019 +and one that I'll present to you + +271 +00:11:01,880 --> 00:11:06,019 +so let's figure out how to do that + +272 +00:11:07,440 --> 00:11:11,779 +and then in summary uh + +273 +00:11:11,899 --> 00:11:17,040 +this Friday we have the town hall + +274 +00:11:14,459 --> 00:11:18,600 +meeting and this is the proposed vision + +275 +00:11:17,040 --> 00:11:20,279 +statement from the product working group + +276 +00:11:18,600 --> 00:11:23,519 +I think the town hall would be a great + +277 +00:11:20,279 --> 00:11:25,880 +time to come and add your voice to this + +278 +00:11:23,519 --> 00:11:28,800 +conversation to ask any questions + +279 +00:11:25,880 --> 00:11:30,300 +clarifying questions or to take us to + +280 +00:11:28,800 --> 00:11:31,740 +task if you think we've gotten something + +281 +00:11:30,300 --> 00:11:33,660 +wrong here so please attend the town + +282 +00:11:31,740 --> 00:11:35,820 +hall on Friday let's have a robust + +283 +00:11:33,660 --> 00:11:37,560 +discussion about the vision for the + +284 +00:11:35,820 --> 00:11:39,000 +platform + +285 +00:11:37,560 --> 00:11:40,620 +all right + +286 +00:11:39,000 --> 00:11:42,540 +I want to talk a little bit about reach + +287 +00:11:40,620 --> 00:11:44,579 +we have some statistics about the usage + +288 +00:11:42,540 --> 00:11:47,040 +of the platform this is a place we've + +289 +00:11:44,579 --> 00:11:49,860 +invested in the last couple years + +290 +00:11:47,040 --> 00:11:51,660 +because our ability to determine who was + +291 +00:11:49,860 --> 00:11:54,000 +using our open source project was + +292 +00:11:51,660 --> 00:11:55,860 +somewhat limited it's important to know + +293 +00:11:54,000 --> 00:11:57,899 +the reach of the project because it + +294 +00:11:55,860 --> 00:11:59,640 +indicates a couple of things one is are + +295 +00:11:57,899 --> 00:12:03,300 +we building something that people care + +296 +00:11:59,640 --> 00:12:06,720 +about that people want and also the + +297 +00:12:03,300 --> 00:12:09,180 +reach of the platform determines the + +298 +00:12:06,720 --> 00:12:11,700 +size of the network of our community the + +299 +00:12:09,180 --> 00:12:12,959 +size of the network determines who is + +300 +00:12:11,700 --> 00:12:14,459 +contributing and how many people are + +301 +00:12:12,959 --> 00:12:15,959 +contributing and how much value we're + +302 +00:12:14,459 --> 00:12:17,579 +creating so it's important for those + +303 +00:12:15,959 --> 00:12:18,480 +reasons + +304 +00:12:17,579 --> 00:12:21,060 +um + +305 +00:12:18,480 --> 00:12:23,339 +so we have a new technology we've + +306 +00:12:21,060 --> 00:12:25,380 +brought online to help us determine how + +307 +00:12:23,339 --> 00:12:28,320 +many instances we have we know that + +308 +00:12:25,380 --> 00:12:30,420 +today there are more than 4 500 live + +309 +00:12:28,320 --> 00:12:32,300 +instances of the open edx platform on + +310 +00:12:30,420 --> 00:12:35,220 +the public internet + +311 +00:12:32,300 --> 00:12:38,459 +across those instances we know that + +312 +00:12:35,220 --> 00:12:41,579 +there are more than 70 000 courses that + +313 +00:12:38,459 --> 00:12:43,560 +are being offered on open edx today + +314 +00:12:41,579 --> 00:12:46,079 +and we know that across the instances + +315 +00:12:43,560 --> 00:12:48,720 +this number is is the hardest to gather + +316 +00:12:46,079 --> 00:12:50,279 +because we rely on people telling us how + +317 +00:12:48,720 --> 00:12:52,260 +many registered users they have we don't + +318 +00:12:50,279 --> 00:12:54,300 +have any way of harvesting that data but + +319 +00:12:52,260 --> 00:12:55,800 +we know we have at least 77 million + +320 +00:12:54,300 --> 00:12:58,579 +users who have interacted with the open + +321 +00:12:55,800 --> 00:12:58,579 +edx platform + +322 +00:13:01,019 --> 00:13:04,440 +okay + +323 +00:13:02,339 --> 00:13:05,760 +and + +324 +00:13:04,440 --> 00:13:07,860 +I don't think I'm going to fool anybody + +325 +00:13:05,760 --> 00:13:09,240 +as I draw my second flywheel of the + +326 +00:13:07,860 --> 00:13:10,740 +presentation the first one being a + +327 +00:13:09,240 --> 00:13:13,440 +square and the second one being erect + +328 +00:13:10,740 --> 00:13:15,420 +being a triangle but I'm going to do it + +329 +00:13:13,440 --> 00:13:17,339 +anyway right so + +330 +00:13:15,420 --> 00:13:19,380 +um just sort of to reinforce why reach + +331 +00:13:17,339 --> 00:13:22,019 +is so important in open source projects + +332 +00:13:19,380 --> 00:13:23,040 +is because the the greater the reach we + +333 +00:13:22,019 --> 00:13:24,959 +have + +334 +00:13:23,040 --> 00:13:26,940 +some segment of the community that + +335 +00:13:24,959 --> 00:13:29,220 +you're touching or contributing back and + +336 +00:13:26,940 --> 00:13:31,260 +innovating on the platform you can + +337 +00:13:29,220 --> 00:13:33,660 +increase the size of that segment but + +338 +00:13:31,260 --> 00:13:35,399 +the more the bigger the overall Network + +339 +00:13:33,660 --> 00:13:38,100 +the more people you have contributing + +340 +00:13:35,399 --> 00:13:40,980 +and investing that investment generates + +341 +00:13:38,100 --> 00:13:43,680 +additional value for the platform which + +342 +00:13:40,980 --> 00:13:46,019 +in turn makes it more attractive to new + +343 +00:13:43,680 --> 00:13:48,360 +users and increases the reach and if we + +344 +00:13:46,019 --> 00:13:51,300 +can continue going around this this + +345 +00:13:48,360 --> 00:13:53,700 +virtuous circle then we over time build + +346 +00:13:51,300 --> 00:13:55,200 +the most efficacious platform and can + +347 +00:13:53,700 --> 00:13:58,279 +have the greatest impact in the lives of + +348 +00:13:55,200 --> 00:13:58,279 +our Learners across the world + +349 +00:13:58,620 --> 00:14:03,899 +oops okay + +350 +00:14:01,500 --> 00:14:06,480 +um but the engine behind all of this is + +351 +00:14:03,899 --> 00:14:09,060 +you the community that that develops + +352 +00:14:06,480 --> 00:14:10,740 +openedx and uses openedx so let's take a + +353 +00:14:09,060 --> 00:14:12,779 +quick look at the health of the + +354 +00:14:10,740 --> 00:14:14,760 +community based on two things on some + +355 +00:14:12,779 --> 00:14:18,060 +statistics we can measure and some + +356 +00:14:14,760 --> 00:14:20,100 +stories that I will I'll try to tell + +357 +00:14:18,060 --> 00:14:22,260 +um okay the so contribution to community + +358 +00:14:20,100 --> 00:14:23,940 +metrics we'll start with a salute to + +359 +00:14:22,260 --> 00:14:25,380 +working groups which I think are one of + +360 +00:14:23,940 --> 00:14:26,339 +the most important parts of our project + +361 +00:14:25,380 --> 00:14:28,980 +today + +362 +00:14:26,339 --> 00:14:30,240 +uh and then something briefly about a + +363 +00:14:28,980 --> 00:14:32,639 +program that we're doing around + +364 +00:14:30,240 --> 00:14:34,200 +maintainership + +365 +00:14:32,639 --> 00:14:36,000 +okay + +366 +00:14:34,200 --> 00:14:38,100 +right today we know we have about 24 + +367 +00:14:36,000 --> 00:14:41,100 +different organizations that are + +368 +00:14:38,100 --> 00:14:42,600 +contributing to the project just just be + +369 +00:14:41,100 --> 00:14:44,220 +full transparency that's pretty flat + +370 +00:14:42,600 --> 00:14:45,959 +that hasn't changed a lot over the last + +371 +00:14:44,220 --> 00:14:48,420 +couple years + +372 +00:14:45,959 --> 00:14:52,320 +um we have 333 people in the last year + +373 +00:14:48,420 --> 00:14:55,380 +who contributed code to the platform + +374 +00:14:52,320 --> 00:14:57,480 +and we have 10 active working groups so + +375 +00:14:55,380 --> 00:14:59,880 +this is interesting because last year at + +376 +00:14:57,480 --> 00:15:02,100 +Lisbon we had around five working groups + +377 +00:14:59,880 --> 00:15:03,720 +that were active so it's increased two + +378 +00:15:02,100 --> 00:15:05,279 +times in that time and I think for a + +379 +00:15:03,720 --> 00:15:08,040 +very good reason because it's probably + +380 +00:15:05,279 --> 00:15:09,660 +the best way to participate in the + +381 +00:15:08,040 --> 00:15:11,880 +project and it the working groups drive + +382 +00:15:09,660 --> 00:15:13,320 +so much value to us and we'll talk we'll + +383 +00:15:11,880 --> 00:15:14,279 +have a specific slide to talk about them + +384 +00:15:13,320 --> 00:15:16,560 +later + +385 +00:15:14,279 --> 00:15:18,720 +we have 50 core contributors core + +386 +00:15:16,560 --> 00:15:20,399 +contributors are the folks who are most + +387 +00:15:18,720 --> 00:15:22,579 +you know who have made a personal + +388 +00:15:20,399 --> 00:15:25,019 +commitment to dedicate their time + +389 +00:15:22,579 --> 00:15:26,820 +continuously to the project they have + +390 +00:15:25,019 --> 00:15:30,540 +additional responsibilities that come + +391 +00:15:26,820 --> 00:15:32,399 +along with that but this group of folks + +392 +00:15:30,540 --> 00:15:34,740 +are the they're the most dedicated + +393 +00:15:32,399 --> 00:15:37,260 +contributors across the entire project + +394 +00:15:34,740 --> 00:15:39,300 +last year this was 41 we've grown it by + +395 +00:15:37,260 --> 00:15:41,880 +50 by the end of this by the end of next + +396 +00:15:39,300 --> 00:15:42,959 +week I expect this to be 53 and this is + +397 +00:15:41,880 --> 00:15:45,680 +a place where we're going to continue to + +398 +00:15:42,959 --> 00:15:48,060 +invest in growing that cohort + +399 +00:15:45,680 --> 00:15:50,040 +we have 13 officially supported + +400 +00:15:48,060 --> 00:15:51,720 +languages on the platform officially + +401 +00:15:50,040 --> 00:15:53,959 +supported languages are languages that + +402 +00:15:51,720 --> 00:15:57,540 +are translated to a rate of 100 percent + +403 +00:15:53,959 --> 00:16:00,480 +for our open edx releases this is up + +404 +00:15:57,540 --> 00:16:02,579 +from 10 last year so also a significant + +405 +00:16:00,480 --> 00:16:05,480 +uh Improvement in the languages that we + +406 +00:16:02,579 --> 00:16:05,480 +support on the platform + +407 +00:16:05,660 --> 00:16:10,860 +and it all adds up to what we see here + +408 +00:16:08,699 --> 00:16:13,740 +this is a graph of contributions over + +409 +00:16:10,860 --> 00:16:16,740 +the last two years measured as lines of + +410 +00:16:13,740 --> 00:16:19,500 +code added to the platform the red line + +411 +00:16:16,740 --> 00:16:21,779 +is the trend line you can see that we've + +412 +00:16:19,500 --> 00:16:22,980 +seen a steady increase it's lumpy but + +413 +00:16:21,779 --> 00:16:25,260 +we're seeing a steady increase in + +414 +00:16:22,980 --> 00:16:27,180 +contribution over time lines of code + +415 +00:16:25,260 --> 00:16:29,160 +added is not the perfect metric there + +416 +00:16:27,180 --> 00:16:31,199 +isn't one but I think it's a good enough + +417 +00:16:29,160 --> 00:16:34,620 +metric for us if we look at this + +418 +00:16:31,199 --> 00:16:36,540 +cumulatively it represents a 54 increase + +419 +00:16:34,620 --> 00:16:40,459 +year over year over the last two years + +420 +00:16:36,540 --> 00:16:40,459 +in line subcode added to the platform + +421 +00:16:41,100 --> 00:16:45,180 +oop just jumped ahead but so quickly I + +422 +00:16:43,860 --> 00:16:46,680 +wanted to talk about some sources of + +423 +00:16:45,180 --> 00:16:48,180 +growth + +424 +00:16:46,680 --> 00:16:49,860 +um one of the big sources of growth has + +425 +00:16:48,180 --> 00:16:51,540 +been the innovation of micro front ends + +426 +00:16:49,860 --> 00:16:54,540 +that's a technology that's really taken + +427 +00:16:51,540 --> 00:16:56,160 +off we now have I think 28 micro front + +428 +00:16:54,540 --> 00:16:57,839 +ends there's a lot of development energy + +429 +00:16:56,160 --> 00:17:00,360 +around them and that's driven a lot of + +430 +00:16:57,839 --> 00:17:02,880 +increasing in contribution + +431 +00:17:00,360 --> 00:17:05,040 +of T Krill has been funding + +432 +00:17:02,880 --> 00:17:07,319 +contributions where for critical areas + +433 +00:17:05,040 --> 00:17:08,640 +in the platform where we see gaps that + +434 +00:17:07,319 --> 00:17:10,860 +will you know fill in those gaps will + +435 +00:17:08,640 --> 00:17:12,419 +benefit everyone across the community so + +436 +00:17:10,859 --> 00:17:14,220 +that's another source of growth of + +437 +00:17:12,419 --> 00:17:16,199 +contribution and finally the growth in + +438 +00:17:14,220 --> 00:17:17,339 +core contributors has been in other area + +439 +00:17:16,199 --> 00:17:18,959 +where + +440 +00:17:17,339 --> 00:17:20,339 +um you know the growth in the people + +441 +00:17:18,959 --> 00:17:22,020 +participating in that program and + +442 +00:17:20,339 --> 00:17:24,720 +dedicating a significant amount of their + +443 +00:17:22,020 --> 00:17:27,299 +time to the to the platform has has been + +444 +00:17:24,720 --> 00:17:28,980 +important there as well + +445 +00:17:27,299 --> 00:17:31,919 +and I want to spend some time talking + +446 +00:17:28,980 --> 00:17:33,480 +about the metaphor we often use about + +447 +00:17:31,919 --> 00:17:35,880 +open edx is it feels like we're building + +448 +00:17:33,480 --> 00:17:37,740 +the plane while we're flying it + +449 +00:17:35,880 --> 00:17:40,799 +um in this case we're just building + +450 +00:17:37,740 --> 00:17:43,440 +something very complex as a group so as + +451 +00:17:40,799 --> 00:17:44,400 +I mentioned we've got 10 working groups + +452 +00:17:43,440 --> 00:17:46,679 +um + +453 +00:17:44,400 --> 00:17:48,600 +those are the folks that coordinate the + +454 +00:17:46,679 --> 00:17:49,679 +work they plan the work they determine + +455 +00:17:48,600 --> 00:17:52,200 +what the priorities are and they + +456 +00:17:49,679 --> 00:17:54,539 +actually do the work working groups + +457 +00:17:52,200 --> 00:17:58,140 +focus on anything from translation and + +458 +00:17:54,539 --> 00:18:00,240 +marketing to devops to deprecation to + +459 +00:17:58,140 --> 00:18:01,740 +releasing the platform basically all of + +460 +00:18:00,240 --> 00:18:03,240 +the critical activities of the project + +461 +00:18:01,740 --> 00:18:06,840 +happen in working groups so if you're + +462 +00:18:03,240 --> 00:18:08,820 +interested in in becoming uh + +463 +00:18:06,840 --> 00:18:10,860 +participating more directly in the + +464 +00:18:08,820 --> 00:18:13,380 +project working groups are the place to + +465 +00:18:10,860 --> 00:18:14,820 +go and this Friday the working groups + +466 +00:18:13,380 --> 00:18:17,520 +will be having sessions where you can + +467 +00:18:14,820 --> 00:18:19,020 +drop in and meet the members and see + +468 +00:18:17,520 --> 00:18:20,220 +what they're working on and so if there + +469 +00:18:19,020 --> 00:18:23,220 +are working groups that are particularly + +470 +00:18:20,220 --> 00:18:25,140 +interesting to you please join on Friday + +471 +00:18:23,220 --> 00:18:27,360 +and also + +472 +00:18:25,140 --> 00:18:28,679 +I don't have time to summarize all of + +473 +00:18:27,360 --> 00:18:30,960 +the great things the working groups have + +474 +00:18:28,679 --> 00:18:35,520 +done however they have all produced + +475 +00:18:30,960 --> 00:18:37,559 +reports of their priorities and and + +476 +00:18:35,520 --> 00:18:40,140 +accomplishments for the last six months + +477 +00:18:37,559 --> 00:18:41,760 +and they're in the wiki and I'll share a + +478 +00:18:40,140 --> 00:18:42,960 +link into the events Channel later so if + +479 +00:18:41,760 --> 00:18:44,280 +you want to follow up on with the + +480 +00:18:42,960 --> 00:18:46,880 +specific working group so do you please + +481 +00:18:44,280 --> 00:18:46,880 +check in there + +482 +00:18:48,720 --> 00:18:53,160 +and finally I wanted to say when I ask + +483 +00:18:51,780 --> 00:18:55,080 +the community what we should talk about + +484 +00:18:53,160 --> 00:18:57,299 +in the state of open edx several people + +485 +00:18:55,080 --> 00:18:58,860 +said let's talk about maintainership but + +486 +00:18:57,299 --> 00:19:00,720 +we don't have time to talk about it in + +487 +00:18:58,860 --> 00:19:03,419 +depth today but I wanted to mention that + +488 +00:19:00,720 --> 00:19:06,780 +we're having an online meetup on April + +489 +00:19:03,419 --> 00:19:08,700 +27th and I'm going to do a deep dive + +490 +00:19:06,780 --> 00:19:10,320 +into maintainership and the state of + +491 +00:19:08,700 --> 00:19:12,720 +maintainership for openedx so if that's + +492 +00:19:10,320 --> 00:19:15,559 +an interesting topic for you please join + +493 +00:19:12,720 --> 00:19:15,559 +us then all right + +494 +00:19:17,400 --> 00:19:22,559 +okay and then quickly I'll talk about + +495 +00:19:19,620 --> 00:19:24,539 +some features that have shipped recently + +496 +00:19:22,559 --> 00:19:27,059 +um and then Jenna and this this is the + +497 +00:19:24,539 --> 00:19:28,380 +the present version of things + +498 +00:19:27,059 --> 00:19:31,020 +um + +499 +00:19:28,380 --> 00:19:32,340 +and these are focused on the personas uh + +500 +00:19:31,020 --> 00:19:35,340 +that we're tracking in the product + +501 +00:19:32,340 --> 00:19:36,840 +working group so a lot of these features + +502 +00:19:35,340 --> 00:19:38,820 +you know give credit where credit were + +503 +00:19:36,840 --> 00:19:41,960 +due we're developed by engineers at 2u + +504 +00:19:38,820 --> 00:19:45,539 +or at in to you via Blended projects so + +505 +00:19:41,960 --> 00:19:48,600 +the new problem editor ux new text + +506 +00:19:45,539 --> 00:19:50,700 +editor ux have been launched those were + +507 +00:19:48,600 --> 00:19:53,520 +contributed by 2u so thank you to you + +508 +00:19:50,700 --> 00:19:55,620 +for that I think Advanced or a staff + +509 +00:19:53,520 --> 00:19:56,220 +grader also was + +510 +00:19:55,620 --> 00:19:59,039 +um + +511 +00:19:56,220 --> 00:20:01,500 +on the platform on the learner's side I + +512 +00:19:59,039 --> 00:20:03,900 +think everyone is aware of the large new + +513 +00:20:01,500 --> 00:20:05,880 +discussions rollout we now have several + +514 +00:20:03,900 --> 00:20:08,760 +different discussion forums that are + +515 +00:20:05,880 --> 00:20:10,440 +available on the platform discussions + +516 +00:20:08,760 --> 00:20:12,000 +have been a long-standing point of pain + +517 +00:20:10,440 --> 00:20:13,919 +for members of the community so I think + +518 +00:20:12,000 --> 00:20:17,400 +everyone's happy to see options and also + +519 +00:20:13,919 --> 00:20:19,140 +a very much improved native discussions + +520 +00:20:17,400 --> 00:20:20,700 +offering + +521 +00:20:19,140 --> 00:20:22,500 +and um + +522 +00:20:20,700 --> 00:20:25,020 +team-based auras there was a session on + +523 +00:20:22,500 --> 00:20:26,280 +that yesterday those are great so if you + +524 +00:20:25,020 --> 00:20:28,260 +have you know + +525 +00:20:26,280 --> 00:20:29,520 +Udo I think his session was recorded as + +526 +00:20:28,260 --> 00:20:32,580 +Zoom so if you want to know more about + +527 +00:20:29,520 --> 00:20:35,520 +team-based auras please watch that and + +528 +00:20:32,580 --> 00:20:37,500 +then some platform focused stuff + +529 +00:20:35,520 --> 00:20:39,480 +um some big ones like runtime + +530 +00:20:37,500 --> 00:20:42,480 +configuration for micro front ends was + +531 +00:20:39,480 --> 00:20:44,340 +something that came out in Olive it was + +532 +00:20:42,480 --> 00:20:46,980 +a big win for + +533 +00:20:44,340 --> 00:20:49,260 +um for micro front end development lots + +534 +00:20:46,980 --> 00:20:52,460 +of investment in tutor improvements and + +535 +00:20:49,260 --> 00:20:52,460 +platform documentation + +536 +00:20:52,760 --> 00:20:58,799 +now I want to hand over to Jenna who is + +537 +00:20:56,100 --> 00:21:00,660 +the leading product at tcrill she's + +538 +00:20:58,799 --> 00:21:03,000 +going to speak about sort of our product + +539 +00:21:00,660 --> 00:21:07,180 +management processes and the platform + +540 +00:21:03,000 --> 00:21:13,220 +priorities and hand the clicker to you + +541 +00:21:07,180 --> 00:21:16,559 +[Applause] + +542 +00:21:13,220 --> 00:21:18,539 +thank you Ed can everyone hear me okay + +543 +00:21:16,559 --> 00:21:20,700 +awesome + +544 +00:21:18,539 --> 00:21:23,520 +so like Ed mentioned this portion of the + +545 +00:21:20,700 --> 00:21:25,140 +talk is focused on looking forward to + +546 +00:21:23,520 --> 00:21:27,299 +product plans and some of our priorities + +547 +00:21:25,140 --> 00:21:28,919 +and where we're investing but I wanted + +548 +00:21:27,299 --> 00:21:31,020 +to take a couple of minutes here at the + +549 +00:21:28,919 --> 00:21:32,700 +beginning to look back because I think + +550 +00:21:31,020 --> 00:21:36,140 +by looking back that will help us to + +551 +00:21:32,700 --> 00:21:36,140 +think about how we move forward + +552 +00:21:36,600 --> 00:21:41,520 +some of you may remember the slide from + +553 +00:21:38,700 --> 00:21:43,799 +last year I presented this slide at the + +554 +00:21:41,520 --> 00:21:45,419 +state of open edx talk in Lisbon + +555 +00:21:43,799 --> 00:21:48,000 +and if you don't remember or if you + +556 +00:21:45,419 --> 00:21:49,980 +weren't here this is the main topic that + +557 +00:21:48,000 --> 00:21:52,860 +we addressed last year in the state was + +558 +00:21:49,980 --> 00:21:55,140 +how do how we would spend the next year + +559 +00:21:52,860 --> 00:21:57,299 +building a product organization within + +560 +00:21:55,140 --> 00:21:59,880 +the openatix community + +561 +00:21:57,299 --> 00:22:01,860 +and this Double Diamond was the + +562 +00:21:59,880 --> 00:22:03,960 +framework that I proposed we used to + +563 +00:22:01,860 --> 00:22:05,940 +build that product organization + +564 +00:22:03,960 --> 00:22:07,980 +so as a quick recap the Double Diamond + +565 +00:22:05,940 --> 00:22:10,320 +framework is a pretty popular method or + +566 +00:22:07,980 --> 00:22:12,480 +methodology of product delivery + +567 +00:22:10,320 --> 00:22:15,419 +and on the + +568 +00:22:12,480 --> 00:22:17,460 +left side of the process so it's like a + +569 +00:22:15,419 --> 00:22:20,039 +it's a workflow the left side is more + +570 +00:22:17,460 --> 00:22:22,860 +product oriented so focusing on + +571 +00:22:20,039 --> 00:22:25,020 +Discovery around new features focusing + +572 +00:22:22,860 --> 00:22:26,940 +on definition of features this is where + +573 +00:22:25,020 --> 00:22:28,260 +you find all of your user stories all of + +574 +00:22:26,940 --> 00:22:30,000 +your market research all your Market + +575 +00:22:28,260 --> 00:22:31,559 +data everything that you use to drive + +576 +00:22:30,000 --> 00:22:33,600 +what you what you build on the platform + +577 +00:22:31,559 --> 00:22:36,240 +and why + +578 +00:22:33,600 --> 00:22:37,500 +and the second half of the Double + +579 +00:22:36,240 --> 00:22:39,720 +Diamond framework is the technical + +580 +00:22:37,500 --> 00:22:40,740 +execution side right development and + +581 +00:22:39,720 --> 00:22:43,860 +delivery + +582 +00:22:40,740 --> 00:22:45,600 +and what I observed last last year at + +583 +00:22:43,860 --> 00:22:48,360 +the talk was that a lot of the energy + +584 +00:22:45,600 --> 00:22:50,520 +and momentum around the project tends to + +585 +00:22:48,360 --> 00:22:52,860 +be more focused on this side on the + +586 +00:22:50,520 --> 00:22:55,020 +implementation side with less of a focus + +587 +00:22:52,860 --> 00:22:56,039 +at least in the open community on the + +588 +00:22:55,020 --> 00:22:58,440 +product side + +589 +00:22:56,039 --> 00:23:00,840 +and so + +590 +00:22:58,440 --> 00:23:02,340 +I'd propose that we focus on reshifting + +591 +00:23:00,840 --> 00:23:04,380 +spending the year to reshift that + +592 +00:23:02,340 --> 00:23:06,419 +balance a little bit + +593 +00:23:04,380 --> 00:23:07,799 +um that was last year and I'm really + +594 +00:23:06,419 --> 00:23:10,380 +happy to say that we've made a ton of + +595 +00:23:07,799 --> 00:23:12,000 +progress in the past year I'm very proud + +596 +00:23:10,380 --> 00:23:13,559 +of how product managers across the + +597 +00:23:12,000 --> 00:23:14,760 +community have really come together and + +598 +00:23:13,559 --> 00:23:17,880 +helped us to build a product + +599 +00:23:14,760 --> 00:23:21,260 +Organization for the open edx Community + +600 +00:23:17,880 --> 00:23:21,260 +as a whole so thank you to everybody + +601 +00:23:21,960 --> 00:23:26,640 +um today I'd like to highlight three of + +602 +00:23:24,179 --> 00:23:28,559 +the key processes and artifacts that we + +603 +00:23:26,640 --> 00:23:31,260 +as an open source Community with the + +604 +00:23:28,559 --> 00:23:32,460 +product organization have built over the + +605 +00:23:31,260 --> 00:23:34,080 +past year + +606 +00:23:32,460 --> 00:23:35,760 +so that we could really bring this + +607 +00:23:34,080 --> 00:23:38,159 +framework to life + +608 +00:23:35,760 --> 00:23:39,780 +those three things are the product + +609 +00:23:38,159 --> 00:23:42,299 +working group + +610 +00:23:39,780 --> 00:23:45,080 +feature development in the open + +611 +00:23:42,299 --> 00:23:45,080 +and the roadmap + +612 +00:23:45,600 --> 00:23:50,940 +so let's start by answering a couple of + +613 +00:23:48,780 --> 00:23:53,960 +basic questions who is openedx product + +614 +00:23:50,940 --> 00:23:53,960 +and what do we do + +615 +00:23:54,360 --> 00:23:58,559 +this is openedx product + +616 +00:23:56,039 --> 00:24:00,120 +a lot of these are the product leaders + +617 +00:23:58,559 --> 00:24:03,539 +from organizations across the community + +618 +00:24:00,120 --> 00:24:05,159 +many of you are here today + +619 +00:24:03,539 --> 00:24:06,659 +um and this is this is the product + +620 +00:24:05,159 --> 00:24:09,120 +working group this is the engine that + +621 +00:24:06,659 --> 00:24:10,740 +drives the open edx project we've had + +622 +00:24:09,120 --> 00:24:12,419 +folks representing nearly a dozen + +623 +00:24:10,740 --> 00:24:15,480 +organizations in the group over the past + +624 +00:24:12,419 --> 00:24:19,520 +year including 2u Tik role Ed Lee edu + +625 +00:24:15,480 --> 00:24:19,520 +next opencraft and many more + +626 +00:24:19,679 --> 00:24:24,480 +so the next question would be what does + +627 +00:24:21,600 --> 00:24:26,460 +product do we coordinate decision making + +628 +00:24:24,480 --> 00:24:29,220 +about the product which features get + +629 +00:24:26,460 --> 00:24:30,900 +prioritized where we invest I mean these + +630 +00:24:29,220 --> 00:24:32,700 +decisions are all Based on data on + +631 +00:24:30,900 --> 00:24:33,960 +market research on user feedback and + +632 +00:24:32,700 --> 00:24:35,760 +we've been able to create channels that + +633 +00:24:33,960 --> 00:24:37,140 +we can actually aggregate this across + +634 +00:24:35,760 --> 00:24:38,280 +the community so we're pulling this data + +635 +00:24:37,140 --> 00:24:40,320 +together from across many different + +636 +00:24:38,280 --> 00:24:43,340 +sources which gives us a holistic view + +637 +00:24:40,320 --> 00:24:43,340 +of of the project + +638 +00:24:44,580 --> 00:24:48,360 +and so this time last year the product + +639 +00:24:46,260 --> 00:24:49,919 +working group was just an idea and we + +640 +00:24:48,360 --> 00:24:52,260 +actually met for the first time in + +641 +00:24:49,919 --> 00:24:54,539 +Lisbon to kind of brainstorm about what + +642 +00:24:52,260 --> 00:24:56,159 +we would do what we would focus on in + +643 +00:24:54,539 --> 00:24:58,440 +the first year + +644 +00:24:56,159 --> 00:25:01,200 +and like Ed mentioned we have published + +645 +00:24:58,440 --> 00:25:03,059 +our impact report but I wanted to + +646 +00:25:01,200 --> 00:25:04,559 +highlight a couple of accomplishments + +647 +00:25:03,059 --> 00:25:06,120 +here that are actually tied to this + +648 +00:25:04,559 --> 00:25:09,500 +bigger topic of building the product + +649 +00:25:06,120 --> 00:25:09,500 +organization within the community + +650 +00:25:09,720 --> 00:25:14,159 +and so in Lisbon we decided that we + +651 +00:25:12,059 --> 00:25:15,600 +would focus on three priorities in the + +652 +00:25:14,159 --> 00:25:17,760 +first year + +653 +00:25:15,600 --> 00:25:19,919 +number one was defining what the + +654 +00:25:17,760 --> 00:25:21,960 +platform is + +655 +00:25:19,919 --> 00:25:23,760 +number two was streamlining the + +656 +00:25:21,960 --> 00:25:26,880 +contribution process specifically the + +657 +00:25:23,760 --> 00:25:28,980 +product review process of osprs + +658 +00:25:26,880 --> 00:25:31,260 +and the third was making the development + +659 +00:25:28,980 --> 00:25:32,940 +feature development process visible and + +660 +00:25:31,260 --> 00:25:36,659 +open + +661 +00:25:32,940 --> 00:25:38,100 +and now a year later we have for this + +662 +00:25:36,659 --> 00:25:40,620 +first one defining what the platform is + +663 +00:25:38,100 --> 00:25:43,080 +we have of 57 which is an open addicts + +664 +00:25:40,620 --> 00:25:44,880 +proposal which outlines a strategy and a + +665 +00:25:43,080 --> 00:25:47,419 +plan to Define what our core product + +666 +00:25:44,880 --> 00:25:47,419 +will be + +667 +00:25:47,820 --> 00:25:52,860 +we have a team that's dedicated to + +668 +00:25:50,640 --> 00:25:55,020 +streamlining this process to creating a + +669 +00:25:52,860 --> 00:25:58,260 +workflow to help us review the massive + +670 +00:25:55,020 --> 00:26:00,720 +backlog of PRS + +671 +00:25:58,260 --> 00:26:02,600 +and we have a process that we've tested + +672 +00:26:00,720 --> 00:26:04,860 +for making development visible + +673 +00:26:02,600 --> 00:26:07,380 +we've learned a lot from this process we + +674 +00:26:04,860 --> 00:26:08,640 +still have a lot to learn but as a + +675 +00:26:07,380 --> 00:26:11,039 +result now we have a product management + +676 +00:26:08,640 --> 00:26:14,039 +Wiki that has over half a dozen public + +677 +00:26:11,039 --> 00:26:15,480 +approach memos user stories specs that + +678 +00:26:14,039 --> 00:26:19,400 +outline what we're actually building + +679 +00:26:15,480 --> 00:26:19,400 +early on in the product process + +680 +00:26:19,620 --> 00:26:24,299 +and I'll mention as well all three of + +681 +00:26:21,659 --> 00:26:25,679 +these have dedicated talks during the + +682 +00:26:24,299 --> 00:26:27,720 +conference over the over the next couple + +683 +00:26:25,679 --> 00:26:29,640 +of days if you're interested in any of + +684 +00:26:27,720 --> 00:26:32,779 +these find the talk and join us and + +685 +00:26:29,640 --> 00:26:32,779 +we'll dive deeply + +686 +00:26:33,900 --> 00:26:37,200 +so last year was all about laying the + +687 +00:26:35,760 --> 00:26:39,120 +foundation and this year is about + +688 +00:26:37,200 --> 00:26:39,900 +execution how are we going to do these + +689 +00:26:39,120 --> 00:26:41,640 +things + +690 +00:26:39,900 --> 00:26:43,799 +we will + +691 +00:26:41,640 --> 00:26:45,000 +continue to Define and actually build + +692 +00:26:43,799 --> 00:26:46,740 +the core + +693 +00:26:45,000 --> 00:26:49,260 +core product offering + +694 +00:26:46,740 --> 00:26:51,360 +we will clear the backlog of all of the + +695 +00:26:49,260 --> 00:26:52,620 +PRS and also continue to make that + +696 +00:26:51,360 --> 00:26:54,120 +process better + +697 +00:26:52,620 --> 00:26:56,900 +and we'll continue to do all of our + +698 +00:26:54,120 --> 00:26:56,900 +development in the open + +699 +00:26:57,419 --> 00:27:01,799 +okay so that's the past + +700 +00:26:59,820 --> 00:27:03,539 +let's talk about what we're focusing on + +701 +00:27:01,799 --> 00:27:06,500 +now and what we'll be focusing on in the + +702 +00:27:03,539 --> 00:27:06,500 +next six to 12 months + +703 +00:27:06,720 --> 00:27:12,059 +so Ed mentioned earlier + +704 +00:27:09,320 --> 00:27:13,740 +that we are prioritizing projects along + +705 +00:27:12,059 --> 00:27:15,240 +that will support our mission right so + +706 +00:27:13,740 --> 00:27:17,220 +our mission is to improve access to + +707 +00:27:15,240 --> 00:27:19,440 +online learning and our mission is to + +708 +00:27:17,220 --> 00:27:21,240 +improve the outcome or the impact of + +709 +00:27:19,440 --> 00:27:22,559 +online learning and I'm going to talk + +710 +00:27:21,240 --> 00:27:24,480 +about a couple of areas that we're + +711 +00:27:22,559 --> 00:27:26,580 +prioritizing for investment over the + +712 +00:27:24,480 --> 00:27:28,500 +next year that align with that mission + +713 +00:27:26,580 --> 00:27:30,419 +and I'll also use them as examples to + +714 +00:27:28,500 --> 00:27:33,380 +actually demonstrate how we are building + +715 +00:27:30,419 --> 00:27:33,380 +these things in the open + +716 +00:27:33,659 --> 00:27:40,860 +so on the access front one major Focus + +717 +00:27:36,720 --> 00:27:42,539 +for us is the core product offering + +718 +00:27:40,860 --> 00:27:44,159 +so the core product offering is rooted + +719 +00:27:42,539 --> 00:27:46,620 +in one of the big challenges of the + +720 +00:27:44,159 --> 00:27:47,960 +platform and that is that the platform + +721 +00:27:46,620 --> 00:27:50,220 +is a little bit difficult to Define + +722 +00:27:47,960 --> 00:27:52,320 +which may sound a little bit weird but + +723 +00:27:50,220 --> 00:27:55,500 +it supports a lot of diverse use cases + +724 +00:27:52,320 --> 00:27:57,059 +right and because of this like that's + +725 +00:27:55,500 --> 00:27:59,220 +great right but because of this it makes + +726 +00:27:57,059 --> 00:28:01,740 +it a little bit challenging sometimes to + +727 +00:27:59,220 --> 00:28:03,240 +install it's inefficient to customize + +728 +00:28:01,740 --> 00:28:04,919 +but more importantly from a product + +729 +00:28:03,240 --> 00:28:06,480 +perspective it can make it difficult to + +730 +00:28:04,919 --> 00:28:07,620 +create a strategy like who are we + +731 +00:28:06,480 --> 00:28:09,059 +building this for and what are we + +732 +00:28:07,620 --> 00:28:10,679 +building + +733 +00:28:09,059 --> 00:28:12,960 +and so the goal of the core product + +734 +00:28:10,679 --> 00:28:14,940 +offering is to define a clear set of + +735 +00:28:12,960 --> 00:28:17,039 +features that come supported in the out + +736 +00:28:14,940 --> 00:28:18,299 +of the box Community install so it + +737 +00:28:17,039 --> 00:28:19,740 +should be very clear to users what + +738 +00:28:18,299 --> 00:28:21,840 +you're getting and why you're getting + +739 +00:28:19,740 --> 00:28:23,340 +those features + +740 +00:28:21,840 --> 00:28:25,980 +on top of that we want to make it even + +741 +00:28:23,340 --> 00:28:27,840 +easier to customize so we're going to be + +742 +00:28:25,980 --> 00:28:29,520 +building a clear catalog of tools so + +743 +00:28:27,840 --> 00:28:32,640 +things like a tool a catalog of Xbox + +744 +00:28:29,520 --> 00:28:34,260 +catalogs of LTI apps plugins that will + +745 +00:28:32,640 --> 00:28:36,240 +help us to streamline and simplify the + +746 +00:28:34,260 --> 00:28:38,100 +experience and to enable easier + +747 +00:28:36,240 --> 00:28:39,779 +customization so that we can support + +748 +00:28:38,100 --> 00:28:43,039 +this diversity of use cases that are + +749 +00:28:39,779 --> 00:28:43,039 +really at the heart of the narrative + +750 +00:28:43,860 --> 00:28:49,020 +in terms of developing this in the open + +751 +00:28:46,159 --> 00:28:52,260 +even though this is a product product + +752 +00:28:49,020 --> 00:28:53,220 +project we we put it through the oep + +753 +00:28:52,260 --> 00:28:55,380 +process + +754 +00:28:53,220 --> 00:28:58,080 +because it introduces a lot of new terms + +755 +00:28:55,380 --> 00:29:00,120 +a lot of new Concepts um the oop process + +756 +00:28:58,080 --> 00:29:02,820 +is the open edx proposal process this + +757 +00:29:00,120 --> 00:29:04,260 +enabled us to socialize it with the + +758 +00:29:02,820 --> 00:29:06,720 +community on both the technical and the + +759 +00:29:04,260 --> 00:29:08,520 +product side we were able to integrate a + +760 +00:29:06,720 --> 00:29:10,220 +lot of great feedback in that process so + +761 +00:29:08,520 --> 00:29:12,539 +it helps us really shape it in real time + +762 +00:29:10,220 --> 00:29:13,980 +and this is a really interesting model I + +763 +00:29:12,539 --> 00:29:16,919 +think for us to explore going forward + +764 +00:29:13,980 --> 00:29:18,600 +you know what other best practices or + +765 +00:29:16,919 --> 00:29:20,279 +workflows exist in the open source + +766 +00:29:18,600 --> 00:29:22,620 +community and how can we bring product + +767 +00:29:20,279 --> 00:29:24,539 +into those processes so this is one + +768 +00:29:22,620 --> 00:29:27,720 +example um you can anyone can take a + +769 +00:29:24,539 --> 00:29:27,720 +look at 57. + +770 +00:29:30,059 --> 00:29:35,399 +another area of investment for us next + +771 +00:29:33,000 --> 00:29:37,620 +year is our taxonomy initiative our + +772 +00:29:35,399 --> 00:29:41,220 +learning taxonomy initiative this aligns + +773 +00:29:37,620 --> 00:29:42,960 +more with the impact side of the mission + +774 +00:29:41,220 --> 00:29:45,480 +so with this project authors will be + +775 +00:29:42,960 --> 00:29:47,460 +able to align their content in courses + +776 +00:29:45,480 --> 00:29:48,960 +to learning taxonomies + +777 +00:29:47,460 --> 00:29:51,659 +um for example taxonomies around + +778 +00:29:48,960 --> 00:29:53,580 +competencies or taxonomies around skills + +779 +00:29:51,659 --> 00:29:56,760 +and they'll be able to add tags as well + +780 +00:29:53,580 --> 00:29:58,440 +in studio and in libraries + +781 +00:29:56,760 --> 00:30:00,720 +there's a lot of benefits to this + +782 +00:29:58,440 --> 00:30:01,980 +project one of them is that coupled with + +783 +00:30:00,720 --> 00:30:04,380 +the data project which I'll talk about + +784 +00:30:01,980 --> 00:30:06,419 +in a minute taxonomies will enable + +785 +00:30:04,380 --> 00:30:08,399 +instructors to better manage and track + +786 +00:30:06,419 --> 00:30:10,500 +Learners as they move through content + +787 +00:30:08,399 --> 00:30:12,240 +sequences and it'll be able to hold + +788 +00:30:10,500 --> 00:30:14,279 +course teams accountable right our + +789 +00:30:12,240 --> 00:30:18,440 +students actually learning what the unit + +790 +00:30:14,279 --> 00:30:21,299 +or the module promises promises to teach + +791 +00:30:18,440 --> 00:30:23,460 +taxonomies will also help us to set the + +792 +00:30:21,299 --> 00:30:25,140 +platform up and sort of forward-looking + +793 +00:30:23,460 --> 00:30:27,840 +to better align with third-party + +794 +00:30:25,140 --> 00:30:29,580 +adaptive tools and other services that + +795 +00:30:27,840 --> 00:30:30,899 +customize you know content + +796 +00:30:29,580 --> 00:30:34,100 +recommendations based on learner + +797 +00:30:30,899 --> 00:30:34,100 +profiles and learner interests + +798 +00:30:34,500 --> 00:30:39,299 +in terms of developing this in the open + +799 +00:30:37,039 --> 00:30:40,860 +this is part of our bigger modular + +800 +00:30:39,299 --> 00:30:42,179 +learning initiative I mean we've been + +801 +00:30:40,860 --> 00:30:45,419 +developing this in the open from the + +802 +00:30:42,179 --> 00:30:47,820 +get-go we put together a group of about + +803 +00:30:45,419 --> 00:30:48,899 +eight to ten stakeholders from across + +804 +00:30:47,820 --> 00:30:51,000 +the community across different + +805 +00:30:48,899 --> 00:30:53,220 +organizations because we wanted to make + +806 +00:30:51,000 --> 00:30:55,260 +sure that the data we were getting would + +807 +00:30:53,220 --> 00:30:56,399 +represent the majority of of the + +808 +00:30:55,260 --> 00:30:57,899 +community wanted to make sure that the + +809 +00:30:56,399 --> 00:30:59,760 +user stories we had were representative + +810 +00:30:57,899 --> 00:31:02,580 +of of everyone here and all of the + +811 +00:30:59,760 --> 00:31:03,779 +clients that you serve + +812 +00:31:02,580 --> 00:31:06,059 +um we put all of this on the product + +813 +00:31:03,779 --> 00:31:07,500 +Wiki and so far all of the documents + +814 +00:31:06,059 --> 00:31:09,960 +around this and related projects have + +815 +00:31:07,500 --> 00:31:12,059 +generated over 100 views and about 30 + +816 +00:31:09,960 --> 00:31:13,620 +different comment threads which have + +817 +00:31:12,059 --> 00:31:16,159 +also helped us to shape these projects + +818 +00:31:13,620 --> 00:31:16,159 +in real time + +819 +00:31:18,059 --> 00:31:22,020 +and finally a third area of investment + +820 +00:31:20,100 --> 00:31:23,880 +for us which also aligns with the impact + +821 +00:31:22,020 --> 00:31:25,260 +side of our mission is to improve + +822 +00:31:23,880 --> 00:31:27,539 +learner Analytics + +823 +00:31:25,260 --> 00:31:29,820 +we'll be replacing insights with ores + +824 +00:31:27,539 --> 00:31:32,340 +which is the open open analytics + +825 +00:31:29,820 --> 00:31:34,260 +reference system + +826 +00:31:32,340 --> 00:31:36,000 +a couple things about this project we + +827 +00:31:34,260 --> 00:31:38,940 +will be aligning the platform to open + +828 +00:31:36,000 --> 00:31:41,039 +data standards and this will unlock a + +829 +00:31:38,940 --> 00:31:42,240 +lot of interesting and exciting + +830 +00:31:41,039 --> 00:31:45,299 +opportunities around reporting because + +831 +00:31:42,240 --> 00:31:47,580 +we'll be able to report on get near + +832 +00:31:45,299 --> 00:31:49,860 +real-time learner analytics which again + +833 +00:31:47,580 --> 00:31:51,120 +coupled with things like the taxonomy + +834 +00:31:49,860 --> 00:31:53,039 +projects now course teams will be able + +835 +00:31:51,120 --> 00:31:54,419 +to have better insight into learner + +836 +00:31:53,039 --> 00:31:56,159 +engagement learner progress and how + +837 +00:31:54,419 --> 00:31:58,380 +Learners are understanding the content + +838 +00:31:56,159 --> 00:31:59,640 +at very granular levels so they can make + +839 +00:31:58,380 --> 00:32:02,120 +decisions about their course in more + +840 +00:31:59,640 --> 00:32:02,120 +real time + +841 +00:32:02,760 --> 00:32:06,659 +in terms of developing this in the open + +842 +00:32:05,100 --> 00:32:08,460 +um this initiative is being driven by + +843 +00:32:06,659 --> 00:32:10,140 +the data working group and again their + +844 +00:32:08,460 --> 00:32:13,159 +their boards and all of their their work + +845 +00:32:10,140 --> 00:32:13,159 +is available in the public + +846 +00:32:14,220 --> 00:32:18,179 +and if you'd like a full view of all of + +847 +00:32:16,500 --> 00:32:19,679 +the areas of investment these are some + +848 +00:32:18,179 --> 00:32:21,779 +more highlights + +849 +00:32:19,679 --> 00:32:24,179 +um the best place to go is the open edx + +850 +00:32:21,779 --> 00:32:26,159 +roadmap + +851 +00:32:24,179 --> 00:32:28,140 +um I remember standing up here at the + +852 +00:32:26,159 --> 00:32:29,880 +conference last year saying that the + +853 +00:32:28,140 --> 00:32:31,559 +road map at that point was kind of a + +854 +00:32:29,880 --> 00:32:33,419 +little bit of an experiment and it was + +855 +00:32:31,559 --> 00:32:35,279 +more of um at that point it was more + +856 +00:32:33,419 --> 00:32:36,419 +like a directory of current initiatives + +857 +00:32:35,279 --> 00:32:37,620 +right we were asking everybody to + +858 +00:32:36,419 --> 00:32:38,580 +contribute the things that they were + +859 +00:32:37,620 --> 00:32:41,039 +building + +860 +00:32:38,580 --> 00:32:42,659 +and it is still that but I'm also happy + +861 +00:32:41,039 --> 00:32:44,520 +to say that we've we've moved beyond + +862 +00:32:42,659 --> 00:32:46,080 +that as well as we get these products + +863 +00:32:44,520 --> 00:32:48,240 +projects off the ground as we start to + +864 +00:32:46,080 --> 00:32:49,500 +build backlogs and prioritize the + +865 +00:32:48,240 --> 00:32:51,360 +roadmap is starting to develop a bit + +866 +00:32:49,500 --> 00:32:54,020 +more of a strategic Arc as well which is + +867 +00:32:51,360 --> 00:32:54,020 +really exciting + +868 +00:32:55,200 --> 00:32:58,620 +and one of the questions that I've heard + +869 +00:32:56,940 --> 00:33:00,179 +quite a bit from folks is like how do I + +870 +00:32:58,620 --> 00:33:02,340 +stay up to date how do I stay on top of + +871 +00:33:00,179 --> 00:33:04,380 +everything that's happening and so I + +872 +00:33:02,340 --> 00:33:06,000 +wanted to actually give a quick like 30 + +873 +00:33:04,380 --> 00:33:07,440 +second crash course on how to read the + +874 +00:33:06,000 --> 00:33:10,140 +road map well I've got everyone's + +875 +00:33:07,440 --> 00:33:11,640 +attention here + +876 +00:33:10,140 --> 00:33:14,240 +um so you can see that the roadmap is + +877 +00:33:11,640 --> 00:33:16,620 +organized by platform area at the top + +878 +00:33:14,240 --> 00:33:18,360 +there's a tab for every major area of + +879 +00:33:16,620 --> 00:33:19,980 +the platform and this is kind of your + +880 +00:33:18,360 --> 00:33:21,240 +navigation through the roadmap if + +881 +00:33:19,980 --> 00:33:22,919 +there's a specific area of the platform + +882 +00:33:21,240 --> 00:33:24,000 +that you're interested in you can go to + +883 +00:33:22,919 --> 00:33:27,659 +the tab + +884 +00:33:24,000 --> 00:33:29,760 +so you can see that this one is a + +885 +00:33:27,659 --> 00:33:32,179 +this one is highlighting the the content + +886 +00:33:29,760 --> 00:33:32,179 +libraries + +887 +00:33:33,539 --> 00:33:38,580 +every platform area has a set of tickets + +888 +00:33:36,299 --> 00:33:40,019 +so these tickets are high level right + +889 +00:33:38,580 --> 00:33:42,720 +they're meant to just capture an + +890 +00:33:40,019 --> 00:33:44,340 +overview of the project and give you a + +891 +00:33:42,720 --> 00:33:46,679 +quick overview of what the impact and + +892 +00:33:44,340 --> 00:33:48,240 +what the value of the project is + +893 +00:33:46,679 --> 00:33:49,919 +if you're interested in diving more + +894 +00:33:48,240 --> 00:33:52,980 +deeply into the projects at a course + +895 +00:33:49,919 --> 00:33:54,600 +grains view we also have a readme for + +896 +00:33:52,980 --> 00:33:57,059 +every section of the platform where we + +897 +00:33:54,600 --> 00:33:58,679 +link it out to the specific boards and + +898 +00:33:57,059 --> 00:34:01,260 +so for example if you're interested in + +899 +00:33:58,679 --> 00:34:03,419 +like the taxonomy project you can find a + +900 +00:34:01,260 --> 00:34:05,100 +link to that particular board here and + +901 +00:34:03,419 --> 00:34:06,360 +you can track at a more more detailed + +902 +00:34:05,100 --> 00:34:09,500 +level all of the issues that we've + +903 +00:34:06,360 --> 00:34:09,500 +groomed where we're currently at + +904 +00:34:12,359 --> 00:34:16,320 +and finally a quick reminder that the + +905 +00:34:14,460 --> 00:34:18,060 +roadmap is a still a collaborative + +906 +00:34:16,320 --> 00:34:19,740 +effort and we need everybody's help to + +907 +00:34:18,060 --> 00:34:20,700 +help us continue to build it and flesh + +908 +00:34:19,739 --> 00:34:22,980 +it out + +909 +00:34:20,699 --> 00:34:24,839 +there's two ways that you can + +910 +00:34:22,980 --> 00:34:26,480 +participate in getting your your voice + +911 +00:34:24,839 --> 00:34:29,879 +onto the roadmap + +912 +00:34:26,480 --> 00:34:32,879 +in the platform roadmap repo + +913 +00:34:29,879 --> 00:34:34,859 +we have two templates that are meant to + +914 +00:34:32,879 --> 00:34:38,159 +help you navigate your way through + +915 +00:34:34,859 --> 00:34:40,139 +contributing the first template is an + +916 +00:34:38,159 --> 00:34:42,119 +issue submission so if you have work + +917 +00:34:40,139 --> 00:34:44,159 +that's already in progress if you have + +918 +00:34:42,119 --> 00:34:45,060 +work that you'd like to contribute you + +919 +00:34:44,159 --> 00:34:47,339 +know put eventually through the pr + +920 +00:34:45,060 --> 00:34:49,679 +process there's a template to help you + +921 +00:34:47,339 --> 00:34:52,040 +add that at that contribution to the + +922 +00:34:49,679 --> 00:34:52,040 +roadmap + +923 +00:34:52,080 --> 00:34:58,740 +the second is a feature request + +924 +00:34:56,040 --> 00:35:00,599 +so this is newer if you want to see + +925 +00:34:58,740 --> 00:35:02,640 +something added to the roadmap but it's + +926 +00:35:00,599 --> 00:35:04,619 +not there there's a ticket template as + +927 +00:35:02,640 --> 00:35:06,420 +well to help you you can add it to our + +928 +00:35:04,619 --> 00:35:08,580 +backlog and we will + +929 +00:35:06,420 --> 00:35:10,380 +um have it have it visible + +930 +00:35:08,580 --> 00:35:12,359 +does this guarantee that we're going to + +931 +00:35:10,380 --> 00:35:15,720 +build that feature no not necessarily + +932 +00:35:12,359 --> 00:35:17,700 +it's up to the product organization of + +933 +00:35:15,720 --> 00:35:20,880 +openedx to help us prioritize that + +934 +00:35:17,700 --> 00:35:22,980 +backlog but this is the project that's a + +935 +00:35:20,880 --> 00:35:25,200 +duocracy right and if you want to + +936 +00:35:22,980 --> 00:35:27,599 +influence which projects get prioritized + +937 +00:35:25,200 --> 00:35:29,400 +this is an open invitation right join + +938 +00:35:27,599 --> 00:35:33,320 +the product working group that's the + +939 +00:35:29,400 --> 00:35:33,320 +best way to make your voice heard + +940 +00:35:35,579 --> 00:35:41,640 +and now I would like to invite up Adrian + +941 +00:35:39,720 --> 00:35:43,980 +our special guest + +942 +00:35:41,640 --> 00:35:46,560 +Adrian devison is the executive director + +943 +00:35:43,980 --> 00:35:48,119 +of Empower a not-for-profit organization + +944 +00:35:46,560 --> 00:35:49,920 +that teaches computer science to high + +945 +00:35:48,119 --> 00:35:51,119 +school students of color starting in the + +946 +00:35:49,920 --> 00:35:53,160 +ninth grade + +947 +00:35:51,119 --> 00:35:54,900 +Empower has been using the open edits + +948 +00:35:53,160 --> 00:35:56,760 +platform to deliver the online elements + +949 +00:35:54,900 --> 00:35:58,460 +of the curriculum and we're very honored + +950 +00:35:56,760 --> 00:36:09,119 +to have you here today Adrian + +951 +00:35:58,460 --> 00:36:11,400 +[Applause] + +952 +00:36:09,119 --> 00:36:13,200 +thank you um Adrian devison the + +953 +00:36:11,400 --> 00:36:15,780 +executive director of empower + +954 +00:36:13,200 --> 00:36:17,579 +Empower is a non-profit creating the + +955 +00:36:15,780 --> 00:36:18,480 +school to Career pipeline for students + +956 +00:36:17,579 --> 00:36:20,640 +of color + +957 +00:36:18,480 --> 00:36:22,800 +we teach software development as a + +958 +00:36:20,640 --> 00:36:25,200 +multi-year program to help increase + +959 +00:36:22,800 --> 00:36:27,540 +diversity in Tech and generational + +960 +00:36:25,200 --> 00:36:29,099 +poverty cycles and create an equitable + +961 +00:36:27,540 --> 00:36:31,440 +future for everybody + +962 +00:36:29,099 --> 00:36:32,940 +our students join our program in ninth + +963 +00:36:31,440 --> 00:36:34,740 +grade and remain throughout throughout + +964 +00:36:32,940 --> 00:36:36,060 +their whole High School career + +965 +00:36:34,740 --> 00:36:37,920 +in ninth grade they learned the + +966 +00:36:36,060 --> 00:36:39,780 +foundations of software development and + +967 +00:36:37,920 --> 00:36:43,020 +undergo leadership training + +968 +00:36:39,780 --> 00:36:45,300 +in 10th Grade they think of app ideas to + +969 +00:36:43,020 --> 00:36:47,640 +impact their community and then we have + +970 +00:36:45,300 --> 00:36:49,200 +a pitch competition and whoever wins we + +971 +00:36:47,640 --> 00:36:51,300 +actually build that app idea together + +972 +00:36:49,200 --> 00:36:52,920 +and the students then incorporate it so + +973 +00:36:51,300 --> 00:36:54,900 +we increase the number of minority and + +974 +00:36:52,920 --> 00:36:57,780 +women-owned businesses and show students + +975 +00:36:54,900 --> 00:36:59,880 +the power in their and their work + +976 +00:36:57,780 --> 00:37:01,500 +and the third year our students obtain + +977 +00:36:59,880 --> 00:37:03,420 +High School internships with our + +978 +00:37:01,500 --> 00:37:05,280 +partners and that helps our students + +979 +00:37:03,420 --> 00:37:07,680 +bring additional income especially for + +980 +00:37:05,280 --> 00:37:09,060 +our students in low-income areas and at + +981 +00:37:07,680 --> 00:37:10,740 +the same time make sure our students + +982 +00:37:09,060 --> 00:37:12,660 +graduate one to two years of experience + +983 +00:37:10,740 --> 00:37:14,520 +before they even leave High School + +984 +00:37:12,660 --> 00:37:17,220 +they continue those internships into + +985 +00:37:14,520 --> 00:37:18,480 +their final year and also learn you know + +986 +00:37:17,220 --> 00:37:20,640 +professional networking and solve + +987 +00:37:18,480 --> 00:37:22,020 +business skills so when they graduate we + +988 +00:37:20,640 --> 00:37:23,400 +can work for our partners to ensure that + +989 +00:37:22,020 --> 00:37:25,619 +they all have careers waiting on them + +990 +00:37:23,400 --> 00:37:27,780 +our current graduates make an average of + +991 +00:37:25,619 --> 00:37:31,020 +seventy thousand dollars within one year + +992 +00:37:27,780 --> 00:37:33,180 +of graduating high school + +993 +00:37:31,020 --> 00:37:34,619 +in order to scale a program like this + +994 +00:37:33,180 --> 00:37:36,119 +it's really hard to manually grade + +995 +00:37:34,619 --> 00:37:39,839 +everything so I had to start getting + +996 +00:37:36,119 --> 00:37:41,280 +creative and inspired by leak code I + +997 +00:37:39,839 --> 00:37:43,320 +decided that we can create a platform + +998 +00:37:41,280 --> 00:37:45,900 +that allows teachers to create an + +999 +00:37:43,320 --> 00:37:48,240 +assignment within a couple minutes and + +1000 +00:37:45,900 --> 00:37:50,700 +have it auto graded uh by a remote + +1001 +00:37:48,240 --> 00:37:53,160 +server this would also allow us to + +1002 +00:37:50,700 --> 00:37:55,920 +reduce costs by shipping every student a + +1003 +00:37:53,160 --> 00:37:58,440 +Macbook and at the same time + +1004 +00:37:55,920 --> 00:38:00,180 +we can um Support over 100 different + +1005 +00:37:58,440 --> 00:38:01,740 +languages so we can keep adding courses + +1006 +00:38:00,180 --> 00:38:03,359 +as we go along + +1007 +00:38:01,740 --> 00:38:05,339 +and the spirit of democratizing + +1008 +00:38:03,359 --> 00:38:07,140 +Education we made sure this was free and + +1009 +00:38:05,339 --> 00:38:11,000 +open source available for everyone on + +1010 +00:38:07,140 --> 00:38:11,000 +GitHub to contribute to and utilize + +1011 +00:38:11,220 --> 00:38:16,400 +so here's a demo of coppin our platform + +1012 +00:38:16,800 --> 00:38:20,640 +we start on the assignments dashboard + +1013 +00:38:18,540 --> 00:38:23,099 +and then we can go down and we can + +1014 +00:38:20,640 --> 00:38:25,079 +actually create a new assignment + +1015 +00:38:23,099 --> 00:38:26,820 +we give the assignment a title and we'll + +1016 +00:38:25,079 --> 00:38:28,380 +start with hello world because we're all + +1017 +00:38:26,820 --> 00:38:30,720 +developers here + +1018 +00:38:28,380 --> 00:38:33,180 +we give it a reference ID and this was + +1019 +00:38:30,720 --> 00:38:35,880 +what edx will use to know which problem + +1020 +00:38:33,180 --> 00:38:38,579 +to solve you can give it a total + +1021 +00:38:35,880 --> 00:38:40,980 +attempts which zero means unlimited and + +1022 +00:38:38,579 --> 00:38:43,140 +anything above that is the actual number + +1023 +00:38:40,980 --> 00:38:44,280 +then we use markdown to paste the + +1024 +00:38:43,140 --> 00:38:47,160 +instructions + +1025 +00:38:44,280 --> 00:38:48,839 +a success message and a failure message + +1026 +00:38:47,160 --> 00:38:51,180 +to encourage your students in case they + +1027 +00:38:48,839 --> 00:38:53,760 +don't uh complete the problem + +1028 +00:38:51,180 --> 00:38:55,619 +we can scroll down then and we go to our + +1029 +00:38:53,760 --> 00:38:57,420 +assignment codes where we can add Which + +1030 +00:38:55,619 --> 00:38:59,640 +languages the students will complete it + +1031 +00:38:57,420 --> 00:39:01,079 +in and any unit tests that are used to + +1032 +00:38:59,640 --> 00:39:03,480 +grade this + +1033 +00:39:01,079 --> 00:39:05,220 +so we select our language we can decide + +1034 +00:39:03,480 --> 00:39:07,020 +if it's the primary language + +1035 +00:39:05,220 --> 00:39:10,800 +we can then decide if it's injectable + +1036 +00:39:07,020 --> 00:39:12,540 +code which means we will hide + +1037 +00:39:10,800 --> 00:39:14,700 +all the code you may need to run unit + +1038 +00:39:12,540 --> 00:39:15,960 +tests and have these brackets and that's + +1039 +00:39:14,700 --> 00:39:17,220 +all the student will actually see is + +1040 +00:39:15,960 --> 00:39:18,720 +that empty space where the code's + +1041 +00:39:17,220 --> 00:39:21,060 +injected + +1042 +00:39:18,720 --> 00:39:22,500 +we can provide an optional solution code + +1043 +00:39:21,060 --> 00:39:24,000 +in case you want your students to be + +1044 +00:39:22,500 --> 00:39:24,839 +able to view the actual solution to the + +1045 +00:39:24,000 --> 00:39:27,119 +problem + +1046 +00:39:24,839 --> 00:39:29,640 +and lastly we give our unit tests to + +1047 +00:39:27,119 --> 00:39:31,859 +actually grade the assignment against + +1048 +00:39:29,640 --> 00:39:34,020 +then we simply click save + +1049 +00:39:31,859 --> 00:39:36,240 +you can add as many languages as you + +1050 +00:39:34,020 --> 00:39:37,859 +want that are supported by your server + +1051 +00:39:36,240 --> 00:39:41,099 +and it's really easy to add a language + +1052 +00:39:37,859 --> 00:39:43,619 +all you do is give it a name a mime + +1053 +00:39:41,099 --> 00:39:45,720 +that's from code mirror a regex that + +1054 +00:39:43,619 --> 00:39:49,920 +helps us parse the actual unit test + +1055 +00:39:45,720 --> 00:39:52,800 +error and a code mirror URL + +1056 +00:39:49,920 --> 00:39:55,800 +and once we do that + +1057 +00:39:52,800 --> 00:39:58,020 +we can then go into seeing how um + +1058 +00:39:55,800 --> 00:40:00,300 +we bring this live in edx + +1059 +00:39:58,020 --> 00:40:03,720 +and so just like creating any other + +1060 +00:40:00,300 --> 00:40:04,740 +problem uh from a x-block is go to + +1061 +00:40:03,720 --> 00:40:07,980 +Advanced + +1062 +00:40:04,740 --> 00:40:11,400 +you'll select Swift plugin + +1063 +00:40:07,980 --> 00:40:13,740 +and then it'll load it into your screen + +1064 +00:40:11,400 --> 00:40:16,740 +after that we click edit and all you + +1065 +00:40:13,740 --> 00:40:19,320 +have to pass in is the reference ID the + +1066 +00:40:16,740 --> 00:40:21,720 +URL to the cop in server + +1067 +00:40:19,320 --> 00:40:24,560 +and then the API key given to your user + +1068 +00:40:21,720 --> 00:40:24,560 +on coppin + +1069 +00:40:25,740 --> 00:40:30,900 +and after that we can simply publish the + +1070 +00:40:28,500 --> 00:40:32,280 +assignment and we'll see it + +1071 +00:40:30,900 --> 00:40:34,520 +and we can actually view the live + +1072 +00:40:32,280 --> 00:40:34,520 +version + +1073 +00:40:34,560 --> 00:40:37,940 +once our video catches up + +1074 +00:40:39,599 --> 00:40:44,220 +and right here we see the markdown is + +1075 +00:40:41,880 --> 00:40:45,900 +formatted as HTML + +1076 +00:40:44,220 --> 00:40:48,060 +and we the student can select any + +1077 +00:40:45,900 --> 00:40:49,859 +languages we only gave it one so they + +1078 +00:40:48,060 --> 00:40:52,560 +can only select Swift + +1079 +00:40:49,859 --> 00:40:53,520 +and then we can actually start writing + +1080 +00:40:52,560 --> 00:40:55,020 +our code + +1081 +00:40:53,520 --> 00:40:57,060 +now it's supposed to write hello world + +1082 +00:40:55,020 --> 00:40:59,040 +but our student just wrote hello + +1083 +00:40:57,060 --> 00:41:01,920 +so it's successfully outputted the code + +1084 +00:40:59,040 --> 00:41:03,359 +but then when they go to test it we'll + +1085 +00:41:01,920 --> 00:41:04,800 +notice that it's going to give them an + +1086 +00:41:03,359 --> 00:41:07,200 +error of course + +1087 +00:41:04,800 --> 00:41:09,599 +and so what it does is it tests the code + +1088 +00:41:07,200 --> 00:41:10,800 +on our our doctor server is what we + +1089 +00:41:09,599 --> 00:41:12,119 +named it + +1090 +00:41:10,800 --> 00:41:13,619 +and it gives them back the unit test + +1091 +00:41:12,119 --> 00:41:15,060 +failure + +1092 +00:41:13,619 --> 00:41:16,980 +and so now the student can go and + +1093 +00:41:15,060 --> 00:41:19,260 +correct the error + +1094 +00:41:16,980 --> 00:41:21,300 +submit the code again + +1095 +00:41:19,260 --> 00:41:24,240 +and now I want to successfully test and + +1096 +00:41:21,300 --> 00:41:27,500 +pass it'll actually update the grade for + +1097 +00:41:24,240 --> 00:41:27,500 +the student assignments for them + +1098 +00:41:28,079 --> 00:41:31,880 +and yay now you're a developer + +1099 +00:41:31,980 --> 00:41:35,220 +because we gave them an optional + +1100 +00:41:33,900 --> 00:41:36,839 +solution code they can click the + +1101 +00:41:35,220 --> 00:41:39,240 +solution tab to view what the solution + +1102 +00:41:36,839 --> 00:41:41,160 +was as well + +1103 +00:41:39,240 --> 00:41:42,060 +and so in less than three minutes you + +1104 +00:41:41,160 --> 00:41:44,579 +can create + +1105 +00:41:42,060 --> 00:41:47,700 +and and allow your students to run + +1106 +00:41:44,579 --> 00:41:50,420 +programming assignments on your server + +1107 +00:41:47,700 --> 00:41:55,309 +so how you can help + +1108 +00:41:50,420 --> 00:41:55,309 +[Applause] + +1109 +00:41:55,920 --> 00:42:00,540 +well yeah how you can help + +1110 +00:41:58,339 --> 00:42:01,980 +internships for any of you who know of + +1111 +00:42:00,540 --> 00:42:03,900 +any our students are always looking for + +1112 +00:42:01,980 --> 00:42:06,599 +internships what I like to tell people + +1113 +00:42:03,900 --> 00:42:08,579 +is in the school we operate primarily + +1114 +00:42:06,599 --> 00:42:11,220 +out of in South Atlanta High School the + +1115 +00:42:08,579 --> 00:42:12,960 +average income for a household as a + +1116 +00:42:11,220 --> 00:42:13,920 +total household income is ten dollars an + +1117 +00:42:12,960 --> 00:42:16,619 +hour + +1118 +00:42:13,920 --> 00:42:18,720 +so lots of our students don't eat or + +1119 +00:42:16,619 --> 00:42:21,900 +they don't have clothes and the average + +1120 +00:42:18,720 --> 00:42:24,599 +software development intern makes 25 an + +1121 +00:42:21,900 --> 00:42:26,700 +hour so providing an internship to these + +1122 +00:42:24,599 --> 00:42:29,339 +students you're effectively tripling the + +1123 +00:42:26,700 --> 00:42:32,640 +income of that household for the year + +1124 +00:42:29,339 --> 00:42:34,200 +donations go to uh buying more MacBooks + +1125 +00:42:32,640 --> 00:42:36,660 +for the students we provide them all + +1126 +00:42:34,200 --> 00:42:38,099 +with free MacBooks headphones internet + +1127 +00:42:36,660 --> 00:42:40,260 +grants if they don't have internet at + +1128 +00:42:38,099 --> 00:42:42,000 +home meal plans for our low-income + +1129 +00:42:40,260 --> 00:42:43,920 +students and clothes for those who don't + +1130 +00:42:42,000 --> 00:42:47,099 +have them as well + +1131 +00:42:43,920 --> 00:42:48,660 +and volunteers developing Captain took a + +1132 +00:42:47,099 --> 00:42:49,980 +long time and if you check my GitHub + +1133 +00:42:48,660 --> 00:42:51,040 +history I was still submitting stuff + +1134 +00:42:49,980 --> 00:42:54,560 +last night + +1135 +00:42:51,040 --> 00:42:54,560 +[Laughter] + +1136 +00:42:55,520 --> 00:43:00,960 +so anyone who's good with security I'd + +1137 +00:42:59,579 --> 00:43:03,300 +love for you to come on because I was + +1138 +00:43:00,960 --> 00:43:05,640 +not a cyber security engineer + +1139 +00:43:03,300 --> 00:43:07,740 +um ux as well that was never my strong + +1140 +00:43:05,640 --> 00:43:10,079 +point but writing the code I got that + +1141 +00:43:07,740 --> 00:43:12,599 +done and so um I'd love for you to come + +1142 +00:43:10,079 --> 00:43:15,180 +in and help out help build coppin into + +1143 +00:43:12,599 --> 00:43:16,130 +something even bigger + +1144 +00:43:15,180 --> 00:43:30,060 +thank you + +1145 +00:43:16,130 --> 00:43:32,520 +[Applause] + +1146 +00:43:30,060 --> 00:43:34,319 +so we're all going to be up here for + +1147 +00:43:32,520 --> 00:43:37,020 +questions feel free to ask questions of + +1148 +00:43:34,319 --> 00:43:40,280 +myself Jenna or Adrian that was that was + +1149 +00:43:37,020 --> 00:43:40,280 +fantastic thank you + +1150 +00:43:41,040 --> 00:43:45,000 +and there are mics down here so please + +1151 +00:43:43,260 --> 00:43:48,660 +please come in the mic so we can record + +1152 +00:43:45,000 --> 00:43:50,280 +your question if you have one + +1153 +00:43:48,660 --> 00:43:51,900 +you have a question raise your hand + +1154 +00:43:50,280 --> 00:43:55,160 +anyone + +1155 +00:43:51,900 --> 00:43:55,160 +no they nailed it + +1156 +00:43:58,920 --> 00:44:01,640 +are these live + +1157 +00:44:02,460 --> 00:44:07,740 +I didn't see one and maybe I missed it + +1158 +00:44:04,140 --> 00:44:09,960 +in the slide is there a URL or a QR code + +1159 +00:44:07,740 --> 00:44:11,160 +for Empower + +1160 +00:44:09,960 --> 00:44:13,640 +um yeah I should have put one in the + +1161 +00:44:11,160 --> 00:44:16,640 +slide huh but um + +1162 +00:44:13,640 --> 00:44:16,640 +empowerco.org + +1163 +00:44:16,819 --> 00:44:21,540 +empowrco.org and I'll be sure to you can + +1164 +00:44:20,040 --> 00:44:23,460 +also Google that and you'll find the + +1165 +00:44:21,540 --> 00:44:26,180 +GitHub that's cop in and the rest of our + +1166 +00:44:23,460 --> 00:44:26,180 +servers on it + +1167 +00:44:27,500 --> 00:44:32,280 +I want to ask Adrian how you do + +1168 +00:44:30,420 --> 00:44:34,140 +presentations that smoothly I'm I'm + +1169 +00:44:32,280 --> 00:44:36,560 +inspired in a number of ways by you + +1170 +00:44:34,140 --> 00:44:36,560 +right now + +1171 +00:44:48,480 --> 00:44:53,220 +um obviously a generative ADI is a + +1172 +00:44:51,300 --> 00:44:57,480 +buzzword recently + +1173 +00:44:53,220 --> 00:45:01,680 +um is there any plan to incorporate AI + +1174 +00:44:57,480 --> 00:45:04,339 +tools into the product Romance + +1175 +00:45:01,680 --> 00:45:06,900 +a great question and + +1176 +00:45:04,339 --> 00:45:09,599 +not at the moment + +1177 +00:45:06,900 --> 00:45:11,819 +um I was just going to say like as Jenna + +1178 +00:45:09,599 --> 00:45:15,720 +was was unpacking for us the the road + +1179 +00:45:11,819 --> 00:45:18,300 +map is generated by this group of people + +1180 +00:45:15,720 --> 00:45:20,040 +here and not just the the folks at the + +1181 +00:45:18,300 --> 00:45:21,599 +front of the room so + +1182 +00:45:20,040 --> 00:45:24,060 +um + +1183 +00:45:21,599 --> 00:45:25,260 +there's probably a unpopular opinion + +1184 +00:45:24,060 --> 00:45:27,180 +since everybody's so excited about + +1185 +00:45:25,260 --> 00:45:29,579 +generative AI right now but I think + +1186 +00:45:27,180 --> 00:45:31,079 +let's let's think about the value we + +1187 +00:45:29,579 --> 00:45:32,640 +want to provide to our Learners and how + +1188 +00:45:31,079 --> 00:45:34,560 +we want to change their lives rather + +1189 +00:45:32,640 --> 00:45:37,440 +than finding a way to use a technology + +1190 +00:45:34,560 --> 00:45:39,599 +that really looks really cool but if we + +1191 +00:45:37,440 --> 00:45:41,400 +have ideas about how we will really + +1192 +00:45:39,599 --> 00:45:42,839 +impact the lives of our Learners with + +1193 +00:45:41,400 --> 00:45:46,260 +generative AI let's get them on the + +1194 +00:45:42,839 --> 00:45:48,180 +roadmap and let's get everybody kind of + +1195 +00:45:46,260 --> 00:45:49,800 +refining those ideas and helping us + +1196 +00:45:48,180 --> 00:45:52,400 +prioritize them and understanding what + +1197 +00:45:49,800 --> 00:45:52,400 +we should be building + +1198 +00:45:54,119 --> 00:45:59,160 +yeah so I have a question for you Jenna + +1199 +00:45:55,980 --> 00:46:01,740 +I'm really Amazed by what you achieved + +1200 +00:45:59,160 --> 00:46:04,079 +in just one year I'm curious to have + +1201 +00:46:01,740 --> 00:46:06,240 +your perspective on what are the unique + +1202 +00:46:04,079 --> 00:46:09,060 +challenges that you would face on + +1203 +00:46:06,240 --> 00:46:12,300 +defining a product for an open source + +1204 +00:46:09,060 --> 00:46:16,260 +Community where people can just join in + +1205 +00:46:12,300 --> 00:46:18,180 +and propose to to build stuff that + +1206 +00:46:16,260 --> 00:46:20,700 +that's not that's not necessarily on the + +1207 +00:46:18,180 --> 00:46:22,260 +roadmap yeah that's a great question I + +1208 +00:46:20,700 --> 00:46:24,780 +think one of the biggest challenges that + +1209 +00:46:22,260 --> 00:46:25,920 +we've run into which is kind of it's you + +1210 +00:46:24,780 --> 00:46:27,000 +know challenges are always opportunities + +1211 +00:46:25,920 --> 00:46:28,260 +right + +1212 +00:46:27,000 --> 00:46:30,180 +um but the biggest challenge is that + +1213 +00:46:28,260 --> 00:46:32,220 +there are so many use cases that the + +1214 +00:46:30,180 --> 00:46:35,280 +platform is used for which is great + +1215 +00:46:32,220 --> 00:46:38,160 +right but it presents some challenges in + +1216 +00:46:35,280 --> 00:46:41,339 +terms of deciding what we prioritize + +1217 +00:46:38,160 --> 00:46:43,740 +um a couple of examples right we've got + +1218 +00:46:41,339 --> 00:46:45,540 +the platform is running moocs and online + +1219 +00:46:43,740 --> 00:46:47,160 +degrees right those are two very very + +1220 +00:46:45,540 --> 00:46:48,660 +different sets of features that are + +1221 +00:46:47,160 --> 00:46:49,819 +required to make those use cases + +1222 +00:46:48,660 --> 00:46:52,619 +successful + +1223 +00:46:49,819 --> 00:46:54,300 +but in terms of this this kind of goes + +1224 +00:46:52,619 --> 00:46:55,560 +to the core product offering which is + +1225 +00:46:54,300 --> 00:46:56,579 +one of the things I touched on what + +1226 +00:46:55,560 --> 00:46:58,740 +we'll talk about this more later + +1227 +00:46:56,579 --> 00:47:00,359 +tomorrow as well one of the the + +1228 +00:46:58,740 --> 00:47:01,980 +strategies for the platform is that we + +1229 +00:47:00,359 --> 00:47:04,140 +want to simplify it so that we've got a + +1230 +00:47:01,980 --> 00:47:06,300 +core that can support as much diversity + +1231 +00:47:04,140 --> 00:47:08,940 +as possible and this concept of the + +1232 +00:47:06,300 --> 00:47:11,220 +catalog system where we can be adding + +1233 +00:47:08,940 --> 00:47:12,599 +indexing and adding tools that you can + +1234 +00:47:11,220 --> 00:47:14,400 +use that are based on the type of + +1235 +00:47:12,599 --> 00:47:16,020 +customization you want to build so what + +1236 +00:47:14,400 --> 00:47:18,000 +you're teaching or the type of teaching + +1237 +00:47:16,020 --> 00:47:20,520 +that you're doing so the idea is that we + +1238 +00:47:18,000 --> 00:47:22,500 +simplify in order to broaden out again + +1239 +00:47:20,520 --> 00:47:23,940 +and I think that's that's one of the + +1240 +00:47:22,500 --> 00:47:26,339 +strategies that we've used to to + +1241 +00:47:23,940 --> 00:47:28,260 +approach that but relatedly though is + +1242 +00:47:26,339 --> 00:47:29,460 +that there's because there's so many use + +1243 +00:47:28,260 --> 00:47:31,079 +cases they're coming from so many + +1244 +00:47:29,460 --> 00:47:33,240 +different organizations so we're not + +1245 +00:47:31,079 --> 00:47:34,920 +just building for one particular set of + +1246 +00:47:33,240 --> 00:47:36,720 +customers or one set of clients or one + +1247 +00:47:34,920 --> 00:47:39,300 +one group of people we're building for + +1248 +00:47:36,720 --> 00:47:41,520 +everybody like exponentially and so + +1249 +00:47:39,300 --> 00:47:44,040 +working with different methods to try + +1250 +00:47:41,520 --> 00:47:45,480 +and gather user stories from various + +1251 +00:47:44,040 --> 00:47:47,099 +stakeholders across the community has + +1252 +00:47:45,480 --> 00:47:50,579 +been one tactic that we've used to try + +1253 +00:47:47,099 --> 00:47:52,140 +and get a broader representation of you + +1254 +00:47:50,579 --> 00:47:54,240 +know needs and pain points across the + +1255 +00:47:52,140 --> 00:47:56,640 +community but yeah we're always open to + +1256 +00:47:54,240 --> 00:47:58,859 +continuing to like evolve those Concepts + +1257 +00:47:56,640 --> 00:48:00,000 +and ideas and you know hopefully we'll + +1258 +00:47:58,859 --> 00:48:01,680 +be able to tap into some more + +1259 +00:48:00,000 --> 00:48:02,940 +experimental modes in the next year as + +1260 +00:48:01,680 --> 00:48:05,040 +well + +1261 +00:48:02,940 --> 00:48:08,000 +we have one last question + +1262 +00:48:05,040 --> 00:48:08,000 +from anyone + +1263 +00:48:11,339 --> 00:48:17,280 +I would love to hear about one or two of + +1264 +00:48:13,980 --> 00:48:20,540 +the student app ideas that Empower that + +1265 +00:48:17,280 --> 00:48:20,540 +the students wanted to build + +1266 +00:48:20,940 --> 00:48:25,920 +yeah yeah definitely so the one we're + +1267 +00:48:23,460 --> 00:48:26,940 +building now is the students decided + +1268 +00:48:25,920 --> 00:48:28,859 +that + +1269 +00:48:26,940 --> 00:48:32,520 +um job boards are just boring for them + +1270 +00:48:28,859 --> 00:48:34,740 +they don't find indeed and monster and + +1271 +00:48:32,520 --> 00:48:38,400 +all those entertaining to use so they're + +1272 +00:48:34,740 --> 00:48:41,160 +basically making a job board for their + +1273 +00:48:38,400 --> 00:48:43,680 +generation where you can apply kind of + +1274 +00:48:41,160 --> 00:48:45,960 +how you would use tick tock you can uh + +1275 +00:48:43,680 --> 00:48:48,119 +companies would show you cool trendy + +1276 +00:48:45,960 --> 00:48:49,859 +videos of their workplace and your + +1277 +00:48:48,119 --> 00:48:51,480 +application would start by an + +1278 +00:48:49,859 --> 00:48:53,040 +introduction using that kind of same + +1279 +00:48:51,480 --> 00:48:55,380 +video technology where you show short + +1280 +00:48:53,040 --> 00:48:56,940 +clips of yourself and what you've done + +1281 +00:48:55,380 --> 00:48:58,800 +and then after that of course you still + +1282 +00:48:56,940 --> 00:49:00,540 +have your resume but it kind of makes a + +1283 +00:48:58,800 --> 00:49:02,220 +more personal approach to job + +1284 +00:49:00,540 --> 00:49:04,800 +applications in a way that speaks to + +1285 +00:49:02,220 --> 00:49:08,579 +their generation and so that one to me + +1286 +00:49:04,800 --> 00:49:11,040 +was really cool and um the cohort before + +1287 +00:49:08,579 --> 00:49:12,900 +them they that was the middle of the + +1288 +00:49:11,040 --> 00:49:14,520 +pandemic and they had trouble making + +1289 +00:49:12,900 --> 00:49:15,240 +friends as they were going through High + +1290 +00:49:14,520 --> 00:49:17,460 +School + +1291 +00:49:15,240 --> 00:49:19,859 +they had additional trouble because they + +1292 +00:49:17,460 --> 00:49:23,280 +couldn't get outside and so they decided + +1293 +00:49:19,859 --> 00:49:25,380 +to create a skating app that its whole + +1294 +00:49:23,280 --> 00:49:27,359 +purpose was to get anybody who like to + +1295 +00:49:25,380 --> 00:49:29,280 +ride wheels on bicycles skateboards or + +1296 +00:49:27,359 --> 00:49:31,680 +anything to be able to come together and + +1297 +00:49:29,280 --> 00:49:33,180 +to kind of throw off skating events and + +1298 +00:49:31,680 --> 00:49:36,060 +so um they had a couple of different + +1299 +00:49:33,180 --> 00:49:36,900 +unique ideas and so I'm really proud to + +1300 +00:49:36,060 --> 00:49:38,880 +um + +1301 +00:49:36,900 --> 00:49:40,680 +to be able to watch it grow and they + +1302 +00:49:38,880 --> 00:49:44,839 +have a bunch of other ideas and I still + +1303 +00:49:40,680 --> 00:49:44,839 +hope they create that weren't chosen so + +1304 +00:49:45,960 --> 00:49:50,949 +[Applause] + diff --git a/demo-course/course/static/48c991fb-083c-45e1-adad-930d2b11b11e-es.srt b/demo-course/course/static/48c991fb-083c-45e1-adad-930d2b11b11e-es.srt new file mode 100644 index 0000000..9708322 --- /dev/null +++ b/demo-course/course/static/48c991fb-083c-45e1-adad-930d2b11b11e-es.srt @@ -0,0 +1,5220 @@ +0 +00:00:01,199 --> 00:00:04,380 +Um, a continuación vamos a escuchar + +1 +00:00:02,520 --> 00:00:06,240 +sobre el estado de open edx de Ed + +2 +00:00:04,380 --> 00:00:08,519 +xericore y jenna mikowski del + +3 +00:00:06,240 --> 00:00:09,840 +Centro para reinventar el aprendizaje que es + +4 +00:00:08,519 --> 00:00:11,519 +el vicepresidente de ingeniería de + +5 +00:00:09,840 --> 00:00:13,080 +el proyecto open edx y la presidencia de + +6 +00:00:11,519 --> 00:00:15,000 +la supervisión técnica de openatix + +7 +00:00:13,080 --> 00:00:17,039 +comité Jenna es el proyecto senior + +8 +00:00:15,000 --> 00:00:19,320 +responsable del proyecto adictos abiertos y + +9 +00:00:17,039 --> 00:00:21,300 +líder del producto open edit open edx + +10 +00:00:19,320 --> 00:00:25,250 +grupo de trabajo de productos y también + +11 +00:00:21,300 --> 00:00:32,079 +Estar acompañado por un invitado especial, Ed. + +12 +00:00:25,250 --> 00:00:32,079 +[Aplausos] + +13 +00:00:32,880 --> 00:00:36,899 +gracias a todos, ¿pueden oírme bien? + +14 +00:00:34,980 --> 00:00:37,860 +sí, está bien + +15 +00:00:36,899 --> 00:00:40,620 +uno + +16 +00:00:37,860 --> 00:00:42,980 +bienvenido a open edx y bienvenido al + +17 +00:00:40,620 --> 00:00:45,840 +estado de la charla open edx + +18 +00:00:42,980 --> 00:00:48,420 +siempre es súper energizante para mí + +19 +00:00:45,840 --> 00:00:49,860 +Mirar a la multitud y ver + +20 +00:00:48,420 --> 00:00:51,559 +muchas caras conocidas personas que tienen + +21 +00:00:49,860 --> 00:00:53,719 +estado trabajando en este proyecto + +22 +00:00:51,559 --> 00:00:57,059 +durante tantos años + +23 +00:00:53,719 --> 00:00:58,440 +Realmente disfruto este evento y me mantiene + +24 +00:00:57,059 --> 00:01:00,079 +va por lo que queda del año + +25 +00:00:58,440 --> 00:01:02,699 +cada año podemos reunirnos en persona + +26 +00:01:00,079 --> 00:01:04,379 +Así que me alegro de que hayamos superado los tiempos de Cova. + +27 +00:01:02,699 --> 00:01:05,880 +y estamos aquí juntos de nuevo por el + +28 +00:01:04,379 --> 00:01:07,799 +segundo año consecutivo + +29 +00:01:05,880 --> 00:01:10,260 +Quería mencionar brevemente algunos + +30 +00:01:07,799 --> 00:01:12,720 +cosas de limpieza si estás publicando si + +31 +00:01:10,260 --> 00:01:15,360 +estás twitteando en Twitter, uh, nosotros + +32 +00:01:12,720 --> 00:01:19,040 +tener un hashtag para los materiales de la conferencia + +33 +00:01:15,360 --> 00:01:22,259 +así que utilice el hashtag open edx 2023 + +34 +00:01:19,040 --> 00:01:24,240 +y si tienes alguna duda o contenido + +35 +00:01:22,259 --> 00:01:26,400 +que quieres publicar para la gente del + +36 +00:01:24,240 --> 00:01:28,200 +conferencia por favor utilice el canal de eventos + +37 +00:01:26,400 --> 00:01:30,720 +en el edx abierto Slack si no lo estás + +38 +00:01:28,200 --> 00:01:34,400 +registrado puedes seguir ese bitly + +39 +00:01:30,720 --> 00:01:34,400 +enlace para registrarse + +40 +00:01:34,500 --> 00:01:39,860 +y quería empezar por ya sabes + +41 +00:01:37,740 --> 00:01:43,740 +Realmente aprecié la presentación de Cheryl. + +42 +00:01:39,860 --> 00:01:46,619 +pero quería empezar agradeciendo al MIT open + +43 +00:01:43,740 --> 00:01:48,119 +conocer su generoso apoyo en + +44 +00:01:46,619 --> 00:01:50,280 +patrocinándonos y permitiéndonos usar el + +45 +00:01:48,119 --> 00:01:51,259 +El espacio en el MIT ha hecho que esta conferencia + +46 +00:01:50,280 --> 00:01:53,340 +posible + +47 +00:01:51,259 --> 00:01:55,619 +sabes como ella dijo que estamos en uno de los + +48 +00:01:53,340 --> 00:01:58,500 +Las aulas más emblemáticas de todo el MIT. + +49 +00:01:55,619 --> 00:02:01,259 +que no inspira en lo más mínimo + +50 +00:01:58,500 --> 00:02:03,180 +síndrome del impostor en absoluto + +51 +00:02:01,259 --> 00:02:05,939 +um, pero demos otra ronda de + +52 +00:02:03,180 --> 00:02:08,299 +Un aplauso para la gente del MIT por + +53 +00:02:05,939 --> 00:02:08,299 +hospedarnos + +54 +00:02:08,538 --> 00:02:15,459 +[Aplausos] + +55 +00:02:15,540 --> 00:02:21,000 +um y estoy especialmente agradecido de estar en + +56 +00:02:18,180 --> 00:02:22,620 +MIT este año y será anfitrión de parte de + +57 +00:02:21,000 --> 00:02:25,379 +nuestra conferencia en el centro de estadísticas + +58 +00:02:22,620 --> 00:02:27,720 +porque es literalmente donde se abre + +59 +00:02:25,379 --> 00:02:30,060 +El proyecto edx comenzó. Mencioné esto en + +60 +00:02:27,720 --> 00:02:33,000 +la carta de bienvenida en el programa pero + +61 +00:02:30,060 --> 00:02:34,680 +las primeras líneas de código que uh eso + +62 +00:02:33,000 --> 00:02:38,099 +se escribieron que ahora son la plataforma + +63 +00:02:34,680 --> 00:02:40,319 +que todos trabajamos y usamos hoy fueron + +64 +00:02:38,099 --> 00:02:43,860 +escrito en una pequeña habitación en el tercer + +65 +00:02:40,319 --> 00:02:45,959 +piso del centro de estatus en 2011. uh + +66 +00:02:43,860 --> 00:02:47,879 +aclarar que no estuve involucrado en 2011 + +67 +00:02:45,959 --> 00:02:49,560 +Llegué más tarde en el proyecto pero + +68 +00:02:47,879 --> 00:02:52,680 +en realidad tengo un ingeniero que trabaja en + +69 +00:02:49,560 --> 00:02:54,480 +tcrill hoy quién estuvo entre los primeros + +70 +00:02:52,680 --> 00:02:56,700 +Tres ingenieros apretujados en el tercero. + +71 +00:02:54,480 --> 00:02:58,800 +piso del Stata Center uh escribiendo el + +72 +00:02:56,700 --> 00:03:01,019 +plataforma y por eso se siente realmente + +73 +00:02:58,800 --> 00:03:04,260 +importante estar de vuelta en el MIT en stata + +74 +00:03:01,019 --> 00:03:06,480 +este año ya que estamos lanzando o + +75 +00:03:04,260 --> 00:03:09,420 +Continuando nuestro viaje como código abierto. + +76 +00:03:06,480 --> 00:03:12,300 +proyecto y tratando de convertirme en el + +77 +00:03:09,420 --> 00:03:14,840 +duocacia inclusiva que aspiramos a ser + +78 +00:03:12,300 --> 00:03:14,840 +como un proyecto + +79 +00:03:15,480 --> 00:03:21,239 +y quiero agradecer también a nuestros patrocinadores + +80 +00:03:18,680 --> 00:03:25,879 +nuestro primer patrocinador nuestra piedra angular + +81 +00:03:21,239 --> 00:03:25,879 +El patrocinador es una universidad tecnológica. + +82 +00:03:27,319 --> 00:03:33,360 +UTech es una organización de Uruguay + +83 +00:03:30,420 --> 00:03:35,459 +que se concentra en brindar + +84 +00:03:33,360 --> 00:03:38,519 +oportunidades educativas para la universidad + +85 +00:03:35,459 --> 00:03:40,860 +estudiantes fuera de las áreas urbanas que + +86 +00:03:38,519 --> 00:03:44,340 +servir a estudiantes en las 19 provincias de + +87 +00:03:40,860 --> 00:03:46,860 +Uruguay y la mayoría de sus + +88 +00:03:44,340 --> 00:03:49,019 +los estudiantes son los primeros el primer estudiante + +89 +00:03:46,860 --> 00:03:50,159 +asistir a la Universidad y a su familia para + +90 +00:03:49,019 --> 00:03:53,340 +es una misión realmente genial + +91 +00:03:50,159 --> 00:03:55,140 +han estado usando openx desde 2014. + +92 +00:03:53,340 --> 00:03:58,340 +Estamos contentos de tenerlos aquí y + +93 +00:03:55,140 --> 00:03:58,340 +realmente aprecio su patrocinio + +94 +00:04:02,780 --> 00:04:08,099 +y nuestro patrocinador principal es edley también + +95 +00:04:06,659 --> 00:04:10,200 +miembros antiguos de la comunidad + +96 +00:04:08,099 --> 00:04:14,220 +han contribuido a la apertura + +97 +00:04:10,200 --> 00:04:16,680 +Proyecto edx desde 2013. Proporcionan una + +98 +00:04:14,220 --> 00:04:20,100 +amplia gama de servicios relacionados con la + +99 +00:04:16,680 --> 00:04:22,199 +la plataforma Ed Lee UTech y el resto + +100 +00:04:20,100 --> 00:04:24,360 +de nuestros patrocinadores tienen mesas en el + +101 +00:04:22,199 --> 00:04:26,460 +patrocinador Hall os animo a que paséis por aquí + +102 +00:04:24,360 --> 00:04:30,860 +y hablar con ellos y entender lo que + +103 +00:04:26,460 --> 00:04:30,860 +Lo están haciendo gracias a Edley también. + +104 +00:04:34,320 --> 00:04:38,160 +Así que entremos en el meollo del asunto. + +105 +00:04:36,060 --> 00:04:40,680 +presentación y revisión del estado de + +106 +00:04:38,160 --> 00:04:43,520 +open edx y esta presentación va + +107 +00:04:40,680 --> 00:04:46,259 +dividirse en tres segmentos + +108 +00:04:43,520 --> 00:04:47,240 +Voy a hablar del presente de + +109 +00:04:46,259 --> 00:04:49,560 +el proyecto + +110 +00:04:47,240 --> 00:04:51,600 +Jenna Makowski va a venir y + +111 +00:04:49,560 --> 00:04:53,699 +hablar sobre gestión de productos para el + +112 +00:04:51,600 --> 00:04:56,280 +proyecto de código abierto y tipo de + +113 +00:04:53,699 --> 00:04:58,020 +Dirección y prioridades futuras y luego + +114 +00:04:56,280 --> 00:05:01,440 +finalmente nos unirá + +115 +00:04:58,020 --> 00:05:03,000 +Adrian devison de Empower Empower es un + +116 +00:05:01,440 --> 00:05:04,620 +usuario de open edx y miembro de la + +117 +00:05:03,000 --> 00:05:06,660 +comunidad está haciendo algo realmente increíble + +118 +00:05:04,620 --> 00:05:08,639 +trabajo y aprenderemos más sobre el + +119 +00:05:06,660 --> 00:05:12,380 +Empoderar a la organización y al proyecto. + +120 +00:05:08,639 --> 00:05:12,380 +en lo que están trabajando + +121 +00:05:12,900 --> 00:05:17,580 +Em, entonces comencemos con el presente. + +122 +00:05:15,060 --> 00:05:19,440 +voy a hablar de uh tres + +123 +00:05:17,580 --> 00:05:21,660 +tres cosas principales aquí + +124 +00:05:19,440 --> 00:05:23,940 +um, quiero revisar la visión de Open Edx. + +125 +00:05:21,660 --> 00:05:25,440 +declaración que fue desarrollada por el + +126 +00:05:23,940 --> 00:05:27,120 +grupo de trabajo de productos en el otoño y + +127 +00:05:25,440 --> 00:05:30,840 +revisado por la supervisión técnica + +128 +00:05:27,120 --> 00:05:33,360 +Comité del proyecto en diciembre. + +129 +00:05:30,840 --> 00:05:35,880 +Quiero revisar el alcance de la + +130 +00:05:33,360 --> 00:05:38,759 +plataforma de la que hablaremos un poco + +131 +00:05:35,880 --> 00:05:40,680 +algunas métricas sobre cuántas instancias de + +132 +00:05:38,759 --> 00:05:42,660 +la plataforma existe cuantos usuarios tiene + +133 +00:05:40,680 --> 00:05:46,259 +He estado aprendiendo cuántos grados + +134 +00:05:42,660 --> 00:05:48,479 +han sido emitidos + +135 +00:05:46,259 --> 00:05:50,520 +y finalmente veremos la Comunidad + +136 +00:05:48,479 --> 00:05:52,500 +Salud algunas métricas clave que nos ayudan + +137 +00:05:50,520 --> 00:05:55,740 +comprender lo saludables que somos como + +138 +00:05:52,500 --> 00:05:58,500 +comunidad porque nuestra comunidad es la + +139 +00:05:55,740 --> 00:06:02,400 +el motor que hace avanzar el open edx + +140 +00:05:58,500 --> 00:06:04,620 +plataforma realmente buena que avanza el + +141 +00:06:02,400 --> 00:06:06,780 +plataforma abierta edx por lo que debemos mantener un + +142 +00:06:04,620 --> 00:06:09,539 +Esté atento a nuestra ayuda. + +143 +00:06:06,780 --> 00:06:11,280 +y también puedo ver desde el momento + +144 +00:06:09,539 --> 00:06:13,199 +tarjetas que revisan lo reciente + +145 +00:06:11,280 --> 00:06:15,180 +las características enviadas probablemente van a + +146 +00:06:13,199 --> 00:06:18,360 +se saltan pero Jenna va a + +147 +00:06:15,180 --> 00:06:20,520 +danos un recorrido sobre cómo puedes rastrear eso + +148 +00:06:18,360 --> 00:06:22,319 +continuamente en tiempo real cuando ella llega + +149 +00:06:20,520 --> 00:06:26,120 +en este segmento sobre el producto que + +150 +00:06:22,319 --> 00:06:26,120 +instrucciones para la hoja de ruta del producto + +151 +00:06:27,240 --> 00:06:31,500 +Muy bien, entonces comencemos con la visión. + +152 +00:06:29,280 --> 00:06:33,479 +declaración esto fue desarrollado por un + +153 +00:06:31,500 --> 00:06:36,900 +segmento del grupo de trabajo del producto que + +154 +00:06:33,479 --> 00:06:40,919 +realizó entrevistas, encuestas y trabajó + +155 +00:06:36,900 --> 00:06:43,919 +con la comunidad para intentar componer un + +156 +00:06:40,919 --> 00:06:46,979 +misión basada en todo lo que + +157 +00:06:43,919 --> 00:06:48,780 +valorado y lo presentaré hoy + +158 +00:06:46,979 --> 00:06:50,039 +esto ha sido presentado en otros foros + +159 +00:06:48,780 --> 00:06:52,440 +Puede que lo hayas visto pero si no lo has hecho + +160 +00:06:50,039 --> 00:06:54,360 +lo hablaremos hoy + +161 +00:06:52,440 --> 00:06:55,979 +um entonces la declaración de visión tal como ellos + +162 +00:06:54,360 --> 00:06:59,100 +definido fue que estamos aprovechando + +163 +00:06:55,979 --> 00:07:01,800 +código abierto para democratizar la educación y + +164 +00:06:59,100 --> 00:07:03,300 +avances de poder en el aprendizaje + +165 +00:07:01,800 --> 00:07:05,100 +y vamos + +166 +00:07:03,300 --> 00:07:07,580 +analicemos eso un poco + +167 +00:07:05,100 --> 00:07:07,580 +poco bien + +168 +00:07:09,600 --> 00:07:13,080 +Muy bien, la primera parte trata sobre + +169 +00:07:11,220 --> 00:07:14,580 +cómo lo hacemos y no creo que esto sea + +170 +00:07:13,080 --> 00:07:16,220 +Controvertido somos un código abierto. + +171 +00:07:14,580 --> 00:07:20,039 +proyecto somos una comunidad de código abierto + +172 +00:07:16,220 --> 00:07:23,759 +Creemos que las comunidades que tienen + +173 +00:07:20,039 --> 00:07:24,900 +valores compartidos y tener un tipo compartido uh + +174 +00:07:23,759 --> 00:07:27,240 +de + +175 +00:07:24,900 --> 00:07:28,680 +requisitos para la plataforma cuando + +176 +00:07:27,240 --> 00:07:31,740 +colaborar al aire libre y crear en abierto + +177 +00:07:28,680 --> 00:07:33,900 +El software fuente crea dinámicas poderosas. + +178 +00:07:31,740 --> 00:07:35,580 +y + +179 +00:07:33,900 --> 00:07:37,319 +entonces aprovechar el código abierto es bastante + +180 +00:07:35,580 --> 00:07:39,720 +obvio para nosotros + +181 +00:07:37,319 --> 00:07:41,340 +las siguientes dos partes son realmente lo que + +182 +00:07:39,720 --> 00:07:43,580 +aspiramos a hacer + +183 +00:07:41,340 --> 00:07:45,960 +El primero es democratizar la educación. + +184 +00:07:43,580 --> 00:07:48,900 +y profundizaremos un poco en esto + +185 +00:07:45,960 --> 00:07:50,580 +más en las siguientes diapositivas porque queremos + +186 +00:07:48,900 --> 00:07:52,259 +Esto debe ser más que simples palabras bonitas. + +187 +00:07:50,580 --> 00:07:54,479 +queremos que esto sea algo que ayude + +188 +00:07:52,259 --> 00:07:56,099 +nosotros enmarcamos nuestras prioridades y nos inspiramos + +189 +00:07:54,479 --> 00:07:58,800 +a medida que avanzamos + +190 +00:07:56,099 --> 00:08:01,620 +y la segunda parte de lo que es el poder + +191 +00:07:58,800 --> 00:08:04,080 +avances en el aprendizaje y esto ha sido un + +192 +00:08:01,620 --> 00:08:06,060 +parte de la misión de edx y open edx + +193 +00:08:04,080 --> 00:08:08,819 +desde muy temprano fue enmarcado + +194 +00:08:06,060 --> 00:08:11,039 +originalmente como mejorado en educa + +195 +00:08:08,819 --> 00:08:12,900 +mejorar la educación en línea y en el campus + +196 +00:08:11,039 --> 00:08:14,400 +y sigue siendo una parte importante + +197 +00:08:12,900 --> 00:08:16,919 +de nuestra misión pero tal vez un lugar donde + +198 +00:08:14,400 --> 00:08:18,360 +estamos preparados para mejorar un poco + +199 +00:08:16,919 --> 00:08:21,199 +Está bien, entonces comencemos con + +200 +00:08:18,360 --> 00:08:24,180 +democratizar la educación + +201 +00:08:21,199 --> 00:08:26,639 +para mí democratizar la educación hierve + +202 +00:08:24,180 --> 00:08:29,039 +dividir en dos cosas clave que queremos + +203 +00:08:26,639 --> 00:08:30,780 +lograrlo es mejorar el acceso a + +204 +00:08:29,039 --> 00:08:33,320 +oportunidades educativas de alta + +205 +00:08:30,780 --> 00:08:35,700 +calidad para estudiantes de todo el mundo + +206 +00:08:33,320 --> 00:08:38,459 +y eliminar impedimentos a aquellos + +207 +00:08:35,700 --> 00:08:41,700 +oportunidades siempre que podamos tecnología + +208 +00:08:38,458 --> 00:08:44,339 +¿Conoce alguna herramienta que nos ayude? + +209 +00:08:41,700 --> 00:08:48,300 +hazlo pero no es necesario y + +210 +00:08:44,339 --> 00:08:51,060 +suficiente requiere uh sabes que + +211 +00:08:48,300 --> 00:08:53,160 +requiere también de las organizaciones que + +212 +00:08:51,060 --> 00:08:55,680 +producir el contenido para que esté disponible + +213 +00:08:53,160 --> 00:08:58,140 +a los estudiantes y el compromiso de + +214 +00:08:55,680 --> 00:09:00,120 +derribando barreras de acceso + +215 +00:08:58,140 --> 00:09:01,860 +y la segunda parte es una especie de + +216 +00:09:00,120 --> 00:09:02,519 +impacto tan + +217 +00:09:01,860 --> 00:09:04,920 +uno + +218 +00:09:02,519 --> 00:09:07,380 +la plataforma en sí ya que el software no puede + +219 +00:09:04,920 --> 00:09:08,820 +garantizar impacto en la vida de nuestros + +220 +00:09:07,380 --> 00:09:11,640 +estudiantes, pero en última instancia eso es lo que + +221 +00:09:08,820 --> 00:09:14,880 +aspiramos a hacerlo, necesitamos tener + +222 +00:09:11,640 --> 00:09:17,519 +una plataforma que puede ofrecer la más alta + +223 +00:09:14,880 --> 00:09:19,560 +oportunidades educativas de calidad y nosotros + +224 +00:09:17,519 --> 00:09:20,519 +Necesitamos una manera de medir la eficacia de + +225 +00:09:19,560 --> 00:09:22,980 +Lo diferente + +226 +00:09:20,519 --> 00:09:26,700 +cosas que hace la plataforma y para + +227 +00:09:22,980 --> 00:09:29,480 +priorizar agregar avances en la plataforma + +228 +00:09:26,700 --> 00:09:29,480 +en ese sentido + +229 +00:09:29,760 --> 00:09:33,540 +Está bien y luego hablemos un poco. + +230 +00:09:31,920 --> 00:09:35,040 +un poco sobre los avances en la conducción + +231 +00:09:33,540 --> 00:09:36,959 +El aprendizaje podría verse así. Creo que esto es. + +232 +00:09:35,040 --> 00:09:38,580 +De nuevo la declaración de visión es + +233 +00:09:36,959 --> 00:09:39,779 +Aspiracional no pretendemos que estos + +234 +00:09:38,580 --> 00:09:42,120 +son cosas que ya hemos logrado + +235 +00:09:39,779 --> 00:09:43,920 +estas son cosas que queremos lograr + +236 +00:09:42,120 --> 00:09:45,899 +como comunidad + +237 +00:09:43,920 --> 00:09:47,459 +Está bien, entonces obviamente tenemos la puerta abierta. + +238 +00:09:45,899 --> 00:09:50,399 +plataforma edx con la que todos estamos familiarizados + +239 +00:09:47,459 --> 00:09:52,560 +que la plataforma tiene alguna clave + +240 +00:09:50,399 --> 00:09:55,260 +características en él hoy que realmente permiten + +241 +00:09:52,560 --> 00:09:57,959 +Extensión de experimentación e innovación. + +242 +00:09:55,260 --> 00:10:01,500 +puntos como Xbox cosas como pruebas abdominales + +243 +00:09:57,959 --> 00:10:04,560 +cohortes que son formas realmente poderosas de + +244 +00:10:01,500 --> 00:10:07,260 +de realizar pruebas en línea + +245 +00:10:04,560 --> 00:10:09,899 +cursos y a medida que los estudiantes interactúan con + +246 +00:10:07,260 --> 00:10:12,420 +aquellos con ese contenido + +247 +00:10:09,899 --> 00:10:13,740 +producimos datos y huellas de aprendizaje + +248 +00:10:12,420 --> 00:10:16,800 +todos están familiarizados con el seguimiento + +249 +00:10:13,740 --> 00:10:19,140 +registros, también tenemos versiones de datos X API + +250 +00:10:16,800 --> 00:10:22,320 +rastros de que los datos pueden convertirse en + +251 +00:10:19,140 --> 00:10:23,459 +aportes a la investigación y avances en + +252 +00:10:22,320 --> 00:10:25,320 +aprendiendo + +253 +00:10:23,459 --> 00:10:27,120 +um y ha habido un montón de + +254 +00:10:25,320 --> 00:10:28,860 +artículos interesantes me refiero y puedo + +255 +00:10:27,120 --> 00:10:30,959 +probablemente cite el número de artículos que + +256 +00:10:28,860 --> 00:10:32,640 +han sido producidos a partir de datos edx + +257 +00:10:30,959 --> 00:10:34,200 +pero se han realizado muchas investigaciones interesantes + +258 +00:10:32,640 --> 00:10:36,660 +ha sido elaborado a partir de los datos que + +259 +00:10:34,200 --> 00:10:39,060 +generar en la plataforma edx y también en + +260 +00:10:36,660 --> 00:10:41,399 +otras instancias de la plataforma excepto para + +261 +00:10:39,060 --> 00:10:44,820 +yo la cosa clave que no hemos hecho + +262 +00:10:41,399 --> 00:10:45,980 +bastante bien es esta última flecha es cómo + +263 +00:10:44,820 --> 00:10:49,680 +nosotros entonces + +264 +00:10:45,980 --> 00:10:52,140 +convertir esa investigación en avances en + +265 +00:10:49,680 --> 00:10:54,240 +aprender en un ciclo de retroalimentación completo + +266 +00:10:52,140 --> 00:10:55,800 +que nos ayuda a priorizar y avanzar en + +267 +00:10:54,240 --> 00:10:58,320 +plataforma de una manera que la haga más + +268 +00:10:55,800 --> 00:11:00,120 +eficaz para nuestros usuarios para que yo + +269 +00:10:58,320 --> 00:11:01,880 +Pensamos que es un desafío que tenemos ante nosotros. + +270 +00:11:00,120 --> 00:11:06,019 +y uno que te presentaré + +271 +00:11:01,880 --> 00:11:06,019 +así que descubramos cómo hacer eso + +272 +00:11:07,440 --> 00:11:11,779 +y luego en resumen uh + +273 +00:11:11,899 --> 00:11:17,040 +este viernes tenemos el ayuntamiento + +274 +00:11:14,459 --> 00:11:18,600 +reunión y esta es la visión propuesta + +275 +00:11:17,040 --> 00:11:20,279 +declaración del grupo de trabajo del producto + +276 +00:11:18,600 --> 00:11:23,519 +Creo que el ayuntamiento sería un gran + +277 +00:11:20,279 --> 00:11:25,880 +Es hora de venir y sumar tu voz a esto. + +278 +00:11:23,519 --> 00:11:28,800 +conversación para hacer cualquier pregunta + +279 +00:11:25,880 --> 00:11:30,300 +aclarar dudas o para llevarnos a + +280 +00:11:28,800 --> 00:11:31,740 +tarea si crees que hemos conseguido algo + +281 +00:11:30,300 --> 00:11:33,660 +mal aquí así que por favor asista a la ciudad + +282 +00:11:31,740 --> 00:11:35,820 +salón el viernes tengamos una robusta + +283 +00:11:33,660 --> 00:11:37,560 +discusión sobre la visión del + +284 +00:11:35,820 --> 00:11:39,000 +plataforma + +285 +00:11:37,560 --> 00:11:40,620 +está bien + +286 +00:11:39,000 --> 00:11:42,540 +Quiero hablar un poco sobre el alcance. + +287 +00:11:40,620 --> 00:11:44,579 +tenemos algunas estadísticas sobre el uso + +288 +00:11:42,540 --> 00:11:47,040 +de la plataforma este es un lugar que hemos + +289 +00:11:44,579 --> 00:11:49,860 +invertido en los últimos dos años + +290 +00:11:47,040 --> 00:11:51,660 +porque nuestra capacidad para determinar quién era + +291 +00:11:49,860 --> 00:11:54,000 +usar nuestro proyecto de código abierto fue + +292 +00:11:51,660 --> 00:11:55,860 +algo limitado es importante saberlo + +293 +00:11:54,000 --> 00:11:57,899 +el alcance del proyecto porque + +294 +00:11:55,860 --> 00:11:59,640 +indica un par de cosas que uno es + +295 +00:11:57,899 --> 00:12:03,300 +Estamos construyendo algo que a la gente le importe. + +296 +00:11:59,640 --> 00:12:06,720 +sobre lo que la gente quiere y también el + +297 +00:12:03,300 --> 00:12:09,180 +El alcance de la plataforma determina el + +298 +00:12:06,720 --> 00:12:11,700 +Tamaño de la red de nuestra comunidad. + +299 +00:12:09,180 --> 00:12:12,959 +El tamaño de la red determina quién es. + +300 +00:12:11,700 --> 00:12:14,459 +contribuyendo y cuantas personas son + +301 +00:12:12,959 --> 00:12:15,959 +contribuyendo y cuánto valor somos + +302 +00:12:14,459 --> 00:12:17,579 +crear por lo que es importante para aquellos + +303 +00:12:15,959 --> 00:12:18,480 +razones + +304 +00:12:17,579 --> 00:12:21,060 +uno + +305 +00:12:18,480 --> 00:12:23,339 +entonces tenemos una nueva tecnología que hemos + +306 +00:12:21,060 --> 00:12:25,380 +puesto en línea para ayudarnos a determinar cómo + +307 +00:12:23,339 --> 00:12:28,320 +En muchos casos sabemos que + +308 +00:12:25,380 --> 00:12:30,420 +hoy hay más de 4.500 vivos + +309 +00:12:28,320 --> 00:12:32,300 +instancias de la plataforma open edx en + +310 +00:12:30,420 --> 00:12:35,220 +la internet publica + +311 +00:12:32,300 --> 00:12:38,459 +en esos casos sabemos que + +312 +00:12:35,220 --> 00:12:41,579 +Hay más de 70.000 cursos que + +313 +00:12:38,459 --> 00:12:43,560 +se ofrecen en open edx hoy + +314 +00:12:41,579 --> 00:12:46,079 +y sabemos que a través de las instancias + +315 +00:12:43,560 --> 00:12:48,720 +este número es el más difícil de reunir + +316 +00:12:46,079 --> 00:12:50,279 +porque confiamos en que la gente nos diga cómo + +317 +00:12:48,720 --> 00:12:52,260 +cuantos usuarios registrados tienen nosotros no + +318 +00:12:50,279 --> 00:12:54,300 +Tengo alguna forma de recolectar esos datos, pero + +319 +00:12:52,260 --> 00:12:55,800 +sabemos que tenemos al menos 77 millones + +320 +00:12:54,300 --> 00:12:58,579 +usuarios que han interactuado con el abierto + +321 +00:12:55,800 --> 00:12:58,579 +plataforma edx + +322 +00:13:01,019 --> 00:13:04,440 +bueno + +323 +00:13:02,339 --> 00:13:05,760 +y + +324 +00:13:04,440 --> 00:13:07,860 +No creo que vaya a engañar a nadie. + +325 +00:13:05,760 --> 00:13:09,240 +mientras dibujo mi segundo volante del + +326 +00:13:07,860 --> 00:13:10,740 +presentación siendo la primera una + +327 +00:13:09,240 --> 00:13:13,440 +cuadrado y el segundo erguido + +328 +00:13:10,740 --> 00:13:15,420 +siendo un triangulo pero lo voy a hacer + +329 +00:13:13,440 --> 00:13:17,339 +de todos modos cierto + +330 +00:13:15,420 --> 00:13:19,380 +um simplemente para reforzar por qué alcanzar + +331 +00:13:17,339 --> 00:13:22,019 +es muy importante en proyectos de código abierto + +332 +00:13:19,380 --> 00:13:23,040 +es porque cuanto mayor sea el alcance que tenemos + +333 +00:13:22,019 --> 00:13:24,959 +tener + +334 +00:13:23,040 --> 00:13:26,940 +algún segmento de la comunidad que + +335 +00:13:24,959 --> 00:13:29,220 +estás tocando o contribuyendo de vuelta y + +336 +00:13:26,940 --> 00:13:31,260 +innovando en la plataforma puedes + +337 +00:13:29,220 --> 00:13:33,660 +aumentar el tamaño de ese segmento pero + +338 +00:13:31,260 --> 00:13:35,399 +cuanto más grande sea la red general + +339 +00:13:33,660 --> 00:13:38,100 +cuanta más gente tengas contribuyendo + +340 +00:13:35,399 --> 00:13:40,980 +e invertir que la inversión genera + +341 +00:13:38,100 --> 00:13:43,680 +valor adicional para la plataforma que + +342 +00:13:40,980 --> 00:13:46,019 +a su vez lo hace más atractivo para los nuevos + +343 +00:13:43,680 --> 00:13:48,360 +usuarios y aumenta el alcance y si + +344 +00:13:46,019 --> 00:13:51,300 +puedo seguir dando vueltas a esto + +345 +00:13:48,360 --> 00:13:53,700 +círculo virtuoso entonces con el tiempo construimos + +346 +00:13:51,300 --> 00:13:55,200 +la plataforma más eficaz y puede + +347 +00:13:53,700 --> 00:13:58,279 +tienen el mayor impacto en la vida de + +348 +00:13:55,200 --> 00:13:58,279 +nuestros estudiantes en todo el mundo + +349 +00:13:58,620 --> 00:14:03,899 +Ups, está bien + +350 +00:14:01,500 --> 00:14:06,480 +Mm pero el motor detrás de todo esto es + +351 +00:14:03,899 --> 00:14:09,060 +tu la comunidad que eso se desarrolla + +352 +00:14:06,480 --> 00:14:10,740 +openx y usa openx así que tomemos un + +353 +00:14:09,060 --> 00:14:12,779 +vistazo rápido a la salud del + +354 +00:14:10,740 --> 00:14:14,760 +comunidad basada en dos cosas en algunas + +355 +00:14:12,779 --> 00:14:18,060 +estadísticas que podemos medir y algunas + +356 +00:14:14,760 --> 00:14:20,100 +Historias que intentaré contar. + +357 +00:14:18,060 --> 00:14:22,260 +Um, está bien, esa contribución a la comunidad. + +358 +00:14:20,100 --> 00:14:23,940 +métricas que comenzaremos con un saludo a + +359 +00:14:22,260 --> 00:14:25,380 +grupos de trabajo que creo que son uno de + +360 +00:14:23,940 --> 00:14:26,339 +las partes más importantes de nuestro proyecto + +361 +00:14:25,380 --> 00:14:28,980 +hoy + +362 +00:14:26,339 --> 00:14:30,240 +uh y luego algo brevemente sobre un + +363 +00:14:28,980 --> 00:14:32,639 +programa que estamos haciendo alrededor + +364 +00:14:30,240 --> 00:14:34,200 +mantenimiento + +365 +00:14:32,639 --> 00:14:36,000 +bueno + +366 +00:14:34,200 --> 00:14:38,100 +Hoy sabemos que tenemos alrededor de 24. + +367 +00:14:36,000 --> 00:14:41,100 +diferentes organizaciones que están + +368 +00:14:38,100 --> 00:14:42,600 +contribuyendo al proyecto just just be + +369 +00:14:41,100 --> 00:14:44,220 +transparencia total que es bastante plana + +370 +00:14:42,600 --> 00:14:45,959 +Eso no ha cambiado mucho en los últimos + +371 +00:14:44,220 --> 00:14:48,420 +un par de años + +372 +00:14:45,959 --> 00:14:52,320 +um tenemos 333 personas en el último año + +373 +00:14:48,420 --> 00:14:55,380 +quién contribuyó con el código a la plataforma + +374 +00:14:52,320 --> 00:14:57,480 +y tenemos 10 grupos de trabajo activos para + +375 +00:14:55,380 --> 00:14:59,880 +Esto es interesante porque el año pasado en + +376 +00:14:57,480 --> 00:15:02,100 +En Lisboa teníamos alrededor de cinco grupos de trabajo. + +377 +00:14:59,880 --> 00:15:03,720 +que estaban activos por lo que ha aumentado dos + +378 +00:15:02,100 --> 00:15:05,279 +veces en ese tiempo y creo que por un + +379 +00:15:03,720 --> 00:15:08,040 +muy buena razón porque probablemente sea + +380 +00:15:05,279 --> 00:15:09,660 +la mejor manera de participar en el + +381 +00:15:08,040 --> 00:15:11,880 +proyecto y lo impulsan los grupos de trabajo + +382 +00:15:09,660 --> 00:15:13,320 +mucho valor para nosotros y hablaremos + +383 +00:15:11,880 --> 00:15:14,279 +tener una diapositiva específica para hablar de ellos + +384 +00:15:13,320 --> 00:15:16,560 +más tarde + +385 +00:15:14,279 --> 00:15:18,720 +Tenemos 50 colaboradores principales. + +386 +00:15:16,560 --> 00:15:20,399 +Los contribuyentes son las personas más + +387 +00:15:18,720 --> 00:15:22,579 +¿Sabes quién ha hecho un comentario personal? + +388 +00:15:20,399 --> 00:15:25,019 +compromiso de dedicar su tiempo + +389 +00:15:22,579 --> 00:15:26,820 +continuamente al proyecto que tienen + +390 +00:15:25,019 --> 00:15:30,540 +responsabilidades adicionales que vienen + +391 +00:15:26,820 --> 00:15:32,399 +junto con eso, pero este grupo de personas + +392 +00:15:30,540 --> 00:15:34,740 +son los son los más dedicados + +393 +00:15:32,399 --> 00:15:37,260 +contribuyentes en todo el proyecto + +394 +00:15:34,740 --> 00:15:39,300 +el año pasado fue 41, lo hemos aumentado en + +395 +00:15:37,260 --> 00:15:41,880 +50 al final de este al final del próximo + +396 +00:15:39,300 --> 00:15:42,959 +semana espero que esto sea 53 y esto es + +397 +00:15:41,880 --> 00:15:45,680 +un lugar donde vamos a continuar + +398 +00:15:42,959 --> 00:15:48,060 +invertir en el crecimiento de esa cohorte + +399 +00:15:45,680 --> 00:15:50,040 +tenemos 13 oficialmente apoyados + +400 +00:15:48,060 --> 00:15:51,720 +idiomas en la plataforma oficialmente + +401 +00:15:50,040 --> 00:15:53,959 +Los idiomas admitidos son idiomas que + +402 +00:15:51,720 --> 00:15:57,540 +se traducen a una tasa del 100 por ciento + +403 +00:15:53,959 --> 00:16:00,480 +Para nuestros lanzamientos de Open Edx, esto está disponible. + +404 +00:15:57,540 --> 00:16:02,579 +de 10 el año pasado, por lo que también es significativo + +405 +00:16:00,480 --> 00:16:05,480 +uh Mejora en los idiomas que + +406 +00:16:02,579 --> 00:16:05,480 +soporte en la plataforma + +407 +00:16:05,660 --> 00:16:10,860 +y todo suma a lo que vemos aquí + +408 +00:16:08,699 --> 00:16:13,740 +este es un gráfico de contribuciones sobre + +409 +00:16:10,860 --> 00:16:16,740 +los dos últimos años medidos como líneas de + +410 +00:16:13,740 --> 00:16:19,500 +código agregado a la plataforma la línea roja + +411 +00:16:16,740 --> 00:16:21,779 +es la línea de tendencia que puedes ver que hemos + +412 +00:16:19,500 --> 00:16:22,980 +visto un aumento constante, es irregular pero + +413 +00:16:21,779 --> 00:16:25,260 +Estamos viendo un aumento constante en + +414 +00:16:22,980 --> 00:16:27,180 +contribución a lo largo del tiempo líneas de código + +415 +00:16:25,260 --> 00:16:29,160 +agregado no es la métrica perfecta allí + +416 +00:16:27,180 --> 00:16:31,199 +no lo es pero creo que es lo suficientemente bueno + +417 +00:16:29,160 --> 00:16:34,620 +métrica para nosotros si miramos esto + +418 +00:16:31,199 --> 00:16:36,540 +acumulativamente representa un aumento de 54 + +419 +00:16:34,620 --> 00:16:40,459 +año tras año durante los últimos dos años + +420 +00:16:36,540 --> 00:16:40,459 +subcódigo en línea agregado a la plataforma + +421 +00:16:41,100 --> 00:16:45,180 +¡Uy, simplemente salté hacia adelante pero tan rápido que + +422 +00:16:43,860 --> 00:16:46,680 +Quería hablar sobre algunas fuentes de + +423 +00:16:45,180 --> 00:16:48,180 +crecimiento + +424 +00:16:46,680 --> 00:16:49,860 +Una de las grandes fuentes de crecimiento ha sido + +425 +00:16:48,180 --> 00:16:51,540 +Ha sido la innovación de los micro front-end. + +426 +00:16:49,860 --> 00:16:54,540 +esa es una tecnología que realmente se utiliza + +427 +00:16:51,540 --> 00:16:56,160 +Ahora tenemos creo que 28 micro frontales. + +428 +00:16:54,540 --> 00:16:57,839 +termina hay mucha energía de desarrollo + +429 +00:16:56,160 --> 00:17:00,360 +alrededor de ellos y eso ha impulsado muchas + +430 +00:16:57,839 --> 00:17:02,880 +aumentando la contribución + +431 +00:17:00,360 --> 00:17:05,040 +de T Krill ha estado financiando + +432 +00:17:02,880 --> 00:17:07,319 +aportes donde para áreas críticas + +433 +00:17:05,040 --> 00:17:08,640 +en la plataforma donde vemos lagunas que + +434 +00:17:07,319 --> 00:17:10,860 +¿sabrás llenar esos vacíos? + +435 +00:17:08,640 --> 00:17:12,419 +beneficiar a todos en la comunidad para que + +436 +00:17:10,859 --> 00:17:14,220 +esa es otra fuente de crecimiento de + +437 +00:17:12,419 --> 00:17:16,199 +contribución y finalmente el crecimiento en + +438 +00:17:14,220 --> 00:17:17,339 +Los principales contribuyentes han estado en otras áreas. + +439 +00:17:16,199 --> 00:17:18,959 +dónde + +440 +00:17:17,339 --> 00:17:20,339 +Um, ya conoces el crecimiento de la gente. + +441 +00:17:18,959 --> 00:17:22,020 +participar en ese programa y + +442 +00:17:20,339 --> 00:17:24,720 +dedicando una parte importante de su + +443 +00:17:22,020 --> 00:17:27,299 +El tiempo hasta la plataforma ha sido + +444 +00:17:24,720 --> 00:17:28,980 +importante allí también + +445 +00:17:27,299 --> 00:17:31,919 +y quiero pasar un rato hablando + +446 +00:17:28,980 --> 00:17:33,480 +sobre la metáfora que usamos a menudo sobre + +447 +00:17:31,919 --> 00:17:35,880 +open edx se siente como si estuviéramos construyendo + +448 +00:17:33,480 --> 00:17:37,740 +el avión mientras lo volamos + +449 +00:17:35,880 --> 00:17:40,799 +um en este caso solo estamos construyendo + +450 +00:17:37,740 --> 00:17:43,440 +algo muy complejo como grupo para que + +451 +00:17:40,799 --> 00:17:44,400 +Mencioné que tenemos 10 grupos de trabajo. + +452 +00:17:43,440 --> 00:17:46,679 +uno + +453 +00:17:44,400 --> 00:17:48,600 +Esas son las personas que coordinan el + +454 +00:17:46,679 --> 00:17:49,679 +trabajo ellos planifican el trabajo ellos determinan + +455 +00:17:48,600 --> 00:17:52,200 +cuáles son las prioridades y + +456 +00:17:49,679 --> 00:17:54,539 +realmente hacer el trabajo grupos de trabajo + +457 +00:17:52,200 --> 00:17:58,140 +centrarse en cualquier cosa, desde la traducción y + +458 +00:17:54,539 --> 00:18:00,240 +marketing para devops para desuso para + +459 +00:17:58,140 --> 00:18:01,740 +lanzando la plataforma básicamente todos + +460 +00:18:00,240 --> 00:18:03,240 +las actividades críticas del proyecto + +461 +00:18:01,740 --> 00:18:06,840 +sucede en grupos de trabajo, así que si estás + +462 +00:18:03,240 --> 00:18:08,820 +interesado en convertirse en uh + +463 +00:18:06,840 --> 00:18:10,860 +participar más directamente en la + +464 +00:18:08,820 --> 00:18:13,380 +Los grupos de trabajo del proyecto son el lugar para + +465 +00:18:10,860 --> 00:18:14,820 +vamos y este viernes los grupos de trabajo + +466 +00:18:13,380 --> 00:18:17,520 +Tendrás sesiones donde puedas + +467 +00:18:14,820 --> 00:18:19,020 +venga y conozca a los miembros y vea + +468 +00:18:17,520 --> 00:18:20,220 +en qué están trabajando y si hay + +469 +00:18:19,020 --> 00:18:23,220 +Son grupos de trabajo especialmente + +470 +00:18:20,220 --> 00:18:25,140 +interesante para ti por favor únete el viernes + +471 +00:18:23,220 --> 00:18:27,360 +y también + +472 +00:18:25,140 --> 00:18:28,679 +No tengo tiempo para resumir todo + +473 +00:18:27,360 --> 00:18:30,960 +las grandes cosas que tienen los grupos de trabajo + +474 +00:18:28,679 --> 00:18:35,520 +hecho sin embargo todos han producido + +475 +00:18:30,960 --> 00:18:37,559 +informes de sus prioridades y + +476 +00:18:35,520 --> 00:18:40,140 +logros de los últimos seis meses + +477 +00:18:37,559 --> 00:18:41,760 +y están en la wiki y compartiré un + +478 +00:18:40,140 --> 00:18:42,960 +enlace al canal de eventos más tarde, así que si + +479 +00:18:41,760 --> 00:18:44,280 +quieres hacer un seguimiento con el + +480 +00:18:42,960 --> 00:18:46,880 +grupo de trabajo específico, ¿por favor? + +481 +00:18:44,280 --> 00:18:46,880 +registrarse allí + +482 +00:18:48,720 --> 00:18:53,160 +y finalmente quise decir cuando pregunto + +483 +00:18:51,780 --> 00:18:55,080 +la comunidad de qué debemos hablar + +484 +00:18:53,160 --> 00:18:57,299 +en el estado de open edx varias personas + +485 +00:18:55,080 --> 00:18:58,860 +dijo: hablemos de mantenimiento, pero + +486 +00:18:57,299 --> 00:19:00,720 +no tenemos tiempo para hablar de ello en + +487 +00:18:58,860 --> 00:19:03,419 +profundidad hoy pero quería mencionar eso + +488 +00:19:00,720 --> 00:19:06,780 +Tendremos una reunión en línea en abril. + +489 +00:19:03,419 --> 00:19:08,700 +27 y voy a hacer una inmersión profunda + +490 +00:19:06,780 --> 00:19:10,320 +en mantenimiento y el estado de + +491 +00:19:08,700 --> 00:19:12,720 +mantenimiento para openx, así que si eso es así + +492 +00:19:10,320 --> 00:19:15,559 +un tema interesante para ti por favor únete + +493 +00:19:12,720 --> 00:19:15,559 +nosotros entonces está bien + +494 +00:19:17,400 --> 00:19:22,559 +Está bien y luego rápidamente hablaré sobre + +495 +00:19:19,620 --> 00:19:24,539 +algunas características que se han enviado recientemente + +496 +00:19:22,559 --> 00:19:27,059 +um y luego Jenna y este es el + +497 +00:19:24,539 --> 00:19:28,380 +la versión actual de las cosas + +498 +00:19:27,059 --> 00:19:31,020 +uno + +499 +00:19:28,380 --> 00:19:32,340 +y estos se centran en las personas uh + +500 +00:19:31,020 --> 00:19:35,340 +que estamos rastreando en el producto + +501 +00:19:32,340 --> 00:19:36,840 +grupo de trabajo, por lo que muchas de estas características + +502 +00:19:35,340 --> 00:19:38,820 +sabes dar crédito donde estaba el crédito + +503 +00:19:36,840 --> 00:19:41,960 +Debido a que somos desarrollados por ingenieros de 2u. + +504 +00:19:38,820 --> 00:19:45,539 +o en contacto con usted a través de proyectos combinados para que + +505 +00:19:41,960 --> 00:19:48,600 +el nuevo editor de problemas ux nuevo texto + +506 +00:19:45,539 --> 00:19:50,700 +Se ha lanzado el editor ux, esos eran + +507 +00:19:48,600 --> 00:19:53,520 +contribuido por 2u así que gracias a ti + +508 +00:19:50,700 --> 00:19:55,620 +para eso creo que es Avanzado o un staff + +509 +00:19:53,520 --> 00:19:56,220 +El clasificador también fue + +510 +00:19:55,620 --> 00:19:59,039 +uno + +511 +00:19:56,220 --> 00:20:01,500 +en la plataforma del lado del alumno I + +512 +00:19:59,039 --> 00:20:03,900 +creo que todo el mundo es consciente de las grandes novedades + +513 +00:20:01,500 --> 00:20:05,880 +lanzamiento de discusiones, ahora tenemos varios + +514 +00:20:03,900 --> 00:20:08,760 +diferentes foros de discusión que + +515 +00:20:05,880 --> 00:20:10,440 +disponible en las discusiones de la plataforma + +516 +00:20:08,760 --> 00:20:12,000 +han sido un punto de dolor de larga data + +517 +00:20:10,440 --> 00:20:13,919 +para los miembros de la comunidad, así que creo + +518 +00:20:12,000 --> 00:20:17,400 +todos están felices de ver opciones y también + +519 +00:20:13,919 --> 00:20:19,140 +Discusiones nativas muy mejoradas. + +520 +00:20:17,400 --> 00:20:20,700 +ofrecimiento + +521 +00:20:19,140 --> 00:20:22,500 +y em + +522 +00:20:20,700 --> 00:20:25,020 +auras en equipo hubo una sesión sobre + +523 +00:20:22,500 --> 00:20:26,280 +que ayer esos son geniales así que si tu + +524 +00:20:25,020 --> 00:20:28,260 +¿Sabes? + +525 +00:20:26,280 --> 00:20:29,520 +Udo creo que su sesión fue grabada como + +526 +00:20:28,260 --> 00:20:32,580 +Haz zoom así que si quieres saber más sobre + +527 +00:20:29,520 --> 00:20:35,520 +auras basadas en equipos, por favor mira eso y + +528 +00:20:32,580 --> 00:20:37,500 +luego algunas cosas centradas en la plataforma + +529 +00:20:35,520 --> 00:20:39,480 +um algunos grandes como el tiempo de ejecución + +530 +00:20:37,500 --> 00:20:42,480 +La configuración para micro front-end fue + +531 +00:20:39,480 --> 00:20:44,340 +algo que salio en Olive fue + +532 +00:20:42,480 --> 00:20:46,980 +una gran victoria para + +533 +00:20:44,340 --> 00:20:49,260 +um para lotes de desarrollo de micro front-end + +534 +00:20:46,980 --> 00:20:52,460 +de inversión en mejoras de tutores y + +535 +00:20:49,260 --> 00:20:52,460 +documentación de la plataforma + +536 +00:20:52,760 --> 00:20:58,799 +ahora quiero entregarle la palabra a Jenna, quien es + +537 +00:20:56,100 --> 00:21:00,660 +el producto líder en tcrill ella es + +538 +00:20:58,799 --> 00:21:03,000 +Voy a hablar sobre algún tipo de nuestro producto. + +539 +00:21:00,660 --> 00:21:07,180 +procesos de gestión y la plataforma + +540 +00:21:03,000 --> 00:21:13,220 +prioridades y te entregaré el clicker + +541 +00:21:07,180 --> 00:21:16,559 +[Aplausos] + +542 +00:21:13,220 --> 00:21:18,539 +Gracias Ed, ¿pueden todos escucharme bien? + +543 +00:21:16,559 --> 00:21:20,700 +impresionante + +544 +00:21:18,539 --> 00:21:23,520 +Así que Ed mencionó esta parte del + +545 +00:21:20,700 --> 00:21:25,140 +la charla se centra en esperar con ansias + +546 +00:21:23,520 --> 00:21:27,299 +Planes de productos y algunas de nuestras prioridades. + +547 +00:21:25,140 --> 00:21:28,919 +y dónde estamos invirtiendo pero quería + +548 +00:21:27,299 --> 00:21:31,020 +tomarme un par de minutos aquí en el + +549 +00:21:28,919 --> 00:21:32,700 +Empiezo a mirar atrás porque creo + +550 +00:21:31,020 --> 00:21:36,140 +mirando hacia atrás eso nos ayudará a + +551 +00:21:32,700 --> 00:21:36,140 +Piensa en cómo avanzamos. + +552 +00:21:36,600 --> 00:21:41,520 +Algunos de ustedes recordarán la diapositiva de + +553 +00:21:38,700 --> 00:21:43,799 +el año pasado presenté esta diapositiva en el + +554 +00:21:41,520 --> 00:21:45,419 +Charla sobre el estado de Open Edx en Lisboa. + +555 +00:21:43,799 --> 00:21:48,000 +y si no te acuerdas o si + +556 +00:21:45,419 --> 00:21:49,980 +no estaban aquí este es el tema principal que + +557 +00:21:48,000 --> 00:21:52,860 +abordamos el año pasado en el estado fue + +558 +00:21:49,980 --> 00:21:55,140 +¿Cómo pasaríamos el próximo año? + +559 +00:21:52,860 --> 00:21:57,299 +construir una organización de productos dentro + +560 +00:21:55,140 --> 00:21:59,880 +la comunidad openatix + +561 +00:21:57,299 --> 00:22:01,860 +y este Doble Diamante fue el + +562 +00:21:59,880 --> 00:22:03,960 +marco que propuse solíamos + +563 +00:22:01,860 --> 00:22:05,940 +construir esa organización de producto + +564 +00:22:03,960 --> 00:22:07,980 +Así que, a modo de resumen rápido, el Doble Diamante. + +565 +00:22:05,940 --> 00:22:10,320 +framework es un método bastante popular o + +566 +00:22:07,980 --> 00:22:12,480 +Metodología de entrega del producto. + +567 +00:22:10,320 --> 00:22:15,419 +y en el + +568 +00:22:12,480 --> 00:22:17,460 +lado izquierdo del proceso por lo que es como un + +569 +00:22:15,419 --> 00:22:20,039 +es un flujo de trabajo el lado izquierdo es más + +570 +00:22:17,460 --> 00:22:22,860 +orientado al producto, por lo que se centra en + +571 +00:22:20,039 --> 00:22:25,020 +Descubrimiento de nuevas funciones centradas + +572 +00:22:22,860 --> 00:22:26,940 +en la definición de características aquí es donde + +573 +00:22:25,020 --> 00:22:28,260 +encontrarás todas tus historias de usuario + +574 +00:22:26,940 --> 00:22:30,000 +tu investigación de mercado todo tu Mercado + +575 +00:22:28,260 --> 00:22:31,559 +datos todo lo que utilizas para conducir + +576 +00:22:30,000 --> 00:22:33,600 +lo que construyes en la plataforma + +577 +00:22:31,559 --> 00:22:36,240 +y por qué + +578 +00:22:33,600 --> 00:22:37,500 +y la segunda mitad del Doblete + +579 +00:22:36,240 --> 00:22:39,720 +El marco del diamante es el técnico. + +580 +00:22:37,500 --> 00:22:40,740 +lado de ejecución desarrollo derecho y + +581 +00:22:39,720 --> 00:22:43,860 +entrega + +582 +00:22:40,740 --> 00:22:45,600 +y lo que observé el año pasado en + +583 +00:22:43,860 --> 00:22:48,360 +la charla fue que mucha de la energía + +584 +00:22:45,600 --> 00:22:50,520 +y el impulso en torno al proyecto tiende a + +585 +00:22:48,360 --> 00:22:52,860 +estar más centrados en este lado del + +586 +00:22:50,520 --> 00:22:55,020 +lado de la implementación con menos enfoque + +587 +00:22:52,860 --> 00:22:56,039 +al menos en la comunidad abierta en el + +588 +00:22:55,020 --> 00:22:58,440 +lado del producto + +589 +00:22:56,039 --> 00:23:00,840 +y entonces + +590 +00:22:58,440 --> 00:23:02,340 +Yo propondría que nos concentráramos en cambiar + +591 +00:23:00,840 --> 00:23:04,380 +pasar el año para reorientar eso + +592 +00:23:02,340 --> 00:23:06,419 +equilibrar un poco + +593 +00:23:04,380 --> 00:23:07,799 +Um, eso fue el año pasado y estoy realmente + +594 +00:23:06,419 --> 00:23:10,380 +feliz de decir que hemos hecho un montón de + +595 +00:23:07,799 --> 00:23:12,000 +progreso en el último año estoy muy orgulloso + +596 +00:23:10,380 --> 00:23:13,559 +de cómo los gerentes de producto en todo el mundo + +597 +00:23:12,000 --> 00:23:14,760 +La comunidad realmente se ha unido y + +598 +00:23:13,559 --> 00:23:17,880 +nos ayudó a construir un producto + +599 +00:23:14,760 --> 00:23:21,260 +Organización para la comunidad open edx + +600 +00:23:17,880 --> 00:23:21,260 +en general así que gracias a todos + +601 +00:23:21,960 --> 00:23:26,640 +um hoy me gustaría resaltar tres de + +602 +00:23:24,179 --> 00:23:28,559 +los procesos y artefactos clave que + +603 +00:23:26,640 --> 00:23:31,260 +como comunidad de código abierto con la + +604 +00:23:28,559 --> 00:23:32,460 +La organización del producto se ha construido a lo largo del + +605 +00:23:31,260 --> 00:23:34,080 +año pasado + +606 +00:23:32,460 --> 00:23:35,760 +para que realmente podamos traer esto + +607 +00:23:34,080 --> 00:23:38,159 +marco para la vida + +608 +00:23:35,760 --> 00:23:39,780 +esas tres cosas son el producto + +609 +00:23:38,159 --> 00:23:42,299 +grupo de trabajo + +610 +00:23:39,780 --> 00:23:45,080 +desarrollo de características al aire libre + +611 +00:23:42,299 --> 00:23:45,080 +y la hoja de ruta + +612 +00:23:45,600 --> 00:23:50,940 +así que comencemos respondiendo un par de + +613 +00:23:48,780 --> 00:23:53,960 +preguntas básicas quién es el producto openx + +614 +00:23:50,940 --> 00:23:53,960 +y qué hacemos + +615 +00:23:54,360 --> 00:23:58,559 +este es el producto openx + +616 +00:23:56,039 --> 00:24:00,120 +muchos de estos son los líderes de productos + +617 +00:23:58,559 --> 00:24:03,539 +de organizaciones de toda la comunidad + +618 +00:24:00,120 --> 00:24:05,159 +muchos de ustedes están aquí hoy + +619 +00:24:03,539 --> 00:24:06,659 +um y este es el producto + +620 +00:24:05,159 --> 00:24:09,120 +grupo de trabajo este es el motor que + +621 +00:24:06,659 --> 00:24:10,740 +impulsa el proyecto open edx que hemos tenido + +622 +00:24:09,120 --> 00:24:12,419 +personas que representan casi una docena + +623 +00:24:10,740 --> 00:24:15,480 +organizaciones en el grupo en el pasado + +624 +00:24:12,419 --> 00:24:19,520 +año que incluye el papel de 2u Tik Ed Lee edu + +625 +00:24:15,480 --> 00:24:19,520 +próximo opencraft y muchos más + +626 +00:24:19,679 --> 00:24:24,480 +Entonces la siguiente pregunta sería ¿qué significa? + +627 +00:24:21,600 --> 00:24:26,460 +producto coordinamos la toma de decisiones + +628 +00:24:24,480 --> 00:24:29,220 +sobre el producto cuyas características obtienen + +629 +00:24:26,460 --> 00:24:30,900 +priorizados dónde invertimos, me refiero a estos + +630 +00:24:29,220 --> 00:24:32,700 +Todas las decisiones se basan en datos sobre + +631 +00:24:30,900 --> 00:24:33,960 +investigación de mercado sobre los comentarios de los usuarios y + +632 +00:24:32,700 --> 00:24:35,760 +hemos podido crear canales que + +633 +00:24:33,960 --> 00:24:37,140 +De hecho, podemos agregar esto a lo largo de + +634 +00:24:35,760 --> 00:24:38,280 +la comunidad por lo que estamos extrayendo estos datos + +635 +00:24:37,140 --> 00:24:40,320 +juntos desde muchos lugares diferentes + +636 +00:24:38,280 --> 00:24:43,340 +fuentes que nos dan una visión holística + +637 +00:24:40,320 --> 00:24:43,340 +del proyecto + +638 +00:24:44,580 --> 00:24:48,360 +y por esta época el año pasado el producto + +639 +00:24:46,260 --> 00:24:49,919 +grupo de trabajo fue sólo una idea y + +640 +00:24:48,360 --> 00:24:52,260 +De hecho, se reunió por primera vez en + +641 +00:24:49,919 --> 00:24:54,539 +Lisboa para hacer una especie de lluvia de ideas sobre lo que + +642 +00:24:52,260 --> 00:24:56,159 +haríamos aquello en lo que nos centraríamos en + +643 +00:24:54,539 --> 00:24:58,440 +el primer año + +644 +00:24:56,159 --> 00:25:01,200 +y como Ed mencionó, hemos publicado + +645 +00:24:58,440 --> 00:25:03,059 +nuestro informe de impacto, pero quería + +646 +00:25:01,200 --> 00:25:04,559 +resaltar un par de logros + +647 +00:25:03,059 --> 00:25:06,120 +aquí que en realidad están ligados a esto + +648 +00:25:04,559 --> 00:25:09,500 +tema más amplio de la construcción del producto + +649 +00:25:06,120 --> 00:25:09,500 +organización dentro de la comunidad + +650 +00:25:09,720 --> 00:25:14,159 +y entonces en Lisboa decidimos que + +651 +00:25:12,059 --> 00:25:15,600 +se centraría en tres prioridades en el + +652 +00:25:14,159 --> 00:25:17,760 +primer año + +653 +00:25:15,600 --> 00:25:19,919 +El número uno fue definir lo que + +654 +00:25:17,760 --> 00:25:21,960 +la plataforma es + +655 +00:25:19,919 --> 00:25:23,760 +El número dos era simplificar la + +656 +00:25:21,960 --> 00:25:26,880 +proceso de contribución específicamente el + +657 +00:25:23,760 --> 00:25:28,980 +proceso de revisión de productos de osprs + +658 +00:25:26,880 --> 00:25:31,260 +y el tercero fue hacer el desarrollo + +659 +00:25:28,980 --> 00:25:32,940 +proceso de desarrollo de características visible y + +660 +00:25:31,260 --> 00:25:36,659 +abierto + +661 +00:25:32,940 --> 00:25:38,100 +y ahora un año después tenemos para esto + +662 +00:25:36,659 --> 00:25:40,620 +El primero que define qué es la plataforma. + +663 +00:25:38,100 --> 00:25:43,080 +tenemos de 57 que es un adicto abierto + +664 +00:25:40,620 --> 00:25:44,880 +propuesta que delinea una estrategia y un + +665 +00:25:43,080 --> 00:25:47,419 +planeamos definir cuál es nuestro producto principal + +666 +00:25:44,880 --> 00:25:47,419 +será + +667 +00:25:47,820 --> 00:25:52,860 +tenemos un equipo que se dedica a + +668 +00:25:50,640 --> 00:25:55,020 +simplificar este proceso para crear un + +669 +00:25:52,860 --> 00:25:58,260 +flujo de trabajo para ayudarnos a revisar el enorme + +670 +00:25:55,020 --> 00:26:00,720 +atraso de PRS + +671 +00:25:58,260 --> 00:26:02,600 +y tenemos un proceso que hemos probado + +672 +00:26:00,720 --> 00:26:04,860 +para hacer visible el desarrollo + +673 +00:26:02,600 --> 00:26:07,380 +Hemos aprendido mucho de este proceso. + +674 +00:26:04,860 --> 00:26:08,640 +Todavía tengo mucho que aprender pero como + +675 +00:26:07,380 --> 00:26:11,039 +resultado ahora tenemos una gestión de productos + +676 +00:26:08,640 --> 00:26:14,039 +Wiki que tiene más de media docena de públicos. + +677 +00:26:11,039 --> 00:26:15,480 +acercar memorandos historias de usuarios especificaciones que + +678 +00:26:14,039 --> 00:26:19,400 +describir lo que realmente estamos construyendo + +679 +00:26:15,480 --> 00:26:19,400 +al principio del proceso del producto + +680 +00:26:19,620 --> 00:26:24,299 +y mencionaré también los tres + +681 +00:26:21,659 --> 00:26:25,679 +estos tienen charlas dedicadas durante el + +682 +00:26:24,299 --> 00:26:27,720 +conferencia sobre la próxima pareja + +683 +00:26:25,679 --> 00:26:29,640 +de días si estás interesado en alguno de + +684 +00:26:27,720 --> 00:26:32,779 +estos encuentran la charla y se unen a nosotros y + +685 +00:26:29,640 --> 00:26:32,779 +bucearemos profundamente + +686 +00:26:33,900 --> 00:26:37,200 +así que el año pasado se trató de sentar las bases + +687 +00:26:35,760 --> 00:26:39,120 +fundación y este año se acerca + +688 +00:26:37,200 --> 00:26:39,900 +ejecución ¿cómo vamos a hacer estos? + +689 +00:26:39,120 --> 00:26:41,640 +cosas + +690 +00:26:39,900 --> 00:26:43,799 +Lo haremos + +691 +00:26:41,640 --> 00:26:45,000 +continuar definiendo y realmente construyendo + +692 +00:26:43,799 --> 00:26:46,740 +el núcleo + +693 +00:26:45,000 --> 00:26:49,260 +oferta de productos principales + +694 +00:26:46,740 --> 00:26:51,360 +Limpiaremos el trabajo atrasado de todos los + +695 +00:26:49,260 --> 00:26:52,620 +PRS y también seguir haciendo eso + +696 +00:26:51,360 --> 00:26:54,120 +procesar mejor + +697 +00:26:52,620 --> 00:26:56,900 +y continuaremos haciendo todo lo posible + +698 +00:26:54,120 --> 00:26:56,900 +desarrollo al aire libre + +699 +00:26:57,419 --> 00:27:01,799 +Está bien, entonces eso es el pasado. + +700 +00:26:59,820 --> 00:27:03,539 +hablemos de en qué nos estamos centrando + +701 +00:27:01,799 --> 00:27:06,500 +ahora y en qué nos centraremos en el + +702 +00:27:03,539 --> 00:27:06,500 +los próximos seis a 12 meses + +703 +00:27:06,720 --> 00:27:12,059 +entonces Ed mencionó antes + +704 +00:27:09,320 --> 00:27:13,740 +que estamos priorizando proyectos junto + +705 +00:27:12,059 --> 00:27:15,240 +eso apoyará nuestra misión + +706 +00:27:13,740 --> 00:27:17,220 +nuestra misión es mejorar el acceso a + +707 +00:27:15,240 --> 00:27:19,440 +aprendizaje en línea y nuestra misión es + +708 +00:27:17,220 --> 00:27:21,240 +mejorar el resultado o el impacto de + +709 +00:27:19,440 --> 00:27:22,559 +aprendizaje en línea y voy a hablar + +710 +00:27:21,240 --> 00:27:24,480 +sobre un par de áreas en las que estamos + +711 +00:27:22,559 --> 00:27:26,580 +priorizar la inversión sobre el + +712 +00:27:24,480 --> 00:27:28,500 +el próximo año que se alineen con esa misión + +713 +00:27:26,580 --> 00:27:30,419 +y también los usaré como ejemplos para + +714 +00:27:28,500 --> 00:27:33,380 +demostrar realmente cómo estamos construyendo + +715 +00:27:30,419 --> 00:27:33,380 +estas cosas al aire libre + +716 +00:27:33,659 --> 00:27:40,860 +así que en el frente de acceso un gran Focus + +717 +00:27:36,720 --> 00:27:42,539 +para nosotros es la oferta principal de productos + +718 +00:27:40,860 --> 00:27:44,159 +por lo que la oferta principal de productos está arraigada + +719 +00:27:42,539 --> 00:27:46,620 +en uno de los grandes retos de la + +720 +00:27:44,159 --> 00:27:47,960 +plataforma y es que la plataforma + +721 +00:27:46,620 --> 00:27:50,220 +es un poco difícil de definir + +722 +00:27:47,960 --> 00:27:52,320 +lo cual puede sonar un poco raro pero + +723 +00:27:50,220 --> 00:27:55,500 +admite muchos casos de uso diversos + +724 +00:27:52,320 --> 00:27:57,059 +cierto y debido a esto así es + +725 +00:27:55,500 --> 00:27:59,220 +gran derecho pero por eso hace + +726 +00:27:57,059 --> 00:28:01,740 +A veces es un poco difícil + +727 +00:27:59,220 --> 00:28:03,240 +instalarlo es ineficiente personalizarlo + +728 +00:28:01,740 --> 00:28:04,919 +pero más importante aún de un producto + +729 +00:28:03,240 --> 00:28:06,480 +perspectiva puede hacer que sea difícil + +730 +00:28:04,919 --> 00:28:07,620 +crear una estrategia como quiénes somos + +731 +00:28:06,480 --> 00:28:09,059 +construyendo esto y para qué somos + +732 +00:28:07,620 --> 00:28:10,679 +edificio + +733 +00:28:09,059 --> 00:28:12,960 +y así el objetivo del producto principal + +734 +00:28:10,679 --> 00:28:14,940 +oferta es definir un conjunto claro de + +735 +00:28:12,960 --> 00:28:17,039 +características que vienen admitidas en el exterior + +736 +00:28:14,940 --> 00:28:18,299 +de la caja Instalación comunitaria para que + +737 +00:28:17,039 --> 00:28:19,740 +Debe quedar muy claro para los usuarios qué + +738 +00:28:18,299 --> 00:28:21,840 +estás recibiendo y por qué estás recibiendo + +739 +00:28:19,740 --> 00:28:23,340 +esas características + +740 +00:28:21,840 --> 00:28:25,980 +encima queremos hacerlo parejo + +741 +00:28:23,340 --> 00:28:27,840 +más fácil de personalizar, así que vamos a ser + +742 +00:28:25,980 --> 00:28:29,520 +construir un catálogo claro de herramientas para + +743 +00:28:27,840 --> 00:28:32,640 +cosas como una herramienta un catálogo de Xbox + +744 +00:28:29,520 --> 00:28:34,260 +catálogos de complementos de aplicaciones LTI que + +745 +00:28:32,640 --> 00:28:36,240 +ayúdanos a agilizar y simplificar el + +746 +00:28:34,260 --> 00:28:38,100 +experiencia y para permitir más fácil + +747 +00:28:36,240 --> 00:28:39,779 +personalización para que podamos apoyar + +748 +00:28:38,100 --> 00:28:43,039 +esta diversidad de casos de uso que son + +749 +00:28:39,779 --> 00:28:43,039 +realmente en el corazón de la narrativa + +750 +00:28:43,860 --> 00:28:49,020 +en términos de desarrollar esto abiertamente + +751 +00:28:46,159 --> 00:28:52,260 +aunque este es un producto producto + +752 +00:28:49,020 --> 00:28:53,220 +proyecto lo pasamos por el oep + +753 +00:28:52,260 --> 00:28:55,380 +proceso + +754 +00:28:53,220 --> 00:28:58,080 +porque introduce muchos términos nuevos + +755 +00:28:55,380 --> 00:29:00,120 +muchos conceptos nuevos en el proceso de oop + +756 +00:28:58,080 --> 00:29:02,820 +¿Es el proceso de propuesta de Open Edx este? + +757 +00:29:00,120 --> 00:29:04,260 +nos permitió socializarlo con el + +758 +00:29:02,820 --> 00:29:06,720 +comunidad tanto en el aspecto técnico como en el + +759 +00:29:04,260 --> 00:29:08,520 +En el lado del producto pudimos integrar un + +760 +00:29:06,720 --> 00:29:10,220 +muchos comentarios excelentes en ese proceso, así que + +761 +00:29:08,520 --> 00:29:12,539 +realmente nos ayuda a darle forma en tiempo real + +762 +00:29:10,220 --> 00:29:13,980 +y este es un modelo realmente interesante. + +763 +00:29:12,539 --> 00:29:16,919 +Piensa para que exploremos el futuro. + +764 +00:29:13,980 --> 00:29:18,600 +¿Sabes qué otras mejores prácticas o + +765 +00:29:16,919 --> 00:29:20,279 +Los flujos de trabajo existen en el código abierto. + +766 +00:29:18,600 --> 00:29:22,620 +comunidad y cómo podemos acercar el producto + +767 +00:29:20,279 --> 00:29:24,539 +en esos procesos así que este es uno + +768 +00:29:22,620 --> 00:29:27,720 +ejemplo, ¿puedes?, cualquiera puede tomar un + +769 +00:29:24,539 --> 00:29:27,720 +mira 57. + +770 +00:29:30,059 --> 00:29:35,399 +otra área de inversión para nosotros a continuación + +771 +00:29:33,000 --> 00:29:37,620 +año es nuestra iniciativa de taxonomía nuestra + +772 +00:29:35,399 --> 00:29:41,220 +iniciativa de aprendizaje de taxonomía esto se alinea + +773 +00:29:37,620 --> 00:29:42,960 +Más con el lado de impacto de la misión. + +774 +00:29:41,220 --> 00:29:45,480 +así que con este proyecto los autores serán + +775 +00:29:42,960 --> 00:29:47,460 +capaces de alinear su contenido en los cursos + +776 +00:29:45,480 --> 00:29:48,960 +para aprender taxonomías + +777 +00:29:47,460 --> 00:29:51,659 +um, por ejemplo, taxonomías alrededor + +778 +00:29:48,960 --> 00:29:53,580 +competencias o taxonomías en torno a las habilidades + +779 +00:29:51,659 --> 00:29:56,760 +y también podrán agregar etiquetas + +780 +00:29:53,580 --> 00:29:58,440 +en el estudio y en las bibliotecas + +781 +00:29:56,760 --> 00:30:00,720 +Hay muchos beneficios en esto. + +782 +00:29:58,440 --> 00:30:01,980 +proyecto uno de ellos es el que sumado a + +783 +00:30:00,720 --> 00:30:04,380 +el proyecto de datos del que hablaré + +784 +00:30:01,980 --> 00:30:06,419 +en un minuto las taxonomías permitirán + +785 +00:30:04,380 --> 00:30:08,399 +instructores para gestionar y realizar un mejor seguimiento + +786 +00:30:06,419 --> 00:30:10,500 +Estudiantes a medida que avanzan a través del contenido. + +787 +00:30:08,399 --> 00:30:12,240 +secuencias y será capaz de mantener + +788 +00:30:10,500 --> 00:30:14,279 +equipos del curso responsables de nuestro derecho + +789 +00:30:12,240 --> 00:30:18,440 +los estudiantes realmente aprenden lo que la unidad + +790 +00:30:14,279 --> 00:30:21,299 +o el módulo promete enseñar + +791 +00:30:18,440 --> 00:30:23,460 +Las taxonomías también nos ayudarán a establecer el + +792 +00:30:21,299 --> 00:30:25,140 +plataforma levantada y algo así como con visión de futuro + +793 +00:30:23,460 --> 00:30:27,840 +para alinearse mejor con terceros + +794 +00:30:25,140 --> 00:30:29,580 +herramientas adaptativas y otros servicios que + +795 +00:30:27,840 --> 00:30:30,899 +personalizar el contenido que conoces + +796 +00:30:29,580 --> 00:30:34,100 +recomendaciones basadas en el alumno + +797 +00:30:30,899 --> 00:30:34,100 +perfiles e intereses de los estudiantes + +798 +00:30:34,500 --> 00:30:39,299 +en términos de desarrollar esto abiertamente + +799 +00:30:37,039 --> 00:30:40,860 +esto es parte de nuestro modular más grande + +800 +00:30:39,299 --> 00:30:42,179 +iniciativa de aprendizaje, quiero decir, hemos estado + +801 +00:30:40,860 --> 00:30:45,419 +desarrollando esto abiertamente desde el + +802 +00:30:42,179 --> 00:30:47,820 +Vamos, reunimos un grupo de aproximadamente + +803 +00:30:45,419 --> 00:30:48,899 +ocho a diez partes interesadas de todo + +804 +00:30:47,820 --> 00:30:51,000 +la comunidad a través de diferentes + +805 +00:30:48,899 --> 00:30:53,220 +organizaciones porque queríamos hacer + +806 +00:30:51,000 --> 00:30:55,260 +seguro de que los datos que estábamos obteniendo + +807 +00:30:53,220 --> 00:30:56,399 +representan la mayoría de los + +808 +00:30:55,260 --> 00:30:57,899 +La comunidad quería asegurarse de que + +809 +00:30:56,399 --> 00:30:59,760 +Las historias de usuarios que tuvimos fueron representativas. + +810 +00:30:57,899 --> 00:31:02,580 +de todos aquí y de todos los + +811 +00:30:59,760 --> 00:31:03,779 +clientes a los que atiendes + +812 +00:31:02,580 --> 00:31:06,059 +um ponemos todo esto en el producto + +813 +00:31:03,779 --> 00:31:07,500 +Wiki y hasta el momento todos los documentos. + +814 +00:31:06,059 --> 00:31:09,960 +en torno a este y otros proyectos relacionados + +815 +00:31:07,500 --> 00:31:12,059 +generó más de 100 visitas y alrededor de 30 + +816 +00:31:09,960 --> 00:31:13,620 +diferentes hilos de comentarios que tienen + +817 +00:31:12,059 --> 00:31:16,159 +también nos ayudó a dar forma a estos proyectos + +818 +00:31:13,620 --> 00:31:16,159 +en tiempo real + +819 +00:31:18,059 --> 00:31:22,020 +y finalmente una tercera área de inversión + +820 +00:31:20,100 --> 00:31:23,880 +para nosotros que también se alinea con el impacto + +821 +00:31:22,020 --> 00:31:25,260 +El otro lado de nuestra misión es mejorar + +822 +00:31:23,880 --> 00:31:27,539 +análisis del alumno + +823 +00:31:25,260 --> 00:31:29,820 +reemplazaremos los conocimientos con minerales + +824 +00:31:27,539 --> 00:31:32,340 +cual es la analítica abierta abierta + +825 +00:31:29,820 --> 00:31:34,260 +sistema de referencia + +826 +00:31:32,340 --> 00:31:36,000 +un par de cosas sobre este proyecto que + +827 +00:31:34,260 --> 00:31:38,940 +alineará la plataforma para abrir + +828 +00:31:36,000 --> 00:31:41,039 +estándares de datos y esto desbloqueará una + +829 +00:31:38,940 --> 00:31:42,240 +muchas cosas interesantes y emocionantes + +830 +00:31:41,039 --> 00:31:45,299 +oportunidades en torno a la presentación de informes porque + +831 +00:31:42,240 --> 00:31:47,580 +podremos informar sobre cómo acercarnos + +832 +00:31:45,299 --> 00:31:49,860 +análisis del alumno en tiempo real que nuevamente + +833 +00:31:47,580 --> 00:31:51,120 +junto con cosas como la taxonomía + +834 +00:31:49,860 --> 00:31:53,039 +proyectos ahora los equipos del curso podrán + +835 +00:31:51,120 --> 00:31:54,419 +tener una mejor visión del alumno + +836 +00:31:53,039 --> 00:31:56,159 +el progreso del estudiante y cómo + +837 +00:31:54,419 --> 00:31:58,380 +Los alumnos comprenden el contenido. + +838 +00:31:56,159 --> 00:31:59,640 +en niveles muy granulares para que puedan hacer + +839 +00:31:58,380 --> 00:32:02,120 +decisiones sobre su rumbo en más + +840 +00:31:59,640 --> 00:32:02,120 +tiempo real + +841 +00:32:02,760 --> 00:32:06,659 +en términos de desarrollar esto abiertamente + +842 +00:32:05,100 --> 00:32:08,460 +um esta iniciativa está siendo impulsada por + +843 +00:32:06,659 --> 00:32:10,140 +el grupo de trabajo de datos y nuevamente su + +844 +00:32:08,460 --> 00:32:13,159 +sus tableros y todo su trabajo + +845 +00:32:10,140 --> 00:32:13,159 +está disponible al público + +846 +00:32:14,220 --> 00:32:18,179 +y si desea una vista completa de todo + +847 +00:32:16,500 --> 00:32:19,679 +las áreas de inversión estas son algunas + +848 +00:32:18,179 --> 00:32:21,779 +más aspectos destacados + +849 +00:32:19,679 --> 00:32:24,179 +um, el mejor lugar para ir es Open Edx. + +850 +00:32:21,779 --> 00:32:26,159 +mapa vial + +851 +00:32:24,179 --> 00:32:28,140 +um, recuerdo estar parado aquí en el + +852 +00:32:26,159 --> 00:32:29,880 +conferencia del año pasado diciendo que + +853 +00:32:28,140 --> 00:32:31,559 +La hoja de ruta en ese momento era una especie de + +854 +00:32:29,880 --> 00:32:33,419 +un pequeño experimento y fue + +855 +00:32:31,559 --> 00:32:35,279 +más de um en ese momento era más + +856 +00:32:33,419 --> 00:32:36,419 +como un directorio de iniciativas actuales + +857 +00:32:35,279 --> 00:32:37,620 +cierto, estábamos pidiendo a todos que + +858 +00:32:36,419 --> 00:32:38,580 +aportar las cosas que eran + +859 +00:32:37,620 --> 00:32:41,039 +edificio + +860 +00:32:38,580 --> 00:32:42,659 +y sigue siendo eso pero también estoy feliz + +861 +00:32:41,039 --> 00:32:44,520 +decir que hemos ido más allá + +862 +00:32:42,659 --> 00:32:46,080 +que además conseguimos estos productos + +863 +00:32:44,520 --> 00:32:48,240 +proyectos despegan a medida que comenzamos a + +864 +00:32:46,080 --> 00:32:49,500 +generar retrasos y priorizar + +865 +00:32:48,240 --> 00:32:51,360 +La hoja de ruta está empezando a desarrollarse un poco. + +866 +00:32:49,500 --> 00:32:54,020 +más bien un Arco estratégico que es + +867 +00:32:51,360 --> 00:32:54,020 +realmente emocionante + +868 +00:32:55,200 --> 00:32:58,620 +y una de las preguntas que he escuchado + +869 +00:32:56,940 --> 00:33:00,179 +bastante de la gente es como ¿cómo puedo? + +870 +00:32:58,620 --> 00:33:02,340 +mantenerse actualizado ¿cómo puedo estar al tanto? + +871 +00:33:00,179 --> 00:33:04,380 +todo lo que esta pasando y por eso yo + +872 +00:33:02,340 --> 00:33:06,000 +En realidad quería dar un rápido como 30. + +873 +00:33:04,380 --> 00:33:07,440 +Segundo curso intensivo sobre cómo leer el + +874 +00:33:06,000 --> 00:33:10,140 +hoja de ruta bueno, tengo la de todos + +875 +00:33:07,440 --> 00:33:11,640 +atención aquí + +876 +00:33:10,140 --> 00:33:14,240 +um para que puedas ver que la hoja de ruta es + +877 +00:33:11,640 --> 00:33:16,620 +organizado por área de plataforma en la parte superior + +878 +00:33:14,240 --> 00:33:18,360 +hay una pestaña para cada área importante de + +879 +00:33:16,620 --> 00:33:19,980 +la plataforma y este es tu tipo + +880 +00:33:18,360 --> 00:33:21,240 +navegación a través de la hoja de ruta si + +881 +00:33:19,980 --> 00:33:22,919 +hay un área específica de la plataforma + +882 +00:33:21,240 --> 00:33:24,000 +que te interese puedes ir a + +883 +00:33:22,919 --> 00:33:27,659 +la tabla + +884 +00:33:24,000 --> 00:33:29,760 +para que puedas ver que este es un + +885 +00:33:27,659 --> 00:33:32,179 +Este está resaltando el contenido. + +886 +00:33:29,760 --> 00:33:32,179 +bibliotecas + +887 +00:33:33,539 --> 00:33:38,580 +cada área de plataforma tiene un juego de boletos + +888 +00:33:36,299 --> 00:33:40,019 +entonces estas entradas son de alto nivel, ¿verdad? + +889 +00:33:38,580 --> 00:33:42,720 +están destinados simplemente a capturar un + +890 +00:33:40,019 --> 00:33:44,340 +descripción general del proyecto y darle una + +891 +00:33:42,720 --> 00:33:46,679 +descripción general rápida de cuál es el impacto y + +892 +00:33:44,340 --> 00:33:48,240 +cual es el valor del proyecto + +893 +00:33:46,679 --> 00:33:49,919 +si estás interesado en bucear más + +894 +00:33:48,240 --> 00:33:52,980 +profundizar en los proyectos de un curso + +895 +00:33:49,919 --> 00:33:54,600 +vista de granos también tenemos un archivo Léame para + +896 +00:33:52,980 --> 00:33:57,059 +cada sección de la plataforma donde + +897 +00:33:54,600 --> 00:33:58,679 +vincularlo a los tableros específicos y + +898 +00:33:57,059 --> 00:34:01,260 +Entonces, por ejemplo, si estás interesado en + +899 +00:33:58,679 --> 00:34:03,419 +Al igual que el proyecto de taxonomía, puedes encontrar un + +900 +00:34:01,260 --> 00:34:05,100 +enlace a ese tablero en particular aquí y + +901 +00:34:03,419 --> 00:34:06,360 +Puedes realizar un seguimiento de forma más detallada. + +902 +00:34:05,100 --> 00:34:09,500 +nivelar todos los problemas que hemos + +903 +00:34:06,360 --> 00:34:09,500 +arreglado donde estamos actualmente + +904 +00:34:12,359 --> 00:34:16,320 +y finalmente un rápido recordatorio de que el + +905 +00:34:14,460 --> 00:34:18,060 +La hoja de ruta sigue siendo colaborativa. + +906 +00:34:16,320 --> 00:34:19,740 +esfuerzo y necesitamos la ayuda de todos para + +907 +00:34:18,060 --> 00:34:20,700 +ayúdanos a seguir construyéndolo y haciendo carne + +908 +00:34:19,739 --> 00:34:22,980 +fuera + +909 +00:34:20,699 --> 00:34:24,839 +hay dos maneras en que puedes + +910 +00:34:22,980 --> 00:34:26,480 +participa para conseguir tu voz + +911 +00:34:24,839 --> 00:34:29,879 +en la hoja de ruta + +912 +00:34:26,480 --> 00:34:32,879 +en el repositorio de la hoja de ruta de la plataforma + +913 +00:34:29,879 --> 00:34:34,859 +Tenemos dos plantillas que están destinadas a + +914 +00:34:32,879 --> 00:34:38,159 +ayudarle a navegar a través de + +915 +00:34:34,859 --> 00:34:40,139 +contribuir con la primera plantilla es una + +916 +00:34:38,159 --> 00:34:42,119 +envío de problemas, así que si tienes trabajo + +917 +00:34:40,139 --> 00:34:44,159 +eso ya está en progreso si tienes + +918 +00:34:42,119 --> 00:34:45,060 +trabajo que te gustaría aportarte + +919 +00:34:44,159 --> 00:34:47,339 +saber pasar finalmente por el pr + +920 +00:34:45,060 --> 00:34:49,679 +proceso hay una plantilla para ayudarte + +921 +00:34:47,339 --> 00:34:52,040 +agregar que a esa contribución a la + +922 +00:34:49,679 --> 00:34:52,040 +mapa vial + +923 +00:34:52,080 --> 00:34:58,740 +el segundo es una solicitud de función + +924 +00:34:56,040 --> 00:35:00,599 +Así que esto es más nuevo si quieres verlo. + +925 +00:34:58,740 --> 00:35:02,640 +algo agregado a la hoja de ruta pero es + +926 +00:35:00,599 --> 00:35:04,619 +no hay una plantilla de ticket como + +927 +00:35:02,640 --> 00:35:06,420 +bueno para ayudarte puedes agregarlo a nuestro + +928 +00:35:04,619 --> 00:35:08,580 +retraso y lo haremos + +929 +00:35:06,420 --> 00:35:10,380 +um tenerlo tenerlo visible + +930 +00:35:08,580 --> 00:35:12,359 +¿Esto garantiza que vamos a + +931 +00:35:10,380 --> 00:35:15,720 +construir esa característica no no necesariamente + +932 +00:35:12,359 --> 00:35:17,700 +Depende de la organización del producto de + +933 +00:35:15,720 --> 00:35:20,880 +openx para ayudarnos a priorizar eso + +934 +00:35:17,700 --> 00:35:22,980 +trabajo pendiente, pero este es el proyecto que es un + +935 +00:35:20,880 --> 00:35:25,200 +duocracia bien y si quieres + +936 +00:35:22,980 --> 00:35:27,599 +Influir en qué proyectos se priorizan. + +937 +00:35:25,200 --> 00:35:29,400 +esta es una invitación abierta, únete + +938 +00:35:27,599 --> 00:35:33,320 +el grupo de trabajo del producto que es el + +939 +00:35:29,400 --> 00:35:33,320 +la mejor manera de hacer oír tu voz + +940 +00:35:35,579 --> 00:35:41,640 +y ahora me gustaría invitar a adrian + +941 +00:35:39,720 --> 00:35:43,980 +nuestro invitado especial + +942 +00:35:41,640 --> 00:35:46,560 +Adrian devison es el director ejecutivo + +943 +00:35:43,980 --> 00:35:48,119 +de Empower una organización sin fines de lucro + +944 +00:35:46,560 --> 00:35:49,920 +que enseña informática a alto + +945 +00:35:48,119 --> 00:35:51,119 +estudiantes de color de la escuela que comienzan en el + +946 +00:35:49,920 --> 00:35:53,160 +Noveno grado + +947 +00:35:51,119 --> 00:35:54,900 +Empower ha estado usando las ediciones abiertas + +948 +00:35:53,160 --> 00:35:56,760 +plataforma para entregar los elementos en línea + +949 +00:35:54,900 --> 00:35:58,460 +del plan de estudios y nos sentimos muy honrados + +950 +00:35:56,760 --> 00:36:09,119 +tenerte aquí hoy Adrián + +951 +00:35:58,460 --> 00:36:11,400 +[Aplausos] + +952 +00:36:09,119 --> 00:36:13,200 +gracias um Adrian devison el + +953 +00:36:11,400 --> 00:36:15,780 +director ejecutivo de empoderamiento + +954 +00:36:13,200 --> 00:36:17,579 +Empower es una organización sin fines de lucro que crea + +955 +00:36:15,780 --> 00:36:18,480 +canal de escuela a carrera para estudiantes + +956 +00:36:17,579 --> 00:36:20,640 +de color + +957 +00:36:18,480 --> 00:36:22,800 +enseñamos desarrollo de software como + +958 +00:36:20,640 --> 00:36:25,200 +programa plurianual para ayudar a aumentar + +959 +00:36:22,800 --> 00:36:27,540 +diversidad en tecnología y generacional + +960 +00:36:25,200 --> 00:36:29,099 +ciclos de pobreza y crear un entorno equitativo + +961 +00:36:27,540 --> 00:36:31,440 +futuro para todos + +962 +00:36:29,099 --> 00:36:32,940 +nuestros estudiantes se unen a nuestro programa en noveno + +963 +00:36:31,440 --> 00:36:34,740 +grado y permanecer durante todo el + +964 +00:36:32,940 --> 00:36:36,060 +toda su carrera en la escuela secundaria + +965 +00:36:34,740 --> 00:36:37,920 +en noveno grado aprendieron el + +966 +00:36:36,060 --> 00:36:39,780 +fundamentos del desarrollo de software y + +967 +00:36:37,920 --> 00:36:43,020 +someterse a una formación de liderazgo + +968 +00:36:39,780 --> 00:36:45,300 +en décimo grado piensan en ideas de aplicaciones para + +969 +00:36:43,020 --> 00:36:47,640 +impactar a su comunidad y luego tenemos + +970 +00:36:45,300 --> 00:36:49,200 +una competencia de lanzamiento y quien gane nosotros + +971 +00:36:47,640 --> 00:36:51,300 +construir juntos esa idea de aplicación + +972 +00:36:49,200 --> 00:36:52,920 +y los estudiantes luego lo incorporan para + +973 +00:36:51,300 --> 00:36:54,900 +aumentamos el número de minorías y + +974 +00:36:52,920 --> 00:36:57,780 +empresas propiedad de mujeres y estudiantes de espectáculos + +975 +00:36:54,900 --> 00:36:59,880 +el poder en ellos y su trabajo + +976 +00:36:57,780 --> 00:37:01,500 +y el tercer año nuestros alumnos obtienen + +977 +00:36:59,880 --> 00:37:03,420 +Prácticas de secundaria con nuestros + +978 +00:37:01,500 --> 00:37:05,280 +socios y que ayuda a nuestros estudiantes + +979 +00:37:03,420 --> 00:37:07,680 +traer ingresos adicionales especialmente para + +980 +00:37:05,280 --> 00:37:09,060 +nuestros estudiantes en áreas de bajos ingresos y en + +981 +00:37:07,680 --> 00:37:10,740 +al mismo tiempo asegurarnos de que nuestros estudiantes + +982 +00:37:09,060 --> 00:37:12,660 +graduarse de uno a dos años de experiencia + +983 +00:37:10,740 --> 00:37:14,520 +incluso antes de salir de la escuela secundaria + +984 +00:37:12,660 --> 00:37:17,220 +continúan esas pasantías en + +985 +00:37:14,520 --> 00:37:18,480 +su último año y también aprender que sabes + +986 +00:37:17,220 --> 00:37:20,640 +networking profesional y solución + +987 +00:37:18,480 --> 00:37:22,020 +habilidades comerciales para que cuando se gradúen + +988 +00:37:20,640 --> 00:37:23,400 +podemos trabajar para nuestros socios para garantizar que + +989 +00:37:22,020 --> 00:37:25,619 +todos tienen carreras esperándolos + +990 +00:37:23,400 --> 00:37:27,780 +nuestros graduados actuales obtienen un promedio de + +991 +00:37:25,619 --> 00:37:31,020 +setenta mil dólares en un año + +992 +00:37:27,780 --> 00:37:33,180 +de graduarse de la escuela secundaria + +993 +00:37:31,020 --> 00:37:34,619 +para poder escalar un programa como este + +994 +00:37:33,180 --> 00:37:36,119 +es muy difícil calificar manualmente + +995 +00:37:34,619 --> 00:37:39,839 +todo así que tuve que empezar a conseguir + +996 +00:37:36,119 --> 00:37:41,280 +creativo e inspirado en el código de fuga I + +997 +00:37:39,839 --> 00:37:43,320 +Decidimos que podemos crear una plataforma. + +998 +00:37:41,280 --> 00:37:45,900 +que permite a los profesores crear una + +999 +00:37:43,320 --> 00:37:48,240 +tarea en un par de minutos y + +1000 +00:37:45,900 --> 00:37:50,700 +que lo califiquen automáticamente mediante un control remoto + +1001 +00:37:48,240 --> 00:37:53,160 +servidor esto también nos permitiría + +1002 +00:37:50,700 --> 00:37:55,920 +Reduzca los costos enviando a cada estudiante un + +1003 +00:37:53,160 --> 00:37:58,440 +Macbook y al mismo tiempo + +1004 +00:37:55,920 --> 00:38:00,180 +Podemos admitir más de 100 diferentes + +1005 +00:37:58,440 --> 00:38:01,740 +Idiomas para que podamos seguir agregando cursos. + +1006 +00:38:00,180 --> 00:38:03,359 +a medida que avanzamos + +1007 +00:38:01,740 --> 00:38:05,339 +y el espíritu de democratización + +1008 +00:38:03,359 --> 00:38:07,140 +Educación nos aseguramos de que fuera gratuita y + +1009 +00:38:05,339 --> 00:38:11,000 +código abierto disponible para todos en + +1010 +00:38:07,140 --> 00:38:11,000 +GitHub para contribuir y utilizar + +1011 +00:38:11,220 --> 00:38:16,400 +Así que aquí tienes una demostración de cómo copiar nuestra plataforma. + +1012 +00:38:16,800 --> 00:38:20,640 +comenzamos en el panel de tareas + +1013 +00:38:18,540 --> 00:38:23,099 +y luego podemos bajar y podemos + +1014 +00:38:20,640 --> 00:38:25,079 +en realidad crear una nueva tarea + +1015 +00:38:23,099 --> 00:38:26,820 +le damos un título a la tarea y + +1016 +00:38:25,079 --> 00:38:28,380 +empieza con hola mundo porque todos somos + +1017 +00:38:26,820 --> 00:38:30,720 +desarrolladores aquí + +1018 +00:38:28,380 --> 00:38:33,180 +le damos una identificación de referencia y esto fue + +1019 +00:38:30,720 --> 00:38:35,880 +¿Qué usará edx para saber qué problema? + +1020 +00:38:33,180 --> 00:38:38,579 +para resolver puedes darle un total + +1021 +00:38:35,880 --> 00:38:40,980 +intentos que cero significa ilimitado y + +1022 +00:38:38,579 --> 00:38:43,140 +cualquier cosa por encima de eso es el número real + +1023 +00:38:40,980 --> 00:38:44,280 +Luego usamos Markdown para pegar el + +1024 +00:38:43,140 --> 00:38:47,160 +instrucciones + +1025 +00:38:44,280 --> 00:38:48,839 +un mensaje de éxito y un mensaje de fracaso + +1026 +00:38:47,160 --> 00:38:51,180 +para animar a sus alumnos en caso de que + +1027 +00:38:48,839 --> 00:38:53,760 +no completes el problema + +1028 +00:38:51,180 --> 00:38:55,619 +Podemos desplazarnos hacia abajo y vamos a nuestro + +1029 +00:38:53,760 --> 00:38:57,420 +códigos de asignación donde podemos agregar Which + +1030 +00:38:55,619 --> 00:38:59,640 +idiomas los estudiantes lo completarán + +1031 +00:38:57,420 --> 00:39:01,079 +en y cualquier prueba unitaria que se utilice para + +1032 +00:38:59,640 --> 00:39:03,480 +califica esto + +1033 +00:39:01,079 --> 00:39:05,220 +Entonces seleccionamos nuestro idioma y podemos decidir. + +1034 +00:39:03,480 --> 00:39:07,020 +si es el idioma principal + +1035 +00:39:05,220 --> 00:39:10,800 +Entonces podemos decidir si es inyectable. + +1036 +00:39:07,020 --> 00:39:12,540 +código que significa que nos esconderemos + +1037 +00:39:10,800 --> 00:39:14,700 +todo el código que puedas necesitar para ejecutar la unidad + +1038 +00:39:12,540 --> 00:39:15,960 +pruebas y tener estos soportes y eso es + +1039 +00:39:14,700 --> 00:39:17,220 +todo lo que el estudiante realmente verá es + +1040 +00:39:15,960 --> 00:39:18,720 +ese espacio vacío donde está el código + +1041 +00:39:17,220 --> 00:39:21,060 +inyectado + +1042 +00:39:18,720 --> 00:39:22,500 +Podemos proporcionar un código de solución opcional. + +1043 +00:39:21,060 --> 00:39:24,000 +en caso de que quieras que tus estudiantes sean + +1044 +00:39:22,500 --> 00:39:24,839 +capaz de ver la solución real al + +1045 +00:39:24,000 --> 00:39:27,119 +problema + +1046 +00:39:24,839 --> 00:39:29,640 +y por último le damos nuestras pruebas unitarias a + +1047 +00:39:27,119 --> 00:39:31,859 +realmente calificar la tarea contra + +1048 +00:39:29,640 --> 00:39:34,020 +luego simplemente hacemos clic en guardar + +1049 +00:39:31,859 --> 00:39:36,240 +puedes agregar tantos idiomas como quieras + +1050 +00:39:34,020 --> 00:39:37,859 +desea que sean compatibles con su servidor + +1051 +00:39:36,240 --> 00:39:41,099 +y es muy fácil agregar un idioma + +1052 +00:39:37,859 --> 00:39:43,619 +todo lo que haces es darle un nombre un mimo + +1053 +00:39:41,099 --> 00:39:45,720 +eso es del código refleja una expresión regular que + +1054 +00:39:43,619 --> 00:39:49,920 +nos ayuda a analizar la prueba unitaria real + +1055 +00:39:45,720 --> 00:39:52,800 +error y una URL espejo de código + +1056 +00:39:49,920 --> 00:39:55,800 +y una vez que hagamos eso + +1057 +00:39:52,800 --> 00:39:58,020 +Entonces podemos ver cómo um + +1058 +00:39:55,800 --> 00:40:00,300 +traemos esto en vivo en edx + +1059 +00:39:58,020 --> 00:40:03,720 +y así como crear cualquier otro + +1060 +00:40:00,300 --> 00:40:04,740 +El problema de un bloque x es ir a + +1061 +00:40:03,720 --> 00:40:07,980 +Avanzado + +1062 +00:40:04,740 --> 00:40:11,400 +seleccionarás el complemento Swift + +1063 +00:40:07,980 --> 00:40:13,740 +y luego lo cargará en tu pantalla + +1064 +00:40:11,400 --> 00:40:16,740 +después de eso hacemos clic en editar y todo + +1065 +00:40:13,740 --> 00:40:19,320 +Tienes que pasar es el ID de referencia del + +1066 +00:40:16,740 --> 00:40:21,720 +URL al policía en el servidor + +1067 +00:40:19,320 --> 00:40:24,560 +y luego la clave API proporcionada a su usuario + +1068 +00:40:21,720 --> 00:40:24,560 +en coppin + +1069 +00:40:25,740 --> 00:40:30,900 +y después de eso simplemente podemos publicar el + +1070 +00:40:28,500 --> 00:40:32,280 +tarea y lo veremos + +1071 +00:40:30,900 --> 00:40:34,520 +y podemos ver el directo + +1072 +00:40:32,280 --> 00:40:34,520 +versión + +1073 +00:40:34,560 --> 00:40:37,940 +una vez que nuestro video se ponga al día + +1074 +00:40:39,599 --> 00:40:44,220 +y aquí vemos que la rebaja es + +1075 +00:40:41,880 --> 00:40:45,900 +formateado como HTML + +1076 +00:40:44,220 --> 00:40:48,060 +y nosotros el estudiante podemos seleccionar cualquiera + +1077 +00:40:45,900 --> 00:40:49,859 +idiomas solo le dimos uno para que + +1078 +00:40:48,060 --> 00:40:52,560 +solo puedo seleccionar Swift + +1079 +00:40:49,859 --> 00:40:53,520 +y entonces podremos empezar a escribir + +1080 +00:40:52,560 --> 00:40:55,020 +nuestro codigo + +1081 +00:40:53,520 --> 00:40:57,060 +ahora se supone que debe escribir hola mundo + +1082 +00:40:55,020 --> 00:40:59,040 +pero nuestro estudiante acaba de escribir hola + +1083 +00:40:57,060 --> 00:41:01,920 +entonces el código se generó exitosamente + +1084 +00:40:59,040 --> 00:41:03,359 +pero luego, cuando vayan a probarlo, lo haremos + +1085 +00:41:01,920 --> 00:41:04,800 +Note que les va a dar una + +1086 +00:41:03,359 --> 00:41:07,200 +error por supuesto + +1087 +00:41:04,800 --> 00:41:09,599 +y lo que hace es probar el código + +1088 +00:41:07,200 --> 00:41:10,800 +en nuestro servidor médico es lo que + +1089 +00:41:09,599 --> 00:41:12,119 +lo nombró + +1090 +00:41:10,800 --> 00:41:13,619 +y les devuelve la prueba unitaria + +1091 +00:41:12,119 --> 00:41:15,060 +falla + +1092 +00:41:13,619 --> 00:41:16,980 +y ahora el estudiante puede ir y + +1093 +00:41:15,060 --> 00:41:19,260 +corregir el error + +1094 +00:41:16,980 --> 00:41:21,300 +enviar el código nuevamente + +1095 +00:41:19,260 --> 00:41:24,240 +y ahora quiero probar con éxito y + +1096 +00:41:21,300 --> 00:41:27,500 +pasar, en realidad actualizará la calificación para + +1097 +00:41:24,240 --> 00:41:27,500 +las tareas de los estudiantes para ellos + +1098 +00:41:28,079 --> 00:41:31,880 +y sí, ahora eres desarrollador + +1099 +00:41:31,980 --> 00:41:35,220 +porque les dimos una opción + +1100 +00:41:33,900 --> 00:41:36,839 +código de solución, pueden hacer clic en + +1101 +00:41:35,220 --> 00:41:39,240 +pestaña de solución para ver cuál es la solución + +1102 +00:41:36,839 --> 00:41:41,160 +fue también + +1103 +00:41:39,240 --> 00:41:42,060 +y así en menos de tres minutos tu + +1104 +00:41:41,160 --> 00:41:44,579 +puede crear + +1105 +00:41:42,060 --> 00:41:47,700 +y permita que sus estudiantes corran + +1106 +00:41:44,579 --> 00:41:50,420 +tareas de programación en su servidor + +1107 +00:41:47,700 --> 00:41:55,309 +Entonces, ¿cómo puedes ayudar? + +1108 +00:41:50,420 --> 00:41:55,309 +[Aplausos] + +1109 +00:41:55,920 --> 00:42:00,540 +bueno si como puedes ayudar + +1110 +00:41:58,339 --> 00:42:01,980 +pasantías para cualquiera de ustedes que conozca + +1111 +00:42:00,540 --> 00:42:03,900 +Cualquiera que nuestros estudiantes siempre estén buscando. + +1112 +00:42:01,980 --> 00:42:06,599 +pasantías lo que me gusta contarle a la gente + +1113 +00:42:03,900 --> 00:42:08,579 +es en la escuela que operamos principalmente + +1114 +00:42:06,599 --> 00:42:11,220 +en la escuela secundaria del sur de Atlanta el + +1115 +00:42:08,579 --> 00:42:12,960 +ingreso promedio de un hogar como + +1116 +00:42:11,220 --> 00:42:13,920 +El ingreso total del hogar es de diez dólares al año. + +1117 +00:42:12,960 --> 00:42:16,619 +hora + +1118 +00:42:13,920 --> 00:42:18,720 +muchos de nuestros estudiantes no comen o + +1119 +00:42:16,619 --> 00:42:21,900 +no tienen ropa y el promedio + +1120 +00:42:18,720 --> 00:42:24,599 +pasante de desarrollo de software hace 25 años + +1121 +00:42:21,900 --> 00:42:26,700 +hora para proporcionar una pasantía a estos + +1122 +00:42:24,599 --> 00:42:29,339 +estudiantes, efectivamente estás triplicando el + +1123 +00:42:26,700 --> 00:42:32,640 +ingresos de ese hogar para el año + +1124 +00:42:29,339 --> 00:42:34,200 +Las donaciones se destinan a comprar más MacBooks. + +1125 +00:42:32,640 --> 00:42:36,660 +Para los estudiantes se los proporcionamos todos. + +1126 +00:42:34,200 --> 00:42:38,099 +con conexión gratuita a Internet para auriculares MacBooks + +1127 +00:42:36,660 --> 00:42:40,260 +becas si no tienen internet en + +1128 +00:42:38,099 --> 00:42:42,000 +Planes de alimentación en el hogar para nuestros de bajos ingresos. + +1129 +00:42:40,260 --> 00:42:43,920 +estudiantes y ropa para los que no + +1130 +00:42:42,000 --> 00:42:47,099 +tenerlos también + +1131 +00:42:43,920 --> 00:42:48,660 +y los voluntarios que desarrollaron Captain tomaron una + +1132 +00:42:47,099 --> 00:42:49,980 +mucho tiempo y si revisas mi GitHub + +1133 +00:42:48,660 --> 00:42:51,040 +Historia Todavía estaba enviando cosas. + +1134 +00:42:49,980 --> 00:42:54,560 +anoche + +1135 +00:42:51,040 --> 00:42:54,560 +[Risa] + +1136 +00:42:55,520 --> 00:43:00,960 +así que cualquiera que sea bueno con la seguridad, le recomendaría + +1137 +00:42:59,579 --> 00:43:03,300 +Me encanta que vengas porque yo estaba + +1138 +00:43:00,960 --> 00:43:05,640 +no soy ingeniero de seguridad cibernética + +1139 +00:43:03,300 --> 00:43:07,740 +um ux también ese nunca fue mi fuerte + +1140 +00:43:05,640 --> 00:43:10,079 +punto pero escribiendo el código lo entendí + +1141 +00:43:07,740 --> 00:43:12,599 +Listo y entonces, me encantaría que vinieras. + +1142 +00:43:10,079 --> 00:43:15,180 +entrar y ayudar ayudar a construir coppin en + +1143 +00:43:12,599 --> 00:43:16,130 +algo aún más grande + +1144 +00:43:15,180 --> 00:43:30,060 +gracias + +1145 +00:43:16,130 --> 00:43:32,520 +[Aplausos] + +1146 +00:43:30,060 --> 00:43:34,319 +así que todos estaremos aquí arriba + +1147 +00:43:32,520 --> 00:43:37,020 +preguntas no dude en hacer preguntas de + +1148 +00:43:34,319 --> 00:43:40,280 +yo Jenna o Adrian eso era eso era + +1149 +00:43:37,020 --> 00:43:40,280 +Fantástico, gracias + +1150 +00:43:41,040 --> 00:43:45,000 +y hay micrófonos aquí abajo así que por favor + +1151 +00:43:43,260 --> 00:43:48,660 +por favor entra al micro para que podamos grabar + +1152 +00:43:45,000 --> 00:43:50,280 +tu pregunta si tienes uno + +1153 +00:43:48,660 --> 00:43:51,900 +tienes una pregunta levanta la mano + +1154 +00:43:50,280 --> 00:43:55,160 +alguien + +1155 +00:43:51,900 --> 00:43:55,160 +no, lo clavaron + +1156 +00:43:58,920 --> 00:44:01,640 +¿Están estos en vivo? + +1157 +00:44:02,460 --> 00:44:07,740 +No vi ninguno y tal vez me lo perdí. + +1158 +00:44:04,140 --> 00:44:09,960 +En la diapositiva hay una URL o un código QR. + +1159 +00:44:07,740 --> 00:44:11,160 +para empoderar + +1160 +00:44:09,960 --> 00:44:13,640 +Um, sí, debería haber puesto uno en el + +1161 +00:44:11,160 --> 00:44:16,640 +diapositiva eh pero um + +1162 +00:44:13,640 --> 00:44:16,640 +empoderaco.org + +1163 +00:44:16,819 --> 00:44:21,540 +empowrco.org y estoy seguro de que usted puede + +1164 +00:44:20,040 --> 00:44:23,460 +Busca también en Google y encontrarás el + +1165 +00:44:21,540 --> 00:44:26,180 +GitHub que es policía y el resto de nuestro + +1166 +00:44:23,460 --> 00:44:26,180 +servidores en él + +1167 +00:44:27,500 --> 00:44:32,280 +Quiero preguntarle a Adrián cómo estás. + +1168 +00:44:30,420 --> 00:44:34,140 +presentaciones que sin problemas estoy estoy + +1169 +00:44:32,280 --> 00:44:36,560 +inspirado de varias maneras por ti + +1170 +00:44:34,140 --> 00:44:36,560 +ahora mismo + +1171 +00:44:48,480 --> 00:44:53,220 +Obviamente una ADI generativa es una + +1172 +00:44:51,300 --> 00:44:57,480 +palabra de moda recientemente + +1173 +00:44:53,220 --> 00:45:01,680 +¿Hay algún plan para incorporar IA? + +1174 +00:44:57,480 --> 00:45:04,339 +herramientas en el producto Romance + +1175 +00:45:01,680 --> 00:45:06,900 +una gran pregunta y + +1176 +00:45:04,339 --> 00:45:09,599 +no en este momento + +1177 +00:45:06,900 --> 00:45:11,819 +Um, justo iba a decir como Jenna. + +1178 +00:45:09,599 --> 00:45:15,720 +Estaba desempacando el camino para nosotros. + +1179 +00:45:11,819 --> 00:45:18,300 +El mapa es generado por este grupo de personas. + +1180 +00:45:15,720 --> 00:45:20,040 +aquí y no sólo la gente del + +1181 +00:45:18,300 --> 00:45:21,599 +frente a la habitación así + +1182 +00:45:20,040 --> 00:45:24,060 +uno + +1183 +00:45:21,599 --> 00:45:25,260 +probablemente haya una opinión impopular + +1184 +00:45:24,060 --> 00:45:27,180 +ya que todo el mundo está tan entusiasmado + +1185 +00:45:25,260 --> 00:45:29,579 +IA generativa en este momento, pero creo + +1186 +00:45:27,180 --> 00:45:31,079 +pensemos en el valor que tenemos + +1187 +00:45:29,579 --> 00:45:32,640 +queremos ofrecer a nuestros estudiantes y cómo + +1188 +00:45:31,079 --> 00:45:34,560 +queremos cambiar sus vidas en lugar + +1189 +00:45:32,640 --> 00:45:37,440 +que encontrar una manera de utilizar una tecnología + +1190 +00:45:34,560 --> 00:45:39,599 +Eso realmente se ve muy bien, pero si + +1191 +00:45:37,440 --> 00:45:41,400 +tener ideas sobre cómo lo haremos realmente + +1192 +00:45:39,599 --> 00:45:42,839 +impactar las vidas de nuestros estudiantes con + +1193 +00:45:41,400 --> 00:45:46,260 +IA generativa, pongámoslos en marcha + +1194 +00:45:42,839 --> 00:45:48,180 +hoja de ruta y hagamos que todos + +1195 +00:45:46,260 --> 00:45:49,800 +refinando esas ideas y ayudándonos + +1196 +00:45:48,180 --> 00:45:52,400 +priorizarlos y entender qué + +1197 +00:45:49,800 --> 00:45:52,400 +deberíamos estar construyendo + +1198 +00:45:54,119 --> 00:45:59,160 +Sí, tengo una pregunta para ti, Jenna. + +1199 +00:45:55,980 --> 00:46:01,740 +Estoy realmente sorprendido por lo que lograste. + +1200 +00:45:59,160 --> 00:46:04,079 +en solo un año tengo curiosidad por tener + +1201 +00:46:01,740 --> 00:46:06,240 +tu perspectiva sobre cuáles son los únicos + +1202 +00:46:04,079 --> 00:46:09,060 +desafíos que enfrentarías en + +1203 +00:46:06,240 --> 00:46:12,300 +definir un producto para un código abierto + +1204 +00:46:09,060 --> 00:46:16,260 +Comunidad donde la gente puede simplemente unirse + +1205 +00:46:12,300 --> 00:46:18,180 +y proponernos construir cosas que + +1206 +00:46:16,260 --> 00:46:20,700 +eso no es eso no está necesariamente en el + +1207 +00:46:18,180 --> 00:46:22,260 +hoja de ruta sí, esa es una gran pregunta. + +1208 +00:46:20,700 --> 00:46:24,780 +Creo que uno de los mayores desafíos que + +1209 +00:46:22,260 --> 00:46:25,920 +nos hemos topado con cuál es algo así como tú + +1210 +00:46:24,780 --> 00:46:27,000 +Saber que los desafíos son siempre oportunidades. + +1211 +00:46:25,920 --> 00:46:28,260 +bien + +1212 +00:46:27,000 --> 00:46:30,180 +Um, pero el mayor desafío es que + +1213 +00:46:28,260 --> 00:46:32,220 +Hay tantos casos de uso que el + +1214 +00:46:30,180 --> 00:46:35,280 +Se utiliza la plataforma para lo cual es genial. + +1215 +00:46:32,220 --> 00:46:38,160 +correcto, pero presenta algunos desafíos en + +1216 +00:46:35,280 --> 00:46:41,339 +términos de decidir qué priorizamos + +1217 +00:46:38,160 --> 00:46:43,740 +um un par de ejemplos correctos que tenemos + +1218 +00:46:41,339 --> 00:46:45,540 +la plataforma ejecuta moocs y en línea + +1219 +00:46:43,740 --> 00:46:47,160 +grados cierto esos son dos muy muy + +1220 +00:46:45,540 --> 00:46:48,660 +diferentes conjuntos de características que son + +1221 +00:46:47,160 --> 00:46:49,819 +requerido para hacer esos casos de uso + +1222 +00:46:48,660 --> 00:46:52,619 +exitoso + +1223 +00:46:49,819 --> 00:46:54,300 +pero en términos de esto, este tipo de cosas van + +1224 +00:46:52,619 --> 00:46:55,560 +a la oferta principal de productos que es + +1225 +00:46:54,300 --> 00:46:56,579 +una de las cosas que toqué en lo que + +1226 +00:46:55,560 --> 00:46:58,740 +hablaremos de esto más adelante + +1227 +00:46:56,579 --> 00:47:00,359 +mañana también uno de los + +1228 +00:46:58,740 --> 00:47:01,980 +estrategias para la plataforma es que nosotros + +1229 +00:47:00,359 --> 00:47:04,140 +Queremos simplificarlo para que tengamos un + +1230 +00:47:01,980 --> 00:47:06,300 +núcleo que pueda soportar tanta diversidad + +1231 +00:47:04,140 --> 00:47:08,940 +posible y este concepto de + +1232 +00:47:06,300 --> 00:47:11,220 +sistema de catalogo donde podemos ir agregando + +1233 +00:47:08,940 --> 00:47:12,599 +indexar y agregar herramientas que pueda + +1234 +00:47:11,220 --> 00:47:14,400 +uso que se basan en el tipo de + +1235 +00:47:12,599 --> 00:47:16,020 +personalización que deseas construir, ¿y qué? + +1236 +00:47:14,400 --> 00:47:18,000 +estás enseñando o el tipo de enseñanza + +1237 +00:47:16,020 --> 00:47:20,520 +que lo estas haciendo la idea es que nosotros + +1238 +00:47:18,000 --> 00:47:22,500 +simplificar para volver a ampliar + +1239 +00:47:20,520 --> 00:47:23,940 +y creo que ese es uno de los + +1240 +00:47:22,500 --> 00:47:26,339 +estrategias que hemos utilizado para + +1241 +00:47:23,940 --> 00:47:28,260 +acercarse a eso, pero relacionado, aunque es + +1242 +00:47:26,339 --> 00:47:29,460 +que hay porque hay tantos usos + +1243 +00:47:28,260 --> 00:47:31,079 +Casos que vienen de tantos. + +1244 +00:47:29,460 --> 00:47:33,240 +diferentes organizaciones por lo que no estamos + +1245 +00:47:31,079 --> 00:47:34,920 +simplemente construyendo para un conjunto particular de + +1246 +00:47:33,240 --> 00:47:36,720 +clientes o un conjunto de clientes o un + +1247 +00:47:34,920 --> 00:47:39,300 +un grupo de personas para el que estamos construyendo + +1248 +00:47:36,720 --> 00:47:41,520 +a todos les gusta exponencialmente y así + +1249 +00:47:39,300 --> 00:47:44,040 +trabajando con diferentes métodos para probar + +1250 +00:47:41,520 --> 00:47:45,480 +y recopilar historias de usuarios de varios + +1251 +00:47:44,040 --> 00:47:47,099 +partes interesadas de toda la comunidad han + +1252 +00:47:45,480 --> 00:47:50,579 +Ha sido una táctica que hemos usado para probar. + +1253 +00:47:47,099 --> 00:47:52,140 +y obtener una representación más amplia de usted + +1254 +00:47:50,579 --> 00:47:54,240 +conocer las necesidades y los puntos débiles en todo el + +1255 +00:47:52,140 --> 00:47:56,640 +comunidad, pero sí, siempre estamos abiertos a + +1256 +00:47:54,240 --> 00:47:58,859 +Me sigue gustando evolucionar esos conceptos. + +1257 +00:47:56,640 --> 00:48:00,000 +e ideas y ya sabes, ojalá podamos + +1258 +00:47:58,859 --> 00:48:01,680 +ser capaz de aprovechar un poco más + +1259 +00:48:00,000 --> 00:48:02,940 +modos experimentales en el próximo año como + +1260 +00:48:01,680 --> 00:48:05,040 +Bueno + +1261 +00:48:02,940 --> 00:48:08,000 +tenemos una ultima pregunta + +1262 +00:48:05,040 --> 00:48:08,000 +de cualquiera + +1263 +00:48:11,339 --> 00:48:17,280 +Me encantaría saber acerca de uno o dos de + +1264 +00:48:13,980 --> 00:48:20,540 +las ideas de aplicaciones para estudiantes que potencian eso + +1265 +00:48:17,280 --> 00:48:20,540 +los estudiantes querían construir + +1266 +00:48:20,940 --> 00:48:25,920 +Sí, sí, definitivamente, somos nosotros. + +1267 +00:48:23,460 --> 00:48:26,940 +construir ahora lo deciden los estudiantes + +1268 +00:48:25,920 --> 00:48:28,859 +eso + +1269 +00:48:26,940 --> 00:48:32,520 +Las bolsas de trabajo son simplemente aburridas para ellos. + +1270 +00:48:28,859 --> 00:48:34,740 +no encuentran de hecho un monstruo y + +1271 +00:48:32,520 --> 00:48:38,400 +todos esos entretenidos de usar para que sean + +1272 +00:48:34,740 --> 00:48:41,160 +básicamente haciendo una bolsa de trabajo para sus + +1273 +00:48:38,400 --> 00:48:43,680 +generación donde puedes aplicar tipo de + +1274 +00:48:41,160 --> 00:48:45,960 +¿Cómo usarías el tic tac? Puedes uh + +1275 +00:48:43,680 --> 00:48:48,119 +las empresas te mostrarían moda genial + +1276 +00:48:45,960 --> 00:48:49,859 +vídeos de su lugar de trabajo y de su + +1277 +00:48:48,119 --> 00:48:51,480 +la aplicación comenzaría con un + +1278 +00:48:49,859 --> 00:48:53,040 +introducción usando ese tipo de mismo + +1279 +00:48:51,480 --> 00:48:55,380 +tecnología de video donde muestras cortos + +1280 +00:48:53,040 --> 00:48:56,940 +clips de ti mismo y lo que has hecho + +1281 +00:48:55,380 --> 00:48:58,800 +Y después de eso, por supuesto, todavía + +1282 +00:48:56,940 --> 00:49:00,540 +Tengo tu currículum pero de alguna manera hace un + +1283 +00:48:58,800 --> 00:49:02,220 +enfoque más personal del trabajo + +1284 +00:49:00,540 --> 00:49:04,800 +aplicaciones de una manera que habla + +1285 +00:49:02,220 --> 00:49:08,579 +su generación y para que uno a mí + +1286 +00:49:04,800 --> 00:49:11,040 +Fue realmente genial y um, la cohorte anterior. + +1287 +00:49:08,579 --> 00:49:12,900 +ellos ellos que estaban a mitad de la + +1288 +00:49:11,040 --> 00:49:14,520 +pandemia y tuvieron problemas para hacer + +1289 +00:49:12,900 --> 00:49:15,240 +amigos mientras pasaban por la Alta + +1290 +00:49:14,520 --> 00:49:17,460 +Escuela + +1291 +00:49:15,240 --> 00:49:19,859 +tuvieron problemas adicionales porque + +1292 +00:49:17,460 --> 00:49:23,280 +no podían salir y por eso decidieron + +1293 +00:49:19,859 --> 00:49:25,380 +para crear una aplicación de patinaje que sea completa + +1294 +00:49:23,280 --> 00:49:27,359 +El propósito era conseguir que cualquiera que quisiera + +1295 +00:49:25,380 --> 00:49:29,280 +montar ruedas en bicicletas, patinetas o + +1296 +00:49:27,359 --> 00:49:31,680 +cualquier cosa para poder unirnos y + +1297 +00:49:29,280 --> 00:49:33,180 +para desviar los eventos de patinaje y + +1298 +00:49:31,680 --> 00:49:36,060 +Así que tenían un par de diferentes. + +1299 +00:49:33,180 --> 00:49:36,900 +ideas únicas y por eso estoy muy orgulloso de + +1300 +00:49:36,060 --> 00:49:38,880 +uno + +1301 +00:49:36,900 --> 00:49:40,680 +para poder verlo crecer y ellos + +1302 +00:49:38,880 --> 00:49:44,839 +Tengo muchas otras ideas y todavía + +1303 +00:49:40,680 --> 00:49:44,839 +Espero que creen que no fueron elegidos así. + +1304 +00:49:45,960 --> 00:49:50,949 +[Aplausos] + diff --git a/demo-course/course/static/Abacus.png b/demo-course/course/static/Abacus.png new file mode 100644 index 0000000..1ccf8fa Binary files /dev/null and b/demo-course/course/static/Abacus.png differ diff --git a/demo-course/course/static/Abacus_solution.png b/demo-course/course/static/Abacus_solution.png new file mode 100644 index 0000000..779e067 Binary files /dev/null and b/demo-course/course/static/Abacus_solution.png differ diff --git a/demo-course/course/static/Brain green.png b/demo-course/course/static/Brain green.png new file mode 100644 index 0000000..2442edb Binary files /dev/null and b/demo-course/course/static/Brain green.png differ diff --git a/demo-course/course/static/Brain red.png b/demo-course/course/static/Brain red.png new file mode 100644 index 0000000..81254fe Binary files /dev/null and b/demo-course/course/static/Brain red.png differ diff --git a/demo-course/course/static/Brain yellow.png b/demo-course/course/static/Brain yellow.png new file mode 100644 index 0000000..ae89e47 Binary files /dev/null and b/demo-course/course/static/Brain yellow.png differ diff --git a/demo-course/course/static/Brain_target_sm.png b/demo-course/course/static/Brain_target_sm.png new file mode 100644 index 0000000..5347525 Binary files /dev/null and b/demo-course/course/static/Brain_target_sm.png differ diff --git a/demo-course/course/static/DiagnosisSimulation.html b/demo-course/course/static/DiagnosisSimulation.html new file mode 100644 index 0000000..9b39658 --- /dev/null +++ b/demo-course/course/static/DiagnosisSimulation.html @@ -0,0 +1,826 @@ + + + + + +Medical Diagnosis + + + + + + + + + diff --git a/demo-course/course/static/DiagnosisSimulation2.html b/demo-course/course/static/DiagnosisSimulation2.html new file mode 100644 index 0000000..8abd656 --- /dev/null +++ b/demo-course/course/static/DiagnosisSimulation2.html @@ -0,0 +1,809 @@ + + + + + +Medical Diagnosis + + + + + + + + + diff --git a/demo-course/course/static/DiagnosisSimulation_h2_1.html b/demo-course/course/static/DiagnosisSimulation_h2_1.html new file mode 100644 index 0000000..79fbc70 --- /dev/null +++ b/demo-course/course/static/DiagnosisSimulation_h2_1.html @@ -0,0 +1,835 @@ + + + + +Medical Diagnosis + + + + + + + + + + + + + + diff --git a/demo-course/course/static/Discussion_Post.png b/demo-course/course/static/Discussion_Post.png new file mode 100644 index 0000000..7ee4430 Binary files /dev/null and b/demo-course/course/static/Discussion_Post.png differ diff --git a/demo-course/course/static/HXEditor.js b/demo-course/course/static/HXEditor.js new file mode 100644 index 0000000..7142034 --- /dev/null +++ b/demo-course/course/static/HXEditor.js @@ -0,0 +1,656 @@ +// This is designed to be called by hx.js +// It uses the Summernote editor. + +var HXEditor = function(use_backpack, toolbar_options) { + 'use strict'; + + const prefix = 'summernote_'; // slot prefix for data storage + const blank_editor = '


    '; + let had_focus; // Last element that had focus. + + logThatThing('HX Editor starting'); + + //*************************** + // Utility functions + // for handling data. + //*************************** + + // These functions make handling prefixes easier. + function getData(slot) { + return hxGetData(prefix + slot); + } + + function setData(slot, val) { + if (typeof val === 'undefined') { + // It's not a save slot, it's an object. + let new_data = {}; + Object.keys(slot).forEach(function(k) { + // Prefix all the data before storing it, to avoid collisions. + new_data[prefix + k] = slot[k]; + }); + return hxSetData(new_data); + } else { + return hxSetData(prefix + slot, val); + } + } + + function clearData(slot) { + return hxClearData(prefix + slot); + } + + function getAllData() { + let new_data = {}; + let old_data = hxGetAllData(); + Object.keys(old_data).forEach(function(k) { + // Only return data with our namespace prefix. + if (k.startsWith(prefix)) { + // de-prefix all the stored data. + new_data[k.replace(prefix, '')] = old_data[k]; + } + }); + return new_data; + } + + //******************************** + // Utility functions + // for working with DOM elements. + //******************************** + + // The save slot is the value in data-saveslot attribute, or '' if blank. + // Pass in the JQuery object for the editor or its child. + function getSaveSlot(e) { + if (e.is('[data-saveslot]')) { + return e.attr('data-saveslot'); + } else { + let editor = e.parents('[data-saveslot]'); + return editor.attr('data-saveslot'); + } + } + + function getEditBox(slot) { + return $('[data-saveslot="' + slot + '"]'); + } + + function getMarkupFrom(slot) { + return $(getEditBox(slot)) + .find('.summernote') + .summernote('code'); + } + + function setMarkupIn(slot, markup_string) { + $(getEditBox(slot)) + .find('.summernote') + .summernote('code', markup_string); + } + + // Which entry in our menu is the topmost actual file? + function getTopFile(menu) { + let top_file; + let special_entries = [ + 'special-spacer1', + 'special-spacer2', + 'special-hx-new', + 'special-hx-rename' + ]; + $(menu) + .find('option') + .each(function(i, e) { + // The first time we can't find a filename in the list of special entries... + if (special_entries.indexOf(e.value) === -1) { + top_file = e.value; + return false; // Breaks out of each() loop + } + }); + return top_file; + } + + //******************************** + // Auto-save. Runs every minute. + // One function for all editors on the page. + //******************************** + function setupAutoSave() { + console.log('setting up auto-save'); + // Wipe out the old autosave function. + if (typeof window.HXautosavers !== 'undefined') { + clearInterval(window.HXautosavers); + } + + // Make an autosave function that gets data from all editors. + window.HXautosavers = setInterval(function() { + // Get all the save slots that are present on this page. + let slots = new Set( + Object.keys($('.hx-editor')).map(x => + $($('.hx-editor')[x]).attr('data-saveslot') + ) + ); + // Remove undefined things from the set. + slots.delete(undefined); + + // If there are no editors visible on the page, kill this loop. + if ($('.hx-editor').length < 1) { + console.log('No editors detected. Turning off auto-save.'); + clearInterval(window.HXautosavers); + } else { + let has_changed = false; + let data_to_save = {}; + let existing_data = getAllData(); + + // Get the data from all visible editors. + slots.forEach(function(slot) { + let new_data = getMarkupFrom(slot); + if (typeof new_data === 'string') { + // Using underscore.js to check object equality. + if (!_.isEqual(existing_data[slot], new_data)) { + data_to_save[slot] = new_data; + has_changed = true; + } + } + }); + + // Only save if something changed. + if (has_changed) { + setData(data_to_save); + // Disable save/load buttons until the backpack reloads. + handleFocus(); + $('.hxed-visiblenotice').text(' Auto-saving...'); + $('.hxed-statusmessage .sr').text('Status: auto-saving...'); + $('.hxeditor-control').prop('disabled', true); + } else { + console.log('No change in data, not saving.'); + } + } + }, 60000); + } + + //******************************** + // Activate an editor and load stored info. + //******************************** + function activateEditor(slot) { + console.log('activating ' + slot + ' editor'); + // Remove the loading indicator + $('.hx-loading-indicator').remove(); + + // Get the editor we're interested in. + let ed = getEditBox(slot); + if (ed.length === 0) { + ed = $('.hx-editor'); + ed.attr('data-saveslot', ''); + } + + // Store any existing markup as default content. + let starting_markup = ed + .find('.hx-editor-default') + .html() + .trim(); + if (starting_markup === '') { + starting_markup = blank_editor; + } + ed.empty(); + + // Insert the div for summernote to hook onto. + let summer = $('
    '); + ed.append(summer); + // Activate summernote. + summer.summernote({ + toolbar: toolbar_options + }); + + // Save the cursor position every time we unfocus the editor. + summer.on('summernote.blur', function() { + console.log('saving range'); + summer.summernote('saveRange'); + }); + + // Box for controls + let control_box = $('
    '); + control_box.addClass('hxed-controlbox'); + ed.prepend(control_box); + + // Add save/download/delete and file menu. + addControls(control_box); + + // Make sure the data includes a slot for the current menu. + // Default content should not overwrite existing data. + let data = getAllData(); + let from_slot = ed.attr('data-from-slot'); + if (data.hasOwnProperty(slot)) { + starting_markup = data[slot]; + } else { + if (typeof from_slot !== undefined && data[from_slot] !== undefined) { + starting_markup = data[from_slot]; + } else { + data[slot] = starting_markup; + } + } + + // Add menu and its listeners + let file_menu = buildMenu(ed, data, getSaveSlot(ed)); + control_box.prepend(file_menu); + attachMenuListener(file_menu); + + // Replace blank editors with the saved data if the backpack is loaded. + if (hxBackpackLoaded) { + if ($(getMarkupFrom(slot)).text() == '') { + setMarkupIn(slot, starting_markup); + } + } + + // Watch editor box. Give warning notice if the text is too long. + // Pretend limit is 5000 characters per file (not enforced), but the + // actual limit is 100k total data per user (enforced). + let notice = $('.hxed-persistentnotice'); + ed.find('.note-editable').on('input', function(e) { + let num_chars = $(this).text().length; + if (num_chars > 4900) { + notice.text(5000 - num_chars + ' characters left'); + } else { + notice.empty(); + } + }); + + // If we're not using the backpack, show a warning notice. + if (!use_backpack) { + let noSaveWarning = $('
    '); + noSaveWarning.css({ + 'background-color': 'orange', + border: '2px solid black' + }); + noSaveWarning.append( + 'Warning: Data storage unavailable. This editor cannot save or load files. Reload the page if you want to try again.' + ); + $('.hx-editor:visible').prepend(noSaveWarning); + } + } + + // Turns on ALL the editors. + function activateAllEditors() { + console.log('Activate All Editors'); + $('.hx-editor:visible').each(function(i, e) { + activateEditor(getSaveSlot($(e))); + }); + } + + //******************************** + // Build the file menu. + // Sometimes we need to rebuild this, so it gets its own function. + //******************************** + function buildMenu(ed, data, starting_file) { + console.log('Build Menu'); + // If we have no files left, give us a single unnamed file. + if (Object.keys(data).length === 0) { + data.Untitled = blank_editor; + ed.attr('data-saveslot', 'Untitled'); + starting_file = 'Untitled'; + } + + let file_menu = $(''); + + let spacer1 = $(''); + let spacer2 = $(''); + let new_file = $(''); + let rename_file = $( + '' + ); + file_menu.addClass('hxed-filemenu hxeditor-control'); + file_menu.append(spacer1); + file_menu.append(new_file); + file_menu.append(rename_file); + file_menu.append(spacer2); + + // Get all the save slots and add to menu. + Object.keys(data).forEach(function(k) { + let slot = $(''); + file_menu.append(slot); + }); + + // If we're not passed a starting file, assign it. + if (starting_file === null) { + starting_file = getTopFile(file_menu); + } + + // Move starting file to top. + file_menu + .find('option[value="' + starting_file + '"]') + .detach() + .prependTo(file_menu); + + file_menu.val(starting_file); + + return file_menu; + } + + // Pass in the jquery object for the editor box. + function rebuildMenu(editor, data, starting_file = null) { + // Clear and rebuild the menu. + let new_menu = buildMenu(editor, data, starting_file); + editor.find('.hxed-filemenu').remove(); + editor.find('.hxed-controlbox').prepend(new_menu); + attachMenuListener(new_menu); + } + + function attachMenuListener(menu) { + // Catch the previous menu item in case we need it. + menu.off('focusin.hxeditor').on('focusin.hxeditor', function() { + $(this).attr('data-previous-val', $(menu).val()); + }); + + menu.off('change.hxeditor').on('change.hxeditor', function(e) { + let slot = e.target.value; + console.log(slot); + let edit_box = getEditBox(getSaveSlot($(menu))); + let summer = edit_box.find('.summernote'); + + // Ignore any blank slots. + if (slot.startsWith('special-spacer')) { + // put selector back where it was. Do nothing. + $(menu).val($(this).attr('data-previous-val')); + } + // Two special cases: new files and renaming existing files. + else if (slot === 'special-hx-new') { + let new_slot = prompt('Name your file:', 'new_file'); + if (new_slot === null || new_slot === '') { + console.log('new file cancelled'); + } else { + // Don't allow names that are identical to existing names. + let all_slots = Object.keys(getAllData()); + if (all_slots.indexOf(new_slot) !== -1) { + // Reject duplicate filename. + $(menu).val($(this).attr('data-previous-val')); + // Give a notice. + edit_box + .find('.hxed-visiblenotice') + .text('Duplicate filname, cannot create.'); + edit_box + .find('.hxed-statusmessage .sr') + .text('Duplicate filname, cannot create.'); + setTimeout(function() { + edit_box.find('.hxed-visiblenotice').empty(); + edit_box.find('.hxed-statusmessage .sr').text('Status: ok'); + }, 3000); + } else { + edit_box.attr('data-saveslot', new_slot); + setMarkupIn(new_slot, blank_editor); + // Add the menu item. + $(menu).prepend( + '' + ); + $(menu).val(new_slot); + attachMenuListener(menu); + // Save. + setData(new_slot, blank_editor); + // Refresh the auto-saves. + setupAutoSave(); + } + } + } else if (slot === 'special-hx-rename') { + let current_slot = getSaveSlot(summer); + let rename_slot = prompt('Rename to:', current_slot); + if (rename_slot === null || rename_slot === '') { + console.log('rename cancelled'); + } else { + // Rename the save slot. + edit_box.attr('data-saveslot', rename_slot); + // Change the menu item. + let option = $('option[value="' + current_slot + '"]'); + option.detach().prependTo($(menu)); + option.val(rename_slot); + option.empty(); + option.text(rename_slot); + $(menu).val(rename_slot); + attachMenuListener(menu); + // Remove the old data. + clearData(current_slot); + // Save. + setData(rename_slot, getMarkupFrom(rename_slot)); + } + } + // Otherwise, we're switching to a different save slot. + else { + // Replace text. + let saved_markup = getData(slot); + if (typeof saved_markup === 'undefined') { + saved_markup = blank_editor; + } + summer.summernote('code', saved_markup); + // Change the data attribute on the editor. + edit_box.attr('data-saveslot', slot); + } + }); + } + + //******************************** + // Create and activate a link to download the current text. + // Saves as an HTML fragment. + //******************************** + function provideDownload(filename, text) { + let element = document.createElement('a'); + element.setAttribute( + 'href', + 'data:text/html;charset=utf-8,' + encodeURIComponent(text) + ); + element.setAttribute('download', filename); + + element.style.display = 'none'; + document.body.appendChild(element); + + element.click(); + + document.body.removeChild(element); + } + + //******************************** + // Save, delete, and download buttons. + //******************************** + function addControls(control_box) { + let download_button = $( + '' + ); + download_button.addClass('hxed-download hxeditor-control'); + + let save_button = $( + '' + ); + save_button.addClass('hxed-save hxeditor-control'); + + let save_notice = $(''); + save_notice.addClass('hxed-statusmessage'); + save_notice.attr('tabindex', '0'); + save_notice.append('Status: ok'); + save_notice.append( + '' + ); + + let persistent_notice = $(''); + persistent_notice.addClass('hxed-persistentnotice'); + persistent_notice.attr('aria-live', 'polite'); + + let delete_button = $(''); + + chimebox.append(chimetoggle); + chimetoggle.wrap('

    '); + if (localStorage.hxChimesOff === 'true') { + chimetoggle.text('Turn video chimes off'); + } else { + chimetoggle.text('Turn video chimes on'); + } + chimetoggle.on('click tap', function() { + localStorage.hxChimesOff = localStorage.hxChimesOff !== 'true'; + chimetoggle.text( + localStorage.hxChimesOff === 'true' + ? 'Turn video chimes off' + : 'Turn video chimes on' + ); + }); + + // Mark each video and set of controls with a class and anchor + // that will let us handle each of them separately. + // Numbering from 1 to make things easier for course creators. + video.each(function(index) { + $(this).addClass('for-video-' + (index + 1)); + }); + video.each(function(index) { + $(this) + .parent() + .prepend(''); + }); + + video.each(function(vidnumber) { + var thisVid = $(this); + var chimeData = setUpLists(vidnumber); + // Check to see whether the video is ready before continuing. + var waitForVid = setInterval(function() { + try { + var state = thisVid.data('video-player-state'); // Sometimes this fails and that's ok. + + if (typeof state.videoPlayer !== 'undefined') { + if ( + typeof state.videoPlayer.player.getPlayerState() !== 'undefined' + ) { + console.log('video data loaded'); + mainLoop(state, chimeData, vidnumber); + clearInterval(waitForVid); + } + } + } catch (err) { + console.log('waiting for video ' + (vidnumber + 1) + ' to be ready'); + } + }, 250); + }); + + // Make a list of all the times where there would be chimes. + function setUpLists(vidnumber) { + console.log('setting up lists of chimes'); + + let sortedTimer = HXChimeTimer[vidnumber].slice().sort(timeCompare); + let chimeData = { + text: sortedTimer.map(e => e.title), + timer: sortedTimer.map(e => hmsToTime(e.time)), + sounds: sortedTimer.map(e => e.sound), + played: [] + }; + + // Write a list on-screen. + chimeData.text.forEach(function(e, i) { + let ch = $(''); + ch.text(timeToHMS(chimeData.timer[i]) + ' - ' + chimeData.text[i]); + $(chimebox[vidnumber]).append(ch); + $(chimebox[vidnumber]).append($('
    ')); + }); + + return chimeData; + } + + // Every 250 ms, check to see whether we're going to play a chime. + function mainLoop(state, chimeData, vidnumber) { + console.log('start main loop for chimes'); + let time = 0; + let lastTime = 0; + let twoAgo = 0; + let chimeTime = 0; + let okToPlay = true; + + console.log(state); + + var timeChecker = setInterval(function() { + try { + state.videoPlayer.update(); // Forced update of time. Required for Safari. + } catch (err) { + // If this fails, shut down this loop. + // It's probably because we moved to a new tab. + clearInterval(timeChecker); + } + + twoAgo = lastTime; + lastTime = time; + time = state.videoPlayer.currentTime; + chimeTime = chimeData.timer[nextChime(chimeData, lastTime)]; + + // Don't chime on initial play event. + // Note: The time when the "play" event actually fires is late. + // Checking the time is more reliable. + if (twoAgo === lastTime) { + okToPlay = false; + } else { + okToPlay = true; + } + + // console.log(lastTime, chimeTime, time); + // If the chime time is the median value, play a chime. + if ( + lastTime <= chimeTime && + time >= chimeTime && + okToPlay && + localStorage.hxChimesOff !== 'false' + ) { + playChime(chimeData, lastTime, vidnumber); + } + }, 250); + } + + // Play the current chime. + function playChime(chimeData, time, vidnumber) { + let n = nextChime(chimeData, time); + let assetURL = getAssetURL(window.location.href, 'complete'); + let audio = new Audio(assetURL + chimeData.sounds[n]); + audio.play(); + console.log( + 'Playing chime ' + + (n + 1) + + ', ' + + chimeData.sounds[n] + + ', for video ' + + (vidnumber + 1) + ); + } + + function nextChime(chimeData, time) { + let next = 0; + for (let n = 0; n < chimeData.timer.length; n++) { + if (chimeData.timer[n] < time) { + next++; + } + } + return next; + } + + // This is a sorting function for my timer. + function timeCompare(a, b) { + if (hmsToTime(a.time) < hmsToTime(b.time)) return -1; + if (hmsToTime(a.time) > hmsToTime(b.time)) return 1; + return 0; + } + + return true; +}; diff --git a/demo-course/course/static/HXVideoLinks.js b/demo-course/course/static/HXVideoLinks.js new file mode 100644 index 0000000..72fa6d0 --- /dev/null +++ b/demo-course/course/static/HXVideoLinks.js @@ -0,0 +1,273 @@ +var HXVideoLinks = function(hxLinkOptions) { + // Declaring semi-global variables for later use. + var video = $('.video'); + var vidWrappers = $('.video-wrapper'); + var time; + var linkTimer = []; + var linkBeingShown = []; + + logThatThing('Video Links starting'); + + // Mark each video and set of controls with a class and anchor + // that will let us handle each of them separately. + // Numbering from 1 to make things easier for course creators. + video.each(function(index) { + $(this).addClass('for-video-' + (index + 1)); + }); + video.each(function(index) { + $(this) + .parent() + .prepend(''); + }); + vidWrappers.each(function(index) { + $(this).addClass('for-video-' + (index + 1)); + }); + + video.each(function(vidnumber) { + var thisVid = $(this); + setUpLists(vidnumber); + + // Check to see whether the video is ready before continuing. + var waitForVid = setInterval(function() { + try { + var state = thisVid.data('video-player-state'); // Sometimes this fails and that's ok. + + if (typeof state.videoPlayer !== 'undefined') { + if ( + typeof state.videoPlayer.player.getPlayerState() !== 'undefined' + ) { + console.log('video data loaded'); + + // Follow a video player link from an old page, if we have one. + checkJumpFromOldPage(); + + // We're positioning links based on the video. + vidWrappers.addClass('link-positioner'); + + setUpListeners(state); + mainLoop(state, vidnumber); + clearInterval(waitForVid); + } + } + } catch (err) { + console.log('waiting for video ' + (vidnumber + 1) + ' to be ready'); + } + }, 200); + }); + + // Take the simple list in our HTML and make it FABULOUS + function setUpLists(vidnumber) { + // Let's copy the links to the appropriate location so we can position them there. + var vidlinks = $('#hx-vidlinks-static-' + (vidnumber + 1)) + .clone() + .prop('id', 'hx-vidlinks-live-' + (vidnumber + 1)); + vidlinks.appendTo('.video-wrapper.for-video-' + (vidnumber + 1)); + + linkTimer[vidnumber] = []; + + // Each link needs a little bit added to it, to keep the author view simple. + // This preps the links that we're going to display on the video. + $('#hx-vidlinks-live-' + (vidnumber + 1)) + .children() + .each(function(index) { + var thisLinkBox = $(this); + var thisLink = $(this).find('a'); + + // Give the link a class and a unique ID + thisLinkBox.addClass('hx-vidlink_' + hxLinkOptions.location); + thisLinkBox.attr('id', 'link-card-live-' + index); + + // Give the images a class for styling purporses. + thisLink.find('img').addClass('hx-vidlinkicon'); + + // Make all the links open in new pages. + thisLink.attr('target', '_blank'); + // Style all the links + thisLink.addClass('hx-link-text-live'); + + // Screen readers should skip these links. Rarely (but not never) an issue. + thisLinkBox.attr('aria-hidden', 'true'); + + // Build the link timer from the divs. + var tempTimer = { + time: hmsToTime(thisLinkBox.attr('data-time')), + shown: false + }; + linkTimer[vidnumber].push(tempTimer); + }); + + // This preps the ones that are visible all the time. + $('#hx-vidlinks-static-' + (vidnumber + 1)) + .children() + .each(function(index) { + var thisLinkBox = $(this); + var thisLink = $(this).find('a'); + + // Give the link a class and a unique ID + thisLinkBox.addClass('hx-vidlink-static'); + thisLinkBox.attr('id', 'link-card-static-' + index); + + // Remove the images. + thisLink.find('img').remove(); + + // Add time links before. + let timelink = $(''); + timelink.attr('href', thisLinkBox.attr('data-time')); + timelink.addClass('jumptime'); + timelink.text(timeToHMS(hmsToTime(thisLinkBox.attr('data-time')))); + thisLinkBox.prepend(' - '); + thisLinkBox.prepend(timelink); + console.log('timelink added'); + }); + + // Finish making the unordered list. + $('#hx-vidlinks-static-' + (vidnumber + 1) + ' .hx-vidlink-static').wrapAll( + '

      ' + ); + + linkTimer[vidnumber].sort(timeCompare); // Uses a custom function to sort by time. + } + + // Set up listeners for the live links. + function setUpListeners(state) { + // If they click on one of the live links, pause the video. + $('.hx-link-text-live').on('click tap', function() { + state.videoPlayer.pause(); + }); + } + + // Every 500 ms, check to see whether we're going to show a new link. + function mainLoop(state, vidnumber) { + var timeChecker = setInterval(function() { + try { + state.videoPlayer.update(); // Forced update of time. Required for Safari. + } catch (err) { + // If this fails, shut down this loop. + // It's probably because we moved to a new tab. + clearInterval(timeChecker); + } + time = state.videoPlayer.currentTime; + + // If we should be showing a link: + if (currentLink(time, vidnumber) != -1) { + // ...and there's something being shown, + if (linkBeingShown[vidnumber]) { + // but it's not the one that should be shown, + if (currentLink(time, vidnumber) != currentLinkShown(vidnumber)) { + // then hide it. + hideLink(currentLinkShown(vidnumber), vidnumber); + } + } + + // ...and there's nothing being shown, + else { + // then show the one we should be showing. + showLink(currentLink(time, vidnumber), vidnumber); + } + + // If we should NOT be showing a link, + } else { + // ...and one is showing, hide it. + if (currentLinkShown(vidnumber) != -1) { + hideLink(currentLinkShown(vidnumber), vidnumber); + } + } + }, 500); + } + + // Show the link on the video. While we're at it, bold the one in the list too. + function showLink(n, vidnumber) { + console.log('showing link ' + (n + 1) + ' for video ' + (vidnumber + 1)); + $('#hx-vidlinks-live-' + (vidnumber + 1) + ' #link-card-live-' + n).show( + hxLinkOptions.effect, + hxLinkOptions.show, + hxLinkOptions.speed + ); + $('#hx-vidlinks-static-' + (vidnumber + 1) + ' #link-card-static-' + n) + .children() + .addClass('hx-boldlink'); + linkTimer[vidnumber][n].shown = true; + linkBeingShown[vidnumber] = true; + } + + // Hide the link on the video and un-bold the one on the list. + function hideLink(n, vidnumber) { + console.log('hiding link ' + (n + 1) + ' for video ' + (vidnumber + 1)); + $('#hx-vidlinks-live-' + (vidnumber + 1) + ' #link-card-live-' + n).hide( + hxLinkOptions.effect, + hxLinkOptions.show, + hxLinkOptions.speed + ); + $('#hx-vidlinks-static-' + (vidnumber + 1) + ' #link-card-static-' + n) + .children() + .removeClass('hx-boldlink'); + linkTimer[vidnumber][n].shown = false; + linkBeingShown[vidnumber] = false; + } + + function checkJumpFromOldPage() { + console.log('check for jump'); + // If we have a jump-to-time link pending for this page, + // go there and start the video playing. + if (localStorage.HXVideoLinkGo === 'true') { + if (window.location.href.indexOf(localStorage.HXVideoLinkUnit) != -1) { + logThatThing({ + 'Jumping to video': { + unit: localStorage.HXVideoLinkUnit, + 'video number': localStorage.HXVideoLinkNumber, + time: localStorage.HXVideoLinkTime + } + }); + // Make sure the video is ready before we try to go to the time. + jumpToTime( + localStorage.HXVideoLinkNumber, + localStorage.HXVideoLinkTime + ); + } + } else { + console.log('No video link to jump to.'); + } + + localStorage.HXVideoLinkGo = 'false'; + } + + // Which link SHOULD we be showing right now? Return -1 if none. + // If we should be showing several, returns the first one. + function currentLink(t, vidnumber) { + var linkNumber = -1; + + for (var i = 0; i < linkTimer[vidnumber].length; i++) { + if ( + t >= linkTimer[vidnumber][i].time && + t < linkTimer[vidnumber][i].time + hxLinkOptions.hideLinkAfter + ) { + linkNumber = i; + break; + } + } + return linkNumber; + } + + // Which link are we ACTUALLY showing right now? Return -1 if none. + // If we're showing several, returns the first one. + function currentLinkShown(vidnumber) { + var linkNumber = -1; + + for (var i = 0; i < linkTimer[vidnumber].length; i++) { + if (linkTimer[vidnumber][i].shown) { + linkNumber = i; + break; + } + } + return linkNumber; + } + + // This is a sorting function for my timer. + function timeCompare(a, b) { + if (a.time < b.time) return -1; + if (a.time > b.time) return 1; + return 0; + } + + return true; +}; diff --git a/demo-course/course/static/Jellyfish_720_10s_2MB.mp4 b/demo-course/course/static/Jellyfish_720_10s_2MB.mp4 new file mode 100644 index 0000000..797967d Binary files /dev/null and b/demo-course/course/static/Jellyfish_720_10s_2MB.mp4 differ diff --git a/demo-course/course/static/Learning Goals.pdf b/demo-course/course/static/Learning Goals.pdf new file mode 100644 index 0000000..213983f Binary files /dev/null and b/demo-course/course/static/Learning Goals.pdf differ diff --git a/demo-course/course/static/Library Content graphic-100.png b/demo-course/course/static/Library Content graphic-100.png new file mode 100644 index 0000000..53e1a51 Binary files /dev/null and b/demo-course/course/static/Library Content graphic-100.png differ diff --git a/demo-course/course/static/Marketplace-Open-edX v2.png b/demo-course/course/static/Marketplace-Open-edX v2.png new file mode 100644 index 0000000..40f6b63 Binary files /dev/null and b/demo-course/course/static/Marketplace-Open-edX v2.png differ diff --git a/demo-course/course/static/OpenedX_Ecosystem.jpg b/demo-course/course/static/OpenedX_Ecosystem.jpg new file mode 100644 index 0000000..1ab69d0 Binary files /dev/null and b/demo-course/course/static/OpenedX_Ecosystem.jpg differ diff --git a/demo-course/course/static/OpenedX_vs_edx_infographic_v2.jpeg b/demo-course/course/static/OpenedX_vs_edx_infographic_v2.jpeg new file mode 100644 index 0000000..7988b34 Binary files /dev/null and b/demo-course/course/static/OpenedX_vs_edx_infographic_v2.jpeg differ diff --git a/demo-course/course/static/Pendleton_Sinking_Ship.jpeg b/demo-course/course/static/Pendleton_Sinking_Ship.jpeg new file mode 100644 index 0000000..5fa3d09 Binary files /dev/null and b/demo-course/course/static/Pendleton_Sinking_Ship.jpeg differ diff --git a/static/periodic-table-colors.css b/demo-course/course/static/Periodic-Table-Colors.css similarity index 100% rename from static/periodic-table-colors.css rename to demo-course/course/static/Periodic-Table-Colors.css diff --git a/static/periodic-table.css b/demo-course/course/static/Periodic-Table.css similarity index 100% rename from static/periodic-table.css rename to demo-course/course/static/Periodic-Table.css diff --git a/static/js/periodic-table.js b/demo-course/course/static/Periodic-Table.js similarity index 100% rename from static/js/periodic-table.js rename to demo-course/course/static/Periodic-Table.js diff --git a/demo-course/course/static/Question_Post.png b/demo-course/course/static/Question_Post.png new file mode 100644 index 0000000..2b37c1d Binary files /dev/null and b/demo-course/course/static/Question_Post.png differ diff --git a/demo-course/course/static/Reach of Open edX Downloadable Transcript.pdf b/demo-course/course/static/Reach of Open edX Downloadable Transcript.pdf new file mode 100644 index 0000000..65b6338 Binary files /dev/null and b/demo-course/course/static/Reach of Open edX Downloadable Transcript.pdf differ diff --git a/demo-course/course/static/Video Player Elements Image-100.png b/demo-course/course/static/Video Player Elements Image-100.png new file mode 100644 index 0000000..961a94d Binary files /dev/null and b/demo-course/course/static/Video Player Elements Image-100.png differ diff --git a/demo-course/course/static/VideoLinks.css b/demo-course/course/static/VideoLinks.css new file mode 100644 index 0000000..e627f8a --- /dev/null +++ b/demo-course/course/static/VideoLinks.css @@ -0,0 +1,131 @@ +#vidlinks-static { +} + +#vidlinks-live { +} + +.link-text-live { +} + +.vidlink_bl { + display: none; + opacity: 0.7; + background-color: black; + + font-size: 16px; + color: white; + + position: absolute; + bottom: 50px; + + padding: 4px; + border: 2px solid grey; + margin: 2px; + + border-radius: 4px; + box-shadow: 2px 2px 4px #111; +} + +.vidlink_br { + display: none; + opacity: 0.7; + background-color: black; + + font-size: 16px; + color: white; + + position: absolute; + bottom: 50px; + right: 5px; + + padding: 4px; + border: 2px solid grey; + margin: 2px; + + border-radius: 4px; + box-shadow: 2px 2px 4px #111; +} + +.vidlink_tl { + display: none; + opacity: 0.7; + background-color: black; + + font-size: 16px; + color: white; + + position: absolute; + top: 5px; + + padding: 4px; + border: 2px solid grey; + margin: 2px; + + border-radius: 4px; + box-shadow: 2px 2px 4px #111; +} + +.vidlink_tr { + display: none; + opacity: 0.7; + background-color: black; + + font-size: 16px; + color: white; + + position: absolute; + top: 5px; + right: 5px; + + padding: 4px; + border: 2px solid grey; + margin: 2px; + + border-radius: 4px; + box-shadow: 2px 2px 4px #111; +} + +.vidlink-static { + display: list-item; +} + +.vidlink_bl a:link { + color: white; +} + +.vidlink_tl a:link { + color: white; +} + +.vidlink_tr a:link { + color: white; +} + +.vidlink_br a:link { + color: white; +} + +.vidlink_bl a:visited { + color: white; +} + +.vidlink_tl a:visited { + color: white; +} + +.vidlink_tr a:visited { + color: white; +} + +.vidlink_br a:visited { + color: white; +} + +.link-positioner { + position: relative !important; +} + + +.boldlink { + font-weight: bold !important; +} \ No newline at end of file diff --git a/demo-course/course/static/Video_Toolbar.png b/demo-course/course/static/Video_Toolbar.png new file mode 100644 index 0000000..b14149d Binary files /dev/null and b/demo-course/course/static/Video_Toolbar.png differ diff --git a/demo-course/course/static/ajax-loader.gif b/demo-course/course/static/ajax-loader.gif new file mode 100644 index 0000000..e0e6e97 Binary files /dev/null and b/demo-course/course/static/ajax-loader.gif differ diff --git a/demo-course/course/static/arrow-clicked.svg b/demo-course/course/static/arrow-clicked.svg new file mode 100644 index 0000000..32cbbe5 --- /dev/null +++ b/demo-course/course/static/arrow-clicked.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/demo-course/course/static/b4cbbf59-b658-4a85-9dd7-80b5363d494b-en.srt b/demo-course/course/static/b4cbbf59-b658-4a85-9dd7-80b5363d494b-en.srt new file mode 100644 index 0000000..289193e --- /dev/null +++ b/demo-course/course/static/b4cbbf59-b658-4a85-9dd7-80b5363d494b-en.srt @@ -0,0 +1,192 @@ +0 +00:00:04,320 --> 00:00:09,840 +Welcome to Open edX®, the open source platform and  community that powers many of the online courses   + +1 +00:00:09,840 --> 00:00:11,761 +and programs you see around the world. + +2 +00:00:11,761 --> 00:00:19,516 + The open source community, there's a lot of sharing of ideas especially around course development and what approaches work for building courses. + +3 +00:00:19,516 --> 00:00:25,040 +There's a strong developer community supporting the Open edX® platform but there's also a broad network of   + +4 +00:00:25,040 --> 00:00:27,678 +communities of practice that you can get involved with. + +5 +00:00:27,678 --> 00:00:33,440 +I think one of the things that's great about the Open edX® community is how generous people are. People are always willing to share feedback and   + +6 +00:00:33,440 --> 00:00:38,560 +ideas and things that have worked for them. So  whether that's on the Slack channel or face to   + +7 +00:00:38,560 --> 00:00:43,000 +face at the conference or even in the discussion  forum you can always get some ideas and feedback. + +8 +00:00:43,000 --> 00:00:48,360 +The educators community of practice members support each other by sharing new techniques,   + +9 +00:00:48,360 --> 00:00:52,883 +design approaches, and together we form a human knowledge base. + +10 +00:00:52,883 --> 00:01:02,360 +And I think one of the exciting things actually about Open edX® and the fact that this group is so willing to share   + +11 +00:01:02,360 --> 00:01:08,600 +is that there are so many opportunities to look  at what other people are doing. To look, you know,   + +12 +00:01:08,600 --> 00:01:15,520 +into their classes, to look into their approaches and to get to see what everyone in   + +13 +00:01:15,520 --> 00:01:18,662 +this community is doing and that makes your work better. + +14 +00:01:18,662 --> 00:01:27,000 +What's great about it is there's a lot of unique, smart, talented people working in this space and when all of us share collectively as   + +15 +00:01:27,000 --> 00:01:32,720 +this open source community everyone gets better at  what they do, at what they build and that's really exciting to me. + +16 +00:01:32,720 --> 00:01:39,721 +You know, there is always this risk that you're operating in a box, but I think that the Open edX® Community kind of helps take you out of that box. + +17 +00:01:39,721 --> 00:01:47,040 +I contribute to the Open edX® community through open source tools. I really like  figuring out how to make things easier for people   + +18 +00:01:47,040 --> 00:01:50,640 +especially if you're running a lot of classes or if you want to do things that you don't think the   + +19 +00:01:50,640 --> 00:01:55,890 +platform can do that's where I want to chip in. It's been really cool to see other people use what I make. + +20 +00:01:55,890 --> 00:02:00,031 +There's also a community of developers so if you're coming more from the technical side + +21 +00:02:00,031 --> 00:02:06,852 +there's a group of people that are really willing to help lean in and support you in making the best use of our open source platform. + +22 +00:02:06,852 --> 00:02:13,117 +It's so exciting to see that moment where a new developer realizes that they can contribute that feature they want to contribute + +23 +00:02:13,117 --> 00:02:21,400 +and it's really exciting when someone who originally was struggling to make a pull request or struggling to diagnose the problem   + +24 +00:02:21,400 --> 00:02:26,240 +of a bug to see them really get going and open a  bunch of different pull requests and feel like   + +25 +00:02:26,240 --> 00:02:28,113 +they're part of the community. + +26 +00:02:28,113 --> 00:02:33,833 +Whenever I want to know exactly how does the Open edX® platform work I look directly at the code. + +27 +00:02:33,833 --> 00:02:39,216 +Being open source allows me to make advanced customizations to meet specific customer business needs + +28 +00:02:39,216 --> 00:02:44,857 +and when we need help it's great to know that there is an enthusiastic community behind, willing to support. + +29 +00:02:44,857 --> 00:02:50,840 +In particular I like to think of the work I do as doing the work to make it easier for other developers to work on the platform   + +30 +00:02:50,840 --> 00:02:55,577 +so anything that makes lives for other people to make the platform better easier that's where I'm working. + +31 +00:02:55,577 --> 00:03:01,615 +Being open source first you can get access to the code, you can modify, you can incorporate your new technology, + +32 +00:03:01,615 --> 00:03:07,955 +you can share experiences and so on so forth which makes a very enriching experience for everybody. + +33 +00:03:07,955 --> 00:03:16,680 +I love that if I see a problem I can go fix it. I love that I can just dig into every piece of code that has an issue or that I don't understand   + +34 +00:03:16,680 --> 00:03:19,268 +and it's there and I can understand it. + +35 +00:03:19,268 --> 00:03:24,930 +I like that we're building an open source platform that anyone around the world can use to learn. + +36 +00:03:24,930 --> 00:03:29,844 +It's extremely rewarding to know that what we build today will be used to help educate people tomorrow. + +37 +00:03:29,844 --> 00:03:38,120 +The people that work on it rarely work on it just because they have to. Usually, anybody especially in the education technology sphere   + +38 +00:03:38,120 --> 00:03:42,680 +it's because the the mission and the values are  important to them so you get to work with other   + +39 +00:03:42,680 --> 00:03:47,402 +people who have values that are aligned with  yours and who want to make a difference like we do. + +40 +00:03:47,402 --> 00:03:55,758 +I think the exciting thing to see with Open edX® is all of these developers, all of these course creators, they are committed to that process + +41 +00:03:55,758 --> 00:04:03,440 +not just with their students but they are committed to that process with within the community and I think that's a really exciting thing to see   + +42 +00:04:03,440 --> 00:04:06,800 +I think that's a really exciting thing to be  part of and I think that's a really valuable   + +43 +00:04:06,800 --> 00:04:07,881 +thing to be part of. + +44 +00:04:07,881 --> 00:04:10,602 +Yeah, I mean I think I'm the luckiest man in the world. + +45 +00:04:10,602 --> 00:04:17,157 +I think we're building software that really has the possibility of transforming the lives of learners across the world + +46 +00:04:17,156 --> 00:04:24,999 +and some of the projects that I know of that are using Open edX® are really kind of important and transformational + +47 +00:04:24,999 --> 00:04:29,600 +so just to be even a small part of that is really just amazing. + diff --git a/demo-course/course/static/bobcat_upload_orig_template.png b/demo-course/course/static/bobcat_upload_orig_template.png new file mode 100644 index 0000000..248c6e1 Binary files /dev/null and b/demo-course/course/static/bobcat_upload_orig_template.png differ diff --git a/demo-course/course/static/callout_bg.png b/demo-course/course/static/callout_bg.png new file mode 100644 index 0000000..32aaea5 Binary files /dev/null and b/demo-course/course/static/callout_bg.png differ diff --git a/demo-course/course/static/choose_library_component.png b/demo-course/course/static/choose_library_component.png new file mode 100644 index 0000000..5ac3bd5 Binary files /dev/null and b/demo-course/course/static/choose_library_component.png differ diff --git a/demo-course/course/static/cm_style_guide_demox.css b/demo-course/course/static/cm_style_guide_demox.css new file mode 100644 index 0000000..066f202 --- /dev/null +++ b/demo-course/course/static/cm_style_guide_demox.css @@ -0,0 +1,797 @@ + \ No newline at end of file diff --git a/demo-course/course/static/code_editor_orig.png b/demo-course/course/static/code_editor_orig.png new file mode 100644 index 0000000..5d559ef Binary files /dev/null and b/demo-course/course/static/code_editor_orig.png differ diff --git a/demo-course/course/static/codeboard_demo.png b/demo-course/course/static/codeboard_demo.png new file mode 100644 index 0000000..a897d09 Binary files /dev/null and b/demo-course/course/static/codeboard_demo.png differ diff --git a/demo-course/course/static/codeboard_demo_step3.png b/demo-course/course/static/codeboard_demo_step3.png new file mode 100644 index 0000000..97e0b09 Binary files /dev/null and b/demo-course/course/static/codeboard_demo_step3.png differ diff --git a/demo-course/course/static/cohorts-groups-components.jpeg b/demo-course/course/static/cohorts-groups-components.jpeg new file mode 100644 index 0000000..0e7417a Binary files /dev/null and b/demo-course/course/static/cohorts-groups-components.jpeg differ diff --git a/demo-course/course/static/cohorts-setup.png b/demo-course/course/static/cohorts-setup.png new file mode 100644 index 0000000..32bade7 Binary files /dev/null and b/demo-course/course/static/cohorts-setup.png differ diff --git a/demo-course/course/static/community-icon.svg b/demo-course/course/static/community-icon.svg new file mode 100644 index 0000000..d99150e --- /dev/null +++ b/demo-course/course/static/community-icon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/demo-course/course/static/components_orig.png b/demo-course/course/static/components_orig.png new file mode 100644 index 0000000..f1d6241 Binary files /dev/null and b/demo-course/course/static/components_orig.png differ diff --git a/demo-course/course/static/content-group-switcher.png b/demo-course/course/static/content-group-switcher.png new file mode 100644 index 0000000..53dc05d Binary files /dev/null and b/demo-course/course/static/content-group-switcher.png differ diff --git a/demo-course/course/static/course_components.png b/demo-course/course/static/course_components.png new file mode 100644 index 0000000..9915f20 Binary files /dev/null and b/demo-course/course/static/course_components.png differ diff --git a/demo-course/course/static/course_outline.png b/demo-course/course/static/course_outline.png new file mode 100644 index 0000000..af5877b Binary files /dev/null and b/demo-course/course/static/course_outline.png differ diff --git a/demo-course/course/static/course_structure_1.png b/demo-course/course/static/course_structure_1.png new file mode 100644 index 0000000..a5b1c28 Binary files /dev/null and b/demo-course/course/static/course_structure_1.png differ diff --git a/demo-course/course/static/course_structure_2.png b/demo-course/course/static/course_structure_2.png new file mode 100644 index 0000000..666c595 Binary files /dev/null and b/demo-course/course/static/course_structure_2.png differ diff --git a/demo-course/course/static/course_structure_3.png b/demo-course/course/static/course_structure_3.png new file mode 100644 index 0000000..4a4bd70 Binary files /dev/null and b/demo-course/course/static/course_structure_3.png differ diff --git a/demo-course/course/static/course_structure_full.png b/demo-course/course/static/course_structure_full.png new file mode 100644 index 0000000..a452761 Binary files /dev/null and b/demo-course/course/static/course_structure_full.png differ diff --git a/demo-course/course/static/database-icon.svg b/demo-course/course/static/database-icon.svg new file mode 100644 index 0000000..8f34bbb --- /dev/null +++ b/demo-course/course/static/database-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/demo-course/course/static/demox_js.js b/demo-course/course/static/demox_js.js new file mode 100644 index 0000000..6053b17 --- /dev/null +++ b/demo-course/course/static/demox_js.js @@ -0,0 +1,24 @@ +/** + * Description: DemoX utility functions + * Author: John Swope + * Date: September 25, 2023 + */ + + + +function expandHintFunction(a) { + var x = document.getElementById("Hint-body-" + a); + var y = document.getElementById("Hint-title-" + a).querySelector('.icon'); + + if (x.style.height === "0px" || x.style.Height === "") { + x.style.height = x.scrollHeight + "px"; + y.textContent = '-'; + x.classList.add("expanded"); + } else { + x.style.height = "0px"; + y.textContent = '+'; + x.classList.remove("expanded"); + } +} + + \ No newline at end of file diff --git a/demo-course/course/static/discussion-admin-add.png b/demo-course/course/static/discussion-admin-add.png new file mode 100644 index 0000000..9d1cc65 Binary files /dev/null and b/demo-course/course/static/discussion-admin-add.png differ diff --git a/demo-course/course/static/divide-by-cohort.png b/demo-course/course/static/divide-by-cohort.png new file mode 100644 index 0000000..4953722 Binary files /dev/null and b/demo-course/course/static/divide-by-cohort.png differ diff --git a/demo-course/course/static/documentation icon.svg b/demo-course/course/static/documentation icon.svg new file mode 100644 index 0000000..fca4299 --- /dev/null +++ b/demo-course/course/static/documentation icon.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/demo-course/course/static/download-icon.svg b/demo-course/course/static/download-icon.svg new file mode 100644 index 0000000..fc12f65 --- /dev/null +++ b/demo-course/course/static/download-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/demo-course/course/static/draft.png b/demo-course/course/static/draft.png new file mode 100644 index 0000000..c80a870 Binary files /dev/null and b/demo-course/course/static/draft.png differ diff --git a/demo-course/course/static/edX_logo.png b/demo-course/course/static/edX_logo.png new file mode 100644 index 0000000..5aafa57 Binary files /dev/null and b/demo-course/course/static/edX_logo.png differ diff --git a/demo-course/course/static/fdfa686f-8b70-4437-a490-0459cc9f1f2a-en.srt b/demo-course/course/static/fdfa686f-8b70-4437-a490-0459cc9f1f2a-en.srt new file mode 100644 index 0000000..2f84a64 --- /dev/null +++ b/demo-course/course/static/fdfa686f-8b70-4437-a490-0459cc9f1f2a-en.srt @@ -0,0 +1,76 @@ +0 +00:00:00,000 --> 00:00:03,033 + Welcome to the Open edX® platform. + +1 +00:00:03,033 --> 00:00:26,129 +[music playing] + +2 +00:00:26,162 --> 00:00:36,093 +The Open edX® platform is the free to use learning management system developed by Harvard and MIT and with the stated mission to democratize education and power advances in learning. + +3 +00:00:36,093 --> 00:00:45,191 +Today, the Open edX® software is in use by over 4, 500 organizations teaching over 70 million learners across 50 languages and a hundred different countries. + +4 +00:00:46,325 --> 00:00:57,156 +The Open edX® platform is an all in one solution that includes a traditional student facing LMS, a CMS backend for creating courses, mobile apps for iOS + +5 +00:00:57,156 --> 00:01:03,255 +and Android, analytics, e commerce, and many, many more community developed plugins and extensions. + +6 +00:01:03,255 --> 00:01:08,087 + Because the platform is open source, that means the software is available freely. + +7 +00:01:08,087 --> 00:01:17,152 +No fees or permissions are needed to run your own Open edX® instance. It also means that you can customize the Open edX platform for your unique needs. + +8 +00:01:18,052 --> 00:01:28,083 +The software has been successfully leveraged to deliver large open online courses, small blended courses, corporate training, and more. Getting started with your first course is easy. + +9 +00:01:28,083 --> 00:01:35,215 +The intuitive drag and drop editor allows you to create a course and add your first videos, text and questions within minutes. + +10 +00:01:35,215 --> 00:01:40,314 +Incorporate inline discussions to get your students talking about your content. Easy so far? + +11 +00:01:40,314 --> 00:01:47,012 +Once you're comfortable with the basics, you can incorporate things like peer assessment problems or polls and surveys. + +12 +00:01:47,012 --> 00:01:54,211 +Using a mix of native, flexible, and community built component types, you will be well on your way to developing impactful courses for your learners. + +13 +00:01:54,211 --> 00:02:00,276 +You can even build your own components, called XBlocks, and customize the platform for your own specific learning case. + +14 +00:02:00,276 --> 00:02:07,275 +And once your course is running, Open edX® Aspects can provide you information about your learners and their progress through the course. + +15 +00:02:07,275 --> 00:02:16,240 +The software uses industry standard security best practices and proactively fixes security issues to maintain a secure open source platform that you can rely on. + +16 +00:02:16,240 --> 00:02:25,138 +There is still lots more to discover about the Open edX® platform. If you ever find yourself needing support, there is an active, passionate community of supporters. + +17 +00:02:25,138 --> 00:02:32,103 +As well as a marketplace of vendors who can support everything from development to customization to course development. + +18 +00:02:32,103 --> 00:02:38,036 +Welcome to the Open edX® platform and the community supporting it. We're glad you're here. + diff --git a/demo-course/course/static/feedback.js b/demo-course/course/static/feedback.js new file mode 100644 index 0000000..3fed2fe --- /dev/null +++ b/demo-course/course/static/feedback.js @@ -0,0 +1,44 @@ +// This function sends anonymous feedback to a cloud database for analysis and continuous improvement. +async function sendFeedbackToAPI(unitName, feedback, anonUserId) { + const url = 'https://hooks.zapier.com/hooks/catch/13921279/3aiz45a/'; + const pathname = window.location.pathname; + + const data = { + Feedback: feedback, + PathName: pathname, + UnitName: unitName, + AnonUserId: anonUserId + }; + + try { + const response = await fetch(url, { + method: 'POST', + headers: { + 'Accept': 'application/json', + }, + body: JSON.stringify(data) + }); + + const responseData = await response.json(); + console.log('Success:', responseData); + } catch (error) { + console.error('Error:', error); + console.log('Error message:', error.message); + } +} + + +// Attach event listeners to the buttons +document.addEventListener('DOMContentLoaded', function() { + const buttons = document.querySelectorAll('.emoji-button'); + buttons.forEach(button => { + button.addEventListener('click', function() { + // Remove highlight from all buttons + buttons.forEach(btn => btn.classList.remove('emoji-button-highlighted')); + + // Highlight the clicked button + this.classList.add('emoji-button-highlighted'); + + }); + }); +}); diff --git a/demo-course/course/static/grade_submissions.png b/demo-course/course/static/grade_submissions.png new file mode 100644 index 0000000..3110a98 Binary files /dev/null and b/demo-course/course/static/grade_submissions.png differ diff --git a/demo-course/course/static/gradient-triangle.svg b/demo-course/course/static/gradient-triangle.svg new file mode 100644 index 0000000..c70f8b5 --- /dev/null +++ b/demo-course/course/static/gradient-triangle.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/demo-course/course/static/grand_piano_freepik.jpeg b/demo-course/course/static/grand_piano_freepik.jpeg new file mode 100644 index 0000000..9fa6e8b Binary files /dev/null and b/demo-course/course/static/grand_piano_freepik.jpeg differ diff --git a/demo-course/course/static/html_button_orig.png b/demo-course/course/static/html_button_orig.png new file mode 100644 index 0000000..06978f1 Binary files /dev/null and b/demo-course/course/static/html_button_orig.png differ diff --git a/demo-course/course/static/hx.css b/demo-course/course/static/hx.css new file mode 100644 index 0000000..abe40c8 --- /dev/null +++ b/demo-course/course/static/hx.css @@ -0,0 +1,740 @@ +/* CSS for HarvardX's standard javascript library */ +/* Using a 75-pixel tall image as a drop cap. */ +.hx-icon-dropcap { + float: left; + height: 75px; + padding: 4px 8px 3px 0px; +} + +/* Using a single letter as a drop cap. */ +/* Surround first letter with */ +span.hx-dropcap { + float: left; + color: #339; + font-size: 48px; + margin-top: -4px; + margin-bottom: -16px; + padding-top: 0px; + padding-right: 4px; + padding-left: 2px; + font-family: serif; + font-weight: bold; +} + +/* Image that hangs over the top few lines of a paragraph on the right. */ +.hx-hangright { + float: right; + margin: 4px 0px 3px 8px; +} + +/* Image that hangs over the top few lines of a paragraph on the left. */ +/* A lot like dropcap. */ +.hx-hangleft { + float: left; + padding: 4px 8px 3px 0px; +} + +/* For centering images. */ +.hx-centered { + display: block; + margin-left: auto; + margin-right: auto; +} + +/* For centering paragraphs. Using sparingly. */ +p.hx-centered { + text-align: center; +} + +/* External links */ +.fa-external-link { + font-size: smaller; + vertical-align: super; +} + +/* Standard image caption */ +/* Use

      Text

      */ +p > small.hx-caption { + font-style: italic; +} + +/* For clickable images that pop up dialog boxes. */ +.hx-popup-content { + background-color: #000000; + display: none; +} + +/* For clickable images that pop up dialog boxes. */ +.hx-popup-dialog .ui-dialog-titlebar-close { + display: none; +} + +/* For clickable images that pop up dialog boxes. */ +/* Not doing anything here yet, but this is how we change the orange if we want to. */ +/* .hx-popup-dialog .ui-dialog-titlebar {} */ + +/* For pop-up SVGs that we want to show at full size. */ +.hx-svg-view { + width: 200% !important; + height: 200% !important; +} + +/* Placeholder. */ +.hx-footnote-style { + font-size: small !important; +} + +main .vert .xblock ul { + margin-left: 1em !important; +} + +#main .vert .xblock ol { + margin-left: 1em !important; +} + +/* For the smiley-face button */ +.hx-smileystack { + margin-left: auto; +} + +.hx-smileystack .fa-smile-o { + color: black; +} + +.hx-smileystack .fa-meh-o { + color: black; +} + +.hx-smileystack.hx-smile .fa-circle { + color: #bef; +} + +.hx-smileystack.hx-meh .fa-circle { + color: lightgray; +} + +.hx-smileyspacer { + margin-right: auto; +} + +/* Add image HRs */ +/* +hr.hx-fancy { + background:url(hxFancyHR.gif) repeat-x top left; + border: 0; +} +*/ +/***************************************/ +/* This block is for sidebar tables +/***************************************/ +table.hx-hangright { + max-width: 280px !important; + float: right !important; + margin-left: 20px !important; + margin-top: 5px !important; +} + +table.hx-hangright th { + text-align: center; +} + +table.hx-hangleft { + max-width: 280px !important; + float: left !important; + margin-right: 20px !important; + margin-top: 5px !important; +} + +table.hx-hangleft th { + text-align: center; +} + +table.hx-compact-table td { + padding: 3px !important; +} + +table.hx-compact-table th { + padding: 3px !important; +} + +/************** End sidebar table Block *******************/ +/***************************************/ +/* This block is for auto-TOCs +/***************************************/ +.hx-autotoc { + float: right; + border: 1px solid gray; + border-radius: 8px; + padding: 3px; + margin: 8px; + font-size: 14px; + max-width: 300px; +} + +.hx-autotoc h3 { + color: #08b; + font-size: 20px; + margin-bottom: 6px !important; +} + +.hx-autotoc ul { + list-style-type: none !important; + padding-top: 0px !important; + padding-bottom: 0px !important; + padding-left: 0px !important; + margin-top: 0px !important; + margin-bottom: 0px !important; +} + +.hx-autotoc li { + padding: 1px !important; + margin: 1px !important; +} + +/************** End auto-TOC Block *******************/ +/*********************************************/ +/* This block is for fancy headers +/*********************************************/ +/* Fancy header - no lowercase, all caps. */ +h3.hx-smallcaps, +h4.hx-smallcaps { + font-variant: small-caps; +} + +/* Super-bold white-on-color right-justified header */ +/* Can be combined with smallcaps. */ +.hx-superbold { + background-color: #08b; + color: white; + text-align: right; + padding-right: 4px; +} + +h3.hx-superbold { + font-size: 1.8em !important; +} + +h4.hx-superbold { + font-size: 1.5em !important; +} + +/* Header with an underline that goes most of the way across. */ +/* Can be combined with smallcaps. */ +.hx-underline { + border-bottom: 1px solid #189; + width: 75%; +} + +/************** End fancy-header Block *******************/ +/*********************************************/ +/* This block is for pretty boxes +/*********************************************/ +/* For boxes of material separated from the regular text. */ +/* Use h4 for headers inside. */ +.hx-yellowbox h3 { + font-variant: small-caps; + color: #666600; +} + +.hx-redbox { + border-left: 15px solid #800; + background-color: #fdd; + padding: 10px 10px 5px 15px; + margin: 40px; +} + +.hx-redbox h3, +.hx-redbox h4 { + font-variant: small-caps; + color: #600; +} + +.hx-redbox .hx-underline{ + border-bottom-color: darkred; +} + +.hx-pinkbox { + border-left: 15px solid #ffc0f8; + background-color: #ffe9f6; + padding: 10px 10px 5px 15px; + margin: 40px; +} + +.hx-pinkbox h3, +.hx-pinkbox h4 { + font-variant: small-caps; + color: #cf5cc2; +} + +.hx-pinkbox .hx-underline{ + border-bottom-color: orchid; +} + +.hx-orangebox { + border-left: 15px solid #dc5b00; + background-color: #ffddc5; + padding: 10px 10px 5px 15px; + margin: 40px; +} + +.hx-orangebox h3, +.hx-orangebox h4 { + font-variant: small-caps; + color: #752900; +} + +.hx-orangebox .hx-underline{ + border-bottom-color: #752900; +} + +.hx-peachbox { + border-left: 15px solid #ffdb9c; + background-color: #ffecd5; + padding: 10px 10px 5px 15px; + margin: 40px; +} + +.hx-peachbox h3, +.hx-peachbox h4 { + font-variant: small-caps; + color: #b6750f; +} + +.hx-peachbox .hx-underline{ + border-bottom-color: #b6750f; +} + +.hx-yellowbox { + border-left: 15px solid #fdfd00; + background-color: #ffffd1; + padding: 10px 10px 5px 15px; + margin: 40px; +} + +.hx-yellowbox a { + font-weight: bold !important; +} + +.hx-yellowbox h3, +.hx-yellowbox h4 { + font-variant: small-caps; + color: #666600; +} + +.hx-yellowbox .hx-underline{ + border-bottom-color: #666600; +} + +.hx-greenbox { + border-left: 15px solid #07a878; + background-color: #c2eade; + padding: 10px 10px 5px 15px; + margin: 40px; +} + +.hx-greenbox h3, +.hx-greenbox h4 { + font-variant: small-caps; + color: #013a29; +} + +.hx-greenbox .hx-underline{ + border-bottom-color: forestgreen; +} + + +.hx-bluebox { + border-left: 15px solid #048; + background-color: #def; + padding: 10px 10px 5px 15px; + margin: 40px; +} + +.hx-bluebox h3, +.hx-sidebar h3, +.hx-bluebox h4, +.hx-sidebar h4 { + font-variant: small-caps; + color: #036; +} + +.hx-bluebox2 { + border-left: 15px solid #5b93ff; + background-color: #d6e4ff; + padding: 10px 10px 5px 15px; + margin: 40px; +} + +.hx-bluebox2 h3, +.hx-bluebox2 h4 { + font-variant: small-caps; + color: #1e3460; +} + +/* No change for bluebox underlines. Underlines are already blue. */ +/* .hx-bluebox .hx-underline{} */ + + + +.hx-purplebox { + border-left: 15px solid #6c35c0; + background-color: #dbcdef; + padding: 10px 10px 5px 15px; + margin: 40px; +} + +.hx-purplebox h3, +.hx-purplebox h4 { + font-variant: small-caps; + color: #330974; +} + +.hx-purplebox .hx-underline{ + border-bottom-color: blueviolet; +} + +.hx-magentabox { + border-left: 15px solid #a71852; + background-color: #eec6d4; + padding: 10px 10px 5px 15px; + margin: 40px; +} + +.hx-magentabox h3, +.hx-magentabox h4 { + font-variant: small-caps; + color: #4d001f; +} + +.hx-magentabox .hx-underline{ + border-bottom-color: #4d001f; +} + +.hx-greybox, +.hx-graybox { + border-left: 15px solid #666; + background-color: #ddd; + padding: 10px 10px 5px 15px; + margin: 40px; +} + +.hx-greybox h3, +.hx-graybox h3, +.hx-greybox h4, +.hx-graybox h4 { + font-variant: small-caps; + color: #333; +} + +.hx-greybox .hx-underline, .hx-graybox .hx-underline{ + border-bottom-color: #333; +} + + +/* Blackbox needs more specific targeting to override white text. */ +.xmodule_display .hx-blackbox, +.hx-blackbox { + border-left: 15px solid #0c0; + background-color: black; + color: #eee !important; + padding: 10px 10px 5px 15px; + margin: 40px; +} + +.xmodule_display .hx-blackbox h3, +.xmodule_display .hx-blackbox h4, +.hx-blackbox h3, +.hx-blackbox h4 { + font-variant: small-caps; + color: #0f0; +} + +.xmodule_display .hx-blackbox p, +.hx-blackbox p { + color: #eee !important; +} + +/* For right-hand sidebars. Add colorbox styling. */ +/* Use h4 for headers inside. */ +.hx-sidebar { + margin: 3px 20px 20px 20px; + float: right; + width: 45%; +} + +/* For boxes that contain big quote marks in the background. Stylish. */ +/* Add colorbox styling */ +.hx-excerpt { + background-image: url(quote-right.png); + background-repeat: no-repeat; + background-position: bottom right; +} + +.hx-excerpt .hx-quote-source { + text-align: right; + font-style: italic; +} + +/* Helps with above. */ +.hx-excerpt p { + background-image: url(quote-left.png); + background-repeat: no-repeat; + margin-top: 0; + padding: 1em 60px 0; + min-height: 37px; +} + +/* Helps with above. */ +.hx-excerpt p + p { + padding-top: 0; + background-image: none; +} + +/************** End pretty-box Block *******************/ +/*********************************************/ +/* This block is for the Slick image slider. +/*********************************************/ +.hx-sliderbox { + background-color: #fff; + border-top: 4px groove #189; + border-bottom: 4px ridge #189; + border-left: none; + border-right: none; + padding: 0px 25px 0px 25px; + margin-bottom: 15px; +} + +.hx-slidertext { + color: black !important; + margin: 4px 2px 4px 2px !important; + padding: 2px; +} + +.hx-slider > p { + color: black !important; + margin: 4px 2px 4px 2px !important; + padding: 2px; +} + +.hx-navslider > p { + color: black !important; + margin: 4px 2px 4px 2px !important; + padding: 2px; +} + +.hx-bigslider > p { + color: black !important; + margin: 4px 2px 4px 2px !important; + padding: 2px; +} + +.slick-prev:before, +.slick-next:before { + color: #189 !important; +} + +/************** End Slick Block *******************/ +/***************************************/ +/* This block is for video links. +/***************************************/ +.hx-vidlink_bl { + display: none; + opacity: 0.7; + background-color: black; + font-size: 16px; + color: white; + position: absolute; + bottom: 50px; + padding: 4px; + border: 2px solid grey; + margin: 2px; + border-radius: 4px; + box-shadow: 2px 2px 4px #111; +} + +.hx-vidlink_br { + display: none; + opacity: 0.7; + background-color: black; + font-size: 16px; + color: white; + position: absolute; + bottom: 50px; + right: 5px; + padding: 4px; + border: 2px solid grey; + margin: 2px; + border-radius: 4px; + box-shadow: 2px 2px 4px #111; +} + +.hx-vidlink_tl { + display: none; + opacity: 0.7; + background-color: black; + font-size: 16px; + color: white; + position: absolute; + top: 5px; + padding: 4px; + border: 2px solid grey; + margin: 2px; + border-radius: 4px; + box-shadow: 2px 2px 4px #111; +} + +.hx-vidlink_tr { + display: none; + opacity: 0.7; + background-color: black; + font-size: 16px; + color: white; + position: absolute; + top: 5px; + right: 5px; + padding: 4px; + border: 2px solid grey; + margin: 2px; + border-radius: 4px; + box-shadow: 2px 2px 4px #111; +} + +.hx-vidlink-static { + display: list-item; +} + +.hx-vidlink_bl a:link { + color: white; +} + +.hx-vidlink_tl a:link { + color: white; +} + +.hx-vidlink_tr a:link { + color: white; +} + +.hx-vidlink_br a:link { + color: white; +} + +.hx-vidlink_bl a:visited { + color: white; +} + +.hx-vidlink_tl a:visited { + color: white; +} + +.hx-vidlink_tr a:visited { + color: white; +} + +.hx-vidlink_br a:visited { + color: white; +} + +.hx-link-positioner { + position: relative !important; +} + +.hx-boldlink { + font-weight: bold !important; +} + +/*********** End Video Link Block **********/ +/***************************************/ +/* This block is for pop-up problems. +/***************************************/ +.ui-widget-overlay { + background: #666 !important; + opacity: 0.3 !important; + filter: Alpha(Opacity=30) !important; + position: fixed !important; +} + +.hx-popup.ui-dialog { + z-index: 100001 !important; +} + +.hx-popup .ui-dialog-titlebar-close { + display: none; +} + +.hx-popup .ui-dialog-titlebar { + background: linear-gradient(to top, #ccc 0%, #bbb 20%, #eee 100%); + border: 1px solid #aaa; +} + +.hx-popup .answeredButton { + background: linear-gradient(to top, #9fd 0%, #7db 20%, #afd 100%); + background-color: #afc; + text-shadow: none; +} + +span.hx-VQControls { + font-size: 150%; +} + +span#hx-onoff { + font-weight: bold; +} + +span#hx-playpauseword { + font-weight: bold; +} + +/************** End Pop-Up Problems Block *******************/ +/***************************************/ +/* This block is for HXEditor. +/***************************************/ +/* .hxed-save {} */ + +/* .hxed-download {} */ + +.hxed-filemenu { + background-image: linear-gradient(#f1f1f1, #d9d1d1); + font-weight: bold; + height: 2.1em; + font-size: 0.9rem; + border: 1px solid #d2c9c9; +} + +.hxed-currentslot { + color: #0075b4; +} + +.hxed-statusmessage { + color: #666; + flex-grow: 1; +} + +.hxed-persistentnotice { + color: darkred; + float: right; +} + +.hxed-deletebutton { + color: darkred; + float: right; + font-size: 1.2em; + background-color: transparent; + background-image: none; + border: none; +} + +.hxed-controlbox { + display: flex; + align-items: baseline; +} + +.hxeditor-control { + margin: 2px; +} + +.note-editable { + height: 5em; +} + +/************** End Editor Block *******************/ diff --git a/demo-course/course/static/hx.js b/demo-course/course/static/hx.js new file mode 100644 index 0000000..25e2cad --- /dev/null +++ b/demo-course/course/static/hx.js @@ -0,0 +1,1428 @@ +var HXGlobalJS = function () { + 'use strict'; + + // Checking for some local variables. If they're not defined, make blanks. + if (typeof window.hxLocalOptions === 'undefined') { + window.hxLocalOptions = {}; + } + if (typeof window.HXPUPTimer === 'undefined') { + window.HXPUPTimer = []; + } + if (typeof window.HXChimeTimer === 'undefined') { + window.HXChimeTimer = []; + } + + /***********************************************/ + // Setting all the default options. + // Can be overwritten in hxGlobalOptions.js + // for course-wide defaults. + /***********************************************/ + + var hxDefaultOptions = { + // Table of Contents + makeTOC: false, + + // Remove a lot of the navigation "chrome" - use only if you have just one page per unit. + collapsedNav: false, + + // Auto-open the on-page discussions. + openPageDiscussion: false, + + // Marks all external links with an icon. + markExternalLinks: false, + + // Use learner backpack to store & retrieve data? + useBackpack: true, + + // Highlighter: Yellow highlights that start turned off and go back to transparent afterward. + highlightColor: '#ff0', + highlightBackground: 'rgba(0,0,0,0)', + highlightState: true, + // Code syntax highlighting + highlightCode: true, + + // Default options for Slick image slider + slickOptions: { + arrows: true, + dots: true, + focusOnChange: true, + infinite: true, + slidesToShow: 3, + slidesToScroll: 3, + }, + // Default options for image slider navigation + slickNavOptions: { + asNavFor: '.hx-bigslider', + variableWidth: true, + focusOnSelect: true, + slidesToShow: 3, + slidesToScroll: 1, + }, + // Default options for single big image slider paired to nav. + slickBigOptions: { + asNavFor: '.hx-navslider', + arrows: false, + dots: true, + fade: true, + focusOnChange: true, + adaptiveHeight: true, + slidesToShow: 1, + slidesToScroll: 1, + }, + // Default options for text slider + // Also inherits settings from slickOptions + textSliderOptions: { + slidesFile: 'TextSliderCards.csv', + startingSlide: '', + // Add slide IDs to this list to include them, or remove the whole thing to include everything. + slideScope: [], + overviewIsOpen: false, + showBottomNav: true, + maxIconsTall: 2, + causeEffect: ['Causes', 'Effects'], + }, + // Default options for pop-up problems + PUPOptions: { + width: 800, + effect: 'fade', + effectlength: 200, + myPosition: 'center', + atPosition: 'center', + ofTarget: window, + }, + // Default options for video links + VidLinkOptions: { + hideLinkAfter: 5, //seconds + effect: 'slide', + hide: { direction: 'down' }, + show: { direction: 'down' }, + speed: 500, + location: 'bl', // Bottom Left. bl, br, tl, and tr are all ok. + }, + // Default options for Summernote toolbar + HXEditorOptions: [ + ['style', ['style']], + ['font', ['bold', 'italic', 'underline', 'clear']], + ['color', ['color']], + ['para', ['ul', 'ol', 'paragraph']], + ['table', ['table']], + ['insert', ['link']], + ['view', ['fullscreen', 'codeview', 'help']], + ], + // No options for chimes right now. + ChimeOptions: {}, + }; + + /***********************************************/ + // Get course external URL and related info. + // Good for logging and grabbing scripts/images. + /***********************************************/ + + var course_asset_url = getAssetURL(window.location.href, 'complete'); + // Get the URL of this script, because not everything is in Files & Uploads. + var script_asset_url = course_asset_url; + let hx_js_script_tag = $('script').filter((i, e) => { + if (e.src) { + if (e.src.includes('hx.js')) { + return e; + } + } + }); + + // If there's no script tag, we are running locally from /static/ + if (hx_js_script_tag.length === 0) { + script_asset_url = course_asset_url; + } else { + script_asset_url = hx_js_script_tag[0].attributes.src.value.replace( + 'hx.js', + '' + ); + } + if (hx_js_script_tag.length > 1){ + logThatThing({ error: 'More than one hx.js script tag on this page.' }); + } + + logThatThing({ 'script asset url': script_asset_url }); + + // Are we in Studio? If so, stop trying to run anything. Just quit. + var courseSite = getAssetURL(window.location.href, 'site'); + if (courseSite.indexOf('studio') > -1) { + console.log('Running HXJS in studio is probably not great. Quitting.'); + return; + } + + // Get our current location, mostly for logging purposes, + // but also so we can load the scripts properly. + var courseInfo = getCourseInfo(window.location.href); + var courseLogID = + courseInfo.institution + '.' + courseInfo.id + '_' + courseInfo.run; + + logThatThing({ 'HX.js': 'enabled' }); + logThatThing({ course_log_id: courseLogID }); + + // Listen for events that rewrite problem HTML. + Logger.listen('problem_check', null, (en, es) => onProblemRewrite(en, es)); + Logger.listen('problem_show', null, (en, es) => onProblemRewrite(en, es)); + Logger.listen('problem_reset', null, (en, es) => onProblemRewrite(en, es)); + + /**************************************/ + // Load outside scripts. + // Must be in Files & Uploads. + // Only do it if we need them. + // Continue when done. + /**************************************/ + + // Define the function that gets the outside scripts. + $.getMultiScripts = function (arr, path) { + console.log(arr); + var _arr = $.map(arr, function (src) { + console.log(src); + console.log(path); + let loc = path; + if (src === 'hxGlobalOptions.js') { + // This should always get pulled from the course, not the CDN. + loc = getAssetURL(window.location.href); + } + console.log(loc); + logThatThing({ loading_script: loc + src }); + return $.getScript((loc || '') + src); + }); + + _arr.push( + $.Deferred(function (deferred) { + $(deferred.resolve); + }) + ); + + return $.when.apply($, _arr); + }; + + var script_array = []; + + // We definitely want to load the course-wide options file. + // It overrides defaults in this file, and is overridden by local options. + var hxOptions = {}; + script_array.push('hxGlobalOptions.js'); + + // Do we load Prism for code highlighting? + var codeblocks = $('code'); + if (codeblocks.length) { + logThatThing({ code_block: 'found' }); + script_array.push('prism.js'); + } + + // Do we load Slick for image sliders? + var slider = $('.hx-slider'); + var navslider = $('.hx-navslider'); + var bigslider = $('.hx-bigslider'); + if (slider.length || (navslider.length && bigslider.length)) { + logThatThing({ image_slider: 'found' }); + script_array.push('slick.js'); + } + + // Do we load the Dynamic Text Slider? + var dynamicSliders = $('.hx-dynamic-sliderbox'); + if (dynamicSliders.length) { + logThatThing({ dynamic_slider: 'found' }); + var HXDTS; + script_array.push('papaparse.js'); // CSV parser + script_array.push('hx-text-slider.js'); + } + + // Do we load the Summernote editor? + var editors = $('.hx-editor:visible'); + if (editors.length > 0) { + logThatThing({ editor: 'found' }); + script_array.push('summernote-lite.min.js'); + script_array.push('HXEditor.js'); + var HXED; + } + + // Do we load HXVideoLinks for... um... HarvardX video links? + // And HXPopUpProblems for pop-up problems, and Chime for etc. + // Set hxLocalOptions.dontload_video_stuff: true to avoid this, + // for instance if you have several videos on one page that don't need it. + var load_video_stuff = true; + if (typeof window.hxLocalOptions.dontload_video_stuff !== undefined) { + if (window.hxLocalOptions.dontload_video_stuff === true) { + load_video_stuff = false; + console.log('skipping loading video js'); + } + } + + // We load the video scripts when... + // - we're not specifically told not to + // - and there's a video on the page + // - and, for pop-up problems, there needs to be a timer. + // - and, for the chimes, there needs to be that timer. + var all_videos = $('.video'); + if (load_video_stuff) { + if (all_videos.length > 0) { + logThatThing({ video: 'found' }); + script_array.push('HXVideoLinks.js'); + var HXVL; + // Only do pop-up problems if the right timer is in place. + if (window.HXPUPTimer.length > 0) { + script_array.push('HXPopUpProblems.js'); + var HXPUP; + } + // Only do video chimes if the right timer is in place. + if (window.HXChimeTimer.length > 0) { + script_array.push('HXVideoChime.js'); + var HXVC; + } + } + } + + // This is where we load all the outside scripts we want. + $.getMultiScripts(script_array, script_asset_url) + .done(function () { + logThatThing({ 'Loaded scripts': script_array }); + if (hxGlobalOptions) { + hxOptions = setDefaultOptions( + window.hxLocalOptions, + hxGlobalOptions, + hxDefaultOptions + ); + } else { + hxOptions = setDefaultOptions( + window.hxLocalOptions, + {}, + hxDefaultOptions + ); + } + keepGoing(hxOptions); + }) + .fail(function (jqxhr, settings, exception) { + console.log(jqxhr); + console.log(settings); + console.log(exception); + logThatThing({ scripts: script_array, script_load_error: settings }); + hxOptions = setDefaultOptions( + window.hxLocalOptions, + {}, + hxDefaultOptions + ); + keepGoing(hxOptions); + }); + + // Once we have the options, we're ready to proceed. + function keepGoing(hxOptions) { + window.hxOptions = hxOptions; + console.log('Window hxOptions set'); + + /**************************************/ + // The "backpack" stores up to 100k of + // learner data on edX's server. + // See https://github.com/HarvardX/js-input-samples/tree/master/learner_backpack + /**************************************/ + if ($('#hxbackpackframe').length === 0 && hxOptions.useBackpack) { + // Add the backpack iframe and hide it. + let server_url = getAssetURL(window.location.href, 'site'); + let backpackURL = + server_url + + 'block-v1:' + + courseInfo.institution + + '+' + + courseInfo.id + + '+' + + courseInfo.run + + '+type@problem+block@' + + 'backpack'; + let bakframe = $(''); + bakframe.attr('src', backpackURL); + bakframe.attr('id', 'hxbackpackframe'); + bakframe.attr('aria-hidden', 'true'); + bakframe.attr('tabindex', '-1'); + bakframe.css('display', 'none'); + $('body').append(bakframe); + + // See later for the function that listens for the frame to load. + } + + /**************************************/ + // Load css for the editor and insert a "Loading" note. + // Set data-saveslot attrib to select save slot. + /**************************************/ + if (editors.length) { + $('head').append( + $( + '' + ) + ); + // Insert a loading indicator. + let edit_box = $( + '
      Editor loading...
      ' + ); + let spinner = $(''); + edit_box.prepend(spinner); + editors.append(edit_box); + // If the backpack is in place, start the editors. + // Otherwise, this will get fired once the backpack loads. + if (hxBackpackLoaded && typeof HXED === 'undefined') { + HXED = new HXEditor(hxOptions.useBackpack, hxOptions.HXEditorOptions); + } else { + console.log('Backpack: ' + hxBackpackLoaded); + console.log( + 'HXED: ' + typeof HXED === 'undefined' ? 'undefined' : 'ok' + ); + } + } + + /**************************************/ + // If we have videos, instantiate the functions + // that handle pop-up links and problems. + /**************************************/ + if (all_videos.length > 0 && load_video_stuff) { + $('head').append( + $( + '' + ) + ); + HXVL = new HXVideoLinks(hxOptions.VidLinkOptions); + + // Check for jump-to-time links and enable them. + $('.jumptime').on('click tap', function (e) { + // Suppress the effect of clicking the link. + e.preventDefault(); + // If there's a data-for-vidnum attribute, select that video. + // Otherwise, just use the first one on the page. + let vnum = 1; + if ($(this).attr('data-for-vidnum') !== undefined) { + vnum = $(this).attr('data-for-vidnum'); + } + // let v = $('.video')[vnum - 1]; + // Move that video to the time indicated in the data attribute. + let t = hmsToTime($(this).attr('href')); + jumpToTime(vnum, t); + }); + + // Only do pop-up problems if there's a timer in place. + if (window.HXPUPTimer.length !== 0) { + HXPUP = new HXPopUpProblems( + hxDefaultOptions.PUPOptions, + window.HXPUPTimer + ); + } + // Only do pop-up problems if there's a timer in place. + if (window.HXChimeTimer.length !== 0) { + HXVC = new HXVideoChime( + hxDefaultOptions.ChimeOptions, + window.HXChimeTimer + ); + } + } + + // If we have code blocks, highlight them. + if (codeblocks.length && hxOptions.highlightCode) { + insertCodeHighlighter(); + } + + // If we have links or iframes to surveys with the hx-survey-url class on this page, + // adjust their URLs to include course info. + const elements_to_update = Array.from( + document.getElementsByClassName('hx-survey-url') + ); + if (elements_to_update.length) { + logThatThing({ hx_surveys: 'found' }); + const elements_to_update = Array.from( + document.getElementsByClassName('hx-survey-url') + ); + const old_urls = elements_to_update.map(function (e) { + if (e.tagName.toLowerCase() === 'a') { + return e.href; + } else if (e.tagName.toLowerCase() === 'iframe') { + return e.src; + } else { + return e.innerText; + } + }); + const new_urls = old_urls.map( + (x) => + x + + '&university=' + + courseInfo.institution + + '&course_id=' + + courseInfo.id + + '&course_run=' + + courseInfo.run + ); + elements_to_update.forEach(function (e, i) { + if (e.tagName.toLowerCase() === 'a') { + e.href = new_urls[i]; + } else if (e.tagName.toLowerCase() === 'iframe') { + e.src = new_urls[i]; + } else { + e.innerText = new_urls[i]; + } + }); + } + + /**************************************/ + // Jump to time in video on this page. + // Make a link like
      link text + // The # is actually a pound sign for anchor link. + // Set the number to which video you want. Top one is 1. + /**************************************/ + + $('a.hx-vidtime').on('click tap', function () { + let this_time = hmsToTime($(this).attr('data-time')); + let href = $(this).attr('href'); + let anchor = href.slice(href.indexOf('#video')); + let vid_number = anchor.replace('#video', ''); + let unit_number = href.slice( + href.indexOf('/jump_to_id/') + 13, + href.indexOf('#video') + ); + let startsWithHash = href.indexOf('#') === 0 ? true : false; + + // If the href starts with a pound sign, go on this page. + if (startsWithHash) { + logThatThing({ 'link starts video at time': this_time }); + HXVL.jumpToTime(vid_number, this_time); + } + // If not, stash the destination in HTML5 Local Storage + // so that we can retrieve it on the next page. + else { + localStorage.HXVideoLinkGo = 'true'; + localStorage.HXVideoLinkUnit = unit_number; + localStorage.HXVideoLinkNumber = vid_number; + localStorage.HXVideoLinkTime = this_time; + logThatThing({ + 'storing video info for jump': { + unit: unit_number, + 'video number': vid_number, + time: this_time, + }, + }); + } + }); + + /**************************************/ + // Collapsed Navigation + // Removes the navigation bar at the top of the page. + // The arrows will still be at the bottom of the page. + // Set hxLocalOptions.collapsedNav = true to use, or pref. in Global + /**************************************/ + if (hxOptions.collapsedNav) { + $('.sequence-nav').hide(); + // $('.sequence-bottom').hide(); + $('.sequence > .path').hide(); + $('h3.unit-title').hide(); + } + + /**************************************/ + // Make a color picker that lightly tints the page + // for people with dyslexia. + // Still a work in progress. + /**************************************/ + let tintButton = $('#hx-tint'); + if (tintButton.length) { + $(tintButton).on('click tap', function () { + $('p').animate({ color: 'blue' }); + }); + } + + /**************************************/ + // Forum Tricks section. Right now, we only have: + // Auto-open inline discussions + /**************************************/ + if (hxOptions.openPageDiscussion) { + $('.discussion-show.btn').click(); + } + + /**************************************/ + // External Links + // Adds a FontAwesome icon for external links at the end of + // each link that does not lead to an edx course. + // Set hxLocalOptions.markExternalLinks = true to use. + /**************************************/ + if (hxOptions.markExternalLinks) { + logThatThing('marking external links'); + $('.vert .xblock a, .static_tab_wrapper .xblock a').each(function ( + i, + linky + ) { + var destination = $(linky).attr('href'); + if (isExternalLink(destination)) { + $(linky).append( + ' External link' + ); + } + }); + } + + /**************************************/ + // Stuff for a visibility toggle button. + // Button classes start with "hx-togglebutton#" + // Target classes start with "hx-toggletarget#" + // (Where # is a number, not a pound sign.) + /**************************************/ + let toggler_class = 'hx-togglebutton'; + let toggled_class = 'hx-toggletarget'; + let toggle_remember = 'hx-toggleremember'; + prepAccessibleToggles(toggler_class, toggled_class, toggle_remember); + + /**************************************/ + // Highlight toggle button. + // Create a button with the class "highlighter#" + // and spans with the class "highlight#" + // where the # is a number. + /**************************************/ + + $('[class^=hx-highlighter]').on('click tap', function () { + let myNumber = getClassNumber(this.className, 'hx-highlighter'); + + if (hxOptions.highlightState) { + $('.hx-highlight' + myNumber).css({ + 'background-color': hxOptions.highlightColor, + transition: 'background 0.2s', + }); + } else { + $('.hx-highlight' + myNumber).css({ + 'background-color': hxOptions.highlightBackground, + transition: 'background 0.2s', + }); + } + + hxOptions.highlightState = !hxOptions.highlightState; + + logThatThing({ + 'Highlight button': 'pressed', + 'Highlight number': myNumber, + }); + }); + + // Automatic Table of Contents maker. + if (hxOptions.makeTOC) { + makeAutoTOC(); + } + + // Clickable images that pop up dialog boxes. + let popUpOpener = $('.hx-popup-opener'); + if (popUpOpener.length) { + handlePopUpContent(); + } + + // Auto-generation of footnotes. + let all_footnotes = $('span[class^="hx-footnote"]'); + if (all_footnotes.length) { + makeFootnotes(all_footnotes); + } + + // If we have dynamic sliders, run them. + if (dynamicSliders.length) { + // Load CSS and instantiate JS + $('head').append( + $( + '' + ) + ); + console.log(hxOptions.textSliderOptions); + HXDTS = new HXTextSlider(hxOptions.textSliderOptions); + logThatThing({ 'dynamic slider': 'created' }); + } + + /***********************************/ + // Stuff for the Slick image slider. + /***********************************/ + + // Only do slider things if there are actually sliders to create. + // Would be good to handle multiple sliders later on. + if (slider.length) { + $('head').append( + $( + '' + ) + ); + $('head').append( + $( + '' + ) + ); + + // Wait for slick to be ready. + // If it's not ready after 30 tries, give up. + let slick_ready_counter = 0; + let slick_ready = setInterval(function () { + if (typeof $.fn.slick !== 'undefined') { + clearInterval(slick_ready); + slider.slick(hxOptions.slickOptions); + logThatThing({ slider: 'created' }); + } + slick_ready_counter++; + if (slick_ready_counter > 30) { + clearInterval(slick_ready); + logThatThing('Slick not ready after 30 tries. Giving up.'); + } + }, 100); + } + + // This set is for matched sliders, where one is the + // thumbnails and one is the full-sized image and/or text. + // Would be good to handle multiple pairs later on. + if (navslider.length && bigslider.length) { + $('head').append( + $( + '' + ) + ); + $('head').append( + $( + '' + ) + ); + navslider.slick(hxOptions.slickNavOptions); + bigslider.slick(hxOptions.slickBigOptions); + logThatThing({ 'paired slider': 'created' }); + } + + // Placeholder: Audio player + + // Placeholder: Intro.js walkthroughs + // Still trying to figure out how to place these properly. + } + + /***********************************/ + // Various utility functions. + /***********************************/ + + /**************************************/ + // When an event resets a problem, + // reapply certain javascript functions. + /**************************************/ + let reapply_list = ['']; + function onProblemRewrite(event_name, event_source) { + console.log(event_name, event_source); + let prob_id; + if (event_name === 'problem_check') { + prob_id = event_source.split('_')[1]; + } else if (event_name === 'problem_show') { + prob_id = event_source.problem.split('@')[2]; + } + let problem = $('[id^="' + prob_id + '"]').parent()[0]; + + // Wait a moment for the problem to reload. + // Not the best solution, but events fire before DOM changes complete. + setTimeout(function () { + // Set the visibility of the toggle buttons. + setVisFromMemory('hx-togglebutton', 'hx-toggletarget'); + // Re-highlight all the code. + if (codeblocks.length && hxOptions.highlightCode) { + Prism.highlightAllUnder(problem); + } + }, 500); + } + + /**************************************/ + // Stuff for a visibility toggle button. + // One class of items toggles another, + // with numbers setting the matching items. + // Adds aria attribs for accessibility. + /**************************************/ + function getTogVisibility(location) { + location = 'toggle_' + location; + let should_show = false; + try { + // console.log(localStorage.HXToggleMemory); + should_show = JSON.parse(localStorage.HXToggleMemory)[location]; + } catch (error) { + // console.log('error'); + // console.log(error); + } + // console.log('visibility for toggle ' + location + ' is ' + ret); + return should_show; + } + + function setTogMemory(location, shown) { + location = 'toggle_' + location; + console.log('set vis of ' + location + ' to ' + shown); + try { + let hxtm = JSON.parse(localStorage.HXToggleMemory); + hxtm[location] = shown; + localStorage.HXToggleMemory = JSON.stringify(hxtm); + } catch (error) { + console.log('error'); + console.log(error); + localStorage.HXToggleMemory = JSON.stringify({ [location]: shown }); + } + } + + function hideThings(press, target, remember, num) { + console.log('hiding'); + if ($.ui) { + $('.' + target + num).hide('slide', { direction: 'up' }, 'fast'); + } else { + // edX tabs don't load jQuery UI. + $('.' + target + num).hide(); + } + $('.' + press + num).attr('aria-expanded', 'false'); + $('.' + target + num).attr('aria-hidden', 'true'); + $('.hx-toggleset .' + press + num) + .siblings() + .attr('disabled', false); + if (remember) { + setTogMemory(num, false); + } + } + + function showThings(press, target, remember, num) { + console.log('showing'); + if ($.ui) { + $('.' + target + num).show('slide', { direction: 'up' }, 'fast'); + } else { + // edX tabs don't load jQuery UI. + $('.' + target + num).show(); + } + $('.' + press + num).attr('aria-expanded', 'true'); + $('.' + target + num).attr('aria-hidden', 'false'); + $('.hx-toggleset .' + press + num) + .siblings() + .attr('disabled', true); + if (remember) { + setTogMemory(num, true); + } + } + + // Use toggle memeory to set visibility of toggleable elements. + function setVisFromMemory(press, target) { + console.log('setting visibility from memory'); + let prepped = []; + $('[class*=' + target + ']').each(function () { + let myNumber = getClassNumber(this.className, target); + console.log('toggle ' + myNumber + '...'); + if (prepped.indexOf(myNumber) === -1) { + prepped.push(myNumber); + // console.log('...is not handled yet...'); + let should_be_visible = getTogVisibility(myNumber); + if (should_be_visible !== undefined && should_be_visible !== null) { + if (should_be_visible) { + console.log('...should be shown. Showing it.'); + showThings(press, target, false, myNumber); + } else { + console.log('...should be hidden. Hiding it.'); + hideThings(press, target, false, myNumber); + } + } + } else { + console.log('...is already handled.'); + } + }); + } + + // Gets toggleable items ready for use. + function prepAccessibleToggles(press, target, remember_class) { + // Add listeners and hide what should be hidden. + // But don't prep the same toggles twice. + let prepped = []; + + $('[class*=' + press + ']').each(function () { + let myNumber = getClassNumber(this.className, press); + if (prepped.indexOf(myNumber) === -1) { + console.log('prepping toggle ' + myNumber); + prepped.push(myNumber); + + // Add aria attributes to each toggler and target + if ($('.' + target + myNumber + ':visible').length > 0) { + $('.' + press + myNumber).attr('aria-expanded', 'true'); + $('.' + target + myNumber).attr('aria-hidden', 'false'); + } else { + $('.' + press + myNumber).attr('aria-expanded', 'false'); + $('.' + target + myNumber).attr('aria-hidden', 'true'); + } + } + }); + setVisFromMemory(press, target); + + // Listener: clear the memory. + $('.hx-clearmemory').on('click tap', function () { + let myNumber = getClassNumber(this.className, press); + // If hx-clearmemory has a number after it, clear that one item. + // Otherwise, clear everything. + if (myNumber !== null) { + setTogMemory(myNumber, undefined); + } else { + localStorage.HXToggleMemory = ''; + } + }); + + // Listener: toggle elements when clicked + // and reverse the aria attributes. + $('[class*=' + press + ']').on('click tap', function () { + let myNumber = getClassNumber(this.className, press); + let remember = $(this).hasClass(remember_class); + let vis = ''; + + if ($(this).attr('aria-expanded') === 'true') { + vis = 'invisible'; + hideThings(press, target, remember, myNumber, $(document)); + } else { + vis = 'visible'; + showThings(press, target, remember, myNumber, $(document)); + // Scroll to single target if it's offscreen + if ($('.' + target + myNumber).length === 1) { + if (!isVisible($('.' + target + myNumber)[0])) { + $('.' + target + myNumber)[0].scrollIntoView(); + } + } + } + + logThatThing({ + 'Toggle button': 'pressed', + 'Toggled to': vis, + 'Toggle number': myNumber, + }); + }); + } + + /**************************************/ + // If we have code blocks on the page, + // load the style sheet for them. + /**************************************/ + function insertCodeHighlighter() { + $('head').append( + $( + '' + ) + ); + } + + /**************************************/ + // Automatic Table of Contents maker. + // Uses h3 and h4 elements, links them up. + // Set hxLocalOptions.makeTOC = true to use. + /**************************************/ + function makeAutoTOC() { + // Add the container for the TOC + if ($('.edx-notes-wrapper-content').length) { + $('.edx-notes-wrapper-content:first-of-type').prepend( + '
      ' + ); + } else { + $($('#seq_content .vert .xblock')[0]).prepend( + '
      ' + ); + } + // Using text instead of objects to make nesting easier. + let auto_toc = '

      Table of Contents

        '; + + // Get all the h3 and h4 elements on the page. + let allHeaders = $('h3, h4').filter(function () { + // Remove anything that's hidden away. + return $(this).is(':visible'); + }); + + // For each header, add it to the list and make a link. + allHeaders.each(function (i) { + // Set the id of the element to link to. + $(this).attr('id', 'TOCLink' + i); + + let TOCEntry = $(this).text(); + let TOCLevel; + if ($(this).is('h3')) { + TOCLevel = 3; + if ($(allHeaders[i - 1]).is('h3') || i === 0) { + auto_toc += + '
      • ' + + TOCEntry + + '
      • '; + } else if ($(allHeaders[i - 1]).is('h4')) { + auto_toc += + '
    • ' + + TOCEntry + + '
    • '; + } + } + if ($(this).is('h4')) { + TOCLevel = 4; + if ($(allHeaders[i - 1]).is('h3')) { + if (i > 0) { + auto_toc.slice(0, auto_toc.length - 5); + } + auto_toc += + ''; + + $('#auto_toc').append(auto_toc); + } + + /***********************************/ + // Auto-generation of footnotes. + // Finds [#] + // Links to
      + // Does some rearranging and formatting. + // Must have HTML component with h3 header "Footnotes" + /***********************************/ + function makeFootnotes(allFootnotes) { + let this_footnote, + this_number, + this_target, + footnote_components, + destination_component; + + for (let i = 0; i < allFootnotes.length; i++) { + this_footnote = allFootnotes[i]; + this_number = getClassNumber(this_footnote.className, 'hx-footnote'); + this_target = $('div.hx-footnote-target' + this_number); + + // Style the footnote marker + $(this_footnote).addClass('hx-footnote-style'); + $(this_footnote).wrap(''); + + // Move the footnote target divs to the appropriate location + footnote_components = $('h3:contains("Footnote")'); + destination_component = $( + footnote_components[footnote_components.length - 1] + ).parent(); + $(this_target).detach().appendTo(destination_component); + + // Add links to the footnote markers + $(this_footnote) + .wrap( + '' + ) + .wrap(); + + // Add targets and back-links to the footnotes + this_target.prepend(''); + this_target.append( + '

      (back)

      ' + ); + } + } + + /*******************************************/ + // Clickable images that pop up dialog boxes. + // Clickable area has id "MyID" and class "hx-popup-opener" + // Target div has class "MyID hx-popup-content" + // Don't put other classes first, but you can put them later if you want. + /*******************************************/ + function handlePopUpContent() { + // First, create lists of areas for the purpose of accessibility. + $('map').each(function (index) { + // Make a list element from each area's title + let temp_list = []; + $(this) + .find('area') + .each(function (index) { + temp_list.push( + '
    • ' + + this.title + + '
    • ' + ); + }); + + // Make that list into a big string and wrap it with UL + let list_html = '
        ' + temp_list.join('') + '
      '; + list_html = '

      Clickable Areas:

      ' + list_html; + + // If we're going to make a list by hand, do nothing. + let listSwitch = $(this).data('make-accessible-list'); + if (listSwitch === 'false' || listSwitch === false) { + //do nothing + } else { + // Otherwise, append the list right after the map. + $(this).after(list_html); + } + }); + + // Get the list of popup openers again so we can bind properly. + // Create the dialogue if we click on the right areas or links. + $('.hx-popup-opener').on('click tap', function (e) { + let myClass = this.className; + let boxName = myClass.split(/\s+/)[0]; + + $('div.' + boxName).dialog( + { + dialogClass: 'hx-popup-dialog', + title: $(this).attr('title'), + position: { + my: 'center', + at: 'center', + of: $(e.target), + }, + show: { + effect: 'fade', + duration: 200, + }, + hide: { + effect: 'fade', + duration: 100, + }, + buttons: { + Close: function () { + $(this).dialog('close'); + }, + }, + }, + function (boxName) { + $('div.' + boxName).css({ display: '' }); + alert(boxName); + } + ); + + logThatThing({ + 'Pop-up Dialog': 'opened', + Dialog: boxName, + }); + }); + } + + // Pops up data-based maps that are colored with map_data.js + function popDataMap() { + console.log('Open full-sized map image.'); + let mf = $('#mapframe'); + let zoom_button = mf.contents().find('#LargeMapView'); + mf.toggleClass('hx-svg-view'); + if (mf.hasClass('hx-svg-view')) { + zoom_button.text('View Regular'); + } else { + zoom_button.text('View Large'); + } + } + + // Is a link external or not? + function isExternalLink(url) { + if (typeof url === 'undefined') { + return false; + } else if (!isNaN(hmsToTime(url))) { + return false; + } else { + if ( + url.includes('edx.org') || + url.includes('edxapp') || + url.includes('edx-cdn.org') || + url.includes('edx-video.net') || + url.includes('/courses/') || + url.includes('/assets/courseware/') || + url.includes('jump_to_id') || + url.includes('cloudfront.net') || + url.includes('mailto') || + url.includes('javascript:void') || + url.includes('javascript:;') || + url.slice(0, 1) == '#' + ) { + return false; + } + return true; + } + } + + // Turns a page URL in edX into an external asset url, + // because we can't use /static/ from within javascript. + // Pass option 'complete' for the whole thing, 'site' for the site, + // or 'partial' for without the site. + // Public function. + function getAssetURL(windowURL, option) { + // Sometimes escape characters are not our friends. + // Replace + and : if they're present. + if (windowURL.includes('%2B')) { + windowURL = windowURL.replace('%2B', '+'); + } + if (windowURL.includes('%3A')) { + windowURL = windowURL.replace('%3A', ':'); + } + + // Match the site in case we need it for something later. + let courseSiteURL = windowURL.match(/https:\/\/.+\//)[0]; + + if (option == 'site') { + return courseSiteURL; + } + + // Switch from course to asset + let staticFolderURL = windowURL.replace('courses/course', 'asset'); + + // In case we're rendering in XBlock URL mode: + if (staticFolderURL.search('xblock/block-v1') > -1) { + staticFolderURL = staticFolderURL.replace('xblock/block', 'asset'); + staticFolderURL = staticFolderURL.replace('+type@', '/'); + } + + // Ditch the unique identifier for this resource. + let pluslocation = staticFolderURL.indexOf('+'); + let finalLocation = staticFolderURL.indexOf('/', pluslocation); + staticFolderURL = staticFolderURL.slice(0, finalLocation); + + // Switch from courseware to type + staticFolderURL = staticFolderURL + '+type@asset+block/'; + + if (option == 'partial') { + return staticFolderURL.replace(courseSiteURL, ''); + } + + return staticFolderURL; + } + + // Gets the institution, course ID, and course run from the URL. + function getCourseInfo(windowURL) { + let partialURL = getAssetURL(windowURL, 'partial'); + let courseInfo = {}; + + // get the part from the colon to the first + + partialURL = partialURL.split(':')[2]; + courseInfo.institution = partialURL.split('+')[0]; + courseInfo.id = partialURL.split('+')[1]; + courseInfo.run = partialURL.split('+')[2]; + + return courseInfo; + } + + // Takes in all the classes, as from a className attribute. + // Returns the number attached to the important class. + function getClassNumber(className, importantClass) { + let allClasses = className.split(/\s+/); + for (let i = 0; i < allClasses.length; i++) { + if (allClasses[i].indexOf(importantClass) === 0) { + return allClasses[i].slice(importantClass.length); + } + } + return null; + } + + // Sets the default options for something if they're not already defined. + // Prioritizes local options, then global options in /static/, then the ones in this file. + // Does deep copy (clone) + function setDefaultOptions(localOptions, globalOptions, fallbackOptions) { + let tempOptions = {}; + + if (!localOptions && !globalOptions) { + return fallbackOptions; + } else if (!localOptions) { + tempOptions = $.extend(true, {}, fallbackOptions, globalOptions); + } else if (!globalOptions) { + tempOptions = $.extend(true, {}, fallbackOptions, localOptions); + } else { + tempOptions = $.extend( + true, + {}, + fallbackOptions, + globalOptions, + localOptions + ); + } + + return tempOptions; + } + + // Konami Code + (function ($) { + $.fn.hxKonami = function (callback, code) { + if (code === undefined) code = '38,38,40,40,37,39,37,39,66,65'; + + return this.each(function () { + let kkeys = []; + $(this).keydown(function (e) { + kkeys.push(e.keyCode); + while (kkeys.length > code.split(',').length) { + kkeys.shift(); + } + if (kkeys.toString().indexOf(code) >= 0) { + kkeys = []; + callback(e); + } + }); + }); + }; + })(jQuery); + + $(window).hxKonami(function () { + alert('+30 Lives'); + logThatThing({ 'easter egg': 'Konami Code' }); + }); + + // Learner Backpack utility function! + // Did the backpack load properly? Listen for the load event. + // Verify origin and publish functions. + $(window) + .off('message.hx') + .on('message.hx', function (e) { + var data = e.originalEvent.data; + + // Only accept from same origin. Won't work in Studio. + if (e.originalEvent.origin !== location.origin) { + return; + } + + // Only accept objects with the right form. + if (typeof data === 'string') { + if (data === 'backpack_ready') { + console.log('Backpack ready.'); + let iframe_window = $('#hxbackpackframe')[0].contentWindow; + window.hxSetData = iframe_window.hxSetData; + window.hxClearData = iframe_window.hxSetData; + window.hxGetData = iframe_window.hxGetData; + window.hxGetAllData = iframe_window.hxGetAllData; + window.hxBackpackLoaded = iframe_window.hxBackpackLoaded; + // If we're using editors on this page, load them. + if ( + hxOptions.useBackpack && + editors.length > 0 && + typeof HXED === 'undefined' + ) { + HXED = new HXEditor( + hxOptions.useBackpack, + hxOptions.HXEditorOptions + ); + } + } + } + }); + + // Converts hh:mm:ss to a number of seconds for time-based problems. + // If it's passed a number, it just spits that back out as seconds. + // Public function. + function hmsToTime(hms) { + hms = hms.toString(); + + let hmsArray = hms.split(':'); + let time = 0; + + if (hmsArray.length == 3) { + time = + 3600 * parseInt(hmsArray[0]) + + 60 * parseInt(hmsArray[1]) + + Number(hmsArray[2]); + } else if (hmsArray.length == 2) { + time = 60 * parseInt(hmsArray[0]) + Number(hmsArray[1]); + } else if (hmsArray.length == 1) { + time = Number(hmsArray[0]); + } + + return time; + } + + // Converts time in seconds to hh:mm:ss format. + // Will use just mm:ss if no hours. + // Public function. + function timeToHMS(time) { + var hours; + var minutes; + var seconds; + var timestring = ''; + + time = Math.floor(time); + hours = Math.floor(time / 3600); + minutes = Math.floor((time / 60) % 60); + seconds = Math.floor(time % 60); + + if (minutes < 10) { + minutes = '0' + minutes; + } + if (seconds < 10) { + seconds = '0' + seconds; + } + + timestring = '0:' + seconds; + if (minutes > 0) { + timestring = minutes + ':' + seconds; + } + if (hours > 0) { + timestring = hours + ':' + minutes + ':' + seconds; + } + + return timestring; + } + + // Jump to a particular time in a given video. + // Public function. + function jumpToTime(vid_number, seconds) { + let thisVideo = $('.video')[vid_number - 1]; + let state = $(thisVideo).data('video-player-state'); + if (typeof state.videoPlayer !== 'undefined') { + console.log('jumping video ' + vid_number + ' to time ' + seconds); + thisVideo.scrollIntoView(); + state.videoPlayer.player.seekTo(seconds); + } else { + console.log('video ' + vid_number + ' not ready'); + } + } + + // Checks to see if an element is on-screen. + function isVisible(elm) { + var rect = elm.getBoundingClientRect(); + var viewHeight = Math.max( + document.documentElement.clientHeight, + window.innerHeight + ); + return !(rect.bottom < 0 || rect.top - viewHeight >= 0); + } + + // Send logs both to the console and to the official edX logamajig. + function logThatThing(ThatThing) { + console.log(JSON.stringify(ThatThing)); + Logger.log(courseLogID + '.hxjs', ThatThing); + } + + // Let's publish a few of these. + window.getAssetURL = getAssetURL; + window.hmsToTime = hmsToTime; + window.timeToHMS = timeToHMS; + window.logThatThing = logThatThing; + window.prepAccessibleToggles = prepAccessibleToggles; + window.isExternalLink = isExternalLink; + window.popDataMap = popDataMap; + window.jumpToTime = jumpToTime; + window.hxBackpackLoaded = $('#hxbackpackframe').length > 0; // Gets set when backpack loads. +}; + +$(document).ready(function () { + // If we're already running, don't run again. + if (typeof window.hxjs_is_already_running !== 'undefined') { + console.log('hx-js is already loaded, skipping this copy.'); + return; + } + window.hxjs_is_already_running = true; + + HXGlobalJS(); +}); diff --git a/demo-course/course/static/hxGlobalOptions.js b/demo-course/course/static/hxGlobalOptions.js new file mode 100644 index 0000000..1ce8f95 --- /dev/null +++ b/demo-course/course/static/hxGlobalOptions.js @@ -0,0 +1,34 @@ +/********************************************/ +// Global options for hx.js +// If you haven't changed anything here, it's showing you the default options. +// Change things here to set them course-wide. +// To reset to default, just remove them or reupload the original +// version of this file from the GitHub repository. +/********************************************/ + +var hxGlobalOptions = { + hasGlobalOptions: true, + markExternalLinks: true, + useBackpack: true, + + /********************************************/ + // Slick Image Slider Options + /********************************************/ + slickOptions: {}, + slickNavOptions: {}, + slickBigOptions: {}, + textSliderOptions: {}, + + // Pop-up questions and links for videos + PUPOptions: {}, + VidLinkOptions: {}, + + // Custom emoji for Emoji Response questions (not yet implemented) + // Use this format: + // [ { 'emoji': '✓', 'alt': 'I understand' }, + // { 'emoji': '❓', 'alt': 'I am confused' }, + // { 'emoji': '😯', 'alt': 'I am surprised' }, + // { 'emoji': '🤔', 'alt': 'I am skeptical' }, + // { 'emoji': '😴', 'name': 'I am bored' } ] + custom_emoji: [] +}; diff --git a/demo-course/course/static/imageMapResizer.min.js b/demo-course/course/static/imageMapResizer.min.js new file mode 100644 index 0000000..2aa92f8 --- /dev/null +++ b/demo-course/course/static/imageMapResizer.min.js @@ -0,0 +1,8 @@ +/*! Image Map Resizer (imageMapResizer.min.js ) - v1.0.7 - 2018-05-01 + * Desc: Resize HTML imageMap to scaled image. + * Copyright: (c) 2018 David J. Bradshaw - dave@bradshaw.net + * License: MIT + */ + +!function(){"use strict";function a(){function a(){function a(a,d){function e(a){var d=1===(f=1-f)?"width":"height";return c[d]+Math.floor(Number(a)*b[d])}var f=0;j[d].coords=a.split(",").map(e).join(",")}var b={width:l.width/l.naturalWidth,height:l.height/l.naturalHeight},c={width:parseInt(window.getComputedStyle(l,null).getPropertyValue("padding-left"),10),height:parseInt(window.getComputedStyle(l,null).getPropertyValue("padding-top"),10)};k.forEach(a)}function b(a){return a.coords.replace(/ *, */g,",").replace(/ +/g,",")}function c(){clearTimeout(m),m=setTimeout(a,250)}function d(){l.width===l.naturalWidth&&l.height===l.naturalHeight||a()}function e(){l.addEventListener("load",a,!1),window.addEventListener("focus",a,!1),window.addEventListener("resize",c,!1),window.addEventListener("readystatechange",a,!1),document.addEventListener("fullscreenchange",a,!1)}function f(){return"function"==typeof i._resize}function g(a){return document.querySelector('img[usemap="'+a+'"]')}function h(){j=i.getElementsByTagName("area"),k=Array.prototype.map.call(j,b),l=g("#"+i.name)||g(i.name),i._resize=a}var i=this,j=null,k=null,l=null,m=null;f()?i._resize():(h(),e(),d())}function b(){function b(a){if(!a.tagName)throw new TypeError("Object is not a valid DOM element");if("MAP"!==a.tagName.toUpperCase())throw new TypeError("Expected tag, found <"+a.tagName+">.")}function c(c){c&&(b(c),a.call(c),d.push(c))}var d;return function(a){switch(d=[],typeof a){case"undefined":case"string":Array.prototype.forEach.call(document.querySelectorAll(a||"map"),c);break;case"object":c(a);break;default:throw new TypeError("Unexpected data type ("+typeof a+").")}return d}}"function"==typeof define&&define.amd?define([],b):"object"==typeof module&&"object"==typeof module.exports?module.exports=b():window.imageMapResize=b(),"jQuery"in window&&(jQuery.fn.imageMapResize=function(){return this.filter("map").each(a).end()})}(); +//# sourceMappingURL=imageMapResizer.map diff --git a/static/images_logic_gate_image.png b/demo-course/course/static/images_logic_gate_image.png similarity index 100% rename from static/images_logic_gate_image.png rename to demo-course/course/static/images_logic_gate_image.png diff --git a/static/images_logic_gate_sln.png b/demo-course/course/static/images_logic_gate_sln.png similarity index 100% rename from static/images_logic_gate_sln.png rename to demo-course/course/static/images_logic_gate_sln.png diff --git a/demo-course/course/static/instructor_dashboard_orig.png b/demo-course/course/static/instructor_dashboard_orig.png new file mode 100644 index 0000000..2fddd10 Binary files /dev/null and b/demo-course/course/static/instructor_dashboard_orig.png differ diff --git a/demo-course/course/static/intro_accessible.js b/demo-course/course/static/intro_accessible.js new file mode 100644 index 0000000..8b5a3a6 --- /dev/null +++ b/demo-course/course/static/intro_accessible.js @@ -0,0 +1,1694 @@ +/** + * Intro.js v2.0 + * https://github.com/usablica/intro.js + * MIT licensed + * + * Copyright (C) 2013 usabli.ca - A weekend project by Afshin Mehrabani (@afshinmeh) + */ + +(function (root, factory) { + if (typeof exports === 'object') { + // CommonJS + factory(exports); + } else if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['exports'], factory); + } else { + // Browser globals + factory(root); + } +} (this, function (exports) { + //Default config/variables + var VERSION = '2.0'; + + /** + * IntroJs main class + * + * @class IntroJs + */ + function IntroJs(obj) { + this._targetElement = obj; + this._introItems = []; + + this._options = { + /* Next button label in tooltip box */ + nextLabel: 'Next →', + /* Previous button label in tooltip box */ + prevLabel: '← Back', + /* Skip button label in tooltip box */ + skipLabel: 'Skip', + /* Done button label in tooltip box */ + doneLabel: 'Done', + /* Default tooltip box position */ + tooltipPosition: 'bottom', + /* Next CSS class for tooltip boxes */ + tooltipClass: '', + /* CSS class that is added to the helperLayer */ + highlightClass: '', + /* Close introduction when pressing Escape button? */ + exitOnEsc: true, + /* Close introduction when clicking on overlay layer? */ + exitOnOverlayClick: true, + /* Show step numbers in introduction? */ + showStepNumbers: true, + /* Let user use keyboard to navigate the tour? */ + keyboardNavigation: true, + /* Show tour control buttons? */ + showButtons: true, + /* Show tour bullets? */ + showBullets: true, + /* Show tour progress? */ + showProgress: false, + /* Scroll to highlighted element? */ + scrollToElement: true, + /* Set the overlay opacity */ + overlayOpacity: 0.8, + /* Precedence of positions, when auto is enabled */ + positionPrecedence: ["bottom", "top", "right", "left"], + /* Disable an interaction with element? */ + disableInteraction: false, + /* Default hint position */ + hintPosition: 'top-middle', + /* Hint button label */ + hintButtonLabel: 'Got it' + }; + } + + /** + * Initiate a new introduction/guide from an element in the page + * + * @api private + * @method _introForElement + * @param {Object} targetElm + * @returns {Boolean} Success or not? + */ + function _introForElement(targetElm) { + var introItems = [], + self = this; + + if (this._options.steps) { + //use steps passed programmatically + for (var i = 0, stepsLength = this._options.steps.length; i < stepsLength; i++) { + var currentItem = _cloneObject(this._options.steps[i]); + //set the step + currentItem.step = introItems.length + 1; + //use querySelector function only when developer used CSS selector + if (typeof(currentItem.element) === 'string') { + //grab the element with given selector from the page + currentItem.element = document.querySelector(currentItem.element); + } + + //intro without element + if (typeof(currentItem.element) === 'undefined' || currentItem.element == null) { + var floatingElementQuery = document.querySelector(".introjsFloatingElement"); + + if (floatingElementQuery == null) { + floatingElementQuery = document.createElement('div'); + floatingElementQuery.className = 'introjsFloatingElement'; + + document.body.appendChild(floatingElementQuery); + } + + currentItem.element = floatingElementQuery; + currentItem.position = 'floating'; + } + + if (currentItem.element != null) { + introItems.push(currentItem); + } + } + + } else { + //use steps from data-* annotations + var allIntroSteps = targetElm.querySelectorAll('*[data-intro]'); + //if there's no element to intro + if (allIntroSteps.length < 1) { + return false; + } + + //first add intro items with data-step + for (var i = 0, elmsLength = allIntroSteps.length; i < elmsLength; i++) { + var currentElement = allIntroSteps[i]; + var step = parseInt(currentElement.getAttribute('data-step'), 10); + + if (step > 0) { + introItems[step - 1] = { + element: currentElement, + intro: currentElement.getAttribute('data-intro'), + step: parseInt(currentElement.getAttribute('data-step'), 10), + tooltipClass: currentElement.getAttribute('data-tooltipClass'), + highlightClass: currentElement.getAttribute('data-highlightClass'), + position: currentElement.getAttribute('data-position') || this._options.tooltipPosition + }; + } + } + + //next add intro items without data-step + //todo: we need a cleanup here, two loops are redundant + var nextStep = 0; + for (var i = 0, elmsLength = allIntroSteps.length; i < elmsLength; i++) { + var currentElement = allIntroSteps[i]; + + if (currentElement.getAttribute('data-step') == null) { + + while (true) { + if (typeof introItems[nextStep] == 'undefined') { + break; + } else { + nextStep++; + } + } + + introItems[nextStep] = { + element: currentElement, + intro: currentElement.getAttribute('data-intro'), + step: nextStep + 1, + tooltipClass: currentElement.getAttribute('data-tooltipClass'), + highlightClass: currentElement.getAttribute('data-highlightClass'), + position: currentElement.getAttribute('data-position') || this._options.tooltipPosition + }; + } + } + } + + //removing undefined/null elements + var tempIntroItems = []; + for (var z = 0; z < introItems.length; z++) { + introItems[z] && tempIntroItems.push(introItems[z]); // copy non-empty values to the end of the array + } + + introItems = tempIntroItems; + + //Ok, sort all items with given steps + introItems.sort(function (a, b) { + return a.step - b.step; + }); + + //set it to the introJs object + self._introItems = introItems; + + //add overlay layer to the page + if(_addOverlayLayer.call(self, targetElm)) { + //then, start the show + _nextStep.call(self); + + var skipButton = targetElm.querySelector('.introjs-skipbutton'), + nextStepButton = targetElm.querySelector('.introjs-nextbutton'); + + self._onKeyDown = function(e) { + if (e.keyCode === 27 && self._options.exitOnEsc == true) { + //escape key pressed, exit the intro + //check if exit callback is defined + if (self._introExitCallback != undefined) { + self._introExitCallback.call(self); + } + _exitIntro.call(self, targetElm); + } else if(e.keyCode === 37) { + //left arrow + _previousStep.call(self); + } else if (e.keyCode === 39) { + //right arrow + _nextStep.call(self); + } else if (e.keyCode === 13) { + //srcElement === ie + var target = e.target || e.srcElement; + if (target && target.className.indexOf('introjs-prevbutton') > 0) { + //user hit enter while focusing on previous button + _previousStep.call(self); + } else if (target && target.className.indexOf('introjs-skipbutton') > 0) { + //user hit enter while focusing on skip button + if (self._introItems.length - 1 == self._currentStep && typeof (self._introCompleteCallback) === 'function') { + self._introCompleteCallback.call(self); + } + //check if any callback is defined + if (self._introExitCallback != undefined) { + self._introExitCallback.call(self); + } + _exitIntro.call(self, targetElm); + } else { + //default behavior for responding to enter + _nextStep.call(self); + } + + //prevent default behaviour on hitting Enter, to prevent steps being skipped in some browsers + if(e.preventDefault) { + e.preventDefault(); + } else { + e.returnValue = false; + } + } + }; + + self._onResize = function(e) { + _setHelperLayerPosition.call(self, document.querySelector('.introjs-helperLayer')); + _setHelperLayerPosition.call(self, document.querySelector('.introjs-tooltipReferenceLayer')); + }; + + if (window.addEventListener) { + if (this._options.keyboardNavigation) { + window.addEventListener('keydown', self._onKeyDown, true); + } + //for window resize + window.addEventListener('resize', self._onResize, true); + } else if (document.attachEvent) { //IE + if (this._options.keyboardNavigation) { + document.attachEvent('onkeydown', self._onKeyDown); + } + //for window resize + document.attachEvent('onresize', self._onResize); + } + } + return false; + } + + /* + * makes a copy of the object + * @api private + * @method _cloneObject + */ + function _cloneObject(object) { + if (object == null || typeof (object) != 'object' || typeof (object.nodeType) != 'undefined') { + return object; + } + var temp = {}; + for (var key in object) { + if (typeof (jQuery) != 'undefined' && object[key] instanceof jQuery) { + temp[key] = object[key]; + } else { + temp[key] = _cloneObject(object[key]); + } + } + return temp; + } + /** + * Go to specific step of introduction + * + * @api private + * @method _goToStep + */ + function _goToStep(step) { + //because steps starts with zero + this._currentStep = step - 2; + if (typeof (this._introItems) !== 'undefined') { + _nextStep.call(this); + } + } + + /** + * Go to next step on intro + * + * @api private + * @method _nextStep + */ + function _nextStep() { + this._direction = 'forward'; + + if (typeof (this._currentStep) === 'undefined') { + this._currentStep = 0; + } else { + ++this._currentStep; + } + + if ((this._introItems.length) <= this._currentStep) { + //end of the intro + //check if any callback is defined + if (typeof (this._introCompleteCallback) === 'function') { + this._introCompleteCallback.call(this); + } + _exitIntro.call(this, this._targetElement); + return; + } + + var nextStep = this._introItems[this._currentStep]; + if (typeof (this._introBeforeChangeCallback) !== 'undefined') { + this._introBeforeChangeCallback.call(this, nextStep.element); + } + + _showElement.call(this, nextStep); + } + + /** + * Go to previous step on intro + * + * @api private + * @method _nextStep + */ + function _previousStep() { + this._direction = 'backward'; + + if (this._currentStep === 0) { + return false; + } + + var nextStep = this._introItems[--this._currentStep]; + if (typeof (this._introBeforeChangeCallback) !== 'undefined') { + this._introBeforeChangeCallback.call(this, nextStep.element); + } + + _showElement.call(this, nextStep); + } + + /** + * Exit from intro + * + * @api private + * @method _exitIntro + * @param {Object} targetElement + */ + function _exitIntro(targetElement) { + //remove overlay layer from the page + var overlayLayer = targetElement.querySelector('.introjs-overlay'); + + //return if intro already completed or skipped + if (overlayLayer == null) { + return; + } + + //for fade-out animation + overlayLayer.style.opacity = 0; + setTimeout(function () { + if (overlayLayer.parentNode) { + overlayLayer.parentNode.removeChild(overlayLayer); + } + }, 500); + + //remove all helper layers + var helperLayer = targetElement.querySelector('.introjs-helperLayer'); + if (helperLayer) { + helperLayer.parentNode.removeChild(helperLayer); + } + + var referenceLayer = targetElement.querySelector('.introjs-tooltipReferenceLayer'); + if (referenceLayer) { + referenceLayer.parentNode.removeChild(referenceLayer); + } + //remove disableInteractionLayer + var disableInteractionLayer = targetElement.querySelector('.introjs-disableInteraction'); + if (disableInteractionLayer) { + disableInteractionLayer.parentNode.removeChild(disableInteractionLayer); + } + + //remove intro floating element + var floatingElement = document.querySelector('.introjsFloatingElement'); + if (floatingElement) { + floatingElement.parentNode.removeChild(floatingElement); + } + + //remove `introjs-showElement` class from the element + var showElement = document.querySelector('.introjs-showElement'); + if (showElement) { + showElement.className = showElement.className.replace(/introjs-[a-zA-Z]+/g, '').replace(/^\s+|\s+$/g, ''); // This is a manual trim. + } + + //remove `introjs-fixParent` class from the elements + var fixParents = document.querySelectorAll('.introjs-fixParent'); + if (fixParents && fixParents.length > 0) { + for (var i = fixParents.length - 1; i >= 0; i--) { + fixParents[i].className = fixParents[i].className.replace(/introjs-fixParent/g, '').replace(/^\s+|\s+$/g, ''); + } + } + + //clean listeners + if (window.removeEventListener) { + window.removeEventListener('keydown', this._onKeyDown, true); + } else if (document.detachEvent) { //IE + document.detachEvent('onkeydown', this._onKeyDown); + } + + //set the step to zero + this._currentStep = undefined; + } + + /** + * Render tooltip box in the page + * + * @api private + * @method _placeTooltip + * @param {HTMLElement} targetElement + * @param {HTMLElement} tooltipLayer + * @param {HTMLElement} arrowLayer + * @param {HTMLElement} helperNumberLayer + * @param {Boolean} hintMode + */ + function _placeTooltip(targetElement, tooltipLayer, arrowLayer, helperNumberLayer, hintMode) { + var tooltipCssClass = '', + currentStepObj, + tooltipOffset, + targetOffset, + windowSize, + currentTooltipPosition; + + hintMode = hintMode || false; + + //reset the old style + tooltipLayer.style.top = null; + tooltipLayer.style.right = null; + tooltipLayer.style.bottom = null; + tooltipLayer.style.left = null; + tooltipLayer.style.marginLeft = null; + tooltipLayer.style.marginTop = null; + + arrowLayer.style.display = 'inherit'; + + if (typeof(helperNumberLayer) != 'undefined' && helperNumberLayer != null) { + helperNumberLayer.style.top = null; + helperNumberLayer.style.left = null; + } + + //prevent error when `this._currentStep` is undefined + if (!this._introItems[this._currentStep]) return; + + //if we have a custom css class for each step + currentStepObj = this._introItems[this._currentStep]; + if (typeof (currentStepObj.tooltipClass) === 'string') { + tooltipCssClass = currentStepObj.tooltipClass; + } else { + tooltipCssClass = this._options.tooltipClass; + } + + tooltipLayer.className = ('introjs-tooltip ' + tooltipCssClass).replace(/^\s+|\s+$/g, ''); + + currentTooltipPosition = this._introItems[this._currentStep].position; + if ((currentTooltipPosition == "auto" || this._options.tooltipPosition == "auto")) { + if (currentTooltipPosition != "floating") { // Floating is always valid, no point in calculating + currentTooltipPosition = _determineAutoPosition.call(this, targetElement, tooltipLayer, currentTooltipPosition); + } + } + targetOffset = _getOffset(targetElement); + tooltipOffset = _getOffset(tooltipLayer); + windowSize = _getWinSize(); + + switch (currentTooltipPosition) { + case 'top': + arrowLayer.className = 'introjs-arrow bottom'; + + if (hintMode) { + var tooltipLayerStyleLeft = 0; + } else { + var tooltipLayerStyleLeft = 15; + } + + _checkRight(targetOffset, tooltipLayerStyleLeft, tooltipOffset, windowSize, tooltipLayer); + tooltipLayer.style.bottom = (targetOffset.height + 20) + 'px'; + break; + case 'right': + tooltipLayer.style.left = (targetOffset.width + 20) + 'px'; + if (targetOffset.top + tooltipOffset.height > windowSize.height) { + // In this case, right would have fallen below the bottom of the screen. + // Modify so that the bottom of the tooltip connects with the target + arrowLayer.className = "introjs-arrow left-bottom"; + tooltipLayer.style.top = "-" + (tooltipOffset.height - targetOffset.height - 20) + "px"; + } else { + arrowLayer.className = 'introjs-arrow left'; + } + break; + case 'left': + if (!hintMode && this._options.showStepNumbers == true) { + tooltipLayer.style.top = '15px'; + } + + if (targetOffset.top + tooltipOffset.height > windowSize.height) { + // In this case, left would have fallen below the bottom of the screen. + // Modify so that the bottom of the tooltip connects with the target + tooltipLayer.style.top = "-" + (tooltipOffset.height - targetOffset.height - 20) + "px"; + arrowLayer.className = 'introjs-arrow right-bottom'; + } else { + arrowLayer.className = 'introjs-arrow right'; + } + tooltipLayer.style.right = (targetOffset.width + 20) + 'px'; + + break; + case 'floating': + arrowLayer.style.display = 'none'; + + //we have to adjust the top and left of layer manually for intro items without element + tooltipLayer.style.left = '50%'; + tooltipLayer.style.top = '50%'; + tooltipLayer.style.marginLeft = '-' + (tooltipOffset.width / 2) + 'px'; + tooltipLayer.style.marginTop = '-' + (tooltipOffset.height / 2) + 'px'; + + if (typeof(helperNumberLayer) != 'undefined' && helperNumberLayer != null) { + helperNumberLayer.style.left = '-' + ((tooltipOffset.width / 2) + 18) + 'px'; + helperNumberLayer.style.top = '-' + ((tooltipOffset.height / 2) + 18) + 'px'; + } + + break; + case 'bottom-right-aligned': + arrowLayer.className = 'introjs-arrow top-right'; + + var tooltipLayerStyleRight = 0; + _checkLeft(targetOffset, tooltipLayerStyleRight, tooltipOffset, tooltipLayer); + tooltipLayer.style.top = (targetOffset.height + 20) + 'px'; + break; + + case 'bottom-middle-aligned': + arrowLayer.className = 'introjs-arrow top-middle'; + + var tooltipLayerStyleLeftRight = targetOffset.width / 2 - tooltipOffset.width / 2; + + // a fix for middle aligned hints + if (hintMode) { + tooltipLayerStyleLeftRight += 5; + } + + if (_checkLeft(targetOffset, tooltipLayerStyleLeftRight, tooltipOffset, tooltipLayer)) { + tooltipLayer.style.right = null; + _checkRight(targetOffset, tooltipLayerStyleLeftRight, tooltipOffset, windowSize, tooltipLayer); + } + tooltipLayer.style.top = (targetOffset.height + 20) + 'px'; + break; + + case 'bottom-left-aligned': + // Bottom-left-aligned is the same as the default bottom + case 'bottom': + // Bottom going to follow the default behavior + default: + arrowLayer.className = 'introjs-arrow top'; + + var tooltipLayerStyleLeft = 0; + _checkRight(targetOffset, tooltipLayerStyleLeft, tooltipOffset, windowSize, tooltipLayer); + tooltipLayer.style.top = (targetOffset.height + 20) + 'px'; + break; + } + } + + /** + * Set tooltip left so it doesn't go off the right side of the window + * + * @return boolean true, if tooltipLayerStyleLeft is ok. false, otherwise. + */ + function _checkRight(targetOffset, tooltipLayerStyleLeft, tooltipOffset, windowSize, tooltipLayer) { + if (targetOffset.left + tooltipLayerStyleLeft + tooltipOffset.width > windowSize.width) { + // off the right side of the window + tooltipLayer.style.left = (windowSize.width - tooltipOffset.width - targetOffset.left) + 'px'; + return false; + } + tooltipLayer.style.left = tooltipLayerStyleLeft + 'px'; + return true; + } + + /** + * Set tooltip right so it doesn't go off the left side of the window + * + * @return boolean true, if tooltipLayerStyleRight is ok. false, otherwise. + */ + function _checkLeft(targetOffset, tooltipLayerStyleRight, tooltipOffset, tooltipLayer) { + if (targetOffset.left + targetOffset.width - tooltipLayerStyleRight - tooltipOffset.width < 0) { + // off the left side of the window + tooltipLayer.style.left = (-targetOffset.left) + 'px'; + return false; + } + tooltipLayer.style.right = tooltipLayerStyleRight + 'px'; + return true; + } + + /** + * Determines the position of the tooltip based on the position precedence and availability + * of screen space. + * + * @param {Object} targetElement + * @param {Object} tooltipLayer + * @param {Object} desiredTooltipPosition + * + */ + function _determineAutoPosition(targetElement, tooltipLayer, desiredTooltipPosition) { + + // Take a clone of position precedence. These will be the available + var possiblePositions = this._options.positionPrecedence.slice(); + + var windowSize = _getWinSize(); + var tooltipHeight = _getOffset(tooltipLayer).height + 10; + var tooltipWidth = _getOffset(tooltipLayer).width + 20; + var targetOffset = _getOffset(targetElement); + + // If we check all the possible areas, and there are no valid places for the tooltip, the element + // must take up most of the screen real estate. Show the tooltip floating in the middle of the screen. + var calculatedPosition = "floating"; + + // Check if the width of the tooltip + the starting point would spill off the right side of the screen + // If no, neither bottom or top are valid + if (targetOffset.left + tooltipWidth > windowSize.width || ((targetOffset.left + (targetOffset.width / 2)) - tooltipWidth) < 0) { + _removeEntry(possiblePositions, "bottom"); + _removeEntry(possiblePositions, "top"); + } else { + // Check for space below + if ((targetOffset.height + targetOffset.top + tooltipHeight) > windowSize.height) { + _removeEntry(possiblePositions, "bottom"); + } + + // Check for space above + if (targetOffset.top - tooltipHeight < 0) { + _removeEntry(possiblePositions, "top"); + } + } + + // Check for space to the right + if (targetOffset.width + targetOffset.left + tooltipWidth > windowSize.width) { + _removeEntry(possiblePositions, "right"); + } + + // Check for space to the left + if (targetOffset.left - tooltipWidth < 0) { + _removeEntry(possiblePositions, "left"); + } + + // At this point, our array only has positions that are valid. Pick the first one, as it remains in order + if (possiblePositions.length > 0) { + calculatedPosition = possiblePositions[0]; + } + + // If the requested position is in the list, replace our calculated choice with that + if (desiredTooltipPosition && desiredTooltipPosition != "auto") { + if (possiblePositions.indexOf(desiredTooltipPosition) > -1) { + calculatedPosition = desiredTooltipPosition; + } + } + + return calculatedPosition; + } + + /** + * Remove an entry from a string array if it's there, does nothing if it isn't there. + * + * @param {Array} stringArray + * @param {String} stringToRemove + */ + function _removeEntry(stringArray, stringToRemove) { + if (stringArray.indexOf(stringToRemove) > -1) { + stringArray.splice(stringArray.indexOf(stringToRemove), 1); + } + } + + /** + * Update the position of the helper layer on the screen + * + * @api private + * @method _setHelperLayerPosition + * @param {Object} helperLayer + */ + function _setHelperLayerPosition(helperLayer) { + if (helperLayer) { + //prevent error when `this._currentStep` in undefined + if (!this._introItems[this._currentStep]) return; + + var currentElement = this._introItems[this._currentStep], + elementPosition = _getOffset(currentElement.element), + widthHeightPadding = 10; + + // if the target element is fixed, the tooltip should be fixed as well. + if (_isFixed(currentElement.element)) { + helperLayer.className += ' introjs-fixedTooltip'; + } + + if (currentElement.position == 'floating') { + widthHeightPadding = 0; + } + + //set new position to helper layer + helperLayer.setAttribute('style', 'width: ' + (elementPosition.width + widthHeightPadding) + 'px; ' + + 'height:' + (elementPosition.height + widthHeightPadding) + 'px; ' + + 'top:' + (elementPosition.top - 5) + 'px;' + + 'left: ' + (elementPosition.left - 5) + 'px;'); + + } + } + + /** + * Add disableinteraction layer and adjust the size and position of the layer + * + * @api private + * @method _disableInteraction + */ + function _disableInteraction() { + var disableInteractionLayer = document.querySelector('.introjs-disableInteraction'); + if (disableInteractionLayer === null) { + disableInteractionLayer = document.createElement('div'); + disableInteractionLayer.className = 'introjs-disableInteraction'; + this._targetElement.appendChild(disableInteractionLayer); + } + + _setHelperLayerPosition.call(this, disableInteractionLayer); + } + + /** + * Show an element on the page + * + * @api private + * @method _showElement + * @param {Object} targetElement + */ + function _showElement(targetElement) { + + if (typeof (this._introChangeCallback) !== 'undefined') { + this._introChangeCallback.call(this, targetElement.element); + } + + var self = this, + oldHelperLayer = document.querySelector('.introjs-helperLayer'), + oldReferenceLayer = document.querySelector('.introjs-tooltipReferenceLayer'), + highlightClass = 'introjs-helperLayer', + elementPosition = _getOffset(targetElement.element); + + //check for a current step highlight class + if (typeof (targetElement.highlightClass) === 'string') { + highlightClass += (' ' + targetElement.highlightClass); + } + //check for options highlight class + if (typeof (this._options.highlightClass) === 'string') { + highlightClass += (' ' + this._options.highlightClass); + } + + if (oldHelperLayer != null) { + var oldHelperNumberLayer = oldReferenceLayer.querySelector('.introjs-helperNumberLayer'), + oldtooltipLayer = oldReferenceLayer.querySelector('.introjs-tooltiptext'), + oldArrowLayer = oldReferenceLayer.querySelector('.introjs-arrow'), + oldtooltipContainer = oldReferenceLayer.querySelector('.introjs-tooltip'), + skipTooltipButton = oldReferenceLayer.querySelector('.introjs-skipbutton'), + prevTooltipButton = oldReferenceLayer.querySelector('.introjs-prevbutton'), + nextTooltipButton = oldReferenceLayer.querySelector('.introjs-nextbutton'); + + //update or reset the helper highlight class + oldHelperLayer.className = highlightClass; + //hide the tooltip + oldtooltipContainer.style.opacity = 0; + oldtooltipContainer.style.display = "none"; + + if (oldHelperNumberLayer != null) { + var lastIntroItem = this._introItems[(targetElement.step - 2 >= 0 ? targetElement.step - 2 : 0)]; + + if (lastIntroItem != null && (this._direction == 'forward' && lastIntroItem.position == 'floating') || (this._direction == 'backward' && targetElement.position == 'floating')) { + oldHelperNumberLayer.style.opacity = 0; + } + } + + //set new position to helper layer + _setHelperLayerPosition.call(self, oldHelperLayer); + _setHelperLayerPosition.call(self, oldReferenceLayer); + + //remove `introjs-fixParent` class from the elements + var fixParents = document.querySelectorAll('.introjs-fixParent'); + if (fixParents && fixParents.length > 0) { + for (var i = fixParents.length - 1; i >= 0; i--) { + fixParents[i].className = fixParents[i].className.replace(/introjs-fixParent/g, '').replace(/^\s+|\s+$/g, ''); + }; + } + + //remove old classes + var oldShowElement = document.querySelector('.introjs-showElement'); + oldShowElement.className = oldShowElement.className.replace(/introjs-[a-zA-Z]+/g, '').replace(/^\s+|\s+$/g, ''); + + //we should wait until the CSS3 transition is competed (it's 0.3 sec) to prevent incorrect `height` and `width` calculation + if (self._lastShowElementTimer) { + clearTimeout(self._lastShowElementTimer); + } + self._lastShowElementTimer = setTimeout(function() { + //set current step to the label + if (oldHelperNumberLayer != null) { + oldHelperNumberLayer.innerHTML = targetElement.step; + } + //set current tooltip text + oldtooltipLayer.innerHTML = targetElement.intro; + //set the tooltip position + oldtooltipContainer.style.display = "block"; + _placeTooltip.call(self, targetElement.element, oldtooltipContainer, oldArrowLayer, oldHelperNumberLayer); + + //change active bullet + oldReferenceLayer.querySelector('.introjs-bullets li > a.active').className = ''; + oldReferenceLayer.querySelector('.introjs-bullets li > a[data-stepnumber="' + targetElement.step + '"]').className = 'active'; + + oldReferenceLayer.querySelector('.introjs-progress .introjs-progressbar').setAttribute('style', 'width:' + _getProgress.call(self) + '%;'); + + //show the tooltip + oldtooltipContainer.style.opacity = 1; + if (oldHelperNumberLayer) oldHelperNumberLayer.style.opacity = 1; + + //reset button focus + // No, we really want the focus to be on the text so a screen reader picks it up right away. (Colin Fredericks) + if (nextTooltipButton.tabIndex === -1) { + //tabindex of -1 means we are at the end of the tour - focus on skip / done + // skipTooltipButton.focus(); + $('.introjs-tooltiptext').focus(); + } else { + //still in the tour, focus on next + nextTooltipButton.focus(); + $('.introjs-tooltiptext').focus(); + } + }, 350); + + } else { + var helperLayer = document.createElement('div'), + referenceLayer = document.createElement('div'), + arrowLayer = document.createElement('div'), + tooltipLayer = document.createElement('div'), + tooltipTextLayer = document.createElement('div'), + bulletsLayer = document.createElement('div'), + progressLayer = document.createElement('div'), + buttonsLayer = document.createElement('div'); + + helperLayer.className = highlightClass; + referenceLayer.className = 'introjs-tooltipReferenceLayer'; + + //set new position to helper layer + _setHelperLayerPosition.call(self, helperLayer); + _setHelperLayerPosition.call(self, referenceLayer); + + //add helper layer to target element + this._targetElement.appendChild(helperLayer); + this._targetElement.appendChild(referenceLayer); + + arrowLayer.className = 'introjs-arrow'; + + tooltipTextLayer.className = 'introjs-tooltiptext'; + tooltipTextLayer.setAttribute('aria-live','assertive'); // Added by Colin Fredericks + tooltipTextLayer.setAttribute('role','dialog'); // Added by Colin Fredericks + tooltipTextLayer.setAttribute('tabindex','-1'); // Added by Colin Fredericks + tooltipTextLayer.innerHTML = targetElement.intro; + + bulletsLayer.className = 'introjs-bullets'; + + if (this._options.showBullets === false) { + bulletsLayer.style.display = 'none'; + } + + var ulContainer = document.createElement('ul'); + + for (var i = 0, stepsLength = this._introItems.length; i < stepsLength; i++) { + var innerLi = document.createElement('li'); + var anchorLink = document.createElement('a'); + + anchorLink.onclick = function() { + self.goToStep(this.getAttribute('data-stepnumber')); + }; + + if (i === (targetElement.step-1)) anchorLink.className = 'active'; + + anchorLink.href = 'javascript:void(0);'; + anchorLink.innerHTML = " "; + anchorLink.setAttribute('data-stepnumber', this._introItems[i].step); + + innerLi.appendChild(anchorLink); + ulContainer.appendChild(innerLi); + } + + bulletsLayer.appendChild(ulContainer); + + progressLayer.className = 'introjs-progress'; + + if (this._options.showProgress === false) { + progressLayer.style.display = 'none'; + } + var progressBar = document.createElement('div'); + progressBar.className = 'introjs-progressbar'; + progressBar.setAttribute('style', 'width:' + _getProgress.call(this) + '%;'); + + progressLayer.appendChild(progressBar); + + buttonsLayer.className = 'introjs-tooltipbuttons'; + if (this._options.showButtons === false) { + buttonsLayer.style.display = 'none'; + } + + tooltipLayer.className = 'introjs-tooltip'; + tooltipLayer.appendChild(tooltipTextLayer); + tooltipLayer.appendChild(bulletsLayer); + tooltipLayer.appendChild(progressLayer); + + //add helper layer number + if (this._options.showStepNumbers == true) { + var helperNumberLayer = document.createElement('span'); + helperNumberLayer.className = 'introjs-helperNumberLayer'; + helperNumberLayer.innerHTML = targetElement.step; + referenceLayer.appendChild(helperNumberLayer); + } + + tooltipLayer.appendChild(arrowLayer); + referenceLayer.appendChild(tooltipLayer); + + //next button + var nextTooltipButton = document.createElement('a'); + + nextTooltipButton.onclick = function() { + if (self._introItems.length - 1 != self._currentStep) { + _nextStep.call(self); + } + }; + + nextTooltipButton.href = 'javascript:void(0);'; + nextTooltipButton.innerHTML = this._options.nextLabel; + + //previous button + var prevTooltipButton = document.createElement('a'); + + prevTooltipButton.onclick = function() { + if (self._currentStep != 0) { + _previousStep.call(self); + } + }; + + prevTooltipButton.href = 'javascript:void(0);'; + prevTooltipButton.innerHTML = this._options.prevLabel; + + //skip button + var skipTooltipButton = document.createElement('a'); + skipTooltipButton.className = 'introjs-button introjs-skipbutton'; + skipTooltipButton.href = 'javascript:void(0);'; + skipTooltipButton.innerHTML = this._options.skipLabel; + + skipTooltipButton.onclick = function() { + if (self._introItems.length - 1 == self._currentStep && typeof (self._introCompleteCallback) === 'function') { + self._introCompleteCallback.call(self); + } + + if (self._introItems.length - 1 != self._currentStep && typeof (self._introExitCallback) === 'function') { + self._introExitCallback.call(self); + } + + _exitIntro.call(self, self._targetElement); + }; + + buttonsLayer.appendChild(skipTooltipButton); + + //in order to prevent displaying next/previous button always + if (this._introItems.length > 1) { + buttonsLayer.appendChild(prevTooltipButton); + buttonsLayer.appendChild(nextTooltipButton); + } + + tooltipLayer.appendChild(buttonsLayer); + + //set proper position + _placeTooltip.call(self, targetElement.element, tooltipLayer, arrowLayer, helperNumberLayer); + } + + //disable interaction + if (this._options.disableInteraction === true) { + _disableInteraction.call(self); + } + + prevTooltipButton.removeAttribute('tabIndex'); + nextTooltipButton.removeAttribute('tabIndex'); + + if (this._currentStep == 0 && this._introItems.length > 1) { + prevTooltipButton.className = 'introjs-button introjs-prevbutton introjs-disabled'; + prevTooltipButton.tabIndex = '-1'; + nextTooltipButton.className = 'introjs-button introjs-nextbutton'; + skipTooltipButton.innerHTML = this._options.skipLabel; + } else if (this._introItems.length - 1 == this._currentStep || this._introItems.length == 1) { + skipTooltipButton.innerHTML = this._options.doneLabel; + prevTooltipButton.className = 'introjs-button introjs-prevbutton'; + nextTooltipButton.className = 'introjs-button introjs-nextbutton introjs-disabled'; + nextTooltipButton.tabIndex = '-1'; + } else { + prevTooltipButton.className = 'introjs-button introjs-prevbutton'; + nextTooltipButton.className = 'introjs-button introjs-nextbutton'; + skipTooltipButton.innerHTML = this._options.skipLabel; + } + + //Set focus on "next" button, so that hitting Enter always moves you onto the next step + //nextTooltipButton.focus(); + + //No, set focus on the text so that someone with a screen reader can hear it. (Colin Fredericks) + $('.introjs-tooltiptext').focus(); + + //add target element position style + targetElement.element.className += ' introjs-showElement'; + + var currentElementPosition = _getPropValue(targetElement.element, 'position'); + if (currentElementPosition !== 'absolute' && + currentElementPosition !== 'relative') { + //change to new intro item + targetElement.element.className += ' introjs-relativePosition'; + } + + var parentElm = targetElement.element.parentNode; + while (parentElm != null) { + if (parentElm.tagName.toLowerCase() === 'body') break; + + //fix The Stacking Contenxt problem. + //More detail: https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Understanding_z_index/The_stacking_context + var zIndex = _getPropValue(parentElm, 'z-index'); + var opacity = parseFloat(_getPropValue(parentElm, 'opacity')); + var transform = _getPropValue(parentElm, 'transform') || _getPropValue(parentElm, '-webkit-transform') || _getPropValue(parentElm, '-moz-transform') || _getPropValue(parentElm, '-ms-transform') || _getPropValue(parentElm, '-o-transform'); + if (/[0-9]+/.test(zIndex) || opacity < 1 || (transform !== 'none' && transform !== undefined)) { + parentElm.className += ' introjs-fixParent'; + } + + parentElm = parentElm.parentNode; + } + + if (!_elementInViewport(targetElement.element) && this._options.scrollToElement === true) { + var rect = targetElement.element.getBoundingClientRect(), + winHeight = _getWinSize().height, + top = rect.bottom - (rect.bottom - rect.top), + bottom = rect.bottom - winHeight; + + //Scroll up + if (top < 0 || targetElement.element.clientHeight > winHeight) { + window.scrollBy(0, top - 30); // 30px padding from edge to look nice + + //Scroll down + } else { + window.scrollBy(0, bottom + 100); // 70px + 30px padding from edge to look nice + } + } + + if (typeof (this._introAfterChangeCallback) !== 'undefined') { + this._introAfterChangeCallback.call(this, targetElement.element); + } + } + + /** + * Get an element CSS property on the page + * Thanks to JavaScript Kit: http://www.javascriptkit.com/dhtmltutors/dhtmlcascade4.shtml + * + * @api private + * @method _getPropValue + * @param {Object} element + * @param {String} propName + * @returns Element's property value + */ + function _getPropValue (element, propName) { + var propValue = ''; + if (element.currentStyle) { //IE + propValue = element.currentStyle[propName]; + } else if (document.defaultView && document.defaultView.getComputedStyle) { //Others + propValue = document.defaultView.getComputedStyle(element, null).getPropertyValue(propName); + } + + //Prevent exception in IE + if (propValue && propValue.toLowerCase) { + return propValue.toLowerCase(); + } else { + return propValue; + } + }; + + /** + * Checks to see if target element (or parents) position is fixed or not + * + * @api private + * @method _isFixed + * @param {Object} element + * @returns Boolean + */ + function _isFixed (element) { + var p = element.parentNode; + + if (p.nodeName === 'HTML') { + return false; + } + + if (_getPropValue(element, 'position') == 'fixed') { + return true; + } + + return _isFixed(p); + }; + + /** + * Provides a cross-browser way to get the screen dimensions + * via: http://stackoverflow.com/questions/5864467/internet-explorer-innerheight + * + * @api private + * @method _getWinSize + * @returns {Object} width and height attributes + */ + function _getWinSize() { + if (window.innerWidth != undefined) { + return { width: window.innerWidth, height: window.innerHeight }; + } else { + var D = document.documentElement; + return { width: D.clientWidth, height: D.clientHeight }; + } + } + + /** + * Add overlay layer to the page + * http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport + * + * @api private + * @method _elementInViewport + * @param {Object} el + */ + function _elementInViewport(el) { + var rect = el.getBoundingClientRect(); + + return ( + rect.top >= 0 && + rect.left >= 0 && + (rect.bottom+80) <= window.innerHeight && // add 80 to get the text right + rect.right <= window.innerWidth + ); + } + + /** + * Add overlay layer to the page + * + * @api private + * @method _addOverlayLayer + * @param {Object} targetElm + */ + function _addOverlayLayer(targetElm) { + var overlayLayer = document.createElement('div'), + styleText = '', + self = this; + + //set css class name + overlayLayer.className = 'introjs-overlay'; + + //check if the target element is body, we should calculate the size of overlay layer in a better way + if (targetElm.tagName.toLowerCase() === 'body') { + styleText += 'top: 0;bottom: 0; left: 0;right: 0;position: fixed;'; + overlayLayer.setAttribute('style', styleText); + } else { + //set overlay layer position + var elementPosition = _getOffset(targetElm); + if (elementPosition) { + styleText += 'width: ' + elementPosition.width + 'px; height:' + elementPosition.height + 'px; top:' + elementPosition.top + 'px;left: ' + elementPosition.left + 'px;'; + overlayLayer.setAttribute('style', styleText); + } + } + + targetElm.appendChild(overlayLayer); + + overlayLayer.onclick = function() { + if (self._options.exitOnOverlayClick == true) { + + //check if any callback is defined + if (self._introExitCallback != undefined) { + self._introExitCallback.call(self); + } + _exitIntro.call(self, targetElm); + } + }; + + setTimeout(function() { + styleText += 'opacity: ' + self._options.overlayOpacity.toString() + ';'; + overlayLayer.setAttribute('style', styleText); + }, 10); + + return true; + }; + + /** + * Removes open hint (tooltip hint) + * + * @api private + * @method _removeHintTooltip + */ + function _removeHintTooltip() { + var tooltip = this._targetElement.querySelector('.introjs-hintReference'); + + + if (tooltip) { + var step = tooltip.getAttribute('data-step'); + tooltip.parentNode.removeChild(tooltip); + return step; + } + }; + + /** + * Start parsing hint items + * + * @api private + * @param {Object} targetElm + * @method _startHint + */ + function _populateHints(targetElm) { + var self = this; + this._introItems = [] + + if (this._options.hints) { + for (var i = 0, l = this._options.hints.length; i < l; i++) { + var currentItem = _cloneObject(this._options.hints[i]); + + if (typeof(currentItem.element) === 'string') { + //grab the element with given selector from the page + currentItem.element = document.querySelector(currentItem.element); + } + + currentItem.hintPosition = currentItem.hintPosition || 'top-middle'; + + if (currentItem.element != null) { + this._introItems.push(currentItem); + } + } + } else { + var hints = targetElm.querySelectorAll('*[data-hint]'); + + if (hints.length < 1) { + return false; + } + + //first add intro items with data-step + for (var i = 0, l = hints.length; i < l; i++) { + var currentElement = hints[i]; + + this._introItems.push({ + element: currentElement, + hint: currentElement.getAttribute('data-hint'), + hintPosition: currentElement.getAttribute('data-hintPosition') || this._options.hintPosition, + tooltipClass: currentElement.getAttribute('data-tooltipClass'), + position: currentElement.getAttribute('data-position') || this._options.tooltipPosition + }); + } + } + + _addHints.call(this); + + if (document.addEventListener) { + document.addEventListener('click', _removeHintTooltip.bind(this), false); + //for window resize + window.addEventListener('resize', _reAlignHints.bind(this), true); + } else if (document.attachEvent) { //IE + //for window resize + document.attachEvent('onclick', _removeHintTooltip.bind(this)); + document.attachEvent('onresize', _reAlignHints.bind(this)); + } + }; + + /** + * Re-aligns all hint elements + * + * @api private + * @method _reAlignHints + */ + function _reAlignHints() { + for (var i = 0, l = this._introItems.length; i < l; i++) { + var item = this._introItems[i]; + _alignHintPosition.call(this, item.hintPosition, item.element, item.targetElement) + } + } + + /** + * Hide a hint + * + * @api private + * @method _hideHint + */ + function _hideHint(stepId) { + _removeHintTooltip.call(this); + var hint = this._targetElement.querySelector('.introjs-hint[data-step="' + stepId + '"]'); + + if (hint) { + hint.className += ' introjs-hidehint'; + } + + // call the callback function (if any) + if (typeof (this._hintCloseCallback) !== 'undefined') { + this._hintCloseCallback.call(this, stepId); + } + }; + + /** + * Add all available hints to the page + * + * @api private + * @method _addHints + */ + function _addHints() { + var self = this; + + var oldHintsWrapper = document.querySelector('.introjs-hints'); + + if (oldHintsWrapper != null) { + hintsWrapper = oldHintsWrapper; + } else { + var hintsWrapper = document.createElement('div'); + hintsWrapper.className = 'introjs-hints'; + } + + for (var i = 0, l = this._introItems.length; i < l; i++) { + var item = this._introItems[i]; + + // avoid append a hint twice + if (document.querySelector('.introjs-hint[data-step="' + i + '"]')) + continue; + + var hint = document.createElement('a'); + hint.href = "javascript:void(0);"; + + (function (hint, item, i) { + // when user clicks on the hint element + hint.onclick = function(e) { + var evt = e ? e : window.event; + if (evt.stopPropagation) evt.stopPropagation(); + if (evt.cancelBubble != null) evt.cancelBubble = true; + + _hintClick.call(self, hint, item, i); + }; + }(hint, item, i)); + + hint.className = 'introjs-hint'; + + // hint's position should be fixed if the target element's position is fixed + if (_isFixed(item.element)) { + hint.className += ' introjs-fixedhint'; + } + + var hintDot = document.createElement('div'); + hintDot.className = 'introjs-hint-dot'; + var hintPulse = document.createElement('div'); + hintPulse.className = 'introjs-hint-pulse'; + + hint.appendChild(hintDot); + hint.appendChild(hintPulse); + hint.setAttribute('data-step', i); + + // we swap the hint element with target element + // because _setHelperLayerPosition uses `element` property + item.targetElement = item.element; + item.element = hint; + + // align the hint position + _alignHintPosition.call(this, item.hintPosition, hint, item.targetElement); + + hintsWrapper.appendChild(hint); + } + + // adding the hints wrapper + document.body.appendChild(hintsWrapper); + + // call the callback function (if any) + if (typeof (this._hintsAddedCallback) !== 'undefined') { + this._hintsAddedCallback.call(this); + } + }; + + /** + * Aligns hint position + * + * @api private + * @method _alignHintPosition + * @param {String} position + * @param {Object} hint + * @param {Object} element + */ + function _alignHintPosition(position, hint, element) { + // get/calculate offset of target element + var offset = _getOffset.call(this, element); + + // align the hint element + switch (position) { + default: + case 'top-left': + hint.style.left = offset.left + 'px'; + hint.style.top = offset.top + 'px'; + break; + case 'top-right': + hint.style.left = (offset.left + offset.width) + 'px'; + hint.style.top = offset.top + 'px'; + break; + case 'bottom-left': + hint.style.left = offset.left + 'px'; + hint.style.top = (offset.top + offset.height) + 'px'; + break; + case 'bottom-right': + hint.style.left = (offset.left + offset.width) + 'px'; + hint.style.top = (offset.top + offset.height) + 'px'; + break; + case 'bottom-middle': + hint.style.left = (offset.left + (offset.width / 2)) + 'px'; + hint.style.top = (offset.top + offset.height) + 'px'; + break; + case 'top-middle': + hint.style.left = (offset.left + (offset.width / 2)) + 'px'; + hint.style.top = offset.top + 'px'; + break; + } + }; + + /** + * Triggers when user clicks on the hint element + * + * @api private + * @method _hintClick + * @param {Object} hintElement + * @param {Object} item + * @param {Number} stepId + */ + function _hintClick(hintElement, item, stepId) { + // call the callback function (if any) + if (typeof (this._hintClickCallback) !== 'undefined') { + this._hintClickCallback.call(this, hintElement, item, stepId); + } + + // remove all open tooltips + var removedStep = _removeHintTooltip.call(this); + + // to toggle the tooltip + if (parseInt(removedStep, 10) == stepId) { + return; + } + + var tooltipLayer = document.createElement('div'); + var tooltipTextLayer = document.createElement('div'); + var arrowLayer = document.createElement('div'); + var referenceLayer = document.createElement('div'); + + tooltipLayer.className = 'introjs-tooltip'; + + tooltipLayer.onclick = function (e) { + //IE9 & Other Browsers + if (e.stopPropagation) { + e.stopPropagation(); + } + //IE8 and Lower + else { + e.cancelBubble = true; + } + }; + + tooltipTextLayer.className = 'introjs-tooltiptext'; + + var tooltipWrapper = document.createElement('p'); + tooltipWrapper.innerHTML = item.hint; + + var closeButton = document.createElement('a'); + closeButton.className = 'introjs-button'; + closeButton.innerHTML = this._options.hintButtonLabel; + closeButton.onclick = _hideHint.bind(this, stepId); + + tooltipTextLayer.appendChild(tooltipWrapper); + tooltipTextLayer.appendChild(closeButton); + + arrowLayer.className = 'introjs-arrow'; + tooltipLayer.appendChild(arrowLayer); + + tooltipLayer.appendChild(tooltipTextLayer); + + // set current step for _placeTooltip function + this._currentStep = hintElement.getAttribute('data-step'); + + // align reference layer position + referenceLayer.className = 'introjs-tooltipReferenceLayer introjs-hintReference'; + referenceLayer.setAttribute('data-step', hintElement.getAttribute('data-step')); + _setHelperLayerPosition.call(this, referenceLayer); + + referenceLayer.appendChild(tooltipLayer); + document.body.appendChild(referenceLayer); + + //set proper position + _placeTooltip.call(this, hintElement, tooltipLayer, arrowLayer, null, true); + }; + + /** + * Get an element position on the page + * Thanks to `meouw`: http://stackoverflow.com/a/442474/375966 + * + * @api private + * @method _getOffset + * @param {Object} element + * @returns Element's position info + */ + function _getOffset(element) { + var elementPosition = {}; + + //set width + elementPosition.width = element.offsetWidth; + + //set height + elementPosition.height = element.offsetHeight; + + //calculate element top and left + var _x = 0; + var _y = 0; + while (element && !isNaN(element.offsetLeft) && !isNaN(element.offsetTop)) { + _x += element.offsetLeft; + _y += element.offsetTop; + element = element.offsetParent; + } + //set top + elementPosition.top = _y; + //set left + elementPosition.left = _x; + + return elementPosition; + }; + + /** + * Gets the current progress percentage + * + * @api private + * @method _getProgress + * @returns current progress percentage + */ + function _getProgress() { + // Steps are 0 indexed + var currentStep = parseInt((this._currentStep + 1), 10); + return ((currentStep / this._introItems.length) * 100); + }; + + /** + * Overwrites obj1's values with obj2's and adds obj2's if non existent in obj1 + * via: http://stackoverflow.com/questions/171251/how-can-i-merge-properties-of-two-javascript-objects-dynamically + * + * @param obj1 + * @param obj2 + * @returns obj3 a new object based on obj1 and obj2 + */ + function _mergeOptions(obj1,obj2) { + var obj3 = {}; + for (var attrname in obj1) { obj3[attrname] = obj1[attrname]; } + for (var attrname in obj2) { obj3[attrname] = obj2[attrname]; } + return obj3; + }; + + var introJs = function (targetElm) { + if (typeof (targetElm) === 'object') { + //Ok, create a new instance + return new IntroJs(targetElm); + + } else if (typeof (targetElm) === 'string') { + //select the target element with query selector + var targetElement = document.querySelector(targetElm); + + if (targetElement) { + return new IntroJs(targetElement); + } else { + throw new Error('There is no element with given selector.'); + } + } else { + return new IntroJs(document.body); + } + }; + + /** + * Current IntroJs version + * + * @property version + * @type String + */ + introJs.version = VERSION; + + //Prototype + introJs.fn = IntroJs.prototype = { + clone: function () { + return new IntroJs(this); + }, + setOption: function(option, value) { + this._options[option] = value; + return this; + }, + setOptions: function(options) { + this._options = _mergeOptions(this._options, options); + return this; + }, + start: function () { + _introForElement.call(this, this._targetElement); + return this; + }, + goToStep: function(step) { + _goToStep.call(this, step); + return this; + }, + nextStep: function() { + _nextStep.call(this); + return this; + }, + previousStep: function() { + _previousStep.call(this); + return this; + }, + exit: function() { + _exitIntro.call(this, this._targetElement); + return this; + }, + refresh: function() { + _setHelperLayerPosition.call(this, document.querySelector('.introjs-helperLayer')); + _setHelperLayerPosition.call(this, document.querySelector('.introjs-tooltipReferenceLayer')); + return this; + }, + onbeforechange: function(providedCallback) { + if (typeof (providedCallback) === 'function') { + this._introBeforeChangeCallback = providedCallback; + } else { + throw new Error('Provided callback for onbeforechange was not a function'); + } + return this; + }, + onchange: function(providedCallback) { + if (typeof (providedCallback) === 'function') { + this._introChangeCallback = providedCallback; + } else { + throw new Error('Provided callback for onchange was not a function.'); + } + return this; + }, + onafterchange: function(providedCallback) { + if (typeof (providedCallback) === 'function') { + this._introAfterChangeCallback = providedCallback; + } else { + throw new Error('Provided callback for onafterchange was not a function'); + } + return this; + }, + oncomplete: function(providedCallback) { + if (typeof (providedCallback) === 'function') { + this._introCompleteCallback = providedCallback; + } else { + throw new Error('Provided callback for oncomplete was not a function.'); + } + return this; + }, + onhintsadded: function(providedCallback) { + if (typeof (providedCallback) === 'function') { + this._hintsAddedCallback = providedCallback; + } else { + throw new Error('Provided callback for onhintsadded was not a function.'); + } + return this; + }, + onhintclick: function(providedCallback) { + if (typeof (providedCallback) === 'function') { + this._hintClickCallback = providedCallback; + } else { + throw new Error('Provided callback for onhintclick was not a function.'); + } + return this; + }, + onhintclose: function(providedCallback) { + if (typeof (providedCallback) === 'function') { + this._hintCloseCallback = providedCallback; + } else { + throw new Error('Provided callback for onhintclose was not a function.'); + } + return this; + }, + onexit: function(providedCallback) { + if (typeof (providedCallback) === 'function') { + this._introExitCallback = providedCallback; + } else { + throw new Error('Provided callback for onexit was not a function.'); + } + return this; + }, + addHints: function() { + _populateHints.call(this, this._targetElement); + return this; + } + }; + + exports.introJs = introJs; + return introJs; +})); diff --git a/demo-course/course/static/introjs.css b/demo-course/course/static/introjs.css new file mode 100644 index 0000000..a20f4ae --- /dev/null +++ b/demo-course/course/static/introjs.css @@ -0,0 +1,457 @@ +.introjs-overlay { + position: absolute; + z-index: 999999; + background-color: #000; + opacity: 0; + background: -moz-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%); + background: -webkit-gradient(radial,center center,0px,center center,100%,color-stop(0%,rgba(0,0,0,0.4)),color-stop(100%,rgba(0,0,0,0.9))); + background: -webkit-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%); + background: -o-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%); + background: -ms-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%); + background: radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#66000000',endColorstr='#e6000000',GradientType=1); + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -ms-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} + +.introjs-fixParent { + z-index: auto !important; + opacity: 1.0 !important; + position: absolute !important; + -webkit-transform: none !important; + -moz-transform: none !important; + -ms-transform: none !important; + -o-transform: none !important; + transform: none !important; +} + +.introjs-showElement, +tr.introjs-showElement > td, +tr.introjs-showElement > th { + z-index: 9999999 !important; +} + +.introjs-disableInteraction { + z-index: 99999999 !important; + position: absolute; +} + +.introjs-relativePosition, +tr.introjs-showElement > td, +tr.introjs-showElement > th { + position: relative; +} + +.introjs-helperLayer { + position: absolute; + z-index: 9999998; + background-color: #FFF; + background-color: rgba(255,255,255,.9); + border: 1px solid #777; + border: 1px solid rgba(0,0,0,.5); + border-radius: 4px; + box-shadow: 0 2px 15px rgba(0,0,0,.4); + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -ms-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} + +.introjs-tooltipReferenceLayer { + position: absolute; + visibility: hidden; + z-index: 10000000; + background-color: transparent; + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -ms-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} + +.introjs-helperLayer *, +.introjs-helperLayer *:before, +.introjs-helperLayer *:after { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + -ms-box-sizing: content-box; + -o-box-sizing: content-box; + box-sizing: content-box; +} + +.introjs-helperLayer { + padding-right: 10px; +} + +.introjs-helperNumberLayer { + position: absolute; + visibility: visible; + top: -16px; + left: -16px; + z-index: 9999999999 !important; + padding: 2px; + font-family: Arial, verdana, tahoma; + font-size: 13px; + font-weight: bold; + color: white; + text-align: center; + text-shadow: 1px 1px 1px rgba(0,0,0,.3); + background: #ff3019; /* Old browsers */ + background: -webkit-linear-gradient(top, #ff3019 0%, #cf0404 100%); /* Chrome10+,Safari5.1+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ff3019), color-stop(100%, #cf0404)); /* Chrome,Safari4+ */ + background: -moz-linear-gradient(top, #ff3019 0%, #cf0404 100%); /* FF3.6+ */ + background: -ms-linear-gradient(top, #ff3019 0%, #cf0404 100%); /* IE10+ */ + background: -o-linear-gradient(top, #ff3019 0%, #cf0404 100%); /* Opera 11.10+ */ + background: linear-gradient(to bottom, #ff3019 0%, #cf0404 100%); /* W3C */ + width: 20px; + height:20px; + line-height: 20px; + border: 3px solid white; + border-radius: 50%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3019', endColorstr='#cf0404', GradientType=0); /* IE6-9 */ + filter: progid:DXImageTransform.Microsoft.Shadow(direction=135, strength=2, color=ff0000); /* IE10 text shadows */ + box-shadow: 0 2px 5px rgba(0,0,0,.4); +} + +.introjs-arrow { + border: 5px solid white; + content:''; + position: absolute; +} +.introjs-arrow.top { + top: -10px; + border-top-color:transparent; + border-right-color:transparent; + border-bottom-color:white; + border-left-color:transparent; +} +.introjs-arrow.top-right { + top: -10px; + right: 10px; + border-top-color:transparent; + border-right-color:transparent; + border-bottom-color:white; + border-left-color:transparent; +} +.introjs-arrow.top-middle { + top: -10px; + left: 50%; + margin-left: -5px; + border-top-color:transparent; + border-right-color:transparent; + border-bottom-color:white; + border-left-color:transparent; +} +.introjs-arrow.right { + right: -10px; + top: 10px; + border-top-color:transparent; + border-right-color:transparent; + border-bottom-color:transparent; + border-left-color:white; +} +.introjs-arrow.right-bottom { + bottom:10px; + right: -10px; + border-top-color:transparent; + border-right-color:transparent; + border-bottom-color:transparent; + border-left-color:white; +} +.introjs-arrow.bottom { + bottom: -10px; + border-top-color:white; + border-right-color:transparent; + border-bottom-color:transparent; + border-left-color:transparent; +} +.introjs-arrow.left { + left: -10px; + top: 10px; + border-top-color:transparent; + border-right-color:white; + border-bottom-color:transparent; + border-left-color:transparent; +} +.introjs-arrow.left-bottom { + left: -10px; + bottom:10px; + border-top-color:transparent; + border-right-color:white; + border-bottom-color:transparent; + border-left-color:transparent; +} + +.introjs-tooltip { + position: absolute; + visibility: visible; + padding: 10px; + background-color: white; + min-width: 200px; + max-width: 300px; + border-radius: 3px; + box-shadow: 0 1px 10px rgba(0,0,0,.4); + -webkit-transition: opacity 0.1s ease-out; + -moz-transition: opacity 0.1s ease-out; + -ms-transition: opacity 0.1s ease-out; + -o-transition: opacity 0.1s ease-out; + transition: opacity 0.1s ease-out; +} + +.introjs-tooltipbuttons { + text-align: right; + white-space: nowrap; +} + +/* + Buttons style by http://nicolasgallagher.com/lab/css3-github-buttons/ + Changed by Afshin Mehrabani +*/ +.introjs-button { + position: relative; + overflow: visible; + display: inline-block; + padding: 0.3em 0.8em; + border: 1px solid #d4d4d4; + margin: 0; + text-decoration: none; + text-shadow: 1px 1px 0 #fff; + font: 11px/normal sans-serif; + color: #333; + white-space: nowrap; + cursor: pointer; + outline: none; + background-color: #ececec; + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f4f4f4), to(#ececec)); + background-image: -moz-linear-gradient(#f4f4f4, #ececec); + background-image: -o-linear-gradient(#f4f4f4, #ececec); + background-image: linear-gradient(#f4f4f4, #ececec); + -webkit-background-clip: padding; + -moz-background-clip: padding; + -o-background-clip: padding-box; + /*background-clip: padding-box;*/ /* commented out due to Opera 11.10 bug */ + -webkit-border-radius: 0.2em; + -moz-border-radius: 0.2em; + border-radius: 0.2em; + /* IE hacks */ + zoom: 1; + *display: inline; + margin-top: 10px; +} + +.introjs-button:hover { + border-color: #bcbcbc; + text-decoration: none; + box-shadow: 0px 1px 1px #e3e3e3; +} + +.introjs-button:focus, +.introjs-button:active { + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ececec), to(#f4f4f4)); + background-image: -moz-linear-gradient(#ececec, #f4f4f4); + background-image: -o-linear-gradient(#ececec, #f4f4f4); + background-image: linear-gradient(#ececec, #f4f4f4); +} + +/* overrides extra padding on button elements in Firefox */ +.introjs-button::-moz-focus-inner { + padding: 0; + border: 0; +} + +.introjs-skipbutton { + margin-right: 5px; + color: #7a7a7a; +} + +.introjs-prevbutton { + -webkit-border-radius: 0.2em 0 0 0.2em; + -moz-border-radius: 0.2em 0 0 0.2em; + border-radius: 0.2em 0 0 0.2em; + border-right: none; +} + +.introjs-nextbutton { + -webkit-border-radius: 0 0.2em 0.2em 0; + -moz-border-radius: 0 0.2em 0.2em 0; + border-radius: 0 0.2em 0.2em 0; +} + +.introjs-disabled, .introjs-disabled:hover, .introjs-disabled:focus { + color: #9a9a9a; + border-color: #d4d4d4; + box-shadow: none; + cursor: default; + background-color: #f4f4f4; + background-image: none; + text-decoration: none; +} + +.introjs-bullets { + text-align: center; +} +.introjs-bullets ul { + clear: both; + margin: 15px auto 0; + padding: 0; + display: inline-block; +} +.introjs-bullets ul li { + list-style: none; + float: left; + margin: 0 2px; +} +.introjs-bullets ul li a { + display: block; + width: 6px; + height: 6px; + background: #ccc; + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + text-decoration: none; +} +.introjs-bullets ul li a:hover { + background: #999; +} +.introjs-bullets ul li a.active { + background: #999; +} + +.introjs-progress { + overflow: hidden; + height: 10px; + margin: 10px 0 5px 0; + border-radius: 4px; + background-color: #ecf0f1 +} +.introjs-progressbar { + float: left; + width: 0%; + height: 100%; + font-size: 10px; + line-height: 10px; + text-align: center; + background-color: #08c; +} + +.introjsFloatingElement { + position: absolute; + height: 0; + width: 0; + left: 50%; + top: 50%; +} + +.introjs-fixedTooltip { + position: fixed; +} + +.introjs-hint { + position: absolute; + background: transparent; + width: 20px; + height: 15px; +} + +.introjs-hidehint { + display: none; +} + +.introjs-fixedhint { + position: fixed; +} + +.introjs-hint:hover > .introjs-hint-pulse { + border: 5px solid rgba(60, 60, 60, 0.57); +} + +.introjs-hint-pulse { + width: 10px; + height: 10px; + border: 5px solid rgba(60, 60, 60, 0.27); + -webkit-border-radius: 30px; + -moz-border-radius: 30px; + border-radius: 30px; + background-color: rgba(136, 136, 136, 0.24); + z-index: 10; + position: absolute; + -webkit-transition: all 0.2s ease-out; + -moz-transition: all 0.2s ease-out; + -ms-transition: all 0.2s ease-out; + -o-transition: all 0.2s ease-out; + transition: all 0.2s ease-out; +} + +.introjs-hint-dot { + border: 10px solid rgba(146, 146, 146, 0.36); + background: transparent; + -webkit-border-radius: 60px; + -moz-border-radius: 60px; + border-radius: 60px; + height: 50px; + width: 50px; + -webkit-animation: introjspulse 3s ease-out; + -moz-animation: introjspulse 3s ease-out; + animation: introjspulse 3s ease-out; + -webkit-animation-iteration-count: infinite; + -moz-animation-iteration-count: infinite; + animation-iteration-count: infinite; + position: absolute; + top: -25px; + left: -25px; + z-index: 1; + opacity: 0; +} + +@-moz-keyframes intrjspulse { + 0% { + -moz-transform: scale(0); + opacity: 0.0; + } + 25% { + -moz-transform: scale(0); + opacity: 0.1; + } + 50% { + -moz-transform: scale(0.1); + opacity: 0.3; + } + 75% { + -moz-transform: scale(0.5); + opacity: 0.5; + } + 100% { + -moz-transform: scale(1); + opacity: 0.0; + } +} + +@-webkit-keyframes "introjspulse" { + 0% { + -webkit-transform: scale(0); + opacity: 0.0; + } + 25% { + -webkit-transform: scale(0); + opacity: 0.1; + } + 50% { + -webkit-transform: scale(0.1); + opacity: 0.3; + } + 75% { + -webkit-transform: scale(0.5); + opacity: 0.5; + } + 100% { + -webkit-transform: scale(1); + opacity: 0.0; + } +} diff --git a/demo-course/course/static/learning_sequence_orig.png b/demo-course/course/static/learning_sequence_orig.png new file mode 100644 index 0000000..8767db5 Binary files /dev/null and b/demo-course/course/static/learning_sequence_orig.png differ diff --git a/demo-course/course/static/library_import.png b/demo-course/course/static/library_import.png new file mode 100644 index 0000000..683fbcd Binary files /dev/null and b/demo-course/course/static/library_import.png differ diff --git a/demo-course/course/static/lightbulb-opacity-5.svg b/demo-course/course/static/lightbulb-opacity-5.svg new file mode 100644 index 0000000..da28e68 --- /dev/null +++ b/demo-course/course/static/lightbulb-opacity-5.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/demo-course/course/static/new_library.png b/demo-course/course/static/new_library.png new file mode 100644 index 0000000..6713825 Binary files /dev/null and b/demo-course/course/static/new_library.png differ diff --git a/demo-course/course/static/ohms_law.html b/demo-course/course/static/ohms_law.html new file mode 100644 index 0000000..cb0062c --- /dev/null +++ b/demo-course/course/static/ohms_law.html @@ -0,0 +1,948 @@ + + + + + + + + + + + + + + + + + ‪Ohm's Law‬ + + + + + + +
      +

      +

      +

      +

      +
      + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demo-course/course/static/open source guy.svg b/demo-course/course/static/open source guy.svg new file mode 100644 index 0000000..fd08666 --- /dev/null +++ b/demo-course/course/static/open source guy.svg @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demo-course/course/static/open-edx-celebratory-icon.png b/demo-course/course/static/open-edx-celebratory-icon.png new file mode 100644 index 0000000..cc3ac62 Binary files /dev/null and b/demo-course/course/static/open-edx-celebratory-icon.png differ diff --git a/demo-course/course/static/open-edx-reach-slide.png b/demo-course/course/static/open-edx-reach-slide.png new file mode 100644 index 0000000..3cf1671 Binary files /dev/null and b/demo-course/course/static/open-edx-reach-slide.png differ diff --git a/demo-course/course/static/openedx_logo.png b/demo-course/course/static/openedx_logo.png new file mode 100644 index 0000000..02841c5 Binary files /dev/null and b/demo-course/course/static/openedx_logo.png differ diff --git a/demo-course/course/static/outline.png b/demo-course/course/static/outline.png new file mode 100644 index 0000000..9e3c865 Binary files /dev/null and b/demo-course/course/static/outline.png differ diff --git a/demo-course/course/static/prerequisite-settings.png b/demo-course/course/static/prerequisite-settings.png new file mode 100644 index 0000000..6e519ed Binary files /dev/null and b/demo-course/course/static/prerequisite-settings.png differ diff --git a/demo-course/course/static/prerequisite.png b/demo-course/course/static/prerequisite.png new file mode 100644 index 0000000..acbda48 Binary files /dev/null and b/demo-course/course/static/prerequisite.png differ diff --git a/demo-course/course/static/prism.css b/demo-course/course/static/prism.css new file mode 100644 index 0000000..965ac70 --- /dev/null +++ b/demo-course/course/static/prism.css @@ -0,0 +1,221 @@ +/* PrismJS 1.22.0 +https://prismjs.com/download.html#themes=prism-coy&languages=markup+css+clike+javascript+json+latex+matlab+python+r&plugins=keep-markup */ +/** + * prism.js Coy theme for JavaScript, CoffeeScript, CSS and HTML + * Based on https://github.com/tshedor/workshop-wp-theme (Example: http://workshop.kansan.com/category/sessions/basics or http://workshop.timshedor.com/category/sessions/basics); + * @author Tim Shedor + */ + +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +/* Code blocks */ +pre[class*="language-"] { + position: relative; + margin: .5em 0; + overflow: visible; + padding: 0; +} +pre[class*="language-"]>code { + position: relative; + border-left: 10px solid #358ccb; + box-shadow: -1px 0px 0px 0px #358ccb, 0px 0px 0px 1px #dfdfdf; + background-color: #fdfdfd; + background-image: linear-gradient(transparent 50%, rgba(69, 142, 209, 0.04) 50%); + background-size: 3em 3em; + background-origin: content-box; + background-attachment: local; +} + +code[class*="language-"] { + max-height: inherit; + height: inherit; + padding: 0 1em; + display: block; + overflow: auto; +} + +/* Margin bottom to accommodate shadow */ +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background-color: #fdfdfd; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + margin-bottom: 1em; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + position: relative; + padding: .2em; + border-radius: 0.3em; + color: #c92c2c; + border: 1px solid rgba(0, 0, 0, 0.1); + display: inline; + white-space: normal; +} + +pre[class*="language-"]:before, +pre[class*="language-"]:after { + content: ''; + z-index: -2; + display: block; + position: absolute; + bottom: 0.75em; + left: 0.18em; + width: 40%; + height: 20%; + max-height: 13em; + box-shadow: 0px 13px 8px #979797; + -webkit-transform: rotate(-2deg); + -moz-transform: rotate(-2deg); + -ms-transform: rotate(-2deg); + -o-transform: rotate(-2deg); + transform: rotate(-2deg); +} + +pre[class*="language-"]:after { + right: 0.75em; + left: auto; + -webkit-transform: rotate(2deg); + -moz-transform: rotate(2deg); + -ms-transform: rotate(2deg); + -o-transform: rotate(2deg); + transform: rotate(2deg); +} + +.token.comment, +.token.block-comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #7D8B99; +} + +.token.punctuation { + color: #5F6364; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.function-name, +.token.constant, +.token.symbol, +.token.deleted { + color: #c92c2c; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.function, +.token.builtin, +.token.inserted { + color: #2f9c0a; +} + +.token.operator, +.token.entity, +.token.url, +.token.variable { + color: #a67f59; + background: rgba(255, 255, 255, 0.5); +} + +.token.atrule, +.token.attr-value, +.token.keyword, +.token.class-name { + color: #1990b8; +} + +.token.regex, +.token.important { + color: #e90; +} + +.language-css .token.string, +.style .token.string { + color: #a67f59; + background: rgba(255, 255, 255, 0.5); +} + +.token.important { + font-weight: normal; +} + +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +.token.namespace { + opacity: .7; +} + +@media screen and (max-width: 767px) { + pre[class*="language-"]:before, + pre[class*="language-"]:after { + bottom: 14px; + box-shadow: none; + } + +} + +/* Plugin styles: Line Numbers */ +pre[class*="language-"].line-numbers.line-numbers { + padding-left: 0; +} + +pre[class*="language-"].line-numbers.line-numbers code { + padding-left: 3.8em; +} + +pre[class*="language-"].line-numbers.line-numbers .line-numbers-rows { + left: 0; +} + +/* Plugin styles: Line Highlight */ +pre[class*="language-"][data-line] { + padding-top: 0; + padding-bottom: 0; + padding-left: 0; +} +pre[data-line] code { + position: relative; + padding-left: 4em; +} +pre .line-highlight { + margin-top: 0; +} + diff --git a/demo-course/course/static/prism.js b/demo-course/course/static/prism.js new file mode 100644 index 0000000..f5bd894 --- /dev/null +++ b/demo-course/course/static/prism.js @@ -0,0 +1,13 @@ +/* PrismJS 1.22.0 +https://prismjs.com/download.html#themes=prism-coy&languages=markup+css+clike+javascript+json+latex+matlab+python+r&plugins=keep-markup */ +var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(u){var c=/\blang(?:uage)?-([\w-]+)\b/i,n=0,M={manual:u.Prism&&u.Prism.manual,disableWorkerMessageHandler:u.Prism&&u.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof W?new W(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=l.reach);k+=y.value.length,y=y.next){var b=y.value;if(t.length>n.length)return;if(!(b instanceof W)){var x=1;if(h&&y!=t.tail.prev){m.lastIndex=k;var w=m.exec(n);if(!w)break;var A=w.index+(f&&w[1]?w[1].length:0),P=w.index+w[0].length,S=k;for(S+=y.value.length;S<=A;)y=y.next,S+=y.value.length;if(S-=y.value.length,k=S,y.value instanceof W)continue;for(var E=y;E!==t.tail&&(Sl.reach&&(l.reach=j);var C=y.prev;L&&(C=I(t,C,L),k+=L.length),z(t,C,x);var _=new W(o,g?M.tokenize(O,g):O,v,O);y=I(t,C,_),N&&I(t,y,N),1"+a.content+""},!u.document)return u.addEventListener&&(M.disableWorkerMessageHandler||u.addEventListener("message",function(e){var n=JSON.parse(e.data),t=n.language,r=n.code,a=n.immediateClose;u.postMessage(M.highlight(r,M.languages[t],t)),a&&u.close()},!1)),M;var e=M.util.currentScript();function t(){M.manual||M.highlightAll()}if(e&&(M.filename=e.src,e.hasAttribute("data-manual")&&(M.manual=!0)),!M.manual){var r=document.readyState;"loading"===r||"interactive"===r&&e&&e.defer?document.addEventListener("DOMContentLoaded",t):window.requestAnimationFrame?window.requestAnimationFrame(t):window.setTimeout(t,16)}return M}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); +Prism.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/,name:/[^\s<>'"]+/}},cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^$/i;var n={"included-cdata":{pattern://i,inside:s}};n["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var t={};t[a]={pattern:RegExp("(<__[^]*?>)(?:))*\\]\\]>|(?!)".replace(/__/g,function(){return a}),"i"),lookbehind:!0,greedy:!0,inside:n},Prism.languages.insertBefore("markup","cdata",t)}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml; +!function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-]+[\s\S]*?(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\((?!\s*\))\s*)(?:[^()]|\((?:[^()]|\([^()]*\))*\))+?(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|(?:[^\\\\\r\n()\"']|\\\\[^])*)\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:RegExp("[^{}\\s](?:[^{};\"']|"+t.source+")*?(?=\\s*\\{)"),string:{pattern:t,greedy:!0},property:/[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,important:/!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var s=e.languages.markup;s&&(s.tag.addInlined("style","css"),e.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/(^|["'\s])style\s*=\s*(?:"[^"]*"|'[^']*')/i,lookbehind:!0,inside:{"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{style:{pattern:/(["'])[\s\S]+(?=["']$)/,lookbehind:!0,alias:"language-css",inside:e.languages.css},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},"attr-name":/^style/i}}},s.tag))}(Prism); +Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,function:/\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/}; +Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\s*)(?:catch|finally)\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|(?:get|set)(?=\s*[\[$\w\xA0-\uFFFF])|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,function:/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-flags":/[a-z]+$/,"regex-delimiter":/^\/|\/$/}},"function-variable":{pattern:/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/i,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\${)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.js=Prism.languages.javascript; +Prism.languages.json={property:{pattern:/"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,greedy:!0},string:{pattern:/"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json; +!function(a){var e=/\\(?:[^a-z()[\]]|[a-z*]+)/i,n={"equation-command":{pattern:e,alias:"regex"}};a.languages.latex={comment:/%.*/m,cdata:{pattern:/(\\begin\{((?:verbatim|lstlisting)\*?)\})[\s\S]*?(?=\\end\{\2\})/,lookbehind:!0},equation:[{pattern:/\$\$(?:\\[\s\S]|[^\\$])+\$\$|\$(?:\\[\s\S]|[^\\$])+\$|\\\([\s\S]*?\\\)|\\\[[\s\S]*?\\\]/,inside:n,alias:"string"},{pattern:/(\\begin\{((?:equation|math|eqnarray|align|multline|gather)\*?)\})[\s\S]*?(?=\\end\{\2\})/,lookbehind:!0,inside:n,alias:"string"}],keyword:{pattern:/(\\(?:begin|end|ref|cite|label|usepackage|documentclass)(?:\[[^\]]+\])?\{)[^}]+(?=\})/,lookbehind:!0},url:{pattern:/(\\url\{)[^}]+(?=\})/,lookbehind:!0},headline:{pattern:/(\\(?:part|chapter|section|subsection|frametitle|subsubsection|paragraph|subparagraph|subsubparagraph|subsubsubparagraph)\*?(?:\[[^\]]+\])?\{)[^}]+(?=\}(?:\[[^\]]+\])?)/,lookbehind:!0,alias:"class-name"},function:{pattern:e,alias:"selector"},punctuation:/[[\]{}&]/},a.languages.tex=a.languages.latex,a.languages.context=a.languages.latex}(Prism); +Prism.languages.matlab={comment:[/%\{[\s\S]*?\}%/,/%.+/],string:{pattern:/\B'(?:''|[^'\r\n])*'/,greedy:!0},number:/(?:\b\d+\.?\d*|\B\.\d+)(?:[eE][+-]?\d+)?(?:[ij])?|\b[ij]\b/,keyword:/\b(?:break|case|catch|continue|else|elseif|end|for|function|if|inf|NaN|otherwise|parfor|pause|pi|return|switch|try|while)\b/,function:/(?!\d)\w+(?=\s*\()/,operator:/\.?[*^\/\\']|[+\-:@]|[<>=~]=?|&&?|\|\|?/,punctuation:/\.{3}|[.,;\[\](){}!]/}; +Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},"string-interpolation":{pattern:/(?:f|rf|fr)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|rb|br)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|rb|br)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^\s*)@\w+(?:\.\w+)*/im,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:True|False|None)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python; +Prism.languages.r={comment:/#.*/,string:{pattern:/(['"])(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},"percent-operator":{pattern:/%[^%\s]*%/,alias:"operator"},boolean:/\b(?:TRUE|FALSE)\b/,ellipsis:/\.\.(?:\.|\d+)/,number:[/\b(?:NaN|Inf)\b/,/(?:\b0x[\dA-Fa-f]+(?:\.\d*)?|\b\d+\.?\d*|\B\.\d+)(?:[EePp][+-]?\d+)?[iL]?/],keyword:/\b(?:if|else|repeat|while|function|for|in|next|break|NULL|NA|NA_integer_|NA_real_|NA_complex_|NA_character_)\b/,operator:/->?>?|<(?:=|=!]=?|::?|&&?|\|\|?|[+*\/^$@~]/,punctuation:/[(){}\[\],;]/}; +"undefined"!=typeof self&&self.Prism&&self.document&&document.createRange&&(Prism.plugins.KeepMarkup=!0,Prism.hooks.add("before-highlight",function(e){if(e.element.children.length&&Prism.util.isActive(e.element,"keep-markup",!0)){var a=0,s=[],l=function(e,n){var o={};n||(o.clone=e.cloneNode(!1),o.posOpen=a,s.push(o));for(var t=0,d=e.childNodes.length;tn.node.posOpen&&(n.nodeStart=d,n.nodeStartPos=n.node.posOpen-n.pos),n.nodeStart&&n.pos+d.data.length>=n.node.posClose&&(n.nodeEnd=d,n.nodeEndPos=n.node.posClose-n.pos),n.pos+=d.data.length);if(n.nodeStart&&n.nodeEnd){var r=document.createRange();return r.setStart(n.nodeStart,n.nodeStartPos),r.setEnd(n.nodeEnd,n.nodeEndPos),n.node.clone.appendChild(r.extractContents()),r.insertNode(n.node.clone),r.detach(),!1}}return!0};n.keepMarkup.forEach(function(e){a(n.element,{node:e,pos:0})}),n.highlightedCode=n.element.innerHTML}})); diff --git a/demo-course/course/static/progress_page.png b/demo-course/course/static/progress_page.png new file mode 100644 index 0000000..dc24278 Binary files /dev/null and b/demo-course/course/static/progress_page.png differ diff --git a/demo-course/course/static/protein_sln.png b/demo-course/course/static/protein_sln.png new file mode 100644 index 0000000..69a4881 Binary files /dev/null and b/demo-course/course/static/protein_sln.png differ diff --git a/demo-course/course/static/quote-left.png b/demo-course/course/static/quote-left.png new file mode 100644 index 0000000..d4e9045 Binary files /dev/null and b/demo-course/course/static/quote-left.png differ diff --git a/demo-course/course/static/quote-right.png b/demo-course/course/static/quote-right.png new file mode 100644 index 0000000..270b036 Binary files /dev/null and b/demo-course/course/static/quote-right.png differ diff --git a/demo-course/course/static/rabbit_gif_canva.gif b/demo-course/course/static/rabbit_gif_canva.gif new file mode 100644 index 0000000..5745a99 Binary files /dev/null and b/demo-course/course/static/rabbit_gif_canva.gif differ diff --git a/demo-course/course/static/raw.png b/demo-course/course/static/raw.png new file mode 100644 index 0000000..552c635 Binary files /dev/null and b/demo-course/course/static/raw.png differ diff --git a/demo-course/course/static/raw_html_orig.png b/demo-course/course/static/raw_html_orig.png new file mode 100644 index 0000000..ef4de7c Binary files /dev/null and b/demo-course/course/static/raw_html_orig.png differ diff --git a/demo-course/course/static/rich_text_orig_with_template.png b/demo-course/course/static/rich_text_orig_with_template.png new file mode 100644 index 0000000..bbf6af4 Binary files /dev/null and b/demo-course/course/static/rich_text_orig_with_template.png differ diff --git a/demo-course/course/static/romeo_juliet_commons.jpeg b/demo-course/course/static/romeo_juliet_commons.jpeg new file mode 100644 index 0000000..e1399cd Binary files /dev/null and b/demo-course/course/static/romeo_juliet_commons.jpeg differ diff --git a/demo-course/course/static/sahara_desert_pexels.jpeg b/demo-course/course/static/sahara_desert_pexels.jpeg new file mode 100644 index 0000000..e0b0868 Binary files /dev/null and b/demo-course/course/static/sahara_desert_pexels.jpeg differ diff --git a/demo-course/course/static/select_library.png b/demo-course/course/static/select_library.png new file mode 100644 index 0000000..618aee7 Binary files /dev/null and b/demo-course/course/static/select_library.png differ diff --git a/demo-course/course/static/slick-theme.css b/demo-course/course/static/slick-theme.css new file mode 100644 index 0000000..999b65e --- /dev/null +++ b/demo-course/course/static/slick-theme.css @@ -0,0 +1,204 @@ +@charset 'UTF-8'; +/* Slider */ +.slick-loading .slick-list +{ + background: #fff url('./ajax-loader.gif') center center no-repeat; +} + +/* Icons */ +@font-face +{ + font-family: 'slick'; + font-weight: normal; + font-style: normal; + + src: url('./slick.eot'); + src: url('./slick.eot?#iefix') format('embedded-opentype'), url('./slick.woff') format('woff'), url('./slick.ttf') format('truetype'), url('./slick.svg#slick') format('svg'); +} +/* Arrows */ +.slick-prev, +.slick-next +{ + font-size: 0; + line-height: 0; + + position: absolute; + top: 50%; + + display: block; + + width: 20px; + height: 20px; + padding: 0; + -webkit-transform: translate(0, -50%); + -ms-transform: translate(0, -50%); + transform: translate(0, -50%); + + cursor: pointer; + + color: transparent; + border: none; + outline: none; + background: transparent; +} +.slick-prev:hover, +.slick-prev:focus, +.slick-next:hover, +.slick-next:focus +{ + color: transparent; + outline: none; + background: transparent; +} +.slick-prev:hover:before, +.slick-prev:focus:before, +.slick-next:hover:before, +.slick-next:focus:before +{ + opacity: 1; +} +.slick-prev.slick-disabled:before, +.slick-next.slick-disabled:before +{ + opacity: .25; +} + +.slick-prev:before, +.slick-next:before +{ + font-family: 'slick'; + font-size: 20px; + line-height: 1; + + opacity: .75; + color: white; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.slick-prev +{ + left: -25px; +} +[dir='rtl'] .slick-prev +{ + right: -25px; + left: auto; +} +.slick-prev:before +{ + content: '◀'; +} +[dir='rtl'] .slick-prev:before +{ + content: '▶'; +} + +.slick-next +{ + right: -25px; +} +[dir='rtl'] .slick-next +{ + right: auto; + left: -25px; +} +.slick-next:before +{ + content: '▶'; +} +[dir='rtl'] .slick-next:before +{ + content: '◀'; +} + +/* Dots */ +.slick-dotted.slick-slider +{ + margin-bottom: 10px; +} + +.slick-dots +{ + position: absolute; + bottom: -25px; + + display: block; + + width: 100%; + padding: 0; + margin: 0; + + list-style: none; + + text-align: center; +} +.slick-dots li +{ + position: relative; + + display: inline-block; + + width: 20px; + height: 20px; + margin: 0 5px; + padding: 0; + + cursor: pointer; +} +.slick-dots li button +{ + font-size: 0; + line-height: 0; + + display: block; + + width: 20px; + height: 20px; + padding: 5px; + + cursor: pointer; + + color: transparent; + border: 0; + outline: none; + background: transparent; +} +.slick-dots li button:hover, +.slick-dots li button:focus +{ + outline: none; +} +.slick-dots li button:hover:before, +.slick-dots li button:focus:before +{ + opacity: 1; +} +.slick-dots li button:before +{ + font-family: 'slick'; + font-size: 6px; + line-height: 20px; + + position: absolute; + top: 0; + left: 0; + + width: 20px; + height: 20px; + + content: '•'; + text-align: center; + + opacity: .25; + color: #189; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.slick-dots li.slick-active button:before +{ + opacity: .75; + color: #189; +} diff --git a/demo-course/course/static/slick.css b/demo-course/course/static/slick.css new file mode 100644 index 0000000..57477e8 --- /dev/null +++ b/demo-course/course/static/slick.css @@ -0,0 +1,119 @@ +/* Slider */ +.slick-slider +{ + position: relative; + + display: block; + box-sizing: border-box; + + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + -webkit-touch-callout: none; + -khtml-user-select: none; + -ms-touch-action: pan-y; + touch-action: pan-y; + -webkit-tap-highlight-color: transparent; +} + +.slick-list +{ + position: relative; + + display: block; + overflow: hidden; + + margin: 0; + padding: 0; +} +.slick-list:focus +{ + outline: none; +} +.slick-list.dragging +{ + cursor: pointer; + cursor: hand; +} + +.slick-slider .slick-track, +.slick-slider .slick-list +{ + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} + +.slick-track +{ + position: relative; + top: 0; + left: 0; + + display: block; + margin-left: auto; + margin-right: auto; +} +.slick-track:before, +.slick-track:after +{ + display: table; + + content: ''; +} +.slick-track:after +{ + clear: both; +} +.slick-loading .slick-track +{ + visibility: hidden; +} + +.slick-slide +{ + display: none; + float: left; + + height: 100%; + min-height: 1px; +} +[dir='rtl'] .slick-slide +{ + float: right; +} +.slick-slide img +{ + display: block; +} +.slick-slide.slick-loading img +{ + display: none; +} +.slick-slide.dragging img +{ + pointer-events: none; +} +.slick-initialized .slick-slide +{ + display: block; +} +.slick-loading .slick-slide +{ + visibility: hidden; +} +.slick-vertical .slick-slide +{ + display: block; + + height: auto; + + border: 1px solid transparent; +} +.slick-arrow.slick-hidden { + display: none; +} diff --git a/demo-course/course/static/slick.eot b/demo-course/course/static/slick.eot new file mode 100644 index 0000000..2cbab9c Binary files /dev/null and b/demo-course/course/static/slick.eot differ diff --git a/demo-course/course/static/slick.js b/demo-course/course/static/slick.js new file mode 100644 index 0000000..7aca613 --- /dev/null +++ b/demo-course/course/static/slick.js @@ -0,0 +1,3011 @@ +/* + _ _ _ _ + ___| (_) ___| | __ (_)___ +/ __| | |/ __| |/ / | / __| +\__ \ | | (__| < _ | \__ \ +|___/_|_|\___|_|\_(_)/ |___/ + |__/ + + Version: 1.8.1 + Author: Ken Wheeler + Website: http://kenwheeler.github.io + Docs: http://kenwheeler.github.io/slick + Repo: http://github.com/kenwheeler/slick + Issues: http://github.com/kenwheeler/slick/issues + + */ +/* global window, document, define, jQuery, setInterval, clearInterval */ +;(function(factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + define(['jquery'], factory); + } else if (typeof exports !== 'undefined') { + module.exports = factory(require('jquery')); + } else { + factory(jQuery); + } + +}(function($) { + 'use strict'; + var Slick = window.Slick || {}; + + Slick = (function() { + + var instanceUid = 0; + + function Slick(element, settings) { + + var _ = this, dataSettings; + + _.defaults = { + accessibility: true, + adaptiveHeight: false, + appendArrows: $(element), + appendDots: $(element), + arrows: true, + asNavFor: null, + prevArrow: '', + nextArrow: '', + autoplay: false, + autoplaySpeed: 3000, + centerMode: false, + centerPadding: '50px', + cssEase: 'ease', + customPaging: function(slider, i) { + return $('
      "].join("")).prependTo(this.$editingArea),this.$handle.on("mousedown",(function(e){if(ft.isControlSizing(e.target)){e.preventDefault(),e.stopPropagation();var n=t.$handle.find(".note-control-selection").data("target"),o=n.offset(),i=t.$document.scrollTop(),r=function(e){t.context.invoke("editor.resizeTo",{x:e.clientX-o.left,y:e.clientY-(o.top-i)},n,!e.shiftKey),t.update(n[0],e)};t.$document.on("mousemove",r).one("mouseup",(function(e){e.preventDefault(),t.$document.off("mousemove",r),t.context.invoke("editor.afterCommand")})),n.data("ratio")||n.data("ratio",n.height()/n.width())}})),this.$handle.on("wheel",(function(e){e.preventDefault(),t.update()}))}},{key:"destroy",value:function(){this.$handle.remove()}},{key:"update",value:function(t,e){if(this.context.isDisabled())return!1;var n=ft.isImg(t),o=this.$handle.find(".note-control-selection");if(this.context.invoke("imagePopover.update",t,e),n){var r=i()(t),a=r.position(),s={left:a.left+parseInt(r.css("marginLeft"),10),top:a.top+parseInt(r.css("marginTop"),10)},l={w:r.outerWidth(!1),h:r.outerHeight(!1)};o.css({display:"block",left:s.left,top:s.top,width:l.w,height:l.h}).data("target",r);var c=new Image;c.src=r.attr("src");var u=l.w+"x"+l.h+" ("+this.lang.image.original+": "+c.width+"x"+c.height+")";o.find(".note-control-selection-info").text(u),this.context.invoke("editor.saveTarget",t)}else this.hide();return n}},{key:"hide",value:function(){this.context.invoke("editor.clearTarget"),this.$handle.children().hide()}}])&&_t(e.prototype,n),o&&_t(e,o),t}();function Yt(t,e){for(var n=0;n").html(o).attr("href",n)[0];this.context.options.linkTargetBlank&&i()(r).attr("target","_blank"),this.lastWordRange.insertNode(r),this.lastWordRange=null,this.context.invoke("editor.focus")}}}},{key:"handleKeydown",value:function(t){if(x.contains([Ct.code.ENTER,Ct.code.SPACE],t.keyCode)){var e=this.context.invoke("editor.createRange").getWordRange();this.lastWordRange=e}}},{key:"handleKeyup",value:function(t){x.contains([Ct.code.ENTER,Ct.code.SPACE],t.keyCode)&&this.replace()}}])&&Yt(e.prototype,n),o&&Yt(e,o),t}();function Qt(t,e){for(var n=0;n'),this.$placeholder.on("click",(function(){t.context.invoke("focus")})).html(this.options.placeholder).prependTo(this.$editingArea),this.update()}},{key:"destroy",value:function(){this.$placeholder.remove()}},{key:"update",value:function(){var t=!this.context.invoke("codeview.isActivated")&&this.context.invoke("editor.isEmpty");this.$placeholder.toggle(t)}}])&&ne(e.prototype,n),o&&ne(e,o),t}();function ie(t,e){for(var n=0;n','
      '+this.lang.color.background+"
      ","
      ",'","
      ",'
      ',"
      ",'",'',"
      ",'
      ',"
      "].join(""):"")+(o?['
      ','
      '+this.lang.color.foreground+"
      ","
      ",'","
      ",'
      ',"
      ",'",'',"
      ",'
      ',"
      "].join(""):""),callback:function(t){t.find(".note-holder").each((function(t,e){var n=i()(e);n.append(r.ui.palette({colors:r.options.colors,colorsName:r.options.colorsName,eventName:n.data("event"),container:r.options.container,tooltip:r.options.tooltip}).render())}));var e=[["#FFFFFF","#FFFFFF","#FFFFFF","#FFFFFF","#FFFFFF","#FFFFFF","#FFFFFF","#FFFFFF"]];t.find(".note-holder-custom").each((function(t,n){var o=i()(n);o.append(r.ui.palette({colors:e,colorsName:e,eventName:o.data("event"),container:r.options.container,tooltip:r.options.tooltip}).render())})),t.find("input[type=color]").each((function(e,n){i()(n).change((function(){var e=t.find("#"+i()(this).data("event")).find(".note-color-btn").first(),n=this.value.toUpperCase();e.css("background-color",n).attr("aria-label",n).attr("data-value",n).attr("data-original-title",n),e.click()}))}))},click:function(e){e.stopPropagation();var n=i()("."+t).find(".note-dropdown-menu"),o=i()(e.target),a=o.data("event"),s=o.attr("data-value");if("openPalette"===a){var l=n.find("#"+s),c=i()(n.find("#"+l.data("event")).find(".note-color-row")[0]),u=c.find(".note-color-btn").last().detach(),d=l.val();u.css("background-color",d).attr("aria-label",d).attr("data-value",d).attr("data-original-title",d),c.prepend(u),l.click()}else{if(x.contains(["backColor","foreColor"],a)){var h="backColor"===a?"background-color":"color",f=o.closest(".note-color").find(".note-recent-color"),p=o.closest(".note-color").find(".note-current-color-button");f.css(h,s),p.attr("data-"+a,s)}r.context.invoke("editor."+a,s)}}})]}).render()}},{key:"addToolbarButtons",value:function(){var t=this;this.context.memo("button.style",(function(){return t.ui.buttonGroup([t.button({className:"dropdown-toggle",contents:t.ui.dropdownButtonContents(t.ui.icon(t.options.icons.magic),t.options),tooltip:t.lang.style.style,data:{toggle:"dropdown"}}),t.ui.dropdown({className:"dropdown-style",items:t.options.styleTags,title:t.lang.style.style,template:function(e){"string"==typeof e&&(e={tag:e,title:Object.prototype.hasOwnProperty.call(t.lang.style,e)?t.lang.style[e]:e});var n=e.tag,o=e.title;return"<"+n+(e.style?' style="'+e.style+'" ':"")+(e.className?' class="'+e.className+'"':"")+">"+o+""},click:t.context.createInvokeHandler("editor.formatBlock")})]).render()}));for(var e=function(e,n){var o=t.options.styleTags[e];t.context.memo("button.style."+o,(function(){return t.button({className:"note-btn-style-"+o,contents:'
      '+o.toUpperCase()+"
      ",tooltip:t.lang.style[o],click:t.context.createInvokeHandler("editor.formatBlock")}).render()}))},n=0,o=this.options.styleTags.length;n',t.options),tooltip:t.lang.font.name,data:{toggle:"dropdown"}}),t.ui.dropdownCheck({className:"dropdown-fontname",checkClassName:t.options.icons.menuCheck,items:t.options.fontNames.filter(t.isFontInstalled.bind(t)),title:t.lang.font.name,template:function(t){return''+t+""},click:t.context.createInvokeHandlerAndUpdateState("editor.fontName")})]).render()})),this.context.memo("button.fontsize",(function(){return t.ui.buttonGroup([t.button({className:"dropdown-toggle",contents:t.ui.dropdownButtonContents('',t.options),tooltip:t.lang.font.size,data:{toggle:"dropdown"}}),t.ui.dropdownCheck({className:"dropdown-fontsize",checkClassName:t.options.icons.menuCheck,items:t.options.fontSizes,title:t.lang.font.size,click:t.context.createInvokeHandlerAndUpdateState("editor.fontSize")})]).render()})),this.context.memo("button.fontsizeunit",(function(){return t.ui.buttonGroup([t.button({className:"dropdown-toggle",contents:t.ui.dropdownButtonContents('',t.options),tooltip:t.lang.font.sizeunit,data:{toggle:"dropdown"}}),t.ui.dropdownCheck({className:"dropdown-fontsizeunit",checkClassName:t.options.icons.menuCheck,items:t.options.fontSizeUnits,title:t.lang.font.sizeunit,click:t.context.createInvokeHandlerAndUpdateState("editor.fontSizeUnit")})]).render()})),this.context.memo("button.color",(function(){return t.colorPalette("note-color-all",t.lang.color.recent,!0,!0)})),this.context.memo("button.forecolor",(function(){return t.colorPalette("note-color-fore",t.lang.color.foreground,!1,!0)})),this.context.memo("button.backcolor",(function(){return t.colorPalette("note-color-back",t.lang.color.background,!0,!1)})),this.context.memo("button.ul",(function(){return t.button({contents:t.ui.icon(t.options.icons.unorderedlist),tooltip:t.lang.lists.unordered+t.representShortcut("insertUnorderedList"),click:t.context.createInvokeHandler("editor.insertUnorderedList")}).render()})),this.context.memo("button.ol",(function(){return t.button({contents:t.ui.icon(t.options.icons.orderedlist),tooltip:t.lang.lists.ordered+t.representShortcut("insertOrderedList"),click:t.context.createInvokeHandler("editor.insertOrderedList")}).render()}));var r=this.button({contents:this.ui.icon(this.options.icons.alignLeft),tooltip:this.lang.paragraph.left+this.representShortcut("justifyLeft"),click:this.context.createInvokeHandler("editor.justifyLeft")}),a=this.button({contents:this.ui.icon(this.options.icons.alignCenter),tooltip:this.lang.paragraph.center+this.representShortcut("justifyCenter"),click:this.context.createInvokeHandler("editor.justifyCenter")}),s=this.button({contents:this.ui.icon(this.options.icons.alignRight),tooltip:this.lang.paragraph.right+this.representShortcut("justifyRight"),click:this.context.createInvokeHandler("editor.justifyRight")}),l=this.button({contents:this.ui.icon(this.options.icons.alignJustify),tooltip:this.lang.paragraph.justify+this.representShortcut("justifyFull"),click:this.context.createInvokeHandler("editor.justifyFull")}),c=this.button({contents:this.ui.icon(this.options.icons.outdent),tooltip:this.lang.paragraph.outdent+this.representShortcut("outdent"),click:this.context.createInvokeHandler("editor.outdent")}),u=this.button({contents:this.ui.icon(this.options.icons.indent),tooltip:this.lang.paragraph.indent+this.representShortcut("indent"),click:this.context.createInvokeHandler("editor.indent")});this.context.memo("button.justifyLeft",b.invoke(r,"render")),this.context.memo("button.justifyCenter",b.invoke(a,"render")),this.context.memo("button.justifyRight",b.invoke(s,"render")),this.context.memo("button.justifyFull",b.invoke(l,"render")),this.context.memo("button.outdent",b.invoke(c,"render")),this.context.memo("button.indent",b.invoke(u,"render")),this.context.memo("button.paragraph",(function(){return t.ui.buttonGroup([t.button({className:"dropdown-toggle",contents:t.ui.dropdownButtonContents(t.ui.icon(t.options.icons.alignLeft),t.options),tooltip:t.lang.paragraph.paragraph,data:{toggle:"dropdown"}}),t.ui.dropdown([t.ui.buttonGroup({className:"note-align",children:[r,a,s,l]}),t.ui.buttonGroup({className:"note-list",children:[c,u]})])]).render()})),this.context.memo("button.height",(function(){return t.ui.buttonGroup([t.button({className:"dropdown-toggle",contents:t.ui.dropdownButtonContents(t.ui.icon(t.options.icons.textHeight),t.options),tooltip:t.lang.font.height,data:{toggle:"dropdown"}}),t.ui.dropdownCheck({items:t.options.lineHeights,checkClassName:t.options.icons.menuCheck,className:"dropdown-line-height",title:t.lang.font.height,click:t.context.createInvokeHandler("editor.lineHeight")})]).render()})),this.context.memo("button.table",(function(){return t.ui.buttonGroup([t.button({className:"dropdown-toggle",contents:t.ui.dropdownButtonContents(t.ui.icon(t.options.icons.table),t.options),tooltip:t.lang.table.table,data:{toggle:"dropdown"}}),t.ui.dropdown({title:t.lang.table.table,className:"note-table",items:['
      ','
      ','
      ','
      ',"
      ",'
      1 x 1
      '].join("")})],{callback:function(e){e.find(".note-dimension-picker-mousecatcher").css({width:t.options.insertTableMaxSize.col+"em",height:t.options.insertTableMaxSize.row+"em"}).mousedown(t.context.createInvokeHandler("editor.insertTable")).on("mousemove",t.tableMoveHandler.bind(t))}}).render()})),this.context.memo("button.link",(function(){return t.button({contents:t.ui.icon(t.options.icons.link),tooltip:t.lang.link.link+t.representShortcut("linkDialog.show"),click:t.context.createInvokeHandler("linkDialog.show")}).render()})),this.context.memo("button.picture",(function(){return t.button({contents:t.ui.icon(t.options.icons.picture),tooltip:t.lang.image.image,click:t.context.createInvokeHandler("imageDialog.show")}).render()})),this.context.memo("button.video",(function(){return t.button({contents:t.ui.icon(t.options.icons.video),tooltip:t.lang.video.video,click:t.context.createInvokeHandler("videoDialog.show")}).render()})),this.context.memo("button.hr",(function(){return t.button({contents:t.ui.icon(t.options.icons.minus),tooltip:t.lang.hr.insert+t.representShortcut("insertHorizontalRule"),click:t.context.createInvokeHandler("editor.insertHorizontalRule")}).render()})),this.context.memo("button.fullscreen",(function(){return t.button({className:"btn-fullscreen",contents:t.ui.icon(t.options.icons.arrowsAlt),tooltip:t.lang.options.fullscreen,click:t.context.createInvokeHandler("fullscreen.toggle")}).render()})),this.context.memo("button.codeview",(function(){return t.button({className:"btn-codeview",contents:t.ui.icon(t.options.icons.code),tooltip:t.lang.options.codeview,click:t.context.createInvokeHandler("codeview.toggle")}).render()})),this.context.memo("button.redo",(function(){return t.button({contents:t.ui.icon(t.options.icons.redo),tooltip:t.lang.history.redo+t.representShortcut("redo"),click:t.context.createInvokeHandler("editor.redo")}).render()})),this.context.memo("button.undo",(function(){return t.button({contents:t.ui.icon(t.options.icons.undo),tooltip:t.lang.history.undo+t.representShortcut("undo"),click:t.context.createInvokeHandler("editor.undo")}).render()})),this.context.memo("button.help",(function(){return t.button({contents:t.ui.icon(t.options.icons.question),tooltip:t.lang.options.help,click:t.context.createInvokeHandler("helpDialog.show")}).render()}))}},{key:"addImagePopoverButtons",value:function(){var t=this;this.context.memo("button.resizeFull",(function(){return t.button({contents:'100%',tooltip:t.lang.image.resizeFull,click:t.context.createInvokeHandler("editor.resize","1")}).render()})),this.context.memo("button.resizeHalf",(function(){return t.button({contents:'50%',tooltip:t.lang.image.resizeHalf,click:t.context.createInvokeHandler("editor.resize","0.5")}).render()})),this.context.memo("button.resizeQuarter",(function(){return t.button({contents:'25%',tooltip:t.lang.image.resizeQuarter,click:t.context.createInvokeHandler("editor.resize","0.25")}).render()})),this.context.memo("button.resizeNone",(function(){return t.button({contents:t.ui.icon(t.options.icons.rollback),tooltip:t.lang.image.resizeNone,click:t.context.createInvokeHandler("editor.resize","0")}).render()})),this.context.memo("button.floatLeft",(function(){return t.button({contents:t.ui.icon(t.options.icons.floatLeft),tooltip:t.lang.image.floatLeft,click:t.context.createInvokeHandler("editor.floatMe","left")}).render()})),this.context.memo("button.floatRight",(function(){return t.button({contents:t.ui.icon(t.options.icons.floatRight),tooltip:t.lang.image.floatRight,click:t.context.createInvokeHandler("editor.floatMe","right")}).render()})),this.context.memo("button.floatNone",(function(){return t.button({contents:t.ui.icon(t.options.icons.rollback),tooltip:t.lang.image.floatNone,click:t.context.createInvokeHandler("editor.floatMe","none")}).render()})),this.context.memo("button.removeMedia",(function(){return t.button({contents:t.ui.icon(t.options.icons.trash),tooltip:t.lang.image.remove,click:t.context.createInvokeHandler("editor.removeMedia")}).render()}))}},{key:"addLinkPopoverButtons",value:function(){var t=this;this.context.memo("button.linkDialogShow",(function(){return t.button({contents:t.ui.icon(t.options.icons.link),tooltip:t.lang.link.edit,click:t.context.createInvokeHandler("linkDialog.show")}).render()})),this.context.memo("button.unlink",(function(){return t.button({contents:t.ui.icon(t.options.icons.unlink),tooltip:t.lang.link.unlink,click:t.context.createInvokeHandler("editor.unlink")}).render()}))}},{key:"addTablePopoverButtons",value:function(){var t=this;this.context.memo("button.addRowUp",(function(){return t.button({className:"btn-md",contents:t.ui.icon(t.options.icons.rowAbove),tooltip:t.lang.table.addRowAbove,click:t.context.createInvokeHandler("editor.addRow","top")}).render()})),this.context.memo("button.addRowDown",(function(){return t.button({className:"btn-md",contents:t.ui.icon(t.options.icons.rowBelow),tooltip:t.lang.table.addRowBelow,click:t.context.createInvokeHandler("editor.addRow","bottom")}).render()})),this.context.memo("button.addColLeft",(function(){return t.button({className:"btn-md",contents:t.ui.icon(t.options.icons.colBefore),tooltip:t.lang.table.addColLeft,click:t.context.createInvokeHandler("editor.addCol","left")}).render()})),this.context.memo("button.addColRight",(function(){return t.button({className:"btn-md",contents:t.ui.icon(t.options.icons.colAfter),tooltip:t.lang.table.addColRight,click:t.context.createInvokeHandler("editor.addCol","right")}).render()})),this.context.memo("button.deleteRow",(function(){return t.button({className:"btn-md",contents:t.ui.icon(t.options.icons.rowRemove),tooltip:t.lang.table.delRow,click:t.context.createInvokeHandler("editor.deleteRow")}).render()})),this.context.memo("button.deleteCol",(function(){return t.button({className:"btn-md",contents:t.ui.icon(t.options.icons.colRemove),tooltip:t.lang.table.delCol,click:t.context.createInvokeHandler("editor.deleteCol")}).render()})),this.context.memo("button.deleteTable",(function(){return t.button({className:"btn-md",contents:t.ui.icon(t.options.icons.trash),tooltip:t.lang.table.delTable,click:t.context.createInvokeHandler("editor.deleteTable")}).render()}))}},{key:"build",value:function(t,e){for(var n=0,o=e.length;n3&&c3&&ul&&ac)&&(this.isFollowing=!1,this.$toolbar.css({position:"relative",top:0,width:"100%",zIndex:"auto"}),this.$editable.css({marginTop:""}))}},{key:"changeContainer",value:function(t){t?this.$toolbar.prependTo(this.$editor):this.options.toolbarContainer&&this.$toolbar.appendTo(this.options.toolbarContainer),this.options.followingToolbar&&this.followScroll()}},{key:"updateFullscreen",value:function(t){this.ui.toggleBtnActive(this.$toolbar.find(".btn-fullscreen"),t),this.changeContainer(t)}},{key:"updateCodeview",value:function(t){this.ui.toggleBtnActive(this.$toolbar.find(".btn-codeview"),t),t?this.deactivate():this.activate()}},{key:"activate",value:function(t){var e=this.$toolbar.find("button");t||(e=e.not(".btn-codeview").not(".btn-fullscreen")),this.ui.toggleBtn(e,!0)}},{key:"deactivate",value:function(t){var e=this.$toolbar.find("button");t||(e=e.not(".btn-codeview").not(".btn-fullscreen")),this.ui.toggleBtn(e,!1)}}])&&ae(e.prototype,n),o&&ae(e,o),t}();function le(t,e){for(var n=0;n','"),''),"
      ",'
      ','"),''),"
      ",this.options.disableLinkTarget?"":i()("
      ").append(this.ui.checkbox({className:"sn-checkbox-open-in-new-window",text:this.lang.link.openInNewWindow,checked:!0}).render()).html(),i()("
      ").append(this.ui.checkbox({className:"sn-checkbox-use-protocol",text:this.lang.link.useProtocol,checked:!0}).render()).html()].join(""),n='');this.$dialog=this.ui.dialog({className:"link-dialog",title:this.lang.link.insert,fade:this.options.dialogsFade,body:e,footer:n}).render().appendTo(t)}},{key:"destroy",value:function(){this.ui.hideDialog(this.$dialog),this.$dialog.remove()}},{key:"bindEnterKey",value:function(t,e){t.on("keypress",(function(t){t.keyCode===Ct.code.ENTER&&(t.preventDefault(),e.trigger("click"))}))}},{key:"toggleLinkBtn",value:function(t,e,n){this.ui.toggleBtn(t,e.val()&&n.val())}},{key:"showLinkDialog",value:function(t){var e=this;return i.a.Deferred((function(n){var o=e.$dialog.find(".note-link-text"),i=e.$dialog.find(".note-link-url"),r=e.$dialog.find(".note-link-btn"),a=e.$dialog.find(".sn-checkbox-open-in-new-window input[type=checkbox]"),s=e.$dialog.find(".sn-checkbox-use-protocol input[type=checkbox]");e.ui.onDialogShown(e.$dialog,(function(){e.context.triggerEvent("dialog.shown"),!t.url&&b.isValidUrl(t.text)&&(t.url=t.text),o.on("input paste propertychange",(function(){t.text=o.val(),e.toggleLinkBtn(r,o,i)})).val(t.text),i.on("input paste propertychange",(function(){t.text||o.val(i.val()),e.toggleLinkBtn(r,o,i)})).val(t.url),v.isSupportTouch||i.trigger("focus"),e.toggleLinkBtn(r,o,i),e.bindEnterKey(i,r),e.bindEnterKey(o,r);var l=void 0!==t.isNewWindow?t.isNewWindow:e.context.options.linkTargetBlank;a.prop("checked",l);var c=!t.url&&e.context.options.useProtocol;s.prop("checked",c),r.one("click",(function(r){r.preventDefault(),n.resolve({range:t.range,url:i.val(),text:o.val(),isNewWindow:a.is(":checked"),checkProtocol:s.is(":checked")}),e.ui.hideDialog(e.$dialog)}))})),e.ui.onDialogHidden(e.$dialog,(function(){o.off(),i.off(),r.off(),"pending"===n.state()&&n.reject()})),e.ui.showDialog(e.$dialog)})).promise()}},{key:"show",value:function(){var t=this,e=this.context.invoke("editor.getLinkInfo");this.context.invoke("editor.saveRange"),this.showLinkDialog(e).then((function(e){t.context.invoke("editor.restoreRange"),t.context.invoke("editor.createLink",e)})).fail((function(){t.context.invoke("editor.restoreRange")}))}}])&&le(e.prototype,n),o&&le(e,o),t}();function ue(t,e){for(var n=0;n ')}}).render().appendTo(this.options.container);var t=this.$popover.find(".popover-content,.note-popover-content");this.context.invoke("buttons.build",t,this.options.popover.link),this.$popover.on("mousedown",(function(t){t.preventDefault()}))}},{key:"destroy",value:function(){this.$popover.remove()}},{key:"update",value:function(){if(this.context.invoke("editor.hasFocus")){var t=this.context.invoke("editor.getLastRange");if(t.isCollapsed()&&t.isOnAnchor()){var e=ft.ancestor(t.sc,ft.isAnchor),n=i()(e).attr("href");this.$popover.find("a").attr("href",n).text(n);var o=ft.posFromPlaceholder(e),r=i()(this.options.container).offset();o.top-=r.top,o.left-=r.left,this.$popover.css({display:"block",left:o.left,top:o.top})}else this.hide()}else this.hide()}},{key:"hide",value:function(){this.$popover.hide()}}])&&ue(e.prototype,n),o&&ue(e,o),t}();function he(t,e){for(var n=0;n")}var o=this.options.dialogsInBody?this.$body:this.options.container,i=['
      ','",'',t,"
      ",'
      ','",'',"
      "].join(""),r='');this.$dialog=this.ui.dialog({title:this.lang.image.insert,fade:this.options.dialogsFade,body:i,footer:r}).render().appendTo(o)}},{key:"destroy",value:function(){this.ui.hideDialog(this.$dialog),this.$dialog.remove()}},{key:"bindEnterKey",value:function(t,e){t.on("keypress",(function(t){t.keyCode===Ct.code.ENTER&&(t.preventDefault(),e.trigger("click"))}))}},{key:"show",value:function(){var t=this;this.context.invoke("editor.saveRange"),this.showImageDialog().then((function(e){t.ui.hideDialog(t.$dialog),t.context.invoke("editor.restoreRange"),"string"==typeof e?t.options.callbacks.onImageLinkInsert?t.context.triggerEvent("image.link.insert",e):t.context.invoke("editor.insertImage",e):t.context.invoke("editor.insertImagesOrCallback",e)})).fail((function(){t.context.invoke("editor.restoreRange")}))}},{key:"showImageDialog",value:function(){var t=this;return i.a.Deferred((function(e){var n=t.$dialog.find(".note-image-input"),o=t.$dialog.find(".note-image-url"),i=t.$dialog.find(".note-image-btn");t.ui.onDialogShown(t.$dialog,(function(){t.context.triggerEvent("dialog.shown"),n.replaceWith(n.clone().on("change",(function(t){e.resolve(t.target.files||t.target.value)})).val("")),o.on("input paste propertychange",(function(){t.ui.toggleBtn(i,o.val())})).val(""),v.isSupportTouch||o.trigger("focus"),i.click((function(t){t.preventDefault(),e.resolve(o.val())})),t.bindEnterKey(o,i)})),t.ui.onDialogHidden(t.$dialog,(function(){n.off(),o.off(),i.off(),"pending"===e.state()&&e.reject()})),t.ui.showDialog(t.$dialog)}))}}])&&he(e.prototype,n),o&&he(e,o),t}();function pe(t,e){for(var n=0;n','"),''),"
      "].join(""),n='');this.$dialog=this.ui.dialog({title:this.lang.video.insert,fade:this.options.dialogsFade,body:e,footer:n}).render().appendTo(t)}},{key:"destroy",value:function(){this.ui.hideDialog(this.$dialog),this.$dialog.remove()}},{key:"bindEnterKey",value:function(t,e){t.on("keypress",(function(t){t.keyCode===Ct.code.ENTER&&(t.preventDefault(),e.trigger("click"))}))}},{key:"createVideoNode",value:function(t){var e,n=t.match(/\/\/(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))([\w|-]{11})(?:(?:[\?&]t=)(\S+))?$/),o=t.match(/(?:www\.|\/\/)instagram\.com\/p\/(.[a-zA-Z0-9_-]*)/),r=t.match(/\/\/vine\.co\/v\/([a-zA-Z0-9]+)/),a=t.match(/\/\/(player\.)?vimeo\.com\/([a-z]*\/)*(\d+)[?]?.*/),s=t.match(/.+dailymotion.com\/(video|hub)\/([^_]+)[^#]*(#video=([^_&]+))?/),l=t.match(/\/\/v\.youku\.com\/v_show\/id_(\w+)=*\.html/),c=t.match(/\/\/v\.qq\.com.*?vid=(.+)/),u=t.match(/\/\/v\.qq\.com\/x?\/?(page|cover).*?\/([^\/]+)\.html\??.*/),d=t.match(/^.+.(mp4|m4v)$/),h=t.match(/^.+.(ogg|ogv)$/),f=t.match(/^.+.(webm)$/),p=t.match(/(?:www\.|\/\/)facebook\.com\/([^\/]+)\/videos\/([0-9]+)/);if(n&&11===n[1].length){var m=n[1],v=0;if(void 0!==n[2]){var g=n[2].match(/^(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?$/);if(g)for(var b=[3600,60,1],k=0,y=b.length;k").attr("frameborder",0).attr("src","//www.youtube.com/embed/"+m+(v>0?"?start="+v:"")).attr("width","640").attr("height","360")}else if(o&&o[0].length)e=i()("':"";b("
      ").append(l).insertBefore(j);b("
      "+this.p.loadtext+"
      ").insertBefore(j);b(this).attr({cellspacing:"0",cellpadding:"0",border:"0",role:"grid", -"aria-multiselectable":!!this.p.multiselect,"aria-labelledby":"gbox_"+this.id});var o=function(a,b){a=parseInt(a,10);return isNaN(a)?b?b:0:a},p=function(d,e,f,h,i,j){var k=a.p.colModel[d],l=k.align,y='style="',z=k.classes,B=k.name,r=[];l&&(y=y+("text-align:"+l+";"));k.hidden===true&&(y=y+"display:none;");if(e===0)y=y+("width: "+c.headers[d].width+"px;");else if(k.cellattr&&b.isFunction(k.cellattr))if((d=k.cellattr.call(a,i,f,h,k,j))&&typeof d==="string"){d=d.replace(/style/i,"style").replace(/title/i, -"title");if(d.indexOf("title")>-1)k.title=false;d.indexOf("class")>-1&&(z=void 0);r=d.split("style");if(r.length===2){r[1]=b.trim(r[1].replace("=",""));if(r[1].indexOf("'")===0||r[1].indexOf('"')===0)r[1]=r[1].substring(1);y=y+r[1].replace(/'/gi,'"')}else y=y+'"'}if(!r.length){r[0]="";y=y+'"'}y=y+((z!==void 0?' class="'+z+'"':"")+(k.title&&f?' title="'+b.jgrid.stripHtml(f)+'"':""));y=y+(' aria-describedby="'+a.p.id+"_"+B+'"');return y+r[0]},v=function(c){return c===void 0||c===null||c===""?" ": -a.p.autoencode?b.jgrid.htmlEncode(c):c+""},u=function(c,d,e,f,g){var h=a.p.colModel[e];if(typeof h.formatter!=="undefined"){c={rowId:c,colModel:h,gid:a.p.id,pos:e};d=b.isFunction(h.formatter)?h.formatter.call(a,d,c,f,g):b.fmatter?b.fn.fmatter.call(a,h.formatter,d,c,f,g):v(d)}else d=v(d);return d},L=function(a,b,c,d,e){b=u(a,b,c,e,"add");return'"+b+""},E=function(b,c,d,e){e='";return'"+e+""},Y=function(a,b,c,d){c=(parseInt(c,10)-1)*parseInt(d,10)+1+b;return'"+c+""},T=function(b){var c,d=[],e=0,f;for(f=0;f0?this.rows[0]:null;b(this.firstChild).empty().append(d)}if(a&&this.p.scroll){b(this.grid.bDiv.firstChild).css({height:"auto"});b(this.grid.bDiv.firstChild.firstChild).css({height:0,display:"none"});if(this.grid.bDiv.scrollTop!==0)this.grid.bDiv.scrollTop= -0}if(c===true&&this.p.treeGrid){this.p.data=[];this.p._index={}}},Q=function(){var c=a.p.data.length,d,e,f;d=a.p.rownumbers===true?1:0;e=a.p.multiselect===true?1:0;f=a.p.subGrid===true?1:0;d=a.p.keyIndex===false||a.p.loadonce===true?a.p.localReader.id:a.p.colModel[a.p.keyIndex+e+f+d].name;for(e=0;e"}, -Z=function(c,d,e,f,g){var h=new Date,i=a.p.datatype!="local"&&a.p.loadonce||a.p.datatype=="xmlstring",j=a.p.xmlReader,k=a.p.datatype=="local"?"local":"xml";if(i){a.p.data=[];a.p._index={};a.p.localReader.id="_id_"}a.p.reccount=0;if(b.isXMLDoc(c)){if(a.p.treeANode===-1&&!a.p.scroll){M.call(a,false,true);e=1}else e=e>1?e:1;var z,B,r=0,l,s=a.p.multiselect===true?1:0,O=a.p.subGrid===true?1:0,m=a.p.rownumbers===true?1:0,o,p=[],u,n={},q,w,C=[],v=a.p.altRows===true?" "+a.p.altclass:"",A;j.repeatitems||(p= -T(k));o=a.p.keyIndex===false?b.isFunction(j.id)?j.id.call(a,c):j.id:a.p.keyIndex;if(p.length>0&&!isNaN(o)){a.p.remapColumns&&a.p.remapColumns.length&&(o=b.inArray(o,a.p.remapColumns));o=p[o]}k=(o+"").indexOf("[")===-1?p.length?function(a,c){return b(o,a).text()||c}:function(a,c){return b(j.cell,a).eq(o).text()||c}:function(a,b){return a.getAttribute(o.replace(/[\[\]]/g,""))||b};a.p.userData={};a.p.page=b.jgrid.getXmlData(c,j.page)||a.p.page||0;a.p.lastpage=b.jgrid.getXmlData(c,j.total);if(a.p.lastpage=== -void 0)a.p.lastpage=1;a.p.records=b.jgrid.getXmlData(c,j.records)||0;b.isFunction(j.userdata)?a.p.userData=j.userdata.call(a,c)||{}:b.jgrid.getXmlData(c,j.userdata,true).each(function(){a.p.userData[this.getAttribute("name")]=b(this).text()});c=b.jgrid.getXmlData(c,j.root,true);(c=b.jgrid.getXmlData(c,j.row,true))||(c=[]);var t=c.length,F=0,R=[],x=parseInt(a.p.rowNum,10);if(t>0&&a.p.page<=0)a.p.page=1;if(c&&t){var D=a.p.scroll?b.jgrid.randId():1;g&&(x=x*(g+1));for(var g=b.isFunction(a.p.afterInsertRow), -H=a.p.grouping&&a.p.groupingView.groupCollapse===true;F");if(a.p.grouping){R=b(a).jqGrid("groupingPrepare",C,R,n,F);C=[]}if(i||a.p.treeGrid===true){n._id_=w;a.p.data.push(n);a.p._index[w]=a.p.data.length-1}if(a.p.gridview===false){b("tbody:first",d).append(C.join(""));b(a).triggerHandler("jqGridAfterInsertRow",[w,n,q]);g&&a.p.afterInsertRow.call(a,w,n,q);C=[]}n={};r++;F++;if(r==x)break}}if(a.p.gridview===true){B=a.p.treeANode>-1? -a.p.treeANode:0;if(a.p.grouping){b(a).jqGrid("groupingRender",R,a.p.colModel.length);R=null}else a.p.treeGrid===true&&B>0?b(a.rows[B]).after(C.join("")):b("tbody:first",d).append(C.join(""))}if(a.p.subGrid===true)try{b(a).jqGrid("addSubGrid",s+m)}catch(P){}a.p.totaltime=new Date-h;if(r>0&&a.p.records===0)a.p.records=t;C=null;if(a.p.treeGrid===true)try{b(a).jqGrid("setTreeNode",B+1,r+B+1)}catch(Q){}if(!a.p.treeGrid&&!a.p.scroll)a.grid.bDiv.scrollTop=0;a.p.reccount=r;a.p.treeANode=-1;a.p.userDataOnFooter&& -b(a).jqGrid("footerData","set",a.p.userData,true);if(i){a.p.records=t;a.p.lastpage=Math.ceil(t/x)}f||a.updatepager(false,true);if(i)for(;r1?e:1;var h,i,j=a.p.datatype!="local"&&a.p.loadonce||a.p.datatype=="jsonstring";if(j){a.p.data=[];a.p._index={};a.p.localReader.id="_id_"}a.p.reccount=0;if(a.p.datatype=="local"){h=a.p.localReader;i="local"}else{h=a.p.jsonReader;i="json"}var k=0,l,B,r=[],m,s=a.p.multiselect?1:0,o=a.p.subGrid?1:0,p=a.p.rownumbers===true?1:0,n,u,t={},v,q,w=[],C=a.p.altRows===true?" "+a.p.altclass: -"",A;a.p.page=b.jgrid.getAccessor(c,h.page)||a.p.page||0;n=b.jgrid.getAccessor(c,h.total);a.p.lastpage=n===void 0?1:n;a.p.records=b.jgrid.getAccessor(c,h.records)||0;a.p.userData=b.jgrid.getAccessor(c,h.userdata)||{};h.repeatitems||(m=r=T(i));i=a.p.keyIndex===false?b.isFunction(h.id)?h.id.call(a,c):h.id:a.p.keyIndex;if(r.length>0&&!isNaN(i)){a.p.remapColumns&&a.p.remapColumns.length&&(i=b.inArray(i,a.p.remapColumns));i=r[i]}(u=b.jgrid.getAccessor(c,h.root))||(u=[]);n=u.length;c=0;if(n>0&&a.p.page<= -0)a.p.page=1;var x=parseInt(a.p.rowNum,10),D=a.p.scroll?b.jgrid.randId():1,F=false,R;g&&(x=x*(g+1));a.p.datatype==="local"&&!a.p.deselectAfterSort&&(F=true);for(var H=b.isFunction(a.p.afterInsertRow),G=[],J=a.p.grouping&&a.p.groupingView.groupCollapse===true;c");if(a.p.grouping){G=b(a).jqGrid("groupingPrepare",w,G,t,c);w=[]}if(j||a.p.treeGrid===true){t._id_=q;a.p.data.push(t);a.p._index[q]= -a.p.data.length-1}if(a.p.gridview===false){b("#"+b.jgrid.jqID(a.p.id)+" tbody:first").append(w.join(""));b(a).triggerHandler("jqGridAfterInsertRow",[q,t,g]);H&&a.p.afterInsertRow.call(a,q,t,g);w=[]}t={};k++;c++;if(k==x)break}if(a.p.gridview===true){v=a.p.treeANode>-1?a.p.treeANode:0;a.p.grouping?b(a).jqGrid("groupingRender",G,a.p.colModel.length):a.p.treeGrid===true&&v>0?b(a.rows[v]).after(w.join("")):b("#"+b.jgrid.jqID(a.p.id)+" tbody:first").append(w.join(""))}if(a.p.subGrid===true)try{b(a).jqGrid("addSubGrid", -s+p)}catch(P){}a.p.totaltime=new Date-d;if(k>0&&a.p.records===0)a.p.records=n;if(a.p.treeGrid===true)try{b(a).jqGrid("setTreeNode",v+1,k+v+1)}catch(Q){}if(!a.p.treeGrid&&!a.p.scroll)a.grid.bDiv.scrollTop=0;a.p.reccount=k;a.p.treeANode=-1;a.p.userDataOnFooter&&b(a).jqGrid("footerData","set",a.p.userData,true);if(j){a.p.records=n;a.p.lastpage=Math.ceil(n/x)}f||a.updatepager(false,true);if(j)for(;k0&&h&&s.or();try{c(d.groups[g])}catch(k){alert(k)}e++}h&& -s.orEnd()}if(d.rules!==void 0){if(e>0){h=s.select();s=b.jgrid.from(h);a.p.ignoreCase&&(s=s.ignoreCase())}try{(i=d.rules.length&&d.groupOp.toString().toUpperCase()==="OR")&&s.orBegin();for(g=0;g0&&(j&&j==="OR")&&(s=s.or());s=o[S.op](s,j)(S.field,S.data,f[S.field])}e++}i&&s.orEnd()}catch(ma){alert(ma)}}}var d,e=false,f={},g=[],h=[],i,j,k;if(b.isArray(a.p.data)){var l=a.p.grouping?a.p.groupingView:false,m,r; -b.each(a.p.colModel,function(){j=this.sorttype||"text";if(j=="date"||j=="datetime"){if(this.formatter&&typeof this.formatter==="string"&&this.formatter=="date"){i=this.formatoptions&&this.formatoptions.srcformat?this.formatoptions.srcformat:b.jgrid.formatter.date.srcformat;k=this.formatoptions&&this.formatoptions.newformat?this.formatoptions.newformat:b.jgrid.formatter.date.newformat}else i=k=this.datefmt||"Y-m-d";f[this.name]={stype:j,srcfmt:i,newfmt:k}}else f[this.name]={stype:j,srcfmt:"",newfmt:""}; -if(a.p.grouping){r=0;for(m=l.groupField.length;r1)if(g.npage!==null){e[g.npage]=c;j=c-1;c=1}else i=function(b){a.p.page++;a.grid.hDiv.loading=false;h&&a.p.loadComplete.call(a,b);G(c-1)};else g.npage!==null&& -delete a.p.postData[g.npage];if(a.p.grouping){b(a).jqGrid("groupingSetup");var k=a.p.groupingView,l,m="";for(l=0;l1,j):$(e,a.grid.bDiv,n,c>1,j);b(a).triggerHandler("jqGridLoadComplete", -[e]);i&&i.call(a,e);b(a).triggerHandler("jqGridAfterLoadComplete",[e]);d&&a.grid.populateVisible();if(a.p.loadonce||a.p.treeGrid)a.p.datatype="local";c===1&&K()}},error:function(d,e,f){b.isFunction(a.p.loadError)&&a.p.loadError.call(a,d,e,f);c===1&&K()},beforeSend:function(c,d){var e=true;b.isFunction(a.p.loadBeforeSend)&&(e=a.p.loadBeforeSend.call(a,c,d));e===void 0&&(e=true);if(e===false)return false;ba()}},b.jgrid.ajaxOptions,a.p.ajaxGridOptions));break;case "xmlstring":ba();e=b.jgrid.stringToDoc(a.p.datastr); -Z(e,a.grid.bDiv);b(a).triggerHandler("jqGridLoadComplete",[e]);h&&a.p.loadComplete.call(a,e);b(a).triggerHandler("jqGridAfterLoadComplete",[e]);a.p.datatype="local";a.p.datastr=null;K();break;case "jsonstring":ba();e=typeof a.p.datastr=="string"?b.jgrid.parse(a.p.datastr):a.p.datastr;$(e,a.grid.bDiv);b(a).triggerHandler("jqGridLoadComplete",[e]);h&&a.p.loadComplete.call(a,e);b(a).triggerHandler("jqGridAfterLoadComplete",[e]);a.p.datatype="local";a.p.datastr=null;K();break;case "local":case "clientside":ba(); -a.p.datatype="local";e=la();$(e,a.grid.bDiv,n,c>1,j);b(a).triggerHandler("jqGridLoadComplete",[e]);i&&i.call(a,e);b(a).triggerHandler("jqGridAfterLoadComplete",[e]);d&&a.grid.populateVisible();K()}}}},ca=function(c){b("#cb_"+b.jgrid.jqID(a.p.id),a.grid.hDiv)[a.p.useProp?"prop":"attr"]("checked",c);if(a.p.frozenColumns&&a.p.id+"_frozen")b("#cb_"+b.jgrid.jqID(a.p.id),a.grid.fhDiv)[a.p.useProp?"prop":"attr"]("checked",c)};l=function(c,e){var d="",f="", -g="",h,j,k,l,m=function(c){var e;b.isFunction(a.p.onPaging)&&(e=a.p.onPaging.call(a,c));a.p.selrow=null;if(a.p.multiselect){a.p.selarrrow=[];ca(false)}a.p.savedRow=[];return e=="stop"?false:true},c=c.substr(1),e=e+("_"+c);h="pg_"+c;j=c+"_left";k=c+"_center";l=c+"_right";b("#"+b.jgrid.jqID(c)).append("
      ").attr("dir","ltr");if(a.p.rowList.length>0){g="";g=g+""}i=="rtl"&&(f=f+g);a.p.pginput===true&&(d=""+b.jgrid.format(a.p.pgtext||"","","")+"");if(a.p.pgbuttons===true){j=["first"+e,"prev"+e,"next"+e,"last"+e];i=="rtl"&&j.reverse();f=f+("");f=f+(""); -f=f+(d!==""?""+d+"":"")+("");f=f+("")}else d!==""&&(f=f+d);i=="ltr"&&(f=f+g);f=f+""; -a.p.viewrecords===true&&b("td#"+c+"_"+a.p.recordpos,"#"+h).append("
      ");b("td#"+c+"_"+a.p.pagerpos,"#"+h).append(f);g=b(".ui-jqgrid").css("font-size")||"11px";b(document.body).append("");f=b(f).clone().appendTo("#testpg").width();b("#testpg").remove();if(f>0){d!==""&&(f=f+50);b("td#"+c+"_"+a.p.pagerpos,"#"+ -h).width(f)}a.p._nvtd=[];a.p._nvtd[0]=f?Math.floor((a.p.width-f)/2):Math.floor(a.p.width/3);a.p._nvtd[1]=0;f=null;b(".ui-pg-selbox","#"+h).bind("change",function(){a.p.page=Math.round(a.p.rowNum*(a.p.page-1)/this.value-0.5)+1;a.p.rowNum=this.value;a.p.pager&&b(".ui-pg-selbox",a.p.pager).val(this.value);a.p.toppager&&b(".ui-pg-selbox",a.p.toppager).val(this.value);if(!m("records"))return false;G();return false});if(a.p.pgbuttons===true){b(".ui-pg-button","#"+h).hover(function(){if(b(this).hasClass("ui-state-disabled"))this.style.cursor= -"default";else{b(this).addClass("ui-state-hover");this.style.cursor="pointer"}},function(){if(!b(this).hasClass("ui-state-disabled")){b(this).removeClass("ui-state-hover");this.style.cursor="default"}});b("#first"+b.jgrid.jqID(e)+", #prev"+b.jgrid.jqID(e)+", #next"+b.jgrid.jqID(e)+", #last"+b.jgrid.jqID(e)).click(function(){var b=o(a.p.page,1),c=o(a.p.lastpage,1),d=false,f=true,g=true,h=true,i=true;if(c===0||c===1)i=h=g=f=false;else if(c>1&&b>=1)if(b===1)g=f=false;else{if(b===c)i=h=false}else if(c> -1&&b===0){i=h=false;b=c-1}if(this.id==="first"+e&&f){a.p.page=1;d=true}if(this.id==="prev"+e&&g){a.p.page=b-1;d=true}if(this.id==="next"+e&&h){a.p.page=b+1;d=true}if(this.id==="last"+e&&i){a.p.page=c;d=true}if(d){if(!m(this.id))return false;G()}return false})}a.p.pginput===true&&b("input.ui-pg-input","#"+h).keypress(function(c){if((c.charCode?c.charCode:c.keyCode?c.keyCode:0)==13){a.p.page=b(this).val()>0?b(this).val():a.p.page;if(!m("user"))return false;G();return false}return this})};var ia=function(c, -e,d,f){if(a.p.colModel[e].sortable&&!(a.p.savedRow.length>0)){if(!d){if(a.p.lastsort==e)if(a.p.sortorder=="asc")a.p.sortorder="desc";else{if(a.p.sortorder=="desc")a.p.sortorder="asc"}else a.p.sortorder=a.p.colModel[e].firstsortorder||"asc";a.p.page=1}if(f){if(a.p.lastsort==e&&a.p.sortorder==f&&!d)return;a.p.sortorder=f}d=a.grid.headers[a.p.lastsort].el;f=a.grid.headers[e].el;b("span.ui-grid-ico-sort",d).addClass("ui-state-disabled");b(d).attr("aria-selected","false");b("span.ui-icon-"+a.p.sortorder, -f).removeClass("ui-state-disabled");b(f).attr("aria-selected","true");if(!a.p.viewsortcols[0]&&a.p.lastsort!=e){b("span.s-ico",d).hide();b("span.s-ico",f).show()}c=c.substring(5+a.p.id.length+1);a.p.sortname=a.p.colModel[e].index||c;d=a.p.sortorder;if(b(a).triggerHandler("jqGridSortCol",[c,e,d])==="stop")a.p.lastsort=e;else if(b.isFunction(a.p.onSortCol)&&a.p.onSortCol.call(a,c,e,d)=="stop")a.p.lastsort=e;else{if(a.p.datatype=="local")a.p.deselectAfterSort&&b(a).jqGrid("resetSelection");else{a.p.selrow= -null;a.p.multiselect&&ca(false);a.p.selarrrow=[];a.p.savedRow=[]}if(a.p.scroll){d=a.grid.bDiv.scrollLeft;M.call(a,true,false);a.grid.hDiv.scrollLeft=d}a.p.subGrid&&a.p.datatype=="local"&&b("td.sgexpanded","#"+b.jgrid.jqID(a.p.id)).each(function(){b(this).trigger("click")});G();a.p.lastsort=e;if(a.p.sortname!=c&&e)a.p.lastsort=e}}},na=function(c){var e,d={},f=b.jgrid.cellWidth()?0:a.p.cellLayout;for(e=d[0]=d[1]=d[2]=0;e<=c;e++)a.p.colModel[e].hidden===false&&(d[0]=d[0]+(a.p.colModel[e].width+f));a.p.direction== -"rtl"&&(d[0]=a.p.width-d[0]);d[0]=d[0]-a.grid.bDiv.scrollLeft;b(a.grid.cDiv).is(":visible")&&(d[1]=d[1]+(b(a.grid.cDiv).height()+parseInt(b(a.grid.cDiv).css("padding-top"),10)+parseInt(b(a.grid.cDiv).css("padding-bottom"),10)));if(a.p.toolbar[0]===true&&(a.p.toolbar[1]=="top"||a.p.toolbar[1]=="both"))d[1]=d[1]+(b(a.grid.uDiv).height()+parseInt(b(a.grid.uDiv).css("border-top-width"),10)+parseInt(b(a.grid.uDiv).css("border-bottom-width"),10));a.p.toppager&&(d[1]=d[1]+(b(a.grid.topDiv).height()+parseInt(b(a.grid.topDiv).css("border-bottom-width"), -10)));d[2]=d[2]+(b(a.grid.bDiv).height()+b(a.grid.hDiv).height());return d},ja=function(c){var d,e=a.grid.headers,f=b.jgrid.getCellIndex(c);for(d=0;d"),this.p.colModel.unshift({name:"cb",width:b.jgrid.cellWidth()?a.p.multiselectWidth+ -a.p.cellLayout:a.p.multiselectWidth,sortable:!1,resizable:!1,hidedlg:!0,search:!1,align:"center",fixed:!0}));this.p.rownumbers&&(this.p.colNames.unshift(""),this.p.colModel.unshift({name:"rn",width:a.p.rownumWidth,sortable:!1,resizable:!1,hidedlg:!0,search:!1,align:"center",fixed:!0}));a.p.xmlReader=b.extend(!0,{root:"rows",row:"row",page:"rows>page",total:"rows>total",records:"rows>records",repeatitems:!0,cell:"cell",id:"[id]",userdata:"userdata",subgrid:{root:"rows",row:"row",repeatitems:!0,cell:"cell"}}, -a.p.xmlReader);a.p.jsonReader=b.extend(!0,{root:"rows",page:"page",total:"total",records:"records",repeatitems:!0,cell:"cell",id:"id",userdata:"userdata",subgrid:{root:"rows",repeatitems:!0,cell:"cell"}},a.p.jsonReader);a.p.localReader=b.extend(!0,{root:"rows",page:"page",total:"total",records:"records",repeatitems:!1,cell:"cell",id:"id",userdata:"userdata",subgrid:{root:"rows",repeatitems:!0,cell:"cell"}},a.p.localReader);a.p.scroll&&(a.p.pgbuttons=!1,a.p.pginput=!1,a.p.rowList=[]);a.p.data.length&& -Q();var x="",ka,J,da,aa,ea,A,n,V;J=V="";if(!0===a.p.shrinkToFit&&!0===a.p.forceFit)for(e=a.p.colModel.length-1;0<=e;e--)if(!a.p.colModel[e].hidden){a.p.colModel[e].resizable=!1;break}"horizontal"==a.p.viewsortcols[1]&&(V=" ui-i-asc",J=" ui-i-desc");ka=k?"class='ui-th-div-ie'":"";V="");for(e=0;e",J=a.p.colModel[e].index||a.p.colModel[e].name,x+="
      "+a.p.colNames[e], -a.p.colModel[e].width=a.p.colModel[e].width?parseInt(a.p.colModel[e].width,10):150,"boolean"!==typeof a.p.colModel[e].title&&(a.p.colModel[e].title=!0),J==a.p.sortname&&(a.p.lastsort=e),x+=V+"
      ";V=null;b(this).append(x+"");b("thead tr:first th",this).hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")});if(this.p.multiselect){var fa=[],W;b("#cb_"+b.jgrid.jqID(a.p.id),this).bind("click",function(){a.p.selarrrow=[];var c=a.p.frozenColumns=== -true?a.p.id+"_frozen":"";if(this.checked){b(a.rows).each(function(d){if(d>0&&!b(this).hasClass("ui-subgrid")&&!b(this).hasClass("jqgroup")&&!b(this).hasClass("ui-state-disabled")){b("#jqg_"+b.jgrid.jqID(a.p.id)+"_"+b.jgrid.jqID(this.id))[a.p.useProp?"prop":"attr"]("checked",true);b(this).addClass("ui-state-highlight").attr("aria-selected","true");a.p.selarrrow.push(this.id);a.p.selrow=this.id;if(c){b("#jqg_"+b.jgrid.jqID(a.p.id)+"_"+b.jgrid.jqID(this.id),a.grid.fbDiv)[a.p.useProp?"prop":"attr"]("checked", -true);b("#"+b.jgrid.jqID(this.id),a.grid.fbDiv).addClass("ui-state-highlight")}}});W=true;fa=[]}else{b(a.rows).each(function(d){if(d>0&&!b(this).hasClass("ui-subgrid")&&!b(this).hasClass("ui-state-disabled")){b("#jqg_"+b.jgrid.jqID(a.p.id)+"_"+b.jgrid.jqID(this.id))[a.p.useProp?"prop":"attr"]("checked",false);b(this).removeClass("ui-state-highlight").attr("aria-selected","false");fa.push(this.id);if(c){b("#jqg_"+b.jgrid.jqID(a.p.id)+"_"+b.jgrid.jqID(this.id),a.grid.fbDiv)[a.p.useProp?"prop":"attr"]("checked", -false);b("#"+b.jgrid.jqID(this.id),a.grid.fbDiv).removeClass("ui-state-highlight")}}});a.p.selrow=null;W=false}b(a).triggerHandler("jqGridSelectAll",[W?a.p.selarrrow:fa,W]);b.isFunction(a.p.onSelectAll)&&a.p.onSelectAll.call(a,W?a.p.selarrrow:fa,W)})}!0===a.p.autowidth&&(x=b(m).innerWidth(),a.p.width=00){l=c.width-e*f-m;if(!isNaN(a.p.height)){l=l-i;k=true}d=0;b.each(a.p.colModel,function(b){if(this.hidden===false&&!this.fixed){this.width=j=Math.round(l*this.width/(a.p.tblwidth-e*f-m)); -d=d+j;h=b}});p=0;k?c.width-m-(d+e*f)!==i&&(p=c.width-m-(d+e*f)-i):!k&&Math.abs(c.width-m-(d+e*f))!==1&&(p=c.width-m-(d+e*f));a.p.colModel[h].width=a.p.colModel[h].width+p;a.p.tblwidth=d+p+e*f+m;if(a.p.tblwidth>a.p.width){a.p.colModel[h].width=a.p.colModel[h].width-(a.p.tblwidth-parseInt(a.p.width,10));a.p.tblwidth=a.p.width}}})();b(m).css("width",c.width+"px").append("
       
      ");b(j).css("width",c.width+"px");var x=b("thead:first",a).get(0), -P="";a.p.footerrow&&(P+="");var j=b("tr:first",x),X="";a.p.disableClick=!1;b("th",j).each(function(d){da=a.p.colModel[d].width;if(typeof a.p.colModel[d].resizable==="undefined")a.p.colModel[d].resizable=true;if(a.p.colModel[d].resizable){aa=document.createElement("span"); -b(aa).html(" ").addClass("ui-jqgrid-resize ui-jqgrid-resize-"+i);b.browser.opera||b(aa).css("cursor","col-resize");b(this).addClass(a.p.resizeclass)}else aa="";b(this).css("width",da+"px").prepend(aa);var e="";if(a.p.colModel[d].hidden){b(this).css("display","none");e="display:none;"}X=X+("");c.headers[d]={width:da,el:this};ea=a.p.colModel[d].sortable;if(typeof ea!=="boolean")ea=a.p.colModel[d].sortable=true;e=a.p.colModel[d].name; -e=="cb"||(e=="subgrid"||e=="rn")||a.p.viewsortcols[2]&&b(">div",this).addClass("ui-jqgrid-sortable");if(ea)if(a.p.viewsortcols[0]){b("div span.s-ico",this).show();d==a.p.lastsort&&b("div span.ui-icon-"+a.p.sortorder,this).removeClass("ui-state-disabled")}else if(d==a.p.lastsort){b("div span.s-ico",this).show();b("div span.ui-icon-"+a.p.sortorder,this).removeClass("ui-state-disabled")}a.p.footerrow&&(P=P+(""))}).mousedown(function(d){if(b(d.target).closest("th>span.ui-jqgrid-resize").length== -1){var e=ja(this);if(a.p.forceFit===true){var f=a.p,h=e,i;for(i=e+1;i
       
      ").append(x),D=a.p.caption&&!0===a.p.hiddengrid?!0:!1;e=b("
      ");x=null;c.hDiv=document.createElement("div");b(c.hDiv).css({width:c.width+"px"}).addClass("ui-state-default ui-jqgrid-hdiv").append(e);b(e).append(j);j=null;D&&b(c.hDiv).hide();a.p.pager&&("string"==typeof a.p.pager?"#"!=a.p.pager.substr(0,1)&&(a.p.pager="#"+a.p.pager):a.p.pager="#"+b(a.p.pager).attr("id"),b(a.p.pager).css({width:c.width+"px"}).appendTo(m).addClass("ui-state-default ui-jqgrid-pager ui-corner-bottom"),D&&b(a.p.pager).hide(),l(a.p.pager,""));!1===a.p.cellEdit&&!0===a.p.hoverrows&& -b(a).bind("mouseover",function(a){n=b(a.target).closest("tr.jqgrow");b(n).attr("class")!=="ui-subgrid"&&b(n).addClass("ui-state-hover")}).bind("mouseout",function(a){n=b(a.target).closest("tr.jqgrow");b(n).removeClass("ui-state-hover")});var t,H,ga;b(a).before(c.hDiv).click(function(c){A=c.target;n=b(A,a.rows).closest("tr.jqgrow");if(b(n).length===0||n[0].className.indexOf("ui-state-disabled")>-1||(b(A,a).closest("table.ui-jqgrid-btable").attr("id")||"").replace("_frozen","")!==a.id)return this;var d= -b(A).hasClass("cbox"),e=b(a).triggerHandler("jqGridBeforeSelectRow",[n[0].id,c]);(e=e===false||e==="stop"?false:true)&&b.isFunction(a.p.beforeSelectRow)&&(e=a.p.beforeSelectRow.call(a,n[0].id,c));if(!(A.tagName=="A"||(A.tagName=="INPUT"||A.tagName=="TEXTAREA"||A.tagName=="OPTION"||A.tagName=="SELECT")&&!d)&&e===true){t=n[0].id;H=b.jgrid.getCellIndex(A);ga=b(A).closest("td,th").html();b(a).triggerHandler("jqGridCellSelect",[t,H,ga,c]);b.isFunction(a.p.onCellSelect)&&a.p.onCellSelect.call(a,t,H,ga, -c);if(a.p.cellEdit===true)if(a.p.multiselect&&d)b(a).jqGrid("setSelection",t,true,c);else{t=n[0].rowIndex;try{b(a).jqGrid("editCell",t,H,true)}catch(f){}}else if(a.p.multikey)if(c[a.p.multikey])b(a).jqGrid("setSelection",t,true,c);else{if(a.p.multiselect&&d){d=b("#jqg_"+b.jgrid.jqID(a.p.id)+"_"+t).is(":checked");b("#jqg_"+b.jgrid.jqID(a.p.id)+"_"+t)[a.p.useProp?"prop":"attr"]("checked",d)}}else{if(a.p.multiselect&&a.p.multiboxonly&&!d){var g=a.p.frozenColumns?a.p.id+"_frozen":"";b(a.p.selarrrow).each(function(c, -d){var e=a.rows.namedItem(d);b(e).removeClass("ui-state-highlight");b("#jqg_"+b.jgrid.jqID(a.p.id)+"_"+b.jgrid.jqID(d))[a.p.useProp?"prop":"attr"]("checked",false);if(g){b("#"+b.jgrid.jqID(d),"#"+b.jgrid.jqID(g)).removeClass("ui-state-highlight");b("#jqg_"+b.jgrid.jqID(a.p.id)+"_"+b.jgrid.jqID(d),"#"+b.jgrid.jqID(g))[a.p.useProp?"prop":"attr"]("checked",false)}});a.p.selarrrow=[]}b(a).jqGrid("setSelection",t,true,c)}}}).bind("reloadGrid",function(c,d){if(a.p.treeGrid===true)a.p.datatype=a.p.treedatatype; -d&&d.current&&a.grid.selectionPreserver(a);if(a.p.datatype=="local"){b(a).jqGrid("resetSelection");a.p.data.length&&Q()}else if(!a.p.treeGrid){a.p.selrow=null;if(a.p.multiselect){a.p.selarrrow=[];ca(false)}a.p.savedRow=[]}a.p.scroll&&M.call(a,true,false);if(d&&d.page){var e=d.page;if(e>a.p.lastpage)e=a.p.lastpage;e<1&&(e=1);a.p.page=e;a.grid.bDiv.scrollTop=a.grid.prevRowHeight?(e-1)*a.grid.prevRowHeight*a.p.rowNum:0}if(a.grid.prevRowHeight&&a.p.scroll){delete a.p.lastpage;a.grid.populateVisible()}else a.grid.populate(); -a.p._inlinenav===true&&b(a).jqGrid("showAddEditButtons");return false}).dblclick(function(c){A=c.target;n=b(A,a.rows).closest("tr.jqgrow");if(b(n).length!==0){t=n[0].rowIndex;H=b.jgrid.getCellIndex(A);b(a).triggerHandler("jqGridDblClickRow",[b(n).attr("id"),t,H,c]);b.isFunction(this.p.ondblClickRow)&&a.p.ondblClickRow.call(a,b(n).attr("id"),t,H,c)}}).bind("contextmenu",function(c){A=c.target;n=b(A,a.rows).closest("tr.jqgrow");if(b(n).length!==0){a.p.multiselect||b(a).jqGrid("setSelection",n[0].id, -true,c);t=n[0].rowIndex;H=b.jgrid.getCellIndex(A);b(a).triggerHandler("jqGridRightClickRow",[b(n).attr("id"),t,H,c]);b.isFunction(this.p.onRightClickRow)&&a.p.onRightClickRow.call(a,b(n).attr("id"),t,H,c)}});c.bDiv=document.createElement("div");k&&"auto"===(""+a.p.height).toLowerCase()&&(a.p.height="100%");b(c.bDiv).append(b('
      ').append("
      ").append(this)).addClass("ui-jqgrid-bdiv").css({height:a.p.height+ -(isNaN(a.p.height)?"":"px"),width:c.width+"px"}).scroll(c.scrollGrid);b("table:first",c.bDiv).css({width:a.p.tblwidth+"px"});k?(2==b("tbody",this).length&&b("tbody:gt(0)",this).remove(),a.p.multikey&&b(c.bDiv).bind("selectstart",function(){return false})):a.p.multikey&&b(c.bDiv).bind("mousedown",function(){return false});D&&b(c.bDiv).hide();c.cDiv=document.createElement("div");var ha=!0===a.p.hidegrid?b("").addClass("ui-jqgrid-titlebar-close HeaderButton").hover(function(){ha.addClass("ui-state-hover")}, -function(){ha.removeClass("ui-state-hover")}).append("").css("rtl"==i?"left":"right","0px"):"";b(c.cDiv).append(ha).append(""+a.p.caption+"").addClass("ui-jqgrid-titlebar ui-widget-header ui-corner-top ui-helper-clearfix");b(c.cDiv).insertBefore(c.hDiv);a.p.toolbar[0]&&(c.uDiv=document.createElement("div"),"top"==a.p.toolbar[1]?b(c.uDiv).insertBefore(c.hDiv):"bottom"==a.p.toolbar[1]&& -b(c.uDiv).insertAfter(c.hDiv),"both"==a.p.toolbar[1]?(c.ubDiv=document.createElement("div"),b(c.uDiv).insertBefore(c.hDiv).addClass("ui-userdata ui-state-default").attr("id","t_"+this.id),b(c.ubDiv).insertAfter(c.hDiv).addClass("ui-userdata ui-state-default").attr("id","tb_"+this.id),D&&b(c.ubDiv).hide()):b(c.uDiv).width(c.width).addClass("ui-userdata ui-state-default").attr("id","t_"+this.id),D&&b(c.uDiv).hide());a.p.toppager&&(a.p.toppager=b.jgrid.jqID(a.p.id)+"_toppager",c.topDiv=b("
      ")[0],a.p.toppager="#"+a.p.toppager,b(c.topDiv).insertBefore(c.hDiv).addClass("ui-state-default ui-jqgrid-toppager").width(c.width),l(a.p.toppager,"_t"));a.p.footerrow&&(c.sDiv=b("
      ")[0],e=b("
      "),b(c.sDiv).append(e).insertAfter(c.hDiv).width(c.width),b(e).append(P),c.footers=b(".ui-jqgrid-ftable",c.sDiv)[0].rows[0].cells,a.p.rownumbers&&(c.footers[0].className="ui-state-default jqgrid-rownum"), -D&&b(c.sDiv).hide());e=null;if(a.p.caption){var oa=a.p.datatype;!0===a.p.hidegrid&&(b(".ui-jqgrid-titlebar-close",c.cDiv).click(function(d){var e=b.isFunction(a.p.onHeaderClick),f=".ui-jqgrid-bdiv, .ui-jqgrid-hdiv, .ui-jqgrid-pager, .ui-jqgrid-sdiv",h,i=this;if(a.p.toolbar[0]===true){a.p.toolbar[1]=="both"&&(f=f+(", #"+b(c.ubDiv).attr("id")));f=f+(", #"+b(c.uDiv).attr("id"))}h=b(f,"#gview_"+b.jgrid.jqID(a.p.id)).length;a.p.gridstate=="visible"?b(f,"#gbox_"+b.jgrid.jqID(a.p.id)).slideUp("fast",function(){h--; -if(h===0){b("span",i).removeClass("ui-icon-circle-triangle-n").addClass("ui-icon-circle-triangle-s");a.p.gridstate="hidden";b("#gbox_"+b.jgrid.jqID(a.p.id)).hasClass("ui-resizable")&&b(".ui-resizable-handle","#gbox_"+b.jgrid.jqID(a.p.id)).hide();b(a).triggerHandler("jqGridHeaderClick",[a.p.gridstate,d]);e&&(D||a.p.onHeaderClick.call(a,a.p.gridstate,d))}}):a.p.gridstate=="hidden"&&b(f,"#gbox_"+b.jgrid.jqID(a.p.id)).slideDown("fast",function(){h--;if(h===0){b("span",i).removeClass("ui-icon-circle-triangle-s").addClass("ui-icon-circle-triangle-n"); -if(D){a.p.datatype=oa;G();D=false}a.p.gridstate="visible";b("#gbox_"+b.jgrid.jqID(a.p.id)).hasClass("ui-resizable")&&b(".ui-resizable-handle","#gbox_"+b.jgrid.jqID(a.p.id)).show();b(a).triggerHandler("jqGridHeaderClick",[a.p.gridstate,d]);e&&(D||a.p.onHeaderClick.call(a,a.p.gridstate,d))}});return false}),D&&(a.p.datatype="local",b(".ui-jqgrid-titlebar-close",c.cDiv).trigger("click")))}else b(c.cDiv).hide();b(c.hDiv).after(c.bDiv).mousemove(function(a){if(c.resizing){c.dragMove(a);return false}}); -b(".ui-jqgrid-labels",c.hDiv).bind("selectstart",function(){return false});b(document).mouseup(function(){if(c.resizing){c.dragEnd();return false}return true});a.formatCol=p;a.sortData=ia;a.updatepager=function(c,d){var e,f,g,h,i,j,k,l="",m=a.p.pager?"_"+b.jgrid.jqID(a.p.pager.substr(1)):"",n=a.p.toppager?"_"+a.p.toppager.substr(1):"";g=parseInt(a.p.page,10)-1;g<0&&(g=0);g=g*parseInt(a.p.rowNum,10);i=g+a.p.reccount;if(a.p.scroll){e=b("tbody:first > tr:gt(0)",a.grid.bDiv);g=i-e.length;a.p.reccount= -e.length;if(f=e.outerHeight()||a.grid.prevRowHeight){e=g*f;f=parseInt(a.p.records,10)*f;b(">div:first",a.grid.bDiv).css({height:f}).children("div:first").css({height:e,display:e?"":"none"})}a.grid.bDiv.scrollLeft=a.grid.hDiv.scrollLeft}l=a.p.pager?a.p.pager:"";if(l=l+(a.p.toppager?l?","+a.p.toppager:a.p.toppager:"")){k=b.jgrid.formatter.integer||{};e=o(a.p.page);f=o(a.p.lastpage);b(".selbox",l)[this.p.useProp?"prop":"attr"]("disabled",false);if(a.p.pginput===true){b(".ui-pg-input",l).val(a.p.page); -h=a.p.toppager?"#sp_1"+m+",#sp_1"+n:"#sp_1"+m;b(h).html(b.fmatter?b.fmatter.util.NumberFormat(a.p.lastpage,k):a.p.lastpage)}if(a.p.viewrecords)if(a.p.reccount===0)b(".ui-paging-info",l).html(a.p.emptyrecords);else{h=g+1;j=a.p.records;if(b.fmatter){h=b.fmatter.util.NumberFormat(h,k);i=b.fmatter.util.NumberFormat(i,k);j=b.fmatter.util.NumberFormat(j,k)}b(".ui-paging-info",l).html(b.jgrid.format(a.p.recordtext,h,i,j))}if(a.p.pgbuttons===true){e<=0&&(e=f=0);if(e==1||e===0){b("#first"+m+", #prev"+m).addClass("ui-state-disabled").removeClass("ui-state-hover"); -a.p.toppager&&b("#first_t"+n+", #prev_t"+n).addClass("ui-state-disabled").removeClass("ui-state-hover")}else{b("#first"+m+", #prev"+m).removeClass("ui-state-disabled");a.p.toppager&&b("#first_t"+n+", #prev_t"+n).removeClass("ui-state-disabled")}if(e==f||e===0){b("#next"+m+", #last"+m).addClass("ui-state-disabled").removeClass("ui-state-hover");a.p.toppager&&b("#next_t"+n+", #last_t"+n).addClass("ui-state-disabled").removeClass("ui-state-hover")}else{b("#next"+m+", #last"+m).removeClass("ui-state-disabled"); -a.p.toppager&&b("#next_t"+n+", #last_t"+n).removeClass("ui-state-disabled")}}}c===true&&a.p.rownumbers===true&&b("td.jqgrid-rownum",a.rows).each(function(a){b(this).html(g+1+a)});d&&a.p.jqgdnd&&b(a).jqGrid("gridDnD","updateDnD");b(a).triggerHandler("jqGridGridComplete");b.isFunction(a.p.gridComplete)&&a.p.gridComplete.call(a);b(a).triggerHandler("jqGridAfterGridComplete")};a.refreshIndex=Q;a.setHeadCheckBox=ca;a.constructTr=N;a.formatter=function(a,b,c,d,e){return u(a,b,c,d,e)};b.extend(c,{populate:G, -emptyRows:M});this.grid=c;a.addXmlData=function(b){Z(b,a.grid.bDiv)};a.addJSONData=function(b){$(b,a.grid.bDiv)};this.grid.cols=this.rows[0].cells;G();a.p.hiddengrid=!1}}}})};b.jgrid.extend({getGridParam:function(b){var e=this[0];if(e&&e.grid)return b?"undefined"!=typeof e.p[b]?e.p[b]:null:e.p},setGridParam:function(f){return this.each(function(){this.grid&&"object"===typeof f&&b.extend(!0,this.p,f)})},getDataIDs:function(){var f=[],e=0,c,d=0;this.each(function(){if((c=this.rows.length)&&0=d+h?b(this.grid.bDiv)[0].scrollTop= -i-(d+h)+g+h:i span:first",j).html(i).attr(g):b("td:eq("+a+")",j).html(i).attr(g))}),"local"==h.p.datatype){var m=b.jgrid.stripPref(h.p.idPrefix,f),o=h.p._index[m]; -if(h.p.treeGrid)for(var p in h.p.treeReader)k.hasOwnProperty(h.p.treeReader[p])&&delete k[h.p.treeReader[p]];"undefined"!=typeof o&&(h.p.data[o]=b.extend(!0,h.p.data[o],k));k=null}}catch(v){a=!1}a&&("string"===l?b(j).addClass(c):"object"===l&&b(j).css(c),b(h).triggerHandler("jqGridAfterGridComplete"))});return a},addRowData:function(f,e,c,d){c||(c="last");var a=!1,g,h,i,j,l,k,m,o,p="",v,u,L,E,Y,T;e&&(b.isArray(e)?(v=!0,c="last",u=f):(e=[e],v=!1),this.each(function(){var U=e.length;l=this.p.rownumbers=== -true?1:0;i=this.p.multiselect===true?1:0;j=this.p.subGrid===true?1:0;if(!v)if(typeof f!="undefined")f=f+"";else{f=b.jgrid.randId();if(this.p.keyIndex!==false){u=this.p.colModel[this.p.keyIndex+i+j+l].name;typeof e[0][u]!="undefined"&&(f=e[0][u])}}L=this.p.altclass;for(var M=0,Q="",N={},Z=b.isFunction(this.p.afterInsertRow)?true:false;M0"}if(i){o='';p=this.formatCol(l,1,"",null,f,true);h[h.length]='"+o+""}j&&(h[h.length]=b(this).jqGrid("addSubGridCell",i+l,1));for(m=i+j+l;m"+o+""}h.unshift(this.constructTr(f,false,Q,N,E,false));h[h.length]="";if(this.rows.length===0)b("table:first",this.grid.bDiv).append(h.join(""));else switch(c){case "last":b(this.rows[this.rows.length-1]).after(h.join(""));k=this.rows.length-1;break;case "first":b(this.rows[0]).after(h.join(""));k=1;break;case "after":(k=this.rows.namedItem(d))&&(b(this.rows[k.rowIndex+1]).hasClass("ui-subgrid")?b(this.rows[k.rowIndex+1]).after(h):b(k).after(h.join(""))); -k++;break;case "before":if(k=this.rows.namedItem(d)){b(k).before(h.join(""));k=k.rowIndex}k--}this.p.subGrid===true&&b(this).jqGrid("addSubGrid",i+l,k);this.p.records++;this.p.reccount++;b(this).triggerHandler("jqGridAfterInsertRow",[f,E,E]);Z&&this.p.afterInsertRow.call(this,f,E,E);M++;if(this.p.datatype=="local"){N[this.p.localReader.id]=T;this.p._index[T]=this.p.data.length;this.p.data.push(N);N={}}}this.p.altRows===true&&!v&&(c=="last"?(this.rows.length-1)%2==1&&b(this.rows[this.rows.length-1]).addClass(L): -b(this.rows).each(function(a){a%2==1?b(this).addClass(L):b(this).removeClass(L)}));this.updatepager(true,true);a=true}));return a},footerData:function(f,e,c){function d(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0}var a,g=!1,h={},i;"undefined"==typeof f&&(f="get");"boolean"!=typeof c&&(c=!0);f=f.toLowerCase();this.each(function(){var j=this,l;if(!j.grid||!j.p.footerrow||"set"==f&&d(e))return!1;g=!0;b(this.p.colModel).each(function(d){a=this.name;"set"==f?void 0!==e[a]&&(l=c?j.formatter("", -e[a],d,e,"edit"):e[a],i=this.title?{title:b.jgrid.stripHtml(l)}:{},b("tr.footrow td:eq("+d+")",j.grid.sDiv).html(l).attr(i),g=!0):"get"==f&&(h[a]=b("tr.footrow td:eq("+d+")",j.grid.sDiv).html())})});return"get"==f?h:g},showHideCol:function(f,e){return this.each(function(){var c=this,d=!1,a=b.jgrid.cellWidth()?0:c.p.cellLayout,g;if(c.grid){"string"===typeof f&&(f=[f]);e="none"!=e?"":"none";var h=""===e?!0:!1,i=c.p.groupHeader&&("object"===typeof c.p.groupHeader||b.isFunction(c.p.groupHeader));i&&b(c).jqGrid("destroyGroupHeader", -!1);b(this.p.colModel).each(function(i){if(-1!==b.inArray(this.name,f)&&this.hidden===h){if(!0===c.p.frozenColumns&&!0===this.frozen)return!0;b("tr",c.grid.hDiv).each(function(){b(this.cells[i]).css("display",e)});b(c.rows).each(function(){b(this).hasClass("jqgroup")||b(this.cells[i]).css("display",e)});c.p.footerrow&&b("tr.footrow td:eq("+i+")",c.grid.sDiv).css("display",e);g=parseInt(this.width,10);c.p.tblwidth="none"===e?c.p.tblwidth-(g+a):c.p.tblwidth+(g+a);this.hidden=!h;d=!0;b(c).triggerHandler("jqGridShowHideCol", -[h,this.name,i])}});!0===d&&(!0===c.p.shrinkToFit&&!isNaN(c.p.height)&&(c.p.tblwidth+=parseInt(c.p.scrollOffset,10)),b(c).jqGrid("setGridWidth",!0===c.p.shrinkToFit?c.p.tblwidth:c.p.width));i&&b(c).jqGrid("setGroupHeaders",c.p.groupHeader)}})},hideCol:function(f){return this.each(function(){b(this).jqGrid("showHideCol",f,"none")})},showCol:function(f){return this.each(function(){b(this).jqGrid("showHideCol",f,"")})},remapColumns:function(f,e,c){function d(a){var c;c=a.length?b.makeArray(a):b.extend({}, -a);b.each(f,function(b){a[b]=c[this]})}function a(a,c){b(">tr"+(c||""),a).each(function(){var a=this,c=b.makeArray(a.cells);b.each(f,function(){var b=c[this];b&&a.appendChild(b)})})}var g=this.get(0);d(g.p.colModel);d(g.p.colNames);d(g.grid.headers);a(b("thead:first",g.grid.hDiv),c&&":not(.ui-jqgrid-labels)");e&&a(b("#"+b.jgrid.jqID(g.p.id)+" tbody:first"),".jqgfirstrow, tr.jqgrow, tr.jqfoot");g.p.footerrow&&a(b("tbody:first",g.grid.sDiv));g.p.remapColumns&&(g.p.remapColumns.length?d(g.p.remapColumns): -g.p.remapColumns=b.makeArray(f));g.p.lastsort=b.inArray(g.p.lastsort,f);g.p.treeGrid&&(g.p.expColInd=b.inArray(g.p.expColInd,f));b(g).triggerHandler("jqGridRemapColumns",[f,e,c])},setGridWidth:function(f,e){return this.each(function(){if(this.grid){var c=this,d,a=0,g=b.jgrid.cellWidth()?0:c.p.cellLayout,h,i=0,j=!1,l=c.p.scrollOffset,k,m=0,o=0,p;"boolean"!=typeof e&&(e=c.p.shrinkToFit);if(!isNaN(f)){f=parseInt(f,10);c.grid.width=c.p.width=f;b("#gbox_"+b.jgrid.jqID(c.p.id)).css("width",f+"px");b("#gview_"+ -b.jgrid.jqID(c.p.id)).css("width",f+"px");b(c.grid.bDiv).css("width",f+"px");b(c.grid.hDiv).css("width",f+"px");c.p.pager&&b(c.p.pager).css("width",f+"px");c.p.toppager&&b(c.p.toppager).css("width",f+"px");!0===c.p.toolbar[0]&&(b(c.grid.uDiv).css("width",f+"px"),"both"==c.p.toolbar[1]&&b(c.grid.ubDiv).css("width",f+"px"));c.p.footerrow&&b(c.grid.sDiv).css("width",f+"px");!1===e&&!0===c.p.forceFit&&(c.p.forceFit=!1);if(!0===e){b.each(c.p.colModel,function(){if(this.hidden===false){d=this.widthOrg; -a=a+(d+g);this.fixed?m=m+(d+g):i++;o++}});if(0===i)return;c.p.tblwidth=a;k=f-g*i-m;if(!isNaN(c.p.height)&&(b(c.grid.bDiv)[0].clientHeightf?(j=c.p.tblwidth-parseInt(f,10),c.p.tblwidth=f,d=c.p.colModel[h].width-=j):d=c.p.colModel[h].width;c.grid.headers[h].width=d;c.grid.headers[h].el.style.width=d+"px";v&&(c.grid.cols[h].style.width=d+"px");c.p.footerrow&&(c.grid.footers[h].style.width=d+"px")}c.p.tblwidth&&(b("table:first",c.grid.bDiv).css("width", -c.p.tblwidth+"px"),b("table:first",c.grid.hDiv).css("width",c.p.tblwidth+"px"),c.grid.hDiv.scrollLeft=c.grid.bDiv.scrollLeft,c.p.footerrow&&b("table:first",c.grid.sDiv).css("width",c.p.tblwidth+"px"))}}})},setGridHeight:function(f){return this.each(function(){if(this.grid){var e=b(this.grid.bDiv);e.css({height:f+(isNaN(f)?"":"px")});!0===this.p.frozenColumns&&b("#"+b.jgrid.jqID(this.p.id)+"_frozen").parent().height(e.height()-16);this.p.height=f;this.p.scroll&&this.grid.populateVisible()}})},setCaption:function(f){return this.each(function(){this.p.caption= -f;b("span.ui-jqgrid-title, span.ui-jqgrid-title-rtl",this.grid.cDiv).html(f);b(this.grid.cDiv).show()})},setLabel:function(f,e,c,d){return this.each(function(){var a=-1;if(this.grid&&"undefined"!=typeof f&&(b(this.p.colModel).each(function(b){if(this.name==f)return a=b,!1}),0<=a)){var g=b("tr.ui-jqgrid-labels th:eq("+a+")",this.grid.hDiv);if(e){var h=b(".s-ico",g);b("[id^=jqgh_]",g).empty().html(e).append(h);this.p.colNames[a]=e}c&&("string"===typeof c?b(g).addClass(c):b(g).css(c));"object"===typeof d&& -b(g).attr(d)}})},setCell:function(f,e,c,d,a,g){return this.each(function(){var h=-1,i,j;if(this.grid&&(isNaN(e)?b(this.p.colModel).each(function(a){if(this.name==e)return h=a,!1}):h=parseInt(e,10),0<=h&&(i=this.rows.namedItem(f)))){var l=b("td:eq("+h+")",i);if(""!==c||!0===g)i=this.formatter(f,c,h,i,"edit"),j=this.p.colModel[h].title?{title:b.jgrid.stripHtml(i)}:{},this.p.treeGrid&&0a,d=a+"",e=b.decimalSeparator?b.decimalSeparator:".",g;if(c.fmatter.isNumber(b.decimalPlaces)){var h=b.decimalPlaces,d=Math.pow(10, -h),d=Math.round(a*d)/d+"";g=d.lastIndexOf(".");if(0g?(d+=e,g=d.length-1):"."!==e&&(d=d.replace(".",e));for(;d.length-1-gi&&(b[g]=i+1)),"F"==a[g]&&(i=c.inArray(b[g],k.i18n.monthNames),-1!==i&&11=i?h.y=1900+h.y:0<=i&&69>=i&&(h.y=2E3+h.y);i=new Date(h.y,h.m,h.d,h.h,h.i,h.s,h.u)}f in d.masks?f=d.masks[f]: -f||(f="Y-m-d");a=i.getHours();b=i.getMinutes();h=i.getDate();g=i.getMonth()+1;j=i.getTimezoneOffset();var l=i.getSeconds(),r=i.getMilliseconds(),n=i.getDay(),m=i.getFullYear(),o=(n+6)%7+1,p=(new Date(m,g-1,h)-new Date(m,0,1))/864E5,q={d:e(h),D:k.i18n.dayNames[n],j:h,l:k.i18n.dayNames[n+7],N:o,S:d.S(h),w:n,z:p,W:5>o?Math.floor((p+o-1)/7)+1:Math.floor((p+o-1)/7)||(4>((new Date(m-1,0,1)).getDay()+6)%7?53:52),F:k.i18n.monthNames[g-1+12],m:e(g),M:k.i18n.monthNames[g-1],n:g,t:"?",L:"?",o:"?",Y:m,y:(""+ -m).substring(2),a:12>a?d.AmPm[0]:d.AmPm[1],A:12>a?d.AmPm[2]:d.AmPm[3],B:"?",g:a%12||12,G:a,h:e(a%12||12),H:e(a),i:e(b),s:e(l),u:r,e:"?",I:"?",O:(0'+a+"
      "};c.fn.fmatter.checkbox=function(a,b){var f=c.extend({},b.checkbox),d;void 0!==b.colModel&&!c.fmatter.isUndefined(b.colModel.formatoptions)&&(f=c.extend({},f,b.colModel.formatoptions));d=!0===f.disabled?'disabled="disabled"': -"";if(c.fmatter.isEmpty(a)||c.fmatter.isUndefined(a))a=c.fn.fmatter.defaultFormat(a,f);a=(a+"").toLowerCase();return'a.search(/(false|0|no|off)/i)?" checked='checked' ":"")+' value="'+a+'" offval="no" '+d+"/>"};c.fn.fmatter.link=function(a,b){var f={target:b.target},d="";void 0!==b.colModel&&!c.fmatter.isUndefined(b.colModel.formatoptions)&&(f=c.extend({},f,b.colModel.formatoptions));f.target&&(d="target="+f.target);return!c.fmatter.isEmpty(a)?"'+ -a+"":c.fn.fmatter.defaultFormat(a,b)};c.fn.fmatter.showlink=function(a,b){var f={baseLinkUrl:b.baseLinkUrl,showAction:b.showAction,addParam:b.addParam||"",target:b.target,idName:b.idName},d="";void 0!==b.colModel&&!c.fmatter.isUndefined(b.colModel.formatoptions)&&(f=c.extend({},f,b.colModel.formatoptions));f.target&&(d="target="+f.target);f=f.baseLinkUrl+f.showAction+"?"+f.idName+"="+b.rowId+f.addParam;return c.fmatter.isString(a)||c.fmatter.isNumber(a)?"'+a+"":c.fn.fmatter.defaultFormat(a, -b)};c.fn.fmatter.integer=function(a,b){var f=c.extend({},b.integer);void 0!==b.colModel&&!c.fmatter.isUndefined(b.colModel.formatoptions)&&(f=c.extend({},f,b.colModel.formatoptions));return c.fmatter.isEmpty(a)?f.defaultValue:c.fmatter.util.NumberFormat(a,f)};c.fn.fmatter.number=function(a,b){var f=c.extend({},b.number);void 0!==b.colModel&&!c.fmatter.isUndefined(b.colModel.formatoptions)&&(f=c.extend({},f,b.colModel.formatoptions));return c.fmatter.isEmpty(a)?f.defaultValue:c.fmatter.util.NumberFormat(a, -f)};c.fn.fmatter.currency=function(a,b){var f=c.extend({},b.currency);void 0!==b.colModel&&!c.fmatter.isUndefined(b.colModel.formatoptions)&&(f=c.extend({},f,b.colModel.formatoptions));return c.fmatter.isEmpty(a)?f.defaultValue:c.fmatter.util.NumberFormat(a,f)};c.fn.fmatter.date=function(a,b,f,d){f=c.extend({},b.date);void 0!==b.colModel&&!c.fmatter.isUndefined(b.colModel.formatoptions)&&(f=c.extend({},f,b.colModel.formatoptions));return!f.reformatAfterEdit&&"edit"==d||c.fmatter.isEmpty(a)?c.fn.fmatter.defaultFormat(a, -b):c.fmatter.util.DateFormat(f.srcformat,a,f.newformat,f)};c.fn.fmatter.select=function(a,b){var a=a+"",f=!1,d=[],e,g;c.fmatter.isUndefined(b.colModel.formatoptions)?c.fmatter.isUndefined(b.colModel.editoptions)||(f=b.colModel.editoptions.value,e=void 0===b.colModel.editoptions.separator?":":b.colModel.editoptions.separator,g=void 0===b.colModel.editoptions.delimiter?";":b.colModel.editoptions.delimiter):(f=b.colModel.formatoptions.value,e=void 0===b.colModel.formatoptions.separator?":":b.colModel.formatoptions.separator, -g=void 0===b.colModel.formatoptions.delimiter?";":b.colModel.formatoptions.delimiter);if(f){var h=!0===b.colModel.editoptions.multiple?!0:!1,i=[];h&&(i=a.split(","),i=c.map(i,function(a){return c.trim(a)}));if(c.fmatter.isString(f))for(var j=f.split(g),k=0,l=0;l0)return a}).join(e)),h)-1
      "):f.editbutton&&(g="onclick=jQuery.fn.fmatter.rowactions('"+d+"','"+b.gid+"','edit',"+b.pos+"); onmouseover=jQuery(this).addClass('ui-state-hover'); onmouseout=jQuery(this).removeClass('ui-state-hover') ",e=e+"
      "); -f.delbutton&&(g="onclick=jQuery.fn.fmatter.rowactions('"+d+"','"+b.gid+"','del',"+b.pos+"); onmouseover=jQuery(this).addClass('ui-state-hover'); onmouseout=jQuery(this).removeClass('ui-state-hover'); ",e=e+"
      ");g="onclick=jQuery.fn.fmatter.rowactions('"+d+"','"+b.gid+"','save',"+b.pos+"); onmouseover=jQuery(this).addClass('ui-state-hover'); onmouseout=jQuery(this).removeClass('ui-state-hover'); "; -e=e+"";g="onclick=jQuery.fn.fmatter.rowactions('"+d+"','"+b.gid+"','cancel',"+b.pos+"); onmouseover=jQuery(this).addClass('ui-state-hover'); onmouseout=jQuery(this).removeClass('ui-state-hover'); ";e=e+""; -return"
      "+e+"
      "};c.unformat=function(a,b,f,d){var e,g=b.colModel.formatter,h=b.colModel.formatoptions||{},i=/([\.\*\_\'\(\)\{\}\+\?\\])/g,j=b.colModel.unformat||c.fn.fmatter[g]&&c.fn.fmatter[g].unformat;if("undefined"!==typeof j&&c.isFunction(j))e=j.call(this,c(a).text(),b,a);else if(!c.fmatter.isUndefined(g)&&c.fmatter.isString(g))switch(e=c.jgrid.formatter||{},g){case "integer":h=c.extend({},e.integer,h);b=h.thousandsSeparator.replace(i,"\\$1");b=RegExp(b,"g"); -e=c(a).text().replace(b,"");break;case "number":h=c.extend({},e.number,h);b=h.thousandsSeparator.replace(i,"\\$1");b=RegExp(b,"g");e=c(a).text().replace(b,"").replace(h.decimalSeparator,".");break;case "currency":h=c.extend({},e.currency,h);b=h.thousandsSeparator.replace(i,"\\$1");b=RegExp(b,"g");e=c(a).text();h.prefix&&h.prefix.length&&(e=e.substr(h.prefix.length));h.suffix&&h.suffix.length&&(e=e.substr(0,e.length-h.suffix.length));e=e.replace(b,"").replace(h.decimalSeparator,".");break;case "checkbox":h= -b.colModel.editoptions?b.colModel.editoptions.value.split(":"):["Yes","No"];e=c("input",a).is(":checked")?h[0]:h[1];break;case "select":e=c.unformat.select(a,b,f,d);break;case "actions":return"";default:e=c(a).text()}return void 0!==e?e:!0===d?c(a).text():c.jgrid.htmlDecode(c(a).html())};c.unformat.select=function(a,b,f,d){f=[];a=c(a).text();if(!0===d)return a;var d=c.extend({},!c.fmatter.isUndefined(b.colModel.formatoptions)?b.colModel.formatoptions:b.colModel.editoptions),b=void 0===d.separator? -":":d.separator,e=void 0===d.delimiter?";":d.delimiter;if(d.value){var g=d.value,d=!0===d.multiple?!0:!1,h=[];d&&(h=a.split(","),h=c.map(h,function(a){return c.trim(a)}));if(c.fmatter.isString(g))for(var i=g.split(e),j=0,k=0;k0)return a}).join(b)),d)-1"),g;a.each(c.p.colModel,function(){var i=this,j,q,f,n;q=a("");j=a("
      ");!0===this.hidden&&a(q).css("display","none");this.search=!1===this.search?!1:!0;"undefined"==typeof this.stype&&(this.stype="text");f=a.extend({},this.searchoptions||{});if(this.search)switch(this.stype){case "select":if(n=this.surl||f.dataUrl)a.ajax(a.extend({url:n,dataType:"html",success:function(c){if(f.buildSelect!==void 0)(c=f.buildSelect(c))&&a(j).append(c);else a(j).append(c);f.defaultValue!== -void 0&&a("select",j).val(f.defaultValue);a("select",j).attr({name:i.index||i.name,id:"gs_"+i.name});f.attr&&a("select",j).attr(f.attr);a("select",j).css({width:"100%"});f.dataInit!==void 0&&f.dataInit(a("select",j)[0]);f.dataEvents!==void 0&&d(a("select",j)[0],f.dataEvents);b.autosearch===true&&a("select",j).change(function(){e();return false});c=null}},a.jgrid.ajaxOptions,c.p.ajaxSelectOptions||{}));else{var m,o,k;i.searchoptions?(m=void 0===i.searchoptions.value?"":i.searchoptions.value,o=void 0=== -i.searchoptions.separator?":":i.searchoptions.separator,k=void 0===i.searchoptions.delimiter?";":i.searchoptions.delimiter):i.editoptions&&(m=void 0===i.editoptions.value?"":i.editoptions.value,o=void 0===i.editoptions.separator?":":i.editoptions.separator,k=void 0===i.editoptions.delimiter?";":i.editoptions.delimiter);if(m){n=document.createElement("select");n.style.width="100%";a(n).attr({name:i.index||i.name,id:"gs_"+i.name});var l;if("string"===typeof m){m=m.split(k);for(var p=0;p"),f.attr&&a("input",j).attr(f.attr),void 0!==f.dataInit&&f.dataInit(a("input",j)[0]),void 0!==f.dataEvents&&d(a("input",j)[0],f.dataEvents),!0===b.autosearch&&(b.searchOnEnter?a("input",j).keypress(function(a){if((a.charCode?a.charCode:a.keyCode?a.keyCode:0)==13){e();return false}return this}):a("input",j).keydown(function(a){switch(a.which){case 13:return false; -case 9:case 16:case 37:case 38:case 39:case 40:case 27:break;default:g&&clearTimeout(g);g=setTimeout(function(){e()},500)}}))}a(q).append(j);a(h).append(q)});a("table thead",c.grid.hDiv).append(h);this.ftoolbar=!0;this.triggerToolbar=e;this.clearToolbar=function(d){var j={},g=0,f,d="boolean"!=typeof d?!0:d;a.each(c.p.colModel,function(){var b;this.searchoptions&&void 0!==this.searchoptions.defaultValue&&(b=this.searchoptions.defaultValue);f=this.index||this.name;switch(this.stype){case "select":a("#gs_"+ -a.jgrid.jqID(this.name)+" option",!0===this.frozen&&!0===c.p.frozenColumns?c.grid.fhDiv:c.grid.hDiv).each(function(c){if(c===0)this.selected=true;if(a(this).val()==b){this.selected=true;return false}});if(void 0!==b)j[f]=b,g++;else try{delete c.p.postData[f]}catch(d){}break;case "text":if(a("#gs_"+a.jgrid.jqID(this.name),!0===this.frozen&&!0===c.p.frozenColumns?c.grid.fhDiv:c.grid.hDiv).val(b),void 0!==b)j[f]=b,g++;else try{delete c.p.postData[f]}catch(e){}}});var h=0",{role:"rowheader"}).addClass("ui-jqgrid-labels");h=c.headers;c=0;for(e=h.length;c",{role:"row","aria-hidden":"true"}).addClass("jqg-first-row-header").css("height","auto"):l.empty();var p,r=function(a,b){for(var c=0,d=b.length;c",{role:"rowheader"}).addClass("ui-jqgrid-labels jqg-third-row-header");for(d=0;d", -{role:"gridcell"}).css(g).addClass("ui-first-th-"+this.p.direction).appendTo(l),i.style.width="",g=r(c.name,b.groupHeaders),0<=g){g=b.groupHeaders[g];e=g.numberOfColumns;q=g.titleText;for(g=c=0;g").attr({role:"columnheader"}).addClass("ui-state-default ui-th-column-header ui-th-"+this.p.direction).css({height:"22px","border-top":"0px none"}).html(q);0",{role:"columnheader"}).addClass("ui-state-default ui-th-column-header ui-th-"+this.p.direction).css({display:c.hidden?"none":"","border-top":"0px none"}).insertBefore(j),h.append(i)):(h.append(i),e--);f=a(this).children("thead");f.prepend(l);h.insertAfter(k);o.append(f);b.useColSpanStyle&&(o.find("span.ui-jqgrid-resize").each(function(){var b=a(this).parent();b.is(":visible")&&(this.style.cssText="height: "+b.height()+"px !important; cursor: col-resize;")}), -o.find("div.ui-jqgrid-sortable").each(function(){var b=a(this),c=b.parent();c.is(":visible")&&c.is(":has(span.ui-jqgrid-resize)")&&b.css("top",(c.height()-b.outerHeight())/2+"px")}));p=f.find("tr.jqg-first-row-header");a(this).bind("jqGridResizeStop.setGroupHeaders",function(a,b,c){p.find("th").eq(c).width(b)})})},setFrozenColumns:function(){return this.each(function(){if(this.grid){var b=this,d=b.p.colModel,c=0,e=d.length,h=-1,g=!1;if(!(!0===b.p.subGrid||!0===b.p.treeGrid||!0===b.p.cellEdit||b.p.sortable|| -b.p.scroll||b.p.grouping)){b.p.rownumbers&&c++;for(b.p.multiselect&&c++;c
      '); -b.grid.fbDiv=a('
      ');a("#gview_"+a.jgrid.jqID(b.p.id)).append(b.grid.fhDiv);d=a(".ui-jqgrid-htable","#gview_"+a.jgrid.jqID(b.p.id)).clone(!0);if(b.p.groupHeader){a("tr.jqg-first-row-header, tr.jqg-third-row-header",d).each(function(){a("th:gt("+h+")",this).remove()});var i=-1,j=-1;a("tr.jqg-second-row-header th",d).each(function(){var b=parseInt(a(this).attr("colspan"), -10);b&&(i+=b,j++);if(i===h)return!1});i!==h&&(j=h);a("tr.jqg-second-row-header",d).each(function(){a("th:gt("+j+")",this).remove()})}else a("tr",d).each(function(){a("th:gt("+h+")",this).remove()});a(d).width(1);a(b.grid.fhDiv).append(d).mousemove(function(a){if(b.grid.resizing)return b.grid.dragMove(a),!1});a(b).bind("jqGridResizeStop.setFrozenColumns",function(c,d,e){c=a(".ui-jqgrid-htable",b.grid.fhDiv);a("th:eq("+e+")",c).width(d);c=a(".ui-jqgrid-btable",b.grid.fbDiv);a("tr:first td:eq("+e+")", -c).width(d)});a(b).bind("jqGridOnSortCol.setFrozenColumns",function(c,d){var e=a("tr.ui-jqgrid-labels:last th:eq("+b.p.lastsort+")",b.grid.fhDiv),g=a("tr.ui-jqgrid-labels:last th:eq("+d+")",b.grid.fhDiv);a("span.ui-grid-ico-sort",e).addClass("ui-state-disabled");a(e).attr("aria-selected","false");a("span.ui-icon-"+b.p.sortorder,g).removeClass("ui-state-disabled");a(g).attr("aria-selected","true");!b.p.viewsortcols[0]&&b.p.lastsort!=d&&(a("span.s-ico",e).hide(),a("span.s-ico",g).show())});a("#gview_"+ -a.jgrid.jqID(b.p.id)).append(b.grid.fbDiv);jQuery(b.grid.bDiv).scroll(function(){jQuery(b.grid.fbDiv).scrollTop(jQuery(this).scrollTop())});!0===b.p.hoverrows&&a("#"+a.jgrid.jqID(b.p.id)).unbind("mouseover").unbind("mouseout");a(b).bind("jqGridAfterGridComplete.setFrozenColumns",function(){a("#"+a.jgrid.jqID(b.p.id)+"_frozen").remove();jQuery(b.grid.fbDiv).height(jQuery(b.grid.bDiv).height()-16);var c=a("#"+a.jgrid.jqID(b.p.id)).clone(!0);a("tr",c).each(function(){a("td:gt("+h+")",this).remove()}); -a(c).width(1).attr("id",b.p.id+"_frozen");a(b.grid.fbDiv).append(c);!0===b.p.hoverrows&&(a("tr.jqgrow",c).hover(function(){a(this).addClass("ui-state-hover");a("#"+a.jgrid.jqID(this.id),"#"+a.jgrid.jqID(b.p.id)).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover");a("#"+a.jgrid.jqID(this.id),"#"+a.jgrid.jqID(b.p.id)).removeClass("ui-state-hover")}),a("tr.jqgrow","#"+a.jgrid.jqID(b.p.id)).hover(function(){a(this).addClass("ui-state-hover");a("#"+a.jgrid.jqID(this.id),"#"+a.jgrid.jqID(b.p.id)+ -"_frozen").addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover");a("#"+a.jgrid.jqID(this.id),"#"+a.jgrid.jqID(b.p.id)+"_frozen").removeClass("ui-state-hover")}));c=null});b.p.frozenColumns=!0}}}})},destroyFrozenColumns:function(){return this.each(function(){if(this.grid&&!0===this.p.frozenColumns){a(this.grid.fhDiv).remove();a(this.grid.fbDiv).remove();this.grid.fhDiv=null;this.grid.fbDiv=null;a(this).unbind(".setFrozenColumns");if(!0===this.p.hoverrows){var b;a("#"+a.jgrid.jqID(this.p.id)).bind("mouseover", -function(d){b=a(d.target).closest("tr.jqgrow");"ui-subgrid"!==a(b).attr("class")&&a(b).addClass("ui-state-hover")}).bind("mouseout",function(d){b=a(d.target).closest("tr.jqgrow");a(b).removeClass("ui-state-hover")})}this.p.frozenColumns=!1}})}})})(jQuery); -(function(a){a.extend(a.jgrid,{showModal:function(a){a.w.show()},closeModal:function(a){a.w.hide().attr("aria-hidden","true");a.o&&a.o.remove()},hideModal:function(d,b){b=a.extend({jqm:!0,gb:""},b||{});if(b.onClose){var c=b.onClose(d);if("boolean"==typeof c&&!c)return}if(a.fn.jqm&&!0===b.jqm)a(d).attr("aria-hidden","true").jqmHide();else{if(""!==b.gb)try{a(".jqgrid-overlay:first",b.gb).hide()}catch(f){}a(d).hide().attr("aria-hidden","true")}},findPos:function(a){var b=0,c=0;if(a.offsetParent){do b+= -a.offsetLeft,c+=a.offsetTop;while(a=a.offsetParent)}return[b,c]},createModal:function(d,b,c,f,g,h,i){var c=a.extend(!0,a.jgrid.jqModal||{},c),e=document.createElement("div"),l,j=this,i=a.extend({},i||{});l="rtl"==a(c.gbox).attr("dir")?!0:!1;e.className="ui-widget ui-widget-content ui-corner-all ui-jqdialog";e.id=d.themodal;var k=document.createElement("div");k.className="ui-jqdialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix";k.id=d.modalhead;a(k).append(""+ -c.caption+"");var n=a("").hover(function(){n.addClass("ui-state-hover")},function(){n.removeClass("ui-state-hover")}).append("");a(k).append(n);l?(e.dir="rtl",a(".ui-jqdialog-title",k).css("float","right"),a(".ui-jqdialog-titlebar-close",k).css("left","0.3em")):(e.dir="ltr",a(".ui-jqdialog-title",k).css("float","left"),a(".ui-jqdialog-titlebar-close",k).css("right", -"0.3em"));var m=document.createElement("div");a(m).addClass("ui-jqdialog-content ui-widget-content").attr("id",d.modalcontent);a(m).append(b);e.appendChild(m);a(e).prepend(k);!0===h?a("body").append(e):"string"==typeof h?a(h).append(e):a(e).insertBefore(f);a(e).css(i);"undefined"===typeof c.jqModal&&(c.jqModal=!0);b={};if(a.fn.jqm&&!0===c.jqModal)0===c.left&&(0===c.top&&c.overlay)&&(i=[],i=a.jgrid.findPos(g),c.left=i[0]+4,c.top=i[1]+4),b.top=c.top+"px",b.left=c.left;else if(0!==c.left||0!==c.top)b.left= -c.left,b.top=c.top+"px";a("a.ui-jqdialog-titlebar-close",k).click(function(){var b=a("#"+a.jgrid.jqID(d.themodal)).data("onClose")||c.onClose,e=a("#"+a.jgrid.jqID(d.themodal)).data("gbox")||c.gbox;j.hideModal("#"+a.jgrid.jqID(d.themodal),{gb:e,jqm:c.jqModal,onClose:b});return false});if(0===c.width||!c.width)c.width=300;if(0===c.height||!c.height)c.height=200;c.zIndex||(f=a(f).parents("*[role=dialog]").filter(":first").css("z-index"),c.zIndex=f?parseInt(f,10)+2:950);f=0;l&&(b.left&&!h)&&(f=a(c.gbox).width()- -(!isNaN(c.width)?parseInt(c.width,10):0)-8,b.left=parseInt(b.left,10)+parseInt(f,10));b.left&&(b.left+="px");a(e).css(a.extend({width:isNaN(c.width)?"auto":c.width+"px",height:isNaN(c.height)?"auto":c.height+"px",zIndex:c.zIndex,overflow:"hidden"},b)).attr({tabIndex:"-1",role:"dialog","aria-labelledby":d.modalhead,"aria-hidden":"true"});"undefined"==typeof c.drag&&(c.drag=!0);"undefined"==typeof c.resize&&(c.resize=!0);if(c.drag)if(a(k).css("cursor","move"),a.fn.jqDrag)a(e).jqDrag(k);else try{a(e).draggable({handle:a("#"+ -a.jgrid.jqID(k.id))})}catch(o){}if(c.resize)if(a.fn.jqResize)a(e).append("
      "),a("#"+a.jgrid.jqID(d.themodal)).jqResize(".jqResize",d.scrollelm?"#"+a.jgrid.jqID(d.scrollelm):!1);else try{a(e).resizable({handles:"se, sw",alsoResize:d.scrollelm?"#"+a.jgrid.jqID(d.scrollelm):!1})}catch(p){}!0===c.closeOnEscape&&a(e).keydown(function(b){if(b.which==27){b=a("#"+a.jgrid.jqID(d.themodal)).data("onClose")|| -c.onClose;j.hideModal(this,{gb:c.gbox,jqm:c.jqModal,onClose:b})}})},viewModal:function(d,b){b=a.extend({toTop:!0,overlay:10,modal:!1,overlayClass:"ui-widget-overlay",onShow:a.jgrid.showModal,onHide:a.jgrid.closeModal,gbox:"",jqm:!0,jqM:!0},b||{});if(a.fn.jqm&&!0===b.jqm)b.jqM?a(d).attr("aria-hidden","false").jqm(b).jqmShow():a(d).attr("aria-hidden","false").jqmShow();else{""!==b.gbox&&(a(".jqgrid-overlay:first",b.gbox).show(),a(d).data("gbox",b.gbox));a(d).show().attr("aria-hidden","false");try{a(":input:visible", -d)[0].focus()}catch(c){}}},info_dialog:function(d,b,c,f){var g={width:290,height:"auto",dataheight:"auto",drag:!0,resize:!1,caption:""+d+"",left:250,top:170,zIndex:1E3,jqModal:!0,modal:!1,closeOnEscape:!0,align:"center",buttonalign:"center",buttons:[]};a.extend(g,f||{});var h=g.jqModal,i=this;a.fn.jqm&&!h&&(h=!1);d="";if(0"+g.buttons[f].text+"";f=isNaN(g.dataheight)?g.dataheight:g.dataheight+"px";b="
      "+("
      "+b+"
      ");b+=c?"
      "+ -c+""+d+"
      ":""!==d?"
      "+d+"
      ":"";b+="
      ";try{"false"==a("#info_dialog").attr("aria-hidden")&&a.jgrid.hideModal("#info_dialog",{jqm:h}),a("#info_dialog").remove()}catch(e){}a.jgrid.createModal({themodal:"info_dialog",modalhead:"info_head",modalcontent:"info_content",scrollelm:"infocnt"},b,g,"","",!0);d&&a.each(g.buttons, -function(b){a("#"+a.jgrid.jqID(this.id),"#info_id").bind("click",function(){g.buttons[b].onClick.call(a("#info_dialog"));return!1})});a("#closedialog","#info_id").click(function(){i.hideModal("#info_dialog",{jqm:h});return!1});a(".fm-button","#info_dialog").hover(function(){a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")});a.isFunction(g.beforeOpen)&&g.beforeOpen();a.jgrid.viewModal("#info_dialog",{onHide:function(a){a.w.hide().remove();a.o&&a.o.remove()},modal:g.modal, -jqm:h});a.isFunction(g.afterOpen)&&g.afterOpen();try{a("#info_dialog").focus()}catch(l){}},createEl:function(d,b,c,f,g){function h(b,d){a.isFunction(d.dataInit)&&d.dataInit.call(l,b);d.dataEvents&&a.each(d.dataEvents,function(){void 0!==this.data?a(b).bind(this.type,this.data,this.fn):a(b).bind(this.type,this.fn)});return d}function i(b,d,c){var e="dataInit dataEvents dataUrl buildSelect sopt searchhidden defaultValue attr".split(" ");"undefined"!=typeof c&&a.isArray(c)&&a.merge(e,c);a.each(d,function(d, -c){-1===a.inArray(d,e)&&a(b).attr(d,c)});d.hasOwnProperty("id")||a(b).attr("id",a.jgrid.randId())}var e="",l=this;switch(d){case "textarea":e=document.createElement("textarea");f?b.cols||a(e).css({width:"98%"}):b.cols||(b.cols=20);b.rows||(b.rows=2);if(" "==c||" "==c||1==c.length&&160==c.charCodeAt(0))c="";e.value=c;i(e,b);b=h(e,b);a(e).attr({role:"textbox",multiline:"true"});break;case "checkbox":e=document.createElement("input");e.type="checkbox";b.value?(d=b.value.split(":"),c===d[0]&& -(e.checked=!0,e.defaultChecked=!0),e.value=d[0],a(e).attr("offval",d[1])):(d=c.toLowerCase(),0>d.search(/(false|0|no|off|undefined)/i)&&""!==d?(e.checked=!0,e.defaultChecked=!0,e.value=c):e.value="on",a(e).attr("offval","off"));i(e,b,["value"]);b=h(e,b);a(e).attr("role","checkbox");break;case "select":e=document.createElement("select");e.setAttribute("role","select");f=[];!0===b.multiple?(d=!0,e.multiple="multiple",a(e).attr("aria-multiselectable","true")):d=!1;if("undefined"!=typeof b.dataUrl)a.ajax(a.extend({url:b.dataUrl, -type:"GET",dataType:"html",context:{elem:e,options:b,vl:c},success:function(d){var b=[],c=this.elem,e=this.vl,f=a.extend({},this.options),g=f.multiple===true;a.isFunction(f.buildSelect)&&(d=f.buildSelect.call(l,d));if(d=a(d).html()){a(c).append(d);i(c,f);f=h(c,f);if(typeof f.size==="undefined")f.size=g?3:1;if(g){b=e.split(",");b=a.map(b,function(b){return a.trim(b)})}else b[0]=a.trim(e);setTimeout(function(){a("option",c).each(function(d){if(d===0&&c.multiple)this.selected=false;a(this).attr("role", -"option");if(a.inArray(a.trim(a(this).text()),b)>-1||a.inArray(a.trim(a(this).val()),b)>-1)this.selected="selected"})},0)}}},g||{}));else if(b.value){var j;"undefined"===typeof b.size&&(b.size=d?3:1);d&&(f=c.split(","),f=a.map(f,function(b){return a.trim(b)}));"function"===typeof b.value&&(b.value=b.value());var k,n,m=void 0===b.separator?":":b.separator,g=void 0===b.delimiter?";":b.delimiter;if("string"===typeof b.value){k=b.value.split(g);for(j=0;j0)return a}).join(m));g=document.createElement("option");g.setAttribute("role","option");g.value=n[0];g.innerHTML=n[1];e.appendChild(g);if(!d&&(a.trim(n[0])==a.trim(c)||a.trim(n[1])==a.trim(c)))g.selected="selected";if(d&&(-1l.length||(1>c[a[i]]||12l.length||1>c[a[h]]||31(0===c[a[f]]%4&&(0!==c[a[f]]%100||0===c[a[f]]%400)?29:28)||c[a[h]]>e[c[a[i]]]? -!1:!0},isEmpty:function(a){return a.match(/^\s+$/)||""===a?!0:!1},checkTime:function(d){var b=/^(\d{1,2}):(\d{2})([ap]m)?$/;if(!a.jgrid.isEmpty(d))if(d=d.match(b)){if(d[3]){if(1>d[1]||12parseFloat(h.maxValue))return[!1,i+": "+a.jgrid.edit.msg.maxValue+" "+h.maxValue,""];if(!0===h.email&&!(!1===f&&a.jgrid.isEmpty(d))&&(g=/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, -!g.test(d)))return[!1,i+": "+a.jgrid.edit.msg.email,""];if(!0===h.integer&&!(!1===f&&a.jgrid.isEmpty(d))&&(isNaN(d)||0!==d%1||-1!=d.indexOf(".")))return[!1,i+": "+a.jgrid.edit.msg.integer,""];if(!0===h.date&&!(!1===f&&a.jgrid.isEmpty(d))&&(b=c.p.colModel[b].formatoptions&&c.p.colModel[b].formatoptions.newformat?c.p.colModel[b].formatoptions.newformat:c.p.colModel[b].datefmt||"Y-m-d",!a.jgrid.checkDate(b,d)))return[!1,i+": "+a.jgrid.edit.msg.date+" - "+b,""];if(!0===h.time&&!(!1===f&&a.jgrid.isEmpty(d))&& -!a.jgrid.checkTime(d))return[!1,i+": "+a.jgrid.edit.msg.date+" - hh:mm (am/pm)",""];if(!0===h.url&&!(!1===f&&a.jgrid.isEmpty(d))&&(g=/^(((https?)|(ftp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i,!g.test(d)))return[!1,i+": "+a.jgrid.edit.msg.url,""];if(!0===h.custom&&!(!1===f&&a.jgrid.isEmpty(d)))return a.isFunction(h.custom_func)?(d=h.custom_func.call(c,d,i),a.isArray(d)?d:[!1,a.jgrid.edit.msg.customarray,""]):[!1,a.jgrid.edit.msg.customfcheck, -""]}return[!0,"",""]}})})(jQuery); -(function(a){var c={};a.jgrid.extend({searchGrid:function(c){c=a.extend({recreateFilter:!1,drag:!0,sField:"searchField",sValue:"searchString",sOper:"searchOper",sFilter:"filters",loadDefaults:!0,beforeShowSearch:null,afterShowSearch:null,onInitializeSearch:null,afterRedraw:null,afterChange:null,closeAfterSearch:!1,closeAfterReset:!1,closeOnEscape:!1,searchOnEnter:!1,multipleSearch:!1,multipleGroup:!1,top:0,left:0,jqModal:!0,modal:!1,resize:!0,width:450,height:"auto",dataheight:"auto",showQuery:!1, -errorcheck:!0,sopt:null,stringResult:void 0,onClose:null,onSearch:null,onReset:null,toTop:!0,overlay:30,columns:[],tmplNames:null,tmplFilters:null,tmplLabel:" Template: ",showOnLoad:!1,layer:null},a.jgrid.search,c||{});return this.each(function(){function d(b){r=a(e).triggerHandler("jqGridFilterBeforeShow",[b]);"undefined"===typeof r&&(r=!0);r&&a.isFunction(c.beforeShowSearch)&&(r=c.beforeShowSearch.call(e,b));r&&(a.jgrid.viewModal("#"+a.jgrid.jqID(u.themodal),{gbox:"#gbox_"+a.jgrid.jqID(n),jqm:c.jqModal, -modal:c.modal,overlay:c.overlay,toTop:c.toTop}),a(e).triggerHandler("jqGridFilterAfterShow",[b]),a.isFunction(c.afterShowSearch)&&c.afterShowSearch.call(e,b))}var e=this;if(e.grid){var n="fbox_"+e.p.id,r=!0,u={themodal:"searchmod"+n,modalhead:"searchhd"+n,modalcontent:"searchcnt"+n,scrollelm:n},t=e.p.postData[c.sFilter];"string"===typeof t&&(t=a.jgrid.parse(t));!0===c.recreateFilter&&a("#"+a.jgrid.jqID(u.themodal)).remove();if(void 0!==a("#"+a.jgrid.jqID(u.themodal))[0])d(a("#fbox_"+a.jgrid.jqID(+e.p.id))); -else{var l=a("
      ").insertBefore("#gview_"+a.jgrid.jqID(e.p.id)),g="left",f="";"rtl"==e.p.direction&&(g="right",f=" style='text-align:left'",l.attr("dir","rtl"));var p=a.extend([],e.p.colModel),w=""+c.Find+"",b=""+ -c.Reset+"",s="",h="",j,i=!1,q=-1;c.showQuery&&(s="Query");c.columns.length?p=c.columns:a.each(p,function(a,b){if(!b.label)b.label=e.p.colNames[a];if(!i){var c=typeof b.search==="undefined"?true:b.search,d=b.hidden===true;if(b.searchoptions&&b.searchoptions.searchhidden===true&&c||c&&!d){i=true;j=b.index||b.name;q=a}}});if(!t&&j||!1=== -c.multipleSearch){var y="eq";0<=q&&p[q].searchoptions&&p[q].searchoptions.sopt?y=p[q].searchoptions.sopt[0]:c.sopt&&c.sopt.length&&(y=c.sopt[0]);t={groupOp:"AND",rules:[{field:j,op:y,data:""}]}}i=!1;c.tmplNames&&c.tmplNames.length&&(i=!0,h=c.tmplLabel,h+="");g="

      "+b+h+""+s+w+"
      ";n=a.jgrid.jqID(n);a("#"+n).jqFilter({columns:p,filter:c.loadDefaults?t:null,showQuery:c.showQuery,errorcheck:c.errorcheck,sopt:c.sopt,groupButton:c.multipleGroup,ruleButtons:c.multipleSearch,afterRedraw:c.afterRedraw,_gridsopt:a.jgrid.search.odata,ajaxSelectOptions:e.p.ajaxSelectOptions, -groupOps:c.groupOps,onChange:function(){this.p.showQuery&&a(".query",this).html(this.toUserFriendlyString());a.isFunction(c.afterChange)&&c.afterChange.call(e,a("#"+n),c)},direction:e.p.direction});l.append(g);i&&(c.tmplFilters&&c.tmplFilters.length)&&a(".ui-template",l).bind("change",function(){var b=a(this).val();b=="default"?a("#"+n).jqFilter("addFilter",t):a("#"+n).jqFilter("addFilter",c.tmplFilters[parseInt(b,10)]);return false});!0===c.multipleGroup&&(c.multipleSearch=!0);a(e).triggerHandler("jqGridFilterInitialize", -[a("#"+n)]);a.isFunction(c.onInitializeSearch)&&c.onInitializeSearch.call(e,a("#"+n));c.gbox="#gbox_"+n;c.layer?a.jgrid.createModal(u,l,c,"#gview_"+a.jgrid.jqID(e.p.id),a("#gbox_"+a.jgrid.jqID(e.p.id))[0],"#"+a.jgrid.jqID(c.layer),{position:"relative"}):a.jgrid.createModal(u,l,c,"#gview_"+a.jgrid.jqID(e.p.id),a("#gbox_"+a.jgrid.jqID(e.p.id))[0]);(c.searchOnEnter||c.closeOnEscape)&&a("#"+a.jgrid.jqID(u.themodal)).keydown(function(b){var d=a(b.target);if(c.searchOnEnter&&b.which===13&&!d.hasClass("add-group")&& -!d.hasClass("add-rule")&&!d.hasClass("delete-group")&&!d.hasClass("delete-rule")&&(!d.hasClass("fm-button")||!d.is("[id$=_query]"))){a("#"+n+"_search").focus().click();return false}if(c.closeOnEscape&&b.which===27){a("#"+a.jgrid.jqID(u.modalhead)).find(".ui-jqdialog-titlebar-close").focus().click();return false}});s&&a("#"+n+"_query").bind("click",function(){a(".queryresult",l).toggle();return false});void 0===c.stringResult&&(c.stringResult=c.multipleSearch);a("#"+n+"_search").bind("click",function(){var b= -a("#"+n),d={},h,f=b.jqFilter("filterData");if(c.errorcheck){b[0].hideError();c.showQuery||b.jqFilter("toSQLString");if(b[0].p.error){b[0].showError();return false}}if(c.stringResult){try{h=xmlJsonClass.toJson(f,"","",false)}catch(g){try{h=JSON.stringify(f)}catch(j){}}if(typeof h==="string"){d[c.sFilter]=h;a.each([c.sField,c.sValue,c.sOper],function(){d[this]=""})}}else if(c.multipleSearch){d[c.sFilter]=f;a.each([c.sField,c.sValue,c.sOper],function(){d[this]=""})}else{d[c.sField]=f.rules[0].field; -d[c.sValue]=f.rules[0].data;d[c.sOper]=f.rules[0].op;d[c.sFilter]=""}e.p.search=true;a.extend(e.p.postData,d);a(e).triggerHandler("jqGridFilterSearch");a.isFunction(c.onSearch)&&c.onSearch.call(e);a(e).trigger("reloadGrid",[{page:1}]);c.closeAfterSearch&&a.jgrid.hideModal("#"+a.jgrid.jqID(u.themodal),{gb:"#gbox_"+a.jgrid.jqID(e.p.id),jqm:c.jqModal,onClose:c.onClose});return false});a("#"+n+"_reset").bind("click",function(){var b={},d=a("#"+n);e.p.search=false;c.multipleSearch===false?b[c.sField]= -b[c.sValue]=b[c.sOper]="":b[c.sFilter]="";d[0].resetFilter();i&&a(".ui-template",l).val("default");a.extend(e.p.postData,b);a(e).triggerHandler("jqGridFilterReset");a.isFunction(c.onReset)&&c.onReset.call(e);a(e).trigger("reloadGrid",[{page:1}]);return false});d(a("#"+n));a(".fm-button:not(.ui-state-disabled)",l).hover(function(){a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")})}}})},editGridRow:function(o,d){d=a.extend({top:0,left:0,width:300,height:"auto",dataheight:"auto", -modal:!1,overlay:30,drag:!0,resize:!0,url:null,mtype:"POST",clearAfterAdd:!0,closeAfterEdit:!1,reloadAfterSubmit:!0,onInitializeForm:null,beforeInitData:null,beforeShowForm:null,afterShowForm:null,beforeSubmit:null,afterSubmit:null,onclickSubmit:null,afterComplete:null,onclickPgButtons:null,afterclickPgButtons:null,editData:{},recreateForm:!1,jqModal:!0,closeOnEscape:!1,addedrow:"first",topinfo:"",bottominfo:"",saveicon:[],closeicon:[],savekey:[!1,13],navkeys:[!1,38,40],checkOnSubmit:!1,checkOnUpdate:!1, -_savedData:{},processing:!1,onClose:null,ajaxEditOptions:{},serializeEditData:null,viewPagerButtons:!0},a.jgrid.edit,d||{});c[a(this)[0].p.id]=d;return this.each(function(){function e(){a(i+" > tbody > tr > td > .FormElement").each(function(){var c=a(".customelement",this);if(c.length){var d=a(c[0]).attr("name");a.each(b.p.colModel,function(){if(this.name===d&&this.editoptions&&a.isFunction(this.editoptions.custom_value)){try{if(k[d]=this.editoptions.custom_value.call(b,a("#"+a.jgrid.jqID(d),i),"get"), -void 0===k[d])throw"e1";}catch(c){"e1"===c?a.jgrid.info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_value' "+a.jgrid.edit.msg.novalue,jQuery.jgrid.edit.bClose):a.jgrid.info_dialog(jQuery.jgrid.errors.errcap,c.message,jQuery.jgrid.edit.bClose)}return!0}})}else{switch(a(this).get(0).type){case "checkbox":a(this).is(":checked")?k[this.name]=a(this).val():(c=a(this).attr("offval"),k[this.name]=c);break;case "select-one":k[this.name]=a("option:selected",this).val();B[this.name]=a("option:selected", -this).text();break;case "select-multiple":k[this.name]=a(this).val();k[this.name]=k[this.name]?k[this.name].join(","):"";var e=[];a("option:selected",this).each(function(b,c){e[b]=a(c).text()});B[this.name]=e.join(",");break;case "password":case "text":case "textarea":case "button":k[this.name]=a(this).val()}b.p.autoencode&&(k[this.name]=a.jgrid.htmlEncode(k[this.name]))}});return!0}function n(d,e,h,k){var f,g,m,j=0,i,q,l,n=[],v=!1,p="",o;for(o=1;o<=k;o++)p+="  "; -"_empty"!=d&&(v=a(e).jqGrid("getInd",d));a(e.p.colModel).each(function(o){f=this.name;q=(g=this.editrules&&!0===this.editrules.edithidden?!1:!0===this.hidden?!0:!1)?"style='display:none'":"";if("cb"!==f&&"subgrid"!==f&&!0===this.editable&&"rn"!==f){if(!1===v)i="";else if(f==e.p.ExpandColumn&&!0===e.p.treeGrid)i=a("td:eq("+o+")",e.rows[v]).text();else{try{i=a.unformat.call(e,a("td:eq("+o+")",e.rows[v]),{rowId:d,colModel:this},o)}catch(s){i=this.edittype&&"textarea"==this.edittype?a("td:eq("+o+")", -e.rows[v]).text():a("td:eq("+o+")",e.rows[v]).html()}if(!i||" "==i||" "==i||1==i.length&&160==i.charCodeAt(0))i=""}var r=a.extend({},this.editoptions||{},{id:f,name:f}),t=a.extend({},{elmprefix:"",elmsuffix:"",rowabove:!1,rowcontent:""},this.formoptions||{}),u=parseInt(t.rowpos,10)||j+1,y=parseInt(2*(parseInt(t.colpos,10)||1),10);"_empty"==d&&r.defaultValue&&(i=a.isFunction(r.defaultValue)?r.defaultValue.call(b):r.defaultValue);this.edittype||(this.edittype="text");b.p.autoencode&&(i=a.jgrid.htmlDecode(i)); -l=a.jgrid.createEl.call(b,this.edittype,r,i,!1,a.extend({},a.jgrid.ajaxOptions,e.p.ajaxSelectOptions||{}));""===i&&"checkbox"==this.edittype&&(i=a(l).attr("offval"));""===i&&"select"==this.edittype&&(i=a("option:eq(0)",l).text());if(c[b.p.id].checkOnSubmit||c[b.p.id].checkOnUpdate)c[b.p.id]._savedData[f]=i;a(l).addClass("FormElement");("text"==this.edittype||"textarea"==this.edittype)&&a(l).addClass("ui-widget-content ui-corner-all");m=a(h).find("tr[rowpos="+u+"]");t.rowabove&&(r=a(""+t.rowcontent+""),a(h).append(r),r[0].rp=u);0===m.length&&(m=a("").addClass("FormData").attr("id","tr_"+f),a(m).append(p),a(h).append(m),m[0].rp=u);a("td:eq("+(y-2)+")",m[0]).html("undefined"===typeof t.label?e.p.colNames[o]:t.label);a("td:eq("+(y-1)+")",m[0]).append(t.elmprefix).append(l).append(t.elmsuffix);n[j]=o;j++}});if(0
      ").append(G).append(j);a.jgrid.createModal(q, -j,d,"#gview_"+a.jgrid.jqID(b.p.id),a("#gbox_"+a.jgrid.jqID(b.p.id))[0]);x&&(a("#pData, #nData",i+"_2").css("float","right"),a(".EditButton",i+"_2").css("text-align","left"));c[b.p.id].topinfo&&a(".tinfo",i).show();c[b.p.id].bottominfo&&a(".binfo",i+"_2").show();j=j=null;a("#"+a.jgrid.jqID(q.themodal)).keydown(function(e){var f=e.target;if(a("#"+h).data("disabled")===true)return false;if(c[b.p.id].savekey[0]===true&&e.which==c[b.p.id].savekey[1]&&f.tagName!="TEXTAREA"){a("#sData",i+"_2").trigger("click"); -return false}if(e.which===27){if(!g())return false;N&&a.jgrid.hideModal(this,{gb:d.gbox,jqm:d.jqModal,onClose:c[b.p.id].onClose});return false}if(c[b.p.id].navkeys[0]===true){if(a("#id_g",i).val()=="_empty")return true;if(e.which==c[b.p.id].navkeys[1]){a("#pData",i+"_2").trigger("click");return false}if(e.which==c[b.p.id].navkeys[2]){a("#nData",i+"_2").trigger("click");return false}}});d.checkOnUpdate&&(a("a.ui-jqdialog-titlebar-close span","#"+a.jgrid.jqID(q.themodal)).removeClass("jqmClose"),a("a.ui-jqdialog-titlebar-close", -"#"+a.jgrid.jqID(q.themodal)).unbind("click").click(function(){if(!g())return false;a.jgrid.hideModal("#"+a.jgrid.jqID(q.themodal),{gb:"#gbox_"+a.jgrid.jqID(s),jqm:d.jqModal,onClose:c[b.p.id].onClose});return false}));d.saveicon=a.extend([!0,"left","ui-icon-disk"],d.saveicon);d.closeicon=a.extend([!0,"left","ui-icon-close"],d.closeicon);!0===d.saveicon[0]&&a("#sData",i+"_2").addClass("right"==d.saveicon[1]?"fm-button-icon-right":"fm-button-icon-left").append("");!0===d.closeicon[0]&&a("#cData",i+"_2").addClass("right"==d.closeicon[1]?"fm-button-icon-right":"fm-button-icon-left").append("");if(c[b.p.id].checkOnSubmit||c[b.p.id].checkOnUpdate)J=""+d.bYes+"",D=""+d.bNo+"",K=""+ -d.bExit+"",j=d.zIndex||999,j++,a("
      "+d.saveData+"

      "+J+D+K+"
      ").insertAfter("#"+h),a("#sNew","#"+a.jgrid.jqID(q.themodal)).click(function(){t(); -a("#"+h).data("disabled",false);a(".confirm","#"+a.jgrid.jqID(q.themodal)).hide();return false}),a("#nNew","#"+a.jgrid.jqID(q.themodal)).click(function(){a(".confirm","#"+a.jgrid.jqID(q.themodal)).hide();a("#"+h).data("disabled",false);setTimeout(function(){a(":input","#"+h)[0].focus()},0);return false}),a("#cNew","#"+a.jgrid.jqID(q.themodal)).click(function(){a(".confirm","#"+a.jgrid.jqID(q.themodal)).hide();a("#"+h).data("disabled",false);a.jgrid.hideModal("#"+a.jgrid.jqID(q.themodal),{gb:"#gbox_"+ -a.jgrid.jqID(s),jqm:d.jqModal,onClose:c[b.p.id].onClose});return false});a(b).triggerHandler("jqGridAddEditInitializeForm",[a("#"+h),z]);m&&m.call(b,a("#"+h));"_empty"==o||!c[b.p.id].viewPagerButtons?a("#pData,#nData",i+"_2").hide():a("#pData,#nData",i+"_2").show();a(b).triggerHandler("jqGridAddEditBeforeShowForm",[a("#"+h),z]);y&&y.call(b,a("#"+h));a("#"+a.jgrid.jqID(q.themodal)).data("onClose",c[b.p.id].onClose);a.jgrid.viewModal("#"+a.jgrid.jqID(q.themodal),{gbox:"#gbox_"+a.jgrid.jqID(s),jqm:d.jqModal, -overlay:d.overlay,modal:d.modal});I||a(".jqmOverlay").click(function(){if(!g())return false;a.jgrid.hideModal("#"+a.jgrid.jqID(q.themodal),{gb:"#gbox_"+a.jgrid.jqID(s),jqm:d.jqModal,onClose:c[b.p.id].onClose});return false});a(b).triggerHandler("jqGridAddEditAfterShowForm",[a("#"+h),z]);A&&A.call(b,a("#"+h));a(".fm-button","#"+a.jgrid.jqID(q.themodal)).hover(function(){a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")});a("#sData",i+"_2").click(function(){k={};B= -{};a("#FormError",i).hide();e();if(k[b.p.id+"_id"]=="_empty")t();else if(d.checkOnSubmit===true){F=a.extend({},k,B);if(M=l(F,c[b.p.id]._savedData)){a("#"+h).data("disabled",true);a(".confirm","#"+a.jgrid.jqID(q.themodal)).show()}else t()}else t();return false});a("#cData",i+"_2").click(function(){if(!g())return false;a.jgrid.hideModal("#"+a.jgrid.jqID(q.themodal),{gb:"#gbox_"+a.jgrid.jqID(s),jqm:d.jqModal,onClose:c[b.p.id].onClose});return false});a("#nData",i+"_2").click(function(){if(!g())return false; -a("#FormError",i).hide();var c=w();c[0]=parseInt(c[0],10);if(c[0]!=-1&&c[1][c[0]+1]){a(b).triggerHandler("jqGridAddEditClickPgButtons",["next",a("#"+h),c[1][c[0]]]);var e=true;if(a.isFunction(d.onclickPgButtons)){e=d.onclickPgButtons.call(b,"next",a("#"+h),c[1][c[0]]);if(e!==void 0&&e===false)return false}if(a("#"+a.jgrid.jqID(c[1][c[0]+1])).hasClass("ui-state-disabled"))return false;r(c[1][c[0]+1],b,h);a(b).jqGrid("setSelection",c[1][c[0]+1]);a(b).triggerHandler("jqGridAddEditAfterClickPgButtons", -["next",a("#"+h),c[1][c[0]]]);a.isFunction(d.afterclickPgButtons)&&d.afterclickPgButtons.call(b,"next",a("#"+h),c[1][c[0]+1]);p(c[0]+1,c[1].length-1)}return false});a("#pData",i+"_2").click(function(){if(!g())return false;a("#FormError",i).hide();var c=w();if(c[0]!=-1&&c[1][c[0]-1]){a(b).triggerHandler("jqGridAddEditClickPgButtons",["prev",a("#"+h),c[1][c[0]]]);var e=true;if(a.isFunction(d.onclickPgButtons)){e=d.onclickPgButtons.call(b,"prev",a("#"+h),c[1][c[0]]);if(e!==void 0&&e===false)return false}if(a("#"+ -a.jgrid.jqID(c[1][c[0]-1])).hasClass("ui-state-disabled"))return false;r(c[1][c[0]-1],b,h);a(b).jqGrid("setSelection",c[1][c[0]-1]);a(b).triggerHandler("jqGridAddEditAfterClickPgButtons",["prev",a("#"+h),c[1][c[0]]]);a.isFunction(d.afterclickPgButtons)&&d.afterclickPgButtons.call(b,"prev",a("#"+h),c[1][c[0]-1]);p(c[0]-1,c[1].length-1)}return false})}y=w();p(y[0],y[1].length-1)}})},viewGridRow:function(o,d){d=a.extend({top:0,left:0,width:0,height:"auto",dataheight:"auto",modal:!1,overlay:30,drag:!0, -resize:!0,jqModal:!0,closeOnEscape:!1,labelswidth:"30%",closeicon:[],navkeys:[!1,38,40],onClose:null,beforeShowForm:null,beforeInitData:null,viewPagerButtons:!0},a.jgrid.view,d||{});c[a(this)[0].p.id]=d;return this.each(function(){function e(){(!0===c[l.p.id].closeOnEscape||!0===c[l.p.id].navkeys[0])&&setTimeout(function(){a(".ui-jqdialog-titlebar-close","#"+a.jgrid.jqID(s.modalhead)).focus()},0)}function n(b,c,e,f){for(var g,h,j,i=0,o,q,l=[],n=!1,p="  ",r="",t=["integer","number","currency"],s=0,u=0,y,x,w,A=1;A<=f;A++)r+=1==A?p:"  ";a(c.p.colModel).each(function(){h=this.editrules&&!0===this.editrules.edithidden?!1:!0===this.hidden?!0:!1;!h&&"right"===this.align&&(this.formatter&&-1!==a.inArray(this.formatter,t)? -s=Math.max(s,parseInt(this.width,10)):u=Math.max(u,parseInt(this.width,10)))});y=0!==s?s:0!==u?u:0;n=a(c).jqGrid("getInd",b);a(c.p.colModel).each(function(b){g=this.name;x=!1;q=(h=this.editrules&&!0===this.editrules.edithidden?!1:!0===this.hidden?!0:!1)?"style='display:none'":"";w="boolean"!=typeof this.viewable?!0:this.viewable;if("cb"!==g&&"subgrid"!==g&&"rn"!==g&&w){o=!1===n?"":g==c.p.ExpandColumn&&!0===c.p.treeGrid?a("td:eq("+b+")",c.rows[n]).text():a("td:eq("+b+")",c.rows[n]).html();x="right"=== -this.align&&0!==y?!0:!1;var d=a.extend({},{rowabove:!1,rowcontent:""},this.formoptions||{}),m=parseInt(d.rowpos,10)||i+1,p=parseInt(2*(parseInt(d.colpos,10)||1),10);if(d.rowabove){var s=a(""+d.rowcontent+"");a(e).append(s);s[0].rp=m}j=a(e).find("tr[rowpos="+m+"]");0===j.length&&(j=a("").addClass("FormData").attr("id","trv_"+g),a(j).append(r),a(e).append(j),j[0].rp=m);a("td:eq("+(p-2)+")",j[0]).html(""+("undefined"=== -typeof d.label?c.p.colNames[b]:d.label)+"");a("td:eq("+(p-1)+")",j[0]).append(""+o+"").attr("id","v_"+g);x&&a("td:eq("+(p-1)+") span",j[0]).css({"text-align":"right",width:y+"px"});l[i]=b;i++}});0
      ").append(w).append("
      "+y+"
      ");a.jgrid.createModal(s,w,d,"#gview_"+a.jgrid.jqID(l.p.id),a("#gview_"+a.jgrid.jqID(l.p.id))[0]); -b&&(a("#pData, #nData","#"+p+"_2").css("float","right"),a(".EditButton","#"+p+"_2").css("text-align","left"));d.viewPagerButtons||a("#pData, #nData","#"+p+"_2").hide();w=null;a("#"+s.themodal).keydown(function(b){if(b.which===27){c[l.p.id].closeOnEscape&&a.jgrid.hideModal(this,{gb:d.gbox,jqm:d.jqModal,onClose:d.onClose});return false}if(d.navkeys[0]===true){if(b.which===d.navkeys[1]){a("#pData","#"+p+"_2").trigger("click");return false}if(b.which===d.navkeys[2]){a("#nData","#"+p+"_2").trigger("click"); -return false}}});d.closeicon=a.extend([!0,"left","ui-icon-close"],d.closeicon);!0===d.closeicon[0]&&a("#cData","#"+p+"_2").addClass("right"==d.closeicon[1]?"fm-button-icon-right":"fm-button-icon-left").append("");a.isFunction(d.beforeShowForm)&&d.beforeShowForm.call(l,a("#"+f));a.jgrid.viewModal("#"+a.jgrid.jqID(s.themodal),{gbox:"#gbox_"+a.jgrid.jqID(g),jqm:d.jqModal,modal:d.modal});a(".fm-button:not(.ui-state-disabled)","#"+p+"_2").hover(function(){a(this).addClass("ui-state-hover")}, -function(){a(this).removeClass("ui-state-hover")});e();a("#cData","#"+p+"_2").click(function(){a.jgrid.hideModal("#"+a.jgrid.jqID(s.themodal),{gb:"#gbox_"+a.jgrid.jqID(g),jqm:d.jqModal,onClose:d.onClose});return false});a("#nData","#"+p+"_2").click(function(){a("#FormError","#"+p).hide();var b=t();b[0]=parseInt(b[0],10);if(b[0]!=-1&&b[1][b[0]+1]){a.isFunction(d.onclickPgButtons)&&d.onclickPgButtons.call(l,"next",a("#"+f),b[1][b[0]]);r(b[1][b[0]+1],l);a(l).jqGrid("setSelection",b[1][b[0]+1]);a.isFunction(d.afterclickPgButtons)&& -d.afterclickPgButtons.call(l,"next",a("#"+f),b[1][b[0]+1]);u(b[0]+1,b[1].length-1)}e();return false});a("#pData","#"+p+"_2").click(function(){a("#FormError","#"+p).hide();var b=t();if(b[0]!=-1&&b[1][b[0]-1]){a.isFunction(d.onclickPgButtons)&&d.onclickPgButtons.call(l,"prev",a("#"+f),b[1][b[0]]);r(b[1][b[0]-1],l);a(l).jqGrid("setSelection",b[1][b[0]-1]);a.isFunction(d.afterclickPgButtons)&&d.afterclickPgButtons.call(l,"prev",a("#"+f),b[1][b[0]-1]);u(b[0]-1,b[1].length-1)}e();return false})}w=t();u(w[0], -w[1].length-1)}})},delGridRow:function(o,d){d=a.extend({top:0,left:0,width:240,height:"auto",dataheight:"auto",modal:!1,overlay:30,drag:!0,resize:!0,url:"",mtype:"POST",reloadAfterSubmit:!0,beforeShowForm:null,beforeInitData:null,afterShowForm:null,beforeSubmit:null,onclickSubmit:null,afterSubmit:null,jqModal:!0,closeOnEscape:!1,delData:{},delicon:[],cancelicon:[],onClose:null,ajaxDelOptions:{},processing:!1,serializeDelData:null,useDataProxy:!1},a.jgrid.del,d||{});c[a(this)[0].p.id]=d;return this.each(function(){var e= -this;if(e.grid&&o){var n=a.isFunction(c[e.p.id].beforeShowForm),r=a.isFunction(c[e.p.id].afterShowForm),u=a.isFunction(c[e.p.id].beforeInitData)?c[e.p.id].beforeInitData:!1,t=e.p.id,l={},g=!0,f="DelTbl_"+a.jgrid.jqID(t),p,w,b,s,h="DelTbl_"+t,j={themodal:"delmod"+t,modalhead:"delhd"+t,modalcontent:"delcnt"+t,scrollelm:f};jQuery.isArray(o)&&(o=o.join());if(void 0!==a("#"+a.jgrid.jqID(j.themodal))[0]){u&&(g=u.call(e,a("#"+f)),"undefined"==typeof g&&(g=!0));if(!1===g)return;a("#DelData>td","#"+f).text(o); -a("#DelError","#"+f).hide();!0===c[e.p.id].processing&&(c[e.p.id].processing=!1,a("#dData","#"+f).removeClass("ui-state-active"));n&&c[e.p.id].beforeShowForm.call(e,a("#"+f));a.jgrid.viewModal("#"+a.jgrid.jqID(j.themodal),{gbox:"#gbox_"+a.jgrid.jqID(t),jqm:c[e.p.id].jqModal,jqM:!1,overlay:c[e.p.id].overlay,modal:c[e.p.id].modal})}else{var i=isNaN(c[e.p.id].dataheight)?c[e.p.id].dataheight:c[e.p.id].dataheight+"px",h="
      "+(""),h=h+('"),h=h+"
      '+c[e.p.id].msg+"
       
      "+("

      "+ -(""+d.bSubmit+"")+" "+(""+d.bCancel+"")+"
      ");d.gbox="#gbox_"+a.jgrid.jqID(t);a.jgrid.createModal(j,h,d,"#gview_"+a.jgrid.jqID(e.p.id),a("#gview_"+a.jgrid.jqID(e.p.id))[0]);u&&(g=u.call(e,a("#"+f)),"undefined"==typeof g&&(g=!0));if(!1===g)return;a(".fm-button","#"+f+"_2").hover(function(){a(this).addClass("ui-state-hover")}, -function(){a(this).removeClass("ui-state-hover")});d.delicon=a.extend([!0,"left","ui-icon-scissors"],c[e.p.id].delicon);d.cancelicon=a.extend([!0,"left","ui-icon-cancel"],c[e.p.id].cancelicon);!0===d.delicon[0]&&a("#dData","#"+f+"_2").addClass("right"==d.delicon[1]?"fm-button-icon-right":"fm-button-icon-left").append("");!0===d.cancelicon[0]&&a("#eData","#"+f+"_2").addClass("right"==d.cancelicon[1]?"fm-button-icon-right":"fm-button-icon-left").append("");a("#dData","#"+f+"_2").click(function(){var g=[true,""];l={};var h=a("#DelData>td","#"+f).text();a.isFunction(c[e.p.id].onclickSubmit)&&(l=c[e.p.id].onclickSubmit.call(e,c[e.p.id],h)||{});a.isFunction(c[e.p.id].beforeSubmit)&&(g=c[e.p.id].beforeSubmit.call(e,h));if(g[0]&&!c[e.p.id].processing){c[e.p.id].processing=true;b=e.p.prmNames;p=a.extend({},c[e.p.id].delData,l);s=b.oper;p[s]=b.deloper;w=b.id;h=(""+h).split(",");if(!h.length)return false;for(var i in h)h.hasOwnProperty(i)&& -(h[i]=a.jgrid.stripPref(e.p.idPrefix,h[i]));p[w]=h.join();a(this).addClass("ui-state-active");i=a.extend({url:c[e.p.id].url?c[e.p.id].url:a(e).jqGrid("getGridParam","editurl"),type:c[e.p.id].mtype,data:a.isFunction(c[e.p.id].serializeDelData)?c[e.p.id].serializeDelData.call(e,p):p,complete:function(b,i){if(i!="success"){g[0]=false;g[1]=a.isFunction(c[e.p.id].errorTextFormat)?c[e.p.id].errorTextFormat.call(e,b):i+" Status: '"+b.statusText+"'. Error code: "+b.status}else a.isFunction(c[e.p.id].afterSubmit)&& -(g=c[e.p.id].afterSubmit.call(e,b,p));if(g[0]===false){a("#DelError>td","#"+f).html(g[1]);a("#DelError","#"+f).show()}else{if(c[e.p.id].reloadAfterSubmit&&e.p.datatype!="local")a(e).trigger("reloadGrid");else{if(e.p.treeGrid===true)try{a(e).jqGrid("delTreeNode",e.p.idPrefix+h[0])}catch(o){}else for(var l=0;ltd","#"+f).html(g[1]);a("#DelError","#"+f).show()}return false});a("#eData","#"+f+"_2").click(function(){a.jgrid.hideModal("#"+a.jgrid.jqID(j.themodal),{gb:"#gbox_"+a.jgrid.jqID(t),jqm:c[e.p.id].jqModal,onClose:c[e.p.id].onClose});return false});n&&c[e.p.id].beforeShowForm.call(e, -a("#"+f));a.jgrid.viewModal("#"+a.jgrid.jqID(j.themodal),{gbox:"#gbox_"+a.jgrid.jqID(t),jqm:c[e.p.id].jqModal,overlay:c[e.p.id].overlay,modal:c[e.p.id].modal})}r&&c[e.p.id].afterShowForm.call(e,a("#"+f));!0===c[e.p.id].closeOnEscape&&setTimeout(function(){a(".ui-jqdialog-titlebar-close","#"+a.jgrid.jqID(j.modalhead)).focus()},0)}})},navGrid:function(c,d,e,n,r,u,t){d=a.extend({edit:!0,editicon:"ui-icon-pencil",add:!0,addicon:"ui-icon-plus",del:!0,delicon:"ui-icon-trash",search:!0,searchicon:"ui-icon-search", -refresh:!0,refreshicon:"ui-icon-refresh",refreshstate:"firstpage",view:!1,viewicon:"ui-icon-document",position:"left",closeOnEscape:!0,beforeRefresh:null,afterRefresh:null,cloneToTop:!1,alertwidth:200,alertheight:"auto",alerttop:null,alertleft:null,alertzIndex:null},a.jgrid.nav,d||{});return this.each(function(){if(!this.nav){var l={themodal:"alertmod",modalhead:"alerthd",modalcontent:"alertcnt"},g=this,f;if(g.grid&&"string"==typeof c){void 0===a("#"+l.themodal)[0]&&(!d.alerttop&&!d.alertleft&&("undefined"!= -typeof window.innerWidth?(d.alertleft=window.innerWidth,d.alerttop=window.innerHeight):"undefined"!=typeof document.documentElement&&"undefined"!=typeof document.documentElement.clientWidth&&0!==document.documentElement.clientWidth?(d.alertleft=document.documentElement.clientWidth,d.alerttop=document.documentElement.clientHeight):(d.alertleft=1024,d.alerttop=768),d.alertleft=d.alertleft/2-parseInt(d.alertwidth,10)/2,d.alerttop=d.alerttop/2-25),a.jgrid.createModal(l,"
      "+d.alerttext+"
      ", -{gbox:"#gbox_"+a.jgrid.jqID(g.p.id),jqModal:!0,drag:!0,resize:!0,caption:d.alertcap,top:d.alerttop,left:d.alertleft,width:d.alertwidth,height:d.alertheight,closeOnEscape:d.closeOnEscape,zIndex:d.alertzIndex},"","",!0));var p=1;d.cloneToTop&&g.p.toppager&&(p=2);for(var w=0;w"),s,h;0===w?(s=c,h=g.p.id,s==g.p.toppager&&(h+="_top",p=1)): -(s=g.p.toppager,h=g.p.id+"_top");"rtl"==g.p.direction&&a(b).attr("dir","rtl").css("float","right");d.add&&(n=n||{},f=a(""),a(f).append("
      "+d.addtext+"
      "),a("tr",b).append(f),a(f,b).attr({title:d.addtitle||"",id:n.id||"add_"+h}).click(function(){a(this).hasClass("ui-state-disabled")||(a.isFunction(d.addfunc)?d.addfunc.call(g):a(g).jqGrid("editGridRow","new",n));return false}).hover(function(){a(this).hasClass("ui-state-disabled")|| -a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}),f=null);d.edit&&(f=a(""),e=e||{},a(f).append("
      "+d.edittext+"
      "),a("tr",b).append(f),a(f,b).attr({title:d.edittitle||"",id:e.id||"edit_"+h}).click(function(){if(!a(this).hasClass("ui-state-disabled")){var b=g.p.selrow;if(b)a.isFunction(d.editfunc)?d.editfunc.call(g,b):a(g).jqGrid("editGridRow",b,e); -else{a.jgrid.viewModal("#"+l.themodal,{gbox:"#gbox_"+a.jgrid.jqID(g.p.id),jqm:true});a("#jqg_alrt").focus()}}return false}).hover(function(){a(this).hasClass("ui-state-disabled")||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}),f=null);d.view&&(f=a(""),t=t||{},a(f).append("
      "+d.viewtext+"
      "),a("tr",b).append(f),a(f,b).attr({title:d.viewtitle||"", -id:t.id||"view_"+h}).click(function(){if(!a(this).hasClass("ui-state-disabled")){var b=g.p.selrow;if(b)a.isFunction(d.viewfunc)?d.viewfunc.call(g,b):a(g).jqGrid("viewGridRow",b,t);else{a.jgrid.viewModal("#"+l.themodal,{gbox:"#gbox_"+a.jgrid.jqID(g.p.id),jqm:true});a("#jqg_alrt").focus()}}return false}).hover(function(){a(this).hasClass("ui-state-disabled")||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}),f=null);d.del&&(f=a(""), -r=r||{},a(f).append("
      "+d.deltext+"
      "),a("tr",b).append(f),a(f,b).attr({title:d.deltitle||"",id:r.id||"del_"+h}).click(function(){if(!a(this).hasClass("ui-state-disabled")){var b;if(g.p.multiselect){b=g.p.selarrrow;b.length===0&&(b=null)}else b=g.p.selrow;if(b)a.isFunction(d.delfunc)?d.delfunc.call(g,b):a(g).jqGrid("delGridRow",b,r);else{a.jgrid.viewModal("#"+l.themodal,{gbox:"#gbox_"+a.jgrid.jqID(g.p.id),jqm:true});a("#jqg_alrt").focus()}}return false}).hover(function(){a(this).hasClass("ui-state-disabled")|| -a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}),f=null);(d.add||d.edit||d.del||d.view)&&a("tr",b).append("");d.search&&(f=a(""),u=u||{},a(f).append("
      "+d.searchtext+"
      "),a("tr",b).append(f),a(f,b).attr({title:d.searchtitle||"",id:u.id||"search_"+ -h}).click(function(){a(this).hasClass("ui-state-disabled")||(a.isFunction(d.searchfunc)?d.searchfunc.call(g,u):a(g).jqGrid("searchGrid",u));return false}).hover(function(){a(this).hasClass("ui-state-disabled")||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}),u.showOnLoad&&!0===u.showOnLoad&&a(f,b).click(),f=null);d.refresh&&(f=a(""),a(f).append("
      "+ -d.refreshtext+"
      "),a("tr",b).append(f),a(f,b).attr({title:d.refreshtitle||"",id:"refresh_"+h}).click(function(){if(!a(this).hasClass("ui-state-disabled")){a.isFunction(d.beforeRefresh)&&d.beforeRefresh.call(g);g.p.search=false;try{var b=g.p.id;g.p.postData.filters="";a("#fbox_"+a.jgrid.jqID(b)).jqFilter("resetFilter");a.isFunction(g.clearToolbar)&&g.clearToolbar.call(g,false)}catch(c){}switch(d.refreshstate){case "firstpage":a(g).trigger("reloadGrid",[{page:1}]);break;case "current":a(g).trigger("reloadGrid", -[{current:true}])}a.isFunction(d.afterRefresh)&&d.afterRefresh.call(g)}return false}).hover(function(){a(this).hasClass("ui-state-disabled")||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}),f=null);f=a(".ui-jqgrid").css("font-size")||"11px";a("body").append("");f=a(b).clone().appendTo("#testpg2").width();a("#testpg2").remove();a(s+"_"+d.position, -s).append(b);g.p._nvtd&&(f>g.p._nvtd[0]&&(a(s+"_"+d.position,s).width(f),g.p._nvtd[0]=f),g.p._nvtd[1]=f);b=f=f=null;this.nav=!0}}}})},navButtonAdd:function(c,d){d=a.extend({caption:"newButton",title:"",buttonicon:"ui-icon-newwin",onClickButton:null,position:"last",cursor:"pointer"},d||{});return this.each(function(){if(this.grid){"string"===typeof c&&0!==c.indexOf("#")&&(c="#"+a.jgrid.jqID(c));var e=a(".navtable",c)[0],n=this;if(e&&!(d.id&&void 0!==a("#"+a.jgrid.jqID(d.id),e)[0])){var r=a(""); -"NONE"==d.buttonicon.toString().toUpperCase()?a(r).addClass("ui-pg-button ui-corner-all").append("
      "+d.caption+"
      "):a(r).addClass("ui-pg-button ui-corner-all").append("
      "+d.caption+"
      ");d.id&&a(r).attr("id",d.id);"first"==d.position?0===e.rows[0].cells.length?a("tr",e).append(r):a("tr td:eq(0)",e).before(r):a("tr",e).append(r);a(r,e).attr("title",d.title||"").click(function(c){a(this).hasClass("ui-state-disabled")|| -a.isFunction(d.onClickButton)&&d.onClickButton.call(n,c);return!1}).hover(function(){a(this).hasClass("ui-state-disabled")||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")})}}})},navSeparatorAdd:function(c,d){d=a.extend({sepclass:"ui-separator",sepcontent:""},d||{});return this.each(function(){if(this.grid){"string"===typeof c&&0!==c.indexOf("#")&&(c="#"+a.jgrid.jqID(c));var e=a(".navtable",c)[0];if(e){var n=""+d.sepcontent+"";a("tr",e).append(n)}}})},GridToForm:function(c,d){return this.each(function(){var e=this;if(e.grid){var n=a(e).jqGrid("getRowData",c);if(n)for(var r in n)a("[name="+a.jgrid.jqID(r)+"]",d).is("input:radio")||a("[name="+a.jgrid.jqID(r)+"]",d).is("input:checkbox")?a("[name="+a.jgrid.jqID(r)+"]",d).each(function(){if(a(this).val()==n[r])a(this)[e.p.useProp?"prop":"attr"]("checked",!0);else a(this)[e.p.useProp?"prop":"attr"]("checked",!1)}):a("[name="+a.jgrid.jqID(r)+ -"]",d).val(n[r])}})},FormToGrid:function(c,d,e,n){return this.each(function(){if(this.grid){e||(e="set");n||(n="first");var r=a(d).serializeArray(),u={};a.each(r,function(a,c){u[c.name]=c.value});"add"==e?a(this).jqGrid("addRowData",c,u,n):"set"==e&&a(this).jqGrid("setRowData",c,u)}})}})})(jQuery); -(function(a){a.fn.jqFilter=function(d){if("string"===typeof d){var n=a.fn.jqFilter[d];if(!n)throw"jqFilter - No such method: "+d;var u=a.makeArray(arguments).slice(1);return n.apply(this,u)}var o=a.extend(!0,{filter:null,columns:[],onChange:null,afterRedraw:null,checkValues:null,error:!1,errmsg:"",errorcheck:!0,showQuery:!0,sopt:null,ops:[{name:"eq",description:"equal",operator:"="},{name:"ne",description:"not equal",operator:"<>"},{name:"lt",description:"less",operator:"<"},{name:"le",description:"less or equal", -operator:"<="},{name:"gt",description:"greater",operator:">"},{name:"ge",description:"greater or equal",operator:">="},{name:"bw",description:"begins with",operator:"LIKE"},{name:"bn",description:"does not begin with",operator:"NOT LIKE"},{name:"in",description:"in",operator:"IN"},{name:"ni",description:"not in",operator:"NOT IN"},{name:"ew",description:"ends with",operator:"LIKE"},{name:"en",description:"does not end with",operator:"NOT LIKE"},{name:"cn",description:"contains",operator:"LIKE"},{name:"nc", -description:"does not contain",operator:"NOT LIKE"},{name:"nu",description:"is null",operator:"IS NULL"},{name:"nn",description:"is not null",operator:"IS NOT NULL"}],numopts:"eq ne lt le gt ge nu nn in ni".split(" "),stropts:"eq ne bw bn ew en cn nc nu nn in ni".split(" "),_gridsopt:[],groupOps:[{op:"AND",text:"AND"},{op:"OR",text:"OR"}],groupButton:!0,ruleButtons:!0,direction:"ltr"},a.jgrid.filter,d||{});return this.each(function(){if(!this.filter){this.p=o;if(null===this.p.filter||void 0===this.p.filter)this.p.filter= -{groupOp:this.p.groupOps[0].op,rules:[],groups:[]};var d,n=this.p.columns.length,f,t=/msie/i.test(navigator.userAgent)&&!window.opera;if(this.p._gridsopt.length)for(d=0;d");var r=function(g,k){var b=[!0,""];if(a.isFunction(k.searchrules))b=k.searchrules(g,k);else if(a.jgrid&&a.jgrid.checkValues)try{b= -a.jgrid.checkValues(g,-1,null,k.searchrules,k.label)}catch(c){}b&&(b.length&&!1===b[0])&&(o.error=!b[0],o.errmsg=b[1])};this.onchange=function(){this.p.error=!1;this.p.errmsg="";return a.isFunction(this.p.onChange)?this.p.onChange.call(this,this.p):!1};this.reDraw=function(){a("table.group:first",this).remove();var g=this.createTableForGroup(o.filter,null);a(this).append(g);a.isFunction(this.p.afterRedraw)&&this.p.afterRedraw.call(this,this.p)};this.createTableForGroup=function(g,k){var b=this,c, -e=a("
      "),d="left";"rtl"==this.p.direction&&(d="right",e.attr("dir","rtl"));null===k&&e.append("");var h=a("");e.append(h);d=a("");h.append(d);if(!0===this.p.ruleButtons){var i=a("");d.append(i);var h="",f;for(c=0;c"+b.p.groupOps[c].text+"";i.append(h).bind("change",function(){g.groupOp=a(i).val();b.onchange()})}h="";this.p.groupButton&&(h=a(""),h.bind("click",function(){if(g.groups===void 0)g.groups=[];g.groups.push({groupOp:o.groupOps[0].op,rules:[],groups:[]});b.reDraw();b.onchange();return false}));d.append(h); -if(!0===this.p.ruleButtons){var h=a(""),l;h.bind("click",function(){if(g.rules===void 0)g.rules=[];for(c=0;c"),d.append(h),h.bind("click",function(){for(c=0;c"),e.append(d),h=a(""),d.append(h),h=a(""),h.append(this.createTableForGroup(g.groups[c], -g)),d.append(h);void 0===g.groupOp&&(g.groupOp=b.p.groupOps[0].op);if(void 0!==g.rules)for(c=0;c"),e,f,h,i,j="",l;c.append("");var m=a("");c.append(m);var n=a(""),p,q=[];m.append(n);n.bind("change",function(){g.field=a(n).val();h=a(this).parents("tr:first");for(e=0;e"+b.p.ops[p].description+"",k++);a(".selectopts",h).empty().append(d);a(".selectopts",h)[0].selectedIndex=0;a.browser.msie&&9>a.browser.version&&(d=parseInt(a("select.selectopts",h)[0].offsetWidth)+1,a(".selectopts",h).width(d),a(".selectopts",h).css("width","auto"));a(".data",h).empty().append(c);a(".input-elm",h).bind("change",function(c){var d=a(this).hasClass("ui-autocomplete-input")?200:0;setTimeout(function(){var d=c.target;g.data=d.nodeName.toUpperCase()=== -"SPAN"&&i.searchoptions&&a.isFunction(i.searchoptions.custom_value)?i.searchoptions.custom_value(a(d).children(".customelement:first"),"get"):d.value;b.onchange()},d)});setTimeout(function(){g.data=a(c).val();b.onchange()},0)}});for(e=m=0;e"+b.p.columns[e].label+""}n.append(j);j=a("");c.append(j);i=o.columns[m];i.searchoptions.id=a.jgrid.randId();t&&"text"===i.inputtype&&!i.searchoptions.size&&(i.searchoptions.size=10);var m=a.jgrid.createEl(i.inputtype,i.searchoptions,g.data,!0,b.p.ajaxSelectOptions,!0),s=a("");j.append(s);s.bind("change",function(){g.op=a(s).val();h=a(this).parents("tr:first");var c=a(".input-elm",h)[0];if(g.op==="nu"|| -g.op==="nn"){g.data="";c.value="";c.setAttribute("readonly","true");c.setAttribute("disabled","true")}else{c.removeAttribute("readonly");c.removeAttribute("disabled")}b.onchange()});f=i.searchoptions.sopt?i.searchoptions.sopt:b.p.sopt?b.p.sopt:"string"===i.searchtype?o.stropts:b.p.numopts;j="";a.each(b.p.ops,function(){q.push(this.name)});for(e=0;e"+b.p.ops[p].description+ -"");s.append(j);j=a("");c.append(j);j.append(m);a(m).addClass("input-elm").bind("change",function(){g.data=i.inputtype==="custom"?i.searchoptions.custom_value(a(this).children(".customelement:first"),"get"):a(this).val();b.onchange()});j=a("");c.append(j);!0===this.p.ruleButtons&&(m=a(""),j.append(m),m.bind("click",function(){for(e=0;e=0&&f.p.savedRow.splice(t,1);a(f).triggerHandler("jqGridInlineAfterSaveRow",[c,b,i,e]);a.isFunction(e.aftersavefunc)&&e.aftersavefunc.call(f,c,b);j=true;a(q).unbind("keydown")}else{a(f).triggerHandler("jqGridInlineErrorSaveRow",[c,b,d,null,e]);a.isFunction(e.errorfunc)&&e.errorfunc.call(f,c,b,d,null);e.restoreAfterError===true&&a(f).jqGrid("restoreRow",c,e.afterrestorefunc)}}},error:function(b,d,g){a("#lui_"+a.jgrid.jqID(f.p.id)).hide();a(f).triggerHandler("jqGridInlineErrorSaveRow", -[c,b,d,g,e]);if(a.isFunction(e.errorfunc))e.errorfunc.call(f,c,b,d,g);else{b=b.responseText||b.statusText;try{a.jgrid.info_dialog(a.jgrid.errors.errcap,'
      '+b+"
      ",a.jgrid.edit.bClose,{buttonalign:"right"})}catch(h){alert(b)}}e.restoreAfterError===true&&a(f).jqGrid("restoreRow",c,e.afterrestorefunc)}},a.jgrid.ajaxOptions,f.p.ajaxRowOptions||{}))}return j},restoreRow:function(c,d){var b=a.makeArray(arguments).slice(1),k={};"object"===a.type(b[0])?k=b[0]:a.isFunction(d)&& -(k.afterrestorefunc=d);k=a.extend(!0,a.jgrid.inlineEdit,k);return this.each(function(){var b=this,d,p,h={};if(b.grid){p=a(b).jqGrid("getInd",c,true);if(p!==false){for(var e=0;e=0){if(a.isFunction(a.fn.datepicker))try{a("input.hasDatepicker","#"+a.jgrid.jqID(p.id)).datepicker("hide")}catch(j){}a.each(b.p.colModel,function(){this.editable===true&&this.name in b.p.savedRow[d]&&(h[this.name]=b.p.savedRow[d][this.name])});a(b).jqGrid("setRowData", -c,h);a(p).attr("editable","0").unbind("keydown");b.p.savedRow.splice(d,1);a("#"+a.jgrid.jqID(c),"#"+a.jgrid.jqID(b.p.id)).hasClass("jqgrid-new-row")&&setTimeout(function(){a(b).jqGrid("delRowData",c)},0)}a(b).triggerHandler("jqGridInlineAfterRestoreRow",[c]);a.isFunction(k.afterrestorefunc)&&k.afterrestorefunc.call(b,c)}}})},addRow:function(c){c=a.extend(!0,{rowID:"new_row",initdata:{},position:"first",useDefValues:!0,useFormatter:!1,addRowParams:{extraparam:{}}},c||{});return this.each(function(){if(this.grid){var d= -this;!0===c.useDefValues&&a(d.p.colModel).each(function(){if(this.editoptions&&this.editoptions.defaultValue){var b=this.editoptions.defaultValue,b=a.isFunction(b)?b.call(d):b;c.initdata[this.name]=b}});a(d).jqGrid("addRowData",c.rowID,c.initdata,c.position);c.rowID=d.p.idPrefix+c.rowID;a("#"+a.jgrid.jqID(c.rowID),"#"+a.jgrid.jqID(d.p.id)).addClass("jqgrid-new-row");if(c.useFormatter)a("#"+a.jgrid.jqID(c.rowID)+" .ui-inline-edit","#"+a.jgrid.jqID(d.p.id)).click();else{var b=d.p.prmNames;c.addRowParams.extraparam[b.oper]= -b.addoper;a(d).jqGrid("editRow",c.rowID,c.addRowParams);a(d).jqGrid("setSelection",c.rowID)}}})},inlineNav:function(c,d){d=a.extend({edit:!0,editicon:"ui-icon-pencil",add:!0,addicon:"ui-icon-plus",save:!0,saveicon:"ui-icon-disk",cancel:!0,cancelicon:"ui-icon-cancel",addParams:{useFormatter:!1,rowID:"new_row"},editParams:{},restoreAfterSelect:!0},a.jgrid.nav,d||{});return this.each(function(){if(this.grid){var b=this,k,g=a.jgrid.jqID(b.p.id);b.p._inlinenav=!0;if(!0===d.addParams.useFormatter){var l= -b.p.colModel,p;for(p=0;p0&&b.p._inlinenav=== -true&&c!==b.p.selrow&&b.p.selrow!==null){b.p.selrow==d.addParams.rowID?a(b).jqGrid("delRowData",b.p.selrow):a(b).jqGrid("restoreRow",b.p.selrow,d.editParams);a(b).jqGrid("showAddEditButtons")}k&&(g=k.call(b,c,e));return g})}})},showAddEditButtons:function(){return this.each(function(){if(this.grid){var c=a.jgrid.jqID(this.p.id);a("#"+c+"_ilsave").addClass("ui-state-disabled");a("#"+c+"_ilcancel").addClass("ui-state-disabled");a("#"+c+"_iladd").removeClass("ui-state-disabled");a("#"+c+"_iledit").removeClass("ui-state-disabled")}})}})})(jQuery); -(function(b){b.jgrid.extend({editCell:function(d,f,a){return this.each(function(){var c=this,g,e,h,i;if(c.grid&&!0===c.p.cellEdit){f=parseInt(f,10);c.p.selrow=c.rows[d].id;c.p.knv||b(c).jqGrid("GridNav");if(00?b(".ui-datepicker").is(":hidden")?b(c).jqGrid("restoreCell",d,f):b("input.hasDatepicker",h).datepicker("hide"):b(c).jqGrid("restoreCell",d,f));if(a.keyCode===13){b(c).jqGrid("saveCell",d,f);return false}if(a.keyCode=== -9){if(c.grid.hDiv.loading)return false;a.shiftKey?b(c).jqGrid("prevCell",d,f):b(c).jqGrid("nextCell",d,f)}a.stopPropagation()});b(c).triggerHandler("jqGridAfterEditCell",[c.rows[d].id,g,e,d,f]);b.isFunction(c.p.afterEditCell)&&c.p.afterEditCell.call(c,c.rows[d].id,g,e,d,f)}else 0<=parseInt(c.p.iCol,10)&&0<=parseInt(c.p.iRow,10)&&(b("td:eq("+c.p.iCol+")",c.rows[c.p.iRow]).removeClass("edit-cell ui-state-highlight"),b(c.rows[c.p.iRow]).removeClass("selected-row ui-state-hover")),h.addClass("edit-cell ui-state-highlight"), -b(c.rows[d]).addClass("selected-row ui-state-hover"),e=h.html().replace(/\ \;/ig,""),b(c).triggerHandler("jqGridSelectCell",[c.rows[d].id,g,e,d,f]),b.isFunction(c.p.onSelectCell)&&c.p.onSelectCell.call(c,c.rows[d].id,g,e,d,f);c.p.iCol=f;c.p.iRow=d}}})},saveCell:function(d,f){return this.each(function(){var a=this,c;if(a.grid&&!0===a.p.cellEdit){c=1<=a.p.savedRow.length?0:null;if(null!==c){var g=b("td:eq("+f+")",a.rows[d]),e,h,i=a.p.colModel[f],k=i.name,j=b.jgrid.jqID(k);switch(i.edittype){case "select":if(i.editoptions.multiple){var j= -b("#"+d+"_"+j,a.rows[d]),n=[];(e=b(j).val())?e.join(","):e="";b("option:selected",j).each(function(a,c){n[a]=b(c).text()});h=n.join(",")}else e=b("#"+d+"_"+j+" option:selected",a.rows[d]).val(),h=b("#"+d+"_"+j+" option:selected",a.rows[d]).text();i.formatter&&(h=e);break;case "checkbox":var l=["Yes","No"];i.editoptions&&(l=i.editoptions.value.split(":"));h=e=b("#"+d+"_"+j,a.rows[d]).is(":checked")?l[0]:l[1];break;case "password":case "text":case "textarea":case "button":h=e=b("#"+d+"_"+j,a.rows[d]).val(); -break;case "custom":try{if(i.editoptions&&b.isFunction(i.editoptions.custom_value)){e=i.editoptions.custom_value.call(a,b(".customelement",g),"get");if(void 0===e)throw"e2";h=e}else throw"e1";}catch(o){"e1"==o&&b.jgrid.info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_value' "+b.jgrid.edit.msg.nodefined,jQuery.jgrid.edit.bClose),"e2"==o?b.jgrid.info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_value' "+b.jgrid.edit.msg.novalue,jQuery.jgrid.edit.bClose):b.jgrid.info_dialog(jQuery.jgrid.errors.errcap, -o.message,jQuery.jgrid.edit.bClose)}}if(h!==a.p.savedRow[c].v){if(c=b(a).triggerHandler("jqGridBeforeSaveCell",[a.rows[d].id,k,e,d,f]))h=e=c;if(b.isFunction(a.p.beforeSaveCell)&&(c=a.p.beforeSaveCell.call(a,a.rows[d].id,k,e,d,f)))h=e=c;var p=b.jgrid.checkValues(e,f,a);if(!0===p[0]){c=b(a).triggerHandler("jqGridBeforeSubmitCell",[a.rows[d].id,k,e,d,f])||{};b.isFunction(a.p.beforeSubmitCell)&&((c=a.p.beforeSubmitCell.call(a,a.rows[d].id,k,e,d,f))||(c={}));0"+e,b.jgrid.edit.bClose);b(a).jqGrid("restoreCell",d,f)}},b.jgrid.ajaxOptions,a.p.ajaxCellOptions||{}))}else try{b.jgrid.info_dialog(b.jgrid.errors.errcap,b.jgrid.errors.nourl, -b.jgrid.edit.bClose),b(a).jqGrid("restoreCell",d,f)}catch(q){}"clientArray"==a.p.cellsubmit&&(b(g).empty(),b(a).jqGrid("setCell",a.rows[d].id,f,h,!1,!1,!0),b(g).addClass("dirty-cell"),b(a.rows[d]).addClass("edited"),b(a).triggerHandler("jqGridAfterSaveCell",[a.rows[d].id,k,e,d,f]),b.isFunction(a.p.afterSaveCell)&&a.p.afterSaveCell.call(a,a.rows[d].id,k,e,d,f),a.p.savedRow.splice(0,1))}else try{window.setTimeout(function(){b.jgrid.info_dialog(b.jgrid.errors.errcap,e+" "+p[1],b.jgrid.edit.bClose)}, -100),b(a).jqGrid("restoreCell",d,f)}catch(r){}}else b(a).jqGrid("restoreCell",d,f)}b.browser.opera?b("#"+b.jgrid.jqID(a.p.knv)).attr("tabindex","-1").focus():window.setTimeout(function(){b("#"+b.jgrid.jqID(a.p.knv)).attr("tabindex","-1").focus()},0)}})},restoreCell:function(d,f){return this.each(function(){var a=this,c;if(a.grid&&!0===a.p.cellEdit){c=1<=a.p.savedRow.length?0:null;if(null!==c){var g=b("td:eq("+f+")",a.rows[d]);if(b.isFunction(b.fn.datepicker))try{b("input.hasDatepicker",g).datepicker("hide")}catch(e){}b(g).empty().attr("tabindex", -"-1");b(a).jqGrid("setCell",a.rows[d].id,f,a.p.savedRow[c].v,!1,!1,!0);b(a).triggerHandler("jqGridAfterRestoreCell",[a.rows[d].id,a.p.savedRow[c].v,d,f]);b.isFunction(a.p.afterRestoreCell)&&a.p.afterRestoreCell.call(a,a.rows[d].id,a.p.savedRow[c].v,d,f);a.p.savedRow.splice(0,1)}window.setTimeout(function(){b("#"+a.p.knv).attr("tabindex","-1").focus()},0)}})},nextCell:function(d,f){return this.each(function(){var a=!1;if(this.grid&&!0===this.p.cellEdit){for(var c=f+1;c=f&&(b(a.grid.bDiv)[0].scrollTop=b(a.grid.bDiv)[0].scrollTop+a.rows[c].clientHeight);"vu"==e&&o=e+parseInt(f,10)? -b(a.grid.bDiv)[0].scrollLeft=b(a.grid.bDiv)[0].scrollLeft+a.rows[c].cells[d].clientWidth:g
      "),g,e;b(c).insertBefore(a.grid.cDiv);b("#"+a.p.knv).focus().keydown(function(c){e=c.keyCode;"rtl"==a.p.direction&&(37===e?e=39:39===e&&(e=37));switch(e){case 38:0
      ").css({height:"100%",width:"100%",position:"fixed",left:0,top:0,"z-index":h-1,opacity:e.overlay/100});if(c.a)return d;c.t=k;c.a=!0;c.w.css("z-index",h);e.modal?(j[0]||setTimeout(function(){o("bind")}, -1),j.push(a)):0').insertAfter(c.o);e.onShow?e.onShow(c):c.w.show();q(c);return d},close:function(a){a=i[a];if(!a.a)return d;a.a=d;j[0]&&(j.pop(),j[0]||o("unbind"));a.c.toTop&&a.o&&b("#jqmP"+a.w[0]._jqm).after(a.w).remove();if(a.c.onHide)a.c.onHide(a);else a.w.hide(),a.o&&a.o.remove();return d},params:{}};var g=0,i=b.jqm.hash,j=[],p=b.browser.msie&& -"6.0"==b.browser.version,d=!1,q=function(a){var d=b('').css({opacity:0});p&&(a.o?a.o.html('

      ').prepend(d):b("iframe.jqm",a.w)[0]||a.w.prepend(d));r(a)},r=function(a){try{b(":input:visible",a.w)[0].focus()}catch(d){}},o=function(a){b(document)[a]("keypress",m)[a]("keydown",m)[a]("mousedown",m)},m=function(a){var d=i[j[j.length-1]];(a=!b(a.target).parents(".jqmID"+d.s)[0])&&r(d);return!a},n=function(a, -g,c){return a.each(function(){var a=this._jqm;b(g).each(function(){this[c]||(this[c]=[],b(this).click(function(){for(var a in{jqmShow:1,jqmHide:1})for(var b in this[a])if(i[this[a][b]])i[this[a][b]].w[a](this);return d}));this[c].push(a)})})}})(jQuery); -(function(b){b.fn.jqDrag=function(a){return h(this,a,"d")};b.fn.jqResize=function(a,b){return h(this,a,"r",b)};b.jqDnR={dnr:{},e:0,drag:function(a){"d"==d.k?e.css({left:d.X+a.pageX-d.pX,top:d.Y+a.pageY-d.pY}):(e.css({width:Math.max(a.pageX-d.pX+d.W,0),height:Math.max(a.pageY-d.pY+d.H,0)}),f&&g.css({width:Math.max(a.pageX-f.pX+f.W,0),height:Math.max(a.pageY-f.pY+f.H,0)}));return!1},stop:function(){b(document).unbind("mousemove",c.drag).unbind("mouseup",c.stop)}};var c=b.jqDnR,d=c.dnr,e=c.e,g,f,h=function(a, -c,h,l){return a.each(function(){c=c?b(c,a):a;c.bind("mousedown",{e:a,k:h},function(a){var c=a.data,i={};e=c.e;g=l?b(l):!1;if("relative"!=e.css("position"))try{e.position(i)}catch(h){}d={X:i.left||j("left")||0,Y:i.top||j("top")||0,W:j("width")||e[0].scrollWidth||0,H:j("height")||e[0].scrollHeight||0,pX:a.pageX,pY:a.pageY,k:c.k};f=g&&"d"!=c.k?{X:i.left||k("left")||0,Y:i.top||k("top")||0,W:g[0].offsetWidth||k("width")||0,H:g[0].offsetHeight||k("height")||0,pX:a.pageX,pY:a.pageY,k:c.k}:!1;if(b("input.hasDatepicker", -e[0])[0])try{b("input.hasDatepicker",e[0]).datepicker("hide")}catch(m){}b(document).mousemove(b.jqDnR.drag).mouseup(b.jqDnR.stop);return!1})})},j=function(a){return parseInt(e.css(a),10)||!1},k=function(a){return parseInt(g.css(a),10)||!1}})(jQuery); -(function(b){b.jgrid.extend({setSubGrid:function(){return this.each(function(){var e;this.p.subGridOptions=b.extend({plusicon:"ui-icon-plus",minusicon:"ui-icon-minus",openicon:"ui-icon-carat-1-sw",expandOnLoad:!1,delayOnLoad:50,selectOnExpand:!1,reloadOnExpand:!0},this.p.subGridOptions||{});this.p.colNames.unshift("");this.p.colModel.unshift({name:"subgrid",width:b.browser.safari?this.p.subGridWidth+this.p.cellLayout:this.p.subGridWidth,sortable:!1,resizable:!1,hidedlg:!0,search:!1,fixed:!0});e=this.p.subGridModel; -if(e[0]){e[0].align=b.extend([],e[0].align||[]);for(var c=0;c"},addSubGrid:function(e,c){return this.each(function(){var a=this;if(a.grid){var m= -function(c,e,h){e=b("").html(e);b(c).append(e)},l=function(c,e){var h,f,n,d=b("
      "),i=b("");for(f=0;f"),b(h).html(a.p.subGridModel[0].name[f]),b(h).width(a.p.subGridModel[0].width[f]),b(i).append(h);b(d).append(i);c&&(n=a.p.xmlReader.subgrid,b(n.root+ -" "+n.row,c).each(function(){i=b("");if(!0===n.repeatitems)b(n.cell,this).each(function(a){m(i,b(this).text()||" ",a)});else{var c=a.p.subGridModel[0].mapping||a.p.subGridModel[0].name;if(c)for(f=0;f"),j=b("");for(f=0;f"),b(h).html(a.p.subGridModel[0].name[f]),b(h).width(a.p.subGridModel[0].width[f]),b(j).append(h);b(k).append(j);if(c&&(g=a.p.jsonReader.subgrid,h=b.jgrid.getAccessor(c,g.root),"undefined"!==typeof h))for(f=0;f"); -if(!0===g.repeatitems){g.cell&&(d=d[g.cell]);for(i=0;i=1?" ":"";g=b(a).triggerHandler("jqGridSubGridBeforeExpand",[k+"_"+d,d]);(g=g===false||g==="stop"?false:true)&&b.isFunction(a.p.subGridBeforeExpand)&&(g=a.p.subGridBeforeExpand.call(a,k+"_"+d,d));if(g===false)return false;b(c).after(""+ -q+"

      ");b(a).triggerHandler("jqGridSubGridRowExpanded",[k+"_"+d,d]);b.isFunction(a.p.subGridRowExpanded)?a.p.subGridRowExpanded.call(a,k+"_"+d,d):t(c)}else b(j).show();b(this).html("").removeClass("sgcollapsed").addClass("sgexpanded");a.p.subGridOptions.selectOnExpand&&b(a).jqGrid("setSelection",d)}else if(b(this).hasClass("sgexpanded")){g=b(a).triggerHandler("jqGridSubGridRowColapsed",[k+"_"+d,d]);if((g=g===false||g==="stop"?false:true)&&b.isFunction(a.p.subGridRowColapsed)){d=c.id;g=a.p.subGridRowColapsed.call(a,k+"_"+d,d)}if(g===false)return false;a.p.subGridOptions.reloadOnExpand===true?b(j).remove(".ui-subgrid"):b(j).hasClass("ui-subgrid")&&b(j).hide();b(this).html("").removeClass("sgexpanded").addClass("sgcollapsed")}return false}),o++;!0===a.p.subGridOptions.expandOnLoad&&b(a.rows).filter(".jqgrow").each(function(a,c){b(c.cells[0]).click()});a.subGridXml=function(a,b){l(a,b)};a.subGridJson=function(a,b){p(a,b)}}})},expandSubGridRow:function(e){return this.each(function(){if((this.grid||e)&&!0===this.p.subGrid){var c=b(this).jqGrid("getInd",e,!0);c&&(c=b("td.sgcollapsed",c)[0])&&b(c).trigger("click")}})},collapseSubGridRow:function(e){return this.each(function(){if((this.grid|| -e)&&!0===this.p.subGrid){var c=b(this).jqGrid("getInd",e,!0);c&&(c=b("td.sgexpanded",c)[0])&&b(c).trigger("click")}})},toggleSubGridRow:function(e){return this.each(function(){if((this.grid||e)&&!0===this.p.subGrid){var c=b(this).jqGrid("getInd",e,!0);if(c){var a=b("td.sgcollapsed",c)[0];a?b(a).trigger("click"):(a=b("td.sgexpanded",c)[0])&&b(a).trigger("click")}}})}})})(jQuery); -(function(b){b.extend(b.jgrid,{template:function(a){var c=b.makeArray(arguments).slice(1),f=1;void 0===a&&(a="");return a.replace(/\{([\w\-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,function(a,d){if(isNaN(parseInt(d,10))){for(var b=c[f],g=b.length;g--;)if(d===b[g].nm)return b[g].v;f++}else return f++,c[parseInt(d,10)]})}});b.jgrid.extend({groupingSetup:function(){return this.each(function(){var a=this.p.groupingView;if(null!==a&&("object"===typeof a||b.isFunction(a)))if(a.groupField.length){"undefined"=== -typeof a.visibiltyOnNextGrouping&&(a.visibiltyOnNextGrouping=[]);a.lastvalues=[];a.groups=[];a.counters=[];for(var c=0;c";try{i=e.formatter(k,l.value,w[l.idx],l.value)}catch(C){i=l.value}h+=''+g+b.jgrid.template(d.groupText[l.idx],i,l.cnt,l.summary)+"";if(x-1===l.idx){for(var m=d.groups[r+1],o=void 0!==m?d.groups[r+1].startRow:a.length,t=l.startRow;t