LearnPress – WordPress LMS Plugin - Version 3.0.7

Version Description

~ Improved: ui/ux when adding/removing course items ~ Improved: ui/ux when adding/removing questions of a quiz ~ Improved: auto focus mouse to input when changing type of new course item ~ Improved: show confirm message before removing course item to trash ~ Improved: move item to trash when delete instead of delete it permanently ~ Improved: changed icon to turn on/off an item is preview and add tooltip ~ Improved: removed green effect when updating via ajax ~ Improved: focus mouse on search input when searching items ~ Improved: show button for closing popup ~ Improved: flush Hard Cache when updating post ~ Improved: updated metabox to latest version and changed textdomain ~ Fixed: pending course does not show for instructor ~ Fixed: filter lessons/quizzes by course does not work properly ~ Fixed: wrong currency symbol for Turkish lira ~ Fixed: division by zero when calculating course results ~ Fixed: get default thumbnail image for archive course if it option is turn of ~ Removed: option thumbnail size for single course ~ Improved somethings...

Download this release

Release Info

Developer leehld
Plugin Icon 128x128 LearnPress – WordPress LMS Plugin
Version 3.0.7
Comparing to
See all releases

Code changes from version 3.0.6 to 3.0.7

Files changed (168) hide show
  1. assets/css/admin/admin.css +472 -138
  2. assets/js/admin/admin.js +2 -0
  3. assets/js/admin/course-editor.js +737 -633
  4. assets/js/admin/question-editor.js +20 -2
  5. assets/js/admin/quiz-editor.js +85 -14
  6. assets/js/frontend/quiz.js +1 -1
  7. assets/js/global.js +29 -10
  8. assets/scss/_mixin.scss +18 -0
  9. assets/scss/admin/_admin-editor.scss +159 -585
  10. assets/scss/admin/_order.scss +12 -8
  11. assets/scss/admin/_post-types.scss +2 -0
  12. assets/scss/admin/_question-editor.scss +242 -0
  13. assets/scss/admin/_quiz-editor.scss +587 -0
  14. assets/scss/admin/_settings.scss +16 -4
  15. assets/scss/admin/admin.scss +13 -0
  16. inc/abstract-settings.php +21 -16
  17. inc/admin/class-lp-admin-ajax.php +27 -2
  18. inc/admin/class-lp-admin-dashboard.php +1 -1
  19. inc/admin/editor/class-lp-admin-editor-course.php +6 -1
  20. inc/admin/editor/class-lp-admin-editor-question.php +9 -3
  21. inc/admin/editor/class-lp-admin-editor-quiz.php +19 -1
  22. inc/admin/lp-admin-actions.php +6 -1
  23. inc/admin/meta-box/class-lp-meta-box-helper.php +3 -0
  24. inc/admin/meta-box/fields/color-schema.php +1 -1
  25. inc/admin/settings/class-lp-settings-courses.php +23 -23
  26. inc/admin/settings/class-lp-settings-profile.php +5 -4
  27. inc/admin/views/course/added-items-preview.php +19 -17
  28. inc/admin/views/course/curriculum.php +33 -19
  29. inc/admin/views/course/editor.php +18 -28
  30. inc/admin/views/course/modal-choose-items.php +179 -155
  31. inc/admin/views/course/new-section-item.php +97 -84
  32. inc/admin/views/course/new-section.php +34 -30
  33. inc/admin/views/course/pagination.php +37 -35
  34. inc/admin/views/course/section-item.php +98 -75
  35. inc/admin/views/course/section.php +198 -134
  36. inc/admin/views/course/sections.php +40 -37
  37. inc/admin/views/editor-wrapper.php +1 -12
  38. inc/admin/views/meta-boxes/order/actions.php +1 -1
  39. inc/admin/views/meta-boxes/order/order-item.php +6 -3
  40. inc/admin/views/placeholder-animation.php +23 -0
  41. inc/admin/views/question/actions.php +8 -1
  42. inc/admin/views/question/answer.php +22 -4
  43. inc/admin/views/question/option.php +6 -3
  44. inc/admin/views/quiz/editor.php +18 -17
  45. inc/admin/views/quiz/modal-choose-items.php +19 -5
  46. inc/admin/views/quiz/question-actions.php +5 -4
  47. inc/admin/views/quiz/question-answer-option.php +7 -3
  48. inc/admin/views/quiz/question-answer.php +19 -5
  49. inc/admin/views/quiz/question-meta.php +68 -52
  50. inc/admin/views/quiz/question-settings.php +7 -2
  51. inc/admin/views/quiz/question.php +5 -1
  52. inc/admin/views/svg-icon.php +16 -0
  53. inc/class-lp-hard-cache.php +3 -0
  54. inc/class-lp-install.php +4 -0
  55. inc/class-lp-settings.php +18 -28
  56. inc/course/abstract-course.php +7 -2
  57. inc/course/class-lp-course-item.php +6 -2
  58. inc/course/lp-course-functions.php +11 -5
  59. inc/curds/class-lp-quiz-curd.php +7 -4
  60. inc/curds/class-lp-section-curd.php +16 -6
  61. inc/custom-post-types/abstract.php +197 -0
  62. inc/custom-post-types/course.php +79 -41
  63. inc/custom-post-types/lesson.php +34 -25
  64. inc/custom-post-types/question.php +9 -3
  65. inc/custom-post-types/quiz.php +31 -35
  66. inc/libraries/meta-box/css/datepicker.css +1 -1
  67. inc/libraries/meta-box/css/file.css +40 -25
  68. inc/libraries/meta-box/css/image-advanced.css +0 -52
  69. inc/libraries/meta-box/css/image-select.css +2 -2
  70. inc/libraries/meta-box/css/image.css +50 -47
  71. inc/libraries/meta-box/css/input-list.css +2 -1
  72. inc/libraries/meta-box/css/media.css +22 -44
  73. inc/libraries/meta-box/css/range.css +5 -9
  74. inc/libraries/meta-box/css/select-advanced.css +3 -0
  75. inc/libraries/meta-box/css/select.css +3 -2
  76. inc/libraries/meta-box/css/style.css +39 -17
  77. inc/libraries/meta-box/css/video.css +0 -22
  78. inc/libraries/meta-box/img/loader.gif +0 -0
  79. inc/libraries/meta-box/inc/about/about.php +3 -3
  80. inc/libraries/meta-box/inc/about/sections/getting-started.php +15 -15
  81. inc/libraries/meta-box/inc/about/sections/tabs.php +1 -1
  82. inc/libraries/meta-box/inc/about/sections/welcome.php +2 -2
  83. inc/libraries/meta-box/inc/autoloader.php +6 -2
  84. inc/libraries/meta-box/inc/clone.php +9 -2
  85. inc/libraries/meta-box/inc/core.php +39 -6
  86. inc/libraries/meta-box/inc/field-registry.php +11 -13
  87. inc/libraries/meta-box/inc/field.php +79 -28
  88. inc/libraries/meta-box/inc/fields/autocomplete.php +3 -3
  89. inc/libraries/meta-box/inc/fields/button.php +1 -1
  90. inc/libraries/meta-box/inc/fields/checkbox-list.php +0 -1
  91. inc/libraries/meta-box/inc/fields/checkbox.php +8 -5
  92. inc/libraries/meta-box/inc/fields/choice.php +7 -4
  93. inc/libraries/meta-box/inc/fields/color.php +26 -11
  94. inc/libraries/meta-box/inc/fields/datetime.php +20 -0
  95. inc/libraries/meta-box/inc/fields/fieldset-text.php +26 -11
  96. inc/libraries/meta-box/inc/fields/file-input.php +5 -4
  97. inc/libraries/meta-box/inc/fields/file.php +122 -110
  98. inc/libraries/meta-box/inc/fields/image-advanced.php +8 -16
  99. inc/libraries/meta-box/inc/fields/image-select.php +8 -5
  100. inc/libraries/meta-box/inc/fields/image.php +55 -26
  101. inc/libraries/meta-box/inc/fields/input-list.php +2 -4
  102. inc/libraries/meta-box/inc/fields/input.php +11 -9
  103. inc/libraries/meta-box/inc/fields/key-value.php +17 -13
  104. inc/libraries/meta-box/inc/fields/map.php +49 -30
  105. inc/libraries/meta-box/inc/fields/media.php +15 -15
  106. inc/libraries/meta-box/inc/fields/multiple-values.php +7 -4
  107. inc/libraries/meta-box/inc/fields/oembed.php +10 -9
  108. inc/libraries/meta-box/inc/fields/post.php +7 -34
  109. inc/libraries/meta-box/inc/fields/select-advanced.php +1 -1
  110. inc/libraries/meta-box/inc/fields/select.php +1 -1
  111. inc/libraries/meta-box/inc/fields/slider.php +1 -1
  112. inc/libraries/meta-box/inc/fields/taxonomy-advanced.php +36 -20
  113. inc/libraries/meta-box/inc/fields/taxonomy.php +12 -11
  114. inc/libraries/meta-box/inc/fields/text-list.php +30 -21
  115. inc/libraries/meta-box/inc/fields/textarea.php +13 -11
  116. inc/libraries/meta-box/inc/fields/thickbox-image.php +0 -80
  117. inc/libraries/meta-box/inc/fields/user.php +1 -1
  118. inc/libraries/meta-box/inc/fields/video.php +19 -6
  119. inc/libraries/meta-box/inc/fields/wysiwyg.php +1 -1
  120. inc/libraries/meta-box/inc/functions.php +32 -10
  121. inc/libraries/meta-box/inc/loader.php +12 -8
  122. inc/libraries/meta-box/inc/media-modal.php +3 -1
  123. inc/libraries/meta-box/inc/meta-box-registry.php +22 -0
  124. inc/libraries/meta-box/inc/meta-box.php +104 -23
  125. inc/libraries/meta-box/inc/storage-registry.php +4 -0
  126. inc/libraries/meta-box/inc/storages/post.php +4 -10
  127. inc/libraries/meta-box/inc/templates/image-advanced.php +6 -6
  128. inc/libraries/meta-box/inc/templates/media.php +11 -11
  129. inc/libraries/meta-box/inc/templates/video.php +9 -9
  130. inc/libraries/meta-box/inc/validation.php +1 -1
  131. inc/libraries/meta-box/inc/walkers/select.php +1 -1
  132. inc/libraries/meta-box/inc/wpml.php +2 -2
  133. inc/libraries/meta-box/js/autocomplete.js +7 -7
  134. inc/libraries/meta-box/js/autosave.js +12 -10
  135. inc/libraries/meta-box/js/clone.js +89 -32
  136. inc/libraries/meta-box/js/date.js +6 -2
  137. inc/libraries/meta-box/js/datetime.js +2 -2
  138. inc/libraries/meta-box/js/file-input.js +9 -3
  139. inc/libraries/meta-box/js/file-upload.js +9 -13
  140. inc/libraries/meta-box/js/file.js +33 -31
  141. inc/libraries/meta-box/js/image-advanced.js +14 -4
  142. inc/libraries/meta-box/js/image-upload.js +7 -4
  143. inc/libraries/meta-box/js/input-list.js +2 -2
  144. inc/libraries/meta-box/js/jquery-validation/additional-methods.min.js +4 -4
  145. inc/libraries/meta-box/js/jquery-validation/jquery.validate.min.js +4 -4
  146. inc/libraries/meta-box/js/map-frontend.js +5 -0
  147. inc/libraries/meta-box/js/map.js +47 -35
  148. inc/libraries/meta-box/js/media.js +135 -41
  149. inc/libraries/meta-box/js/oembed.js +6 -8
  150. inc/libraries/meta-box/js/range.js +2 -2
  151. inc/libraries/meta-box/js/select-advanced.js +2 -2
  152. inc/libraries/meta-box/js/select.js +2 -2
  153. inc/libraries/meta-box/js/select2/i18n/en.js +1 -1
  154. inc/libraries/meta-box/js/select2/select2.min.js +1 -1
  155. inc/libraries/meta-box/js/slider.js +2 -2
  156. inc/libraries/meta-box/js/thickbox-image.js +0 -34
  157. inc/libraries/meta-box/js/validate.js +7 -2
  158. inc/libraries/meta-box/js/video.js +7 -4
  159. inc/libraries/meta-box/js/wysiwyg.js +5 -5
  160. inc/libraries/meta-box/meta-box.php +3 -3
  161. inc/libraries/meta-box/readme.txt +74 -672
  162. inc/lp-constants.php +1 -1
  163. inc/lp-core-functions.php +7 -7
  164. inc/user-item/class-lp-user-item-course.php +69 -45
  165. inc/user-item/class-lp-user-item-quiz.php +12 -8
  166. inc/user/class-lp-profile.php +3 -3
  167. languages/learnpress-pl_PL.mo +0 -0
  168. languages/learnpress-pl_PL.po +7099 -1619
assets/css/admin/admin.css CHANGED
@@ -1731,15 +1731,26 @@
1731
  .post-type-lp_order #order_details .order-items table .remove-order-item {
1732
  text-decoration: none;
1733
  outline: none;
1734
- color: #FF0000;
1735
- display: none;
1736
- margin-left: 10px; }
 
 
1737
  .post-type-lp_order #order_details .order-items table .order-item-row:hover .remove-order-item {
1738
  display: inline-block; }
1739
 
1740
  .color-schemas {
1741
  margin: 0 20px 20px 0;
1742
  float: left; }
 
 
 
 
 
 
 
 
 
1743
  .color-schemas table {
1744
  border-collapse: collapse;
1745
  position: relative; }
@@ -1769,9 +1780,6 @@
1769
  color: #FF0000; }
1770
  .color-schemas .wp-color-result {
1771
  margin: 0; }
1772
- .color-schemas .color-selector input {
1773
- width: 0 !important;
1774
- opacity: 0; }
1775
  .color-schemas .clone-schema {
1776
  display: none; }
1777
  .color-schemas:first-child .remove-schema,
@@ -1793,6 +1801,30 @@
1793
  /**
1794
  * General style for admin editor.
1795
  */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1796
  .lp-admin-editor {
1797
  background-color: #fff;
1798
  border: 1px solid #ddd;
@@ -1809,7 +1841,7 @@
1809
  * Course admin editor.
1810
  */
1811
  #admin-editor-lp_course .lp-course-curriculum .heading {
1812
- padding: 15px;
1813
  position: relative; }
1814
  #admin-editor-lp_course .lp-course-curriculum .heading h4 {
1815
  margin: 0;
@@ -1847,16 +1879,19 @@
1847
 
1848
  #admin-editor-lp_course .lp-course-curriculum .curriculum-sections {
1849
  margin: 0;
1850
- padding: 10px;
1851
  border-top: 1px solid #ddd; }
1852
 
1853
  #admin-editor-lp_course .lp-course-curriculum .section {
1854
  border: 1px solid #e5e5e5;
1855
- margin-bottom: 10px;
1856
  opacity: 1;
1857
- background: #FFF; }
 
 
 
 
 
1858
  #admin-editor-lp_course .lp-course-curriculum .section.new-section {
1859
- margin-bottom: 0; }
1860
  #admin-editor-lp_course .lp-course-curriculum .section.new-section form {
1861
  margin: 0; }
1862
  #admin-editor-lp_course .lp-course-curriculum .section.new-section .section-head {
@@ -1866,19 +1901,37 @@
1866
  top: 1px; }
1867
  #admin-editor-lp_course .lp-course-curriculum .section.new-section .section-head .creatable:before {
1868
  content: "\f132"; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1869
  #admin-editor-lp_course .lp-course-curriculum .section:hover .section-actions .remove {
1870
  display: inline-block; }
1871
- #admin-editor-lp_course .lp-course-curriculum .section.sortable-ghost {
1872
- opacity: 0.5; }
1873
- #admin-editor-lp_course .lp-course-curriculum .section.updating .section-head {
1874
- background-color: #e6f2d0; }
1875
  #admin-editor-lp_course .lp-course-curriculum .section input {
1876
  background-color: transparent;
1877
  box-shadow: none; }
1878
  #admin-editor-lp_course .lp-course-curriculum .section input:focus {
1879
  box-shadow: none; }
1880
  #admin-editor-lp_course .lp-course-curriculum .section .section-head {
1881
- background-color: #f9f9f9;
1882
  padding: 3px;
1883
  position: relative;
1884
  transition: background 500ms ease-out; }
@@ -1941,13 +1994,15 @@
1941
  font-size: 1.2em;
1942
  border: none;
1943
  line-height: 30px;
1944
- width: calc(100% - 80px);
1945
  padding-left: 0; }
1946
  #admin-editor-lp_course .lp-course-curriculum .section .description-input {
1947
  border: none;
1948
  width: 100%;
1949
  color: #999;
1950
- font-style: italic; }
 
 
1951
  #admin-editor-lp_course .lp-course-curriculum .section .description-input:focus {
1952
  color: #444; }
1953
 
@@ -1965,31 +2020,29 @@
1965
  transition: background 200ms ease-out;
1966
  display: flex;
1967
  justify-content: center;
1968
- align-items: center; }
 
 
 
1969
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item:nth-child(2n+1) {
1970
  background-color: #f4fcff; }
1971
- #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.sortable-ghost {
1972
- opacity: 0.5; }
1973
- #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.updating {
1974
- background-color: #e6f2d0; }
1975
- #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.updating:before {
1976
- position: absolute;
1977
- content: '';
1978
- top: 0;
1979
- left: 0;
1980
- right: 0;
1981
- bottom: 0;
1982
- z-index: 2; }
1983
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.removing {
1984
  background-color: #ffeded; }
1985
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .drag {
1986
- width: 18px;
1987
  height: 20px;
1988
  cursor: url("../../images/openhand.cur") 7 5, default;
1989
- flex-shrink: 0;
1990
  visibility: hidden;
1991
  fill: #d5dce0;
1992
- padding-top: 3px; }
 
1993
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .drag:hover {
1994
  fill: #0085ba; }
1995
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .icon {
@@ -2030,13 +2083,14 @@
2030
  display: flex;
2031
  align-items: center;
2032
  transition: all 200ms ease-out; }
 
 
2033
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .title {
2034
  display: inline-block;
2035
  margin: 0;
2036
  flex: 1; }
2037
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types {
2038
- display: inline-block;
2039
- margin-left: 17px; }
2040
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types:hover, #admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types:focus {
2041
  background-color: #fff; }
2042
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types:hover .type, #admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types:focus .type {
@@ -2058,6 +2112,8 @@
2058
  content: '\f469'; }
2059
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type.lp_lesson:before {
2060
  content: '\f330'; }
 
 
2061
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions {
2062
  text-align: right; }
2063
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action {
@@ -2083,7 +2139,6 @@
2083
  position: absolute;
2084
  top: 100%;
2085
  width: 165px;
2086
- padding: 2px 0;
2087
  right: 0;
2088
  background: #fdfeff;
2089
  margin: 0;
@@ -2093,11 +2148,13 @@
2093
  text-align: center; }
2094
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul li {
2095
  margin: 0;
2096
- padding: 8px;
2097
- border-bottom: 1px solid #eee; }
2098
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul li a {
2099
  color: #0073aa;
2100
- text-decoration: none; }
 
 
2101
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul li a.delete-permanently {
2102
  color: #d05d5d; }
2103
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul li:hover {
@@ -2111,11 +2168,33 @@
2111
  content: '\f469'; }
2112
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.lp_lesson .icon:before {
2113
  content: '\f330'; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2114
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .icon {
2115
- width: 38px;
2116
  font-size: 20px;
2117
  color: #0085ba;
2118
- text-align: center; }
 
2119
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .icon:before {
2120
  font-family: Dashicons; }
2121
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item input {
@@ -2140,37 +2219,57 @@
2140
  #admin-editor-lp_course .lp-course-curriculum .section-actions .remove.confirm .icon {
2141
  display: none; }
2142
 
2143
- /**
2144
- * Quiz admin editor.
2145
- */
2146
- #admin-editor-lp_quiz .lp-box-data-head .status {
2147
- font-family: Dashicons;
2148
- font-size: 20px;
2149
- position: relative;
2150
- top: 5px;
2151
- margin-left: 10px;
2152
- visibility: hidden; }
2153
- #admin-editor-lp_quiz .lp-box-data-head .status:before {
2154
- content: "\f463"; }
2155
- #admin-editor-lp_quiz .lp-box-data-head .status.loading {
2156
- visibility: visible;
2157
- animation: rotation 2s infinite linear;
2158
- display: inline-block; }
2159
 
2160
- #admin-editor-lp_quiz .lp-box-data-head .collapse-list-questions {
2161
- font-family: Dashicons;
2162
  position: absolute;
2163
  top: 0;
2164
- right: 5px;
2165
- bottom: 0;
2166
- font-size: 30px;
2167
- display: flex;
2168
- justify-content: center;
2169
- align-items: center;
2170
- cursor: pointer;
2171
- width: 40px;
2172
- height: 55px;
2173
- color: #999; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2174
 
2175
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions {
2176
  color: #777;
@@ -2181,40 +2280,43 @@
2181
  text-align: center; }
2182
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row > * {
2183
  width: 100%;
2184
- padding: 9px 10px; }
2185
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row > .sort {
2186
- width: 15px;
2187
- fill: #d5dce0;
2188
  cursor: url("../../images/openhand.cur") 7 5, default;
2189
  visibility: hidden;
2190
- padding-right: 0;
2191
- position: relative; }
2192
- #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row > .sort svg {
2193
- width: 18px;
2194
- height: 20px;
2195
- position: absolute;
2196
- top: 50%;
2197
- margin-top: -10px;
2198
- left: 4px; }
2199
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row > .sort:hover {
2200
- fill: #0085ba; }
2201
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row > .order {
2202
- width: 10px; }
2203
- #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row > .name {
2204
- padding: 10px; }
 
 
 
 
2205
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row > .type {
2206
  width: 150px; }
2207
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row > .actions {
2208
  width: 300px; }
 
 
2209
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row:hover > .sort {
2210
  visibility: visible; }
 
 
2211
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .header {
2212
- border-bottom: 1px solid #ddd; }
 
2213
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .header .table-row > * {
2214
- font-weight: bold;
2215
- padding: 12px 8px 12px 0; }
2216
- #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .header .table-row .sort {
2217
- width: 45px; }
 
2218
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-actions .name input {
2219
  width: 100%;
2220
  font-size: 14px;
@@ -2224,8 +2326,6 @@
2224
  font-weight: normal;
2225
  color: #777;
2226
  padding: 0; }
2227
- #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-actions.updating {
2228
- background-color: #e6f2d0; }
2229
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings {
2230
  border: 1px solid #ddd;
2231
  border-left: none;
@@ -2234,13 +2334,28 @@
2234
  padding: 20px; }
2235
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options {
2236
  border: 1px solid #ddd; }
2237
- #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options thead .answer-text {
 
 
 
 
2238
  width: calc(100% - 100px); }
2239
- #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options thead .answer-correct {
2240
- width: 65px; }
 
 
 
 
 
 
 
 
 
 
2241
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr {
2242
  background: #fff;
2243
- border: 1px solid #DDD; }
 
2244
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr:nth-child(2n) {
2245
  background: #f4fcff; }
2246
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr td {
@@ -2249,10 +2364,63 @@
2249
  position: static;
2250
  border: none; }
2251
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr td.sort {
2252
- cursor: url("../../images/openhand.cur") 7 5, default; }
 
 
 
 
 
 
2253
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr td.answer-correct {
2254
  text-align: center; }
2255
- #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody .answer-option .answer-text input {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2256
  width: 100%;
2257
  font-size: 14px;
2258
  border: none;
@@ -2266,6 +2434,42 @@
2266
  border-bottom: 1px solid #f1f1f1; }
2267
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item:nth-child(2n+1) {
2268
  background: #f4fcff; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2269
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .cell {
2270
  padding: 10px; }
2271
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .name input {
@@ -2320,7 +2524,8 @@
2320
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings {
2321
  background: #fff; }
2322
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options {
2323
- text-align: left; }
 
2324
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .inside {
2325
  margin: 0;
2326
  padding: 0; }
@@ -2329,21 +2534,48 @@
2329
  margin: 0; }
2330
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .inside .rwmb-meta-box .rwmb-field:nth-child(2n+1) {
2331
  background: #f4fcff; }
2332
- #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row {
2333
- text-align: left; }
2334
- #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question {
2335
- padding-left: 65px;
2336
- margin-top: -1px;
2337
- border-top: 1px solid #DDD; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2338
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title {
2339
  position: relative;
2340
  display: inline-block;
2341
  min-width: 500px; }
2342
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title input {
2343
- border: 1px solid #DDD;
2344
  width: 100%;
2345
  margin: 0;
2346
- padding: 6px 6px;
2347
  -webkit-box-shadow: none;
2348
  -moz-box-shadow: none;
2349
  box-shadow: none;
@@ -2356,6 +2588,11 @@
2356
  box-shadow: none; }
2357
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title input:focus {
2358
  border-color: #DDD; }
 
 
 
 
 
2359
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new {
2360
  display: inline;
2361
  position: relative; }
@@ -2399,11 +2636,39 @@
2399
  #admin-editor-lp_question {
2400
  background: #fff; }
2401
  #admin-editor-lp_question .lp-box-data-head {
2402
- padding: 5px 15px; }
2403
  #admin-editor-lp_question .lp-box-data-head .heading {
2404
- float: left; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2405
  #admin-editor-lp_question .lp-box-data-head .question-actions {
2406
- margin-top: 8px; }
 
 
 
 
 
 
 
 
 
 
2407
  #admin-editor-lp_question .lp-box-data-head .question-actions .question-types ul {
2408
  position: absolute;
2409
  top: 100%;
@@ -2421,11 +2686,11 @@
2421
  display: block;
2422
  white-space: nowrap;
2423
  text-decoration: none;
2424
- padding: 5px 25px;
2425
  font-size: 12px;
2426
  text-align: right;
2427
  color: #0073aa;
2428
- margin: 0; }
2429
  #admin-editor-lp_question .lp-box-data-head .question-actions .question-types ul:hover {
2430
  display: block; }
2431
  #admin-editor-lp_question .lp-box-data-head .question-actions:hover .question-types ul {
@@ -2443,27 +2708,43 @@
2443
  padding: 15px;
2444
  background: #F5F5F5;
2445
  border-bottom: 1px solid #DDD; }
2446
- #admin-editor-lp_question .lp-box-data-content table.list-question-answers thead tr th.sort, #admin-editor-lp_question .lp-box-data-content table.list-question-answers thead tr th.order, #admin-editor-lp_question .lp-box-data-content table.list-question-answers thead tr th.actions {
2447
- width: 10px; }
2448
- #admin-editor-lp_question .lp-box-data-content table.list-question-answers thead tr th.answer-correct {
2449
- width: 65px; }
 
 
 
 
 
 
 
 
 
 
 
 
 
2450
  #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr {
2451
  background: #f4fcff;
2452
  color: #777; }
2453
  #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr:nth-child(2n) {
2454
  background: #fff; }
2455
- #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr:hover td.actions .remove-answer {
2456
- visibility: visible; }
2457
  #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.sort {
2458
  width: 15px;
2459
  text-align: center;
2460
  font-size: 18px;
2461
- color: #CCC;
2462
- cursor: url("../../images/openhand.cur") 7 5, default; }
2463
- #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.sort:hover {
2464
- color: #0085ba; }
 
 
 
 
 
2465
  #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.order {
2466
- font-size: 13px; }
2467
  #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.answer-text input {
2468
  width: 100%;
2469
  font-size: 14px;
@@ -2473,12 +2754,47 @@
2473
  font-weight: normal;
2474
  color: #777;
2475
  padding: 0; }
2476
- #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.actions .remove-answer {
2477
- visibility: hidden; }
2478
- #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.actions .remove-answer:hover {
2479
- background: transparent; }
2480
  #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.lp-toolbar-buttons {
2481
  z-index: auto; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2482
  #admin-editor-lp_question .lp-box-data-content .add-answer {
2483
  margin: 15px 0 0 0; }
2484
 
@@ -2548,9 +2864,9 @@
2548
  border-right: 1px solid #ddd;
2549
  position: absolute;
2550
  right: 0;
2551
- height: 20px;
2552
  top: 50%;
2553
- margin-top: -10px; }
2554
  #lp-modal-choose-items .lp-choose-items .header .tabs .tab.active:after {
2555
  border: 1px solid #ddd;
2556
  transform: rotate(45deg);
@@ -2568,10 +2884,12 @@
2568
  #lp-modal-choose-items .lp-choose-items .header .tabs .tab.active a {
2569
  color: #333; }
2570
  #lp-modal-choose-items .lp-choose-items .header .tabs .tab a {
2571
- padding: 15px 20px;
2572
  text-decoration: none;
2573
  display: inline-block;
2574
- font-weight: 600; }
 
 
2575
  #lp-modal-choose-items .lp-choose-items .header .tabs .tab a:focus {
2576
  box-shadow: none; }
2577
  #lp-modal-choose-items .lp-choose-items .header .close {
@@ -2581,12 +2899,13 @@
2581
  right: 0;
2582
  cursor: pointer;
2583
  font-size: 1em;
2584
- padding: 9px;
2585
- z-index: 9; }
2586
  #lp-modal-choose-items .lp-choose-items .main {
2587
  padding: 20px;
2588
  position: relative;
2589
- overflow: hidden; }
 
2590
  #lp-modal-choose-items .lp-choose-items .main .section-item {
2591
  cursor: pointer;
2592
  transition: color 200ms ease-out;
@@ -2602,10 +2921,11 @@
2602
  #lp-modal-choose-items .lp-choose-items .main .search {
2603
  margin-bottom: 20px;
2604
  background: transparent; }
2605
- #lp-modal-choose-items .lp-choose-items .main .search input {
2606
  width: 100%;
2607
  font-size: 1.2em;
2608
- line-height: 1.5; }
 
2609
  #lp-modal-choose-items .lp-choose-items .main .list-items {
2610
  min-height: 260px;
2611
  margin: 0; }
@@ -2625,7 +2945,7 @@
2625
  z-index: 2;
2626
  padding: 20px;
2627
  transform: translate(100%, 0);
2628
- max-height: 400px;
2629
  overflow: auto; }
2630
  #lp-modal-choose-items .lp-choose-items .lp-added-items-preview.show {
2631
  transform: translate(0, 0); }
@@ -2636,6 +2956,11 @@
2636
  #lp-modal-choose-items .lp-choose-items .footer {
2637
  padding: 20px; }
2638
 
 
 
 
 
 
2639
  @media screen and (max-width: 900px) {
2640
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .question-settings.table-row {
2641
  display: block;
@@ -2771,5 +3096,14 @@
2771
  #adminmenu .update-plugins.lp-plugins-count {
2772
  padding: 0 5px; }
2773
 
 
 
 
 
 
 
 
 
 
2774
  .learnpress .actions {
2775
  margin: 0; }
1731
  .post-type-lp_order #order_details .order-items table .remove-order-item {
1732
  text-decoration: none;
1733
  outline: none;
1734
+ color: #CCC; }
1735
+ .post-type-lp_order #order_details .order-items table .remove-order-item .dashicons {
1736
+ font-size: 18px; }
1737
+ .post-type-lp_order #order_details .order-items table .remove-order-item:hover {
1738
+ color: #FF0000; }
1739
  .post-type-lp_order #order_details .order-items table .order-item-row:hover .remove-order-item {
1740
  display: inline-block; }
1741
 
1742
  .color-schemas {
1743
  margin: 0 20px 20px 0;
1744
  float: left; }
1745
+ .color-schemas .wp-color-picker {
1746
+ width: 80px;
1747
+ height: 24px;
1748
+ vertical-align: top;
1749
+ margin: 0; }
1750
+ .color-schemas .wp-picker-holder {
1751
+ position: absolute; }
1752
+ .color-schemas .buttons {
1753
+ display: none; }
1754
  .color-schemas table {
1755
  border-collapse: collapse;
1756
  position: relative; }
1780
  color: #FF0000; }
1781
  .color-schemas .wp-color-result {
1782
  margin: 0; }
 
 
 
1783
  .color-schemas .clone-schema {
1784
  display: none; }
1785
  .color-schemas:first-child .remove-schema,
1801
  /**
1802
  * General style for admin editor.
1803
  */
1804
+ @-webkit-keyframes rotating4 /* Safari and Chrome */ {
1805
+ from {
1806
+ -webkit-transform: rotate(0deg);
1807
+ -o-transform: rotate(0deg);
1808
+ transform: rotate(0deg); }
1809
+ to {
1810
+ -webkit-transform: rotate(360deg);
1811
+ -o-transform: rotate(360deg);
1812
+ transform: rotate(360deg); } }
1813
+
1814
+ @keyframes rotating4 {
1815
+ from {
1816
+ -ms-transform: rotate(0deg);
1817
+ -moz-transform: rotate(0deg);
1818
+ -webkit-transform: rotate(0deg);
1819
+ -o-transform: rotate(0deg);
1820
+ transform: rotate(0deg); }
1821
+ to {
1822
+ -ms-transform: rotate(360deg);
1823
+ -moz-transform: rotate(360deg);
1824
+ -webkit-transform: rotate(360deg);
1825
+ -o-transform: rotate(360deg);
1826
+ transform: rotate(360deg); } }
1827
+
1828
  .lp-admin-editor {
1829
  background-color: #fff;
1830
  border: 1px solid #ddd;
1841
  * Course admin editor.
1842
  */
1843
  #admin-editor-lp_course .lp-course-curriculum .heading {
1844
+ padding: 12px 10px;
1845
  position: relative; }
1846
  #admin-editor-lp_course .lp-course-curriculum .heading h4 {
1847
  margin: 0;
1879
 
1880
  #admin-editor-lp_course .lp-course-curriculum .curriculum-sections {
1881
  margin: 0;
 
1882
  border-top: 1px solid #ddd; }
1883
 
1884
  #admin-editor-lp_course .lp-course-curriculum .section {
1885
  border: 1px solid #e5e5e5;
 
1886
  opacity: 1;
1887
+ background: #FFF;
1888
+ border-left: 0;
1889
+ border-right: 0;
1890
+ margin-bottom: -1px; }
1891
+ #admin-editor-lp_course .lp-course-curriculum .section:first-child {
1892
+ border-top: 0; }
1893
  #admin-editor-lp_course .lp-course-curriculum .section.new-section {
1894
+ margin-top: 1px; }
1895
  #admin-editor-lp_course .lp-course-curriculum .section.new-section form {
1896
  margin: 0; }
1897
  #admin-editor-lp_course .lp-course-curriculum .section.new-section .section-head {
1901
  top: 1px; }
1902
  #admin-editor-lp_course .lp-course-curriculum .section.new-section .section-head .creatable:before {
1903
  content: "\f132"; }
1904
+ #admin-editor-lp_course .lp-course-curriculum .section.empty-section {
1905
+ position: relative; }
1906
+ #admin-editor-lp_course .lp-course-curriculum .section.empty-section:after {
1907
+ position: absolute;
1908
+ top: 0;
1909
+ left: 0;
1910
+ right: 0;
1911
+ bottom: 0;
1912
+ background: #FFF;
1913
+ content: '';
1914
+ opacity: 0.5; }
1915
+ #admin-editor-lp_course .lp-course-curriculum .section.empty-section .section-head .movable:before {
1916
+ content: "\f463";
1917
+ color: #a2a2a2;
1918
+ display: inline-block;
1919
+ -webkit-animation: rotating4 2s linear infinite;
1920
+ -moz-animation: rotating4 2s linear infinite;
1921
+ -ms-animation: rotating4 2s linear infinite;
1922
+ -o-animation: rotating4 2s linear infinite;
1923
+ animation: rotating4 2s linear infinite; }
1924
+ #admin-editor-lp_course .lp-course-curriculum .section.empty-section .section-collapse {
1925
+ display: none; }
1926
  #admin-editor-lp_course .lp-course-curriculum .section:hover .section-actions .remove {
1927
  display: inline-block; }
 
 
 
 
1928
  #admin-editor-lp_course .lp-course-curriculum .section input {
1929
  background-color: transparent;
1930
  box-shadow: none; }
1931
  #admin-editor-lp_course .lp-course-curriculum .section input:focus {
1932
  box-shadow: none; }
1933
  #admin-editor-lp_course .lp-course-curriculum .section .section-head {
1934
+ background-color: #f4fcff;
1935
  padding: 3px;
1936
  position: relative;
1937
  transition: background 500ms ease-out; }
1994
  font-size: 1.2em;
1995
  border: none;
1996
  line-height: 30px;
1997
+ width: calc(100% - 200px);
1998
  padding-left: 0; }
1999
  #admin-editor-lp_course .lp-course-curriculum .section .description-input {
2000
  border: none;
2001
  width: 100%;
2002
  color: #999;
2003
+ font-style: italic;
2004
+ margin: 0;
2005
+ padding: 0; }
2006
  #admin-editor-lp_course .lp-course-curriculum .section .description-input:focus {
2007
  color: #444; }
2008
 
2020
  transition: background 200ms ease-out;
2021
  display: flex;
2022
  justify-content: center;
2023
+ align-items: center;
2024
+ background: #FFF; }
2025
+ #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.ui-sortable-helper {
2026
+ border-bottom: 1px solid #EEE; }
2027
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item:nth-child(2n+1) {
2028
  background-color: #f4fcff; }
2029
+ #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.updating:before {
2030
+ position: absolute;
2031
+ content: '';
2032
+ top: 0;
2033
+ left: 0;
2034
+ right: 0;
2035
+ bottom: 0;
2036
+ z-index: 2; }
 
 
 
 
2037
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.removing {
2038
  background-color: #ffeded; }
2039
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .drag {
 
2040
  height: 20px;
2041
  cursor: url("../../images/openhand.cur") 7 5, default;
 
2042
  visibility: hidden;
2043
  fill: #d5dce0;
2044
+ padding-top: 3px;
2045
+ flex: 0 0 18px; }
2046
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .drag:hover {
2047
  fill: #0085ba; }
2048
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .icon {
2083
  display: flex;
2084
  align-items: center;
2085
  transition: all 200ms ease-out; }
2086
+ #admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .drag {
2087
+ cursor: default; }
2088
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .title {
2089
  display: inline-block;
2090
  margin: 0;
2091
  flex: 1; }
2092
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types {
2093
+ display: inline-block; }
 
2094
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types:hover, #admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types:focus {
2095
  background-color: #fff; }
2096
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types:hover .type, #admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types:focus .type {
2112
  content: '\f469'; }
2113
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type.lp_lesson:before {
2114
  content: '\f330'; }
2115
+ #admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type.empty-item:before {
2116
+ content: "\f463"; }
2117
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions {
2118
  text-align: right; }
2119
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action {
2139
  position: absolute;
2140
  top: 100%;
2141
  width: 165px;
 
2142
  right: 0;
2143
  background: #fdfeff;
2144
  margin: 0;
2148
  text-align: center; }
2149
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul li {
2150
  margin: 0;
2151
+ border-bottom: 1px solid #eee;
2152
+ text-align: right; }
2153
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul li a {
2154
  color: #0073aa;
2155
+ text-decoration: none;
2156
+ padding: 8px;
2157
+ display: block; }
2158
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul li a.delete-permanently {
2159
  color: #d05d5d; }
2160
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul li:hover {
2168
  content: '\f469'; }
2169
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.lp_lesson .icon:before {
2170
  content: '\f330'; }
2171
+ #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.empty-item {
2172
+ color: #a2a2a2;
2173
+ position: relative; }
2174
+ #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.empty-item:after {
2175
+ position: absolute;
2176
+ top: 0;
2177
+ left: 0;
2178
+ right: 0;
2179
+ bottom: 0;
2180
+ background: #FFF;
2181
+ content: '';
2182
+ opacity: 0.5; }
2183
+ #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.empty-item .item-actions {
2184
+ display: none; }
2185
+ #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.empty-item .icon:before {
2186
+ content: "\f463";
2187
+ color: #a2a2a2;
2188
+ -webkit-animation: rotating4 2s linear infinite;
2189
+ -moz-animation: rotating4 2s linear infinite;
2190
+ -ms-animation: rotating4 2s linear infinite;
2191
+ -o-animation: rotating4 2s linear infinite;
2192
+ animation: rotating4 2s linear infinite; }
2193
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .icon {
 
2194
  font-size: 20px;
2195
  color: #0085ba;
2196
+ text-align: center;
2197
+ flex: 0 0 29px; }
2198
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .icon:before {
2199
  font-family: Dashicons; }
2200
  #admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item input {
2219
  #admin-editor-lp_course .lp-course-curriculum .section-actions .remove.confirm .icon {
2220
  display: none; }
2221
 
2222
+ #admin-editor-lp_course .lp-course-curriculum .ui-sortable-placeholder {
2223
+ visibility: visible !important;
2224
+ background: #bdf4fe !important;
2225
+ display: block;
2226
+ border-color: #bdf4fe !important; }
 
 
 
 
 
 
 
 
 
 
 
2227
 
2228
+ .section-item-counts {
 
2229
  position: absolute;
2230
  top: 0;
2231
+ right: 41px;
2232
+ white-space: nowrap;
2233
+ line-height: 44px;
2234
+ font-size: 12px; }
2235
+ .section-item-counts span {
2236
+ font-weight: bold;
2237
+ color: #999; }
2238
+
2239
+ /**
2240
+ * Quiz admin editor.
2241
+ */
2242
+ #admin-editor-lp_quiz .lp-box-data-head {
2243
+ padding: 12px 10px; }
2244
+ #admin-editor-lp_quiz .lp-box-data-head h3 {
2245
+ padding: 0; }
2246
+ #admin-editor-lp_quiz .lp-box-data-head .status {
2247
+ font-family: Dashicons;
2248
+ font-size: 20px;
2249
+ position: relative;
2250
+ top: 5px;
2251
+ margin-left: 10px;
2252
+ visibility: hidden; }
2253
+ #admin-editor-lp_quiz .lp-box-data-head .status:before {
2254
+ content: "\f463"; }
2255
+ #admin-editor-lp_quiz .lp-box-data-head .status.loading {
2256
+ visibility: visible;
2257
+ animation: rotation 2s infinite linear;
2258
+ display: inline-block; }
2259
+ #admin-editor-lp_quiz .lp-box-data-head .collapse-list-questions {
2260
+ font-family: Dashicons;
2261
+ position: absolute;
2262
+ top: 0;
2263
+ right: 0;
2264
+ bottom: 0;
2265
+ font-size: 30px;
2266
+ display: flex;
2267
+ justify-content: center;
2268
+ align-items: center;
2269
+ cursor: pointer;
2270
+ width: 40px;
2271
+ height: 46px;
2272
+ color: #999; }
2273
 
2274
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions {
2275
  color: #777;
2280
  text-align: center; }
2281
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row > * {
2282
  width: 100%;
2283
+ padding: 12px 10px; }
2284
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row > .sort {
2285
+ flex: 0 0 15px;
 
2286
  cursor: url("../../images/openhand.cur") 7 5, default;
2287
  visibility: hidden;
2288
+ position: relative;
2289
+ font-size: 18px;
2290
+ color: #d5dce0; }
 
 
 
 
 
 
2291
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row > .sort:hover {
2292
+ color: #0085ba; }
2293
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row > .order {
2294
+ flex: 0 0 30px;
2295
+ text-align: right;
2296
+ font-weight: bold;
2297
+ font-size: 15px;
2298
+ padding: 12px 0; }
2299
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row > .order:after {
2300
+ content: '.'; }
2301
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row > .type {
2302
  width: 150px; }
2303
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row > .actions {
2304
  width: 300px; }
2305
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row > .name {
2306
+ padding-left: 5px; }
2307
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row:hover > .sort {
2308
  visibility: visible; }
2309
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row .actions .lp-box-data-actions {
2310
+ text-align: right !important; }
2311
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .header {
2312
+ border-bottom: 1px solid #ddd;
2313
+ display: none; }
2314
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .header .table-row > * {
2315
+ font-weight: bold; }
2316
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .header .table-row > .order:after {
2317
+ content: ''; }
2318
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .header .table-row > .actions {
2319
+ padding: 12px 0; }
2320
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-actions .name input {
2321
  width: 100%;
2322
  font-size: 14px;
2326
  font-weight: normal;
2327
  color: #777;
2328
  padding: 0; }
 
 
2329
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings {
2330
  border: 1px solid #ddd;
2331
  border-left: none;
2334
  padding: 20px; }
2335
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options {
2336
  border: 1px solid #ddd; }
2337
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .sort {
2338
+ width: 12px;
2339
+ padding: 8px 5px; }
2340
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .answer-text {
2341
+ padding-left: 5px;
2342
  width: calc(100% - 100px); }
2343
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .order {
2344
+ width: 30px;
2345
+ text-align: right;
2346
+ padding: 0; }
2347
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .answer-correct {
2348
+ width: 65px;
2349
+ text-align: center; }
2350
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .actions {
2351
+ padding: 0;
2352
+ text-align: right; }
2353
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .actions .lp-toolbar-btn {
2354
+ height: 42px; }
2355
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr {
2356
  background: #fff;
2357
+ border: 1px solid #DDD;
2358
+ position: relative; }
2359
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr:nth-child(2n) {
2360
  background: #f4fcff; }
2361
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr td {
2364
  position: static;
2365
  border: none; }
2366
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr td.sort {
2367
+ cursor: url("../../images/openhand.cur") 7 5, default;
2368
+ width: 12px;
2369
+ position: relative; }
2370
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr td.order {
2371
+ font-weight: bold; }
2372
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr td.answer-text {
2373
+ padding-left: 5px; }
2374
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr td.answer-correct {
2375
  text-align: center; }
2376
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr .svg-icon {
2377
+ height: 18px;
2378
+ vertical-align: middle;
2379
+ visibility: hidden;
2380
+ fill: #d5dce0; }
2381
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr:hover .svg-icon {
2382
+ visibility: visible; }
2383
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr:hover .sort:hover .svg-icon {
2384
+ fill: #0085ba; }
2385
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.ui-sortable-placeholder {
2386
+ visibility: visible !important; }
2387
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.ui-sortable-placeholder td {
2388
+ height: 43px;
2389
+ background: #bdf4fe !important; }
2390
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.ui-sortable-helper {
2391
+ border-left: none;
2392
+ border-right: none; }
2393
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.ui-sortable-helper td {
2394
+ border-bottom: 1px solid #DDD; }
2395
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.ui-sortable-helper td.sort {
2396
+ border-left: 0; }
2397
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.empty-option .sort i {
2398
+ display: none; }
2399
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.empty-option .sort:before {
2400
+ font-family: Dashicons;
2401
+ content: "\f463";
2402
+ display: inline-block;
2403
+ font-size: 18px;
2404
+ position: absolute;
2405
+ left: 4px;
2406
+ top: 12px;
2407
+ -webkit-animation: rotating4 2s linear infinite;
2408
+ -moz-animation: rotating4 2s linear infinite;
2409
+ -ms-animation: rotating4 2s linear infinite;
2410
+ -o-animation: rotating4 2s linear infinite;
2411
+ animation: rotating4 2s linear infinite; }
2412
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.empty-option td {
2413
+ position: relative; }
2414
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.empty-option td:after {
2415
+ content: '';
2416
+ top: 0;
2417
+ left: 0;
2418
+ right: 1px;
2419
+ bottom: 0;
2420
+ background: #FFF;
2421
+ position: absolute;
2422
+ opacity: 0.5; }
2423
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody .answer-text input {
2424
  width: 100%;
2425
  font-size: 14px;
2426
  border: none;
2434
  border-bottom: 1px solid #f1f1f1; }
2435
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item:nth-child(2n+1) {
2436
  background: #f4fcff; }
2437
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.ui-sortable-helper {
2438
+ border-top: 1px solid #f1f1f1; }
2439
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.ui-sortable-placeholder {
2440
+ visibility: visible !important;
2441
+ background: #bdf4fe !important;
2442
+ display: block;
2443
+ border-color: #bdf4fe !important; }
2444
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question, #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.updating {
2445
+ position: relative; }
2446
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question .question-actions .sort, #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.updating .question-actions .sort {
2447
+ visibility: visible; }
2448
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question .question-actions .sort .fa, #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.updating .question-actions .sort .fa {
2449
+ display: none; }
2450
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question .question-actions .sort:after, #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.updating .question-actions .sort:after {
2451
+ font-family: Dashicons;
2452
+ content: "\f463";
2453
+ font-size: 20px;
2454
+ display: inline-block;
2455
+ position: absolute;
2456
+ left: 5px;
2457
+ -webkit-animation: rotating4 2s linear infinite;
2458
+ -moz-animation: rotating4 2s linear infinite;
2459
+ -ms-animation: rotating4 2s linear infinite;
2460
+ -o-animation: rotating4 2s linear infinite;
2461
+ animation: rotating4 2s linear infinite; }
2462
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question:after, #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.updating:after {
2463
+ content: '';
2464
+ position: absolute;
2465
+ top: 0;
2466
+ left: 0;
2467
+ right: 0;
2468
+ bottom: 0;
2469
+ background: #FFF;
2470
+ opacity: 0.5; }
2471
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question .question-settings {
2472
+ display: none; }
2473
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .cell {
2474
  padding: 10px; }
2475
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .name input {
2524
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings {
2525
  background: #fff; }
2526
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options {
2527
+ text-align: left;
2528
+ padding-left: 0; }
2529
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .inside {
2530
  margin: 0;
2531
  padding: 0; }
2534
  margin: 0; }
2535
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .inside .rwmb-meta-box .rwmb-field:nth-child(2n+1) {
2536
  background: #f4fcff; }
2537
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .postbox .hndle {
2538
+ cursor: default; }
2539
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .postbox .toggle {
2540
+ float: right;
2541
+ width: 36px;
2542
+ height: 36px;
2543
+ position: absolute;
2544
+ top: 0;
2545
+ right: 0;
2546
+ line-height: 36px;
2547
+ text-align: center; }
2548
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .postbox .toggle:after {
2549
+ font-family: Dashicons;
2550
+ content: "\f460";
2551
+ font-size: 18px; }
2552
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings.closed .quiz-question-options {
2553
+ width: 38px; }
2554
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings.closed .postbox {
2555
+ min-width: 34px;
2556
+ height: 34px;
2557
+ line-height: 42px;
2558
+ text-align: center; }
2559
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings.closed .postbox .hndle {
2560
+ display: none; }
2561
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings.closed .postbox .toggle:after {
2562
+ content: "\f132"; }
2563
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer {
2564
+ border-top: 1px solid #DDD;
2565
+ margin-top: -1px; }
2566
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .order {
2567
+ line-height: 28px; }
2568
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row {
2569
+ text-align: left; }
2570
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title {
2571
  position: relative;
2572
  display: inline-block;
2573
  min-width: 500px; }
2574
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title input {
2575
+ border: 0;
2576
  width: 100%;
2577
  margin: 0;
2578
+ padding: 6px 0px;
2579
  -webkit-box-shadow: none;
2580
  -moz-box-shadow: none;
2581
  box-shadow: none;
2588
  box-shadow: none; }
2589
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title input:focus {
2590
  border-color: #DDD; }
2591
+ #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title input::placeholder {
2592
+ color: #999;
2593
+ font-style: italic;
2594
+ border-bottom: 1px solid #DDD;
2595
+ display: inline-block; }
2596
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new {
2597
  display: inline;
2598
  position: relative; }
2636
  #admin-editor-lp_question {
2637
  background: #fff; }
2638
  #admin-editor-lp_question .lp-box-data-head {
2639
+ padding: 0 10px; }
2640
  #admin-editor-lp_question .lp-box-data-head .heading {
2641
+ float: left;
2642
+ padding: 12px 10px; }
2643
+ #admin-editor-lp_question .lp-box-data-head .heading .section-item-counts {
2644
+ right: 50px; }
2645
+ #admin-editor-lp_question .lp-box-data-head .heading .section-item-counts span {
2646
+ background: #F5F5F5;
2647
+ padding: 0 9px;
2648
+ color: #00b9ff;
2649
+ margin-top: 8px;
2650
+ display: inline-block;
2651
+ line-height: 30px;
2652
+ height: 30px;
2653
+ -webkit-border-radius: 3px;
2654
+ -moz-border-radius: 3px;
2655
+ border-radius: 3px;
2656
+ border-top-right-radius: 0;
2657
+ border-bottom-right-radius: 0; }
2658
+ #admin-editor-lp_question .lp-box-data-head .lp-toolbar-buttons {
2659
+ height: 46px; }
2660
  #admin-editor-lp_question .lp-box-data-head .question-actions {
2661
+ margin-right: 10px;
2662
+ height: 30px;
2663
+ background: #BBB;
2664
+ margin-top: 8px;
2665
+ -webkit-border-radius: 3px;
2666
+ -moz-border-radius: 3px;
2667
+ border-radius: 3px;
2668
+ border-top-left-radius: 0;
2669
+ border-bottom-left-radius: 0; }
2670
+ #admin-editor-lp_question .lp-box-data-head .question-actions .question-types a {
2671
+ color: #FFF; }
2672
  #admin-editor-lp_question .lp-box-data-head .question-actions .question-types ul {
2673
  position: absolute;
2674
  top: 100%;
2686
  display: block;
2687
  white-space: nowrap;
2688
  text-decoration: none;
2689
+ padding: 5px;
2690
  font-size: 12px;
2691
  text-align: right;
2692
  color: #0073aa;
2693
+ min-width: 100px; }
2694
  #admin-editor-lp_question .lp-box-data-head .question-actions .question-types ul:hover {
2695
  display: block; }
2696
  #admin-editor-lp_question .lp-box-data-head .question-actions:hover .question-types ul {
2708
  padding: 15px;
2709
  background: #F5F5F5;
2710
  border-bottom: 1px solid #DDD; }
2711
+ #admin-editor-lp_question .lp-box-data-content table.list-question-answers .sort, #admin-editor-lp_question .lp-box-data-content table.list-question-answers .order, #admin-editor-lp_question .lp-box-data-content table.list-question-answers .actions {
2712
+ width: 10px; }
2713
+ #admin-editor-lp_question .lp-box-data-content table.list-question-answers .sort {
2714
+ padding: 0 10px; }
2715
+ #admin-editor-lp_question .lp-box-data-content table.list-question-answers .order {
2716
+ text-align: right;
2717
+ padding: 0;
2718
+ width: 30px;
2719
+ font-weight: bold; }
2720
+ #admin-editor-lp_question .lp-box-data-content table.list-question-answers .answer-correct {
2721
+ width: 65px;
2722
+ text-align: center; }
2723
+ #admin-editor-lp_question .lp-box-data-content table.list-question-answers .answer-text {
2724
+ padding-left: 5px; }
2725
+ #admin-editor-lp_question .lp-box-data-content table.list-question-answers .actions {
2726
+ padding-right: 0;
2727
+ text-align: right; }
2728
  #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr {
2729
  background: #f4fcff;
2730
  color: #777; }
2731
  #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr:nth-child(2n) {
2732
  background: #fff; }
 
 
2733
  #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.sort {
2734
  width: 15px;
2735
  text-align: center;
2736
  font-size: 18px;
2737
+ cursor: url("../../images/openhand.cur") 7 5, default;
2738
+ padding: 0; }
2739
+ #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.sort .svg-icon {
2740
+ visibility: hidden;
2741
+ fill: #d5dce0;
2742
+ height: 18px;
2743
+ vertical-align: middle; }
2744
+ #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.sort:hover .svg-icon {
2745
+ fill: #0085ba; }
2746
  #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.order {
2747
+ font-size: 14px; }
2748
  #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.answer-text input {
2749
  width: 100%;
2750
  font-size: 14px;
2754
  font-weight: normal;
2755
  color: #777;
2756
  padding: 0; }
 
 
 
 
2757
  #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.lp-toolbar-buttons {
2758
  z-index: auto; }
2759
+ #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr:hover td.actions .remove-answer {
2760
+ visibility: visible;
2761
+ height: 42px; }
2762
+ #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr:hover td.sort .svg-icon {
2763
+ visibility: visible; }
2764
+ #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.ui-sortable-placeholder {
2765
+ visibility: visible !important; }
2766
+ #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.ui-sortable-placeholder td {
2767
+ background: #bdf4fe !important;
2768
+ height: 43px; }
2769
+ #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.ui-sortable-helper td {
2770
+ border-bottom: 1px solid #DDD; }
2771
+ #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.ui-sortable-helper td.sort {
2772
+ border-left: 0; }
2773
+ #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.new-option .svg-icon {
2774
+ display: none; }
2775
+ #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.new-option td {
2776
+ position: relative; }
2777
+ #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.new-option .sort:before {
2778
+ content: "\f463";
2779
+ font-family: Dashicons;
2780
+ position: absolute;
2781
+ left: 10px;
2782
+ top: 12px;
2783
+ display: inline-block;
2784
+ -webkit-animation: rotating4 2s linear infinite;
2785
+ -moz-animation: rotating4 2s linear infinite;
2786
+ -ms-animation: rotating4 2s linear infinite;
2787
+ -o-animation: rotating4 2s linear infinite;
2788
+ animation: rotating4 2s linear infinite; }
2789
+ #admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.new-option td:after {
2790
+ position: absolute;
2791
+ content: '';
2792
+ background: #FFF;
2793
+ top: 0;
2794
+ left: 0;
2795
+ right: 0;
2796
+ bottom: 0;
2797
+ opacity: 0.5; }
2798
  #admin-editor-lp_question .lp-box-data-content .add-answer {
2799
  margin: 15px 0 0 0; }
2800
 
2864
  border-right: 1px solid #ddd;
2865
  position: absolute;
2866
  right: 0;
2867
+ height: 44px;
2868
  top: 50%;
2869
+ margin-top: -22px; }
2870
  #lp-modal-choose-items .lp-choose-items .header .tabs .tab.active:after {
2871
  border: 1px solid #ddd;
2872
  transform: rotate(45deg);
2884
  #lp-modal-choose-items .lp-choose-items .header .tabs .tab.active a {
2885
  color: #333; }
2886
  #lp-modal-choose-items .lp-choose-items .header .tabs .tab a {
2887
+ padding: 0 20px;
2888
  text-decoration: none;
2889
  display: inline-block;
2890
+ font-weight: 600;
2891
+ height: 44px;
2892
+ line-height: 44px; }
2893
  #lp-modal-choose-items .lp-choose-items .header .tabs .tab a:focus {
2894
  box-shadow: none; }
2895
  #lp-modal-choose-items .lp-choose-items .header .close {
2899
  right: 0;
2900
  cursor: pointer;
2901
  font-size: 1em;
2902
+ padding: 12px;
2903
+ z-index: 30; }
2904
  #lp-modal-choose-items .lp-choose-items .main {
2905
  padding: 20px;
2906
  position: relative;
2907
+ overflow: hidden;
2908
+ border-bottom: 1px solid #DDD; }
2909
  #lp-modal-choose-items .lp-choose-items .main .section-item {
2910
  cursor: pointer;
2911
  transition: color 200ms ease-out;
2921
  #lp-modal-choose-items .lp-choose-items .main .search {
2922
  margin-bottom: 20px;
2923
  background: transparent; }
2924
+ #lp-modal-choose-items .lp-choose-items .main .search input.modal-search-input {
2925
  width: 100%;
2926
  font-size: 1.2em;
2927
+ line-height: 1.5;
2928
+ padding: 10px 14px; }
2929
  #lp-modal-choose-items .lp-choose-items .main .list-items {
2930
  min-height: 260px;
2931
  margin: 0; }
2945
  z-index: 2;
2946
  padding: 20px;
2947
  transform: translate(100%, 0);
2948
+ max-height: 420px;
2949
  overflow: auto; }
2950
  #lp-modal-choose-items .lp-choose-items .lp-added-items-preview.show {
2951
  transform: translate(0, 0); }
2956
  #lp-modal-choose-items .lp-choose-items .footer {
2957
  padding: 20px; }
2958
 
2959
+ body.moving {
2960
+ cursor: url("../../images/closedhand.cur") 7 5, default !important; }
2961
+ body.moving .section-item .drag {
2962
+ cursor: url("../../images/closedhand.cur") 7 5, default !important; }
2963
+
2964
  @media screen and (max-width: 900px) {
2965
  #admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .question-settings.table-row {
2966
  display: block;
3096
  #adminmenu .update-plugins.lp-plugins-count {
3097
  padding: 0 5px; }
3098
 
3099
+ .search-box input[name="post-search-author"],
3100
+ .search-box .select2-container {
3101
+ margin: 0;
3102
+ min-width: 200px;
3103
+ vertical-align: top; }
3104
+
3105
+ .learn-press-notice-assigned-item {
3106
+ color: #FF0000; }
3107
+
3108
  .learnpress .actions {
3109
  margin: 0; }
assets/js/admin/admin.js CHANGED
@@ -378,6 +378,8 @@
378
  });
379
  }
380
 
 
 
381
  var $doc = $(document);
382
 
383
  function _ready() {
378
  });
379
  }
380
 
381
+
382
+
383
  var $doc = $(document);
384
 
385
  function _ready() {
assets/js/admin/course-editor.js CHANGED
@@ -15,749 +15,853 @@
15
  };
16
  })(window);
17
 
 
18
 
19
- /**
20
- * I18n Store
21
- *
22
- * @since 3.0.0
23
- */
24
 
25
- var LP_Curriculum_i18n_Store = (function (Vue, helpers, data) {
26
- var state = helpers.cloneObject(data.i18n);
 
 
 
27
 
28
- var getters = {
29
- all: function (state) {
30
- return state;
31
- }
32
- };
33
-
34
- return {
35
- namespaced: true,
36
- state: state,
37
- getters: getters
38
- };
39
 
40
- })(Vue, LP_Helpers, lp_course_editor);
41
-
42
- /**
43
- * Sections Store.
44
- *
45
- * @since 3.0.0
46
- */
47
- var LP_Curriculum_Sections_Store = (function (Vue, helpers, data) {
48
- var state = helpers.cloneObject(data.sections);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
 
50
- state.statusUpdateSection = {};
51
- state.statusUpdateSectionItem = {};
52
 
53
- state.sections = state.sections.map(function (section) {
54
- var hiddenSections = state.hidden_sections;
55
- var find = hiddenSections.find(function (sectionId) {
56
- return parseInt(section.id) === parseInt(sectionId);
57
  });
58
 
59
- section.open = !find;
60
-
61
- return section;
62
- });
63
-
64
- var getters = {
65
- sections: function (state) {
66
- return state.sections || [];
67
- },
68
- urlEdit: function (state) {
69
- return state.urlEdit;
70
- },
71
- hiddenSections: function (state) {
72
- return state.sections
73
- .filter(function (section) {
74
- return !section.open;
75
- })
76
- .map(function (section) {
77
- return parseInt(section.id);
78
- });
79
- },
80
- isHiddenAllSections: function (state, getters) {
81
- var sections = getters['sections'];
82
- var hiddenSections = getters['hiddenSections'];
83
-
84
- return hiddenSections.length === sections.length;
85
- },
86
- statusUpdateSection: function (state) {
87
- return state.statusUpdateSection;
88
- },
89
- statusUpdateSectionItem: function (state) {
90
- return state.statusUpdateSectionItem;
91
- }
92
- };
93
-
94
- var mutations = {
95
- 'SORT_SECTION': function (state, orders) {
96
- state.sections = state.sections.map(function (section) {
97
- section.order = orders[section.id];
98
 
99
- return section;
100
- });
101
- },
102
- 'SET_SECTIONS': function (state, sections) {
103
- state.sections = sections;
104
- },
105
- 'ADD_NEW_SECTION': function (state, section) {
106
- section.open = true;
107
- state.sections.push(section);
108
- },
109
- 'REMOVE_SECTION': function (state, index) {
110
- state.sections.splice(index, 1);
111
- },
112
- 'REMOVE_SECTION_ITEM': function (state, payload) {
113
- var section = state.sections.find(function (section) {
114
- return (section.id === payload.section_id);
115
- });
116
 
117
- var items = section.items || [];
118
- var index = -1;
119
- items.forEach(function (item, i) {
120
- if (item.id === payload.item_id) {
121
- index = i;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
122
  }
123
- });
124
 
125
- if (index !== -1) {
126
- items.splice(index, 1);
127
- }
128
- },
129
- 'UPDATE_SECTION_ITEMS': function (state, payload) {
130
- var section = state.sections.find(function (section) {
131
- return parseInt(section.id) === parseInt(payload.section_id);
132
- });
 
 
 
 
 
 
 
 
 
 
133
 
134
- if (!section) {
135
- return;
136
- }
137
- section.items = payload.items;
138
- },
139
- 'UPDATE_SECTION_ITEM': function (state, payload) {
 
 
140
 
141
- },
 
 
 
 
 
 
 
 
 
 
 
142
 
143
- 'CLOSE_SECTION': function (state, section) {
144
- state.sections.forEach(function (_section, index) {
145
- if (section.id === _section.id) {
146
- state.sections[index].open = false;
147
  }
148
- });
 
 
149
 
150
- },
151
 
152
- 'OPEN_SECTION': function (state, section) {
153
- state.sections.forEach(function (_section, index) {
154
- if (section.id === _section.id) {
155
- state.sections[index].open = true;
156
- }
157
- });
158
- },
159
 
160
- 'OPEN_ALL_SECTIONS': function (state) {
161
- state.sections = state.sections.map(function (_section) {
162
- _section.open = true;
163
 
164
- return _section;
165
- });
166
- },
 
 
 
 
167
 
168
- 'CLOSE_ALL_SECTIONS': function (state) {
169
- state.sections = state.sections.map(function (_section) {
170
- _section.open = false;
171
 
172
- return _section;
173
- });
174
- },
175
 
176
- 'UPDATE_SECTION_REQUEST': function (state, sectionId) {
177
- Vue.set(state.statusUpdateSection, sectionId, 'updating');
178
- },
179
 
180
- 'UPDATE_SECTION_SUCCESS': function (state, sectionId) {
181
- Vue.set(state.statusUpdateSection, sectionId, 'successful');
182
- },
183
 
184
- 'UPDATE_SECTION_FAILURE': function (state, sectionId) {
185
- Vue.set(state.statusUpdateSection, sectionId, 'failed');
186
- },
187
 
188
- 'UPDATE_SECTION_ITEM_REQUEST': function (state, itemId) {
189
- Vue.set(state.statusUpdateSectionItem, itemId, 'updating');
190
- },
191
 
192
- 'UPDATE_SECTION_ITEM_SUCCESS': function (state, itemId) {
193
- Vue.set(state.statusUpdateSectionItem, itemId, 'successful');
194
- },
195
 
196
- 'UPDATE_SECTION_ITEM_FAILURE': function (state, itemId) {
197
- Vue.set(state.statusUpdateSectionItem, itemId, 'failed');
198
- }
199
- };
200
 
201
- var actions = {
 
 
202
 
203
- toggleAllSections: function (context) {
204
- var hidden = context.getters['isHiddenAllSections'];
 
 
205
 
206
- if (hidden) {
207
- context.commit('OPEN_ALL_SECTIONS');
208
- } else {
209
- context.commit('CLOSE_ALL_SECTIONS');
210
- }
211
 
212
- Vue.http.LPRequest({
213
- type: 'hidden-sections',
214
- hidden: context.getters['hiddenSections']
215
- });
216
- },
217
-
218
- updateSectionsOrder: function (context, order) {
219
- Vue.http.LPRequest({
220
- type: 'sort-sections',
221
- order: JSON.stringify(order)
222
- }).then(
223
- function (response) {
224
- var result = response.body;
225
- var order_sections = result.data;
226
- context.commit('SORT_SECTION', order_sections);
227
- },
228
- function (error) {
229
- console.error(error);
230
  }
231
- );
232
- },
233
-
234
- toggleSection: function (context, section) {
235
- if (section.open) {
236
- context.commit('CLOSE_SECTION', section);
237
- } else {
238
- context.commit('OPEN_SECTION', section);
239
- }
240
 
241
- Vue.http.LPRequest({
242
- type: 'hidden-sections',
243
- hidden: context.getters['hiddenSections']
244
- });
245
- },
246
-
247
- updateSection: function (context, section) {
248
- context.commit('UPDATE_SECTION_REQUEST', section.id);
249
-
250
- Vue.http
251
- .LPRequest({
252
- type: 'update-section',
253
- section: JSON.stringify(section)
254
- })
255
- .then(function () {
256
- context.commit('UPDATE_SECTION_SUCCESS', section.id);
257
- })
258
- .catch(function () {
259
- context.commit('UPDATE_SECTION_FAILURE', section.id);
260
- })
261
- },
262
-
263
- removeSection: function (context, payload) {
264
- context.commit('REMOVE_SECTION', payload.index);
265
-
266
- Vue.http.LPRequest({
267
- type: 'remove-section',
268
- section_id: payload.section.id
269
- }).then(
270
- function (response) {
271
- var result = response.body;
272
- },
273
- function (error) {
274
- console.error(error);
275
- }
276
- );
277
- },
278
 
279
- newSection: function (context, name) {
 
 
280
 
281
- Vue.http.LPRequest({
282
- type: 'new-section',
283
- section_name: name
284
- }).then(
285
- function (response) {
286
- var result = response.body;
287
 
288
- if (result.success) {
289
- // update course section
290
- context.commit('ADD_NEW_SECTION', result.data);
 
 
 
 
 
291
  }
292
- },
293
- function (error) {
294
- console.error(error);
295
  }
296
- );
297
- },
298
 
299
- updateSectionItem: function (context, payload) {
300
- context.commit('UPDATE_SECTION_ITEM_REQUEST', payload.item.id);
301
-
302
- Vue.http.LPRequest({
303
- type: 'update-section-item',
304
- section_id: payload.section_id,
305
- item: JSON.stringify(payload.item)
306
 
307
- }).then(
308
- function (response) {
309
- context.commit('UPDATE_SECTION_ITEM_SUCCESS', payload.item.id);
310
 
311
- var result = response.body;
312
- if (result.success) {
313
- var item = result.data;
314
 
315
- context.commit('UPDATE_SECTION_ITEM', {section_id: payload.section_id, item: item});
316
- }
317
- },
318
- function (error) {
319
- context.commit('UPDATE_SECTION_ITEM_FAILURE', payload.item.id);
320
- console.error(error);
321
  }
322
- );
323
- },
324
-
325
- removeSectionItem: function (context, payload) {
326
- context.commit('REMOVE_SECTION_ITEM', payload);
327
 
328
- Vue.http
329
- .LPRequest({
330
- type: 'remove-section-item',
331
- section_id: payload.section_id,
332
- item_id: payload.item_id
333
  });
334
- },
335
 
336
- deleteSectionItem: function (context, payload) {
337
- context.commit('REMOVE_SECTION_ITEM', payload);
338
-
339
- Vue.http
340
- .LPRequest({
341
- type: 'delete-section-item',
342
- section_id: payload.section_id,
343
- item_id: payload.item_id
344
- });
345
- },
346
-
347
- newSectionItem: function (context, payload) {
348
- Vue.http.LPRequest({
349
- type: 'new-section-item',
350
- section_id: payload.section_id,
351
- item: JSON.stringify(payload.item)
352
- }).then(
353
- function (response) {
354
- var result = response.body;
355
-
356
- if (result.success) {
357
- context.commit('UPDATE_SECTION_ITEMS', {section_id: payload.section_id, items: result.data});
358
  }
359
- },
360
- function (error) {
361
- console.error(error);
362
- }
363
- );
364
- },
365
-
366
- updateSectionItems: function (context, payload) {
367
-
368
- Vue.http.LPRequest({
369
- type: 'update-section-items',
370
- section_id: payload.section_id,
371
- items: JSON.stringify(payload.items)
372
- }).then(
373
- function (response) {
374
- var result = response.body;
375
 
376
- if (result.success) {
377
- // console.log(result);
378
- }
379
- },
380
- function (error) {
381
- console.error(error);
382
  }
383
- );
384
- }
385
- };
386
 
387
- return {
388
- namespaced: true,
389
- state: state,
390
- getters: getters,
391
- mutations: mutations,
392
- actions: actions
393
- };
394
- })(Vue, LP_Helpers, lp_course_editor);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
395
 
 
 
 
 
 
 
 
 
 
 
 
 
396
 
397
- /**
398
- * Choose Item Modal Store
399
- *
400
- * @since 3.0.0
401
- *
402
- * @type {{namespaced, state, getters, mutations, actions}}
403
- */
404
- var LP_Choose_Items_Modal_Store = (function (exports, Vue, helpers, data) {
405
- var state = helpers.cloneObject(data.chooseItems);
406
- state.sectionId = false;
407
- state.pagination = '';
408
- state.status = '';
409
-
410
- var getters = {
411
- status: function (state) {
412
- return state.status;
413
- },
414
- pagination: function (state) {
415
- return state.pagination;
416
- },
417
- items: function (state, _getters) {
418
- return state.items.map(function (item) {
419
- var find = _getters.addedItems.find(function (_item) {
420
- return item.id === _item.id;
421
  });
422
 
423
- item.added = !!find;
424
-
425
- return item;
426
- });
427
- },
428
- addedItems: function (state) {
429
- return state.addedItems;
430
- },
431
- isOpen: function (state) {
432
- return state.open;
433
- },
434
- types: function (state) {
435
- return state.types;
436
- },
437
- section: function () {
438
- return state.sectionId;
439
- }
440
- };
441
 
442
- var mutations = {
443
- 'TOGGLE': function (state) {
444
- state.open = !state.open;
445
- },
446
- 'SET_SECTION': function (state, sectionId) {
447
- state.sectionId = sectionId;
448
- },
449
- 'SET_LIST_ITEMS': function (state, items) {
450
- state.items = items;
451
- },
452
- 'ADD_ITEM': function (state, item) {
453
- state.addedItems.push(item);
454
- },
455
- 'REMOVE_ADDED_ITEM': function (state, item) {
456
- state.addedItems.forEach(function (_item, index) {
457
- if (_item.id === item.id) {
458
- state.addedItems.splice(index, 1);
459
- }
460
- });
461
- },
462
- 'RESET': function (state) {
463
- state.addedItems = [];
464
- state.items = [];
465
- },
466
- 'UPDATE_PAGINATION': function (state, pagination) {
467
- state.pagination = pagination;
468
- },
469
- 'SEARCH_ITEMS_REQUEST': function (state) {
470
- state.status = 'loading';
471
- },
472
- 'SEARCH_ITEMS_SUCCESS': function (state) {
473
- state.status = 'successful';
474
- },
475
- 'SEARCH_ITEMS_FAILURE': function (state) {
476
- state.status = 'failed';
477
- }
478
- };
479
 
480
- var actions = {
481
-
482
- toggle: function (context) {
483
- context.commit('TOGGLE');
484
- },
485
-
486
- open: function (context, sectionId) {
487
- context.commit('SET_SECTION', sectionId);
488
- context.commit('RESET');
489
- context.commit('TOGGLE');
490
- },
491
-
492
- searchItems: function (context, payload) {
493
- context.commit('SEARCH_ITEMS_REQUEST');
494
-
495
- Vue.http.LPRequest({
496
- type: 'search-items',
497
- query: payload.query,
498
- item_type: payload.type,
499
- page: payload.page,
500
- exclude: JSON.stringify([])
501
- }).then(
502
- function (response) {
503
- var result = response.body;
504
-
505
- if (!result.success) {
506
- return;
507
  }
 
 
508
 
509
- var data = result.data;
 
510
 
511
- context.commit('SET_LIST_ITEMS', data.items);
512
- context.commit('UPDATE_PAGINATION', data.pagination);
513
- context.commit('SEARCH_ITEMS_SUCCESS');
514
- },
515
- function (error) {
516
- context.commit('SEARCH_ITEMS_FAILURE');
517
 
518
- console.error(error);
519
- }
520
- );
521
- },
522
 
523
- addItem: function (context, item) {
524
- context.commit('ADD_ITEM', item);
525
- },
526
 
527
- removeItem: function (context, index) {
528
- context.commit('REMOVE_ADDED_ITEM', index);
529
- },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
530
 
531
- addItemsToSection: function (context) {
532
- var items = context.getters.addedItems;
533
 
534
- if (items.length > 0) {
 
535
  Vue.http.LPRequest({
536
- type: 'add-items-to-section',
537
- section_id: context.getters.section,
538
- items: JSON.stringify(items)
539
  }).then(
540
  function (response) {
541
  var result = response.body;
542
 
543
  if (result.success) {
544
- context.commit('TOGGLE');
545
-
546
- var items = result.data;
547
- context.commit('ss/UPDATE_SECTION_ITEMS', {
548
- section_id: context.getters.section,
 
 
549
  items: items
550
- }, {root: true});
551
  }
552
  },
553
  function (error) {
554
  console.error(error);
555
  }
556
  );
557
- }
558
- }
559
- };
560
-
561
- return {
562
- namespaced: true,
563
- state: state,
564
- getters: getters,
565
- mutations: mutations,
566
- actions: actions
567
- }
568
- })(window, Vue, LP_Helpers, lp_course_editor);
569
 
570
- /**
571
- * Root Store
572
- *
573
- * @since 3.0.0
574
- */
575
- (function (exports, Vue, Vuex, helpers, data) {
576
- var state = helpers.cloneObject(data.root);
577
-
578
- state.status = 'success';
579
- state.heartbeat = true;
580
- state.countCurrentRequest = 0;
581
-
582
- var getters = {
583
- heartbeat: function (state) {
584
- return state.heartbeat;
585
- },
586
- action: function (state) {
587
- return state.action;
588
- },
589
- id: function (state) {
590
- return state.course_id;
591
- },
592
- autoDraft: function (state) {
593
- return state.auto_draft;
594
- },
595
- disable_curriculum: function (state) {
596
- return state.disable_curriculum;
597
- },
598
- status: function (state) {
599
- return state.status || 'error';
600
- },
601
- currentRequest: function (state) {
602
- return state.countCurrentRequest || 0;
603
- },
604
- urlAjax: function (state) {
605
- return state.ajax;
606
- },
607
- nonce: function (state) {
608
- return state.nonce;
609
- }
610
- };
611
-
612
- var mutations = {
613
-
614
- 'UPDATE_HEART_BEAT': function (state, status) {
615
- state.heartbeat = !!status;
616
- },
617
-
618
- 'UPDATE_AUTO_DRAFT_STATUS': function (state, status) {
619
- // check auto draft status
620
- state.auto_draft = status;
621
- },
622
 
623
- 'UPDATE_STATUS': function (state, status) {
624
- state.status = status;
625
- },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
626
 
627
- 'INCREASE_NUMBER_REQUEST': function (state) {
628
- state.countCurrentRequest++;
629
- },
630
 
631
- 'DECREASE_NUMBER_REQUEST': function (state) {
632
- state.countCurrentRequest--;
633
- }
634
- };
635
 
636
- var actions = {
637
- heartbeat: function (context) {
638
- Vue.http.LPRequest({
639
- type: 'heartbeat'
640
- }).then(
641
- function (response) {
642
- var result = response.body;
643
- context.commit('UPDATE_HEART_BEAT', !!result.success);
644
- },
645
- function (error) {
646
- context.commit('UPDATE_HEART_BEAT', false);
647
- }
648
- );
649
- },
650
 
651
- draftCourse: function (context, payload) {
652
- var auto_draft = context.getters['autoDraft'];
653
 
654
- if (auto_draft) {
655
  Vue.http.LPRequest({
656
- type: 'draft-course',
657
- course: JSON.stringify(payload)
658
- }).then(function (response) {
 
 
 
 
659
  var result = response.body;
660
 
661
  if (!result.success) {
662
  return;
663
  }
664
 
665
- context.commit('UPDATE_AUTO_DRAFT_STATUS', false);
 
 
 
 
 
 
 
 
 
666
  }
667
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
668
  }
669
- },
670
 
671
- newRequest: function (context) {
672
- context.commit('INCREASE_NUMBER_REQUEST');
673
- context.commit('UPDATE_STATUS', 'loading');
674
 
675
- window.onbeforeunload = function () {
676
- return '';
677
- }
678
- },
679
 
680
- requestComplete: function (context, status) {
681
- context.commit('DECREASE_NUMBER_REQUEST');
 
 
682
 
683
- if (context.getters.currentRequest === 0) {
684
- context.commit('UPDATE_STATUS', status);
685
- window.onbeforeunload = null;
 
 
 
 
 
 
 
686
  }
687
- }
688
- };
689
 
690
- exports.LP_Curriculum_Store = new Vuex.Store({
691
- state: state,
692
- getters: getters,
693
- mutations: mutations,
694
- actions: actions,
695
- modules: {
696
- ci: LP_Choose_Items_Modal_Store,
697
- i18n: LP_Curriculum_i18n_Store,
698
- ss: LP_Curriculum_Sections_Store
699
- }
700
- });
 
 
 
701
 
702
- })(window, Vue, Vuex, LP_Helpers, lp_course_editor);
 
703
 
704
- /**
705
- * HTTP
706
- *
707
- * @since 3.0.0
708
- */
709
- (function (exports, Vue, $store) {
710
- Vue.http.LPRequest = function (payload) {
711
- payload['id'] = $store.getters.id;
712
- payload['nonce'] = $store.getters.nonce;
713
- payload['lp-ajax'] = $store.getters.action;
714
-
715
- return Vue.http.post($store.getters.urlAjax,
716
- payload,
717
- {
718
- emulateJSON: true,
719
- params: {
720
- namespace: 'LPCurriculumRequest'
721
  }
722
- });
723
- };
724
 
725
- Vue.http.interceptors.push(function (request, next) {
726
- if (request.params['namespace'] !== 'LPCurriculumRequest') {
727
- next();
728
- return;
729
- }
730
 
731
- $store.dispatch('newRequest');
 
 
 
732
 
733
- next(function (response) {
 
734
 
735
- if (!jQuery.isPlainObject(response.body)) {
736
- response.body = LP.parseJSON(response.body);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
737
  }
 
738
 
739
- var body = response.body;
740
- var result = body.success || false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
741
 
742
- if (result) {
743
- $store.dispatch('requestComplete', 'success');
744
- } else {
745
- $store.dispatch('requestComplete', 'failed');
746
  }
747
- });
748
- });
749
- })(window, Vue, LP_Curriculum_Store);
750
 
751
- /**
752
- * Init app.
753
- *
754
- * @since 3.0.0
755
- */
756
- (function ($, Vue, $store) {
757
- $(document).ready(function () {
758
- window.LP_Course_Editor = new Vue({
759
- el: '#admin-editor-lp_course',
760
- template: '<lp-course-editor></lp-course-editor>'
 
 
 
 
 
 
 
761
  });
762
- });
763
- })(jQuery, Vue, LP_Curriculum_Store);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  };
16
  })(window);
17
 
18
+ jQuery(function () {
19
 
 
 
 
 
 
20
 
21
+ /**
22
+ * I18n Store
23
+ *
24
+ * @since 3.0.0
25
+ */
26
 
27
+ var LP_Curriculum_i18n_Store = (function (Vue, helpers, data) {
28
+ var state = helpers.cloneObject(data.i18n);
 
 
 
 
 
 
 
 
 
29
 
30
+ var getters = {
31
+ all: function (state) {
32
+ return state;
33
+ }
34
+ };
35
+
36
+ return {
37
+ namespaced: true,
38
+ state: state,
39
+ getters: getters
40
+ };
41
+
42
+ })(Vue, LP_Helpers, lpAdminCourseEditorSettings);
43
+
44
+ /**
45
+ * Sections Store.
46
+ *
47
+ * @since 3.0.0
48
+ */
49
+ var LP_Curriculum_Sections_Store = (function (Vue, helpers, data) {
50
+ var state = helpers.cloneObject(data.sections);
51
+
52
+ state.statusUpdateSection = {};
53
+ state.statusUpdateSectionItem = {};
54
+
55
+ state.sections = state.sections.map(function (section) {
56
+ var hiddenSections = state.hidden_sections;
57
+ var find = hiddenSections.find(function (sectionId) {
58
+ return parseInt(section.id) === parseInt(sectionId);
59
+ });
60
 
61
+ section.open = !find;
 
62
 
63
+ return section;
 
 
 
64
  });
65
 
66
+ var getters = {
67
+ sections: function (state) {
68
+ return state.sections || [];
69
+ },
70
+ urlEdit: function (state) {
71
+ return state.urlEdit;
72
+ },
73
+ hiddenSections: function (state) {
74
+ return state.sections
75
+ .filter(function (section) {
76
+ return !section.open;
77
+ })
78
+ .map(function (section) {
79
+ return parseInt(section.id);
80
+ });
81
+ },
82
+ isHiddenAllSections: function (state, getters) {
83
+ var sections = getters['sections'];
84
+ var hiddenSections = getters['hiddenSections'];
85
+
86
+ return hiddenSections.length === sections.length;
87
+ },
88
+ statusUpdateSection: function (state) {
89
+ return state.statusUpdateSection;
90
+ },
91
+ statusUpdateSectionItem: function (state) {
92
+ return state.statusUpdateSectionItem;
93
+ }
94
+ };
 
 
 
 
 
 
 
 
 
 
95
 
96
+ var mutations = {
97
+ 'SORT_SECTION': function (state, orders) {
98
+ state.sections = state.sections.map(function (section) {
99
+ section.order = orders[section.id];
 
 
 
 
 
 
 
 
 
 
 
 
 
100
 
101
+ return section;
102
+ });
103
+ },
104
+ 'SET_SECTIONS': function (state, sections) {
105
+ state.sections = sections;
106
+ },
107
+ 'ADD_NEW_SECTION': function (state, newSection) {
108
+ if (newSection.open === undefined) {
109
+ newSection.open = true;
110
+ }
111
+ var pos;
112
+
113
+ if (newSection.temp_id) {
114
+ console.log(newSection)
115
+ state.sections.map(function (section, i) {
116
+ console.log(section)
117
+ if (newSection.temp_id == section.id) {
118
+ pos = i;
119
+ return false;
120
+ }
121
+ });
122
  }
 
123
 
124
+ if (pos !== undefined) {
125
+ Vue.set(state.sections, pos, newSection);
126
+ } else {
127
+ state.sections.push(newSection);
128
+ }
129
+ },
130
+ 'ADD_EMPTY_SECTION': function (state, section) {
131
+ section.open = true;
132
+ state.sections.push(section);
133
+ },
134
+ 'REMOVE_SECTION': function (state, index) {
135
+ state.sections.splice(index, 1);
136
+ },
137
+ 'REMOVE_SECTION_ITEM': function (state, payload) {
138
+
139
+ var section = state.sections.find(function (section) {
140
+ return (section.id === payload.section_id);
141
+ });
142
 
143
+ var items = section.items || [],
144
+ item = payload.item,
145
+ index = -1;
146
+ items.forEach(function (it, i) {
147
+ if (it.id === item.id) {
148
+ index = i;
149
+ }
150
+ });
151
 
152
+ if (index !== -1) {
153
+ if (item.temp_id) {
154
+ items[index].id = item.temp_id;
155
+ } else {
156
+ items.splice(index, 1);
157
+ }
158
+ }
159
+ },
160
+ 'UPDATE_SECTION_ITEMS': function (state, payload) {
161
+ var section = state.sections.find(function (section) {
162
+ return parseInt(section.id) === parseInt(payload.section_id);
163
+ });
164
 
165
+ if (!section) {
166
+ return;
 
 
167
  }
168
+ section.items = payload.items;
169
+ },
170
+ 'UPDATE_SECTION_ITEM': function (state, payload) {
171
 
172
+ },
173
 
174
+ 'CLOSE_SECTION': function (state, section) {
175
+ state.sections.forEach(function (_section, index) {
176
+ if (section.id === _section.id) {
177
+ state.sections[index].open = false;
178
+ }
179
+ });
 
180
 
181
+ },
 
 
182
 
183
+ 'OPEN_SECTION': function (state, section) {
184
+ state.sections.forEach(function (_section, index) {
185
+ if (section.id === _section.id) {
186
+ state.sections[index].open = true;
187
+ }
188
+ });
189
+ },
190
 
191
+ 'OPEN_ALL_SECTIONS': function (state) {
192
+ state.sections = state.sections.map(function (_section) {
193
+ _section.open = true;
194
 
195
+ return _section;
196
+ });
197
+ },
198
 
199
+ 'CLOSE_ALL_SECTIONS': function (state) {
200
+ state.sections = state.sections.map(function (_section) {
201
+ _section.open = false;
202
 
203
+ return _section;
204
+ });
205
+ },
206
 
207
+ 'UPDATE_SECTION_REQUEST': function (state, sectionId) {
208
+ Vue.set(state.statusUpdateSection, sectionId, 'updating');
209
+ },
210
 
211
+ 'UPDATE_SECTION_SUCCESS': function (state, sectionId) {
212
+ Vue.set(state.statusUpdateSection, sectionId, 'successful');
213
+ },
214
 
215
+ 'UPDATE_SECTION_FAILURE': function (state, sectionId) {
216
+ Vue.set(state.statusUpdateSection, sectionId, 'failed');
217
+ },
218
 
219
+ 'UPDATE_SECTION_ITEM_REQUEST': function (state, itemId) {
220
+ Vue.set(state.statusUpdateSectionItem, itemId, 'updating');
221
+ },
 
222
 
223
+ 'UPDATE_SECTION_ITEM_SUCCESS': function (state, itemId) {
224
+ Vue.set(state.statusUpdateSectionItem, itemId, 'successful');
225
+ },
226
 
227
+ 'UPDATE_SECTION_ITEM_FAILURE': function (state, itemId) {
228
+ Vue.set(state.statusUpdateSectionItem, itemId, 'failed');
229
+ },
230
+ 'APPEND_EMPTY_ITEM_TO_SECTION': function (state, data) {
231
 
232
+ var section = state.sections.find(function (section) {
233
+ return parseInt(section.id) === parseInt(data.section_id);
234
+ });
 
 
235
 
236
+ if (!section) {
237
+ return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
238
  }
 
 
 
 
 
 
 
 
 
239
 
240
+ section.items.push({id: data.item.id, title: data.item.title, type: 'empty-item'});
241
+ },
242
+ 'UPDATE_ITEM_SECTION_BY_ID': function (state, data) {
243
+ var section = state.sections.find(function (section) {
244
+ return parseInt(section.id) === parseInt(data.section_id);
245
+ });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
246
 
247
+ if (!section) {
248
+ return;
249
+ }
250
 
251
+ for (var i = 0; i < section.items.length; i++) {
252
+ try {
253
+ if (!section.items[i]) {
254
+ continue;
255
+ }
 
256
 
257
+ var item_id = section.items[i].id;
258
+ if (item_id) {
259
+ if (data.items[item_id]) {
260
+ Vue.set(section.items, i, data.items[item_id])
261
+ }
262
+ }
263
+ } catch (ex) {
264
+ console.log(ex)
265
  }
 
 
 
266
  }
 
 
267
 
268
+ //section.items.push({id: data.item.id, title: data.item.title, type: 'empty-item'});
269
+ }
270
+ };
 
 
 
 
271
 
272
+ var actions = {
 
 
273
 
274
+ toggleAllSections: function (context) {
275
+ var hidden = context.getters['isHiddenAllSections'];
 
276
 
277
+ if (hidden) {
278
+ context.commit('OPEN_ALL_SECTIONS');
279
+ } else {
280
+ context.commit('CLOSE_ALL_SECTIONS');
 
 
281
  }
 
 
 
 
 
282
 
283
+ Vue.http.LPRequest({
284
+ type: 'hidden-sections',
285
+ hidden: context.getters['hiddenSections']
 
 
286
  });
287
+ },
288
 
289
+ updateSectionsOrder: function (context, order) {
290
+ Vue.http.LPRequest({
291
+ type: 'sort-sections',
292
+ order: JSON.stringify(order)
293
+ }).then(
294
+ function (response) {
295
+ var result = response.body;
296
+ var order_sections = result.data;
297
+ context.commit('SORT_SECTION', order_sections);
298
+ },
299
+ function (error) {
300
+ console.error(error);
 
 
 
 
 
 
 
 
 
 
301
  }
302
+ );
303
+ },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
304
 
305
+ toggleSection: function (context, section) {
306
+ if (section.open) {
307
+ context.commit('CLOSE_SECTION', section);
308
+ } else {
309
+ context.commit('OPEN_SECTION', section);
 
310
  }
 
 
 
311
 
312
+ Vue.http.LPRequest({
313
+ type: 'hidden-sections',
314
+ hidden: context.getters['hiddenSections']
315
+ });
316
+ },
317
+
318
+ updateSection: function (context, section) {
319
+ context.commit('UPDATE_SECTION_REQUEST', section.id);
320
+
321
+ Vue.http
322
+ .LPRequest({
323
+ type: 'update-section',
324
+ section: JSON.stringify(section)
325
+ })
326
+ .then(function () {
327
+ context.commit('UPDATE_SECTION_SUCCESS', section.id);
328
+ })
329
+ .catch(function () {
330
+ context.commit('UPDATE_SECTION_FAILURE', section.id);
331
+ })
332
+ },
333
+
334
+ removeSection: function (context, payload) {
335
+ context.commit('REMOVE_SECTION', payload.index);
336
 
337
+ Vue.http.LPRequest({
338
+ type: 'remove-section',
339
+ section_id: payload.section.id
340
+ }).then(
341
+ function (response) {
342
+ var result = response.body;
343
+ },
344
+ function (error) {
345
+ console.error(error);
346
+ }
347
+ );
348
+ },
349
 
350
+ newSection: function (context, name) {
351
+ var newSection = {
352
+ type: 'new-section',
353
+ section_name: name,
354
+ temp_id: LP.uniqueId()
355
+ }
356
+ context.commit('ADD_NEW_SECTION', {
357
+ id: newSection.temp_id,
358
+ items: [],
359
+ open: false,
360
+ title: newSection.section_name
 
 
 
 
 
 
 
 
 
 
 
 
 
361
  });
362
 
363
+ Vue.http.LPRequest(newSection).then(
364
+ function (response) {
365
+ var result = response.body;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
366
 
367
+ if (result.success) {
368
+ var section = $.extend({}, result.data, {open: true});
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
369
 
370
+ // update course section
371
+ context.commit('ADD_NEW_SECTION', section);
372
+ }
373
+ },
374
+ function (error) {
375
+ console.error(error);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
376
  }
377
+ );
378
+ },
379
 
380
+ updateSectionItem: function (context, payload) {
381
+ context.commit('UPDATE_SECTION_ITEM_REQUEST', payload.item.id);
382
 
383
+ Vue.http.LPRequest({
384
+ type: 'update-section-item',
385
+ section_id: payload.section_id,
386
+ item: JSON.stringify(payload.item)
 
 
387
 
388
+ }).then(
389
+ function (response) {
390
+ context.commit('UPDATE_SECTION_ITEM_SUCCESS', payload.item.id);
 
391
 
392
+ var result = response.body;
393
+ if (result.success) {
394
+ var item = result.data;
395
 
396
+ context.commit('UPDATE_SECTION_ITEM', {section_id: payload.section_id, item: item});
397
+ }
398
+ },
399
+ function (error) {
400
+ context.commit('UPDATE_SECTION_ITEM_FAILURE', payload.item.id);
401
+ console.error(error);
402
+ }
403
+ );
404
+ },
405
+
406
+ removeSectionItem: function (context, payload) {
407
+ var id = payload.item.id;
408
+ context.commit('REMOVE_SECTION_ITEM', payload);
409
+ payload.item.temp_id = 0;
410
+ Vue.http
411
+ .LPRequest({
412
+ type: 'remove-section-item',
413
+ section_id: payload.section_id,
414
+ item_id: id
415
+ }).then(
416
+ function () {
417
+ context.commit('REMOVE_SECTION_ITEM', payload);
418
+ }
419
+ );
420
+ },
421
+
422
+ deleteSectionItem: function (context, payload) {
423
+ var id = payload.item.id;
424
+ context.commit('REMOVE_SECTION_ITEM', payload);
425
+ payload.item.temp_id = 0;
426
+ Vue.http
427
+ .LPRequest({
428
+ type: 'delete-section-item',
429
+ section_id: payload.section_id,
430
+ item_id: id
431
+ }).then(
432
+ function () {
433
+ context.commit('REMOVE_SECTION_ITEM', payload);
434
+ }
435
+ );
436
+ },
437
 
438
+ newSectionItem: function (context, payload) {
 
439
 
440
+ context.commit('APPEND_EMPTY_ITEM_TO_SECTION', payload)
441
+ //context.commit('UPDATE_SECTION_ITEMS', {section_id: payload.section_id, items: result.data});
442
  Vue.http.LPRequest({
443
+ type: 'new-section-item',
444
+ section_id: payload.section_id,
445
+ item: JSON.stringify(payload.item)
446
  }).then(
447
  function (response) {
448
  var result = response.body;
449
 
450
  if (result.success) {
451
+ // context.commit('UPDATE_SECTION_ITEMS', {section_id: payload.section_id, items: result.data});
452
+ var items = {};
453
+ $.each(result.data, function (i, a) {
454
+ items[a.old_id ? a.old_id : a.id] = a;
455
+ });
456
+ context.commit('UPDATE_ITEM_SECTION_BY_ID', {
457
+ section_id: payload.section_id,
458
  items: items
459
+ });
460
  }
461
  },
462
  function (error) {
463
  console.error(error);
464
  }
465
  );
466
+ },
 
 
 
 
 
 
 
 
 
 
 
467
 
468
+ updateSectionItems: function (context, payload) {
469
+ Vue.http.LPRequest({
470
+ type: 'update-section-items',
471
+ section_id: payload.section_id,
472
+ items: JSON.stringify(payload.items),
473
+ last_section: state.sections[state.sections.length - 1] === (payload.section_id)
474
+ }).then(
475
+ function (response) {
476
+ var result = response.body;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
477
 
478
+ if (result.success) {
479
+ // console.log(result);
480
+ }
481
+ },
482
+ function (error) {
483
+ console.error(error);
484
+ }
485
+ );
486
+ }
487
+ };
488
+
489
+ return {
490
+ namespaced: true,
491
+ state: state,
492
+ getters: getters,
493
+ mutations: mutations,
494
+ actions: actions
495
+ };
496
+ })(Vue, LP_Helpers, lpAdminCourseEditorSettings);
497
+
498
+
499
+ /**
500
+ * Choose Item Modal Store
501
+ *
502
+ * @since 3.0.0
503
+ *
504
+ * @type {{namespaced, state, getters, mutations, actions}}
505
+ */
506
+ var LP_Choose_Items_Modal_Store = (function (exports, Vue, helpers, data) {
507
+ var state = helpers.cloneObject(data.chooseItems);
508
+ state.sectionId = false;
509
+ state.pagination = '';
510
+ state.status = '';
511
+
512
+ var getters = {
513
+ status: function (state) {
514
+ return state.status;
515
+ },
516
+ pagination: function (state) {
517
+ return state.pagination;
518
+ },
519
+ items: function (state, _getters) {
520
+ return state.items.map(function (item) {
521
+ var find = _getters.addedItems.find(function (_item) {
522
+ return item.id === _item.id;
523
+ });
524
+
525
+ item.added = !!find;
526
+
527
+ return item;
528
+ });
529
+ },
530
+ addedItems: function (state) {
531
+ return state.addedItems;
532
+ },
533
+ isOpen: function (state) {
534
+ return state.open;
535
+ },
536
+ types: function (state) {
537
+ return state.types;
538
+ },
539
+ section: function () {
540
+ return state.sectionId;
541
+ }
542
+ };
543
+
544
+ var mutations = {
545
+ 'TOGGLE': function (state) {
546
+ state.open = !state.open;
547
+ },
548
+ 'SET_SECTION': function (state, sectionId) {
549
+ state.sectionId = sectionId;
550
+ },
551
+ 'SET_LIST_ITEMS': function (state, items) {
552
+ state.items = items;
553
+ },
554
+ 'ADD_ITEM': function (state, item) {
555
+ state.addedItems.push(item);
556
+ },
557
+ 'REMOVE_ADDED_ITEM': function (state, item) {
558
+ state.addedItems.forEach(function (_item, index) {
559
+ if (_item.id === item.id) {
560
+ state.addedItems.splice(index, 1);
561
+ }
562
+ });
563
+ },
564
+ 'RESET': function (state) {
565
+ state.addedItems = [];
566
+ state.items = [];
567
+ },
568
+ 'UPDATE_PAGINATION': function (state, pagination) {
569
+ state.pagination = pagination;
570
+ },
571
+ 'SEARCH_ITEMS_REQUEST': function (state) {
572
+ state.status = 'loading';
573
+ },
574
+ 'SEARCH_ITEMS_SUCCESS': function (state) {
575
+ state.status = 'successful';
576
+ },
577
+ 'SEARCH_ITEMS_FAILURE': function (state) {
578
+ state.status = 'failed';
579
+ }
580
+ };
581
 
582
+ var actions = {
 
 
583
 
584
+ toggle: function (context) {
585
+ context.commit('TOGGLE');
586
+ },
 
587
 
588
+ open: function (context, sectionId) {
589
+ context.commit('SET_SECTION', sectionId);
590
+ context.commit('RESET');
591
+ context.commit('TOGGLE');
592
+ },
 
 
 
 
 
 
 
 
 
593
 
594
+ searchItems: function (context, payload) {
595
+ context.commit('SEARCH_ITEMS_REQUEST');
596
 
 
597
  Vue.http.LPRequest({
598
+ type: 'search-items',
599
+ query: payload.query,
600
+ item_type: payload.type,
601
+ page: payload.page,
602
+ exclude: JSON.stringify([])
603
+ }).then(
604
+ function (response) {
605
  var result = response.body;
606
 
607
  if (!result.success) {
608
  return;
609
  }
610
 
611
+ var data = result.data;
612
+
613
+ context.commit('SET_LIST_ITEMS', data.items);
614
+ context.commit('UPDATE_PAGINATION', data.pagination);
615
+ context.commit('SEARCH_ITEMS_SUCCESS');
616
+ },
617
+ function (error) {
618
+ context.commit('SEARCH_ITEMS_FAILURE');
619
+
620
+ console.error(error);
621
  }
622
+ );
623
+ },
624
+
625
+ addItem: function (context, item) {
626
+ context.commit('ADD_ITEM', item);
627
+ },
628
+
629
+ removeItem: function (context, index) {
630
+ context.commit('REMOVE_ADDED_ITEM', index);
631
+ },
632
+
633
+ addItemsToSection: function (context) {
634
+ var items = context.getters.addedItems;
635
+
636
+ if (items.length > 0) {
637
+ Vue.http.LPRequest({
638
+ type: 'add-items-to-section',
639
+ section_id: context.getters.section,
640
+ items: JSON.stringify(items)
641
+ }).then(
642
+ function (response) {
643
+ var result = response.body;
644
+
645
+ if (result.success) {
646
+ context.commit('TOGGLE');
647
+
648
+ var items = result.data;
649
+ context.commit('ss/UPDATE_SECTION_ITEMS', {
650
+ section_id: context.getters.section,
651
+ items: items
652
+ }, {root: true});
653
+ }
654
+ },
655
+ function (error) {
656
+ console.error(error);
657
+ }
658
+ );
659
+ }
660
+ }
661
+ };
662
+
663
+ return {
664
+ namespaced: true,
665
+ state: state,
666
+ getters: getters,
667
+ mutations: mutations,
668
+ actions: actions
669
+ }
670
+ })(window, Vue, LP_Helpers, lpAdminCourseEditorSettings);
671
+
672
+ /**
673
+ * Root Store
674
+ *
675
+ * @since 3.0.0
676
+ */
677
+ (function (exports, Vue, Vuex, helpers, data) {
678
+ var state = helpers.cloneObject(data.root);
679
+
680
+ state.status = 'success';
681
+ state.heartbeat = true;
682
+ state.countCurrentRequest = 0;
683
+
684
+ var getters = {
685
+ heartbeat: function (state) {
686
+ return state.heartbeat;
687
+ },
688
+ action: function (state) {
689
+ return state.action;
690
+ },
691
+ id: function (state) {
692
+ return state.course_id;
693
+ },
694
+ autoDraft: function (state) {
695
+ return state.auto_draft;
696
+ },
697
+ disable_curriculum: function (state) {
698
+ return state.disable_curriculum;
699
+ },
700
+ status: function (state) {
701
+ return state.status || 'error';
702
+ },
703
+ currentRequest: function (state) {
704
+ return state.countCurrentRequest || 0;
705
+ },
706
+ urlAjax: function (state) {
707
+ return state.ajax;
708
+ },
709
+ nonce: function (state) {
710
+ return state.nonce;
711
  }
712
+ };
713
 
714
+ var mutations = {
 
 
715
 
716
+ 'UPDATE_HEART_BEAT': function (state, status) {
717
+ state.heartbeat = !!status;
718
+ },
 
719
 
720
+ 'UPDATE_AUTO_DRAFT_STATUS': function (state, status) {
721
+ // check auto draft status
722
+ state.auto_draft = status;
723
+ },
724
 
725
+ 'UPDATE_STATUS': function (state, status) {
726
+ state.status = status;
727
+ },
728
+
729
+ 'INCREASE_NUMBER_REQUEST': function (state) {
730
+ state.countCurrentRequest++;
731
+ },
732
+
733
+ 'DECREASE_NUMBER_REQUEST': function (state) {
734
+ state.countCurrentRequest--;
735
  }
736
+ };
 
737
 
738
+ var actions = {
739
+ heartbeat: function (context) {
740
+ Vue.http.LPRequest({
741
+ type: 'heartbeat'
742
+ }).then(
743
+ function (response) {
744
+ var result = response.body;
745
+ context.commit('UPDATE_HEART_BEAT', !!result.success);
746
+ },
747
+ function (error) {
748
+ context.commit('UPDATE_HEART_BEAT', false);
749
+ }
750
+ );
751
+ },
752
 
753
+ draftCourse: function (context, payload) {
754
+ var auto_draft = context.getters['autoDraft'];
755
 
756
+ if (auto_draft) {
757
+ Vue.http.LPRequest({
758
+ type: 'draft-course',
759
+ course: JSON.stringify(payload)
760
+ }).then(function (response) {
761
+ var result = response.body;
762
+
763
+ if (!result.success) {
764
+ return;
765
+ }
766
+
767
+ context.commit('UPDATE_AUTO_DRAFT_STATUS', false);
768
+ }
769
+ )
 
 
 
770
  }
771
+ },
 
772
 
773
+ newRequest: function (context) {
774
+ context.commit('INCREASE_NUMBER_REQUEST');
775
+ context.commit('UPDATE_STATUS', 'loading');
 
 
776
 
777
+ window.onbeforeunload = function () {
778
+ return '';
779
+ }
780
+ },
781
 
782
+ requestComplete: function (context, status) {
783
+ context.commit('DECREASE_NUMBER_REQUEST');
784
 
785
+ if (context.getters.currentRequest === 0) {
786
+ context.commit('UPDATE_STATUS', status);
787
+ window.onbeforeunload = null;
788
+ }
789
+ }
790
+ };
791
+
792
+ exports.LP_Curriculum_Store = new Vuex.Store({
793
+ state: state,
794
+ getters: getters,
795
+ mutations: mutations,
796
+ actions: actions,
797
+ modules: {
798
+ ci: LP_Choose_Items_Modal_Store,
799
+ i18n: LP_Curriculum_i18n_Store,
800
+ ss: LP_Curriculum_Sections_Store
801
  }
802
+ });
803
 
804
+ })(window, Vue, Vuex, LP_Helpers, lpAdminCourseEditorSettings);
805
+
806
+ /**
807
+ * HTTP
808
+ *
809
+ * @since 3.0.0
810
+ */
811
+ (function (exports, Vue, $store) {
812
+ Vue.http.LPRequest = function (payload) {
813
+ payload['id'] = $store.getters.id;
814
+ payload['nonce'] = $store.getters.nonce;
815
+ payload['lp-ajax'] = $store.getters.action;
816
+
817
+ return Vue.http.post($store.getters.urlAjax,
818
+ payload,
819
+ {
820
+ emulateJSON: true,
821
+ params: {
822
+ namespace: 'LPCurriculumRequest'
823
+ }
824
+ });
825
+ };
826
 
827
+ Vue.http.interceptors.push(function (request, next) {
828
+ if (request.params['namespace'] !== 'LPCurriculumRequest') {
829
+ next();
830
+ return;
831
  }
 
 
 
832
 
833
+ $store.dispatch('newRequest');
834
+
835
+ next(function (response) {
836
+
837
+ if (!jQuery.isPlainObject(response.body)) {
838
+ response.body = LP.parseJSON(response.body);
839
+ }
840
+
841
+ var body = response.body;
842
+ var result = body.success || false;
843
+
844
+ if (result) {
845
+ $store.dispatch('requestComplete', 'success');
846
+ } else {
847
+ $store.dispatch('requestComplete', 'failed');
848
+ }
849
+ });
850
  });
851
+ })(window, Vue, LP_Curriculum_Store);
852
+
853
+ /**
854
+ * Init app.
855
+ *
856
+ * @since 3.0.0
857
+ */
858
+ (function ($, Vue, $store) {
859
+ $(document).ready(function () {
860
+ window.LP_Course_Editor = new Vue({
861
+ el: '#admin-editor-lp_course',
862
+ template: '<lp-course-editor></lp-course-editor>'
863
+ });
864
+ });
865
+ })(jQuery, Vue, LP_Curriculum_Store);
866
+
867
+ });
assets/js/admin/question-editor.js CHANGED
@@ -22,7 +22,8 @@
22
  */
23
  (function (exports, Vue, Vuex, helpers, data) {
24
 
25
- var state = helpers.cloneObject(data.root);
 
26
 
27
  state.status = 'successful';
28
  state.countCurrentRequest = 0;
@@ -72,6 +73,9 @@
72
  },
73
  state: function (state) {
74
  return state;
 
 
 
75
  }
76
  };
77
 
@@ -94,6 +98,17 @@
94
  state.answers = answers;
95
  },
96
 
 
 
 
 
 
 
 
 
 
 
 
97
  'UPDATE_ANSWERS': function (state, answers) {
98
  state.answers = answers;
99
  },
@@ -161,6 +176,8 @@
161
  },
162
 
163
  deleteAnswer: function (context, payload) {
 
 
164
  Vue.http.LPRequest({
165
  type: 'delete-answer',
166
  answer_id: payload.id
@@ -176,7 +193,8 @@
176
  })
177
  },
178
 
179
- newAnswer: function (context) {
 
180
  Vue.http.LPRequest({
181
  type: 'new-answer'
182
  }).then(
22
  */
23
  (function (exports, Vue, Vuex, helpers, data) {
24
 
25
+ var state = helpers.cloneObject(data.root),
26
+ i18n = helpers.cloneObject(data.i18n);
27
 
28
  state.status = 'successful';
29
  state.countCurrentRequest = 0;
73
  },
74
  state: function (state) {
75
  return state;
76
+ },
77
+ i18n: function (state) {
78
+ return i18n;
79
  }
80
  };
81
 
98
  state.answers = answers;
99
  },
100
 
101
+ 'DELETE_ANSWER': function (state, id) {
102
+ for (var i = 0, n = state.answers.length; i < n; i++) {
103
+ if (state.answers[i].question_answer_id == id) {
104
+ state.answers[i].question_answer_id = LP.uniqueId();
105
+ break;
106
+ }
107
+ }
108
+ },
109
+ 'ADD_NEW_ANSWER': function (state, answer) {
110
+ state.answers.push(answer);
111
+ },
112
  'UPDATE_ANSWERS': function (state, answers) {
113
  state.answers = answers;
114
  },
176
  },
177
 
178
  deleteAnswer: function (context, payload) {
179
+
180
+ context.commit('DELETE_ANSWER', payload.id);
181
  Vue.http.LPRequest({
182
  type: 'delete-answer',
183
  answer_id: payload.id
193
  })
194
  },
195
 
196
+ newAnswer: function (context, data) {
197
+ context.commit('ADD_NEW_ANSWER', data.answer);
198
  Vue.http.LPRequest({
199
  type: 'new-answer'
200
  }).then(
assets/js/admin/quiz-editor.js CHANGED
@@ -244,6 +244,9 @@ var LP_List_Quiz_Questions_Store = (function (Vue, helpers, data, $) {
244
  externalComponent: function (state) {
245
  return state.externalComponent || [];
246
  },
 
 
 
247
  hiddenQuestions: function (state) {
248
  return state.questions
249
  .filter(function (question) {
@@ -289,7 +292,17 @@ var LP_List_Quiz_Questions_Store = (function (Vue, helpers, data, $) {
289
  'ADD_QUESTION_ANSWER': function (state, payload) {
290
  state.questions = state.questions.map(function (question) {
291
  if (question.id === payload.question_id) {
292
- question.answers.push(payload.answer);
 
 
 
 
 
 
 
 
 
 
293
  return question;
294
  } else {
295
  return question;
@@ -308,7 +321,19 @@ var LP_List_Quiz_Questions_Store = (function (Vue, helpers, data, $) {
308
  state.questions = questions;
309
  },
310
  'ADD_NEW_QUESTION': function (state, question) {
311
- state.questions.push(question);
 
 
 
 
 
 
 
 
 
 
 
 
312
 
313
  var _last_child = $('.lp-list-questions .main > div:last-child');
314
  if (_last_child.length) {
@@ -327,11 +352,14 @@ var LP_List_Quiz_Questions_Store = (function (Vue, helpers, data, $) {
327
  });
328
  },
329
  'REMOVE_QUESTION': function (state, item) {
330
-
331
  var questions = state.questions,
332
  index = questions.indexOf(item);
333
 
334
- state.questions.splice(index, 1);
 
 
 
 
335
  },
336
  'DELETE_QUESTION_ANSWER': function (state, payload) {
337
  var question_id = payload.question_id,
@@ -399,6 +427,21 @@ var LP_List_Quiz_Questions_Store = (function (Vue, helpers, data, $) {
399
  },
400
  'UPDATE_QUESTION_ANSWER_FAIL': function (state, question_id) {
401
  Vue.set(state.statusUpdateQuestionAnswer, question_id, 'failed');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
402
  }
403
  };
404
 
@@ -419,8 +462,16 @@ var LP_List_Quiz_Questions_Store = (function (Vue, helpers, data, $) {
419
  })
420
  },
421
 
422
- newQuestion: function (context, payload) {
 
 
 
 
423
 
 
 
 
 
424
  Vue.http.LPRequest({
425
  type: 'new-question',
426
  question: JSON.stringify(payload.question),
@@ -498,6 +549,9 @@ var LP_List_Quiz_Questions_Store = (function (Vue, helpers, data, $) {
498
  })
499
  },
500
 
 
 
 
501
  cloneQuestion: function (context, question) {
502
  Vue.http.LPRequest({
503
  type: 'clone-question',
@@ -520,15 +574,20 @@ var LP_List_Quiz_Questions_Store = (function (Vue, helpers, data, $) {
520
  },
521
 
522
  removeQuestion: function (context, question) {
 
 
 
523
 
524
  Vue.http.LPRequest({
525
  type: 'remove-question',
526
- question_id: question.id
527
  }).then(
528
  function (response) {
529
  var result = response.body;
530
 
531
  if (result.success) {
 
 
532
  context.commit('REMOVE_QUESTION', question);
533
  }
534
  },
@@ -539,13 +598,17 @@ var LP_List_Quiz_Questions_Store = (function (Vue, helpers, data, $) {
539
  },
540
 
541
  deleteQuestion: function (context, question) {
542
-
 
 
543
  Vue.http
544
  .LPRequest({
545
  type: 'delete-question',
546
  question_id: question.id
547
  })
548
  .then(function () {
 
 
549
  context.commit('REMOVE_QUESTION', question);
550
  context.commit('UPDATE_QUESTION_SUCCESS', question.id);
551
  })
@@ -632,6 +695,8 @@ var LP_List_Quiz_Questions_Store = (function (Vue, helpers, data, $) {
632
  },
633
 
634
  deleteQuestionAnswer: function (context, payload) {
 
 
635
  context.commit('UPDATE_QUESTION_REQUEST', payload.question_id);
636
 
637
  Vue.http.LPRequest({
@@ -645,7 +710,8 @@ var LP_List_Quiz_Questions_Store = (function (Vue, helpers, data, $) {
645
  if (result.success) {
646
  context.commit('DELETE_QUESTION_ANSWER', {
647
  question_id: payload.question_id,
648
- answer_id: payload.answer_id
 
649
  });
650
  context.commit('UPDATE_QUESTION_SUCCESS', payload.question_id);
651
  }
@@ -657,24 +723,29 @@ var LP_List_Quiz_Questions_Store = (function (Vue, helpers, data, $) {
657
  )
658
  },
659
 
660
- newQuestionAnswer: function (context, question_id) {
 
 
661
  context.commit('UPDATE_QUESTION_REQUEST', question_id);
662
-
 
 
 
663
  Vue.http
664
  .LPRequest({
665
  type: 'new-question-answer',
666
- question_id: question_id
 
667
  })
668
  .then(
669
  function (response) {
670
-
671
  var result = response.body;
672
-
673
  if (result.success) {
674
  var answer = result.data;
675
-
676
  context.commit('ADD_QUESTION_ANSWER', {question_id: question_id, answer: answer});
677
  context.commit('UPDATE_QUESTION_SUCCESS', question_id);
 
 
678
  }
679
  },
680
  function (error) {
244
  externalComponent: function (state) {
245
  return state.externalComponent || [];
246
  },
247
+ hiddenQuestionsSettings: function (state) {
248
+ return state.hidden_questions_settings || [];
249
+ },
250
  hiddenQuestions: function (state) {
251
  return state.questions
252
  .filter(function (question) {
292
  'ADD_QUESTION_ANSWER': function (state, payload) {
293
  state.questions = state.questions.map(function (question) {
294
  if (question.id === payload.question_id) {
295
+ var found = false;
296
+ if (payload.answer.temp_id) {
297
+ for (var i = 0, n = question.answers.length; i < n; i++) {
298
+ if (question.answers[i].question_answer_id == payload.answer.temp_id) {
299
+ found = true;
300
+ Vue.set(question.answers, i, payload.answer);
301
+ }
302
+ }
303
+ }
304
+
305
+ !found && question.answers.push(payload.answer);
306
  return question;
307
  } else {
308
  return question;
321
  state.questions = questions;
322
  },
323
  'ADD_NEW_QUESTION': function (state, question) {
324
+ var found = false;
325
+ if (question.temp_id) {
326
+ for (var i = 0, n = state.questions.length; i < n; i++) {
327
+ if (state.questions[i].id == question.temp_id) {
328
+ Vue.set(state.questions, i, question);
329
+ found = true;
330
+ break;
331
+ }
332
+ }
333
+ }
334
+ if (!found) {
335
+ state.questions.push(question);
336
+ }
337
 
338
  var _last_child = $('.lp-list-questions .main > div:last-child');
339
  if (_last_child.length) {
352
  });
353
  },
354
  'REMOVE_QUESTION': function (state, item) {
 
355
  var questions = state.questions,
356
  index = questions.indexOf(item);
357
 
358
+ if (item.temp_id) {
359
+ state.questions[index].id = item.temp_id;
360
+ } else {
361
+ state.questions.splice(index, 1);
362
+ }
363
  },
364
  'DELETE_QUESTION_ANSWER': function (state, payload) {
365
  var question_id = payload.question_id,
427
  },
428
  'UPDATE_QUESTION_ANSWER_FAIL': function (state, question_id) {
429
  Vue.set(state.statusUpdateQuestionAnswer, question_id, 'failed');
430
+ },
431
+ 'DELETE_ANSWER': function (state, data) {
432
+ state.questions.map(function (question, index) {
433
+ if (question.id == data.question_id) {
434
+ for (var i = 0, n = question.answers.length; i < n; i++) {
435
+ if (question.answers[i].question_answer_id == data.answer_id) {
436
+ question.answers[i].question_answer_id = data.temp_id;
437
+ //state.questions[index].answers.splice(i, 1);
438
+ break;
439
+ }
440
+ }
441
+ return false;
442
+ }
443
+ })
444
+
445
  }
446
  };
447
 
462
  })
463
  },
464
 
465
+ updateQuizQuestionsHidden: function (context, data) {
466
+ Vue.http.LPRequest($.extend({}, data, {
467
+ type: 'update-quiz-questions-hidden'
468
+ }));
469
+ },
470
 
471
+ newQuestion: function (context, payload) {
472
+ var newQuestion = JSON.parse(JSON.stringify(payload.question));
473
+ newQuestion.settings = {};
474
+ context.commit('ADD_NEW_QUESTION', newQuestion);
475
  Vue.http.LPRequest({
476
  type: 'new-question',
477
  question: JSON.stringify(payload.question),
549
  })
550
  },
551
 
552
+ isHiddenQuestionsSettings: function (context, id) {
553
+ },
554
+
555
  cloneQuestion: function (context, question) {
556
  Vue.http.LPRequest({
557
  type: 'clone-question',
574
  },
575
 
576
  removeQuestion: function (context, question) {
577
+ var question_id = question.id;
578
+ question.temp_id = LP.uniqueId();
579
+ context.commit('REMOVE_QUESTION', question);
580
 
581
  Vue.http.LPRequest({
582
  type: 'remove-question',
583
+ question_id: question_id
584
  }).then(
585
  function (response) {
586
  var result = response.body;
587
 
588
  if (result.success) {
589
+ question.id = question.temp_id;
590
+ question.temp_id = 0;
591
  context.commit('REMOVE_QUESTION', question);
592
  }
593
  },
598
  },
599
 
600
  deleteQuestion: function (context, question) {
601
+ var question_id = question.id;
602
+ question.temp_id = LP.uniqueId();
603
+ context.commit('REMOVE_QUESTION', question);
604
  Vue.http
605
  .LPRequest({
606
  type: 'delete-question',
607
  question_id: question.id
608
  })
609
  .then(function () {
610
+ question.id = question.temp_id;
611
+ question.temp_id = 0;
612
  context.commit('REMOVE_QUESTION', question);
613
  context.commit('UPDATE_QUESTION_SUCCESS', question.id);
614
  })
695
  },
696
 
697
  deleteQuestionAnswer: function (context, payload) {
698
+ payload.temp_id = LP.uniqueId();
699
+ context.commit('DELETE_ANSWER', payload);
700
  context.commit('UPDATE_QUESTION_REQUEST', payload.question_id);
701
 
702
  Vue.http.LPRequest({
710
  if (result.success) {
711
  context.commit('DELETE_QUESTION_ANSWER', {
712
  question_id: payload.question_id,
713
+ answer_id: payload.temp_id
714
+ //answer_id: payload.answer_id
715
  });
716
  context.commit('UPDATE_QUESTION_SUCCESS', payload.question_id);
717
  }
723
  )
724
  },
725
 
726
+ newQuestionAnswer: function (context, data) {
727
+ var temp_id = LP.uniqueId(),
728
+ question_id = data.question_id;
729
  context.commit('UPDATE_QUESTION_REQUEST', question_id);
730
+ context.commit('ADD_QUESTION_ANSWER', {
731
+ question_id: question_id,
732
+ answer: {'text': LP_Quiz_Store.getters['i18n/all'].new_option, 'question_answer_id': temp_id}
733
+ });
734
  Vue.http
735
  .LPRequest({
736
  type: 'new-question-answer',
737
+ question_id: question_id,
738
+ question_answer_id: temp_id
739
  })
740
  .then(
741
  function (response) {
 
742
  var result = response.body;
 
743
  if (result.success) {
744
  var answer = result.data;
 
745
  context.commit('ADD_QUESTION_ANSWER', {question_id: question_id, answer: answer});
746
  context.commit('UPDATE_QUESTION_SUCCESS', question_id);
747
+
748
+ data.success && setTimeout(function(){data.success.apply(data.context, [answer]);}, 300);
749
  }
750
  },
751
  function (error) {
assets/js/frontend/quiz.js CHANGED
@@ -17,7 +17,7 @@
17
 
18
  if (seconds > DAY_IN_SECONDS) {
19
  var days = Math.ceil(seconds / DAY_IN_SECONDS);
20
- str = days + ( days > 1 ? ' day left' : ' days left' );
21
  } else {
22
  var hours = Math.floor(seconds / HOUR_IN_SECONDS),
23
  minutes = 0;
17
 
18
  if (seconds > DAY_IN_SECONDS) {
19
  var days = Math.ceil(seconds / DAY_IN_SECONDS);
20
+ str = days + ( days > 1 ? ' days left' : ' day left' );
21
  } else {
22
  var hours = Math.floor(seconds / HOUR_IN_SECONDS),
23
  minutes = 0;
assets/js/global.js CHANGED
@@ -85,7 +85,7 @@ if (typeof window.LP === 'undefined') {
85
  return self;
86
  };
87
 
88
- this.callEvent = function (event,callbackArgs) {
89
  if (!callbacks[event]) {
90
  return;
91
  }
@@ -667,7 +667,7 @@ if (typeof window.LP === 'undefined') {
667
  return (type || "json") === "json" ? this.parseJSON(response) : response;
668
  },
669
  parseJSON: function (data) {
670
- var m = (data+'').match(/<-- LP_AJAX_START -->(.*)<-- LP_AJAX_END -->/);
671
  try {
672
  if (m) {
673
  data = $.parseJSON(m[1]);
@@ -1061,17 +1061,33 @@ if (typeof window.LP === 'undefined') {
1061
  };
1062
 
1063
  function QuickTip(el, options) {
1064
- var $el = $(el),
1065
- $tip = $('<div class="learn-press-tip-floating">' + $el.html() + '</div>'),
1066
- t = null,
1067
- closeInterval = 1000;
1068
 
1069
  options = $.extend({
1070
  event: 'hover',
1071
  autoClose: true,
1072
- single: true
 
 
 
1073
  }, options, $el.data());
1074
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1075
  if (options.autoClose === false) {
1076
  $tip.append('<a class="close"></a>');
1077
  $tip.on('click', '.close', function () {
@@ -1094,7 +1110,7 @@ if (typeof window.LP === 'undefined') {
1094
 
1095
  $tip.css({
1096
  top: pos.top - $tip.outerHeight() - 8,
1097
- left: pos.left - $tip.outerWidth() / 2 + 8
1098
  });
1099
  }
1100
 
@@ -1109,14 +1125,17 @@ if (typeof window.LP === 'undefined') {
1109
  function close() {
1110
  closeInterval = 0;
1111
  hide();
1112
- closeInterval = 1000;
1113
  }
1114
 
1115
  function open() {
1116
  show();
1117
  }
1118
 
1119
- $el.html('');
 
 
 
1120
  if (options.event === 'click') {
1121
  $el.on('click', function (e) {
1122
  e.stopPropagation();
85
  return self;
86
  };
87
 
88
+ this.callEvent = function (event, callbackArgs) {
89
  if (!callbacks[event]) {
90
  return;
91
  }
667
  return (type || "json") === "json" ? this.parseJSON(response) : response;
668
  },
669
  parseJSON: function (data) {
670
+ var m = (data + '').match(/<-- LP_AJAX_START -->(.*)<-- LP_AJAX_END -->/);
671
  try {
672
  if (m) {
673
  data = $.parseJSON(m[1]);
1061
  };
1062
 
1063
  function QuickTip(el, options) {
1064
+ var $el = $(el);
 
 
 
1065
 
1066
  options = $.extend({
1067
  event: 'hover',
1068
  autoClose: true,
1069
+ single: true,
1070
+ closeInterval: 1000,
1071
+ arrowOffset: null,
1072
+ tipClass: ''
1073
  }, options, $el.data());
1074
 
1075
+ var content = $el.data('content-tip') || $el.html(),
1076
+ $tip = $('<div class="learn-press-tip-floating">' + content + '</div>'),
1077
+ t = null,
1078
+ closeInterval = 0,
1079
+ useData = false,
1080
+ arrowOffset = options.arrowOffset == 'el' ? $el.outerWidth() / 2 : 8;
1081
+
1082
+ $tip.addClass(options.tipClass);
1083
+
1084
+ if ($el.attr('data-content-tip')) {
1085
+ $el.removeAttr('data-content-tip');
1086
+ useData = true;
1087
+ }
1088
+
1089
+ closeInterval = options.closeInterval;
1090
+
1091
  if (options.autoClose === false) {
1092
  $tip.append('<a class="close"></a>');
1093
  $tip.on('click', '.close', function () {
1110
 
1111
  $tip.css({
1112
  top: pos.top - $tip.outerHeight() - 8,
1113
+ left: pos.left - $tip.outerWidth() / 2 + arrowOffset
1114
  });
1115
  }
1116
 
1125
  function close() {
1126
  closeInterval = 0;
1127
  hide();
1128
+ closeInterval = options.closeInterval;
1129
  }
1130
 
1131
  function open() {
1132
  show();
1133
  }
1134
 
1135
+ if (!useData) {
1136
+ $el.html('');
1137
+ }
1138
+
1139
  if (options.event === 'click') {
1140
  $el.on('click', function (e) {
1141
  e.stopPropagation();
assets/scss/_mixin.scss CHANGED
@@ -85,4 +85,22 @@
85
  @mixin appearance($value) {
86
  -webkit-appearance: $value;
87
  -moz-appearance: $value;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
  }
85
  @mixin appearance($value) {
86
  -webkit-appearance: $value;
87
  -moz-appearance: $value;
88
+ }
89
+
90
+ @mixin placeholder-color($color) {
91
+ &::-webkit-input-placeholder {
92
+ color: $color;
93
+ }
94
+ &::-moz-placeholder {
95
+ color: $color;
96
+ }
97
+ &:-ms-input-placeholder {
98
+ color: $color;
99
+ }
100
+ &:-moz-placeholder {
101
+ color: $color;
102
+ }
103
+ &::placeholder{
104
+ color: $color;
105
+ }
106
  }
assets/scss/admin/_admin-editor.scss CHANGED
@@ -1,6 +1,46 @@
1
  /**
2
  * General style for admin editor.
3
  */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  .lp-admin-editor {
5
  background-color: #fff;
6
  border: 1px solid #ddd;
@@ -23,7 +63,7 @@
23
 
24
  .lp-course-curriculum {
25
  .heading {
26
- padding: 15px;
27
  position: relative;
28
 
29
  h4 {
@@ -75,22 +115,26 @@
75
 
76
  .curriculum-sections {
77
  margin: 0;
78
- padding: 10px;
79
  border-top: 1px solid #ddd;
80
  }
81
 
82
  .section {
83
  border: 1px solid #e5e5e5;
84
- margin-bottom: 10px;
85
  opacity: 1;
86
  background: #FFF;
 
 
 
 
 
 
87
  &.new-section {
88
- //box-shadow: 0 0 30px #ddd;
89
- margin-bottom: 0;
90
  form {
91
  margin: 0;
92
  }
93
-
94
  .section-head {
95
  background-color: #f4fcff;
96
  .creatable {
@@ -103,6 +147,30 @@
103
  }
104
  }
105
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
106
 
107
  &:hover {
108
  .section-actions {
@@ -112,36 +180,22 @@
112
  }
113
  }
114
 
115
- &.sortable-ghost {
116
- opacity: 0.5;
117
- }
118
-
119
- &.open {
120
-
121
- }
122
-
123
  &.close {
124
  .section-collapse {
125
  }
126
  }
127
 
128
- &.updating {
129
- .section-head {
130
- background-color: #e6f2d0;
131
- }
132
- }
133
-
134
  input {
135
  background-color: transparent;
136
  box-shadow: none;
137
-
138
  &:focus {
139
  box-shadow: none;
140
  }
141
  }
142
 
143
  .section-head {
144
- background-color: #f9f9f9;
 
145
  padding: 3px;
146
  position: relative;
147
  transition: background 500ms ease-out;
@@ -241,7 +295,7 @@
241
  font-size: 1.2em;
242
  border: none;
243
  line-height: 30px;
244
- width: calc(100% - 80px);
245
  padding-left: 0;
246
  }
247
 
@@ -250,7 +304,8 @@
250
  width: 100%;
251
  color: #999;
252
  font-style: italic;
253
-
 
254
  &:focus {
255
  color: #444;
256
  }
@@ -279,18 +334,14 @@
279
  display: flex;
280
  justify-content: center;
281
  align-items: center;
282
-
 
 
 
283
  &:nth-child(2n+1) {
284
  background-color: #f4fcff;
285
  }
286
-
287
- &.sortable-ghost {
288
- opacity: 0.5;
289
- }
290
-
291
  &.updating {
292
- background-color: #e6f2d0;
293
-
294
  &:before {
295
  position: absolute;
296
  content: '';
@@ -307,13 +358,12 @@
307
  }
308
 
309
  .drag {
310
- width: 18px;
311
  height: 20px;
312
  cursor: url("../../images/openhand.cur") 7 5, default;
313
- flex-shrink: 0;
314
  visibility: hidden;
315
  fill: #d5dce0;
316
  padding-top: 3px;
 
317
  &:hover {
318
  fill: #0085ba;
319
  }
@@ -361,12 +411,6 @@
361
  .remove {
362
  color: #a00;
363
  }
364
-
365
- .preview-item {
366
- .dashicons-unlock {
367
- //visibility: visible;
368
- }
369
- }
370
  }
371
 
372
  &:hover {
@@ -384,7 +428,6 @@
384
  }
385
  }
386
  }
387
-
388
  }
389
 
390
  .new-section-item {
@@ -393,7 +436,9 @@
393
  display: flex;
394
  align-items: center;
395
  transition: all 200ms ease-out;
396
-
 
 
397
  .title {
398
  display: inline-block;
399
  margin: 0;
@@ -402,8 +447,6 @@
402
 
403
  .types {
404
  display: inline-block;
405
- margin-left: 17px;
406
-
407
  &:hover, &:focus {
408
  background-color: #fff;
409
 
@@ -443,6 +486,11 @@
443
  content: '\f330';
444
  }
445
  }
 
 
 
 
 
446
  }
447
  }
448
  }
@@ -480,7 +528,6 @@
480
  position: absolute;
481
  top: 100%;
482
  width: 165px;
483
- padding: 2px 0;
484
  right: 0;
485
  background: #fdfeff;
486
  margin: 0;
@@ -490,11 +537,13 @@
490
  text-align: center;
491
  li {
492
  margin: 0;
493
- padding: 8px;
494
  border-bottom: 1px solid #eee;
 
495
  a {
496
  color: #0073aa;
497
  text-decoration: none;
 
 
498
  &.delete-permanently {
499
  color: #d05d5d;
500
  }
@@ -535,11 +584,34 @@
535
  }
536
  }
537
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
538
  .icon {
539
- width: 38px;
540
  font-size: 20px;
541
  color: #0085ba;
542
  text-align: center;
 
543
  &:before {
544
  font-family: Dashicons;
545
  }
@@ -582,543 +654,31 @@
582
  }
583
  }
584
  }
585
- }
586
- }
587
-
588
- /**
589
- * Quiz admin editor.
590
- */
591
- #admin-editor-lp_quiz {
592
-
593
- .lp-box-data-head {
594
- .status {
595
- font-family: Dashicons;
596
- font-size: 20px;
597
- position: relative;
598
- top: 5px;
599
- margin-left: 10px;
600
- visibility: hidden;
601
-
602
- &:before {
603
- content: "\f463";
604
- }
605
-
606
- &.loading {
607
- visibility: visible;
608
- animation: rotation 2s infinite linear;
609
- display: inline-block;
610
- }
611
- }
612
- .collapse-list-questions {
613
- font-family: Dashicons;
614
- position: absolute;
615
- top: 0;
616
- right: 5px;
617
- bottom: 0;
618
- font-size: 30px;
619
- display: flex;
620
- justify-content: center;
621
- align-items: center;
622
- cursor: pointer;
623
- width: 40px;
624
- height: 55px;
625
- color: #999;
626
- }
627
- }
628
-
629
- .lp-box-data-content {
630
- .lp-list-questions {
631
- color: #777;
632
- border-collapse: collapse;
633
-
634
- .table-row {
635
- display: flex;
636
- flex-direction: row;
637
- text-align: center;
638
-
639
- & > * {
640
- width: 100%;
641
- padding: 9px 10px
642
- }
643
-
644
- & > .sort {
645
- width: 15px;
646
- fill: #d5dce0;
647
- cursor: url("../../images/openhand.cur") 7 5, default;
648
- visibility: hidden;
649
- padding-right: 0;
650
- position: relative;
651
- svg {
652
- width: 18px;
653
- height: 20px;
654
- position: absolute;
655
- top: 50%;
656
- margin-top: -10px;
657
- left: 4px;
658
- }
659
- &:hover {
660
- fill: #0085ba;
661
- }
662
- }
663
-
664
- & > .order {
665
- width: 10px;
666
- }
667
-
668
- & > .name {
669
- padding: 10px;
670
- }
671
-
672
- & > .type {
673
- width: 150px;
674
- }
675
-
676
- & > .actions {
677
- width: 300px;
678
- }
679
- &:hover {
680
- & > .sort {
681
- visibility: visible;
682
- }
683
- }
684
- }
685
-
686
- .header {
687
- border-bottom: 1px solid #ddd;
688
- .table-row {
689
- & > * {
690
- font-weight: bold;
691
- padding: 12px 8px 12px 0;
692
- }
693
- .sort {
694
- width: 45px;
695
- }
696
- }
697
- }
698
-
699
- .main {
700
- .question-actions {
701
- .name {
702
- input {
703
- width: 100%;
704
- font-size: 14px;
705
- border: none;
706
- background: transparent;
707
- box-shadow: none;
708
- font-weight: normal;
709
- color: #777;
710
- padding: 0;
711
- }
712
- }
713
-
714
- &.updating {
715
- background-color: #e6f2d0;
716
- }
717
- }
718
- .question-settings {
719
- border: 1px solid #ddd;
720
- border-left: none;
721
- border-right: none;
722
- & > * {
723
- padding: 20px;
724
- }
725
- .quiz-question-data {
726
- table.lp-list-options {
727
- border: 1px solid #ddd;
728
- thead {
729
- .answer-text {
730
- width: calc(100% - 100px);
731
- }
732
- .answer-correct {
733
- width: 65px;
734
- }
735
- }
736
- tbody {
737
- tr {
738
- background: #fff;
739
- border: 1px solid #DDD;
740
- &:nth-child(2n) {
741
- background: #f4fcff;
742
- }
743
- td {
744
- padding: 0 10px;
745
- background: inherit;
746
- position: static;
747
- border: none;
748
- &.sort {
749
- cursor: url("../../images/openhand.cur") 7 5, default;
750
- }
751
- &.answer-correct {
752
- text-align: center;
753
- }
754
- }
755
- }
756
- .answer-option {
757
- .answer-text {
758
- input {
759
- width: 100%;
760
- font-size: 14px;
761
- border: none;
762
- background: transparent;
763
- box-shadow: none;
764
- font-weight: normal;
765
- color: #777;
766
- padding: 0;
767
- }
768
- }
769
- }
770
- }
771
- }
772
- }
773
- }
774
- }
775
-
776
- .main {
777
- .question-item {
778
- background: #fff;
779
- border-bottom: 1px solid #f1f1f1;
780
- &:nth-child(2n+1) {
781
- background: #f4fcff;
782
- }
783
- .cell {
784
- padding: 10px;
785
- }
786
- .question-actions {
787
- .name {
788
- input {
789
- width: 100%;
790
- font-size: 14px;
791
- border: none;
792
- background: transparent;
793
- box-shadow: none;
794
- font-weight: normal;
795
- color: #777;
796
- padding: 0;
797
- }
798
- }
799
- .actions {
800
- padding: 0;
801
- margin: 0;
802
- .lp-toolbar-buttons {
803
- position: static;
804
- z-index: 10;
805
- height: 100%;
806
- text-align: left;
807
- > div {
808
- a {
809
- visibility: hidden;
810
- }
811
- }
812
- .lp-toolbar-btn {
813
- height: 100%;
814
- .lp-btn-icon {
815
- width: 28px;
816
- height: 30px;
817
- text-align: center;
818
- position: absolute;
819
- top: 50%;
820
- margin-top: -15px;
821
- left: 50%;
822
- margin-left: -15px;
823
- line-height: 30px;
824
- }
825
- ul {
826
- z-index: 9;
827
- }
828
- }
829
- .lp-btn-toggle {
830
- font-family: Dashicons;
831
- line-height: 42px;
832
- font-size: 16px;
833
- &.open {
834
- &::after {
835
- content: '\f343';
836
- }
837
- }
838
- &.close {
839
- &::after {
840
- content: '\f347';
841
- }
842
- }
843
- }
844
- .lp-toolbar-btn-dropdown {
845
- ul {
846
- li {
847
- border-bottom: 1px solid #eee;
848
- a {
849
- padding: 10px 25px;
850
- &.remove {
851
- color: #0073aa;
852
- }
853
- }
854
- }
855
- }
856
- }
857
- }
858
- }
859
- &:hover {
860
- .lp-toolbar-buttons {
861
- > div {
862
- a {
863
- visibility: visible;
864
- }
865
- }
866
- }
867
- }
868
- }
869
-
870
- .question-settings {
871
- background: #fff;
872
-
873
- .quiz-question-options {
874
- text-align: left;
875
- .inside {
876
- margin: 0;
877
- padding: 0;
878
- .rwmb-meta-box {
879
- .rwmb-field {
880
- padding: 20px;
881
- margin: 0;
882
- &:nth-child(2n+1) {
883
- background: #f4fcff;
884
- }
885
- }
886
- }
887
- }
888
- }
889
- }
890
- }
891
- }
892
-
893
- .footer {
894
- .table-row {
895
- text-align: left;
896
- .add-new-question {
897
- padding-left: 65px;
898
- margin-top: -1px;
899
- border-top: 1px solid #DDD;
900
- .title {
901
- position: relative;
902
- display: inline-block;
903
- min-width: 500px;
904
- input {
905
- border: 1px solid #DDD;
906
- width: 100%;
907
- margin: 0;
908
- padding: 6px 6px;
909
- @include box-shadow(none);
910
- @include border-radius(3px);
911
- &:focus {
912
- border-color: #DDD;
913
- }
914
- }
915
- }
916
- .add-new {
917
- display: inline;
918
- position: relative;
919
- ul.question-types {
920
- position: absolute;
921
- margin: 6px;
922
- background-color: #FFF;
923
- top: 100%;
924
- border: 1px solid #DDD;
925
- right: -2px;
926
- width: 200px;
927
- z-index: 9999999;
928
- display: none;
929
- li {
930
- margin: 0;
931
- a {
932
- display: block;
933
- padding: 10px;
934
- line-height: 1;
935
- text-decoration: none;
936
- outline: none;
937
- box-shadow: none;
938
- }
939
- }
940
- }
941
-
942
- button {
943
- &:hover {
944
- & + .question-types {
945
- display: block;
946
- }
947
- }
948
-
949
- & + .question-types {
950
- &:hover {
951
- display: block;
952
- }
953
- }
954
-
955
- &[disabled="disabled"] {
956
- &:hover {
957
- & + .question-types {
958
- display: none;
959
- }
960
- }
961
- }
962
- }
963
- }
964
- .select-item {
965
- display: inline;
966
- }
967
- button {
968
- height: 30px;
969
- box-shadow: 0 1px 0 #ccc !important;
970
- }
971
- }
972
- }
973
- }
974
- }
975
- .question-button-actions {
976
- text-align: left;
977
  }
978
  }
979
  }
980
 
981
- /**
982
- * Question admin editor.
983
- */
984
- #admin-editor-lp_question {
985
- background: #fff;
986
- .lp-box-data-head {
987
- padding: 5px 15px;
988
- .heading {
989
- float: left;
990
- }
991
- .question-actions {
992
- margin-top: 8px;
993
- .question-types {
994
- ul {
995
- position: absolute;
996
- top: 100%;
997
- right: 0;
998
- height: auto;
999
- background: #fdfeff;
1000
- margin: 0;
1001
- border: 1px solid #DDD;
1002
- display: none;
1003
- li {
1004
- margin: 0;
1005
- &:hover, &.active {
1006
- background: #dbf5ff;
1007
- }
1008
- a {
1009
- display: block;
1010
- white-space: nowrap;
1011
- text-decoration: none;
1012
- padding: 5px 25px;
1013
- font-size: 12px;
1014
- text-align: right;
1015
- color: #0073aa;
1016
- margin: 0;
1017
- }
1018
- }
1019
- &:hover {
1020
- display: block;
1021
- }
1022
- }
1023
- }
1024
- &:hover {
1025
- .question-types {
1026
- ul {
1027
- display: block;
1028
- }
1029
- }
1030
- }
1031
- }
1032
- }
1033
- .lp-box-data-content {
1034
- padding: 20px;
1035
- table.list-question-answers {
1036
- width: 100%;
1037
- border: 1px solid #ddd;
1038
- tr {
1039
- td {
1040
- padding: 0 15px;
1041
- }
1042
- }
1043
- thead {
1044
- background: #F5F5F5;
1045
- tr {
1046
- th {
1047
- padding: 15px;
1048
- background: #F5F5F5;
1049
- border-bottom: 1px solid #DDD;
1050
- &.sort, &.order, &.actions {
1051
- width: 10px;
1052
- }
1053
- &.answer-correct {
1054
- width: 65px;
1055
- }
1056
- }
1057
- }
1058
- }
1059
- tbody {
1060
- tr {
1061
- background: #f4fcff;
1062
- color: #777;
1063
- &:nth-child(2n) {
1064
- background: #fff;
1065
- }
1066
- &:hover {
1067
- td {
1068
- &.actions {
1069
- .remove-answer {
1070
- visibility: visible;
1071
- }
1072
- }
1073
- }
1074
- }
1075
- td {
1076
- &.sort {
1077
- width: 15px;
1078
- text-align: center;
1079
- font-size: 18px;
1080
- color: #CCC;
1081
- cursor: url("../../images/openhand.cur") 7 5, default;
1082
- &:hover {
1083
- color: #0085ba;
1084
- }
1085
- }
1086
- &.order {
1087
- font-size: 13px;
1088
- }
1089
- &.answer-text {
1090
- input {
1091
- width: 100%;
1092
- font-size: 14px;
1093
- border: none;
1094
- background: transparent;
1095
- box-shadow: none;
1096
- font-weight: normal;
1097
- color: #777;
1098
- padding: 0;
1099
- }
1100
- }
1101
- &.actions {
1102
- .remove-answer {
1103
- visibility: hidden;
1104
- &:hover {
1105
- background: transparent;
1106
- }
1107
- }
1108
- }
1109
- &.lp-toolbar-buttons {
1110
- z-index: auto;
1111
- }
1112
- }
1113
- }
1114
- }
1115
- }
1116
- .add-answer {
1117
- margin: 15px 0 0 0;
1118
- }
1119
  }
1120
  }
1121
 
 
 
 
1122
  /**
1123
  * Modal choose items.
1124
  */
@@ -1209,9 +769,9 @@
1209
  border-right: 1px solid #ddd;
1210
  position: absolute;
1211
  right: 0;
1212
- height: 20px;
1213
  top: 50%;
1214
- margin-top: -10px;
1215
  }
1216
 
1217
  &.active {
@@ -1237,11 +797,12 @@
1237
  }
1238
 
1239
  a {
1240
- padding: 15px 20px;
1241
  text-decoration: none;
1242
  display: inline-block;
1243
  font-weight: 600;
1244
-
 
1245
  &:focus {
1246
  box-shadow: none;
1247
  }
@@ -1256,8 +817,8 @@
1256
  right: 0;
1257
  cursor: pointer;
1258
  font-size: 1em;
1259
- padding: 9px;
1260
- z-index: 9;
1261
  }
1262
  }
1263
 
@@ -1265,6 +826,7 @@
1265
  padding: 20px;
1266
  position: relative;
1267
  overflow: hidden;
 
1268
 
1269
  .section-item {
1270
  cursor: pointer;
@@ -1285,10 +847,11 @@
1285
  .search {
1286
  margin-bottom: 20px;
1287
  background: transparent;
1288
- input {
1289
  width: 100%;
1290
  font-size: 1.2em;
1291
  line-height: 1.5;
 
1292
  }
1293
  }
1294
 
@@ -1319,7 +882,7 @@
1319
  z-index: 2;
1320
  padding: 20px;
1321
  transform: translate(100%, 0);
1322
- max-height: 400px;
1323
  overflow: auto;
1324
 
1325
  &.show {
@@ -1342,6 +905,17 @@
1342
  }
1343
  }
1344
 
 
 
 
 
 
 
 
 
 
 
 
1345
  @media screen and (max-width: 900px) {
1346
  #admin-editor-lp_quiz {
1347
  .lp-box-data-content {
1
  /**
2
  * General style for admin editor.
3
  */
4
+
5
+ @-webkit-keyframes rotating4 /* Safari and Chrome */
6
+ {
7
+ from {
8
+ -webkit-transform: rotate(0deg);
9
+ -o-transform: rotate(0deg);
10
+ transform: rotate(0deg);
11
+ }
12
+ to {
13
+ -webkit-transform: rotate(360deg);
14
+ -o-transform: rotate(360deg);
15
+ transform: rotate(360deg);
16
+ }
17
+ }
18
+
19
+ @keyframes rotating4 {
20
+ from {
21
+ -ms-transform: rotate(0deg);
22
+ -moz-transform: rotate(0deg);
23
+ -webkit-transform: rotate(0deg);
24
+ -o-transform: rotate(0deg);
25
+ transform: rotate(0deg);
26
+ }
27
+ to {
28
+ -ms-transform: rotate(360deg);
29
+ -moz-transform: rotate(360deg);
30
+ -webkit-transform: rotate(360deg);
31
+ -o-transform: rotate(360deg);
32
+ transform: rotate(360deg);
33
+ }
34
+ }
35
+
36
+ @mixin rotating4($args: rotating4 2s linear infinite) {
37
+ -webkit-animation: $args;
38
+ -moz-animation: $args;
39
+ -ms-animation: $args;
40
+ -o-animation: $args;
41
+ animation: $args;
42
+ }
43
+
44
  .lp-admin-editor {
45
  background-color: #fff;
46
  border: 1px solid #ddd;
63
 
64
  .lp-course-curriculum {
65
  .heading {
66
+ padding: 12px 10px;
67
  position: relative;
68
 
69
  h4 {
115
 
116
  .curriculum-sections {
117
  margin: 0;
118
+ //padding: 10px;
119
  border-top: 1px solid #ddd;
120
  }
121
 
122
  .section {
123
  border: 1px solid #e5e5e5;
124
+ //margin-bottom: 10px;
125
  opacity: 1;
126
  background: #FFF;
127
+ border-left: 0;
128
+ border-right: 0;
129
+ margin-bottom: -1px;
130
+ &:first-child {
131
+ border-top: 0;
132
+ }
133
  &.new-section {
134
+ margin-top: 1px;
 
135
  form {
136
  margin: 0;
137
  }
 
138
  .section-head {
139
  background-color: #f4fcff;
140
  .creatable {
147
  }
148
  }
149
  }
150
+ &.empty-section {
151
+ position: relative;
152
+ &:after {
153
+ position: absolute;
154
+ top: 0;
155
+ left: 0;
156
+ right: 0;
157
+ bottom: 0;
158
+ background: #FFF;
159
+ content: '';
160
+ opacity: 0.5;
161
+ }
162
+ .section-head {
163
+ .movable:before {
164
+ content: "\f463";
165
+ color: #a2a2a2;
166
+ display: inline-block;
167
+ @include rotating4();
168
+ }
169
+ }
170
+ .section-collapse {
171
+ display: none;
172
+ }
173
+ }
174
 
175
  &:hover {
176
  .section-actions {
180
  }
181
  }
182
 
 
 
 
 
 
 
 
 
183
  &.close {
184
  .section-collapse {
185
  }
186
  }
187
 
 
 
 
 
 
 
188
  input {
189
  background-color: transparent;
190
  box-shadow: none;
 
191
  &:focus {
192
  box-shadow: none;
193
  }
194
  }
195
 
196
  .section-head {
197
+ //background-color: #f9f9f9;
198
+ background-color: #f4fcff;
199
  padding: 3px;
200
  position: relative;
201
  transition: background 500ms ease-out;
295
  font-size: 1.2em;
296
  border: none;
297
  line-height: 30px;
298
+ width: calc(100% - 200px);
299
  padding-left: 0;
300
  }
301
 
304
  width: 100%;
305
  color: #999;
306
  font-style: italic;
307
+ margin: 0;
308
+ padding: 0;
309
  &:focus {
310
  color: #444;
311
  }
334
  display: flex;
335
  justify-content: center;
336
  align-items: center;
337
+ background: #FFF;
338
+ &.ui-sortable-helper {
339
+ border-bottom: 1px solid #EEE;
340
+ }
341
  &:nth-child(2n+1) {
342
  background-color: #f4fcff;
343
  }
 
 
 
 
 
344
  &.updating {
 
 
345
  &:before {
346
  position: absolute;
347
  content: '';
358
  }
359
 
360
  .drag {
 
361
  height: 20px;
362
  cursor: url("../../images/openhand.cur") 7 5, default;
 
363
  visibility: hidden;
364
  fill: #d5dce0;
365
  padding-top: 3px;
366
+ flex: 0 0 18px;
367
  &:hover {
368
  fill: #0085ba;
369
  }
411
  .remove {
412
  color: #a00;
413
  }
 
 
 
 
 
 
414
  }
415
 
416
  &:hover {
428
  }
429
  }
430
  }
 
431
  }
432
 
433
  .new-section-item {
436
  display: flex;
437
  align-items: center;
438
  transition: all 200ms ease-out;
439
+ .drag {
440
+ cursor: default;
441
+ }
442
  .title {
443
  display: inline-block;
444
  margin: 0;
447
 
448
  .types {
449
  display: inline-block;
 
 
450
  &:hover, &:focus {
451
  background-color: #fff;
452
 
486
  content: '\f330';
487
  }
488
  }
489
+ &.empty-item {
490
+ &:before {
491
+ content: "\f463";
492
+ }
493
+ }
494
  }
495
  }
496
  }
528
  position: absolute;
529
  top: 100%;
530
  width: 165px;
 
531
  right: 0;
532
  background: #fdfeff;
533
  margin: 0;
537
  text-align: center;
538
  li {
539
  margin: 0;
 
540
  border-bottom: 1px solid #eee;
541
+ text-align: right;
542
  a {
543
  color: #0073aa;
544
  text-decoration: none;
545
+ padding: 8px;
546
+ display: block;
547
  &.delete-permanently {
548
  color: #d05d5d;
549
  }
584
  }
585
  }
586
 
587
+ &.empty-item {
588
+ color: #a2a2a2;
589
+ position: relative;
590
+ &:after {
591
+ position: absolute;
592
+ top: 0;
593
+ left: 0;
594
+ right: 0;
595
+ bottom: 0;
596
+ background: #FFF;
597
+ content: '';
598
+ opacity: 0.5;
599
+ }
600
+ .item-actions {
601
+ display: none;
602
+ }
603
+ .icon:before {
604
+ content: "\f463";
605
+ color: #a2a2a2;
606
+ @include rotating4();
607
+ }
608
+ }
609
+
610
  .icon {
 
611
  font-size: 20px;
612
  color: #0085ba;
613
  text-align: center;
614
+ flex: 0 0 29px;
615
  &:before {
616
  font-family: Dashicons;
617
  }
654
  }
655
  }
656
  }
657
+ .ui-sortable-placeholder {
658
+ visibility: visible !important;
659
+ background: #bdf4fe !important;
660
+ display: block;
661
+ border-color: #bdf4fe !important;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
662
  }
663
  }
664
  }
665
 
666
+ .section-item-counts {
667
+ position: absolute;
668
+ top: 0;
669
+ right: 41px;
670
+ white-space: nowrap;
671
+ line-height: 44px;
672
+ font-size: 12px;
673
+ span {
674
+ font-weight: bold;
675
+ color: #999;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
676
  }
677
  }
678
 
679
+ @import "quiz-editor";
680
+ @import "question-editor";
681
+
682
  /**
683
  * Modal choose items.
684
  */
769
  border-right: 1px solid #ddd;
770
  position: absolute;
771
  right: 0;
772
+ height: 44px;
773
  top: 50%;
774
+ margin-top: -22px;
775
  }
776
 
777
  &.active {
797
  }
798
 
799
  a {
800
+ padding: 0 20px;
801
  text-decoration: none;
802
  display: inline-block;
803
  font-weight: 600;
804
+ height: 44px;
805
+ line-height: 44px;
806
  &:focus {
807
  box-shadow: none;
808
  }
817
  right: 0;
818
  cursor: pointer;
819
  font-size: 1em;
820
+ padding: 12px;
821
+ z-index: 30;
822
  }
823
  }
824
 
826
  padding: 20px;
827
  position: relative;
828
  overflow: hidden;
829
+ border-bottom: 1px solid #DDD;
830
 
831
  .section-item {
832
  cursor: pointer;
847
  .search {
848
  margin-bottom: 20px;
849
  background: transparent;
850
+ input.modal-search-input {
851
  width: 100%;
852
  font-size: 1.2em;
853
  line-height: 1.5;
854
+ padding: 10px 14px;
855
  }
856
  }
857
 
882
  z-index: 2;
883
  padding: 20px;
884
  transform: translate(100%, 0);
885
+ max-height: 420px;
886
  overflow: auto;
887
 
888
  &.show {
905
  }
906
  }
907
 
908
+ body {
909
+ &.moving {
910
+ cursor: url("../../images/closedhand.cur") 7 5, default !important;
911
+ .section-item {
912
+ .drag {
913
+ cursor: url("../../images/closedhand.cur") 7 5, default !important;
914
+ }
915
+ }
916
+ }
917
+ }
918
+
919
  @media screen and (max-width: 900px) {
920
  #admin-editor-lp_quiz {
921
  .lp-box-data-content {
assets/scss/admin/_order.scss CHANGED
@@ -28,11 +28,11 @@
28
  font-weight: lighter;
29
  }
30
 
31
- .order-data-heading{
32
  margin-top: 40px;
33
  }
34
 
35
- .order-users{
36
  display: inline-block;
37
  }
38
 
@@ -97,16 +97,20 @@
97
  padding-top: 20px;
98
  }
99
  }
100
- .remove-order-item{
101
  text-decoration: none;
102
  outline: none;
103
- color: #FF0000;
104
- display: none;
105
- margin-left: 10px;
 
 
 
 
106
  }
107
 
108
- .order-item-row:hover{
109
- .remove-order-item{
110
  display: inline-block;
111
  }
112
  }
28
  font-weight: lighter;
29
  }
30
 
31
+ .order-data-heading {
32
  margin-top: 40px;
33
  }
34
 
35
+ .order-users {
36
  display: inline-block;
37
  }
38
 
97
  padding-top: 20px;
98
  }
99
  }
100
+ .remove-order-item {
101
  text-decoration: none;
102
  outline: none;
103
+ color: #CCC;
104
+ .dashicons {
105
+ font-size: 18px;
106
+ }
107
+ &:hover {
108
+ color: #FF0000;
109
+ }
110
  }
111
 
112
+ .order-item-row:hover {
113
+ .remove-order-item {
114
  display: inline-block;
115
  }
116
  }
assets/scss/admin/_post-types.scss CHANGED
@@ -111,6 +111,8 @@
111
  }
112
  }
113
 
 
 
114
  #learn-press-box-edit-slug{
115
  background: #FFF;
116
  padding: 10px;
111
  }
112
  }
113
 
114
+
115
+
116
  #learn-press-box-edit-slug{
117
  background: #FFF;
118
  padding: 10px;
assets/scss/admin/_question-editor.scss ADDED
@@ -0,0 +1,242 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Question admin editor.
3
+ */
4
+ #admin-editor-lp_question {
5
+ background: #fff;
6
+ .lp-box-data-head {
7
+ padding: 0 10px;
8
+ .heading {
9
+ float: left;
10
+ padding: 12px 10px;
11
+ .section-item-counts{
12
+ right: 50px;
13
+ span{
14
+ background: #F5F5F5;
15
+ padding: 0 9px;
16
+ color: #00b9ff;
17
+ margin-top: 8px;
18
+ display: inline-block;
19
+ line-height: 30px;
20
+ height: 30px;
21
+ @include border-radius(3px);
22
+ border-top-right-radius: 0;
23
+ border-bottom-right-radius: 0;
24
+ }
25
+ }
26
+ }
27
+ .lp-toolbar-buttons{
28
+ height:46px;
29
+ }
30
+ .question-actions {
31
+ margin-right: 10px;
32
+ height: 30px;
33
+ background: #BBB;
34
+ margin-top: 8px;
35
+ @include border-radius(3px);
36
+ border-top-left-radius: 0;
37
+ border-bottom-left-radius: 0;
38
+ .question-types {
39
+ a{
40
+ color: #FFF;
41
+ }
42
+ ul {
43
+ position: absolute;
44
+ top: 100%;
45
+ right: 0;
46
+ height: auto;
47
+ background: #fdfeff;
48
+ margin: 0;
49
+ border: 1px solid #DDD;
50
+ display: none;
51
+ li {
52
+ margin: 0;
53
+ &:hover, &.active {
54
+ background: #dbf5ff;
55
+ }
56
+ a {
57
+ display: block;
58
+ white-space: nowrap;
59
+ text-decoration: none;
60
+ padding: 5px;
61
+ font-size: 12px;
62
+ text-align: right;
63
+ color: #0073aa;
64
+ min-width: 100px;
65
+ }
66
+ }
67
+ &:hover {
68
+ display: block;
69
+ }
70
+ }
71
+ }
72
+ &:hover {
73
+ .question-types {
74
+ ul {
75
+ display: block;
76
+ }
77
+ }
78
+ }
79
+ }
80
+ }
81
+ .lp-box-data-content {
82
+ padding: 20px;
83
+ table.list-question-answers {
84
+ width: 100%;
85
+ border: 1px solid #ddd;
86
+ tr {
87
+ td {
88
+ padding: 0 15px;
89
+ }
90
+ }
91
+ thead {
92
+ background: #F5F5F5;
93
+ tr {
94
+ th {
95
+ padding: 15px;
96
+ background: #F5F5F5;
97
+ border-bottom: 1px solid #DDD;
98
+
99
+ }
100
+ }
101
+ }
102
+
103
+ .sort, .order, .actions {
104
+ width: 10px;
105
+ }
106
+ .sort {
107
+ padding: 0 10px;
108
+ }
109
+ .order {
110
+ text-align: right;
111
+ padding: 0;
112
+ width: 30px;
113
+ font-weight: bold;
114
+ }
115
+ .answer-correct {
116
+ width: 65px;
117
+ text-align: center;
118
+ }
119
+ .answer-text {
120
+ padding-left: 5px;
121
+ }
122
+ .actions {
123
+ padding-right: 0;
124
+ text-align: right;
125
+ }
126
+ tbody {
127
+ tr {
128
+ background: #f4fcff;
129
+ color: #777;
130
+ &:nth-child(2n) {
131
+ background: #fff;
132
+ }
133
+
134
+ td {
135
+ &.sort {
136
+ width: 15px;
137
+ text-align: center;
138
+ font-size: 18px;
139
+ cursor: url("../../images/openhand.cur") 7 5, default;
140
+ padding: 0;
141
+ .svg-icon {
142
+ visibility: hidden;
143
+ fill: #d5dce0;
144
+ height: 18px;
145
+ vertical-align: middle;
146
+ }
147
+ &:hover {
148
+ .svg-icon {
149
+ fill: #0085ba;
150
+ }
151
+ }
152
+ }
153
+ &.order {
154
+ font-size: 14px;
155
+ }
156
+ &.answer-text {
157
+ input {
158
+ width: 100%;
159
+ font-size: 14px;
160
+ border: none;
161
+ background: transparent;
162
+ box-shadow: none;
163
+ font-weight: normal;
164
+ color: #777;
165
+ padding: 0;
166
+ }
167
+ }
168
+ &.lp-toolbar-buttons {
169
+ z-index: auto;
170
+ }
171
+ }
172
+
173
+ &:hover {
174
+ td {
175
+ &.actions {
176
+ .remove-answer {
177
+ visibility: visible;
178
+ height: 42px;
179
+ }
180
+ }
181
+ &.sort {
182
+ .svg-icon {
183
+ visibility: visible;
184
+ }
185
+ }
186
+ }
187
+ }
188
+
189
+ &.ui-sortable-placeholder {
190
+ visibility: visible !important;
191
+ td {
192
+ background: #bdf4fe !important;
193
+ height: 43px;
194
+ }
195
+ }
196
+ &.ui-sortable-helper {
197
+ td {
198
+ border-bottom: 1px solid #DDD;
199
+ &.sort {
200
+ border-left: 0;
201
+ }
202
+ }
203
+ }
204
+ &.new-option{
205
+ .svg-icon{
206
+ display: none;
207
+ }
208
+ td{
209
+ position: relative;
210
+ }
211
+ .sort {
212
+ &:before {
213
+ content: "\f463";
214
+ font-family: Dashicons;
215
+ position: absolute;
216
+ left: 10px;
217
+ top: 12px;
218
+ display: inline-block;
219
+ @include rotating4();
220
+ }
221
+ }
222
+ td{
223
+ &:after{
224
+ position: absolute;
225
+ content: '';
226
+ background: #FFF;
227
+ top: 0;
228
+ left: 0;
229
+ right: 0;
230
+ bottom: 0;
231
+ opacity: 0.5;
232
+ }
233
+ }
234
+ }
235
+ }
236
+ }
237
+ }
238
+ .add-answer {
239
+ margin: 15px 0 0 0;
240
+ }
241
+ }
242
+ }
assets/scss/admin/_quiz-editor.scss ADDED
@@ -0,0 +1,587 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Quiz admin editor.
3
+ */
4
+ #admin-editor-lp_quiz {
5
+ .lp-box-data-head {
6
+ padding: 12px 10px;
7
+ h3 {
8
+ padding: 0;
9
+ }
10
+ .status {
11
+ font-family: Dashicons;
12
+ font-size: 20px;
13
+ position: relative;
14
+ top: 5px;
15
+ margin-left: 10px;
16
+ visibility: hidden;
17
+
18
+ &:before {
19
+ content: "\f463";
20
+ }
21
+
22
+ &.loading {
23
+ visibility: visible;
24
+ animation: rotation 2s infinite linear;
25
+ display: inline-block;
26
+ }
27
+ }
28
+ .collapse-list-questions {
29
+ font-family: Dashicons;
30
+ position: absolute;
31
+ top: 0;
32
+ right: 0;
33
+ bottom: 0;
34
+ font-size: 30px;
35
+ display: flex;
36
+ justify-content: center;
37
+ align-items: center;
38
+ cursor: pointer;
39
+ width: 40px;
40
+ height: 46px;
41
+ color: #999;
42
+ }
43
+ }
44
+
45
+ .lp-box-data-content {
46
+ .lp-list-questions {
47
+ color: #777;
48
+ border-collapse: collapse;
49
+
50
+ .table-row {
51
+ display: flex;
52
+ flex-direction: row;
53
+ text-align: center;
54
+
55
+ & > * {
56
+ width: 100%;
57
+ padding: 12px 10px
58
+ }
59
+
60
+ & > .sort {
61
+ flex: 0 0 15px;
62
+ cursor: url("../../images/openhand.cur") 7 5, default;
63
+ visibility: hidden;
64
+ position: relative;
65
+ font-size: 18px;
66
+ color: #d5dce0;
67
+ &:hover {
68
+ color: #0085ba;
69
+ }
70
+ }
71
+
72
+ & > .order {
73
+ flex: 0 0 30px;
74
+ text-align: right;
75
+ font-weight: bold;
76
+ font-size: 15px;
77
+ padding: 12px 0;
78
+ &:after {
79
+ content: '.';
80
+ }
81
+ }
82
+
83
+ & > .type {
84
+ width: 150px;
85
+ }
86
+
87
+ & > .actions {
88
+ width: 300px;
89
+ }
90
+
91
+ & > .name {
92
+ padding-left: 5px;
93
+ }
94
+ &:hover {
95
+ & > .sort {
96
+ visibility: visible;
97
+ }
98
+ }
99
+ .actions {
100
+ .lp-box-data-actions {
101
+ text-align: right !important;
102
+ }
103
+ }
104
+ }
105
+
106
+ .header {
107
+ border-bottom: 1px solid #ddd;
108
+ display: none;
109
+ .table-row {
110
+ & > * {
111
+ font-weight: bold;
112
+ }
113
+
114
+ & > .order {
115
+ &:after {
116
+ content: '';
117
+ }
118
+ }
119
+
120
+ & > .actions {
121
+ padding: 12px 0;
122
+ }
123
+ }
124
+ }
125
+
126
+ .main {
127
+ .question-actions {
128
+ .name {
129
+ input {
130
+ width: 100%;
131
+ font-size: 14px;
132
+ border: none;
133
+ background: transparent;
134
+ box-shadow: none;
135
+ font-weight: normal;
136
+ color: #777;
137
+ padding: 0;
138
+ }
139
+ }
140
+ }
141
+ .question-settings {
142
+ border: 1px solid #ddd;
143
+ border-left: none;
144
+ border-right: none;
145
+ & > * {
146
+ padding: 20px;
147
+ }
148
+ .quiz-question-data {
149
+ table.lp-list-options {
150
+ border: 1px solid #ddd;
151
+ .sort {
152
+ width: 12px;
153
+ padding: 8px 5px;
154
+ }
155
+ .answer-text {
156
+ padding-left: 5px;
157
+ width: calc(100% - 100px);
158
+ }
159
+ .order {
160
+ width: 30px;
161
+ text-align: right;
162
+ padding: 0;
163
+ }
164
+ .answer-correct {
165
+ width: 65px;
166
+ text-align: center;
167
+ }
168
+ .actions {
169
+ padding: 0;
170
+ text-align: right;
171
+ .lp-toolbar-btn {
172
+ height: 42px;
173
+ }
174
+ }
175
+ tbody {
176
+ tr {
177
+ background: #fff;
178
+ border: 1px solid #DDD;
179
+ position: relative;
180
+ &:nth-child(2n) {
181
+ background: #f4fcff;
182
+ }
183
+ td {
184
+ padding: 0 10px;
185
+ background: inherit;
186
+ position: static;
187
+ border: none;
188
+ &.sort {
189
+ cursor: url("../../images/openhand.cur") 7 5, default;
190
+ width: 12px;
191
+ position: relative;
192
+
193
+ }
194
+ &.order {
195
+ font-weight: bold;
196
+ &:after {
197
+ //content: '.';
198
+ }
199
+ }
200
+ &.answer-text {
201
+ padding-left: 5px;
202
+ }
203
+ &.answer-correct {
204
+ text-align: center;
205
+ }
206
+ }
207
+ .svg-icon {
208
+ height: 18px;
209
+ vertical-align: middle;
210
+ visibility: hidden;
211
+ fill: #d5dce0;
212
+ }
213
+ &:hover {
214
+ .svg-icon {
215
+ visibility: visible;
216
+ }
217
+ .sort {
218
+ &:hover {
219
+ .svg-icon {
220
+ fill: #0085ba;
221
+ }
222
+ }
223
+ }
224
+ }
225
+ &.ui-sortable-placeholder {
226
+ visibility: visible !important;
227
+ td {
228
+ height: 43px;
229
+ background: #bdf4fe !important;
230
+ }
231
+ }
232
+ &.ui-sortable-helper {
233
+ border-left: none;
234
+ border-right: none;
235
+ td {
236
+ border-bottom: 1px solid #DDD;
237
+ &.sort {
238
+ border-left: 0;
239
+ }
240
+ }
241
+ }
242
+ &.empty-option {
243
+ .sort {
244
+ i {
245
+ display: none;
246
+ }
247
+ &:before {
248
+ font-family: Dashicons;
249
+ content: "\f463";
250
+ display: inline-block;
251
+ font-size: 18px;
252
+ position: absolute;
253
+ left: 4px;
254
+ top: 12px;
255
+ @include rotating4();
256
+ }
257
+ }
258
+ td {
259
+ position: relative;
260
+ &:after {
261
+ content: '';
262
+ top: 0;
263
+ left: 0;
264
+ right: 1px;
265
+ bottom: 0;
266
+ background: #FFF;
267
+ position: absolute;
268
+ opacity: 0.5;
269
+ }
270
+ }
271
+ }
272
+ }
273
+
274
+ .answer-text {
275
+ input {
276
+ width: 100%;
277
+ font-size: 14px;
278
+ border: none;
279
+ background: transparent;
280
+ box-shadow: none;
281
+ font-weight: normal;
282
+ color: #777;
283
+ padding: 0;
284
+ }
285
+ }
286
+ }
287
+ }
288
+ }
289
+ }
290
+ }
291
+
292
+ .main {
293
+ .question-item {
294
+ background: #fff;
295
+ border-bottom: 1px solid #f1f1f1;
296
+ &:nth-child(2n+1) {
297
+ background: #f4fcff;
298
+ }
299
+ &.ui-sortable-helper {
300
+ border-top: 1px solid #f1f1f1;
301
+ }
302
+ &.ui-sortable-placeholder {
303
+ visibility: visible !important;
304
+ background: #bdf4fe !important;
305
+ display: block;
306
+ border-color: #bdf4fe !important;
307
+ }
308
+ &.empty-question, &.updating {
309
+ position: relative;
310
+ .question-actions {
311
+ .sort {
312
+ visibility: visible;
313
+ .fa {
314
+ display: none;
315
+ }
316
+ &:after {
317
+ font-family: Dashicons;
318
+ content: "\f463";
319
+ font-size: 20px;
320
+ display: inline-block;
321
+ position: absolute;
322
+ left: 5px;
323
+ @include rotating4();
324
+ }
325
+ }
326
+ }
327
+ &:after {
328
+ content: '';
329
+ position: absolute;
330
+ top: 0;
331
+ left: 0;
332
+ right: 0;
333
+ bottom: 0;
334
+ background: #FFF;
335
+ opacity: 0.5;
336
+ }
337
+ }
338
+ &.empty-question {
339
+ .question-settings {
340
+ display: none;
341
+ }
342
+ }
343
+ .cell {
344
+ padding: 10px;
345
+ }
346
+ .question-actions {
347
+ .name {
348
+ input {
349
+ width: 100%;
350
+ font-size: 14px;
351
+ border: none;
352
+ background: transparent;
353
+ box-shadow: none;
354
+ font-weight: normal;
355
+ color: #777;
356
+ padding: 0;
357
+ }
358
+ }
359
+ .actions {
360
+ padding: 0;
361
+ margin: 0;
362
+ .lp-toolbar-buttons {
363
+ position: static;
364
+ z-index: 10;
365
+ height: 100%;
366
+ text-align: left;
367
+ > div {
368
+ a {
369
+ visibility: hidden;
370
+ }
371
+ }
372
+ .lp-toolbar-btn {
373
+ height: 100%;
374
+ .lp-btn-icon {
375
+ width: 28px;
376
+ height: 30px;
377
+ text-align: center;
378
+ position: absolute;
379
+ top: 50%;
380
+ margin-top: -15px;
381
+ left: 50%;
382
+ margin-left: -15px;
383
+ line-height: 30px;
384
+ }
385
+ ul {
386
+ z-index: 9;
387
+ }
388
+ }
389
+ .lp-btn-toggle {
390
+ font-family: Dashicons;
391
+ line-height: 42px;
392
+ font-size: 16px;
393
+ &.open {
394
+ &::after {
395
+ content: '\f343';
396
+ }
397
+ }
398
+ &.close {
399
+ &::after {
400
+ content: '\f347';
401
+ }
402
+ }
403
+ }
404
+ .lp-toolbar-btn-dropdown {
405
+ ul {
406
+ li {
407
+ border-bottom: 1px solid #eee;
408
+ a {
409
+ padding: 10px 25px;
410
+ &.remove {
411
+ color: #0073aa;
412
+ }
413
+ }
414
+ }
415
+ }
416
+ }
417
+ }
418
+ }
419
+ &:hover {
420
+ .lp-toolbar-buttons {
421
+ > div {
422
+ a {
423
+ visibility: visible;
424
+ }
425
+ }
426
+ }
427
+ }
428
+ }
429
+
430
+ .question-settings {
431
+ background: #fff;
432
+
433
+ .quiz-question-options {
434
+ text-align: left;
435
+ padding-left: 0;
436
+ .inside {
437
+ margin: 0;
438
+ padding: 0;
439
+ .rwmb-meta-box {
440
+ .rwmb-field {
441
+ padding: 20px;
442
+ margin: 0;
443
+ &:nth-child(2n+1) {
444
+ background: #f4fcff;
445
+ }
446
+ }
447
+ }
448
+ }
449
+ .postbox {
450
+ .hndle {
451
+ cursor: default;
452
+ }
453
+ .toggle {
454
+ float: right;
455
+ width: 36px;
456
+ height: 36px;
457
+ position: absolute;
458
+ top: 0;
459
+ right: 0;
460
+ line-height: 36px;
461
+ text-align: center;
462
+ &:after {
463
+ font-family: Dashicons;
464
+ content: "\f460";
465
+ font-size: 18px;
466
+ }
467
+ }
468
+ }
469
+ }
470
+ &.closed {
471
+ .quiz-question-options {
472
+ width: 38px;
473
+ }
474
+ .postbox {
475
+ min-width: 34px;
476
+ height: 34px;
477
+ line-height: 42px;
478
+ text-align: center;
479
+ .hndle {
480
+ display: none;
481
+ }
482
+ .toggle {
483
+ &:after {
484
+ content: "\f132";
485
+ }
486
+ }
487
+ }
488
+ }
489
+ }
490
+ }
491
+ }
492
+
493
+ .footer {
494
+ border-top: 1px solid #DDD;
495
+ margin-top: -1px;
496
+ .order {
497
+ line-height: 28px;
498
+ }
499
+ .table-row {
500
+ text-align: left;
501
+ .add-new-question {
502
+ .title {
503
+ position: relative;
504
+ display: inline-block;
505
+ min-width: 500px;
506
+ input {
507
+ border: 0;
508
+ width: 100%;
509
+ margin: 0;
510
+ padding: 6px 0px;
511
+ @include box-shadow(none);
512
+ @include border-radius(3px);
513
+ &:focus {
514
+ border-color: #DDD;
515
+ }
516
+ &::placeholder {
517
+ color: #999;
518
+ font-style: italic;
519
+ border-bottom: 1px solid #DDD;
520
+ display: inline-block;
521
+ }
522
+ }
523
+ }
524
+ .add-new {
525
+ display: inline;
526
+ position: relative;
527
+ ul.question-types {
528
+ position: absolute;
529
+ margin: 6px;
530
+ background-color: #FFF;
531
+ top: 100%;
532
+ border: 1px solid #DDD;
533
+ right: -2px;
534
+ width: 200px;
535
+ z-index: 9999999;
536
+ display: none;
537
+ li {
538
+ margin: 0;
539
+ a {
540
+ display: block;
541
+ padding: 10px;
542
+ line-height: 1;
543
+ text-decoration: none;
544
+ outline: none;
545
+ box-shadow: none;
546
+ }
547
+ }
548
+ }
549
+
550
+ button {
551
+ &:hover {
552
+ & + .question-types {
553
+ display: block;
554
+ }
555
+ }
556
+
557
+ & + .question-types {
558
+ &:hover {
559
+ display: block;
560
+ }
561
+ }
562
+
563
+ &[disabled="disabled"] {
564
+ &:hover {
565
+ & + .question-types {
566
+ display: none;
567
+ }
568
+ }
569
+ }
570
+ }
571
+ }
572
+ .select-item {
573
+ display: inline;
574
+ }
575
+ button {
576
+ height: 30px;
577
+ box-shadow: 0 1px 0 #ccc !important;
578
+ }
579
+ }
580
+ }
581
+ }
582
+ }
583
+ .question-button-actions {
584
+ text-align: left;
585
+ }
586
+ }
587
+ }
assets/scss/admin/_settings.scss CHANGED
@@ -2,6 +2,18 @@
2
  .color-schemas {
3
  margin: 0 20px 20px 0;
4
  float: left;
 
 
 
 
 
 
 
 
 
 
 
 
5
  table {
6
  border-collapse: collapse;
7
  position: relative;
@@ -45,10 +57,10 @@
45
  margin: 0;
46
  }
47
  .color-selector input {
48
- width: 0 !important;
49
- opacity: 0;
50
  }
51
- .clone-schema{
52
  display: none;
53
  }
54
  &:first-child {
@@ -77,7 +89,7 @@
77
  display: none;
78
  }
79
  }
80
- .clone-schema{
81
  display: inline-block;
82
  }
83
  }
2
  .color-schemas {
3
  margin: 0 20px 20px 0;
4
  float: left;
5
+ .wp-color-picker {
6
+ width: 80px;
7
+ height: 24px;
8
+ vertical-align: top;
9
+ margin: 0;
10
+ }
11
+ .wp-picker-holder{
12
+ position: absolute;
13
+ }
14
+ .buttons{
15
+ display: none;
16
+ }
17
  table {
18
  border-collapse: collapse;
19
  position: relative;
57
  margin: 0;
58
  }
59
  .color-selector input {
60
+ //width: 0 !important;
61
+ //opacity: 0;
62
  }
63
+ .clone-schema {
64
  display: none;
65
  }
66
  &:first-child {
89
  display: none;
90
  }
91
  }
92
+ .clone-schema {
93
  display: inline-block;
94
  }
95
  }
assets/scss/admin/admin.scss CHANGED
@@ -60,6 +60,19 @@
60
  }
61
  }
62
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  .learnpress {
64
  .actions {
65
  margin: 0;
60
  }
61
  }
62
 
63
+ .search-box {
64
+ input[name="post-search-author"],
65
+ .select2-container {
66
+ margin: 0;
67
+ min-width: 200px;
68
+ vertical-align: top;
69
+ }
70
+ }
71
+
72
+ .learn-press-notice-assigned-item{
73
+ color: #FF0000;
74
+ }
75
+
76
  .learnpress {
77
  .actions {
78
  margin: 0;
inc/abstract-settings.php CHANGED
@@ -105,22 +105,7 @@ abstract class LP_Abstract_Settings {
105
  }
106
  $field['std'] = apply_filters( 'learn-press/settings/default-field-value', $std, $field );
107
  $field['learn-press-settings'] = 'yes';
108
-
109
- // Re-format conditional logic fields
110
- if ( ! empty( $field['visibility'] ) ) {
111
- $conditional = $field['visibility'];
112
-
113
- if ( ! array_key_exists( 0, $conditional['conditional'] ) ) {
114
- $conditional['conditional'] = array(
115
- $conditional['conditional']
116
- );
117
- }
118
- foreach ( $conditional['conditional'] as $kk => $conditional_field ) {
119
- $conditional['conditional'][ $kk ]['field'] = $this->get_admin_field_name( $conditional_field['field'] );
120
- }
121
-
122
- $field['visibility'] = $conditional;
123
- }
124
  $settings[ $k ] = $field;
125
  }
126
 
@@ -130,6 +115,26 @@ abstract class LP_Abstract_Settings {
130
  return $settings;
131
  }
132
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
133
  /**
134
  * @param $option_name
135
  * @param null $default
105
  }
106
  $field['std'] = apply_filters( 'learn-press/settings/default-field-value', $std, $field );
107
  $field['learn-press-settings'] = 'yes';
108
+ $this->parse_conditional( $field );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
109
  $settings[ $k ] = $field;
110
  }
111
 
115
  return $settings;
116
  }
117
 
118
+ public function parse_conditional( &$field ) {
119
+ // Re-format conditional logic fields
120
+ if ( ! empty( $field['visibility'] ) ) {
121
+ $conditional = $field['visibility'];
122
+
123
+ if ( ! array_key_exists( 0, $conditional['conditional'] ) ) {
124
+ $conditional['conditional'] = array(
125
+ $conditional['conditional']
126
+ );
127
+ }
128
+ foreach ( $conditional['conditional'] as $kk => $conditional_field ) {
129
+ $conditional['conditional'][ $kk ]['field'] = $this->get_admin_field_name( $conditional_field['field'] );
130
+ }
131
+
132
+ $field['visibility'] = $conditional;
133
+ }
134
+
135
+ return $field;
136
+ }
137
+
138
  /**
139
  * @param $option_name
140
  * @param null $default
inc/admin/class-lp-admin-ajax.php CHANGED
@@ -86,6 +86,7 @@ if ( ! class_exists( 'LP_Admin_Ajax' ) ) {
86
  'remove_items_from_order',
87
  'update_email_status',
88
  'create-pages',
 
89
  'skip-notice-install'
90
  );
91
  foreach ( $ajax_events as $action => $callback ) {
@@ -106,6 +107,31 @@ if ( ! class_exists( 'LP_Admin_Ajax' ) ) {
106
  }
107
  }
108
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
109
  /**
110
  * Hide notice install
111
  */
@@ -464,8 +490,7 @@ if ( ! class_exists( 'LP_Admin_Ajax' ) ) {
464
  if ( false === $data ) {
465
  try {
466
  $data = json_decode( file_get_contents( 'php://input' ), true );
467
- }
468
- catch ( Exception $exception ) {
469
  }
470
  }
471
  if ( $data && func_num_args() > 0 ) {
86
  'remove_items_from_order',
87
  'update_email_status',
88
  'create-pages',
89
+ 'search-authors',
90
  'skip-notice-install'
91
  );
92
  foreach ( $ajax_events as $action => $callback ) {
107
  }
108
  }
109
 
110
+ public static function search_authors() {
111
+ $args = array(
112
+ 'orderby' => 'name',
113
+ 'order' => 'ASC',
114
+ 'search' => sprintf( '*%s*', esc_attr( LP_Request::get_string( 'term' ) ) ),
115
+ 'search_columns' => array( 'user_login', 'user_email' )
116
+ );
117
+ $q = new WP_User_Query( $args );
118
+ $users = array();
119
+
120
+ if ( $results = $q->get_results() ) {
121
+ foreach ( $results as $result ) {
122
+ $users[] = array( 'id' => $result->ID,
123
+ 'text' => learn_press_get_profile_display_name( $result->ID )
124
+ );
125
+ }
126
+ }
127
+ echo json_encode(
128
+ array(
129
+ 'results' => $users
130
+ )
131
+ );
132
+ die();
133
+ }
134
+
135
  /**
136
  * Hide notice install
137
  */
490
  if ( false === $data ) {
491
  try {
492
  $data = json_decode( file_get_contents( 'php://input' ), true );
493
+ } catch ( Exception $exception ) {
 
494
  }
495
  }
496
  if ( $data && func_num_args() > 0 ) {
inc/admin/class-lp-admin-dashboard.php CHANGED
@@ -100,7 +100,7 @@ if ( ! class_exists( 'LP_Admin_Dashboard' ) ) {
100
  if ( $orders ) {
101
  foreach ( $orders as $order ) {
102
  $order = learn_press_get_order( $order->ID );
103
- $total = $total + $order->order_total;
104
  }
105
  }
106
 
100
  if ( $orders ) {
101
  foreach ( $orders as $order ) {
102
  $order = learn_press_get_order( $order->ID );
103
+ $total = $total + floatval($order->order_total);
104
  }
105
  }
106
 
inc/admin/editor/class-lp-admin-editor-course.php CHANGED
@@ -162,6 +162,7 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
162
  */
163
  public function new_section( $args = array() ) {
164
  $section_name = ! empty( $args['section_name'] ) ? $args['section_name'] : false;
 
165
 
166
  $args = array(
167
  'section_course_id' => $this->course->get_id(),
@@ -170,10 +171,12 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
170
  'items' => array(),
171
  );
172
 
 
173
  // create section
174
  $section = $this->section_curd->create( $args );
175
 
176
  $this->result = array(
 
177
  'id' => $section['section_id'],
178
  'items' => $section['items'],
179
  'title' => $section['section_name'],
@@ -237,7 +240,7 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
237
  return false;
238
  }
239
 
240
- $this->result = wp_delete_post( $item_id );
241
 
242
  return true;
243
  }
@@ -259,6 +262,8 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
259
  // create new lesson, quiz and add to course
260
  $this->result = $this->section_curd->new_item( $section_id, $item );
261
 
 
 
262
  return true;
263
  }
264
 
162
  */
163
  public function new_section( $args = array() ) {
164
  $section_name = ! empty( $args['section_name'] ) ? $args['section_name'] : false;
165
+ $temp_id = isset( $args['temp_id'] ) ? $args['temp_id'] : 0;
166
 
167
  $args = array(
168
  'section_course_id' => $this->course->get_id(),
171
  'items' => array(),
172
  );
173
 
174
+
175
  // create section
176
  $section = $this->section_curd->create( $args );
177
 
178
  $this->result = array(
179
+ 'temp_id' => $temp_id,
180
  'id' => $section['section_id'],
181
  'items' => $section['items'],
182
  'title' => $section['section_name'],
240
  return false;
241
  }
242
 
243
+ $this->result = wp_trash_post( $item_id );
244
 
245
  return true;
246
  }
262
  // create new lesson, quiz and add to course
263
  $this->result = $this->section_curd->new_item( $section_id, $item );
264
 
265
+ $this->section_curd->update_final_item();
266
+
267
  return true;
268
  }
269
 
inc/admin/editor/class-lp-admin-editor-question.php CHANGED
@@ -211,7 +211,7 @@ class LP_Admin_Editor_Question extends LP_Admin_Editor {
211
  // update correct answer
212
  $this->question = $this->question_curd->change_correct_answer( $this->question, $correct );
213
 
214
- $this->result = $this->question->get_data( 'answer_options' );
215
 
216
  return true;
217
  }
@@ -232,11 +232,17 @@ class LP_Admin_Editor_Question extends LP_Admin_Editor {
232
  // delete answer
233
  $this->question_curd->delete_answer( $this->question->get_id(), $answer_id );
234
 
235
- $this->result = $this->question->get_data( 'answer_options' );
236
 
237
  return true;
238
  }
239
 
 
 
 
 
 
 
240
  /**
241
  * @param array $args
242
  *
@@ -248,7 +254,7 @@ class LP_Admin_Editor_Question extends LP_Admin_Editor {
248
  // add new
249
  $this->question_curd->new_answer( $this->question->get_id(), $answer );
250
 
251
- $this->result = $this->question->get_data( 'answer_options' );
252
 
253
  return true;
254
  }
211
  // update correct answer
212
  $this->question = $this->question_curd->change_correct_answer( $this->question, $correct );
213
 
214
+ $this->result = $this->_get_answers();
215
 
216
  return true;
217
  }
232
  // delete answer
233
  $this->question_curd->delete_answer( $this->question->get_id(), $answer_id );
234
 
235
+ $this->result = $this->_get_answers();
236
 
237
  return true;
238
  }
239
 
240
+ public function _get_answers() {
241
+ $answers = $this->question->get_data( 'answer_options' );
242
+
243
+ return $answers ? array_values( $answers ) : array();
244
+ }
245
+
246
  /**
247
  * @param array $args
248
  *
254
  // add new
255
  $this->question_curd->new_answer( $this->question->get_id(), $answer );
256
 
257
+ $this->result = $this->_get_answers();
258
 
259
  return true;
260
  }
inc/admin/editor/class-lp-admin-editor-quiz.php CHANGED
@@ -176,6 +176,10 @@ class LP_Admin_Editor_Quiz extends LP_Admin_Editor {
176
  // get new question data
177
  $this->result = $this->get_question_data_to_quiz_editor( $new_question, true, array( 'open' => true ) );
178
 
 
 
 
 
179
  return true;
180
  }
181
 
@@ -309,7 +313,7 @@ class LP_Admin_Editor_Quiz extends LP_Admin_Editor {
309
  return false;
310
  }
311
 
312
- $this->result = wp_delete_post( $question_id );
313
 
314
  return true;
315
  }
@@ -423,6 +427,7 @@ class LP_Admin_Editor_Quiz extends LP_Admin_Editor {
423
 
424
  if ( $new_answer_id ) {
425
  $this->result = array_merge( $answer, array(
 
426
  'question_answer_id' => $new_answer_id,
427
  'question_id' => $question_id,
428
  'answer_order' => count( $question->get_data( 'answer_options' ) )
@@ -434,6 +439,19 @@ class LP_Admin_Editor_Quiz extends LP_Admin_Editor {
434
  return false;
435
  }
436
 
 
 
 
 
 
 
 
 
 
 
 
 
 
437
  /**
438
  * @param array $args
439
  *
176
  // get new question data
177
  $this->result = $this->get_question_data_to_quiz_editor( $new_question, true, array( 'open' => true ) );
178
 
179
+ if ( isset( $question['id'] ) ) {
180
+ $this->result['temp_id'] = $question['id'];
181
+ }
182
+
183
  return true;
184
  }
185
 
313
  return false;
314
  }
315
 
316
+ $this->result = wp_trash_post( $question_id );
317
 
318
  return true;
319
  }
427
 
428
  if ( $new_answer_id ) {
429
  $this->result = array_merge( $answer, array(
430
+ 'temp_id' => isset( $args['question_answer_id'] ) ? $args['question_answer_id'] : 0,
431
  'question_answer_id' => $new_answer_id,
432
  'question_id' => $question_id,
433
  'answer_order' => count( $question->get_data( 'answer_options' ) )
439
  return false;
440
  }
441
 
442
+ public function update_quiz_questions_hidden( $args = array() ) {
443
+ $id = $args['id'];
444
+ $questions = $args['hidden'];
445
+
446
+ if ( $questions ) {
447
+ update_post_meta( $id, '_hidden_questions_settings', $questions );
448
+ } else {
449
+ delete_post_meta( $id, '_hidden_questions_settings' );
450
+ }
451
+
452
+ return true;
453
+ }
454
+
455
  /**
456
  * @param array $args
457
  *
inc/admin/lp-admin-actions.php CHANGED
@@ -18,7 +18,12 @@ function _learn_press_set_user_items( $query ) {
18
  if ( current_user_can( 'manage_options' ) || ! current_user_can( LP_TEACHER_ROLE ) || ! is_admin() || ( $pagenow != 'edit.php' ) ) {
19
  return $query;
20
  }
21
- if ( ! in_array( $post_type, array( 'lp_course', LP_LESSON_CPT, LP_QUIZ_CPT, LP_QUESTION_CPT ) ) ) {
 
 
 
 
 
22
  return;
23
  }
24
  $items = $wpdb->get_col(
18
  if ( current_user_can( 'manage_options' ) || ! current_user_can( LP_TEACHER_ROLE ) || ! is_admin() || ( $pagenow != 'edit.php' ) ) {
19
  return $query;
20
  }
21
+ if ( ! in_array( $post_type, apply_filters( 'lear-press/filter-user-access-types', array(
22
+ LP_COURSE_CPT,
23
+ LP_LESSON_CPT,
24
+ LP_QUIZ_CPT,
25
+ LP_QUESTION_CPT
26
+ ) ) ) ) {
27
  return;
28
  }
29
  $items = $wpdb->get_col(
inc/admin/meta-box/class-lp-meta-box-helper.php CHANGED
@@ -146,6 +146,9 @@ if ( ! class_exists( 'LP_Meta_Box_Helper' ) ) {
146
  * @return bool
147
  */
148
  public static function include_field( $field ) {
 
 
 
149
  if ( is_array( $field ) && ! empty( $field['type'] ) ) {
150
  $type = $field['type'];
151
  } else {
146
  * @return bool
147
  */
148
  public static function include_field( $field ) {
149
+
150
+ $field = RWMB_Field::map_types( $field );
151
+
152
  if ( is_array( $field ) && ! empty( $field['type'] ) ) {
153
  $type = $field['type'];
154
  } else {
inc/admin/meta-box/fields/color-schema.php CHANGED
@@ -94,7 +94,7 @@ class RWMB_Color_Schema_Field extends RWMB_Field {
94
  <?php } ?>
95
  </tbody>
96
  </table>
97
- <p>
98
  <button class="button clone-schema"
99
  type="button"><?php _e( 'Save as new', 'learnpress' ); ?></button>
100
  <a class="button reset-schema"
94
  <?php } ?>
95
  </tbody>
96
  </table>
97
+ <p class="buttons">
98
  <button class="button clone-schema"
99
  type="button"><?php _e( 'Save as new', 'learnpress' ); ?></button>
100
  <a class="button reset-schema"
inc/admin/settings/class-lp-settings-courses.php CHANGED
@@ -107,7 +107,7 @@ class LP_Settings_Courses extends LP_Abstract_Settings_Page {
107
  'type' => 'pages-dropdown'
108
  ),
109
  array(
110
- 'title' => __( 'Courses limit', 'learnpress' ),
111
  'desc' => __( 'Number of courses displayed per page.', 'learnpress' ),
112
  'id' => 'archive_course_limit',
113
  'default' => '10',
@@ -176,28 +176,28 @@ class LP_Settings_Courses extends LP_Abstract_Settings_Page {
176
  'type' => 'heading',
177
  'desc' => __( 'Thumbnail generation for archive/single course.', 'learnpress' )
178
  ),
179
- array(
180
- 'title' => __( 'Single course', 'learnpress' ),
181
- 'id' => 'generate_course_thumbnail',
182
- 'default' => 'yes',
183
- 'type' => 'yes-no',
184
- 'desc' => __( 'Turn on/off courses extra thumbnail.', 'learnpress' ),
185
- ),
186
- array(
187
- 'title' => __( 'Thumbnail dimensions', 'learnpress' ),
188
- 'id' => 'single_course_image_size',
189
- 'default' => array( 800, 450, 'yes' ),
190
- 'type' => 'image-dimensions',
191
- 'visibility' => array(
192
- 'state' => 'show',
193
-
194
- 'conditional' => array(
195
- 'field' => 'generate_course_thumbnail',
196
- 'compare' => '=',
197
- 'value' => 'yes'
198
- )
199
- )
200
- ),
201
  array(
202
  'title' => __( 'Archive course', 'learnpress' ),
203
  'id' => 'archive_course_thumbnail',
107
  'type' => 'pages-dropdown'
108
  ),
109
  array(
110
+ 'title' => __( 'Courses per page', 'learnpress' ),
111
  'desc' => __( 'Number of courses displayed per page.', 'learnpress' ),
112
  'id' => 'archive_course_limit',
113
  'default' => '10',
176
  'type' => 'heading',
177
  'desc' => __( 'Thumbnail generation for archive/single course.', 'learnpress' )
178
  ),
179
+ // array(
180
+ // 'title' => __( 'Single course', 'learnpress' ),
181
+ // 'id' => 'generate_course_thumbnail',
182
+ // 'default' => 'yes',
183
+ // 'type' => 'yes-no',
184
+ // 'desc' => __( 'Turn on/off courses extra thumbnail.', 'learnpress' ),
185
+ // ),
186
+ // array(
187
+ // 'title' => __( 'Thumbnail dimensions', 'learnpress' ),
188
+ // 'id' => 'single_course_image_size',
189
+ // 'default' => array( 800, 450, 'yes' ),
190
+ // 'type' => 'image-dimensions',
191
+ // 'visibility' => array(
192
+ // 'state' => 'show',
193
+ //
194
+ // 'conditional' => array(
195
+ // 'field' => 'generate_course_thumbnail',
196
+ // 'compare' => '=',
197
+ // 'value' => 'yes'
198
+ // )
199
+ // )
200
+ // ),
201
  array(
202
  'title' => __( 'Archive course', 'learnpress' ),
203
  'id' => 'archive_course_thumbnail',
inc/admin/settings/class-lp-settings-profile.php CHANGED
@@ -38,8 +38,9 @@ class LP_Settings_Profile extends LP_Abstract_Settings_Page {
38
  $profile_slug = 'profile';
39
 
40
  if ( $profile_id = learn_press_get_page_id( 'profile' ) ) {
41
- $profile_post = get_post( learn_press_get_page_id( 'profile' ) );
42
- $profile_slug = $profile_post->post_name;
 
43
  }
44
  $profile_url = site_url() . '/' . $profile_slug . '/' . $username;
45
 
@@ -105,7 +106,7 @@ class LP_Settings_Profile extends LP_Abstract_Settings_Page {
105
  )
106
  ),
107
  array(
108
- 'title' => __( 'Courses limit', 'learnpress' ),
109
  'id' => 'profile_courses_limit',
110
  'default' => '10',
111
  'type' => 'number',
@@ -132,7 +133,7 @@ class LP_Settings_Profile extends LP_Abstract_Settings_Page {
132
  'learn-press/profile-settings-fields/sub-tabs',
133
  array(
134
  array(
135
- 'title' => __( 'Sub tab slugs', 'learnpress' ),
136
  'type' => 'heading',
137
  'desc' => __( 'The slugs of tabs display in profile page. Each tab should be unique.', 'learnpress' )
138
  ),
38
  $profile_slug = 'profile';
39
 
40
  if ( $profile_id = learn_press_get_page_id( 'profile' ) ) {
41
+ if($profile_post = get_post( $profile_id )) {
42
+ $profile_slug = $profile_post->post_name;
43
+ }
44
  }
45
  $profile_url = site_url() . '/' . $profile_slug . '/' . $username;
46
 
106
  )
107
  ),
108
  array(
109
+ 'title' => __( 'Courses per page', 'learnpress' ),
110
  'id' => 'profile_courses_limit',
111
  'default' => '10',
112
  'type' => 'number',
133
  'learn-press/profile-settings-fields/sub-tabs',
134
  array(
135
  array(
136
+ 'title' => __( 'Sub Tab Slugs', 'learnpress' ),
137
  'type' => 'heading',
138
  'desc' => __( 'The slugs of tabs display in profile page. Each tab should be unique.', 'learnpress' )
139
  ),
inc/admin/views/course/added-items-preview.php CHANGED
@@ -22,22 +22,24 @@
22
  </script>
23
 
24
  <script type="text/javascript">
25
- (function (Vue, $store) {
26
- Vue.component('lp-added-items-preview', {
27
- template: '#tmpl-lp-added-items-preview',
28
- props: {
29
- show: true
30
- },
31
- methods: {
32
- removeItem: function (item) {
33
- $store.dispatch('ci/removeItem', item);
 
 
 
 
 
 
 
34
  }
35
- },
36
- computed: {
37
- addedItems: function () {
38
- return $store.getters['ci/addedItems'];
39
- }
40
- }
41
- });
42
- })(Vue, LP_Curriculum_Store);
43
  </script>
22
  </script>
23
 
24
  <script type="text/javascript">
25
+ jQuery(function() {
26
+ (function (Vue, $store) {
27
+ Vue.component('lp-added-items-preview', {
28
+ template: '#tmpl-lp-added-items-preview',
29
+ props: {
30
+ show: true
31
+ },
32
+ methods: {
33
+ removeItem: function (item) {
34
+ $store.dispatch('ci/removeItem', item);
35
+ }
36
+ },
37
+ computed: {
38
+ addedItems: function () {
39
+ return $store.getters['ci/addedItems'];
40
+ }
41
  }
42
+ });
43
+ })(Vue, LP_Curriculum_Store);
44
+ });
 
 
 
 
 
45
  </script>
inc/admin/views/course/curriculum.php CHANGED
@@ -13,6 +13,7 @@ learn_press_admin_view( 'course/sections' );
13
  <div class="lp-course-curriculum">
14
  <div class="heading">
15
  <h4><?php _e( 'Curriculum', 'learnpress' ); ?> <span :class="['status', status]"></span></h4>
 
16
  <span class="collapse-sections" @click="toggle" :class="isOpen ? 'open' : 'close'"></span>
17
  </div>
18
 
@@ -22,26 +23,39 @@ learn_press_admin_view( 'course/sections' );
22
  </script>
23
 
24
  <script type="text/javascript">
25
-
26
- (function (Vue, $store) {
27
-
28
- Vue.component('lp-curriculum', {
29
- template: '#tmpl-lp-course-curriculum',
30
- computed: {
31
- status: function () {
32
- return $store.getters.status;
 
 
 
 
 
33
  },
34
- isOpen: function () {
35
- return !$store.getters['ss/isHiddenAllSections'];
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  }
37
- },
38
- methods: {
39
- // toggle all sections
40
- toggle: function () {
41
- $store.dispatch('ss/toggleAllSections');
42
- }
43
- }
44
- });
45
 
46
- })(Vue, LP_Curriculum_Store);
47
  </script>
13
  <div class="lp-course-curriculum">
14
  <div class="heading">
15
  <h4><?php _e( 'Curriculum', 'learnpress' ); ?> <span :class="['status', status]"></span></h4>
16
+ <div class="section-item-counts"><span>{{countAllItems()}}</span></div>
17
  <span class="collapse-sections" @click="toggle" :class="isOpen ? 'open' : 'close'"></span>
18
  </div>
19
 
23
  </script>
24
 
25
  <script type="text/javascript">
26
+ jQuery(function () {
27
+
28
+ (function (Vue, $store) {
29
+
30
+ Vue.component('lp-curriculum', {
31
+ template: '#tmpl-lp-course-curriculum',
32
+ computed: {
33
+ status: function () {
34
+ return $store.getters.status;
35
+ },
36
+ isOpen: function () {
37
+ return !$store.getters['ss/isHiddenAllSections'];
38
+ }
39
  },
40
+ methods: {
41
+ // toggle all sections
42
+ toggle: function () {
43
+ $store.dispatch('ss/toggleAllSections');
44
+ },
45
+
46
+ countAllItems: function () {
47
+ var count = 0,
48
+ labels = $store.getters['i18n/all'].item_labels;
49
+ $.each($store.getters['ss/sections'], function (i, section) {
50
+ count += section.items.length;
51
+ });
52
+
53
+ return count + ' ' + (count <= 1 ? labels.singular : labels.plural);
54
+ }
55
  }
56
+ });
57
+
58
+ })(Vue, LP_Curriculum_Store);
 
 
 
 
 
59
 
60
+ })
61
  </script>
inc/admin/views/course/editor.php CHANGED
@@ -21,19 +21,7 @@ learn_press_admin_view( 'course/modal-choose-items' );
21
  </div>
22
  <div v-else>
23
  <div class="lp-place-holder">
24
- <div class="line-heading"></div>
25
-
26
- <div class="line-sm"></div>
27
- <div class="line-xs"></div>
28
-
29
- <div class="line-df"></div>
30
- <div class="line-lgx"></div>
31
- <div class="line-lg"></div>
32
-
33
- <div class="line-df"></div>
34
- <div class="line-lg"></div>
35
- <div class="line-lgx"></div>
36
-
37
  <div class="notify-reload"><?php esc_html_e( 'Something went wrong! Please reload to continue editing curriculum.', 'learnpress' ); ?></div>
38
  </div>
39
  </div>
@@ -41,21 +29,23 @@ learn_press_admin_view( 'course/modal-choose-items' );
41
  </script>
42
 
43
  <script type="text/javascript">
44
- (function (Vue, $store) {
45
-
46
- Vue.component('lp-course-editor', {
47
- template: '#tmpl-lp-course-editor',
48
- created: function () {
49
- setInterval(function () {
50
- $store.dispatch('heartbeat');
51
- }, 60 * 1000);
52
- },
53
- computed: {
54
- heartbeat: function () {
55
- return $store.getters['heartbeat'];
 
 
56
  }
57
- }
58
- });
59
 
60
- })(Vue, LP_Curriculum_Store);
 
61
  </script>
21
  </div>
22
  <div v-else>
23
  <div class="lp-place-holder">
24
+ <?php learn_press_admin_view( 'placeholder-animation' ); ?>
 
 
 
 
 
 
 
 
 
 
 
 
25
  <div class="notify-reload"><?php esc_html_e( 'Something went wrong! Please reload to continue editing curriculum.', 'learnpress' ); ?></div>
26
  </div>
27
  </div>
29
  </script>
30
 
31
  <script type="text/javascript">
32
+ jQuery(function () {
33
+ (function (Vue, $store) {
34
+
35
+ Vue.component('lp-course-editor', {
36
+ template: '#tmpl-lp-course-editor',
37
+ created: function () {
38
+ setInterval(function () {
39
+ $store.dispatch('heartbeat');
40
+ }, 60 * 1000);
41
+ },
42
+ computed: {
43
+ heartbeat: function () {
44
+ return $store.getters['heartbeat'];
45
+ }
46
  }
47
+ });
 
48
 
49
+ })(Vue, LP_Curriculum_Store);
50
+ })
51
  </script>
inc/admin/views/course/modal-choose-items.php CHANGED
@@ -18,31 +18,34 @@ learn_press_admin_view( 'course/pagination' );
18
  </script>
19
 
20
  <script type="text/javascript">
21
- (function (Vue, $store) {
22
-
23
- Vue.component('lp-course-choose-item', {
24
- template: '#tmpl-lp-course-choose-item',
25
- props: ['item', 'added'],
26
- watch: {
27
- added: function () {
28
- this.$forceUpdate();
29
- }
30
- },
31
- methods: {
32
- add: function () {
33
- if (this.item.added) {
34
- return this.remove();
35
- }
36
 
37
- this.$emit('add', this.item);
 
 
 
 
 
 
 
 
38
  },
39
- remove: function () {
40
- this.$emit('remove', this.item);
 
 
 
 
 
 
 
 
 
41
  }
42
- }
43
- });
 
 
44
 
45
- })(Vue, LP_Curriculum_Store);
46
  </script>
47
 
48
 
@@ -63,13 +66,15 @@ learn_press_admin_view( 'course/pagination' );
63
  </template>
64
  </ul>
65
 
66
- <div class="close" @click="close">
67
- <span class="dashicons dashicons-no-alt"></span>
68
- </div>
 
69
  </div>
70
  <div class="main">
71
  <form class="search" @submit.prevent="">
72
- <input type="text" placeholder="<?php esc_attr_e( 'Type here to search item', 'learnpress' ); ?>"
 
73
  title="search" @input="onChangeQuery" v-model="query">
74
  </form>
75
 
@@ -108,146 +113,165 @@ learn_press_admin_view( 'course/pagination' );
108
  </script>
109
 
110
  <script type="text/javascript">
111
- (function (Vue, $store, $) {
112
-
113
- Vue.component('lp-curriculum-choose-items', {
114
- template: '#tmpl-lp-course-choose-items',
115
- data: function () {
116
- return {
117
- query: '',
118
- page: 1,
119
- tab: 'lp_lesson',
120
- delayTimeout: null,
121
- showPreview: false,
122
- adding: false
123
- };
124
- },
125
- created: function () {
126
- var vm = this;
127
-
128
- $store.subscribe(function (mutation) {
129
- if (!mutation || mutation.type !== 'ci/TOGGLE') {
130
- return;
131
- }
132
-
133
- if (vm.show) {
134
- vm.init();
135
-
136
- $('body').addClass('lp-modal-choose-items-open');
137
- } else {
138
- $('body').removeClass('lp-modal-choose-items-open');
139
- }
140
- });
141
- }, computed: {
142
- status: function () {
143
- return $store.getters['ci/status'];
144
- },
145
- loading: function () {
146
- return this.status === 'loading';
147
- },
148
- textButtonEdit: function () {
149
- if (this.showPreview) {
150
- return $store.getters['i18n/all'].back;
151
- }
152
-
153
- return $store.getters['i18n/all'].selected_items + ' (' + this.addedItems.length + ')';
154
- },
155
- addedItems: function () {
156
- return $store.getters['ci/addedItems'];
157
- },
158
- pagination: function () {
159
- return $store.getters['ci/pagination'];
160
- },
161
- totalPage: function () {
162
- if (this.pagination) {
163
- return parseInt(this.pagination.total) || 1;
164
- }
165
- },
166
- items: function () {
167
- return $store.getters['ci/items'];
168
- },
169
- show: function () {
170
- return $store.getters['ci/isOpen'];
171
- },
172
- types: function () {
173
- return $store.getters['ci/types'];
174
- },
175
- firstType: function () {
176
- for (var type in $store.getters['ci/types']) {
177
- return type;
178
- }
179
 
180
- return false;
181
- }
182
- },
183
- methods: {
184
- init: function () {
185
- this.query = '';
186
- this.page = 1;
187
- this.tab = this.firstType;
188
- this.showPreview = false;
189
- this.adding = false;
190
- this.makeSearch();
 
 
 
 
191
  },
192
-
193
- checkout: function () {
194
- this.adding = true;
195
- $store.dispatch('ci/addItemsToSection');
196
  },
 
 
197
 
198
- changePage: function (page) {
199
- if (page === this.page) {
200
- return;
201
- }
202
-
203
- this.page = page;
204
- this.makeSearch();
205
- },
206
 
207
- addItem: function (item) {
208
- $store.dispatch('ci/addItem', item);
209
- },
210
-
211
- removeItem: function (item) {
212
- $store.dispatch('ci/removeItem', item);
213
- },
214
 
215
- close: function () {
216
- $store.dispatch('ci/toggle');
 
 
 
217
  },
218
-
219
- changeTab: function (key) {
220
- if (key === this.tab) {
221
- return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
222
  }
223
-
224
- this.tab = key;
225
- this.page = 1;
226
- this.makeSearch();
227
  },
228
-
229
- onChangeQuery: function () {
230
- var vm = this;
231
-
232
- if (this.delayTimeout) {
233
- clearTimeout(this.delayTimeout);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
234
  }
235
-
236
- this.delayTimeout = setTimeout(function () {
237
- vm.page = 1;
238
- vm.makeSearch();
239
- }, 500);
240
- },
241
-
242
- makeSearch: function () {
243
- $store.dispatch('ci/searchItems', {
244
- query: this.query,
245
- page: this.page,
246
- type: this.tab
247
- });
248
  }
249
- }
250
- });
251
 
252
- })(Vue, LP_Curriculum_Store, jQuery);
 
253
  </script>
18
  </script>
19
 
20
  <script type="text/javascript">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
 
22
+ jQuery(function () {
23
+ (function (Vue, $store) {
24
+ Vue.component('lp-course-choose-item', {
25
+ template: '#tmpl-lp-course-choose-item',
26
+ props: ['item', 'added'],
27
+ watch: {
28
+ added: function () {
29
+ this.$forceUpdate();
30
+ }
31
  },
32
+ methods: {
33
+ add: function () {
34
+ if (this.item.added) {
35
+ return this.remove();
36
+ }
37
+
38
+ this.$emit('add', this.item);
39
+ },
40
+ remove: function () {
41
+ this.$emit('remove', this.item);
42
+ }
43
  }
44
+ });
45
+
46
+ })(Vue, LP_Curriculum_Store);
47
+ })
48
 
 
49
  </script>
50
 
51
 
66
  </template>
67
  </ul>
68
 
69
+ <a class="close" @click="close">
70
+ <span class="dashicons dashicons-no-alt"
71
+ title="<?php esc_attr_e( 'Close', 'learnpress' ); ?>"></span>
72
+ </a>
73
  </div>
74
  <div class="main">
75
  <form class="search" @submit.prevent="">
76
+ <input type="text" class="modal-search-input"
77
+ placeholder="<?php esc_attr_e( 'Type here to search item', 'learnpress' ); ?>"
78
  title="search" @input="onChangeQuery" v-model="query">
79
  </form>
80
 
113
  </script>
114
 
115
  <script type="text/javascript">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
116
 
117
+ jQuery(function ($) {
118
+
119
+ (function (Vue, $store) {
120
+
121
+ Vue.component('lp-curriculum-choose-items', {
122
+ template: '#tmpl-lp-course-choose-items',
123
+ data: function () {
124
+ return {
125
+ query: '',
126
+ page: 1,
127
+ tab: 'lp_lesson',
128
+ delayTimeout: null,
129
+ showPreview: false,
130
+ adding: false
131
+ };
132
  },
133
+ mounted: function () {
 
 
 
134
  },
135
+ created: function () {
136
+ var vm = this;
137
 
138
+ $store.subscribe(function (mutation) {
139
+ if (!mutation || mutation.type !== 'ci/TOGGLE') {
140
+ return;
141
+ }
 
 
 
 
142
 
143
+ if (vm.show) {
144
+ vm.init();
 
 
 
 
 
145
 
146
+ $('body').addClass('lp-modal-choose-items-open');
147
+ } else {
148
+ $('body').removeClass('lp-modal-choose-items-open');
149
+ }
150
+ });
151
  },
152
+ computed: {
153
+ status: function () {
154
+ return $store.getters['ci/status'];
155
+ },
156
+ loading: function () {
157
+ return this.status === 'loading';
158
+ },
159
+ textButtonEdit: function () {
160
+ if (this.showPreview) {
161
+ return $store.getters['i18n/all'].back;
162
+ }
163
+
164
+ return $store.getters['i18n/all'].selected_items + ' (' + this.addedItems.length + ')';
165
+ },
166
+ addedItems: function () {
167
+ return $store.getters['ci/addedItems'];
168
+ },
169
+ pagination: function () {
170
+ return $store.getters['ci/pagination'];
171
+ },
172
+ totalPage: function () {
173
+ if (this.pagination) {
174
+ return parseInt(this.pagination.total) || 1;
175
+ }
176
+ },
177
+ items: function () {
178
+ return $store.getters['ci/items'];
179
+ },
180
+ show: function () {
181
+ var isShow = $store.getters['ci/isOpen'];
182
+
183
+ if (isShow) {
184
+ this.focusInput();
185
+ }
186
+
187
+ return isShow;
188
+ },
189
+ types: function () {
190
+ return $store.getters['ci/types'];
191
+ },
192
+ firstType: function () {
193
+ for (var type in $store.getters['ci/types']) {
194
+ return type;
195
+ }
196
+
197
+ return false;
198
  }
 
 
 
 
199
  },
200
+ methods: {
201
+ init: function () {
202
+ this.query = '';
203
+ this.page = 1;
204
+ this.tab = this.firstType;
205
+ this.showPreview = false;
206
+ this.adding = false;
207
+ this.makeSearch();
208
+ },
209
+ focusInput: function () {
210
+ var $input = $(this.$el).find('.main .search input[type="text"]').focus();
211
+ setTimeout(function () {
212
+ $input.focus();
213
+ }, 300)
214
+ },
215
+ checkout: function () {
216
+ this.adding = true;
217
+ $store.dispatch('ci/addItemsToSection');
218
+ },
219
+
220
+ changePage: function (page) {
221
+ if (page === this.page) {
222
+ return;
223
+ }
224
+
225
+ this.page = page;
226
+ this.makeSearch();
227
+ },
228
+
229
+ addItem: function (item) {
230
+ $store.dispatch('ci/addItem', item);
231
+ },
232
+
233
+ removeItem: function (item) {
234
+ $store.dispatch('ci/removeItem', item);
235
+ },
236
+
237
+ close: function () {
238
+ $store.dispatch('ci/toggle');
239
+ },
240
+
241
+ changeTab: function (key) {
242
+ if (key === this.tab) {
243
+ return;
244
+ }
245
+
246
+ this.tab = key;
247
+ this.page = 1;
248
+ this.makeSearch();
249
+ this.focusInput();
250
+ },
251
+
252
+ onChangeQuery: function () {
253
+ var vm = this;
254
+
255
+ if (this.delayTimeout) {
256
+ clearTimeout(this.delayTimeout);
257
+ }
258
+
259
+ this.delayTimeout = setTimeout(function () {
260
+ vm.page = 1;
261
+ vm.makeSearch();
262
+ }, 500);
263
+ },
264
+
265
+ makeSearch: function () {
266
+ $store.dispatch('ci/searchItems', {
267
+ query: this.query,
268
+ page: this.page,
269
+ type: this.tab
270
+ });
271
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
272
  }
273
+ });
 
274
 
275
+ })(Vue, LP_Curriculum_Store);
276
+ });
277
  </script>
inc/admin/views/course/new-section-item.php CHANGED
@@ -10,6 +10,7 @@
10
 
11
  <script type="text/x-template" id="tmpl-lp-new-section-item">
12
  <div class="new-section-item section-item" @keyup.up="up" @keyup.down="down" :class="{choosing: choosingType}">
 
13
  <div class="types" @mouseleave="mouseLeave" @mouseover="mouseOver">
14
  <template v-for="(_type, key) in types">
15
  <label class="type" :title="_type" :class="[key, {current: (type==key)}]">
@@ -18,107 +19,119 @@
18
  </template>
19
  </div>
20
  <div class="title">
21
- <input type="text" :placeholder="placeholderInput" @keyup.enter="createItem" @blur="createItem"
22
  v-model="title">
23
  </div>
24
  </div>
25
  </script>
26
 
27
  <script type="text/javascript">
28
- (function (Vue, $store) {
29
-
30
- Vue.component('lp-new-section-item', {
31
- template: '#tmpl-lp-new-section-item',
32
- props: [],
33
- data: function () {
34
- return {
35
- type: '',
36
- title: '',
37
- choosingType: false
38
- };
39
- },
40
- created: function () {
41
- this.type = this.firstType;
42
- },
43
- methods: {
44
- up: function (e) {
45
- this.changeType(true);
46
- },
47
- down: function (e) {
48
- this.changeType(false);
49
- },
50
- mouseOver: function () {
51
- this.choosingType = true;
52
- },
53
- mouseLeave: function () {
54
- this.choosingType = false;
55
- },
56
- // emit create item
57
- create: function () {
58
- if (!this.title) {
59
- return;
60
- }
61
- this.$emit('create', {
62
- type: this.type,
63
- title: this.title
64
- });
65
- this.title = '';
66
  },
67
- // set time out for blur change type item
68
- createItem: function () {
69
- if (!this.title) {
70
- return;
71
- }
72
- setTimeout(this.create, 300);
73
  },
74
- changeType: function (next) {
75
- if (this.title) {
76
- return;
77
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
 
79
- var types = this.types;
80
- var current = this.type;
81
- var currentIndex = false;
82
 
83
- var keys = [];
84
- var i = 0;
85
- for (var type in types) {
86
- if (type === current) {
87
- currentIndex = i;
 
 
 
88
  }
89
- keys.push(type);
90
- i++;
91
- }
92
 
93
- var nextType = keys[currentIndex + 1] || keys[0];
94
- var previousType = keys[currentIndex - 1] || keys[keys.length - 1];
 
 
 
 
 
 
95
 
96
- if (next) {
97
- this.type = nextType;
98
- } else {
99
- this.type = previousType;
100
  }
101
- }
102
- },
103
- computed: {
104
- placeholderInput: function () {
105
- var i18n = $store.getters['i18n/all'];
106
- var type = this.types[this.type] || '';
107
- return i18n.new_section_item + ' ' + type.toLowerCase();
108
  },
 
 
 
 
109
 
110
- types: function () {
111
- return $store.getters['ci/types'];
112
- },
113
- firstType: function () {
114
- for (var type in $store.getters['ci/types']) {
115
- return type;
116
- }
117
 
118
- return false;
 
 
 
 
 
 
 
 
 
119
  }
120
- }
121
- });
122
 
123
- })(Vue, LP_Curriculum_Store);
 
124
  </script>
10
 
11
  <script type="text/x-template" id="tmpl-lp-new-section-item">
12
  <div class="new-section-item section-item" @keyup.up="up" @keyup.down="down" :class="{choosing: choosingType}">
13
+ <div class="drag"></div>
14
  <div class="types" @mouseleave="mouseLeave" @mouseover="mouseOver">
15
  <template v-for="(_type, key) in types">
16
  <label class="type" :title="_type" :class="[key, {current: (type==key)}]">
19
  </template>
20
  </div>
21
  <div class="title">
22
+ <input type="text" :placeholder="placeholderInput" @keyup.enter="createItem($event)" @blur="createItem($event)"
23
  v-model="title">
24
  </div>
25
  </div>
26
  </script>
27
 
28
  <script type="text/javascript">
29
+ jQuery(function () {
30
+
31
+ (function (Vue, $store) {
32
+
33
+ Vue.component('lp-new-section-item', {
34
+ template: '#tmpl-lp-new-section-item',
35
+ props: [],
36
+ data: function () {
37
+ return {
38
+ type: '',
39
+ title: '',
40
+ choosingType: false
41
+ };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  },
43
+ created: function () {
44
+ this.type = this.firstType;
 
 
 
 
45
  },
46
+ methods: {
47
+ up: function (e) {
48
+ this.changeType(true);
49
+ },
50
+ down: function (e) {
51
+ this.changeType(false);
52
+ },
53
+ mouseOver: function () {
54
+ this.choosingType = true;
55
+ },
56
+ mouseLeave: function () {
57
+ this.choosingType = false;
58
+ },
59
+ // emit create item
60
+ create: function () {
61
+ if (!this.title) {
62
+ return;
63
+ }
64
+ this.$emit('create', {
65
+ id: LP.uniqueId(),
66
+ type: this.type,
67
+ title: this.title
68
+ });
69
+ this.title = '';
70
+ },
71
+ // set time out for blur change type item
72
+ createItem: function (e) {
73
+ if (!this.title) {
74
+ return;
75
+ }
76
+
77
+ if (e.key === 'Enter') {
78
+ return this.create();
79
+ }
80
+
81
+ setTimeout(this.create, 300);
82
+ },
83
+ changeType: function (next) {
84
+ if (this.title) {
85
+ return;
86
+ }
87
 
88
+ var types = this.types;
89
+ var current = this.type;
90
+ var currentIndex = false;
91
 
92
+ var keys = [];
93
+ var i = 0;
94
+ for (var type in types) {
95
+ if (type === current) {
96
+ currentIndex = i;
97
+ }
98
+ keys.push(type);
99
+ i++;
100
  }
 
 
 
101
 
102
+ var nextType = keys[currentIndex + 1] || keys[0];
103
+ var previousType = keys[currentIndex - 1] || keys[keys.length - 1];
104
+
105
+ if (next) {
106
+ this.type = nextType;
107
+ } else {
108
+ this.type = previousType;
109
+ }
110
 
 
 
 
 
111
  }
 
 
 
 
 
 
 
112
  },
113
+ computed: {
114
+ placeholderInput: function (e) {
115
+ var i18n = $store.getters['i18n/all'];
116
+ var type = this.types[this.type] || '';
117
 
118
+ $(this.$el).find('.title input').focus();
119
+ return i18n.new_section_item + ' ' + type.toLowerCase();
120
+ },
 
 
 
 
121
 
122
+ types: function () {
123
+ return $store.getters['ci/types'];
124
+ },
125
+ firstType: function () {
126
+ for (var type in $store.getters['ci/types']) {
127
+ return type;
128
+ }
129
+
130
+ return false;
131
+ }
132
  }
133
+ });
 
134
 
135
+ })(Vue, LP_Curriculum_Store);
136
+ })
137
  </script>
inc/admin/views/course/new-section.php CHANGED
@@ -22,38 +22,42 @@
22
  </script>
23
 
24
  <script type="text/javascript">
25
- (function (Vue, $store, $) {
26
-
27
- Vue.component('lp-new-section', {
28
- template: '#tmpl-lp-new-section',
29
- data: function () {
30
- return {
31
- section_title: ''
32
- };
33
- },
34
- methods: {
35
- // draft new course
36
- draftCourse: function () {
37
- if ($store.getters['autoDraft']) {
38
- $store.dispatch('draftCourse', {
39
- title: $('input[name=post_title]').val(),
40
- content: $('textarea[name=content]').val()
41
- });
42
- }
43
  },
44
- newSection: function () {
45
- // prevent create no title section
46
- if (this.section_title) {
47
- // create draft course if auto draft
48
- this.draftCourse();
49
-
50
- // new section
51
- $store.dispatch('ss/newSection', this.section_title);
52
- this.section_title = '';
 
 
 
 
 
 
 
 
 
 
 
 
53
  }
54
  }
55
- }
56
- });
57
 
58
- })(Vue, LP_Curriculum_Store, jQuery);
 
59
  </script>
22
  </script>
23
 
24
  <script type="text/javascript">
25
+ jQuery(function ($) {
26
+
27
+ (function (Vue, $store) {
28
+
29
+ Vue.component('lp-new-section', {
30
+ template: '#tmpl-lp-new-section',
31
+ data: function () {
32
+ return {
33
+ section_title: ''
34
+ };
 
 
 
 
 
 
 
 
35
  },
36
+ methods: {
37
+ // draft new course
38
+ draftCourse: function () {
39
+ if ($store.getters['autoDraft']) {
40
+ $store.dispatch('draftCourse', {
41
+ title: $('input[name=post_title]').val(),
42
+ content: $('textarea[name=content]').val()
43
+ });
44
+ }
45
+ },
46
+ newSection: function () {
47
+ // prevent create no title section
48
+ if (this.section_title) {
49
+
50
+ // create draft course if auto draft
51
+ this.draftCourse();
52
+
53
+ // new section
54
+ $store.dispatch('ss/newSection', this.section_title);
55
+ this.section_title = '';
56
+ }
57
  }
58
  }
59
+ });
 
60
 
61
+ })(Vue, LP_Curriculum_Store);
62
+ });
63
  </script>
inc/admin/views/course/pagination.php CHANGED
@@ -28,50 +28,52 @@
28
  </script>
29
 
30
  <script type="text/javascript">
 
31
 
32
- (function (Vue, $store, $) {
33
 
34
- Vue.component('lp-pagination', {
35
- template: '#tmpl-lp-pagination',
36
- props: ['total'],
37
- data: function () {
38
- return {page: 1}
39
- },
40
- methods: {
41
- update: function () {
42
- this.$emit('update', this.page);
43
  },
 
 
 
 
44
 
45
- nextPage: function () {
46
- if (this.page < this.total) {
47
- this.page++;
48
- this.update();
49
- }
50
- },
51
 
52
- nextLastPage: function () {
53
- if (this.page < this.total) {
54
- this.page = this.total;
55
- this.update();
56
- }
57
- },
58
 
59
- previousPage: function () {
60
- if (this.page > 1) {
61
- this.page--;
62
- this.update();
63
- }
64
- },
65
 
66
- previousFirstPage: function () {
67
- if (this.page > 1) {
68
- this.page = 1;
69
- this.update();
 
70
  }
71
  }
72
- }
73
- });
74
 
75
- })(Vue, LP_Curriculum_Store, jQuery);
76
 
 
77
  </script>
28
  </script>
29
 
30
  <script type="text/javascript">
31
+ jQuery(function ($) {
32
 
33
+ (function (Vue, $store) {
34
 
35
+ Vue.component('lp-pagination', {
36
+ template: '#tmpl-lp-pagination',
37
+ props: ['total'],
38
+ data: function () {
39
+ return {page: 1}
 
 
 
 
40
  },
41
+ methods: {
42
+ update: function () {
43
+ this.$emit('update', this.page);
44
+ },
45
 
46
+ nextPage: function () {
47
+ if (this.page < this.total) {
48
+ this.page++;
49
+ this.update();
50
+ }
51
+ },
52
 
53
+ nextLastPage: function () {
54
+ if (this.page < this.total) {
55
+ this.page = this.total;
56
+ this.update();
57
+ }
58
+ },
59
 
60
+ previousPage: function () {
61
+ if (this.page > 1) {
62
+ this.page--;
63
+ this.update();
64
+ }
65
+ },
66
 
67
+ previousFirstPage: function () {
68
+ if (this.page > 1) {
69
+ this.page = 1;
70
+ this.update();
71
+ }
72
  }
73
  }
74
+ });
 
75
 
76
+ })(Vue, LP_Curriculum_Store);
77
 
78
+ })
79
  </script>
inc/admin/views/course/section-item.php CHANGED
@@ -7,12 +7,10 @@
7
  ?>
8
 
9
  <script type="text/x-template" id="tmpl-lp-section-item">
10
- <li :class="['section-item',item.type, {updating: updating, removing: removing}]" :data-item-id="item.id"
11
  :data-item-order="order">
12
  <div class="drag">
13
- <svg class="svg-icon" viewBox="0 0 32 32">
14
- <path d="M 14 5.5 a 3 3 0 1 1 -3 -3 A 3 3 0 0 1 14 5.5 Z m 7 3 a 3 3 0 1 0 -3 -3 A 3 3 0 0 0 21 8.5 Z m -10 4 a 3 3 0 1 0 3 3 A 3 3 0 0 0 11 12.5 Z m 10 0 a 3 3 0 1 0 3 3 A 3 3 0 0 0 21 12.5 Z m -10 10 a 3 3 0 1 0 3 3 A 3 3 0 0 0 11 22.5 Z m 10 0 a 3 3 0 1 0 3 3 A 3 3 0 0 0 21 22.5 Z"></path>
15
- </svg>
16
  </div>
17
  <div class="icon"></div>
18
  <div class="title">
@@ -22,7 +20,8 @@
22
 
23
  <div class="item-actions">
24
  <div class="actions">
25
- <div class="action preview-item">
 
26
  <a class="lp-btn-icon dashicons" :class="previewClass" @click="togglePreview"></a>
27
  </div>
28
  <div class="action edit-item">
@@ -37,7 +36,7 @@
37
  </li>
38
  <li>
39
  <a @click.prevent="deletePermanently"
40
- class="delete-permanently"><?php esc_html_e( 'Delete permanently', 'learnpress' ); ?></a>
41
  </li>
42
  </ul>
43
  </div>
@@ -47,82 +46,106 @@
47
  </script>
48
 
49
  <script type="text/javascript">
50
- (function (Vue, $store) {
51
 
52
- Vue.component('lp-section-item', {
53
- template: '#tmpl-lp-section-item',
54
- props: ['item', 'order', 'disableCurriculum'],
55
- data: function () {
56
- return {
57
- // origin course item title
58
- title: this.item.title,
59
- changed: false,
60
- removing: false
61
- };
62
- },
63
- created: function () {
64
- this.$ = jQuery;
65
- },
66
- computed: {
67
- // edit item url
68
- url: function () {
69
- return $store.getters['ss/urlEdit'] + this.item.id;
70
- },
71
- updating: function () {
72
- return this.removing || this.saving;
73
- },
74
- status: function () {
75
- return $store.getters['ss/statusUpdateSectionItem'][this.item.id] || '';
76
- },
77
- saving: function () {
78
- return this.status === 'updating';
79
- },
80
- previewClass: function () {
81
- return {
82
- 'dashicons-unlock': this.item.preview,
83
- 'dashicons-lock': !this.item.preview
84
- }
85
- }
86
- },
87
- methods: {
88
 
89
- changeTitle: function () {
90
- this.changed = true;
91
- },
92
- // update item title
93
- updateTitle: function () {
94
- if (this.changed) {
95
- this.$emit('update', this.item);
96
- this.changed = false;
97
- }
 
98
  },
99
- // remove item
100
- remove: function () {
101
- this.removing = true;
102
- this.$emit('remove', this.item);
103
  },
104
- // remove item
105
- deletePermanently: function () {
106
- this.removing = true;
107
- this.$emit('delete', this.item);
 
 
 
 
 
 
 
 
 
 
108
  },
109
- // navigation course items
110
- keyUp: function (event) {
111
- var keyCode = event.keyCode;
112
- // escape update course item title
113
- if (keyCode === 27) {
114
- this.item.title = this.title;
115
- } else {
116
- this.$emit('nav', {key: event.keyCode, order: this.order});
 
 
 
 
 
 
 
 
 
 
 
117
  }
118
  },
119
- togglePreview: function (evt) {
120
- this.item.preview = !this.item.preview;
121
- this.changed = true;
122
- this.updateTitle();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
  }
124
- }
125
- });
126
 
127
- })(Vue, LP_Curriculum_Store);
 
128
  </script>
7
  ?>
8
 
9
  <script type="text/x-template" id="tmpl-lp-section-item">
10
+ <li :class="['section-item',item.type, isEmptyItem() ? 'empty-item' : '', {updating: updating, removing: removing}]" :data-item-id="item.id"
11
  :data-item-order="order">
12
  <div class="drag">
13
+ <?php learn_press_admin_view('svg-icon');?>
 
 
14
  </div>
15
  <div class="icon"></div>
16
  <div class="title">
20
 
21
  <div class="item-actions">
22
  <div class="actions">
23
+ <div class="action preview-item"
24
+ data-content-tip="<?php echo esc_attr( 'Turn on/off this item is preview', 'learnpress' ); ?>">
25
  <a class="lp-btn-icon dashicons" :class="previewClass" @click="togglePreview"></a>
26
  </div>
27
  <div class="action edit-item">
36
  </li>
37
  <li>
38
  <a @click.prevent="deletePermanently"
39
+ class="delete-permanently"><?php esc_html_e( 'Move to trash', 'learnpress' ); ?></a>
40
  </li>
41
  </ul>
42
  </div>
46
  </script>
47
 
48
  <script type="text/javascript">
49
+ jQuery(function ($) {
50
 
51
+ (function (Vue, $store) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
 
53
+ Vue.component('lp-section-item', {
54
+ template: '#tmpl-lp-section-item',
55
+ props: ['item', 'order', 'disableCurriculum'],
56
+ data: function () {
57
+ return {
58
+ // origin course item title
59
+ title: this.item.title,
60
+ changed: false,
61
+ removing: false
62
+ };
63
  },
64
+ created: function () {
65
+ this.$ = jQuery;
 
 
66
  },
67
+ mounted: function () {
68
+ this.$nextTick(function () {
69
+ var $ = jQuery;
70
+ $(this.$el).find('.preview-item').QuickTip({
71
+ closeInterval: 0,
72
+ arrowOffset: 'el',
73
+ tipClass: 'preview-item-tip'
74
+ });
75
+ $(document).on('mousedown', '.section-item .drag', function (e) {
76
+ $('html, body').addClass('moving');
77
+ }).on('mouseup', function (e) {
78
+ $('html, body').removeClass('moving');
79
+ })
80
+ })
81
  },
82
+ computed: {
83
+ // edit item url
84
+ url: function () {
85
+ return $store.getters['ss/urlEdit'] + this.item.id;
86
+ },
87
+ updating: function () {
88
+ return this.removing || this.saving;
89
+ },
90
+ status: function () {
91
+ return $store.getters['ss/statusUpdateSectionItem'][this.item.id] || '';
92
+ },
93
+ saving: function () {
94
+ return this.status === 'updating';
95
+ },
96
+ previewClass: function () {
97
+ return {
98
+ 'dashicons-visibility': this.item.preview,
99
+ 'dashicons-hidden': !this.item.preview
100
+ }
101
  }
102
  },
103
+ methods: {
104
+ isEmptyItem: function () {
105
+ return isNaN(this.item.id)
106
+ },
107
+ changeTitle: function () {
108
+ this.changed = true;
109
+ },
110
+ // update item title
111
+ updateTitle: function () {
112
+ if (this.changed) {
113
+ this.$emit('update', this.item);
114
+ this.changed = false;
115
+ }
116
+ },
117
+ // remove item
118
+ remove: function () {
119
+ //this.removing = true;
120
+ this.item.temp_id = LP.uniqueId();
121
+ this.$emit('remove', this.item);
122
+ },
123
+ // remove item
124
+ deletePermanently: function () {
125
+ if (!confirm($store.getters['i18n/all'].confirm_trash_item.replace('{{ITEM_NAME}}', this.item.title))) {
126
+ return;
127
+ }
128
+ this.item.temp_id = LP.uniqueId();
129
+ this.$emit('delete', this.item);
130
+ },
131
+ // navigation course items
132
+ keyUp: function (event) {
133
+ var keyCode = event.keyCode;
134
+ // escape update course item title
135
+ if (keyCode === 27) {
136
+ this.item.title = this.title;
137
+ } else {
138
+ this.$emit('nav', {key: event.keyCode, order: this.order});
139
+ }
140
+ },
141
+ togglePreview: function (evt) {
142
+ this.item.preview = !this.item.preview;
143
+ this.changed = true;
144
+ this.updateTitle();
145
+ }
146
  }
147
+ });
 
148
 
149
+ })(Vue, LP_Curriculum_Store);
150
+ })
151
  </script>
inc/admin/views/course/section.php CHANGED
@@ -10,7 +10,8 @@ learn_press_admin_view( 'course/new-section-item' );
10
  ?>
11
 
12
  <script type="text/x-template" id="tmpl-lp-section">
13
- <div class="section" :class="[isOpen ? 'open' : 'close', status]" :data-section-order="index"
 
14
  :data-section-id="section.id">
15
  <div class="section-head" @dblclick="toggle">
16
  <span class="movable"></span>
@@ -18,6 +19,9 @@ learn_press_admin_view( 'course/new-section-item' );
18
  <input v-model="section.title" type="text" title="title" class="title-input"
19
  @change="updating" @blur="completed" @keyup.enter="completed"
20
  placeholder="<?php esc_attr_e( 'Enter the name section', 'learnpress' ); ?>">
 
 
 
21
  <!--Section toggle-->
22
  <div class="actions">
23
  <span class="collapse" :class="isOpen ? 'open' : 'close'" @click.prevent="toggle"></span>
@@ -35,13 +39,13 @@ learn_press_admin_view( 'course/new-section-item' );
35
  </div>
36
 
37
  <div class="section-list-items" :class="{'no-item': !section.items.length}">
38
- <draggable v-model="items" :element="'ul'" :options="optionDraggable">
39
  <!--Section items-->
40
  <lp-section-item v-for="(item, index) in section.items" :item="item" :key="item.id"
41
  @update="updateItem" @remove="removeItem" @delete="deleteItem" @nav="navItem"
42
  :order="index+1" :ref="index+1"
43
  :disableCurriculum="disableCurriculum"></lp-section-item>
44
- </draggable>
45
 
46
  <lp-new-section-item @create="newItem" v-if="!disableCurriculum"></lp-new-section-item>
47
  </div>
@@ -61,155 +65,215 @@ learn_press_admin_view( 'course/new-section-item' );
61
  </script>
62
 
63
  <script type="text/javascript">
64
- (function (Vue, $store, $) {
65
-
66
- Vue.component('lp-section', {
67
- template: '#tmpl-lp-section',
68
- props: ['section', 'index', 'disableCurriculum'],
69
- data: function () {
70
- return {
71
- changed: false,
72
- confirm: false
73
- };
74
- },
75
- mounted: function () {
76
- var vm = this;
77
-
78
- this.prepareToggle();
79
-
80
- this.$watch('section.open', function (open) {
81
- vm.toggleAnimation(open);
82
- });
83
- },
84
- computed: {
85
- status: function () {
86
- return $store.getters['ss/statusUpdateSection'][this.section.id] || '';
87
- },
88
- isOpen: function () {
89
- return this.section.open;
90
- },
91
 
92
- items: {
93
- get: function () {
94
- return this.section.items;
95
- },
96
- set: function (items) {
97
- this.section.items = items;
98
 
99
- $store.dispatch('ss/updateSectionItems', {
100
- section_id: this.section.id,
101
- items: items
102
- });
103
- }
 
 
 
104
  },
 
 
105
 
106
- optionDraggable: function () {
107
- return {
 
 
 
 
 
 
 
108
  handle: '.drag',
109
- draggable: '.section-item',
110
- group: {
111
- name: 'lp-section-items',
112
- put: true,
113
- pull: true
 
 
 
 
 
 
 
114
  }
115
- };
116
- }
117
- },
118
- methods: {
119
- // toggle section
120
- toggle: function () {
121
- $store.dispatch('ss/toggleSection', this.section);
122
- },
123
- prepareToggle: function () {
124
- var display = 'none';
125
- if (this.isOpen) {
126
- display = 'block';
127
- }
128
 
129
- this.$refs.collapse.style.display = display;
130
  },
131
- toggleAnimation: function (open) {
132
 
133
- if (open) {
134
- $(this.$refs.collapse).slideDown();
135
- } else {
136
- $(this.$refs.collapse).slideUp();
137
- }
138
- },
139
- // updating section
140
- updating: function () {
141
- this.changed = true;
142
- },
143
- // update section
144
- completed: function () {
145
- if (this.changed) {
146
- $store.dispatch('ss/updateSection', this.section);
147
- this.changed = false;
148
- }
149
- },
150
- // click remove section
151
- removing: function () {
152
- this.confirm = true;
153
- var vm = this;
154
 
155
- setTimeout(function () {
156
- vm.confirm = false;
157
- }, 3000);
158
- },
159
- // remove section
160
- remove: function () {
161
- if (this.confirm) {
162
- $store.dispatch('ss/removeSection', {index: this.index, section: this.section});
163
- this.confirm = false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
164
  }
165
  },
166
- // update section item
167
- updateItem: function (item) {
168
- $store.dispatch('ss/updateSectionItem', {section_id: this.section.id, item: item});
169
- },
170
- // remove section item
171
- removeItem: function (item) {
172
- $store.dispatch('ss/removeSectionItem', {section_id: this.section.id, item_id: item.id});
173
- },
174
- deleteItem: function (item) {
175
- $store.dispatch('ss/deleteSectionItem', {section_id: this.section.id, item_id: item.id});
176
- },
177
- // navigation course items
178
- navItem: function (payload) {
179
 
180
- var keyCode = payload.key,
181
- order = payload.order;
 
 
 
 
 
 
 
182
 
183
- if (keyCode === 38) {
184
- if (order === 1) {
185
- this.$refs.description.focus();
186
- } else {
187
- this.nav(order - 1);
 
 
 
 
 
 
 
 
 
188
  }
189
- }
190
- if (keyCode === 40 || keyCode === 13) {
191
- if (order === this.section.items.length) {
192
- // code
 
 
 
193
  } else {
194
- this.nav(order + 1);
195
  }
196
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
197
 
198
- },
199
- // focus item
200
- nav: function (position) {
201
- var element = 'div[data-section-order=' + this.index + '] li[data-item-order=' + position + ']';
202
- ($(element).find('.title input')).focus();
203
- },
204
- // new section item
205
- newItem: function (item) {
206
- $store.dispatch('ss/newSectionItem', {section_id: this.section.id, item: item});
207
- },
208
- openModal: function () {
209
- $store.dispatch('ci/open', parseInt(this.section.id));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
210
  }
211
- }
212
- });
213
 
214
- })(Vue, LP_Curriculum_Store, jQuery);
 
215
  </script>
10
  ?>
11
 
12
  <script type="text/x-template" id="tmpl-lp-section">
13
+ <div class="section" :class="[isOpen ? 'open' : 'close', status, isEmpty ? 'empty-section' : '']"
14
+ :data-section-order="index"
15
  :data-section-id="section.id">
16
  <div class="section-head" @dblclick="toggle">
17
  <span class="movable"></span>
19
  <input v-model="section.title" type="text" title="title" class="title-input"
20
  @change="updating" @blur="completed" @keyup.enter="completed"
21
  placeholder="<?php esc_attr_e( 'Enter the name section', 'learnpress' ); ?>">
22
+ <div class="section-item-counts">
23
+ <span v-for="item in countItems()">{{item.count}} {{item.name}}</span>
24
+ </div>
25
  <!--Section toggle-->
26
  <div class="actions">
27
  <span class="collapse" :class="isOpen ? 'open' : 'close'" @click.prevent="toggle"></span>
39
  </div>
40
 
41
  <div class="section-list-items" :class="{'no-item': !section.items.length}">
42
+ <ul>
43
  <!--Section items-->
44
  <lp-section-item v-for="(item, index) in section.items" :item="item" :key="item.id"
45
  @update="updateItem" @remove="removeItem" @delete="deleteItem" @nav="navItem"
46
  :order="index+1" :ref="index+1"
47
  :disableCurriculum="disableCurriculum"></lp-section-item>
48
+ </ul>
49
 
50
  <lp-new-section-item @create="newItem" v-if="!disableCurriculum"></lp-new-section-item>
51
  </div>
65
  </script>
66
 
67
  <script type="text/javascript">
68
+ jQuery(function ($) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
 
70
+ (function (Vue, $store) {
 
 
 
 
 
71
 
72
+ Vue.component('lp-section', {
73
+ template: '#tmpl-lp-section',
74
+ props: ['section', 'index', 'disableCurriculum'],
75
+ data: function () {
76
+ return {
77
+ changed: false,
78
+ confirm: false
79
+ };
80
  },
81
+ mounted: function () {
82
+ var vm = this;
83
 
84
+ this.prepareToggle();
85
+
86
+ this.$watch('section.open', function (open) {
87
+ vm.toggleAnimation(open);
88
+ });
89
+
90
+ $(this.$el).find('.section-list-items ul').sortable({
91
+ axis: 'y',
92
+ connectWith: '.section-list-items ul',
93
  handle: '.drag',
94
+ start: function (e, ui) {
95
+ var id = parseInt(ui.item.attr('data-item-id'));
96
+ ui.item.data('vmItem', vm.section.items.filter(function (vmItem, i) {
97
+ return vmItem.id == id
98
+ }))
99
+ },
100
+ update: function (e, ui) {
101
+ var itemIds = $(this).children().map(function () {
102
+ return parseInt($(this).attr('data-item-id'));
103
+ }).get();
104
+ var vmItem = ui.item.data('vmItem');
105
+ vm.updateOrderItems(itemIds, vmItem ? vmItem[0] : null);
106
  }
107
+ });
 
 
 
 
 
 
 
 
 
 
 
 
108
 
 
109
  },
110
+ computed: {
111
 
112
+ status: function () {
113
+ return $store.getters['ss/statusUpdateSection'][this.section.id] || '';
114
+ },
115
+ isEmpty: function () {
116
+ return isNaN(this.section.id);
117
+ },
118
+ isOpen: function () {
119
+ return this.section.open;
120
+ },
 
 
 
 
 
 
 
 
 
 
 
 
121
 
122
+ items: {
123
+ get: function () {
124
+ return this.section.items;
125
+ },
126
+ set: function (items) {
127
+ this.section.items = items;
128
+
129
+ $store.dispatch('ss/updateSectionItems', {
130
+ section_id: this.section.id,
131
+ items: items
132
+ });
133
+ }
134
+ },
135
+
136
+ optionDraggable: function () {
137
+ return {
138
+ handle: '.drag',
139
+ draggable: '.section-item',
140
+ group: {
141
+ name: 'lp-section-items',
142
+ put: true,
143
+ pull: true
144
+ }
145
+ };
146
  }
147
  },
148
+ methods: {
149
+ updateOrderItems: function (orders, vmItem) {
150
+ var allItems = JSON.parse(JSON.stringify(this.section.items)),
151
+ items = [];
152
+
153
+ if (vmItem) {
154
+ allItems.push(vmItem);
155
+ }
 
 
 
 
 
156
 
157
+ for (var i = 0, n = orders.length; i < n; i++) {
158
+ $.each(allItems, function (j, item) {
159
+ if (orders[i] == item.id) {
160
+ items.push(JSON.parse(JSON.stringify(item)));
161
+ found = true;
162
+ return false;
163
+ }
164
+ });
165
+ }
166
 
167
+ this.section.items = items;
168
+ $store.dispatch('ss/updateSectionItems', {
169
+ section_id: this.section.id,
170
+ items: items
171
+ });
172
+ },
173
+ // toggle section
174
+ toggle: function () {
175
+ $store.dispatch('ss/toggleSection', this.section);
176
+ },
177
+ prepareToggle: function () {
178
+ var display = 'none';
179
+ if (this.isOpen) {
180
+ display = 'block';
181
  }
182
+
183
+ this.$refs.collapse.style.display = display;
184
+ },
185
+ toggleAnimation: function (open) {
186
+
187
+ if (open) {
188
+ $(this.$refs.collapse).slideDown();
189
  } else {
190
+ $(this.$refs.collapse).slideUp();
191
  }
192
+ },
193
+ // updating section
194
+ updating: function () {
195
+ this.changed = true;
196
+ },
197
+ // update section
198
+ completed: function () {
199
+ if (this.changed) {
200
+ $store.dispatch('ss/updateSection', this.section);
201
+ this.changed = false;
202
+ }
203
+ },
204
+ // click remove section
205
+ removing: function () {
206
+ this.confirm = true;
207
+ var vm = this;
208
 
209
+ setTimeout(function () {
210
+ vm.confirm = false;
211
+ }, 3000);
212
+ },
213
+ // remove section
214
+ remove: function () {
215
+ if (this.confirm) {
216
+ $store.dispatch('ss/removeSection', {index: this.index, section: this.section});
217
+ this.confirm = false;
218
+ }
219
+ },
220
+ // update section item
221
+ updateItem: function (item) {
222
+ $store.dispatch('ss/updateSectionItem', {section_id: this.section.id, item: item});
223
+ },
224
+ // remove section item
225
+ removeItem: function (item) {
226
+ $store.dispatch('ss/removeSectionItem', {section_id: this.section.id, item: item});
227
+ },
228
+ deleteItem: function (item) {
229
+ $store.dispatch('ss/deleteSectionItem', {section_id: this.section.id, item: item});
230
+ },
231
+ // navigation course items
232
+ navItem: function (payload) {
233
+
234
+ var keyCode = payload.key,
235
+ order = payload.order;
236
+
237
+ if (keyCode === 38) {
238
+ if (order === 1) {
239
+ this.$refs.description.focus();
240
+ } else {
241
+ this.nav(order - 1);
242
+ }
243
+ }
244
+ if (keyCode === 40 || keyCode === 13) {
245
+ if (order === this.section.items.length) {
246
+ // code
247
+ } else {
248
+ this.nav(order + 1);
249
+ }
250
+ }
251
+
252
+ },
253
+ // focus item
254
+ nav: function (position) {
255
+ var element = 'div[data-section-order=' + this.index + '] li[data-item-order=' + position + ']';
256
+ ($(element).find('.title input')).focus();
257
+ },
258
+ // new section item
259
+ newItem: function (item) {
260
+ $store.dispatch('ss/newSectionItem', {section_id: this.section.id, item: item});
261
+ console.log(item)
262
+ },
263
+ openModal: function () {
264
+ $store.dispatch('ci/open', parseInt(this.section.id));
265
+ },
266
+ countItems: function () {
267
+ var count = this.section.items.length,
268
+ labels = $store.getters['i18n/all'].item_labels;
269
+ return [{
270
+ count: count,
271
+ name: count > 1 ? labels.plural : labels.singular
272
+ }];
273
+ }
274
  }
275
+ });
 
276
 
277
+ })(Vue, LP_Curriculum_Store);
278
+ });
279
  </script>
inc/admin/views/course/sections.php CHANGED
@@ -24,47 +24,50 @@ learn_press_admin_view( 'course/new-section' );
24
  </script>
25
 
26
  <script type="text/javascript">
27
- (function (Vue, $store, $) {
28
 
29
- Vue.component('lp-list-sections', {
30
- template: '#tmpl-lp-list-sections',
31
- computed: {
32
- // all sections
33
- sections: function () {
34
- return $store.getters['ss/sections'];
 
 
 
 
 
 
 
35
  },
36
- // disable edit curriculum
37
- disableCurriculum: function () {
38
- return $store.getters['disable_curriculum'];
39
- }
40
- },
41
- created: function () {
42
- var _self = this;
43
- setTimeout(function () {
44
- var $el = $('.curriculum-sections');
45
- $el.sortable({
46
- handle: '.section-head .movable',
47
- axis: 'y',
48
- items: "> .section",
49
- update: function () {
50
- _self.sort();
51
- }
52
- });
53
- }, 1000)
54
 
55
- },
56
- methods: {
57
- // sort sections
58
- sort: function () {
59
 
60
- var _items = $('.curriculum-sections>div.section'),
61
- order = _items.map(function () {
62
- return $(this).data('section-id');
63
- }).get();
64
 
65
- $store.dispatch('ss/updateSectionsOrder', order);
 
66
  }
67
- }
68
- });
69
- })(Vue, LP_Curriculum_Store, jQuery);
70
  </script>
24
  </script>
25
 
26
  <script type="text/javascript">
27
+ jQuery(function ($) {
28
 
29
+ (function (Vue, $store) {
30
+
31
+ Vue.component('lp-list-sections', {
32
+ template: '#tmpl-lp-list-sections',
33
+ computed: {
34
+ // all sections
35
+ sections: function () {
36
+ return $store.getters['ss/sections'];
37
+ },
38
+ // disable edit curriculum
39
+ disableCurriculum: function () {
40
+ return $store.getters['disable_curriculum'];
41
+ }
42
  },
43
+ created: function () {
44
+ var _self = this;
45
+ setTimeout(function () {
46
+ var $el = $('.curriculum-sections');
47
+ $el.sortable({
48
+ handle: '.section-head .movable',
49
+ axis: 'y',
50
+ items: "> .section",
51
+ update: function () {
52
+ _self.sort();
53
+ }
54
+ });
55
+ }, 1000)
 
 
 
 
 
56
 
57
+ },
58
+ methods: {
59
+ // sort sections
60
+ sort: function () {
61
 
62
+ var _items = $('.curriculum-sections>div.section'),
63
+ order = _items.map(function () {
64
+ return $(this).data('section-id');
65
+ }).get();
66
 
67
+ $store.dispatch('ss/updateSectionsOrder', order);
68
+ }
69
  }
70
+ });
71
+ })(Vue, LP_Curriculum_Store);
72
+ });
73
  </script>
inc/admin/views/editor-wrapper.php CHANGED
@@ -8,17 +8,6 @@
8
 
9
  <div id="admin-editor-<?php esc_attr_e( $post_type ); ?>">
10
  <div class="lp-place-holder">
11
- <div class="line-heading"></div>
12
-
13
- <div class="line-sm"></div>
14
- <div class="line-xs"></div>
15
-
16
- <div class="line-df"></div>
17
- <div class="line-lgx"></div>
18
- <div class="line-lg"></div>
19
-
20
- <div class="line-df"></div>
21
- <div class="line-lg"></div>
22
- <div class="line-lgx"></div>
23
  </div>
24
  </div>
8
 
9
  <div id="admin-editor-<?php esc_attr_e( $post_type ); ?>">
10
  <div class="lp-place-holder">
11
+ <?php learn_press_admin_view( 'placeholder-animation' ); ?>
 
 
 
 
 
 
 
 
 
 
 
12
  </div>
13
  </div>
inc/admin/views/meta-boxes/order/actions.php CHANGED
@@ -16,7 +16,7 @@ defined( 'ABSPATH' ) || exit();
16
  <div id="misc-publishing-actions">
17
  <div class="misc-pub-section">
18
  <select name="trigger-order-action">
19
- <option value=""><?php _e( 'Actions', 'learnpress' ); ?></option>
20
  <option value="current-status"><?php _e( 'Trigger action of current order status', 'learnpress' ); ?></option>
21
  </select>
22
  </div>
16
  <div id="misc-publishing-actions">
17
  <div class="misc-pub-section">
18
  <select name="trigger-order-action">
19
+ <option value=""><?php _e( 'Choose an action', 'learnpress' ); ?></option>
20
  <option value="current-status"><?php _e( 'Trigger action of current order status', 'learnpress' ); ?></option>
21
  </select>
22
  </div>
inc/admin/views/meta-boxes/order/order-item.php CHANGED
@@ -6,6 +6,11 @@
6
  <tr class="order-item-row" data-item_id="<?php echo $item['id']; ?>" data-id="<?php echo $item['course_id']; ?>"
7
  data-remove_nonce="<?php echo wp_create_nonce( 'remove_order_item' ); ?>">
8
  <td class="column-name">
 
 
 
 
 
9
  <?php do_action( 'learn_press_before_order_details_item_title', $item ); ?>
10
  <?php do_action( 'learn_press/before_order_details_item_title', $item ); ?>
11
  <!-- <a href="" class="remove-order-item">&times;</a> -->
@@ -13,9 +18,7 @@
13
  <?php do_action( 'learn_press_after_order_details_item_title', $item ); ?>
14
  <?php do_action( 'learn_press/after_order_details_item_title', $item ); ?>
15
 
16
- <?php if ( 'pending' === $order->get_status() ) { ?>
17
- <a class="remove-order-item" href=""><?php _e( 'delete', 'learnpress' ); ?></a>
18
- <?php } ?>
19
  </td>
20
  <td class="column-price align-right">
21
  <?php echo learn_press_format_price( $item['total'], $currency_symbol ); ?>
6
  <tr class="order-item-row" data-item_id="<?php echo $item['id']; ?>" data-id="<?php echo $item['course_id']; ?>"
7
  data-remove_nonce="<?php echo wp_create_nonce( 'remove_order_item' ); ?>">
8
  <td class="column-name">
9
+ <?php if ( 'pending' === $order->get_status() ) { ?>
10
+ <a class="remove-order-item" href="">
11
+ <span class="dashicons dashicons-trash"></span>
12
+ </a>
13
+ <?php } ?>
14
  <?php do_action( 'learn_press_before_order_details_item_title', $item ); ?>
15
  <?php do_action( 'learn_press/before_order_details_item_title', $item ); ?>
16
  <!-- <a href="" class="remove-order-item">&times;</a> -->
18
  <?php do_action( 'learn_press_after_order_details_item_title', $item ); ?>
19
  <?php do_action( 'learn_press/after_order_details_item_title', $item ); ?>
20
 
21
+
 
 
22
  </td>
23
  <td class="column-price align-right">
24
  <?php echo learn_press_format_price( $item['total'], $currency_symbol ); ?>
inc/admin/views/placeholder-animation.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Template for displaying a placeholder with animation effect.
4
+ *
5
+ * @author ThimPress
6
+ * @package LearnPress/Admin/Views
7
+ * @version 3.0.7
8
+ */
9
+
10
+ defined( 'ABSPATH' ) or die();
11
+ ?>
12
+ <div class="line-heading"></div>
13
+
14
+ <div class="line-sm"></div>
15
+ <div class="line-xs"></div>
16
+
17
+ <div class="line-df"></div>
18
+ <div class="line-lgx"></div>
19
+ <div class="line-lg"></div>
20
+
21
+ <div class="line-df"></div>
22
+ <div class="line-lg"></div>
23
+ <div class="line-lgx"></div>
inc/admin/views/question/actions.php CHANGED
@@ -9,7 +9,10 @@
9
  <script type="text/x-template" id="tmpl-lp-question-actions">
10
 
11
  <div class="lp-box-data-head lp-row">
12
- <h3 class="heading"><?php esc_html_e( 'Question Answers', 'learnpress' ); ?></h3>
 
 
 
13
  <div class="lp-box-data-actions lp-toolbar-buttons">
14
  <div class="lp-toolbar-btn question-actions">
15
  <div class="question-types">
@@ -40,6 +43,10 @@
40
  }
41
  },
42
  methods: {
 
 
 
 
43
  // check question type active
44
  active: function (type) {
45
  return this.type === type ? 'active' : '';
9
  <script type="text/x-template" id="tmpl-lp-question-actions">
10
 
11
  <div class="lp-box-data-head lp-row">
12
+ <h3 class="heading">
13
+ <?php esc_html_e( 'Question Answers', 'learnpress' ); ?>
14
+ <div class="section-item-counts"><span>{{typeLabel()}}</span></div>
15
+ </h3>
16
  <div class="lp-box-data-actions lp-toolbar-buttons">
17
  <div class="lp-toolbar-btn question-actions">
18
  <div class="question-types">
43
  }
44
  },
45
  methods: {
46
+ typeLabel: function () {
47
+ var types = this.types;
48
+ return types[this.type];
49
+ },
50
  // check question type active
51
  active: function (type) {
52
  return this.type === type ? 'active' : '';
inc/admin/views/question/answer.php CHANGED
@@ -14,9 +14,9 @@ learn_press_admin_view( 'question/option' );
14
  <thead>
15
  <tr>
16
  <th class="sort"></th>
17
- <th class="order"></th>
18
  <th class="answer-text"><?php _e( 'Answer Text', 'learnpress' ); ?></th>
19
- <th class="answer-correct"><?php _e( 'Correct answer', 'learnpress' ); ?></th>
20
  <th class="actions"></th>
21
  </tr>
22
  </thead>
@@ -72,6 +72,19 @@ learn_press_admin_view( 'question/option' );
72
  $el.sortable({
73
  handle: '.sort',
74
  axis: 'y',
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  update: function () {
76
  _self.sort();
77
  }
@@ -84,7 +97,7 @@ learn_press_admin_view( 'question/option' );
84
  var _items = $('.list-question-answers tbody>tr.answer-option');
85
  var _order = [];
86
  _items.each(function (index, item) {
87
- $(item).find('.order').text(index + 1);
88
  _order.push($(item).data('answer-id'));
89
  });
90
 
@@ -113,7 +126,12 @@ learn_press_admin_view( 'question/option' );
113
  newAnswer: function () {
114
  // new answer
115
  if (this.status === 'successful') {
116
- $store.dispatch('newAnswer');
 
 
 
 
 
117
  }
118
  }
119
  }
14
  <thead>
15
  <tr>
16
  <th class="sort"></th>
17
+ <th class="order">#</th>
18
  <th class="answer-text"><?php _e( 'Answer Text', 'learnpress' ); ?></th>
19
+ <th class="answer-correct"><?php _e( 'Correct?', 'learnpress' ); ?></th>
20
  <th class="actions"></th>
21
  </tr>
22
  </thead>
72
  $el.sortable({
73
  handle: '.sort',
74
  axis: 'y',
75
+ helper: function (e, ui) {
76
+ var $tr = $('<tr />'),
77
+ $row = $(e.target).closest('tr');
78
+ $row.children().each(function () {
79
+ var $td = $(this).clone().width($(this).width())
80
+ $tr.append($td);
81
+ });
82
+
83
+ return $tr;
84
+ },
85
+ start: function () {
86
+
87
+ },
88
  update: function () {
89
  _self.sort();
90
  }
97
  var _items = $('.list-question-answers tbody>tr.answer-option');
98
  var _order = [];
99
  _items.each(function (index, item) {
100
+ $(item).find('.order').text((index + 1) + '.');
101
  _order.push($(item).data('answer-id'));
102
  });
103
 
126
  newAnswer: function () {
127
  // new answer
128
  if (this.status === 'successful') {
129
+ $store.dispatch('newAnswer', {
130
+ answer: {
131
+ value: LP.uniqueId(),
132
+ text: $store.getters.i18n.new_option_label
133
+ }
134
+ });
135
  }
136
  }
137
  }
inc/admin/views/question/option.php CHANGED
@@ -7,9 +7,9 @@
7
  ?>
8
 
9
  <script type="text/x-template" id="tmpl-lp-question-answer-option">
10
- <tr class="answer-option" :data-answer-id="id">
11
- <td class="sort"><i class="fa fa-bars"></i></td>
12
- <td class="order">{{index +1}}</td>
13
  <td class="answer-text">
14
  <form @submit.prevent="">
15
  <input type="text" v-model="answer.text"
@@ -76,6 +76,9 @@
76
  id: this.id,
77
  order: this.answer.answer_order
78
  });
 
 
 
79
  }
80
  }
81
  })
7
  ?>
8
 
9
  <script type="text/x-template" id="tmpl-lp-question-answer-option">
10
+ <tr class="answer-option" :class="[isNew() ? 'new-option' : '']" :data-answer-id="id">
11
+ <td class="sort"><?php learn_press_admin_view( 'svg-icon' ); ?></td>
12
+ <td class="order">{{index +1}}.</td>
13
  <td class="answer-text">
14
  <form @submit.prevent="">
15
  <input type="text" v-model="answer.text"
76
  id: this.id,
77
  order: this.answer.answer_order
78
  });
79
+ },
80
+ isNew: function () {
81
+ return isNaN(this.answer.question_answer_id);
82
  }
83
  }
84
  })
inc/admin/views/quiz/editor.php CHANGED
@@ -14,6 +14,9 @@ learn_press_admin_view( 'quiz/modal-choose-items' );
14
  <div v-if="heartbeat">
15
  <div class="lp-box-data-head heading">
16
  <h3><?php echo __( 'Questions', 'learnpress' ); ?><span class="status"></span></h3>
 
 
 
17
  <span :class="['collapse-list-questions dashicons ' , close ? 'dashicons-arrow-down' : 'dashicons-arrow-up']"
18
  @click="toggle"></span>
19
  </div>
@@ -35,18 +38,20 @@ learn_press_admin_view( 'quiz/modal-choose-items' );
35
 
36
  <div class="footer" v-if="!disableUpdateList">
37
  <div class="table-row">
38
- <div class="add-new-question">
 
 
39
  <div class="title">
40
  <form @submit.prevent="">
41
  <input type="text" v-model="new_question.title"
42
- placeholder="<?php _e( ' Create a new question', 'learnpress' ); ?>"
43
  @keyup.enter.prevent="addItem()">
44
  </form>
45
  </div>
46
  <div class="add-new">
47
  <button type="button" class="button" :disabled="!addableNew"
48
  @click.prevent="addItem(new_question.type)">
49
- <?php esc_html_e( 'Add as New', 'learnpress' ); ?>
50
  </button>
51
  <ul class="question-types">
52
  <li v-for="(type, key) in questionTypes">
@@ -69,19 +74,7 @@ learn_press_admin_view( 'quiz/modal-choose-items' );
69
  </div>
70
  <div v-else>
71
  <div class="lp-place-holder">
72
- <div class="line-heading"></div>
73
-
74
- <div class="line-sm"></div>
75
- <div class="line-xs"></div>
76
-
77
- <div class="line-df"></div>
78
- <div class="line-lgx"></div>
79
- <div class="line-lg"></div>
80
-
81
- <div class="line-df"></div>
82
- <div class="line-lg"></div>
83
- <div class="line-lgx"></div>
84
-
85
  <div class="notify-reload"><?php esc_html_e( 'Something went wrong! Please reload to continue editing quiz questions.', 'learnpress' ); ?></div>
86
  </div>
87
  </div>
@@ -146,11 +139,11 @@ learn_press_admin_view( 'quiz/modal-choose-items' );
146
  },
147
  // add new question
148
  addItem: function (type) {
149
-
150
  if (this.new_question.title) {
151
  if (!type) {
152
  type = this.newQuestionType;
153
  }
 
154
 
155
  // new question
156
  this.new_question.type = type;
@@ -175,6 +168,14 @@ learn_press_admin_view( 'quiz/modal-choose-items' );
175
  title: $('input[name=post_title]').val(),
176
  content: $('textarea[name=content]').val()
177
  });
 
 
 
 
 
 
 
 
178
  }
179
  }
180
  })
14
  <div v-if="heartbeat">
15
  <div class="lp-box-data-head heading">
16
  <h3><?php echo __( 'Questions', 'learnpress' ); ?><span class="status"></span></h3>
17
+ <div class="section-item-counts">
18
+ <span>{{textCountQuestions()}}</span>
19
+ </div>
20
  <span :class="['collapse-list-questions dashicons ' , close ? 'dashicons-arrow-down' : 'dashicons-arrow-up']"
21
  @click="toggle"></span>
22
  </div>
38
 
39
  <div class="footer" v-if="!disableUpdateList">
40
  <div class="table-row">
41
+ <div class="sort"></div>
42
+ <div class="order">{{countQuestions() + 1}}</div>
43
+ <div class="name add-new-question">
44
  <div class="title">
45
  <form @submit.prevent="">
46
  <input type="text" v-model="new_question.title"
47
+ placeholder="<?php _e( 'Create a new question', 'learnpress' ); ?>"
48
  @keyup.enter.prevent="addItem()">
49
  </form>
50
  </div>
51
  <div class="add-new">
52
  <button type="button" class="button" :disabled="!addableNew"
53
  @click.prevent="addItem(new_question.type)">
54
+ <?php esc_html_e( 'Add as New...', 'learnpress' ); ?>
55
  </button>
56
  <ul class="question-types">
57
  <li v-for="(type, key) in questionTypes">
74
  </div>
75
  <div v-else>
76
  <div class="lp-place-holder">
77
+ <?php learn_press_admin_view( 'placeholder-animation' ); ?>
 
 
 
 
 
 
 
 
 
 
 
 
78
  <div class="notify-reload"><?php esc_html_e( 'Something went wrong! Please reload to continue editing quiz questions.', 'learnpress' ); ?></div>
79
  </div>
80
  </div>
139
  },
140
  // add new question
141
  addItem: function (type) {
 
142
  if (this.new_question.title) {
143
  if (!type) {
144
  type = this.newQuestionType;
145
  }
146
+ this.new_question.id = LP.uniqueId()
147
 
148
  // new question
149
  this.new_question.type = type;
168
  title: $('input[name=post_title]').val(),
169
  content: $('textarea[name=content]').val()
170
  });
171
+ },
172
+ countQuestions: function () {
173
+ return $store.getters['lqs/listQuestions'].length;
174
+ },
175
+ textCountQuestions: function () {
176
+ var count = this.countQuestions(),
177
+ labels = $store.getters['i18n/all'].question_labels;
178
+ return count + ' ' + (count > 1 ? labels.plural : labels.singular);
179
  }
180
  }
181
  })
inc/admin/views/quiz/modal-choose-items.php CHANGED
@@ -54,14 +54,15 @@ learn_press_admin_view( 'quiz/pagination' );
54
  <ul class="tabs">
55
  <li class="tab active"><a href="#"><?php esc_html_e( 'Questions', 'learnpress' ); ?></a></li>
56
  </ul>
57
- <div class="close" @click="close">
58
- <span class="dashicons dashicons-no-alt"></span>
59
- </div>
60
  </div>
61
 
62
  <div class="main">
63
  <form class="search" @submit.prevent="">
64
- <input type="text" placeholder="<?php esc_attr_e( 'Type here to search item', 'learnpress' ); ?>"
 
65
  title="search" @input="onChangeQuery" v-model="query">
66
  </form>
67
  <ul class="list-items">
@@ -131,6 +132,9 @@ learn_press_admin_view( 'quiz/pagination' );
131
  $('body').removeClass('lp-quiz-modal-choose-item-open');
132
  }
133
  })
 
 
 
134
  },
135
  computed: {
136
  status: function () {
@@ -161,7 +165,11 @@ learn_press_admin_view( 'quiz/pagination' );
161
  return $store.getters['cqi/items'];
162
  },
163
  show: function () {
164
- return $store.getters['cqi/isOpen'];
 
 
 
 
165
  },
166
  // check new quiz
167
  new_quiz: function () {
@@ -176,6 +184,12 @@ learn_press_admin_view( 'quiz/pagination' );
176
  this.adding = false;
177
  this.makeSearch();
178
  },
 
 
 
 
 
 
179
  // add items to quiz
180
  checkout: function () {
181
  this.adding = true;
54
  <ul class="tabs">
55
  <li class="tab active"><a href="#"><?php esc_html_e( 'Questions', 'learnpress' ); ?></a></li>
56
  </ul>
57
+ <a class="close" @click="close">
58
+ <span class="dashicons dashicons-no-alt" title="<?php esc_attr_e('Close', 'learnpress');?>"></span>
59
+ </a>
60
  </div>
61
 
62
  <div class="main">
63
  <form class="search" @submit.prevent="">
64
+ <input type="text" class="modal-search-input"
65
+ placeholder="<?php esc_attr_e( 'Type here to search question', 'learnpress' ); ?>"
66
  title="search" @input="onChangeQuery" v-model="query">
67
  </form>
68
  <ul class="list-items">
132
  $('body').removeClass('lp-quiz-modal-choose-item-open');
133
  }
134
  })
135
+ },
136
+ mounted: function () {
137
+
138
  },
139
  computed: {
140
  status: function () {
165
  return $store.getters['cqi/items'];
166
  },
167
  show: function () {
168
+ var isShow = $store.getters['cqi/isOpen'];
169
+
170
+ isShow && this.focusInput();
171
+
172
+ return isShow;
173
  },
174
  // check new quiz
175
  new_quiz: function () {
184
  this.adding = false;
185
  this.makeSearch();
186
  },
187
+ focusInput: function () {
188
+ var $input = $(this.$el).find('.main .search input[type="text"]').focus();
189
+ setTimeout(function () {
190
+ $input.focus();
191
+ }, 300)
192
+ },
193
  // add items to quiz
194
  checkout: function () {
195
  this.adding = true;
inc/admin/views/quiz/question-actions.php CHANGED
@@ -9,9 +9,7 @@
9
  <script type="text/x-template" id="tmpl-lp-quiz-question-actions">
10
  <div class="question-actions table-row" :class="status">
11
  <div class="sort">
12
- <svg class="svg-icon" viewBox="0 0 32 32">
13
- <path d="M 14 5.5 a 3 3 0 1 1 -3 -3 A 3 3 0 0 1 14 5.5 Z m 7 3 a 3 3 0 1 0 -3 -3 A 3 3 0 0 0 21 8.5 Z m -10 4 a 3 3 0 1 0 3 3 A 3 3 0 0 0 11 12.5 Z m 10 0 a 3 3 0 1 0 3 3 A 3 3 0 0 0 21 12.5 Z m -10 10 a 3 3 0 1 0 3 3 A 3 3 0 0 0 11 22.5 Z m 10 0 a 3 3 0 1 0 3 3 A 3 3 0 0 0 21 22.5 Z"></path>
14
- </svg>
15
  </div>
16
  <div class="order">{{index +1}}</div>
17
  <div class="name" @dblclick="toggle">
@@ -45,7 +43,7 @@
45
  </li>
46
  <li>
47
  <a @click.prevent="deletePermanently"
48
- class="delete"><?php esc_html_e( 'Delete permanently', 'learnpress' ); ?></a>
49
  </li>
50
  </ul>
51
  </div>
@@ -122,6 +120,9 @@
122
  },
123
  // delete permanently question
124
  deletePermanently: function () {
 
 
 
125
  $store.dispatch('lqs/deleteQuestion', this.question);
126
  },
127
  // toggle question
9
  <script type="text/x-template" id="tmpl-lp-quiz-question-actions">
10
  <div class="question-actions table-row" :class="status">
11
  <div class="sort">
12
+ <i class="fa fa-bars"></i>
 
 
13
  </div>
14
  <div class="order">{{index +1}}</div>
15
  <div class="name" @dblclick="toggle">
43
  </li>
44
  <li>
45
  <a @click.prevent="deletePermanently"
46
+ class="delete"><?php esc_html_e( 'Move to trash', 'learnpress' ); ?></a>
47
  </li>
48
  </ul>
49
  </div>
120
  },
121
  // delete permanently question
122
  deletePermanently: function () {
123
+ if (!confirm($store.getters['i18n/all'].confirm_trash_question.replace('{{QUESTION_NAME}}', this.question.title))) {
124
+ return;
125
+ }
126
  $store.dispatch('lqs/deleteQuestion', this.question);
127
  },
128
  // toggle question
inc/admin/views/quiz/question-answer-option.php CHANGED
@@ -7,9 +7,10 @@
7
  ?>
8
 
9
  <script type="text/x-template" id="tmpl-lp-quiz-question-answer-option">
10
- <tr class="answer-option" :data-answer-id="answer.question_answer_id" :data-order-answer="index">
11
- <td class="sort"><i class="fa fa-bars"></i></td>
12
- <td class="order">{{index +1}}</td>
 
13
  <td class="answer-text">
14
  <input type="text" v-model="answer.text"
15
  @change="changeTitle" @keyup.enter="updateTitle" @blur="updateTitle" @keyup="keyUp"/>
@@ -69,6 +70,9 @@
69
  }
70
  },
71
  methods: {
 
 
 
72
  changeCorrect: function (e) {
73
  this.answer.is_true = (e.target.checked) ? 'yes' : '';
74
  this.$emit('changeCorrect', this.answer);
7
  ?>
8
 
9
  <script type="text/x-template" id="tmpl-lp-quiz-question-answer-option">
10
+ <tr class="answer-option" :class="[isNew() ? 'empty-option' : '']" :data-answer-id="answer.question_answer_id"
11
+ :data-order-answer="index">
12
+ <td class="sort"><?php learn_press_admin_view( 'svg-icon' ); ?></td>
13
+ <td class="order">{{index +1}}.</td>
14
  <td class="answer-text">
15
  <input type="text" v-model="answer.text"
16
  @change="changeTitle" @keyup.enter="updateTitle" @blur="updateTitle" @keyup="keyUp"/>
70
  }
71
  },
72
  methods: {
73
+ isNew: function () {
74
+ return isNaN(this.answer.question_answer_id)
75
+ },
76
  changeCorrect: function (e) {
77
  this.answer.is_true = (e.target.checked) ? 'yes' : '';
78
  this.$emit('changeCorrect', this.answer);
inc/admin/views/quiz/question-answer.php CHANGED
@@ -15,9 +15,9 @@ learn_press_admin_view( 'quiz/question-answer-option' );
15
  <thead>
16
  <tr>
17
  <th class="sort"></th>
18
- <th class="order"></th>
19
  <th class="answer-text"><?php esc_html_e( 'Answer Text', 'learnpress' ); ?></th>
20
- <th class="answer-correct"><?php esc_html_e( 'Is Correct?', 'learnpress' ); ?></th>
21
  <th class="actions"></th>
22
  </tr>
23
  </thead>
@@ -50,10 +50,20 @@ learn_press_admin_view( 'quiz/question-answer-option' );
50
  mounted: function () {
51
  var _self = this;
52
  setTimeout(function () {
53
- var $el = $('.quiz-question-data .lp-list-questions>.lp-list-options tbody');
54
  $el.sortable({
55
  handle: '.sort',
56
  axis: 'y',
 
 
 
 
 
 
 
 
 
 
57
  update: function () {
58
  _self.sort();
59
  }
@@ -68,7 +78,7 @@ learn_press_admin_view( 'quiz/question-answer-option' );
68
  var _items = $('.question-item[data-item-id="' + this.question.id + '"] .quiz-question-data .lp-list-questions>.lp-list-options tbody tr');
69
  var _order = [];
70
  _items.each(function (index, item) {
71
- $(item).find('.order').text(index + 1);
72
  _order.push($(item).data('answer-id'));
73
  });
74
 
@@ -86,7 +96,11 @@ learn_press_admin_view( 'quiz/question-answer-option' );
86
  },
87
  // new answer option
88
  newAnswer: function () {
89
- $store.dispatch('lqs/newQuestionAnswer', this.question.id);
 
 
 
 
90
  },
91
  // navigation course items
92
  navItem: function (payload) {
15
  <thead>
16
  <tr>
17
  <th class="sort"></th>
18
+ <th class="order">#</th>
19
  <th class="answer-text"><?php esc_html_e( 'Answer Text', 'learnpress' ); ?></th>
20
+ <th class="answer-correct"><?php esc_html_e( 'Correct?', 'learnpress' ); ?></th>
21
  <th class="actions"></th>
22
  </tr>
23
  </thead>
50
  mounted: function () {
51
  var _self = this;
52
  setTimeout(function () {
53
+ var $el = $(_self.$el).find('.lp-list-options tbody');
54
  $el.sortable({
55
  handle: '.sort',
56
  axis: 'y',
57
+ helper: function (e, ui) {
58
+ var $tr = $('<tr />'),
59
+ $row = $(e.target).closest('tr');
60
+ $row.children().each(function () {
61
+ var $td = $(this).clone().width($(this).width())
62
+ $tr.append($td);
63
+ });
64
+
65
+ return $tr;
66
+ },
67
  update: function () {
68
  _self.sort();
69
  }
78
  var _items = $('.question-item[data-item-id="' + this.question.id + '"] .quiz-question-data .lp-list-questions>.lp-list-options tbody tr');
79
  var _order = [];
80
  _items.each(function (index, item) {
81
+ $(item).find('.order').text((index + 1) + '.');
82
  _order.push($(item).data('answer-id'));
83
  });
84
 
96
  },
97
  // new answer option
98
  newAnswer: function () {
99
+ $store.dispatch('lqs/newQuestionAnswer', {
100
+ question_id: this.question.id, success: function (answer) {
101
+ $(this.$el).find('tr[data-answer-id="' + answer.question_answer_id + '"] .answer-text input').focus();
102
+ }, context: this
103
+ });
104
  },
105
  // navigation course items
106
  navItem: function (payload) {
inc/admin/views/quiz/question-meta.php CHANGED
@@ -8,60 +8,60 @@
8
 
9
  <script type="text/x-template" id="tmpl-lp-quiz-question-meta">
10
  <div class="quiz-question-options">
11
- <div>
12
- <div class="postbox">
13
- <h2 class="hndle"><span><?php _e( 'Settings', 'learnpress' ); ?></span></h2>
14
- <div class="inside">
15
- <div class="rwmb-meta-box">
16
- <div class="rwmb-field rwmb-textarea-wrapper">
17
- <div class="rwmb-label">
18
- <label for=""><?php _e( 'Question Content', 'learnpress' ); ?></label>
19
- </div>
20
- <div class="rwml-input">
21
- <div>
 
22
  <textarea name="" id="" cols="60" rows="3" class="rwmb-textarea large-text"
23
  @change="updateContent"
24
  v-model="question.settings.content"></textarea>
25
- </div>
26
  </div>
27
  </div>
28
- <div class="rwmb-field rwmb-number-wrapper">
29
- <div class="rwmb-label">
30
- <label for=""><?php _e( 'Mark for this question', 'learnpress' ); ?></label>
31
- </div>
32
- <div class="rwml-input">
33
- <div>
34
- <input name="mark" type="number" v-model="question.settings.mark"
35
- @change="updateMeta">
36
- <p class="description"><?php _e( 'Mark for choosing the right answer.', 'learnpress' ); ?></p>
37
- </div>
38
- </div>
39
  </div>
40
- <div class="rwmb-field rwmb-textarea-wrapper">
41
- <div class="rwmb-label">
42
- <label for=""><?php _e( 'Question Explanation', 'learnpress' ); ?></label>
 
 
43
  </div>
44
- <div class="rwml-input">
45
- <div>
 
 
 
 
 
 
46
  <textarea name="explanation" id="" cols="60" rows="3"
47
  class="rwmb-textarea large-text"
48
  @change="updateMeta"
49
  v-model="question.settings.explanation"></textarea>
50
- <p class="description"><?php _e( 'Explain why an option is true and other is false. The text will be shown when user click on \'Check answer\' button.', 'learnpress' ); ?></p>
51
- </div>
52
  </div>
53
  </div>
54
- <div class="rwmb-field rwmb-textarea-wrapper">
55
- <div class="rwmb-label">
56
- <label for=""><?php _e( 'Question Hint', 'learnpress' ); ?></label>
57
- </div>
58
- <div class="rwml-input">
59
- <div>
 
60
  <textarea name="hint" id="" cols="60" rows="3" class="rwmb-textarea large-text"
61
  @change="updateMeta"
62
  v-model="question.settings.hint"></textarea>
63
- <p class="description"><?php _e( 'Instruction for user to select the right answer. The text will be shown when users click the \'Hint\' button.', 'learnpress' ); ?></p>
64
- </div>
65
  </div>
66
  </div>
67
  </div>
@@ -75,23 +75,39 @@
75
  (function (Vue, $store) {
76
 
77
  Vue.component('lp-quiz-question-meta', {
78
- template: '#tmpl-lp-quiz-question-meta',
79
- props: ['question'],
80
- methods: {
81
- // update question content
82
- updateContent: function () {
83
- $store.dispatch('lqs/updateQuestionContent', this.question);
84
- },
85
- // update question meta
86
- updateMeta: function (e) {
87
- $store.dispatch('lqs/updateQuestionMeta', {
88
- question: this.question,
89
- meta_key: e.target.name
90
- });
 
 
 
 
 
 
 
 
91
  }
 
 
 
 
 
 
 
 
92
  }
93
  }
94
- )
95
 
96
  })(Vue, LP_Quiz_Store);
97
  </script>
8
 
9
  <script type="text/x-template" id="tmpl-lp-quiz-question-meta">
10
  <div class="quiz-question-options">
11
+ <div class="postbox" @click="openSettings($event)">
12
+ <h2 class="hndle"><span><?php _e( 'Settings', 'learnpress' ); ?></span>
13
+ </h2>
14
+ <a class="toggle" @click.prevent="openSettings($event)"></a>
15
+ <div class="inside">
16
+ <div class="rwmb-meta-box">
17
+ <div class="rwmb-field rwmb-textarea-wrapper">
18
+ <div class="rwmb-label">
19
+ <label for=""><?php _e( 'Question Content', 'learnpress' ); ?></label>
20
+ </div>
21
+ <div class="rwml-input">
22
+ <div>
23
  <textarea name="" id="" cols="60" rows="3" class="rwmb-textarea large-text"
24
  @change="updateContent"
25
  v-model="question.settings.content"></textarea>
 
26
  </div>
27
  </div>
28
+ </div>
29
+ <div class="rwmb-field rwmb-number-wrapper">
30
+ <div class="rwmb-label">
31
+ <label for=""><?php _e( 'Mark for this question', 'learnpress' ); ?></label>
 
 
 
 
 
 
 
32
  </div>
33
+ <div class="rwml-input">
34
+ <div>
35
+ <input name="mark" type="number" v-model="question.settings.mark"
36
+ @change="updateMeta">
37
+ <p class="description"><?php _e( 'Mark for choosing the right answer.', 'learnpress' ); ?></p>
38
  </div>
39
+ </div>
40
+ </div>
41
+ <div class="rwmb-field rwmb-textarea-wrapper">
42
+ <div class="rwmb-label">
43
+ <label for=""><?php _e( 'Question Explanation', 'learnpress' ); ?></label>
44
+ </div>
45
+ <div class="rwml-input">
46
+ <div>
47
  <textarea name="explanation" id="" cols="60" rows="3"
48
  class="rwmb-textarea large-text"
49
  @change="updateMeta"
50
  v-model="question.settings.explanation"></textarea>
51
+ <p class="description"><?php _e( 'Explain why an option is true and other is false. The text will be shown when user click on \'Check answer\' button.', 'learnpress' ); ?></p>
 
52
  </div>
53
  </div>
54
+ </div>
55
+ <div class="rwmb-field rwmb-textarea-wrapper">
56
+ <div class="rwmb-label">
57
+ <label for=""><?php _e( 'Question Hint', 'learnpress' ); ?></label>
58
+ </div>
59
+ <div class="rwml-input">
60
+ <div>
61
  <textarea name="hint" id="" cols="60" rows="3" class="rwmb-textarea large-text"
62
  @change="updateMeta"
63
  v-model="question.settings.hint"></textarea>
64
+ <p class="description"><?php _e( 'Instruction for user to select the right answer. The text will be shown when users click the \'Hint\' button.', 'learnpress' ); ?></p>
 
65
  </div>
66
  </div>
67
  </div>
75
  (function (Vue, $store) {
76
 
77
  Vue.component('lp-quiz-question-meta', {
78
+ template: '#tmpl-lp-quiz-question-meta',
79
+ props: ['question'],
80
+ methods: {
81
+ // update question content
82
+ updateContent: function () {
83
+ $store.dispatch('lqs/updateQuestionContent', this.question);
84
+ },
85
+ // update question meta
86
+ updateMeta: function (e) {
87
+ $store.dispatch('lqs/updateQuestionMeta', {
88
+ question: this.question,
89
+ meta_key: e.target.name
90
+ });
91
+ },
92
+ openSettings: function (e) {
93
+ e.stopPropagation();
94
+ var $root = $(this.$el).closest('.question-settings'),
95
+ $postbox = $root.find('.postbox');
96
+ $postbox.removeClass('closed');
97
+ if (!$(e.target).hasClass('toggle')) {
98
+ return;
99
  }
100
+
101
+ var isClosed = $root.toggleClass('closed').hasClass('closed');
102
+
103
+ $store.dispatch('lqs/updateQuizQuestionsHidden', {
104
+ hidden: $('.question-settings.closed').map(function () {
105
+ return $(this).closest('.question-item').data('item-id')
106
+ }).get()
107
+ })
108
  }
109
  }
110
+ })
111
 
112
  })(Vue, LP_Quiz_Store);
113
  </script>
inc/admin/views/quiz/question-settings.php CHANGED
@@ -10,8 +10,8 @@ learn_press_admin_view( 'quiz/question-meta' );
10
  ?>
11
 
12
  <script type="text/x-template" id="tmpl-lp-quiz-question-settings">
13
- <div class="question-settings" :class="question.open ? 'table-row' : 'hide-if-js'">
14
-
15
  <template v-if="isExternal">
16
  <?php do_action( 'learn-press/quiz-editor/question-js-component' ); ?>
17
  </template>
@@ -34,6 +34,11 @@ learn_press_admin_view( 'quiz/question-meta' );
34
  isExternal: function () {
35
  return $store.getters['lqs/externalComponent'].indexOf(this.question.type.key) !== -1;
36
  }
 
 
 
 
 
37
  }
38
  })
39
  })(Vue, LP_Quiz_Store)
10
  ?>
11
 
12
  <script type="text/x-template" id="tmpl-lp-quiz-question-settings">
13
+ <div class="question-settings"
14
+ :class="[question.open ? 'table-row' : 'hide-if-js', isHiddenSettings(question.id) ? 'closed' : '']">
15
  <template v-if="isExternal">
16
  <?php do_action( 'learn-press/quiz-editor/question-js-component' ); ?>
17
  </template>
34
  isExternal: function () {
35
  return $store.getters['lqs/externalComponent'].indexOf(this.question.type.key) !== -1;
36
  }
37
+ },
38
+ methods: {
39
+ isHiddenSettings: function (id) {
40
+ return $.inArray(id, $store.getters['lqs/hiddenQuestionsSettings']) !== -1;
41
+ }
42
  }
43
  })
44
  })(Vue, LP_Quiz_Store)
inc/admin/views/quiz/question.php CHANGED
@@ -10,7 +10,8 @@ learn_press_admin_view( 'quiz/question-settings' );
10
  ?>
11
 
12
  <script type="text/x-template" id="tmpl-lp-quiz-question-item">
13
- <div :class="['question-item',question.type.key]" :data-item-id="question.id" :data-question-order="index">
 
14
  <lp-quiz-question-actions :question="question" :index="index" @nav="navItem"></lp-quiz-question-actions>
15
  <lp-quiz-question-settings :question="question" :index="index"></lp-quiz-question-settings>
16
  </div>
@@ -46,6 +47,9 @@ learn_press_admin_view( 'quiz/question-settings' );
46
  nav: function (position) {
47
  var element = 'div[data-question-order=' + position + ']';
48
  ($(element).find('.name input')).focus();
 
 
 
49
  }
50
  }
51
  });
10
  ?>
11
 
12
  <script type="text/x-template" id="tmpl-lp-quiz-question-item">
13
+ <div :class="['question-item',question.type.key, isNew() ? 'empty-question' : '']" :data-item-id="question.id"
14
+ :data-question-order="index">
15
  <lp-quiz-question-actions :question="question" :index="index" @nav="navItem"></lp-quiz-question-actions>
16
  <lp-quiz-question-settings :question="question" :index="index"></lp-quiz-question-settings>
17
  </div>
47
  nav: function (position) {
48
  var element = 'div[data-question-order=' + position + ']';
49
  ($(element).find('.name input')).focus();
50
+ },
51
+ isNew: function () {
52
+ return isNaN(this.question.id);
53
  }
54
  }
55
  });
inc/admin/views/svg-icon.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Template for displaying icon with six dots in 2 columns.
4
+ *
5
+ * @author ThimPress
6
+ * @package LearnPress/Admin/Views
7
+ * @version 3.0.0
8
+ */
9
+ defined( 'ABSPATH' ) or die();
10
+
11
+ $viewBox = isset( $viewBox ) ? $viewBox : '0 0 32 32';
12
+ $class = isset( $class ) ? $class : 'svg-icon';
13
+ ?>
14
+ <svg class="<?php echo $class; ?>" viewBox="<?php echo $viewBox; ?>">
15
+ <path d="M 14 5.5 a 3 3 0 1 1 -3 -3 A 3 3 0 0 1 14 5.5 Z m 7 3 a 3 3 0 1 0 -3 -3 A 3 3 0 0 0 21 8.5 Z m -10 4 a 3 3 0 1 0 3 3 A 3 3 0 0 0 11 12.5 Z m 10 0 a 3 3 0 1 0 3 3 A 3 3 0 0 0 21 12.5 Z m -10 10 a 3 3 0 1 0 3 3 A 3 3 0 0 0 11 22.5 Z m 10 0 a 3 3 0 1 0 3 3 A 3 3 0 0 0 21 22.5 Z"></path>
16
+ </svg>
inc/class-lp-hard-cache.php CHANGED
@@ -24,6 +24,9 @@ class LP_Hard_Cache {
24
  */
25
  protected static $_lock = false;
26
 
 
 
 
27
  protected static $_hard_lock = false;
28
 
29
  /**
24
  */
25
  protected static $_lock = false;
26
 
27
+ /**
28
+ * @var bool
29
+ */
30
  protected static $_hard_lock = false;
31
 
32
  /**
inc/class-lp-install.php CHANGED
@@ -109,6 +109,10 @@ if ( ! function_exists( 'LP_Install' ) ) {
109
  return;
110
  }
111
 
 
 
 
 
112
  // Show message if the latest version is not already updated
113
  add_action( 'admin_notices', array( __CLASS__, 'check_update_message' ) );
114
  }
109
  return;
110
  }
111
 
112
+ if(version_compare($latest_ver, LEARNPRESS_VERSION)){
113
+ return;
114
+ }
115
+
116
  // Show message if the latest version is not already updated
117
  add_action( 'admin_notices', array( __CLASS__, 'check_update_message' ) );
118
  }
inc/class-lp-settings.php CHANGED
@@ -79,34 +79,21 @@ class LP_Settings {
79
  * @param bool $force
80
  */
81
  protected function _load_options( $force = false ) {
82
- $_options = wp_load_alloptions();
83
- // foreach ( $_options as $k => $v ) {
84
- // $this->_options[ $k ] = maybe_unserialize( $v );
85
- // }
86
-
87
- $this->_options = $_options;
88
-
89
- // if ( ( false === ( $_options = wp_cache_get( 'options', 'lp-options' ) ) ) || $force ) {
90
- // global $wpdb;
91
- // $query = $wpdb->prepare( "
92
- // SELECT option_name, option_value
93
- // FROM {$wpdb->options}
94
- // WHERE option_name LIKE %s
95
- // ", 'learn_press_%' );
96
- // if ( $options = $wpdb->get_results( $query ) ) {
97
- // foreach ( $options as $option ) {
98
- // $this->_options[ $option->option_name ] = maybe_unserialize( $option->option_value );
99
- // }
100
- // }
101
- // foreach ( array( 'learn_press_permalink_structure', 'learn_press_install' ) as $option ) {
102
- // if ( empty( $this->_options[ $option ] ) ) {
103
- // $this->_options[ $option ] = '';
104
- // }
105
- // }
106
- // wp_cache_set( 'options', $this->_options, 'lp-options' );
107
- // } else {
108
- // $this->_options = $_options;
109
- // }
110
  }
111
 
112
  /**
@@ -116,6 +103,9 @@ class LP_Settings {
116
  * @param $value
117
  */
118
  public function set( $name, $value ) {
 
 
 
119
  $this->_set_option( $this->_options, $name, $value );
120
  }
121
 
79
  * @param bool $force
80
  */
81
  protected function _load_options( $force = false ) {
82
+
83
+ //$this->_options = wp_load_alloptions();
84
+
85
+ global $wpdb;
86
+ $query = $wpdb->prepare( "
87
+ SELECT option_name, option_value
88
+ FROM {$wpdb->options}
89
+ WHERE option_name LIKE %s
90
+ ", $wpdb->esc_like( $this->_prefix ) . '%' );
91
+
92
+ if ( $options = $wpdb->get_results( $query ) ) {
93
+ foreach ( $options as $option ) {
94
+ $this->_options[ $option->option_name ] = maybe_unserialize( $option->option_value );
95
+ }
96
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
97
  }
98
 
99
  /**
103
  * @param $value
104
  */
105
  public function set( $name, $value ) {
106
+ if ( $this->_prefix && strpos( $name, $this->_prefix ) === false ) {
107
+ $name = $this->_prefix . $name;
108
+ }
109
  $this->_set_option( $this->_options, $name, $value );
110
  }
111
 
inc/course/abstract-course.php CHANGED
@@ -239,6 +239,11 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
239
  )
240
  );
241
  $image = false;
 
 
 
 
 
242
  if ( has_post_thumbnail( $this->get_id() ) ) {
243
  $image = get_the_post_thumbnail( $this->get_id(), $size, $attr );
244
  } elseif ( ( $parent_id = wp_get_post_parent_id( $this->get_id() ) ) && has_post_thumbnail( $parent_id ) ) {
@@ -843,7 +848,7 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
843
  public function is_in_stock() {
844
  $in_stock = true;
845
  if ( $max_allowed = $this->get_max_students() ) {
846
- $in_stock = $max_allowed > $this->count_in_order();
847
  }
848
 
849
  return apply_filters( 'learn-press/is-in-stock', $in_stock, $this->get_id() );
@@ -1755,7 +1760,7 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
1755
  }
1756
 
1757
  public function get_external_link_text() {
1758
- return apply_filters( 'learn-press/course-external-link-text', _x( 'Buy this course','Text of Buy this course with external link', 'learnpress' ), $this->get_id() );
1759
  }
1760
 
1761
  /**
239
  )
240
  );
241
  $image = false;
242
+
243
+ if ( 'yes' !== LP()->settings->get( 'archive_course_thumbnail' ) && in_array( $size, learn_press_get_custom_thumbnail_sizes() ) ) {
244
+ $size = '';
245
+ }
246
+
247
  if ( has_post_thumbnail( $this->get_id() ) ) {
248
  $image = get_the_post_thumbnail( $this->get_id(), $size, $attr );
249
  } elseif ( ( $parent_id = wp_get_post_parent_id( $this->get_id() ) ) && has_post_thumbnail( $parent_id ) ) {
848
  public function is_in_stock() {
849
  $in_stock = true;
850
  if ( $max_allowed = $this->get_max_students() ) {
851
+ $in_stock = $max_allowed > $this->count_in_order();
852
  }
853
 
854
  return apply_filters( 'learn-press/is-in-stock', $in_stock, $this->get_id() );
1760
  }
1761
 
1762
  public function get_external_link_text() {
1763
+ return apply_filters( 'learn-press/course-external-link-text', _x( 'Buy this course', 'Text of Buy this course with external link', 'learnpress' ), $this->get_id() );
1764
  }
1765
 
1766
  /**
inc/course/class-lp-course-item.php CHANGED
@@ -106,7 +106,7 @@ if ( ! class_exists( 'LP_Course_Item' ) ) {
106
  public function get_format() {
107
  $format = ( false !== ( $format = wp_cache_get( 'item-format-' . $this->get_id(), 'lp-item-formats' ) ) ) ? $format : get_post_format( $this->get_id() );
108
 
109
- if(!$format){
110
  $format = 'standard';
111
  }
112
 
@@ -186,6 +186,11 @@ if ( ! class_exists( 'LP_Course_Item' ) ) {
186
  break;
187
  case 'completed':
188
  $defaults[] = $item_grade;
 
 
 
 
 
189
  }
190
  }
191
  }
@@ -204,7 +209,6 @@ if ( ! class_exists( 'LP_Course_Item' ) ) {
204
  $classes = is_array( $classes ) ? $classes : explode( ' ', $classes );
205
  $classes = array_filter( $classes );
206
  $classes = array_unique( $classes );
207
-
208
  return $classes;
209
  }
210
 
106
  public function get_format() {
107
  $format = ( false !== ( $format = wp_cache_get( 'item-format-' . $this->get_id(), 'lp-item-formats' ) ) ) ? $format : get_post_format( $this->get_id() );
108
 
109
+ if ( ! $format ) {
110
  $format = 'standard';
111
  }
112
 
186
  break;
187
  case 'completed':
188
  $defaults[] = $item_grade;
189
+ break;
190
+ default:
191
+ if ( $item_class = apply_filters( 'learn-press/course-item-status-class', $item_status, $item_grade, $this->get_item_type(), $this->get_id(), $course_id ) ) {
192
+ $defaults[] = $item_class;
193
+ }
194
  }
195
  }
196
  }
209
  $classes = is_array( $classes ) ? $classes : explode( ' ', $classes );
210
  $classes = array_filter( $classes );
211
  $classes = array_unique( $classes );
 
212
  return $classes;
213
  }
214
 
inc/course/lp-course-functions.php CHANGED
@@ -880,16 +880,18 @@ if ( ! function_exists( 'learn_press_course_item_type_link' ) ) {
880
  }
881
  remove_filter( 'post_type_link', 'learn_press_course_item_type_link', 10 );
882
 
883
- if ( $post->post_type !== LP_QUIZ_CPT && $post->post_type !== LP_LESSON_CPT ) {
884
  return $permalink;
885
  }
886
 
887
  $course_id = learn_press_get_item_course_id( $post->ID, $post->post_type );
 
888
  if ( $course_id ) {
889
  $permalink = learn_press_get_course_item_url( $course_id, $post->ID );
890
  } else {
891
  $permalink = learn_press_get_sample_link_course_item_url( $post->ID );
892
  }
 
893
  LP()->global['item_permalinks'][ $post->ID ] = $permalink;
894
  add_filter( 'post_type_link', 'learn_press_course_item_type_link', 10, 2 );
895
 
@@ -966,9 +968,9 @@ function learn_press_course_passing_condition( $value, $format, $course_id ) {
966
  $quiz = learn_press_get_quiz( $quiz_id );
967
  $value = absint( $quiz->get_passing_grade() );
968
 
969
- if($format){
970
- $value = "{$value}%";
971
- }
972
  }
973
 
974
  return $value;
@@ -1079,4 +1081,8 @@ function learn_press_mark_user_just_logged_in() {
1079
  LP()->session->set( 'user_just_logged_in', 'yes' );
1080
  }
1081
 
1082
- add_action( 'wp_login', 'learn_press_mark_user_just_logged_in' );
 
 
 
 
880
  }
881
  remove_filter( 'post_type_link', 'learn_press_course_item_type_link', 10 );
882
 
883
+ if ( ! in_array( $post->post_type, learn_press_course_get_support_item_types( true ) ) ) {
884
  return $permalink;
885
  }
886
 
887
  $course_id = learn_press_get_item_course_id( $post->ID, $post->post_type );
888
+
889
  if ( $course_id ) {
890
  $permalink = learn_press_get_course_item_url( $course_id, $post->ID );
891
  } else {
892
  $permalink = learn_press_get_sample_link_course_item_url( $post->ID );
893
  }
894
+
895
  LP()->global['item_permalinks'][ $post->ID ] = $permalink;
896
  add_filter( 'post_type_link', 'learn_press_course_item_type_link', 10, 2 );
897
 
968
  $quiz = learn_press_get_quiz( $quiz_id );
969
  $value = absint( $quiz->get_passing_grade() );
970
 
971
+ if ( $format ) {
972
+ $value = "{$value}%";
973
+ }
974
  }
975
 
976
  return $value;
1081
  LP()->session->set( 'user_just_logged_in', 'yes' );
1082
  }
1083
 
1084
+ add_action( 'wp_login', 'learn_press_mark_user_just_logged_in' );
1085
+
1086
+ function learn_press_get_custom_thumbnail_sizes() {
1087
+ return apply_filters( 'learn-press/custom-thumbnail-sizes', array( 'archive_course_thumbnail' => 'course_thumbnail' ) );
1088
+ }
inc/curds/class-lp-quiz-curd.php CHANGED
@@ -213,14 +213,17 @@ if ( ! function_exists( 'LP_Quiz_CURD' ) ) {
213
 
214
  $format = array_fill( 0, sizeof( $quiz_ids ), '%d' );
215
  $questions = array_fill_keys( $quiz_ids, array() );
 
 
216
 
217
  $query = $wpdb->prepare( "
218
  SELECT p.*, qq.quiz_id, qq.question_order AS `order`
219
  FROM {$wpdb->posts} p
220
  INNER JOIN {$wpdb->prefix}learnpress_quiz_questions qq ON p.ID = qq.question_id
221
  WHERE qq.quiz_id IN(" . join( ',', $format ) . ")
 
222
  ORDER BY question_order ASC
223
- ", $quiz_ids );
224
 
225
  $question_ids = array();
226
 
@@ -318,7 +321,7 @@ if ( ! function_exists( 'LP_Quiz_CURD' ) ) {
318
  * Reorder question by indexed number.
319
  *
320
  * @param LP_Quiz|WP_Post|int $the_quiz
321
- * @param mixed $questions
322
  *
323
  * @return mixed
324
  */
@@ -388,7 +391,7 @@ if ( ! function_exists( 'LP_Quiz_CURD' ) ) {
388
  *
389
  * @param LP_Quiz|int $the_quiz
390
  * @param $question_id
391
- * @param array $args
392
  *
393
  * @return mixed false on failed
394
  */
@@ -448,7 +451,7 @@ if ( ! function_exists( 'LP_Quiz_CURD' ) ) {
448
  /**
449
  * Check if a question (or batch of questions) is already added to quiz.
450
  *
451
- * @param int $the_id
452
  * @param int|array $ids
453
  *
454
  * @return array|bool|null|object
213
 
214
  $format = array_fill( 0, sizeof( $quiz_ids ), '%d' );
215
  $questions = array_fill_keys( $quiz_ids, array() );
216
+ $args = $quiz_ids;
217
+ $args[] = 'publish';
218
 
219
  $query = $wpdb->prepare( "
220
  SELECT p.*, qq.quiz_id, qq.question_order AS `order`
221
  FROM {$wpdb->posts} p
222
  INNER JOIN {$wpdb->prefix}learnpress_quiz_questions qq ON p.ID = qq.question_id
223
  WHERE qq.quiz_id IN(" . join( ',', $format ) . ")
224
+ AND p.post_status = %s
225
  ORDER BY question_order ASC
226
+ ", $args );
227
 
228
  $question_ids = array();
229
 
321
  * Reorder question by indexed number.
322
  *
323
  * @param LP_Quiz|WP_Post|int $the_quiz
324
+ * @param mixed $questions
325
  *
326
  * @return mixed
327
  */
391
  *
392
  * @param LP_Quiz|int $the_quiz
393
  * @param $question_id
394
+ * @param array $args
395
  *
396
  * @return mixed false on failed
397
  */
451
  /**
452
  * Check if a question (or batch of questions) is already added to quiz.
453
  *
454
+ * @param int $the_id
455
  * @param int|array $ids
456
  *
457
  * @return array|bool|null|object
inc/curds/class-lp-section-curd.php CHANGED
@@ -322,13 +322,18 @@ class LP_Section_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
322
  // course author, for case co-instructor add new items
323
  $author_id = get_post_field( 'post_author', $this->course_id ) ? get_post_field( 'post_author', $this->course_id ) : learn_press_get_current_user_id();
324
 
325
- $item = wp_parse_args( $item, array( 'title' => '', 'type' => '' ) );
 
326
 
327
  $args = array(
328
  'title' => $item['title'],
329
  'author' => $author_id
330
  );
331
 
 
 
 
 
332
  if ( $item['type'] == LP_LESSON_CPT ) {
333
  $lesson_curd = new LP_Lesson_CURD();
334
  $item['id'] = $lesson_curd->create( $args );
@@ -398,16 +403,21 @@ class LP_Section_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
398
 
399
  // get WP Post
400
  $post = get_post( $item['id'] );
401
- $result[] = array(
402
- 'id' => $post->ID,
403
- 'title' => $post->post_title,
404
- 'type' => $post->post_type,
405
- 'preview' => get_post_meta( $post->ID, '_lp_preview', true ) == 'yes'
 
 
 
406
  );
407
 
408
  $order ++;
409
  }
410
 
 
 
411
  return $result;
412
  }
413
 
322
  // course author, for case co-instructor add new items
323
  $author_id = get_post_field( 'post_author', $this->course_id ) ? get_post_field( 'post_author', $this->course_id ) : learn_press_get_current_user_id();
324
 
325
+ //$item = wp_parse_args( $item, array( 'title' => '', 'type' => '' ) );
326
+ $item = array_merge( array( 'title' => '', 'type' => '' ), $item );
327
 
328
  $args = array(
329
  'title' => $item['title'],
330
  'author' => $author_id
331
  );
332
 
333
+ if ( ! empty( $item['id'] ) ) {
334
+ $item['old_id'] = $item ['id'];
335
+ }
336
+
337
  if ( $item['type'] == LP_LESSON_CPT ) {
338
  $lesson_curd = new LP_Lesson_CURD();
339
  $item['id'] = $lesson_curd->create( $args );
403
 
404
  // get WP Post
405
  $post = get_post( $item['id'] );
406
+ $result[] = array_merge(
407
+ $item,
408
+ array(
409
+ 'id' => $post->ID,
410
+ 'title' => $post->post_title,
411
+ 'type' => $post->post_type,
412
+ 'preview' => get_post_meta( $post->ID, '_lp_preview', true ) == 'yes'
413
+ )
414
  );
415
 
416
  $order ++;
417
  }
418
 
419
+ wp_cache_set( 'course-' . $this->course_id . '-' . $section_id, $all_items, 'lp-course-section-items' );
420
+
421
  return $result;
422
  }
423
 
inc/custom-post-types/abstract.php CHANGED
@@ -93,6 +93,7 @@ abstract class LP_Abstract_Post_Type {
93
  add_action( 'admin_footer-post.php', array( $this, 'print_js_template' ) );
94
  add_action( 'admin_footer-post-new.php', array( $this, 'print_js_template' ) );
95
  add_action( 'pre_get_posts', array( $this, 'update_default_meta' ) );
 
96
 
97
  add_filter( 'post_updated_messages', array( $this, 'updated_messages' ) );
98
 
@@ -115,6 +116,115 @@ abstract class LP_Abstract_Post_Type {
115
  add_action( 'init', array( $this, 'maybe_remove_features' ), 1000 );
116
  }
117
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
118
  public function maybe_remove_features() {
119
  if ( ! $this->_remove_features ) {
120
  return;
@@ -194,6 +304,13 @@ abstract class LP_Abstract_Post_Type {
194
  * @return bool
195
  */
196
  public function _do_save( $post_id, $post = null ) {
 
 
 
 
 
 
 
197
  if ( get_post_type( $post_id ) != $this->_post_type ) {
198
  return false;
199
  }
@@ -207,6 +324,13 @@ abstract class LP_Abstract_Post_Type {
207
  return $post_id;
208
  }
209
 
 
 
 
 
 
 
 
210
  /**
211
  * Ouput meta boxes.
212
  *
@@ -333,6 +457,79 @@ abstract class LP_Abstract_Post_Type {
333
 
334
  }
335
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
336
  /**
337
  * @param string $fields
338
  *
93
  add_action( 'admin_footer-post.php', array( $this, 'print_js_template' ) );
94
  add_action( 'admin_footer-post-new.php', array( $this, 'print_js_template' ) );
95
  add_action( 'pre_get_posts', array( $this, 'update_default_meta' ) );
96
+ add_action( 'admin_footer', array( $this, 'admin_footer_scripts' ) );
97
 
98
  add_filter( 'post_updated_messages', array( $this, 'updated_messages' ) );
99
 
116
  add_action( 'init', array( $this, 'maybe_remove_features' ), 1000 );
117
  }
118
 
119
+ public function get_post_type() {
120
+ $post_type = get_post_type();
121
+ if ( ! $post_type ) {
122
+ $post_type = LP_Request::get_string( 'post_type' );
123
+ }
124
+
125
+ return $post_type;
126
+ }
127
+
128
+ public function admin_footer_scripts() {
129
+
130
+ global $pagenow;
131
+
132
+ if ( $this->get_post_type() !== $this->_post_type ) {
133
+ return;
134
+ }
135
+
136
+ $user = learn_press_get_current_user();
137
+
138
+ if ( ! $user->is_admin() ) {
139
+ return;
140
+ }
141
+
142
+ if ( $pagenow === 'edit.php' ) {
143
+ $option = sprintf( '<option value="">%s</option>', __( 'Search by user', 'learnpress' ) );
144
+
145
+ if ( $user = get_user_by( 'id', LP_Request::get_int( 'author' ) ) ) {
146
+ $option = sprintf( '<option value="%d" selected="selected">%s</option>', $user->ID, $user->user_login );
147
+ }
148
+ ?>
149
+ <script>
150
+ jQuery(function ($) {
151
+ var $input = $('#post-search-input'),
152
+ $form = $($input[0].form),
153
+ $select = $('<select name="author" id="author"></select>').append('<?php echo $option;?>').insertAfter($input).select2({
154
+ ajax: {
155
+ url: window.location.href + '&lp-ajax=search-authors',
156
+ dataType: 'json',
157
+ s: ''
158
+ },
159
+ placeholder: '<?php echo __( 'Search by user', 'learnpress' );?>',
160
+ minimumInputLength: 3,
161
+ allowClear: true
162
+ }).on('select2:select', function () {
163
+ $('input[name="author"]').val($select.val())
164
+ });
165
+
166
+ $form.on('submit', function () {
167
+ var url = window.location.href.removeQueryVar('author').addQueryVar('author', $select.val());
168
+
169
+ })
170
+ })</script>
171
+ <?php
172
+ }
173
+
174
+ if ( $pagenow === 'post.php' ) {
175
+ ?>
176
+ <script>
177
+ jQuery(function ($) {
178
+ var isAssigned = '<?php echo $this->is_assigned();?>',
179
+ $postStatus = $('#post_status'),
180
+ $message = $('<p class="learn-press-notice-assigned-item"></p>').html(isAssigned),
181
+ currentStatus = $postStatus.val();
182
+
183
+ (currentStatus === 'publish') && isAssigned && $postStatus.on('change', function () {
184
+ if (this.value !== 'publish') {
185
+ $message.insertBefore($('#post-status-select'));
186
+ } else {
187
+ $message.remove();
188
+ }
189
+ });
190
+
191
+ })
192
+ </script>
193
+ <?php
194
+ }
195
+ }
196
+
197
+ public function is_assigned() {
198
+ global $wpdb;
199
+ $post_type = $this->get_post_type();
200
+ if ( learn_press_is_support_course_item_type( $post_type ) ) {
201
+ $query = $wpdb->prepare( "
202
+ SELECT s.section_course_id
203
+ FROM {$wpdb->learnpress_section_items} si
204
+ INNER JOIN {$wpdb->learnpress_sections} s ON s.section_id = si.section_id
205
+ INNER JOIN {$wpdb->posts} p ON p.ID = si.item_id
206
+ WHERE p.ID = %d
207
+ ", get_the_ID() );
208
+
209
+ if ( $course_id = $wpdb->get_var( $query ) ) {
210
+ return __( 'This item has already assigned to course. It will be removed from course if it is not publish.', 'learnpress' );
211
+ }
212
+ } elseif ( LP_QUESTION_CPT === $post_type ) {
213
+ $query = $wpdb->prepare( "
214
+ SELECT p.ID
215
+ FROM {$wpdb->posts} p
216
+ INNER JOIN {$wpdb->learnpress_quiz_questions} qq ON p.ID = qq.quiz_id
217
+ WHERE qq.question_id = %d
218
+ ", get_the_ID() );
219
+
220
+ if ( $quiz_id = $wpdb->get_var( $query ) ) {
221
+ return __( 'This question has already assigned to quiz. It will be removed from quiz if it is not publish.', 'learnpress' );
222
+ }
223
+ }
224
+
225
+ return 0;
226
+ }
227
+
228
  public function maybe_remove_features() {
229
  if ( ! $this->_remove_features ) {
230
  return;
304
  * @return bool
305
  */
306
  public function _do_save( $post_id, $post = null ) {
307
+
308
+ // Flush the Hard Cache to applies new changes
309
+ LP_Hard_Cache::flush();
310
+
311
+ // Maybe remove
312
+ $this->maybe_remove_assigned( $post_id );
313
+
314
  if ( get_post_type( $post_id ) != $this->_post_type ) {
315
  return false;
316
  }
324
  return $post_id;
325
  }
326
 
327
+ public function maybe_remove_assigned( $post_id ) {
328
+ $post = get_post( $post_id );
329
+ if ( 'publish' === $post->post_status ) {
330
+ return;
331
+ }
332
+ }
333
+
334
  /**
335
  * Ouput meta boxes.
336
  *
457
 
458
  }
459
 
460
+ /**
461
+ * Filter item by the course selected.
462
+ *
463
+ * @since 3.0.7
464
+ *
465
+ * @return bool|int
466
+ */
467
+ protected function _filter_items_by_course() {
468
+ $course_id = ! empty( $_REQUEST['course'] ) ? absint( $_REQUEST['course'] ) : false;
469
+
470
+ if ( ! $course_id ) {
471
+ global $post_type;
472
+ if ( ! learn_press_is_support_course_item_type( $post_type ) ) {
473
+ $course_id = false;
474
+ }
475
+ }
476
+
477
+ return $course_id;
478
+ }
479
+
480
+ /**
481
+ * @return mixed
482
+ */
483
+ protected function _get_course_column_title() {
484
+ global $post_type;
485
+
486
+ if ( ! learn_press_is_support_course_item_type( $post_type ) ) {
487
+ return false;
488
+ }
489
+
490
+ $title = __( 'Course', 'learnpress' );
491
+
492
+ if ( $course_id = $this->_filter_items_by_course() ) {
493
+ if ( $course = learn_press_get_course( $course_id ) ) {
494
+ $count = $course->count_items( $this->_post_type );
495
+ $post_object = get_post_type_object( $post_type );
496
+ $title = sprintf( _n( 'Course (%d %s)', 'Course (%d %s)', $count, 'learnpress' ), $count, $count > 1 ? $post_object->label : $post_object->labels->singular_name );
497
+ }
498
+ }
499
+
500
+ return $title;
501
+ }
502
+
503
+ /**
504
+ * Get course that the items is contained.
505
+ *
506
+ * @param $post_id
507
+ */
508
+ protected function _get_item_course( $post_id ) {
509
+ $courses = learn_press_get_item_courses( $post_id );
510
+ if ( $courses ) {
511
+ foreach ( $courses as $course ) {
512
+ echo '<div><a href="' . esc_url( remove_query_arg( 'orderby', add_query_arg( array( 'course' => $course->ID ) ) ) ) . '">' . get_the_title( $course->ID ) . '</a>';
513
+ echo '<div class="row-actions">';
514
+ printf( '<a href="%s">%s</a>', admin_url( sprintf( 'post.php?post=%d&action=edit', $course->ID ) ), __( 'Edit', 'learnpress' ) );
515
+ echo "&nbsp;|&nbsp;";
516
+ printf( '<a href="%s">%s</a>', get_the_permalink( $course->ID ), __( 'View', 'learnpress' ) );
517
+
518
+ if ( $this->_filter_items_by_course() ) {
519
+ echo "&nbsp;|&nbsp;";
520
+ printf( '<a href="%s">%s</a>', remove_query_arg( array(
521
+ 'course',
522
+ 'orderby'
523
+ ) ), __( 'Remove Filter', 'learnpress' ) );
524
+ }
525
+ echo '</div></div>';
526
+ }
527
+
528
+ } else {
529
+ _e( 'Not assigned yet', 'learnpress' );
530
+ }
531
+ }
532
+
533
  /**
534
  * @param string $fields
535
  *
inc/custom-post-types/course.php CHANGED
@@ -53,7 +53,9 @@ if ( ! class_exists( 'LP_Course_Post_Type' ) ) {
53
  add_action( 'load-post.php', array( $this, 'post_actions' ) );
54
  add_filter( 'get_edit_post_link', array( $this, 'add_course_tab_arg' ) );
55
  add_filter( "rwmb__lpr_course_price_html", array( $this, 'currency_symbol' ), 5, 3 );
56
- add_filter( 'posts_where_paged', array( $this, 'posts_where_paged' ), 10 );
 
 
57
 
58
  if ( self::$_enable_review ) {
59
  add_action( 'post_submitbox_start', array( $this, 'post_review_message_box' ) );
@@ -61,6 +63,53 @@ if ( ! class_exists( 'LP_Course_Post_Type' ) ) {
61
 
62
  add_action( 'edit_form_after_editor', array( $this, 'template_course_editor' ) );
63
  add_action( 'learn-press/admin/after-enqueue-scripts', array( $this, 'data_course_editor' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  }
65
 
66
  /**
@@ -188,38 +237,7 @@ if ( ! class_exists( 'LP_Course_Post_Type' ) ) {
188
  if ( LP_COURSE_CPT !== get_post_type() ) {
189
  return;
190
  }
191
- global $post;
192
- $course = learn_press_get_course( $post->ID );
193
 
194
- $hidden_sections = get_post_meta( $post->ID, '_admin_hidden_sections', true );
195
- wp_localize_script( 'learn-press-admin-course-editor', 'lp_course_editor', apply_filters( 'learn-press/admin-localize-course-editor', array(
196
- 'root' => array(
197
- 'course_id' => $post->ID,
198
- 'auto_draft' => get_post_status( $post->ID ) == 'auto-draft',
199
- 'ajax' => admin_url( '' ),
200
- 'disable_curriculum' => false,
201
- 'action' => 'admin_course_editor',
202
- 'nonce' => wp_create_nonce( 'learnpress_update_curriculum' ),
203
- ),
204
- 'chooseItems' => array(
205
- 'types' => learn_press_course_get_support_item_types(),
206
- 'open' => false,
207
- 'addedItems' => array(),
208
- 'items' => array(),
209
- ),
210
- 'i18n' => array(
211
- 'item' => __( 'item', 'learnpress' ),
212
- 'new_section_item' => __( 'Create a new', 'learnpress' ),
213
- 'back' => __( 'Back', 'learnpress' ),
214
- 'selected_items' => __( 'Selected items', 'learnpress' ),
215
- ),
216
- 'sections' => array(
217
- 'sections' => $course->get_curriculum_raw(),
218
- 'hidden_sections' => ! empty( $hidden_sections ) ? $hidden_sections : array(),
219
- 'urlEdit' => admin_url( 'post.php?action=edit&post=' ),
220
- )
221
- )
222
- ) );
223
  }
224
 
225
  /**
@@ -387,16 +405,41 @@ if ( ! class_exists( 'LP_Course_Post_Type' ) ) {
387
  return $fields;
388
  }
389
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
390
  /**
391
  * @param $join
392
  *
393
  * @return string
394
  */
395
  public function posts_join_paged( $join ) {
 
 
396
  if ( ! $this->_is_archive() ) {
397
  return $join;
398
  }
399
- global $wpdb;
400
  $join .= " LEFT JOIN {$wpdb->postmeta} pm_price ON pm_price.post_id = {$wpdb->posts}.ID AND pm_price.meta_key = '_lp_price'";
401
 
402
  return $join;
@@ -408,13 +451,12 @@ if ( ! class_exists( 'LP_Course_Post_Type' ) ) {
408
  * @return mixed|string
409
  */
410
  public function posts_where_paged( $where ) {
 
411
 
412
  if ( ! $this->_is_archive() ) {
413
  return $where;
414
  }
415
 
416
- global $wpdb;
417
-
418
  if ( array_key_exists( 'filter_price', $_REQUEST ) ) {
419
  if ( $_REQUEST['filter_price'] == 0 ) {
420
  $where .= " AND ( pm_price.meta_value IS NULL || pm_price.meta_value = 0 )";
@@ -423,7 +465,6 @@ if ( ! class_exists( 'LP_Course_Post_Type' ) ) {
423
  }
424
  }
425
 
426
- //if ( get_post_type() == LP_COURSE_CPT ) {
427
  $not_in = $wpdb->prepare( "
428
  SELECT ID
429
  FROM {$wpdb->posts} p
@@ -433,9 +474,6 @@ if ( ! class_exists( 'LP_Course_Post_Type' ) ) {
433
 
434
  $where .= " AND {$wpdb->posts}.ID NOT IN( {$not_in} )";
435
 
436
- //}
437
-
438
-
439
  return $where;
440
  }
441
 
@@ -847,7 +885,7 @@ if ( ! class_exists( 'LP_Course_Post_Type' ) ) {
847
  $meta_box['fields'],
848
  array(
849
  array(
850
- 'name' => __( 'No require enrollment', 'learnpress' ),
851
  'id' => '_lp_required_enroll',
852
  'type' => 'yes_no',
853
  'desc' => __( 'Require users logged in to study or public to all.', 'learnpress' ),
@@ -1330,7 +1368,7 @@ if ( ! class_exists( 'LP_Course_Post_Type' ) ) {
1330
  echo sprintf( '<a href="%s" class="price">%s%s</a>', add_query_arg( 'filter_price', 0 ), $origin_price, __( 'Free', 'learnpress' ) );
1331
 
1332
  if ( ! $course->is_required_enroll() ) {
1333
- printf( '<p class="description">(%s)</p>', __( 'No required enroll', 'learnpress' ) );
1334
  }
1335
  }
1336
  break;
53
  add_action( 'load-post.php', array( $this, 'post_actions' ) );
54
  add_filter( 'get_edit_post_link', array( $this, 'add_course_tab_arg' ) );
55
  add_filter( "rwmb__lpr_course_price_html", array( $this, 'currency_symbol' ), 5, 3 );
56
+ //add_filter( 'posts_where_paged', array( $this, 'posts_where_paged' ), 10 );
57
+ add_filter( 'posts_where_paged', array( $this, '_posts_where_paged_course_items' ), 10 );
58
+ add_filter( 'posts_join_paged', array( $this, '_posts_join_paged_course_items' ), 10 );
59
 
60
  if ( self::$_enable_review ) {
61
  add_action( 'post_submitbox_start', array( $this, 'post_review_message_box' ) );
63
 
64
  add_action( 'edit_form_after_editor', array( $this, 'template_course_editor' ) );
65
  add_action( 'learn-press/admin/after-enqueue-scripts', array( $this, 'data_course_editor' ) );
66
+ add_action( 'admin_enqueue_scripts', array( $this, 'add_script_data' ) );
67
+ }
68
+
69
+ public function add_script_data() {
70
+ global $post;
71
+
72
+ if ( empty( $post ) || ( get_post_type() !== $this->_post_type ) ) {
73
+ return;
74
+ }
75
+
76
+ $course = learn_press_get_course( $post->ID );
77
+ $hidden_sections = get_post_meta( $post->ID, '_admin_hidden_sections', true );
78
+
79
+ $data = apply_filters( 'learn-press/admin-localize-course-editor', array(
80
+ 'root' => array(
81
+ 'course_id' => $post->ID,
82
+ 'auto_draft' => get_post_status( $post->ID ) == 'auto-draft',
83
+ 'ajax' => admin_url( '' ),
84
+ 'disable_curriculum' => false,
85
+ 'action' => 'admin_course_editor',
86
+ 'nonce' => wp_create_nonce( 'learnpress_update_curriculum' ),
87
+ ),
88
+ 'chooseItems' => array(
89
+ 'types' => learn_press_course_get_support_item_types(),
90
+ 'open' => false,
91
+ 'addedItems' => array(),
92
+ 'items' => array(),
93
+ ),
94
+ 'i18n' => array(
95
+ 'item' => __( 'item', 'learnpress' ),
96
+ 'new_section_item' => __( 'Create a new', 'learnpress' ),
97
+ 'back' => __( 'Back', 'learnpress' ),
98
+ 'selected_items' => __( 'Selected items', 'learnpress' ),
99
+ 'confirm_trash_item' => __( 'Do you want to remove item "{{ITEM_NAME}}" to trash?', 'learnpress' ),
100
+ 'item_labels' => array(
101
+ 'singular' => __( 'Item', 'learnpress' ),
102
+ 'plural' => __( 'Items', 'learnpress' ),
103
+ )
104
+ ),
105
+ 'sections' => array(
106
+ 'sections' => $course->get_curriculum_raw(),
107
+ 'hidden_sections' => ! empty( $hidden_sections ) ? $hidden_sections : array(),
108
+ 'urlEdit' => admin_url( 'post.php?action=edit&post=' ),
109
+ )
110
+ ) );
111
+
112
+ learn_press_admin_assets()->add_script_data( 'learn-press-admin-course-editor', $data );
113
  }
114
 
115
  /**
237
  if ( LP_COURSE_CPT !== get_post_type() ) {
238
  return;
239
  }
 
 
240
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
241
  }
242
 
243
  /**
405
  return $fields;
406
  }
407
 
408
+ public function _posts_join_paged_course_items( $join ) {
409
+ global $wpdb;
410
+
411
+ if ( ( $course_id = $this->_filter_items_by_course() ) || ( LP_Request::get( 'orderby' ) == 'course-name' ) ) {
412
+ $join .= " LEFT JOIN {$wpdb->prefix}learnpress_section_items si ON {$wpdb->posts}.ID = si.item_id";
413
+ $join .= " LEFT JOIN {$wpdb->prefix}learnpress_sections s ON s.section_id = si.section_id";
414
+ $join .= " LEFT JOIN {$wpdb->posts} c ON c.ID = s.section_course_id";
415
+ }
416
+
417
+ return $join;
418
+ }
419
+
420
+ public function _posts_where_paged_course_items( $where ) {
421
+ global $wpdb;
422
+
423
+ if ( $course_id = $this->_filter_items_by_course() ) {
424
+ $where .= $wpdb->prepare( " AND (c.ID = %d)", $course_id );
425
+ $where .= $wpdb->prepare( " AND {$wpdb->posts}.post_status = %s", 'publish' );
426
+ }
427
+
428
+ return $where;
429
+ }
430
+
431
  /**
432
  * @param $join
433
  *
434
  * @return string
435
  */
436
  public function posts_join_paged( $join ) {
437
+ global $wpdb;
438
+
439
  if ( ! $this->_is_archive() ) {
440
  return $join;
441
  }
442
+
443
  $join .= " LEFT JOIN {$wpdb->postmeta} pm_price ON pm_price.post_id = {$wpdb->posts}.ID AND pm_price.meta_key = '_lp_price'";
444
 
445
  return $join;
451
  * @return mixed|string
452
  */
453
  public function posts_where_paged( $where ) {
454
+ global $wpdb;
455
 
456
  if ( ! $this->_is_archive() ) {
457
  return $where;
458
  }
459
 
 
 
460
  if ( array_key_exists( 'filter_price', $_REQUEST ) ) {
461
  if ( $_REQUEST['filter_price'] == 0 ) {
462
  $where .= " AND ( pm_price.meta_value IS NULL || pm_price.meta_value = 0 )";
465
  }
466
  }
467
 
 
468
  $not_in = $wpdb->prepare( "
469
  SELECT ID
470
  FROM {$wpdb->posts} p
474
 
475
  $where .= " AND {$wpdb->posts}.ID NOT IN( {$not_in} )";
476
 
 
 
 
477
  return $where;
478
  }
479
 
885
  $meta_box['fields'],
886
  array(
887
  array(
888
+ 'name' => __( 'No requirement enroll', 'learnpress' ),
889
  'id' => '_lp_required_enroll',
890
  'type' => 'yes_no',
891
  'desc' => __( 'Require users logged in to study or public to all.', 'learnpress' ),
1368
  echo sprintf( '<a href="%s" class="price">%s%s</a>', add_query_arg( 'filter_price', 0 ), $origin_price, __( 'Free', 'learnpress' ) );
1369
 
1370
  if ( ! $course->is_required_enroll() ) {
1371
+ printf( '<p class="description">(%s)</p>', __( 'No requirement enroll', 'learnpress' ) );
1372
  }
1373
  }
1374
  break;
inc/custom-post-types/lesson.php CHANGED
@@ -34,11 +34,30 @@ if ( ! class_exists( 'LP_Lesson_Post_Type' ) ) {
34
  // hide View Lesson link if not assigned to course
35
  add_action( 'admin_footer', array( $this, 'hide_view_lesson_link' ) );
36
  add_filter( 'views_edit-' . LP_LESSON_CPT, array( $this, 'views_pages' ), 10 );
37
- add_filter( 'posts_where_paged', array( $this, 'posts_where_paged' ), 10 );
38
 
39
  parent::__construct( $post_type );
40
  }
41
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  /**
43
  * Filter items unassigned.
44
  *
@@ -47,21 +66,25 @@ if ( ! class_exists( 'LP_Lesson_Post_Type' ) ) {
47
  * @return string
48
  */
49
  public function posts_where_paged( $where ) {
 
 
 
 
 
 
 
50
  if ( 'yes' === LP_Request::get( 'unassigned' ) ) {
51
- global $wpdb;
52
  $where .= $wpdb->prepare( "
53
  AND {$wpdb->posts}.ID NOT IN(
54
  SELECT si.item_id
55
  FROM {$wpdb->learnpress_section_items} si
56
- INNER JOIN wp_posts p ON p.ID = si.item_id
57
  WHERE p.post_type = %s
58
  )
59
  ", LP_LESSON_CPT );
60
  }
61
 
62
  if ( $preview = LP_Request::get( 'preview' ) ) {
63
- global $wpdb;
64
-
65
  $clause = $wpdb->prepare( "
66
  SELECT ID
67
  FROM {$wpdb->posts} p
@@ -305,13 +328,16 @@ if ( ! class_exists( 'LP_Lesson_Post_Type' ) ) {
305
  $pos = array_search( 'title', array_keys( $columns ) );
306
  $new_columns = array(
307
  'author' => __( 'Author', 'learnpress' ),
308
- LP_COURSE_CPT => __( 'Course', 'learnpress' )
309
  );
 
310
  if ( current_theme_supports( 'post-formats' ) ) {
311
  $new_columns['format'] = __( 'Format', 'learnpress' );
312
  $new_columns['duration'] = __( 'Duration', 'learnpress' );
313
  }
 
314
  $new_columns['preview'] = __( 'Preview', 'learnpress' );
 
315
  if ( false !== $pos && ! array_key_exists( LP_COURSE_CPT, $columns ) ) {
316
  $columns = array_merge(
317
  array_slice( $columns, 0, $pos + 1 ),
@@ -334,25 +360,12 @@ if ( ! class_exists( 'LP_Lesson_Post_Type' ) ) {
334
  * Display content for custom column
335
  *
336
  * @param string $name
337
- * @param int $post_id
338
  */
339
  public function columns_content( $name, $post_id = 0 ) {
340
  switch ( $name ) {
341
  case LP_COURSE_CPT:
342
- $courses = learn_press_get_item_courses( $post_id );
343
- if ( $courses ) {
344
- foreach ( $courses as $course ) {
345
- echo '<div><a href="' . esc_url( add_query_arg( array( 'filter_course' => $course->ID ) ) ) . '">' . get_the_title( $course->ID ) . '</a>';
346
- echo '<div class="row-actions">';
347
- printf( '<a href="%s">%s</a>', admin_url( sprintf( 'post.php?post=%d&action=edit', $course->ID ) ), __( 'Edit', 'learnpress' ) );
348
- echo "&nbsp;|&nbsp;";
349
- printf( '<a href="%s">%s</a>', get_the_permalink( $course->ID ), __( 'View', 'learnpress' ) );
350
- echo '</div></div>';
351
- }
352
- } else {
353
- _e( 'Not assigned yet', 'learnpress' );
354
- }
355
-
356
  break;
357
  case 'preview':
358
  printf(
@@ -406,10 +419,6 @@ if ( ! class_exists( 'LP_Lesson_Post_Type' ) ) {
406
  return isset( $_REQUEST['s'] ) ? $_REQUEST['s'] : false;
407
  }
408
 
409
- private function _filter_course() {
410
- return ! empty( $_REQUEST['filter_course'] ) ? absint( $_REQUEST['filter_course'] ) : false;
411
- }
412
-
413
  /**
414
  * Admin scripts.
415
  */
34
  // hide View Lesson link if not assigned to course
35
  add_action( 'admin_footer', array( $this, 'hide_view_lesson_link' ) );
36
  add_filter( 'views_edit-' . LP_LESSON_CPT, array( $this, 'views_pages' ), 10 );
 
37
 
38
  parent::__construct( $post_type );
39
  }
40
 
41
+ /**
42
+ * @param $join
43
+ *
44
+ * @return string
45
+ */
46
+ public function posts_join_paged( $join ) {
47
+ if ( ! $this->_is_archive() ) {
48
+ return $join;
49
+ }
50
+ global $wpdb;
51
+
52
+ // if ( $this->_filter_course() || ( $this->_get_orderby() == 'course-name' ) || $this->_get_search() ) {
53
+ // $join .= " LEFT JOIN {$wpdb->prefix}learnpress_section_items si ON {$wpdb->posts}.ID = si.item_id";
54
+ // $join .= " LEFT JOIN {$wpdb->prefix}learnpress_sections s ON s.section_id = si.section_id";
55
+ // $join .= " LEFT JOIN {$wpdb->posts} c ON c.ID = s.section_course_id";
56
+ // }
57
+
58
+ return $join;
59
+ }
60
+
61
  /**
62
  * Filter items unassigned.
63
  *
66
  * @return string
67
  */
68
  public function posts_where_paged( $where ) {
69
+
70
+ if ( ! $this->_is_archive() ) {
71
+ return $where;
72
+ }
73
+
74
+ global $wpdb;
75
+
76
  if ( 'yes' === LP_Request::get( 'unassigned' ) ) {
 
77
  $where .= $wpdb->prepare( "
78
  AND {$wpdb->posts}.ID NOT IN(
79
  SELECT si.item_id
80
  FROM {$wpdb->learnpress_section_items} si
81
+ INNER JOIN {$wpdb->posts} p ON p.ID = si.item_id
82
  WHERE p.post_type = %s
83
  )
84
  ", LP_LESSON_CPT );
85
  }
86
 
87
  if ( $preview = LP_Request::get( 'preview' ) ) {
 
 
88
  $clause = $wpdb->prepare( "
89
  SELECT ID
90
  FROM {$wpdb->posts} p
328
  $pos = array_search( 'title', array_keys( $columns ) );
329
  $new_columns = array(
330
  'author' => __( 'Author', 'learnpress' ),
331
+ LP_COURSE_CPT => $this->_get_course_column_title()
332
  );
333
+
334
  if ( current_theme_supports( 'post-formats' ) ) {
335
  $new_columns['format'] = __( 'Format', 'learnpress' );
336
  $new_columns['duration'] = __( 'Duration', 'learnpress' );
337
  }
338
+
339
  $new_columns['preview'] = __( 'Preview', 'learnpress' );
340
+
341
  if ( false !== $pos && ! array_key_exists( LP_COURSE_CPT, $columns ) ) {
342
  $columns = array_merge(
343
  array_slice( $columns, 0, $pos + 1 ),
360
  * Display content for custom column
361
  *
362
  * @param string $name
363
+ * @param int $post_id
364
  */
365
  public function columns_content( $name, $post_id = 0 ) {
366
  switch ( $name ) {
367
  case LP_COURSE_CPT:
368
+ $this->_get_item_course( $post_id );
 
 
 
 
 
 
 
 
 
 
 
 
 
369
  break;
370
  case 'preview':
371
  printf(
419
  return isset( $_REQUEST['s'] ) ? $_REQUEST['s'] : false;
420
  }
421
 
 
 
 
 
422
  /**
423
  * Admin scripts.
424
  */
inc/custom-post-types/question.php CHANGED
@@ -114,7 +114,9 @@ if ( ! class_exists( 'LP_Question_Post_Type' ) ) {
114
  }
115
 
116
  wp_localize_script( 'learn-press-admin-question-editor', 'lp_question_editor',
117
- apply_filters( 'learn-press/question-editor/localize-script', array(
 
 
118
  'root' => array(
119
  'id' => $post->ID,
120
  'auto_draft' => get_post_status( $post->ID ) == 'auto-draft',
@@ -130,9 +132,13 @@ if ( ! class_exists( 'LP_Question_Post_Type' ) ) {
130
  'nonce' => wp_create_nonce( 'learnpress_admin_question_editor' ),
131
  'questionTypes' => LP_Question::get_types(),
132
  'externalComponent' => apply_filters( 'learn-press/admin/external-js-component', array() )
 
 
 
133
  )
134
  )
135
- ) );
 
136
  }
137
 
138
  /**
@@ -411,7 +417,7 @@ if ( ! class_exists( 'LP_Question_Post_Type' ) ) {
411
  AND {$wpdb->posts}.ID NOT IN(
412
  SELECT qq.question_id
413
  FROM {$wpdb->learnpress_quiz_questions} qq
414
- INNER JOIN wp_posts p ON p.ID = qq.question_id
415
  WHERE p.post_type = %s
416
  )
417
  ", LP_QUESTION_CPT );
114
  }
115
 
116
  wp_localize_script( 'learn-press-admin-question-editor', 'lp_question_editor',
117
+ apply_filters(
118
+ 'learn-press/question-editor/localize-script',
119
+ array(
120
  'root' => array(
121
  'id' => $post->ID,
122
  'auto_draft' => get_post_status( $post->ID ) == 'auto-draft',
132
  'nonce' => wp_create_nonce( 'learnpress_admin_question_editor' ),
133
  'questionTypes' => LP_Question::get_types(),
134
  'externalComponent' => apply_filters( 'learn-press/admin/external-js-component', array() )
135
+ ),
136
+ 'i18n' => array(
137
+ 'new_option_label' => __( 'New Option', 'learnpress' )
138
  )
139
  )
140
+ )
141
+ );
142
  }
143
 
144
  /**
417
  AND {$wpdb->posts}.ID NOT IN(
418
  SELECT qq.question_id
419
  FROM {$wpdb->learnpress_quiz_questions} qq
420
+ INNER JOIN {$wpdb->posts} p ON p.ID = qq.question_id
421
  WHERE p.post_type = %s
422
  )
423
  ", LP_QUESTION_CPT );
inc/custom-post-types/quiz.php CHANGED
@@ -154,7 +154,8 @@ if ( ! class_exists( 'LP_Quiz_Post_Type' ) ) {
154
  $user_id = get_current_user_id();
155
  $default_new_question_type = get_user_meta( $user_id, '_learn_press_memorize_question_types', true ) ? get_user_meta( $user_id, '_learn_press_memorize_question_types', true ) : 'true_or_false';
156
 
157
- $hidden_questions = get_post_meta( $post->ID, '_lp_hidden_questions', true );
 
158
 
159
  wp_localize_script( 'learn-press-admin-quiz-editor', 'lp_quiz_editor', apply_filters( 'learn-press/admin-localize-quiz-editor', array(
160
  'root' => array(
@@ -171,16 +172,23 @@ if ( ! class_exists( 'LP_Quiz_Post_Type' ) ) {
171
  'items' => array()
172
  ),
173
  'i18n' => array(
174
- 'option' => __( 'Option', 'learnpress' ),
175
- 'unique' => learn_press_uniqid(),
176
- 'back' => __( 'Back', 'learnpress' ),
177
- 'selected_items' => __( 'Selected items', 'learnpress' ),
 
 
 
 
 
 
178
  ),
179
  'listQuestions' => array(
180
- 'questions' => $quiz->quiz_editor_get_questions(),
181
- 'hidden_questions' => ! empty( $hidden_questions ) ? $hidden_questions : array(),
182
- 'disableUpdateList' => false,
183
- 'externalComponent' => apply_filters( 'learn-press/admin/external-js-component', array() )
 
184
  )
185
  ) ) );
186
  }
@@ -333,7 +341,7 @@ if ( ! class_exists( 'LP_Quiz_Post_Type' ) ) {
333
  array_slice( $columns, 0, $pos + 1 ),
334
  array(
335
  'author' => __( 'Author', 'learnpress' ),
336
- 'lp_course' => __( 'Course', 'learnpress' ),
337
  'num_of_question' => __( 'Questions', 'learnpress' ),
338
  'duration' => __( 'Duration', 'learnpress' )
339
  ),
@@ -353,26 +361,13 @@ if ( ! class_exists( 'LP_Quiz_Post_Type' ) ) {
353
  * Display content for custom column
354
  *
355
  * @param string $name
356
- * @param int $post_id
357
  */
358
  public function columns_content( $name, $post_id = 0 ) {
359
  global $post;
360
  switch ( $name ) {
361
  case 'lp_course':
362
- $courses = learn_press_get_item_courses( $post_id );
363
- if ( $courses ) {
364
- foreach ( $courses as $course ) {
365
- echo '<div><a href="' . esc_url( add_query_arg( array( 'filter_course' => $course->ID ) ) ) . '">' . get_the_title( $course->ID ) . '</a>';
366
- echo '<div class="row-actions">';
367
- printf( '<a href="%s">%s</a>', admin_url( sprintf( 'post.php?post=%d&action=edit', $course->ID ) ), __( 'Edit', 'learnpress' ) );
368
- echo "&nbsp;|&nbsp;";
369
- printf( '<a href="%s">%s</a>', get_the_permalink( $course->ID ), __( 'View', 'learnpress' ) );
370
- echo '</div></div>';
371
- }
372
-
373
- } else {
374
- _e( 'Not assigned yet', 'learnpress' );
375
- }
376
  break;
377
  case 'num_of_question':
378
  if ( property_exists( $post, 'question_count' ) ) {
@@ -429,11 +424,11 @@ if ( ! class_exists( 'LP_Quiz_Post_Type' ) ) {
429
  return $join;
430
  }
431
  global $wpdb;
432
- if ( $this->_filter_course() || ( $this->_get_orderby() == 'course-name' ) || $this->_get_search() ) {
433
- $join .= " LEFT JOIN {$wpdb->prefix}learnpress_section_items si ON {$wpdb->posts}.ID = si.item_id";
434
- $join .= " LEFT JOIN {$wpdb->prefix}learnpress_sections s ON s.section_id = si.section_id";
435
- $join .= " LEFT JOIN {$wpdb->posts} c ON c.ID = s.section_course_id";
436
- }
437
 
438
  return $join;
439
  }
@@ -451,9 +446,9 @@ if ( ! class_exists( 'LP_Quiz_Post_Type' ) ) {
451
 
452
  global $wpdb;
453
 
454
- if ( $course_id = $this->_filter_course() ) {
455
- $where .= $wpdb->prepare( " AND (c.ID = %d)", $course_id );
456
- }
457
 
458
  if ( isset( $_GET['s'] ) ) {
459
  $s = $_GET['s'];
@@ -468,12 +463,13 @@ if ( ! class_exists( 'LP_Quiz_Post_Type' ) ) {
468
  AND {$wpdb->posts}.ID NOT IN(
469
  SELECT si.item_id
470
  FROM {$wpdb->learnpress_section_items} si
471
- INNER JOIN wp_posts p ON p.ID = si.item_id
472
  WHERE p.post_type = %s
473
  )
474
  ", LP_QUIZ_CPT );
475
  }
476
 
 
477
  return $where;
478
  }
479
 
@@ -532,7 +528,7 @@ if ( ! class_exists( 'LP_Quiz_Post_Type' ) ) {
532
  * @return bool|int
533
  */
534
  private function _filter_course() {
535
- return ! empty( $_REQUEST['filter_course'] ) ? absint( $_REQUEST['filter_course'] ) : false;
536
  }
537
 
538
  /**
154
  $user_id = get_current_user_id();
155
  $default_new_question_type = get_user_meta( $user_id, '_learn_press_memorize_question_types', true ) ? get_user_meta( $user_id, '_learn_press_memorize_question_types', true ) : 'true_or_false';
156
 
157
+ $hidden_questions = get_post_meta( $post->ID, '_lp_hidden_questions', true );
158
+ $hidden_questions_settings = get_post_meta( $post->ID, '_hidden_questions_settings', true );
159
 
160
  wp_localize_script( 'learn-press-admin-quiz-editor', 'lp_quiz_editor', apply_filters( 'learn-press/admin-localize-quiz-editor', array(
161
  'root' => array(
172
  'items' => array()
173
  ),
174
  'i18n' => array(
175
+ 'option' => __( 'Option', 'learnpress' ),
176
+ 'unique' => learn_press_uniqid(),
177
+ 'back' => __( 'Back', 'learnpress' ),
178
+ 'selected_items' => __( 'Selected items', 'learnpress' ),
179
+ 'new_option' => __( 'New Option', 'learnpress' ),
180
+ 'confirm_trash_question' => __( 'Do you want to move question "{{QUESTION_NAME}}" to trash?', 'learnpress' ),
181
+ 'question_labels' => array(
182
+ 'singular' => __( 'Question', 'learnpress' ),
183
+ 'plural' => __( 'Questions', 'learnpress' )
184
+ )
185
  ),
186
  'listQuestions' => array(
187
+ 'questions' => $quiz->quiz_editor_get_questions(),
188
+ 'hidden_questions' => ! empty( $hidden_questions ) ? $hidden_questions : array(),
189
+ 'hidden_questions_settings' => $hidden_questions_settings ? $hidden_questions_settings : array(),
190
+ 'disableUpdateList' => false,
191
+ 'externalComponent' => apply_filters( 'learn-press/admin/external-js-component', array() )
192
  )
193
  ) ) );
194
  }
341
  array_slice( $columns, 0, $pos + 1 ),
342
  array(
343
  'author' => __( 'Author', 'learnpress' ),
344
+ 'lp_course' => $this->_get_course_column_title(),
345
  'num_of_question' => __( 'Questions', 'learnpress' ),
346
  'duration' => __( 'Duration', 'learnpress' )
347
  ),
361
  * Display content for custom column
362
  *
363
  * @param string $name
364
+ * @param int $post_id
365
  */
366
  public function columns_content( $name, $post_id = 0 ) {
367
  global $post;
368
  switch ( $name ) {
369
  case 'lp_course':
370
+ $this->_get_item_course( $post_id );
 
 
 
 
 
 
 
 
 
 
 
 
 
371
  break;
372
  case 'num_of_question':
373
  if ( property_exists( $post, 'question_count' ) ) {
424
  return $join;
425
  }
426
  global $wpdb;
427
+ // if ( $this->_filter_course() || ( $this->_get_orderby() == 'course-name' ) || $this->_get_search() ) {
428
+ // $join .= " LEFT JOIN {$wpdb->prefix}learnpress_section_items si ON {$wpdb->posts}.ID = si.item_id";
429
+ // $join .= " LEFT JOIN {$wpdb->prefix}learnpress_sections s ON s.section_id = si.section_id";
430
+ // $join .= " LEFT JOIN {$wpdb->posts} c ON c.ID = s.section_course_id";
431
+ // }
432
 
433
  return $join;
434
  }
446
 
447
  global $wpdb;
448
 
449
+ // if ( $course_id = $this->_filter_course() ) {
450
+ // $where .= $wpdb->prepare( " AND (c.ID = %d)", $course_id );
451
+ // }
452
 
453
  if ( isset( $_GET['s'] ) ) {
454
  $s = $_GET['s'];
463
  AND {$wpdb->posts}.ID NOT IN(
464
  SELECT si.item_id
465
  FROM {$wpdb->learnpress_section_items} si
466
+ INNER JOIN {$wpdb->posts} p ON p.ID = si.item_id
467
  WHERE p.post_type = %s
468
  )
469
  ", LP_QUIZ_CPT );
470
  }
471
 
472
+
473
  return $where;
474
  }
475
 
528
  * @return bool|int
529
  */
530
  private function _filter_course() {
531
+ return ! empty( $_REQUEST['course'] ) ? absint( $_REQUEST['course'] ) : false;
532
  }
533
 
534
  /**
inc/libraries/meta-box/css/datepicker.css CHANGED
@@ -1,7 +1,7 @@
1
  /* Fix empty block below admin footer (issue #24) */
2
  #ui-datepicker-div {
3
  display: none;
4
- z-index: 9999 !important;
5
  }
6
 
7
  /* Style for multiple months */
1
  /* Fix empty block below admin footer (issue #24) */
2
  #ui-datepicker-div {
3
  display: none;
4
+ z-index: 99999 !important;
5
  }
6
 
7
  /* Style for multiple months */
inc/libraries/meta-box/css/file.css CHANGED
@@ -1,36 +1,51 @@
1
- .rwmb-file-wrapper .rwmb-uploaded li {
2
- width: 250px;
3
- margin: 0 10px 10px 0;
4
- transition: width .25s, opacity .25s;
5
- }
6
- .rwmb-file-wrapper .rwmb-uploaded .rwmb-icon {
7
- width: 60px;
8
- text-align: center;
9
- vertical-align: middle;
10
  overflow: hidden;
11
  }
12
- .rwmb-file-wrapper .rwmb-uploaded .rwmb-icon img {
 
 
 
 
 
 
 
 
 
 
 
13
  max-height: 60px;
14
  max-width: 60px;
15
  }
16
- .rwmb-file-wrapper .rwmb-uploaded .rwmb-info {
17
- width: 180px;
18
- vertical-align: top;
19
- overflow: hidden;
20
- }
21
- .rwmb-file-wrapper .rwmb-uploaded .rwmb-info p {
22
- margin: .1em 0;
23
  }
24
- .rwmb-file-wrapper .rwmb-uploaded .rwmb-info a {
25
  font-weight: bold;
26
  text-decoration: none;
27
  }
28
- .rwmb-file-wrapper .rwmb-uploaded li,
29
- .rwmb-file-wrapper .rwmb-uploaded .rwmb-icon,
30
- .rwmb-file-wrapper .rwmb-uploaded .rwmb-info {
31
- display: inline-block;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  }
33
- .rwmb-file-wrapper .rwmb-uploaded .rwmb-icon,
34
- .rwmb-file-wrapper .rwmb-uploaded .rwmb-info {
35
- margin: 0 0 2px 2px;
36
  }
1
+ .rwmb-uploaded {
2
+ margin: 0;
 
 
 
 
 
 
 
3
  overflow: hidden;
4
  }
5
+ .rwmb-file {
6
+ display: flex;
7
+ margin-bottom: 10px;
8
+ background: #fff;
9
+ cursor: move;
10
+ }
11
+ .rwmb-file-icon {
12
+ min-width: 60px;
13
+ flex-basis: 60px;
14
+ margin-right: 5px;
15
+ }
16
+ .rwmb-file-icon img {
17
  max-height: 60px;
18
  max-width: 60px;
19
  }
20
+ .rwmb-file-info {
21
+ flex: 1;
 
 
 
 
 
22
  }
23
+ .rwmb-file-title {
24
  font-weight: bold;
25
  text-decoration: none;
26
  }
27
+ .rwmb-file-name {
28
+ margin: 0 0 4px;
29
+ white-space: nowrap;
30
+ }
31
+ .rwmb-file-actions {
32
+ margin: 0;
33
+ font-size: 11px;
34
+ }
35
+ .rwmb-file-edit,
36
+ .rwmb-file-delete {
37
+ color: inherit;
38
+ text-decoration: none;
39
+ }
40
+ .rwmb-file-edit {
41
+ margin-right: 6px;
42
+ }
43
+ .rwmb-file-actions .dashicons {
44
+ font-size: 1em;
45
+ width: 1em;
46
+ height: 1em;
47
+ vertical-align: middle;
48
  }
49
+ .rwmb-file-input {
50
+ width: 100%;
 
51
  }
inc/libraries/meta-box/css/image-advanced.css DELETED
@@ -1,52 +0,0 @@
1
- /* Image */
2
- .rwmb-image-item {
3
- position: relative;
4
- float: left;
5
- padding: 0;
6
- margin: 0 5px 5px 0;
7
- box-sizing: border-box;
8
- }
9
- .rwmb-image-item.thumbnail .rwmb-media-preview,
10
- .rwmb-image-item.thumbnail{
11
- width: 150px;
12
- }
13
- .rwmb-image-item.medium .rwmb-media-preview,
14
- .rwmb-image-item.medium {
15
- width: 300px;
16
- }
17
- .rwmb-image-item.large .rwmb-media-preview,
18
- .rwmb-image-item.large {
19
- width: 1024px;
20
- }
21
-
22
- .rwmb-image-item .dashicons {
23
- font-size: 20px;
24
- width: 20px;
25
- height: 20px;
26
- }
27
- .rwmb-media-bar {
28
- position: absolute;
29
- z-index: 10;
30
- display: none;
31
- right: 5px;
32
- top: 5px;
33
- color: #fff;
34
- }
35
- .rwmb-media-bar a {
36
- text-decoration: none;
37
- color: inherit;
38
- }
39
- .rwmb-overlay {
40
- position: absolute;
41
- top: 0;
42
- bottom: 0;
43
- left: 0;
44
- right: 0;
45
- background: rgba(0, 0, 0, .6);
46
- display: none;
47
- }
48
- .rwmb-image-item:hover .rwmb-media-bar,
49
- .rwmb-image-item:hover .rwmb-overlay {
50
- display: block;
51
- cursor: move;
52
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/libraries/meta-box/css/image-select.css CHANGED
@@ -16,6 +16,6 @@
16
  .rwmb-image-select.rwmb-active {
17
  border-color: #0074a2;
18
  }
19
- .rwmb-image-select input {
20
  display: none;
21
- }
16
  .rwmb-image-select.rwmb-active {
17
  border-color: #0074a2;
18
  }
19
+ .rwmb-image_select.rwmb-image_select {
20
  display: none;
21
+ }
inc/libraries/meta-box/css/image.css CHANGED
@@ -1,63 +1,66 @@
1
- /* Uploaded image */
2
- .rwmb-image-wrapper .rwmb-uploaded {
 
 
 
 
3
  overflow: hidden;
4
  }
5
- .rwmb-image-wrapper .rwmb-uploaded li {
6
- margin: 0 10px 10px 0;
 
7
  float: left;
8
- width: 150px;
9
- height: 150px;
 
 
 
10
  text-align: center;
11
- cursor: move;
12
- position: relative;
13
- transition: width .25s, opacity .25s;
 
 
 
14
  }
15
- .rwmb-image-wrapper .rwmb-uploaded img {
16
  width: 150px;
17
- height: 150px;
18
  }
19
- .rwmb-image-bar {
20
- color: #fff;
21
- font-weight: bold;
22
- background: #000;
23
- background: rgba(0, 0, 0, .5);
24
- position: absolute;
25
- top: 0;
26
- right: 0;
27
- padding: 5px;
28
- display: none;
29
- text-align: center;
30
  }
31
- li:hover .rwmb-image-bar {
32
- display: block;
33
  }
34
- .rwmb-image-bar a {
 
 
 
 
 
 
 
35
  color: #fff;
36
- font-weight: bold;
37
- text-decoration: none;
38
- vertical-align: middle;
39
  }
40
- .rwmb-image-bar a.rwmb-delete-file {
41
- font-size: 23px;
42
- width: 18px;
43
- font-weight: normal;
44
  }
45
- .rwmb-image-wrapper .rwmb-uploaded li.removed {
46
- width: 0;
47
- margin: 0;
 
 
 
 
 
48
  opacity: 0;
 
49
  }
50
- .rwmb-image-wrapper .rwmb-uploaded li.removed:after {
51
- content: ' ';
52
- position: absolute;
53
- top: 0;
54
- left: 0;
55
- right: 0;
56
- bottom: 0;
57
- z-index: 2;
58
- opacity: .4;
59
- background-color: #f00;
60
  }
61
- .rwmb-image-wrapper .rwmb-uploaded li.ui-state-highlight {
62
- background: #ddd;
63
  }
1
+ .rwmb-image-wrapper .rwmb-uploaded:empty {
2
+ display: none;
3
+ }
4
+ .rwmb-uploaded:not(:empty) {
5
+ display: block;
6
+ margin: -8px 0 0 -8px;
7
  overflow: hidden;
8
  }
9
+ /* Re-add WP core UI style to make sure frontend works */
10
+ .rwmb-image-item {
11
+ position: relative;
12
  float: left;
13
+ padding: 8px;
14
+ margin: 0;
15
+ color: #444;
16
+ cursor: pointer;
17
+ list-style: none;
18
  text-align: center;
19
+ -webkit-user-select: none;
20
+ -moz-user-select: none;
21
+ -ms-user-select: none;
22
+ user-select: none;
23
+ width: 25%;
24
+ box-sizing: border-box;
25
  }
26
+ .rwmb-image-item.thumbnail {
27
  width: 150px;
 
28
  }
29
+ .rwmb-image-item.medium {
30
+ width: 300px;
 
 
 
 
 
 
 
 
 
31
  }
32
+ .rwmb-image-item.large {
33
+ width: 1024px;
34
  }
35
+
36
+ .rwmb-image-actions {
37
+ position: absolute;
38
+ z-index: 2;
39
+ right: 12px;
40
+ top: 12px;
41
+ opacity: 0;
42
+ transition: opacity .2s;
43
  color: #fff;
 
 
 
44
  }
45
+ .rwmb-image-edit,
46
+ .rwmb-image-delete {
47
+ color: inherit;
48
+ text-decoration: none;
49
  }
50
+ .rwmb-image-overlay {
51
+ position: absolute;
52
+ z-index: 1;
53
+ top: 8px;
54
+ bottom: 8px;
55
+ left: 8px;
56
+ right: 8px;
57
+ background: #000;
58
  opacity: 0;
59
+ transition: opacity .2s;
60
  }
61
+ .rwmb-image-item:hover .rwmb-image-actions {
62
+ opacity: 1;
 
 
 
 
 
 
 
 
63
  }
64
+ .rwmb-image-item:hover .rwmb-image-overlay {
65
+ opacity: .6;
66
  }
inc/libraries/meta-box/css/input-list.css CHANGED
@@ -2,10 +2,11 @@
2
  margin: 0;
3
  line-height: 1.8;
4
  }
5
- li .rwmb-input-list {
6
  margin-left: 20px;
7
  }
8
  .rwmb-input-list li {
 
9
  margin-bottom: 0;
10
  }
11
  .rwmb-input-list.inline {
2
  margin: 0;
3
  line-height: 1.8;
4
  }
5
+ .rwmb-input-list .rwmb-input-list {
6
  margin-left: 20px;
7
  }
8
  .rwmb-input-list li {
9
+ list-style: none;
10
  margin-bottom: 0;
11
  }
12
  .rwmb-input-list.inline {
inc/libraries/meta-box/css/media.css CHANGED
@@ -1,67 +1,45 @@
1
- .rwmb-media-list {
2
- margin: 0 0 5px;
 
 
 
 
3
  overflow: hidden;
4
  }
5
- .rwmb-media-item {
 
 
 
6
  overflow: hidden;
7
- margin-bottom: 10px;
8
  }
9
  .rwmb-media-preview {
10
  width: 60px;
11
  float: left;
12
  position: relative;
13
  }
14
- .rwmb-media-preview:before {
15
- content: '';
16
- display: block;
17
- padding-top: 100%;
18
- }
19
- .rwmb-media-content {
20
- position: absolute;
21
- overflow: hidden;
22
- top: 0;
23
- left: 0;
24
- bottom: 0;
25
- right: 0;
26
- }
27
- .rwmb-media-content .centered {
28
- position: absolute;
29
- top: 0;
30
- left: 0;
31
- width: 100%;
32
- height: 100%;
33
- -webkit-transform: translate(50%, 50%);
34
- -ms-transform: translate(50%, 50%);
35
- transform: translate(50%, 50%);
36
- }
37
- .rwmb-media-content img {
38
- -webkit-transform: translate(-50%, -50%);
39
- -ms-transform: translate(-50%, -50%);
40
- transform: translate(-50%, -50%);
41
- max-height: 100%;
42
- max-width: 100%;
43
- border-radius: 3px;
44
- }
45
  .rwmb-media-info {
46
  margin-left: 65px;
47
  }
48
- .rwmb-media-info a {
 
49
  text-decoration: none;
50
  }
51
- .rwmb-media-info p,
52
- .rwmb-media-info h4 {
53
- margin: 0 0 2px;
 
 
54
  }
55
  .rwmb-edit-media,
56
  .rwmb-remove-media {
57
  font-size: 11px;
58
  color: inherit;
 
59
  }
60
- .rwmb-edit-media .dashicons,
61
- .rwmb-remove-media .dashicons {
62
- font-size: 12px;
63
- width: 12px;
64
- height: 12px;
65
  vertical-align: middle;
66
  }
67
 
1
+ .rwmb-media-list:empty {
2
+ display: none;
3
+ }
4
+ .rwmb-media-list:not(:empty) {
5
+ display: block;
6
+ margin: -8px 0 0 -8px;
7
  overflow: hidden;
8
  }
9
+ .rwmb-media-item.attachment {
10
+ float: none;
11
+ text-align: left;
12
+ width: auto;
13
  overflow: hidden;
 
14
  }
15
  .rwmb-media-preview {
16
  width: 60px;
17
  float: left;
18
  position: relative;
19
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  .rwmb-media-info {
21
  margin-left: 65px;
22
  }
23
+ .rwmb-media-title {
24
+ font-weight: bold;
25
  text-decoration: none;
26
  }
27
+ .rwmb-media-name {
28
+ margin: 0 0 4px;
29
+ }
30
+ .rwmb-media-actions {
31
+ margin: 0;
32
  }
33
  .rwmb-edit-media,
34
  .rwmb-remove-media {
35
  font-size: 11px;
36
  color: inherit;
37
+ text-decoration: none;
38
  }
39
+ .rwmb-media-actions .dashicons {
40
+ font-size: 1em;
41
+ width: 1em;
42
+ height: 1em;
 
43
  vertical-align: middle;
44
  }
45
 
inc/libraries/meta-box/css/range.css CHANGED
@@ -1,13 +1,9 @@
1
- input[type='range'] {
 
2
  vertical-align: middle;
3
- border-radius: 2px;
4
- border: 1px solid #dfdfdf;
5
  }
6
-
7
  .rwmb-output {
8
-
9
- display: inline-block;
10
- position: relative;
11
- padding: 5px 10px;
12
- line-height: 20px;
13
  }
1
+ .rwmb-range.rwmb-range,
2
+ .rwmb-range.rwmb-range:hover {
3
  vertical-align: middle;
4
+ padding: 0;
5
+ border: none;
6
  }
 
7
  .rwmb-output {
8
+ margin-left: 8px;
 
 
 
 
9
  }
inc/libraries/meta-box/css/select-advanced.css CHANGED
@@ -14,3 +14,6 @@
14
  .select2-results__option {
15
  margin-bottom: 0;
16
  }
 
 
 
14
  .select2-results__option {
15
  margin-bottom: 0;
16
  }
17
+ .select2-container .select2-search--inline {
18
+ margin-bottom: 0;
19
+ }
inc/libraries/meta-box/css/select.css CHANGED
@@ -1,8 +1,9 @@
1
- .rwmb-select {
2
  min-width: 160px;
 
3
  }
4
  .rwmb-select option {
5
- padding: .5em 1em;;
6
  }
7
  .rwmb-select-all-none {
8
  display: block;
1
+ .rwmb-select.rwmb-select {
2
  min-width: 160px;
3
+ padding: 0;
4
  }
5
  .rwmb-select option {
6
+ padding: 4px 8px;
7
  }
8
  .rwmb-select-all-none {
9
  display: block;
inc/libraries/meta-box/css/style.css CHANGED
@@ -1,4 +1,4 @@
1
- /* =Styles for 'normal' meta boxes
2
  -------------------------------------------------------------- */
3
 
4
  /* Clearfix for field */
@@ -26,8 +26,8 @@
26
  .rwmb-label > label {
27
  font-weight: 600;
28
  }
29
- .rwmb-label.required > span {
30
- color: #c00;
31
  font-weight: bold;
32
  margin-left: 3px;
33
  }
@@ -90,32 +90,54 @@
90
  left: 0;
91
  top: 0;
92
  }
93
- .rwmb-clone-placeholder {
94
- background: #fcf8e3;
95
- border: 1px solid #faebcc;
96
- display: block;
97
- }
98
  .rwmb-sort-clone {
99
  padding-left: 15px;
100
  }
101
 
102
  /* jQuery validation */
103
- label.error {
104
- padding-left: 3px;
105
- color: red;
106
  }
107
- input.error,
108
- textarea.error,
109
- select.error {
110
- border-color: #c00 !important;
111
- background: #ffebe8 !important;
 
 
 
 
 
 
 
 
112
  }
113
 
114
 
115
- /* =Styles for 'side' meta boxes
116
  -------------------------------------------------------------- */
117
 
118
  #side-sortables .rwmb-label,
119
  #side-sortables .rwmb-input {
120
  width: 100%;
121
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Styles for 'normal' meta boxes
2
  -------------------------------------------------------------- */
3
 
4
  /* Clearfix for field */
26
  .rwmb-label > label {
27
  font-weight: 600;
28
  }
29
+ .rwmb-required {
30
+ color: #dc3232;
31
  font-weight: bold;
32
  margin-left: 3px;
33
  }
90
  left: 0;
91
  top: 0;
92
  }
 
 
 
 
 
93
  .rwmb-sort-clone {
94
  padding-left: 15px;
95
  }
96
 
97
  /* jQuery validation */
98
+ p.rwmb-error {
99
+ color: #dc3232;
100
+ margin: 2px 0 5px;
101
  }
102
+ input.rwmb-error.rwmb-error,
103
+ textarea.rwmb-error,
104
+ select.rwmb-error {
105
+ border-color: #dc3232;
106
+ background: #ffebe8;
107
+ }
108
+
109
+ /* Utilities
110
+ -------------------------------------------------------------- */
111
+ .rwmb-sortable-placeholder {
112
+ background: #fcf8e3;
113
+ border: 1px solid #faebcc;
114
+ display: block;
115
  }
116
 
117
 
118
+ /* Styles for 'side' meta boxes
119
  -------------------------------------------------------------- */
120
 
121
  #side-sortables .rwmb-label,
122
  #side-sortables .rwmb-input {
123
  width: 100%;
124
  }
125
+
126
+ /* Seamless style
127
+ --------------------------------------------------------------*/
128
+ .rwmb-seamless {
129
+ background: none;
130
+ border: none;
131
+ box-shadow: none;
132
+ }
133
+ .rwmb-seamless .inside {
134
+ padding-left: 0;
135
+ padding-right: 0;
136
+ }
137
+ .postbox.rwmb-seamless .hndle,
138
+ .postbox.rwmb-seamless .handlediv {
139
+ display: none;
140
+ }
141
+ .rwmb-seamless .rwmb-clone {
142
+ background: none;
143
+ }
inc/libraries/meta-box/css/video.css CHANGED
@@ -14,34 +14,12 @@
14
  background: #EEE;
15
  }
16
 
17
- .rwmb-video-item .rwmb-media-preview:before {
18
- padding-top: 56.25%;
19
- }
20
-
21
  .rwmb-video-item video {
22
  width: auto;
23
  height: 100%;
24
  }
25
 
26
- .rwmb-media-content .rwmb-video-wrapper {
27
- -webkit-transform: translate(-50%, -50%);
28
- -ms-transform: translate(-50%, -50%);
29
- transform: translate(-50%, -50%);
30
- max-height: 100%;
31
- max-width: 100%;
32
- border-radius: 3px;
33
- }
34
-
35
  .rwmb-video-item .rwmb-media-info {
36
  margin-left: 0;
37
- float: none;
38
- background: #FFF;
39
  padding: 10px;
40
  }
41
-
42
- .rwmb-video-item .rwmb-media-info h4 {
43
- white-space: nowrap;
44
- overflow: hidden;
45
- display: block;
46
- text-overflow: ellipsis;
47
- }
14
  background: #EEE;
15
  }
16
 
 
 
 
 
17
  .rwmb-video-item video {
18
  width: auto;
19
  height: 100%;
20
  }
21
 
 
 
 
 
 
 
 
 
 
22
  .rwmb-video-item .rwmb-media-info {
23
  margin-left: 0;
 
 
24
  padding: 10px;
25
  }
 
 
 
 
 
 
 
inc/libraries/meta-box/img/loader.gif DELETED
Binary file
inc/libraries/meta-box/inc/about/about.php CHANGED
@@ -47,7 +47,7 @@ class RWMB_About {
47
  * @return array
48
  */
49
  public function plugin_links( $links ) {
50
- $links[] = '<a href="' . esc_url( admin_url( 'index.php?page=meta-box-about' ) ) . '">' . esc_html__( 'About', 'meta-box' ) . '</a>';
51
  return $links;
52
  }
53
 
@@ -56,8 +56,8 @@ class RWMB_About {
56
  */
57
  public function register_page() {
58
  add_dashboard_page(
59
- __( 'Welcome to Meta Box', 'meta-box' ),
60
- __( 'Welcome to Meta Box', 'meta-box' ),
61
  'activate_plugins',
62
  'meta-box-about',
63
  array( $this, 'render' )
47
  * @return array
48
  */
49
  public function plugin_links( $links ) {
50
+ $links[] = '<a href="' . esc_url( admin_url( 'index.php?page=meta-box-about' ) ) . '">' . esc_html__( 'About', 'learnpress' ) . '</a>';
51
  return $links;
52
  }
53
 
56
  */
57
  public function register_page() {
58
  add_dashboard_page(
59
+ __( 'Welcome to Meta Box', 'learnpress' ),
60
+ __( 'Welcome to Meta Box', 'learnpress' ),
61
  'activate_plugins',
62
  'meta-box-about',
63
  array( $this, 'render' )
inc/libraries/meta-box/inc/about/sections/getting-started.php CHANGED
@@ -10,32 +10,32 @@
10
  <div id="getting-started" class="gt-tab-pane gt-is-active">
11
  <div class="feature-section two-col">
12
  <div class="col">
13
- <h3><?php esc_html_e( 'Getting Started With Online Generator', 'meta-box' ); ?></h3>
14
- <p><?php esc_html_e( 'The fastest way to getting started with Meta Box is use our online generator to generate meta boxes with custom fields. It provides a friendly UI for you to create meta boxes and custom fields just by drag and drop fields.', 'meta-box' ); ?><p>
15
 
16
- <a class="screenshot" href="https://metabox.io/online-generator/?utm_source=plugin_about_page&utm_medium=link_generator&utm_campaign=meta_box_about_page" target="_blank"><img src="<?php echo esc_url( RWMB_URL . 'inc/about/images/online-generator.png' ); ?>" alt="<?php esc_attr_e( 'online generator', 'meta-box' ); ?>"></a>
17
 
18
- <p><a href="<?php echo esc_url( 'https://metabox.io/online-generator/?utm_source=plugin_about_page&utm_medium=button_generator&utm_campaign=meta_box_about_page' ); ?>" class="button button-primary"><?php esc_html_e( 'Go to Online Generator', 'meta-box' ); ?></a></p>
19
  </div>
20
 
21
  <div class="col">
22
- <h3><?php esc_html_e( 'Understand The Basics', 'meta-box' ); ?></h3>
23
- <p><?php esc_html_e( 'Meta Box doesn\'t have any admin page for configuration or settings. Instead of that, it provides a very powerful API to speed up the process of creating meta boxes and custom fields. It might take you a little time at first, but then you\'ll love the way it work because it helps you do and customize almost everything.', 'meta-box' ); ?><p>
24
- <p><a href="<?php echo esc_url( 'https://docs.metabox.io/quick-start/?utm_source=plugin_about_page&utm_medium=button_docs&utm_campaign=meta_box_about_page' ); ?>" class="button button-primary"><?php esc_html_e( 'Learn More', 'meta-box' ); ?></a></p>
25
 
26
- <h3><?php esc_html_e( 'Extensions', 'meta-box' ); ?></h3>
27
- <p><?php esc_html_e( 'Wanna see more features that transform your WordPress website into a powerful CMS? Check out some extensions below:', 'meta-box' ); ?><p>
28
  <ul>
29
- <li><a target="_blank" href="https://metabox.io/plugins/meta-box-group/?utm_source=plugin_about_page&utm_medium=link_group&utm_campaign=meta_box_about_page"><span class="dashicons dashicons-welcome-widgets-menus"></span> <?php esc_html_e( 'Meta Box Group', 'meta-box' ); ?></a></li>
30
- <li><a target="_blank" href="https://metabox.io/plugins/meta-box-conditional-logic/?utm_source=plugin_about_page&utm_medium=link_conditional&utm_campaign=meta_box_about_page"><span class="dashicons dashicons-yes"></span> <?php esc_html_e( 'Meta Box Conditional Logic', 'meta-box' ); ?></a></li>
31
- <li><a target="_blank" href="https://metabox.io/plugins/mb-settings-page/?utm_source=plugin_about_page&utm_medium=link_settings&utm_campaign=meta_box_about_page"><span class="dashicons dashicons-admin-generic"></span> <?php esc_html_e( 'MB Settings Page', 'meta-box' ); ?></a></li>
32
- <li><a target="_blank" href="https://metabox.io/plugins/mb-term-meta/?utm_source=plugin_about_page&utm_medium=link_term&utm_campaign=meta_box_about_page"><span class="dashicons dashicons-image-filter"></span> <?php esc_html_e( 'MB Term Meta', 'meta-box' ); ?></a></li>
33
  </ul>
34
- <p><a target="_blank" class="button button-primary" href="https://metabox.io/plugins/?utm_source=plugin_about_page&utm_medium=button_extensions&utm_campaign=meta_box_about_page"><?php esc_html_e( 'More Extensions', 'meta-box' ); ?></a>
35
  </div>
36
  </div>
37
  <hr>
38
  <div class="return-to-dashboard">
39
- <a href="https://metabox.io/plugins/?utm_source=plugin_about_page&utm_medium=link_home&utm_campaign=meta_box_about_page"><?php esc_html_e( 'Go to MetaBox.IO &rarr;', 'meta-box' ); ?></a>
40
  </div>
41
  </div>
10
  <div id="getting-started" class="gt-tab-pane gt-is-active">
11
  <div class="feature-section two-col">
12
  <div class="col">
13
+ <h3><?php esc_html_e( 'Getting Started With Online Generator', 'learnpress' ); ?></h3>
14
+ <p><?php esc_html_e( 'The fastest way to getting started with Meta Box is use our online generator to generate meta boxes with custom fields. It provides a friendly UI for you to create meta boxes and custom fields just by drag and drop fields.', 'learnpress' ); ?><p>
15
 
16
+ <a class="screenshot" href="https://metabox.io/online-generator/?utm_source=plugin_about_page&utm_medium=link_generator&utm_campaign=meta_box_about_page" target="_blank"><img src="<?php echo esc_url( RWMB_URL . 'inc/about/images/online-generator.png' ); ?>" alt="<?php esc_attr_e( 'online generator', 'learnpress' ); ?>"></a>
17
 
18
+ <p><a href="<?php echo esc_url( 'https://metabox.io/online-generator/?utm_source=plugin_about_page&utm_medium=button_generator&utm_campaign=meta_box_about_page' ); ?>" class="button button-primary"><?php esc_html_e( 'Go to Online Generator', 'learnpress' ); ?></a></p>
19
  </div>
20
 
21
  <div class="col">
22
+ <h3><?php esc_html_e( 'Understand The Basics', 'learnpress' ); ?></h3>
23
+ <p><?php esc_html_e( 'Meta Box doesn\'t have any admin page for configuration or settings. Instead of that, it provides a very powerful API to speed up the process of creating meta boxes and custom fields. It might take you a little time at first, but then you\'ll love the way it work because it helps you do and customize almost everything.', 'learnpress' ); ?><p>
24
+ <p><a href="<?php echo esc_url( 'https://docs.metabox.io/quick-start/?utm_source=plugin_about_page&utm_medium=button_docs&utm_campaign=meta_box_about_page' ); ?>" class="button button-primary"><?php esc_html_e( 'Learn More', 'learnpress' ); ?></a></p>
25
 
26
+ <h3><?php esc_html_e( 'Extensions', 'learnpress' ); ?></h3>
27
+ <p><?php esc_html_e( 'Wanna see more features that transform your WordPress website into a powerful CMS? Check out some extensions below:', 'learnpress' ); ?><p>
28
  <ul>
29
+ <li><a target="_blank" href="https://metabox.io/plugins/meta-box-group/?utm_source=plugin_about_page&utm_medium=link_group&utm_campaign=meta_box_about_page"><span class="dashicons dashicons-welcome-widgets-menus"></span> <?php esc_html_e( 'Meta Box Group', 'learnpress' ); ?></a></li>
30
+ <li><a target="_blank" href="https://metabox.io/plugins/meta-box-conditional-logic/?utm_source=plugin_about_page&utm_medium=link_conditional&utm_campaign=meta_box_about_page"><span class="dashicons dashicons-yes"></span> <?php esc_html_e( 'Meta Box Conditional Logic', 'learnpress' ); ?></a></li>
31
+ <li><a target="_blank" href="https://metabox.io/plugins/mb-settings-page/?utm_source=plugin_about_page&utm_medium=link_settings&utm_campaign=meta_box_about_page"><span class="dashicons dashicons-admin-generic"></span> <?php esc_html_e( 'MB Settings Page', 'learnpress' ); ?></a></li>
32
+ <li><a target="_blank" href="https://metabox.io/plugins/mb-term-meta/?utm_source=plugin_about_page&utm_medium=link_term&utm_campaign=meta_box_about_page"><span class="dashicons dashicons-image-filter"></span> <?php esc_html_e( 'MB Term Meta', 'learnpress' ); ?></a></li>
33
  </ul>
34
+ <p><a target="_blank" class="button button-primary" href="https://metabox.io/plugins/?utm_source=plugin_about_page&utm_medium=button_extensions&utm_campaign=meta_box_about_page"><?php esc_html_e( 'More Extensions', 'learnpress' ); ?></a>
35
  </div>
36
  </div>
37
  <hr>
38
  <div class="return-to-dashboard">
39
+ <a href="https://metabox.io/plugins/?utm_source=plugin_about_page&utm_medium=link_home&utm_campaign=meta_box_about_page"><?php esc_html_e( 'Go to MetaBox.IO &rarr;', 'learnpress' ); ?></a>
40
  </div>
41
  </div>
inc/libraries/meta-box/inc/about/sections/tabs.php CHANGED
@@ -8,5 +8,5 @@
8
 
9
  ?>
10
  <h2 class="nav-tab-wrapper">
11
- <a href="#getting-started" class="nav-tab nav-tab-active"><?php esc_html_e( 'Getting Started', 'meta-box' ); ?></a>
12
  </h2>
8
 
9
  ?>
10
  <h2 class="nav-tab-wrapper">
11
+ <a href="#getting-started" class="nav-tab nav-tab-active"><?php esc_html_e( 'Getting Started', 'learnpress' ); ?></a>
12
  </h2>
inc/libraries/meta-box/inc/about/sections/welcome.php CHANGED
@@ -10,8 +10,8 @@
10
  <h1>
11
  <?php
12
  // Translators: %1$s - Plugin name, %2$s - Plugin version.
13
- echo esc_html( sprintf( __( 'Welcome to %1$s %2$s', 'meta-box' ), $this->plugin['Name'], $this->plugin['Version'] ) );
14
  ?>
15
  </h1>
16
- <div class="about-text"><?php esc_html_e( 'This plugin is a lightweight and powerful toolkit that helps you to create custom meta boxes and custom fields in WordPress fast and easy. Follow the instruction below to get started.', 'meta-box' ); ?></div>
17
  <a target="_blank" href="<?php echo esc_url( 'https://metabox.io/?utm_source=plugin_about_page&utm_medium=badge_link&utm_campaign=meta_box_about' ); ?>" class="wp-badge"><?php echo esc_html( $this->plugin['Name'] ); ?></a>
10
  <h1>
11
  <?php
12
  // Translators: %1$s - Plugin name, %2$s - Plugin version.
13
+ echo esc_html( sprintf( __( 'Welcome to %1$s %2$s', 'learnpress' ), $this->plugin['Name'], $this->plugin['Version'] ) );
14
  ?>
15
  </h1>
16
+ <div class="about-text"><?php esc_html_e( 'This plugin is a lightweight and powerful toolkit that helps you to create custom meta boxes and custom fields in WordPress fast and easy. Follow the instruction below to get started.', 'learnpress' ); ?></div>
17
  <a target="_blank" href="<?php echo esc_url( 'https://metabox.io/?utm_source=plugin_about_page&utm_medium=badge_link&utm_campaign=meta_box_about' ); ?>" class="wp-badge"><?php echo esc_html( $this->plugin['Name'] ); ?></a>
inc/libraries/meta-box/inc/autoloader.php CHANGED
@@ -84,10 +84,15 @@ class RWMB_Autoloader {
84
  'clone',
85
  'meta-box',
86
  'meta-box-registry',
 
 
 
 
87
  'validation',
88
  'sanitizer',
89
  'media-modal',
90
- // 'wpml',
 
91
 
92
  // Walkers.
93
  'walkers/walker',
@@ -139,7 +144,6 @@ class RWMB_Autoloader {
139
  'fields/file',
140
  'fields/image',
141
  'fields/image-select',
142
- 'fields/thickbox-image',
143
 
144
  'fields/media',
145
  'fields/file-upload',
84
  'clone',
85
  'meta-box',
86
  'meta-box-registry',
87
+ 'storage-registry',
88
+ 'interfaces/storage.php',
89
+ 'storages/base.php',
90
+ 'storages/post.php',
91
  'validation',
92
  'sanitizer',
93
  'media-modal',
94
+ 'wpml',
95
+ 'about/about.php',
96
 
97
  // Walkers.
98
  'walkers/walker',
144
  'fields/file',
145
  'fields/image',
146
  'fields/image-select',
 
147
 
148
  'fields/media',
149
  'fields/file-upload',
inc/libraries/meta-box/inc/clone.php CHANGED
@@ -39,7 +39,9 @@ class RWMB_Clone {
39
  }
40
  }
41
 
42
- if ( $field['multiple'] ) {
 
 
43
  $sub_field['field_name'] .= '[]';
44
  }
45
 
@@ -78,7 +80,11 @@ class RWMB_Clone {
78
  */
79
  public static function value( $new, $old, $post_id, $field ) {
80
  if ( ! is_array( $new ) ) {
81
- return array();
 
 
 
 
82
  }
83
 
84
  foreach ( $new as $key => $value ) {
@@ -86,6 +92,7 @@ class RWMB_Clone {
86
  $value = RWMB_Field::call( $field, 'value', $value, $old_value, $post_id );
87
  $new[ $key ] = RWMB_Field::filter( 'sanitize', $value, $field );
88
  }
 
89
  return $new;
90
  }
91
 
39
  }
40
  }
41
 
42
+ if ( in_array( $sub_field['type'], array( 'file', 'image' ), true ) ) {
43
+ $sub_field['file_input_name'] = $field['file_input_name'] . "[{$index}]";
44
+ } elseif ( $field['multiple'] ) {
45
  $sub_field['field_name'] .= '[]';
46
  }
47
 
80
  */
81
  public static function value( $new, $old, $post_id, $field ) {
82
  if ( ! is_array( $new ) ) {
83
+ $new = array();
84
+ }
85
+
86
+ if ( in_array( $field['type'], array( 'file', 'image' ), true ) ) {
87
+ return RWMB_Field::call( $field, 'value', $new, '', $post_id );
88
  }
89
 
90
  foreach ( $new as $key => $value ) {
92
  $value = RWMB_Field::call( $field, 'value', $value, $old_value, $post_id );
93
  $new[ $key ] = RWMB_Field::filter( 'sanitize', $value, $field );
94
  }
95
+
96
  return $new;
97
  }
98
 
inc/libraries/meta-box/inc/core.php CHANGED
@@ -18,20 +18,25 @@ class RWMB_Core {
18
  load_plugin_textdomain( 'meta-box', false, plugin_basename( RWMB_DIR ) . '/languages/' );
19
 
20
  add_filter( 'plugin_action_links_meta-box/meta-box.php', array( $this, 'plugin_links' ) );
21
- add_action( 'init', array( $this, 'register_meta_boxes' ) );
 
 
22
  add_action( 'edit_page_form', array( $this, 'fix_page_template' ) );
 
23
  }
24
 
25
  /**
26
  * Add links to Documentation and Extensions in plugin's list of action links.
27
  *
28
  * @since 4.3.11
 
29
  * @param array $links Array of plugin links.
 
30
  * @return array
31
  */
32
  public function plugin_links( $links ) {
33
- $links[] = '<a href="https://metabox.io/docs/">' . esc_html__( 'Documentation', 'meta-box' ) . '</a>';
34
- $links[] = '<a href="https://metabox.io/plugins/">' . esc_html__( 'Extensions', 'meta-box' ) . '</a>';
35
  return $links;
36
  }
37
 
@@ -44,11 +49,11 @@ class RWMB_Core {
44
  public function register_meta_boxes() {
45
  $configs = apply_filters( 'rwmb_meta_boxes', array() );
46
  $meta_boxes = rwmb_get_registry( 'meta_box' );
47
- $fields = rwmb_get_registry( 'field' );
48
  foreach ( $configs as $config ) {
49
- $meta_box = new RW_Meta_Box( $config );
50
  $meta_boxes->add( $meta_box );
51
- $fields->add_from_meta_box( $meta_box );
52
  }
53
  }
54
 
@@ -58,6 +63,7 @@ class RWMB_Core {
58
  * Unset the page template if the page does not exist to allow the post to save.
59
  *
60
  * @param WP_Post $post Post object.
 
61
  * @since 4.3.10
62
  */
63
  public function fix_page_template( WP_Post $post ) {
@@ -81,4 +87,31 @@ class RWMB_Core {
81
  $meta_boxes = rwmb_get_registry( 'meta_box' )->all();
82
  return wp_list_pluck( $meta_boxes, 'meta_box' );
83
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
84
  }
18
  load_plugin_textdomain( 'meta-box', false, plugin_basename( RWMB_DIR ) . '/languages/' );
19
 
20
  add_filter( 'plugin_action_links_meta-box/meta-box.php', array( $this, 'plugin_links' ) );
21
+
22
+ // Uses priority 20 to support custom port types registered using the default priority.
23
+ add_action( 'init', array( $this, 'register_meta_boxes' ), 20 );
24
  add_action( 'edit_page_form', array( $this, 'fix_page_template' ) );
25
+ $this->add_context_hooks();
26
  }
27
 
28
  /**
29
  * Add links to Documentation and Extensions in plugin's list of action links.
30
  *
31
  * @since 4.3.11
32
+ *
33
  * @param array $links Array of plugin links.
34
+ *
35
  * @return array
36
  */
37
  public function plugin_links( $links ) {
38
+ $links[] = '<a href="https://docs.metabox.io">' . esc_html__( 'Documentation', 'learnpress' ) . '</a>';
39
+ $links[] = '<a href="https://metabox.io/plugins/">' . esc_html__( 'Extensions', 'learnpress' ) . '</a>';
40
  return $links;
41
  }
42
 
49
  public function register_meta_boxes() {
50
  $configs = apply_filters( 'rwmb_meta_boxes', array() );
51
  $meta_boxes = rwmb_get_registry( 'meta_box' );
52
+
53
  foreach ( $configs as $config ) {
54
+ $meta_box = rwmb_get_meta_box( $config );
55
  $meta_boxes->add( $meta_box );
56
+ $meta_box->register_fields();
57
  }
58
  }
59
 
63
  * Unset the page template if the page does not exist to allow the post to save.
64
  *
65
  * @param WP_Post $post Post object.
66
+ *
67
  * @since 4.3.10
68
  */
69
  public function fix_page_template( WP_Post $post ) {
87
  $meta_boxes = rwmb_get_registry( 'meta_box' )->all();
88
  return wp_list_pluck( $meta_boxes, 'meta_box' );
89
  }
90
+
91
+ /**
92
+ * Add hooks for extra contexts.
93
+ */
94
+ public function add_context_hooks() {
95
+ $hooks = array(
96
+ 'edit_form_top',
97
+ 'edit_form_after_title',
98
+ 'edit_form_after_editor',
99
+ 'edit_form_before_permalink',
100
+ );
101
+
102
+ foreach ( $hooks as $hook ) {
103
+ add_action( $hook, array( $this, 'add_context' ) );
104
+ }
105
+ }
106
+
107
+ /**
108
+ * Add new meta box context.
109
+ *
110
+ * @param WP_Post $post The current post object.
111
+ */
112
+ public function add_context( $post ) {
113
+ $hook = current_filter();
114
+ $context = 'edit_form_top' === $hook ? 'form_top' : substr( $hook, 10 );
115
+ do_meta_boxes( null, $context, $post );
116
+ }
117
  }
inc/libraries/meta-box/inc/field-registry.php CHANGED
@@ -17,19 +17,6 @@ class RWMB_Field_Registry {
17
  */
18
  private $data = array();
19
 
20
- /**
21
- * Add all fields in a meta box to the registry.
22
- *
23
- * @param RW_Meta_Box $meta_box Meta box object.
24
- */
25
- public function add_from_meta_box( RW_Meta_Box $meta_box ) {
26
- foreach ( $meta_box->fields as $field ) {
27
- foreach ( $meta_box->post_types as $post_type ) {
28
- $this->add( $field, $post_type );
29
- }
30
- }
31
- }
32
-
33
  /**
34
  * Add a single field to the registry.
35
  *
@@ -63,4 +50,15 @@ class RWMB_Field_Registry {
63
  public function get( $id, $type, $object_type = 'post' ) {
64
  return isset( $this->data[ $object_type ][ $type ][ $id ] ) ? $this->data[ $object_type ][ $type ][ $id ] : false;
65
  }
 
 
 
 
 
 
 
 
 
 
 
66
  }
17
  */
18
  private $data = array();
19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  /**
21
  * Add a single field to the registry.
22
  *
50
  public function get( $id, $type, $object_type = 'post' ) {
51
  return isset( $this->data[ $object_type ][ $type ][ $id ] ) ? $this->data[ $object_type ][ $type ][ $id ] : false;
52
  }
53
+
54
+ /**
55
+ * Retrieve fields by object type.
56
+ *
57
+ * @param string $object_type Object type which the field belongs to.
58
+ *
59
+ * @return array List of fields.
60
+ */
61
+ public function get_by_object_type( $object_type = 'post' ) {
62
+ return isset( $this->data[ $object_type ] ) ? $this->data[ $object_type ] : array();
63
+ }
64
  }
inc/libraries/meta-box/inc/field.php CHANGED
@@ -184,8 +184,13 @@ abstract class RWMB_Field {
184
  return '';
185
  }
186
 
187
- $object_type = ! empty( $args['object_type'] ) ? $args['object_type'] : 'post';
188
- $storage = rwmb_get_storage( $object_type );
 
 
 
 
 
189
 
190
  if ( ! isset( $args['single'] ) ) {
191
  $args['single'] = $field['clone'] || ! $field['multiple'];
@@ -244,7 +249,6 @@ abstract class RWMB_Field {
244
  }
245
  }
246
 
247
-
248
  return $meta;
249
  }
250
 
@@ -282,11 +286,15 @@ abstract class RWMB_Field {
282
  * @param array $field The field parameters.
283
  */
284
  public static function save( $new, $old, $post_id, $field ) {
 
 
 
285
  $name = $field['id'];
 
286
 
287
  // Remove post meta if it's empty.
288
  if ( '' === $new || array() === $new ) {
289
- delete_post_meta( $post_id, $name );
290
  return;
291
  }
292
 
@@ -301,7 +309,7 @@ abstract class RWMB_Field {
301
  }
302
  // Reset indexes.
303
  $new = array_values( $new );
304
- update_post_meta( $post_id, $name, $new );
305
  return;
306
  }
307
 
@@ -311,17 +319,17 @@ abstract class RWMB_Field {
311
  $new = (array) $new;
312
  $new_values = array_diff( $new, $old );
313
  foreach ( $new_values as $new_value ) {
314
- add_post_meta( $post_id, $name, $new_value, false );
315
  }
316
  $old_values = array_diff( $old, $new );
317
  foreach ( $old_values as $old_value ) {
318
- delete_post_meta( $post_id, $name, $old_value );
319
  }
320
  return;
321
  }
322
 
323
  // Default: just update post meta.
324
- update_post_meta( $post_id, $name, $new );
325
  }
326
 
327
  /**
@@ -345,17 +353,26 @@ abstract class RWMB_Field {
345
  'field_name' => isset( $field['id'] ) ? $field['id'] : '',
346
  'placeholder' => '',
347
 
348
- 'clone' => false,
349
- 'max_clone' => 0,
350
- 'sort_clone' => false,
351
- 'add_button' => __( '+ Add more', 'meta-box' ),
 
352
 
353
  'class' => '',
354
  'disabled' => false,
355
  'required' => false,
 
356
  'attributes' => array(),
357
  ) );
358
 
 
 
 
 
 
 
 
359
  return $field;
360
  }
361
 
@@ -369,11 +386,12 @@ abstract class RWMB_Field {
369
  */
370
  public static function get_attributes( $field, $value = null ) {
371
  $attributes = wp_parse_args( $field['attributes'], array(
372
- 'disabled' => $field['disabled'],
373
- 'required' => $field['required'],
374
- 'id' => $field['id'],
375
- 'class' => '',
376
- 'name' => $field['field_name'],
 
377
  ) );
378
 
379
  $attributes['class'] = implode( ' ', array_merge( array( "rwmb-{$field['type']}" ), (array) $attributes['class'] ) );
@@ -461,23 +479,53 @@ abstract class RWMB_Field {
461
  */
462
  public static function the_value( $field, $args = array(), $post_id = null ) {
463
  $value = self::call( 'get_value', $field, $args, $post_id );
464
- return self::call( 'format_value', $field, $value );
 
 
 
 
 
465
  }
466
 
467
  /**
468
  * Format value for the helper functions.
469
  *
470
- * @param array $field Field parameters.
471
- * @param string|array $value The field meta value.
 
 
 
472
  * @return string
473
  */
474
- public static function format_value( $field, $value ) {
475
- if ( ! is_array( $value ) ) {
476
- return self::call( 'format_single_value', $field, $value );
477
  }
478
  $output = '<ul>';
479
- foreach ( $value as $subvalue ) {
480
- $output .= '<li>' . self::call( 'format_value', $field, $subvalue ) . '</li>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
481
  }
482
  $output .= '</ul>';
483
  return $output;
@@ -486,11 +534,14 @@ abstract class RWMB_Field {
486
  /**
487
  * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.
488
  *
489
- * @param array $field Field parameters.
490
- * @param string $value The value.
 
 
 
491
  * @return string
492
  */
493
- public static function format_single_value( $field, $value ) {
494
  return $value;
495
  }
496
 
184
  return '';
185
  }
186
 
187
+ if ( isset( $args['object_type'] ) ) {
188
+ $storage = rwmb_get_storage( $args['object_type'] );
189
+ } elseif ( isset( $field['storage'] ) ) {
190
+ $storage = $field['storage'];
191
+ } else {
192
+ $storage = rwmb_get_storage( 'post' );
193
+ }
194
 
195
  if ( ! isset( $args['single'] ) ) {
196
  $args['single'] = $field['clone'] || ! $field['multiple'];
249
  }
250
  }
251
 
 
252
  return $meta;
253
  }
254
 
286
  * @param array $field The field parameters.
287
  */
288
  public static function save( $new, $old, $post_id, $field ) {
289
+ if ( empty( $field['id'] ) ) {
290
+ return;
291
+ }
292
  $name = $field['id'];
293
+ $storage = $field['storage'];
294
 
295
  // Remove post meta if it's empty.
296
  if ( '' === $new || array() === $new ) {
297
+ $storage->delete( $post_id, $name );
298
  return;
299
  }
300
 
309
  }
310
  // Reset indexes.
311
  $new = array_values( $new );
312
+ $storage->update( $post_id, $name, $new );
313
  return;
314
  }
315
 
319
  $new = (array) $new;
320
  $new_values = array_diff( $new, $old );
321
  foreach ( $new_values as $new_value ) {
322
+ $storage->add( $post_id, $name, $new_value, false );
323
  }
324
  $old_values = array_diff( $old, $new );
325
  foreach ( $old_values as $old_value ) {
326
+ $storage->delete( $post_id, $name, $old_value );
327
  }
328
  return;
329
  }
330
 
331
  // Default: just update post meta.
332
+ $storage->update( $post_id, $name, $new );
333
  }
334
 
335
  /**
353
  'field_name' => isset( $field['id'] ) ? $field['id'] : '',
354
  'placeholder' => '',
355
 
356
+ 'clone' => false,
357
+ 'max_clone' => 0,
358
+ 'sort_clone' => false,
359
+ 'add_button' => __( '+ Add more', 'learnpress' ),
360
+ 'clone_default' => false,
361
 
362
  'class' => '',
363
  'disabled' => false,
364
  'required' => false,
365
+ 'autofocus' => false,
366
  'attributes' => array(),
367
  ) );
368
 
369
+ if ( $field['clone_default'] ) {
370
+ $field['attributes'] = wp_parse_args( $field['attributes'], array(
371
+ 'data-default' => $field['std'],
372
+ 'data-clone-default' => 'true',
373
+ ) );
374
+ }
375
+
376
  return $field;
377
  }
378
 
386
  */
387
  public static function get_attributes( $field, $value = null ) {
388
  $attributes = wp_parse_args( $field['attributes'], array(
389
+ 'disabled' => $field['disabled'],
390
+ 'autofocus' => $field['autofocus'],
391
+ 'required' => $field['required'],
392
+ 'id' => $field['id'],
393
+ 'class' => '',
394
+ 'name' => $field['field_name'],
395
  ) );
396
 
397
  $attributes['class'] = implode( ' ', array_merge( array( "rwmb-{$field['type']}" ), (array) $attributes['class'] ) );
479
  */
480
  public static function the_value( $field, $args = array(), $post_id = null ) {
481
  $value = self::call( 'get_value', $field, $args, $post_id );
482
+
483
+ if ( false === $value ) {
484
+ return '';
485
+ }
486
+
487
+ return self::call( 'format_value', $field, $value, $args, $post_id );
488
  }
489
 
490
  /**
491
  * Format value for the helper functions.
492
  *
493
+ * @param array $field Field parameters.
494
+ * @param string|array $value The field meta value.
495
+ * @param array $args Additional arguments. Rarely used. See specific fields for details.
496
+ * @param int|null $post_id Post ID. null for current post. Optional.
497
+ *
498
  * @return string
499
  */
500
+ public static function format_value( $field, $value, $args, $post_id ) {
501
+ if ( ! $field['clone'] ) {
502
+ return self::call( 'format_clone_value', $field, $value, $args, $post_id );
503
  }
504
  $output = '<ul>';
505
+ foreach ( $value as $clone ) {
506
+ $output .= '<li>' . self::call( 'format_clone_value', $field, $clone, $args, $post_id ) . '</li>';
507
+ }
508
+ $output .= '</ul>';
509
+ return $output;
510
+ }
511
+
512
+ /**
513
+ * Format value for a clone.
514
+ *
515
+ * @param array $field Field parameters.
516
+ * @param string|array $value The field meta value.
517
+ * @param array $args Additional arguments. Rarely used. See specific fields for details.
518
+ * @param int|null $post_id Post ID. null for current post. Optional.
519
+ *
520
+ * @return string
521
+ */
522
+ public static function format_clone_value( $field, $value, $args, $post_id ) {
523
+ if ( ! $field['multiple'] ) {
524
+ return self::call( 'format_single_value', $field, $value, $args, $post_id );
525
+ }
526
+ $output = '<ul>';
527
+ foreach ( $value as $single ) {
528
+ $output .= '<li>' . self::call( 'format_single_value', $field, $single, $args, $post_id ) . '</li>';
529
  }
530
  $output .= '</ul>';
531
  return $output;
534
  /**
535
  * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.
536
  *
537
+ * @param array $field Field parameters.
538
+ * @param string $value The value.
539
+ * @param array $args Additional arguments. Rarely used. See specific fields for details.
540
+ * @param int|null $post_id Post ID. null for current post. Optional.
541
+ *
542
  * @return string
543
  */
544
+ public static function format_single_value( $field, $value, $args, $post_id ) {
545
  return $value;
546
  }
547
 
inc/libraries/meta-box/inc/fields/autocomplete.php CHANGED
@@ -17,7 +17,7 @@ class RWMB_Autocomplete_Field extends RWMB_Multiple_Values_Field {
17
  wp_enqueue_script( 'rwmb-autocomplete', RWMB_JS_URL . 'autocomplete.js', array( 'jquery-ui-autocomplete' ), RWMB_VER, true );
18
 
19
  self::localize_script( 'rwmb-autocomplete', 'RWMB_Autocomplete', array(
20
- 'delete' => __( 'Delete', 'meta-box' ),
21
  ) );
22
  }
23
 
@@ -78,7 +78,7 @@ class RWMB_Autocomplete_Field extends RWMB_Multiple_Values_Field {
78
  $html .= sprintf(
79
  $tpl,
80
  esc_html( $label ),
81
- esc_html__( 'Delete', 'meta-box' ),
82
  esc_attr( $field['field_name'] ),
83
  esc_attr( $value )
84
  );
@@ -90,7 +90,7 @@ class RWMB_Autocomplete_Field extends RWMB_Multiple_Values_Field {
90
  $html .= sprintf(
91
  $tpl,
92
  esc_html( $label ),
93
- esc_html__( 'Delete', 'meta-box' ),
94
  esc_attr( $field['field_name'] ),
95
  esc_attr( $value )
96
  );
17
  wp_enqueue_script( 'rwmb-autocomplete', RWMB_JS_URL . 'autocomplete.js', array( 'jquery-ui-autocomplete' ), RWMB_VER, true );
18
 
19
  self::localize_script( 'rwmb-autocomplete', 'RWMB_Autocomplete', array(
20
+ 'delete' => __( 'Delete', 'learnpress' ),
21
  ) );
22
  }
23
 
78
  $html .= sprintf(
79
  $tpl,
80
  esc_html( $label ),
81
+ esc_html__( 'Delete', 'learnpress' ),
82
  esc_attr( $field['field_name'] ),
83
  esc_attr( $value )
84
  );
90
  $html .= sprintf(
91
  $tpl,
92
  esc_html( $label ),
93
+ esc_html__( 'Delete', 'learnpress' ),
94
  esc_attr( $field['field_name'] ),
95
  esc_attr( $value )
96
  );
inc/libraries/meta-box/inc/fields/button.php CHANGED
@@ -29,7 +29,7 @@ class RWMB_Button_Field extends RWMB_Field {
29
  */
30
  public static function normalize( $field ) {
31
  $field = wp_parse_args( $field, array(
32
- 'std' => __( 'Click me', 'meta-box' ),
33
  ) );
34
  $field = parent::normalize( $field );
35
  return $field;
29
  */
30
  public static function normalize( $field ) {
31
  $field = wp_parse_args( $field, array(
32
+ 'std' => __( 'Click me', 'learnpress' ),
33
  ) );
34
  $field = parent::normalize( $field );
35
  return $field;
inc/libraries/meta-box/inc/fields/checkbox-list.php CHANGED
@@ -16,7 +16,6 @@ class RWMB_Checkbox_List_Field extends RWMB_Input_List_Field {
16
  * @return array
17
  */
18
  public static function normalize( $field ) {
19
-
20
  $field['multiple'] = true;
21
  $field = parent::normalize( $field );
22
 
16
  * @return array
17
  */
18
  public static function normalize( $field ) {
 
19
  $field['multiple'] = true;
20
  $field = parent::normalize( $field );
21
 
inc/libraries/meta-box/inc/fields/checkbox.php CHANGED
@@ -40,13 +40,16 @@ class RWMB_Checkbox_Field extends RWMB_Input_Field {
40
  }
41
 
42
  /**
43
- * Format a single value for the helper functions.
 
 
 
 
 
44
  *
45
- * @param array $field Field parameters.
46
- * @param string $value The value.
47
  * @return string
48
  */
49
- public static function format_single_value( $field, $value ) {
50
- return $value ? __( 'Yes', 'meta-box' ) : __( 'No', 'meta-box' );
51
  }
52
  }
40
  }
41
 
42
  /**
43
+ * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.
44
+ *
45
+ * @param array $field Field parameters.
46
+ * @param string $value The value.
47
+ * @param array $args Additional arguments. Rarely used. See specific fields for details.
48
+ * @param int|null $post_id Post ID. null for current post. Optional.
49
  *
 
 
50
  * @return string
51
  */
52
+ public static function format_single_value( $field, $value, $args, $post_id ) {
53
+ return $value ? __( 'Yes', 'learnpress' ) : __( 'No', 'learnpress' );
54
  }
55
  }
inc/libraries/meta-box/inc/fields/choice.php CHANGED
@@ -106,13 +106,16 @@ abstract class RWMB_Choice_Field extends RWMB_Field {
106
  }
107
 
108
  /**
109
- * Format a single value for the helper functions.
 
 
 
 
 
110
  *
111
- * @param array $field Field parameters.
112
- * @param string $value Meta value.
113
  * @return string
114
  */
115
- public static function format_single_value( $field, $value ) {
116
  return self::call( 'get_option_label', $field, $value );
117
  }
118
 
106
  }
107
 
108
  /**
109
+ * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.
110
+ *
111
+ * @param array $field Field parameters.
112
+ * @param string $value The value.
113
+ * @param array $args Additional arguments. Rarely used. See specific fields for details.
114
+ * @param int|null $post_id Post ID. null for current post. Optional.
115
  *
 
 
116
  * @return string
117
  */
118
+ public static function format_single_value( $field, $value, $args, $post_id ) {
119
  return self::call( 'get_option_label', $field, $value );
120
  }
121
 
inc/libraries/meta-box/inc/fields/color.php CHANGED
@@ -14,21 +14,28 @@ class RWMB_Color_Field extends RWMB_Text_Field {
14
  */
15
  public static function admin_enqueue_scripts() {
16
  wp_enqueue_style( 'rwmb-color', RWMB_CSS_URL . 'color.css', array( 'wp-color-picker' ), RWMB_VER );
17
- wp_enqueue_script( 'rwmb-color', RWMB_JS_URL . 'color.js', array( 'wp-color-picker' ), RWMB_VER, true );
 
 
 
 
 
 
 
 
18
  }
19
 
20
  /**
21
  * Normalize parameters for field.
22
  *
23
  * @param array $field Field parameters.
 
24
  * @return array
25
  */
26
  public static function normalize( $field ) {
27
  $field = wp_parse_args( $field, array(
28
- 'size' => 7,
29
- 'maxlength' => 7,
30
- 'pattern' => '^#+([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$',
31
- 'js_options' => array(),
32
  ) );
33
 
34
  $field['js_options'] = wp_parse_args( $field['js_options'], array(
@@ -47,26 +54,34 @@ class RWMB_Color_Field extends RWMB_Text_Field {
47
  *
48
  * @param array $field Field parameters.
49
  * @param mixed $value Meta value.
 
50
  * @return array
51
  */
52
  public static function get_attributes( $field, $value = null ) {
53
- $attributes = parent::get_attributes( $field, $value );
54
- $attributes = wp_parse_args( $attributes, array(
55
  'data-options' => wp_json_encode( $field['js_options'] ),
56
  ) );
57
  $attributes['type'] = 'text';
58
 
 
 
 
 
59
  return $attributes;
60
  }
61
 
62
  /**
63
- * Format a single value for the helper functions.
 
 
 
 
 
64
  *
65
- * @param array $field Field parameters.
66
- * @param string $value The value.
67
  * @return string
68
  */
69
- public static function format_single_value( $field, $value ) {
70
  return sprintf( "<span style='display:inline-block;width:20px;height:20px;border-radius:50%%;background:%s;'></span>", $value );
71
  }
72
  }
14
  */
15
  public static function admin_enqueue_scripts() {
16
  wp_enqueue_style( 'rwmb-color', RWMB_CSS_URL . 'color.css', array( 'wp-color-picker' ), RWMB_VER );
17
+
18
+ $dependencies = array( 'wp-color-picker' );
19
+ $args = func_get_args();
20
+ $field = reset( $args );
21
+ if ( ! empty( $field['alpha_channel'] ) ) {
22
+ wp_enqueue_script( 'wp-color-picker-alpha', RWMB_JS_URL . 'wp-color-picker-alpha/wp-color-picker-alpha.min.js', array( 'wp-color-picker' ), RWMB_VER, true );
23
+ $dependencies = array( 'wp-color-picker-alpha' );
24
+ }
25
+ wp_enqueue_script( 'rwmb-color', RWMB_JS_URL . 'color.js', $dependencies, RWMB_VER, true );
26
  }
27
 
28
  /**
29
  * Normalize parameters for field.
30
  *
31
  * @param array $field Field parameters.
32
+ *
33
  * @return array
34
  */
35
  public static function normalize( $field ) {
36
  $field = wp_parse_args( $field, array(
37
+ 'alpha_channel' => false,
38
+ 'js_options' => array(),
 
 
39
  ) );
40
 
41
  $field['js_options'] = wp_parse_args( $field['js_options'], array(
54
  *
55
  * @param array $field Field parameters.
56
  * @param mixed $value Meta value.
57
+ *
58
  * @return array
59
  */
60
  public static function get_attributes( $field, $value = null ) {
61
+ $attributes = parent::get_attributes( $field, $value );
62
+ $attributes = wp_parse_args( $attributes, array(
63
  'data-options' => wp_json_encode( $field['js_options'] ),
64
  ) );
65
  $attributes['type'] = 'text';
66
 
67
+ if ( $field['alpha_channel'] ) {
68
+ $attributes['data-alpha'] = 'true';
69
+ }
70
+
71
  return $attributes;
72
  }
73
 
74
  /**
75
+ * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.
76
+ *
77
+ * @param array $field Field parameters.
78
+ * @param string $value The value.
79
+ * @param array $args Additional arguments. Rarely used. See specific fields for details.
80
+ * @param int|null $post_id Post ID. null for current post. Optional.
81
  *
 
 
82
  * @return string
83
  */
84
+ public static function format_single_value( $field, $value, $args, $post_id ) {
85
  return sprintf( "<span style='display:inline-block;width:20px;height:20px;border-radius:50%%;background:%s;'></span>", $value );
86
  }
87
  }
inc/libraries/meta-box/inc/fields/datetime.php CHANGED
@@ -240,4 +240,24 @@ class RWMB_Datetime_Field extends RWMB_Text_Field {
240
  . $field['js_options']['separator']
241
  . strtr( $field['js_options']['timeFormat'], self::$time_formats );
242
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
243
  }
240
  . $field['js_options']['separator']
241
  . strtr( $field['js_options']['timeFormat'], self::$time_formats );
242
  }
243
+
244
+ /**
245
+ * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.
246
+ *
247
+ * @param array $field Field parameters.
248
+ * @param string $value The value.
249
+ * @param array $args Additional arguments. Rarely used. See specific fields for details.
250
+ * @param int|null $post_id Post ID. null for current post. Optional.
251
+ *
252
+ * @return string
253
+ */
254
+ public static function format_single_value( $field, $value, $args, $post_id ) {
255
+ if ( ! isset( $args['format'] ) ) {
256
+ return $value;
257
+ }
258
+ if ( ! $field['timestamp'] ) {
259
+ $value = strtotime( $value );
260
+ }
261
+ return date( $args['format'], $value );
262
+ }
263
  }
inc/libraries/meta-box/inc/fields/fieldset-text.php CHANGED
@@ -9,6 +9,13 @@
9
  * Fieldset text class.
10
  */
11
  class RWMB_Fieldset_Text_Field extends RWMB_Text_Field {
 
 
 
 
 
 
 
12
  /**
13
  * Get field HTML.
14
  *
@@ -19,7 +26,7 @@ class RWMB_Fieldset_Text_Field extends RWMB_Text_Field {
19
  */
20
  public static function html( $meta, $field ) {
21
  $html = array();
22
- $tpl = '<label>%s %s</label>';
23
 
24
  foreach ( $field['options'] as $key => $label ) {
25
  $value = isset( $meta[ $key ] ) ? $meta[ $key ] : '';
@@ -36,6 +43,7 @@ class RWMB_Fieldset_Text_Field extends RWMB_Text_Field {
36
  * Do not show field description.
37
  *
38
  * @param array $field Field parameters.
 
39
  * @return string
40
  */
41
  public static function input_description( $field ) {
@@ -46,6 +54,7 @@ class RWMB_Fieldset_Text_Field extends RWMB_Text_Field {
46
  * Do not show field description.
47
  *
48
  * @param array $field Field parameters.
 
49
  * @return string
50
  */
51
  public static function label_description( $field ) {
@@ -70,22 +79,25 @@ class RWMB_Fieldset_Text_Field extends RWMB_Text_Field {
70
  /**
71
  * Format value for the helper functions.
72
  *
73
- * @param array $field Field parameters.
74
- * @param string|array $value Meta value.
 
 
 
75
  * @return string
76
  */
77
- public static function format_value( $field, $value ) {
78
  $output = '<table><thead><tr>';
79
  foreach ( $field['options'] as $label ) {
80
  $output .= "<th>$label</th>";
81
  }
82
- $output .= '<tr>';
83
 
84
  if ( ! $field['clone'] ) {
85
- $output .= self::format_single_value( $field, $value );
86
  } else {
87
  foreach ( $value as $subvalue ) {
88
- $output .= self::format_single_value( $field, $subvalue );
89
  }
90
  }
91
  $output .= '</tbody></table>';
@@ -93,13 +105,16 @@ class RWMB_Fieldset_Text_Field extends RWMB_Text_Field {
93
  }
94
 
95
  /**
96
- * Format a single value for the helper functions.
 
 
 
 
 
97
  *
98
- * @param array $field Field parameters.
99
- * @param array $value The value.
100
  * @return string
101
  */
102
- public static function format_single_value( $field, $value ) {
103
  $output = '<tr>';
104
  foreach ( $value as $subvalue ) {
105
  $output .= "<td>$subvalue</td>";
9
  * Fieldset text class.
10
  */
11
  class RWMB_Fieldset_Text_Field extends RWMB_Text_Field {
12
+ /**
13
+ * Enqueue field scripts and styles.
14
+ */
15
+ public static function admin_enqueue_scripts() {
16
+ wp_enqueue_style( 'rwmb-fieldset-text', RWMB_CSS_URL . 'fieldset-text.css', '', RWMB_VER );
17
+ }
18
+
19
  /**
20
  * Get field HTML.
21
  *
26
  */
27
  public static function html( $meta, $field ) {
28
  $html = array();
29
+ $tpl = '<p><label>%s</label> %s</p>';
30
 
31
  foreach ( $field['options'] as $key => $label ) {
32
  $value = isset( $meta[ $key ] ) ? $meta[ $key ] : '';
43
  * Do not show field description.
44
  *
45
  * @param array $field Field parameters.
46
+ *
47
  * @return string
48
  */
49
  public static function input_description( $field ) {
54
  * Do not show field description.
55
  *
56
  * @param array $field Field parameters.
57
+ *
58
  * @return string
59
  */
60
  public static function label_description( $field ) {
79
  /**
80
  * Format value for the helper functions.
81
  *
82
+ * @param array $field Field parameters.
83
+ * @param string|array $value The field meta value.
84
+ * @param array $args Additional arguments. Rarely used. See specific fields for details.
85
+ * @param int|null $post_id Post ID. null for current post. Optional.
86
+ *
87
  * @return string
88
  */
89
+ public static function format_value( $field, $value, $args, $post_id ) {
90
  $output = '<table><thead><tr>';
91
  foreach ( $field['options'] as $label ) {
92
  $output .= "<th>$label</th>";
93
  }
94
+ $output .= '</tr></thead></tbody>';
95
 
96
  if ( ! $field['clone'] ) {
97
+ $output .= self::format_single_value( $field, $value, $args, $post_id );
98
  } else {
99
  foreach ( $value as $subvalue ) {
100
+ $output .= self::format_single_value( $field, $subvalue, $args, $post_id );
101
  }
102
  }
103
  $output .= '</tbody></table>';
105
  }
106
 
107
  /**
108
+ * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.
109
+ *
110
+ * @param array $field Field parameters.
111
+ * @param array $value The value.
112
+ * @param array $args Additional arguments. Rarely used. See specific fields for details.
113
+ * @param int|null $post_id Post ID. null for current post. Optional.
114
  *
 
 
115
  * @return string
116
  */
117
+ public static function format_single_value( $field, $value, $args, $post_id ) {
118
  $output = '<tr>';
119
  foreach ( $value as $subvalue ) {
120
  $output .= "<td>$subvalue</td>";
inc/libraries/meta-box/inc/fields/file-input.php CHANGED
@@ -14,9 +14,10 @@ class RWMB_File_Input_Field extends RWMB_Input_Field {
14
  */
15
  public static function admin_enqueue_scripts() {
16
  wp_enqueue_media();
 
17
  wp_enqueue_script( 'rwmb-file-input', RWMB_JS_URL . 'file-input.js', array( 'jquery' ), RWMB_VER, true );
18
  self::localize_script('rwmb-file-input', 'rwmbFileInput', array(
19
- 'frameTitle' => esc_html__( 'Select File', 'meta-box' ),
20
  ) );
21
  }
22
 
@@ -32,12 +33,12 @@ class RWMB_File_Input_Field extends RWMB_Input_Field {
32
  $attributes = self::get_attributes( $field, $meta );
33
  return sprintf(
34
  '<input %s>
35
- <a href="#" class="rwmb-file-input-select button-primary">%s</a>
36
  <a href="#" class="rwmb-file-input-remove button %s">%s</a>',
37
  self::render_attributes( $attributes ),
38
- esc_html__( 'Select', 'meta-box' ),
39
  $meta ? '' : 'hidden',
40
- esc_html__( 'Remove', 'meta-box' )
41
  );
42
  }
43
 
14
  */
15
  public static function admin_enqueue_scripts() {
16
  wp_enqueue_media();
17
+ wp_enqueue_style( 'rwmb-file-input', RWMB_CSS_URL . 'file-input.css' );
18
  wp_enqueue_script( 'rwmb-file-input', RWMB_JS_URL . 'file-input.js', array( 'jquery' ), RWMB_VER, true );
19
  self::localize_script('rwmb-file-input', 'rwmbFileInput', array(
20
+ 'frameTitle' => esc_html__( 'Select File', 'learnpress' ),
21
  ) );
22
  }
23
 
33
  $attributes = self::get_attributes( $field, $meta );
34
  return sprintf(
35
  '<input %s>
36
+ <a href="#" class="rwmb-file-input-select button">%s</a>
37
  <a href="#" class="rwmb-file-input-remove button %s">%s</a>',
38
  self::render_attributes( $attributes ),
39
+ esc_html__( 'Select', 'learnpress' ),
40
  $meta ? '' : 'hidden',
41
+ esc_html__( 'Remove', 'learnpress' )
42
  );
43
  }
44
 
inc/libraries/meta-box/inc/fields/file.php CHANGED
@@ -18,9 +18,9 @@ class RWMB_File_Field extends RWMB_Field {
18
 
19
  self::localize_script( 'rwmb-file', 'rwmbFile', array(
20
  // Translators: %d is the number of files in singular form.
21
- 'maxFileUploadsSingle' => __( 'You may only upload maximum %d file', 'meta-box' ),
22
  // Translators: %d is the number of files in plural form.
23
- 'maxFileUploadsPlural' => __( 'You may only upload maximum %d files', 'meta-box' ),
24
  ) );
25
  }
26
 
@@ -29,8 +29,7 @@ class RWMB_File_Field extends RWMB_Field {
29
  */
30
  public static function add_actions() {
31
  add_action( 'post_edit_form_tag', array( __CLASS__, 'post_edit_form_tag' ) );
32
- add_action( 'wp_ajax_rwmb_delete_file', array( __CLASS__, 'wp_ajax_delete_file' ) );
33
- add_action( 'wp_ajax_rwmb_reorder_files', array( __CLASS__, 'wp_ajax_reorder_files' ) );
34
  }
35
 
36
  /**
@@ -40,43 +39,18 @@ class RWMB_File_Field extends RWMB_Field {
40
  echo ' enctype="multipart/form-data"';
41
  }
42
 
43
- /**
44
- * Ajax callback for reordering images
45
- */
46
- public static function wp_ajax_reorder_files() {
47
- $post_id = (int) filter_input( INPUT_POST, 'post_id', FILTER_SANITIZE_NUMBER_INT );
48
- $field_id = (string) filter_input( INPUT_POST, 'field_id' );
49
- $order = (string) filter_input( INPUT_POST, 'order' );
50
-
51
- check_ajax_referer( "rwmb-reorder-files_{$field_id}" );
52
- parse_str( $order, $items );
53
- delete_post_meta( $post_id, $field_id );
54
- foreach ( $items['item'] as $item ) {
55
- add_post_meta( $post_id, $field_id, $item, false );
56
- }
57
- wp_send_json_success();
58
- }
59
-
60
  /**
61
  * Ajax callback for deleting files.
62
- * Modified from a function used by "Verve Meta Boxes" plugin.
63
- *
64
- * @link http://goo.gl/LzYSq
65
  */
66
- public static function wp_ajax_delete_file() {
67
- $post_id = (int) filter_input( INPUT_POST, 'post_id', FILTER_SANITIZE_NUMBER_INT );
68
  $field_id = (string) filter_input( INPUT_POST, 'field_id' );
69
  $attachment_id = (int) filter_input( INPUT_POST, 'attachment_id', FILTER_SANITIZE_NUMBER_INT );
70
- $force_delete = (int) filter_input( INPUT_POST, 'force_delete', FILTER_SANITIZE_NUMBER_INT );
71
 
72
  check_ajax_referer( "rwmb-delete-file_{$field_id}" );
73
- delete_post_meta( $post_id, $field_id, $attachment_id );
74
- $success = $force_delete ? wp_delete_attachment( $attachment_id ) : true;
75
-
76
- if ( $success ) {
77
  wp_send_json_success();
78
  }
79
- wp_send_json_error( __( 'Error: Cannot delete file', 'meta-box' ) );
80
  }
81
 
82
  /**
@@ -88,19 +62,17 @@ class RWMB_File_Field extends RWMB_Field {
88
  * @return string
89
  */
90
  public static function html( $meta, $field ) {
91
- $meta = (array) $meta;
92
- $meta = array_filter( $meta );
93
- $i18n_more = apply_filters( 'rwmb_file_add_string', _x( '+ Add new file', 'file upload', 'meta-box' ), $field );
94
-
95
- $html = self::get_uploaded_files( $meta, $field );
96
 
97
  // Show form upload.
98
  $html .= sprintf(
99
- '<div class="rwmb-new-files">
100
- <div class="rwmb-file-input"><input type="file" name="%s[]" /></div>
101
- <a class="rwmb-add-file" href="#"><strong>%s</strong></a>
102
  </div>',
103
- $field['id'],
104
  $i18n_more
105
  );
106
 
@@ -117,9 +89,13 @@ class RWMB_File_Field extends RWMB_Field {
117
  protected static function get_uploaded_files( $files, $field ) {
118
  $reorder_nonce = wp_create_nonce( "rwmb-reorder-files_{$field['id']}" );
119
  $delete_nonce = wp_create_nonce( "rwmb-delete-file_{$field['id']}" );
 
120
 
121
  foreach ( (array) $files as $k => $file ) {
122
- $files[ $k ] = self::call( $field, 'file_html', $file );
 
 
 
123
  }
124
  return sprintf(
125
  '<ul class="rwmb-uploaded" data-field_id="%s" data-delete_nonce="%s" data-reorder_nonce="%s" data-force_delete="%s" data-max_file_uploads="%s" data-mime_type="%s">%s</ul>',
@@ -129,40 +105,44 @@ class RWMB_File_Field extends RWMB_Field {
129
  $field['force_delete'] ? 1 : 0,
130
  $field['max_file_uploads'],
131
  $field['mime_type'],
132
- implode( '', $files )
133
  );
134
  }
135
 
136
  /**
137
  * Get HTML for uploaded file.
138
  *
139
- * @param int $file Attachment (file) ID.
 
 
140
  * @return string
141
  */
142
- protected static function file_html( $file ) {
143
- $i18n_delete = apply_filters( 'rwmb_file_delete_string', _x( 'Delete', 'file upload', 'meta-box' ) );
144
- $i18n_edit = apply_filters( 'rwmb_file_edit_string', _x( 'Edit', 'file upload', 'meta-box' ) );
145
- $mime_type = get_post_mime_type( $file );
 
 
146
 
147
  return sprintf(
148
- '<li id="item_%s">
149
- <div class="rwmb-icon">%s</div>
150
- <div class="rwmb-info">
151
- <a href="%s" target="_blank">%s</a>
152
- <p>%s</p>
153
- <a href="%s" target="_blank">%s</a> |
154
- <a class="rwmb-delete-file" href="#" data-attachment_id="%s">%s</a>
 
 
155
  </div>
 
156
  </li>',
157
- $file,
158
- wp_get_attachment_image( $file, array( 60, 60 ), true ),
159
- wp_get_attachment_url( $file ),
160
- get_the_title( $file ),
161
- $mime_type,
162
- get_edit_post_link( $file ),
163
- $i18n_edit,
164
- $file,
165
- $i18n_delete
166
  );
167
  }
168
 
@@ -177,44 +157,95 @@ class RWMB_File_Field extends RWMB_Field {
177
  * @return array|mixed
178
  */
179
  public static function value( $new, $old, $post_id, $field ) {
 
 
180
  // @codingStandardsIgnoreLine
181
- if ( empty( $_FILES[ $field['id'] ] ) ) {
182
  return $new;
183
  }
184
 
185
- $new = array();
186
- $count = self::transform( $field['id'] );
187
- for ( $i = 0; $i <= $count; $i ++ ) {
188
- $attachment = media_handle_upload( "{$field['id']}_{$i}", $post_id );
189
- if ( ! is_wp_error( $attachment ) ) {
190
- $new[] = $attachment;
 
 
 
 
191
  }
 
192
  }
193
 
194
- return array_filter( array_unique( array_merge( (array) $old, $new ) ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
195
  }
196
 
197
  /**
198
  * Transform $_FILES from $_FILES['field']['key']['index'] to $_FILES['field_index']['key'].
199
  *
200
- * @param string $field_id The field ID.
201
  *
202
  * @return int The number of uploaded files.
203
  */
204
- protected static function transform( $field_id ) {
205
- // @codingStandardsIgnoreLine
206
- foreach ( $_FILES[ $field_id ] as $key => $list ) {
207
  foreach ( $list as $index => $value ) {
208
- // @codingStandardsIgnoreLine
209
- if ( ! isset( $_FILES[ "{$field_id}_{$index}" ] ) ) {
210
- $_FILES[ "{$field_id}_{$index}" ] = array();
211
  }
212
- $_FILES[ "{$field_id}_{$index}" ][ $key ] = $value;
213
  }
214
  }
215
 
216
- // @codingStandardsIgnoreLine
217
- return count( $_FILES[ $field_id ]['name'] );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
218
  }
219
 
220
  /**
@@ -233,6 +264,8 @@ class RWMB_File_Field extends RWMB_Field {
233
  ) );
234
  $field['multiple'] = true;
235
 
 
 
236
  return $field;
237
  }
238
 
@@ -305,37 +338,16 @@ class RWMB_File_Field extends RWMB_Field {
305
  }
306
 
307
  /**
308
- * Format value for the helper functions.
309
  *
310
- * @param array $field Field parameters.
311
- * @param string|array $value The field meta value.
312
- * @return string
313
- */
314
- public static function format_value( $field, $value ) {
315
- if ( ! $field['clone'] ) {
316
- return self::call( 'format_single_value', $field, $value );
317
- }
318
- $output = '<ul>';
319
- foreach ( $value as $subvalue ) {
320
- $output .= '<li>' . self::call( 'format_single_value', $field, $subvalue ) . '</li>';
321
- }
322
- $output .= '</ul>';
323
- return $output;
324
- }
325
-
326
- /**
327
- * Format a single value for the helper functions.
328
  *
329
- * @param array $field Field parameters.
330
- * @param array $value The value.
331
  * @return string
332
  */
333
- public static function format_single_value( $field, $value ) {
334
- $output = '<ul>';
335
- foreach ( $value as $file ) {
336
- $output .= sprintf( '<li><a href="%s" target="_blank">%s</a></li>', $file['url'], $file['title'] );
337
- }
338
- $output .= '</ul>';
339
- return $output;
340
  }
341
  }
18
 
19
  self::localize_script( 'rwmb-file', 'rwmbFile', array(
20
  // Translators: %d is the number of files in singular form.
21
+ 'maxFileUploadsSingle' => __( 'You may only upload maximum %d file', 'learnpress' ),
22
  // Translators: %d is the number of files in plural form.
23
+ 'maxFileUploadsPlural' => __( 'You may only upload maximum %d files', 'learnpress' ),
24
  ) );
25
  }
26
 
29
  */
30
  public static function add_actions() {
31
  add_action( 'post_edit_form_tag', array( __CLASS__, 'post_edit_form_tag' ) );
32
+ add_action( 'wp_ajax_rwmb_delete_file', array( __CLASS__, 'ajax_delete_file' ) );
 
33
  }
34
 
35
  /**
39
  echo ' enctype="multipart/form-data"';
40
  }
41
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  /**
43
  * Ajax callback for deleting files.
 
 
 
44
  */
45
+ public static function ajax_delete_file() {
 
46
  $field_id = (string) filter_input( INPUT_POST, 'field_id' );
47
  $attachment_id = (int) filter_input( INPUT_POST, 'attachment_id', FILTER_SANITIZE_NUMBER_INT );
 
48
 
49
  check_ajax_referer( "rwmb-delete-file_{$field_id}" );
50
+ if ( wp_delete_attachment( $attachment_id ) ) {
 
 
 
51
  wp_send_json_success();
52
  }
53
+ wp_send_json_error( __( 'Error: Cannot delete file', 'learnpress' ) );
54
  }
55
 
56
  /**
62
  * @return string
63
  */
64
  public static function html( $meta, $field ) {
65
+ $meta = array_filter( (array) $meta );
66
+ $i18n_more = apply_filters( 'rwmb_file_add_string', _x( '+ Add new file', 'file upload', 'learnpress' ), $field );
67
+ $html = self::get_uploaded_files( $meta, $field );
 
 
68
 
69
  // Show form upload.
70
  $html .= sprintf(
71
+ '<div class="rwmb-file-new">
72
+ <input type="file" name="%s[]" class="rwmb-file-input">
73
+ <a class="rwmb-file-add" href="#"><strong>%s</strong></a>
74
  </div>',
75
+ $field['file_input_name'],
76
  $i18n_more
77
  );
78
 
89
  protected static function get_uploaded_files( $files, $field ) {
90
  $reorder_nonce = wp_create_nonce( "rwmb-reorder-files_{$field['id']}" );
91
  $delete_nonce = wp_create_nonce( "rwmb-delete-file_{$field['id']}" );
92
+ $output = '';
93
 
94
  foreach ( (array) $files as $k => $file ) {
95
+ // Ignore deleted files (if users accidentally deleted files or uses `force_delete` without saving post).
96
+ if ( get_attached_file( $file ) ) {
97
+ $output .= self::call( $field, 'file_html', $file, $k );
98
+ }
99
  }
100
  return sprintf(
101
  '<ul class="rwmb-uploaded" data-field_id="%s" data-delete_nonce="%s" data-reorder_nonce="%s" data-force_delete="%s" data-max_file_uploads="%s" data-mime_type="%s">%s</ul>',
105
  $field['force_delete'] ? 1 : 0,
106
  $field['max_file_uploads'],
107
  $field['mime_type'],
108
+ $output
109
  );
110
  }
111
 
112
  /**
113
  * Get HTML for uploaded file.
114
  *
115
+ * @param int $file Attachment (file) ID.
116
+ * @param int $index File index.
117
+ * @param array $field Field data.
118
  * @return string
119
  */
120
+ protected static function file_html( $file, $index, $field ) {
121
+ $i18n_delete = apply_filters( 'rwmb_file_delete_string', _x( 'Delete', 'file upload', 'learnpress' ) );
122
+ $i18n_edit = apply_filters( 'rwmb_file_edit_string', _x( 'Edit', 'file upload', 'learnpress' ) );
123
+ $attributes = self::get_attributes( $field, $file );
124
+ $path = get_attached_file( $file );
125
+ $icon = wp_get_attachment_image( $file, array( 60, 60 ), true );
126
 
127
  return sprintf(
128
+ '<li class="rwmb-file">
129
+ <div class="rwmb-file-icon"><a href="%s" target="_blank">%s</a></div>
130
+ <div class="rwmb-file-info">
131
+ <a href="%s" target="_blank" class="rwmb-file-title">%s</a>
132
+ <p class="rwmb-file-name">%s</p>
133
+ <p class="rwmb-file-actions">
134
+ <a href="%s" class="rwmb-file-edit" target="_blank"><span class="dashicons dashicons-edit"></span>%s</a>
135
+ <a href="#" class="rwmb-file-delete" data-attachment_id="%s"><span class="dashicons dashicons-no-alt"></span>%s</a>
136
+ </p>
137
  </div>
138
+ <input type="hidden" name="%s[%s]" value="%s">
139
  </li>',
140
+ wp_get_attachment_url( $file ), $icon,
141
+ wp_get_attachment_url( $file ), get_the_title( $file ),
142
+ basename( $path ),
143
+ get_edit_post_link( $file ), $i18n_edit,
144
+ $file, $i18n_delete,
145
+ $attributes['name'], $index, $file
 
 
 
146
  );
147
  }
148
 
157
  * @return array|mixed
158
  */
159
  public static function value( $new, $old, $post_id, $field ) {
160
+ $input = $field['file_input_name'];
161
+
162
  // @codingStandardsIgnoreLine
163
+ if ( empty( $_FILES[ $input ] ) ) {
164
  return $new;
165
  }
166
 
167
+ $new = array_filter( (array) $new );
168
+
169
+ // Non-cloneable field.
170
+ if ( ! $field['clone'] ) {
171
+ $count = self::transform( $input );
172
+ for ( $i = 0; $i <= $count; $i ++ ) {
173
+ $attachment = media_handle_upload( "{$input}_{$i}", $post_id );
174
+ if ( ! is_wp_error( $attachment ) ) {
175
+ $new[] = $attachment;
176
+ }
177
  }
178
+ return $new;
179
  }
180
 
181
+ // Cloneable field.
182
+ $counts = self::transform_cloneable( $input );
183
+ foreach ( $counts as $clone_index => $count ) {
184
+ if ( empty( $new[ $clone_index ] ) ) {
185
+ $new[ $clone_index ] = array();
186
+ }
187
+ for ( $i = 0; $i <= $count; $i ++ ) {
188
+ $attachment = media_handle_upload( "{$input}_{$clone_index}_{$i}", $post_id );
189
+ if ( ! is_wp_error( $attachment ) ) {
190
+ $new[ $clone_index ][] = $attachment;
191
+ }
192
+ }
193
+ }
194
+
195
+ return $new;
196
  }
197
 
198
  /**
199
  * Transform $_FILES from $_FILES['field']['key']['index'] to $_FILES['field_index']['key'].
200
  *
201
+ * @param string $input_name The field input name.
202
  *
203
  * @return int The number of uploaded files.
204
  */
205
+ protected static function transform( $input_name ) {
206
+ // @codingStandardsIgnoreStart
207
+ foreach ( $_FILES[ $input_name ] as $key => $list ) {
208
  foreach ( $list as $index => $value ) {
209
+ $file_key = "{$input_name}_{$index}";
210
+ if ( ! isset( $_FILES[ $file_key ] ) ) {
211
+ $_FILES[ $file_key ] = array();
212
  }
213
+ $_FILES[ $file_key ][ $key ] = $value;
214
  }
215
  }
216
 
217
+ return count( $_FILES[ $input_name ]['name'] );
218
+ // @codingStandardsIgnoreEnd
219
+ }
220
+
221
+ /**
222
+ * Transform $_FILES from $_FILES['field']['key']['cloneIndex']['index'] to $_FILES['field_cloneIndex_index']['key'].
223
+ *
224
+ * @param string $input_name The field input name.
225
+ *
226
+ * @return array
227
+ */
228
+ protected static function transform_cloneable( $input_name ) {
229
+ // @codingStandardsIgnoreStart
230
+ foreach ( $_FILES[ $input_name ] as $key => $list ) {
231
+ foreach ( $list as $clone_index => $clone_values ) {
232
+ foreach ( $clone_values as $index => $value ) {
233
+ $file_key = "{$input_name}_{$clone_index}_{$index}";
234
+
235
+ if ( ! isset( $_FILES[ $file_key ] ) ) {
236
+ $_FILES[ $file_key ] = array();
237
+ }
238
+ $_FILES[ $file_key ][ $key ] = $value;
239
+ }
240
+ }
241
+ }
242
+
243
+ $counts = array();
244
+ foreach ( $_FILES[ $input_name ]['name'] as $clone_index => $clone_values ) {
245
+ $counts[ $clone_index ] = count( $clone_values );
246
+ }
247
+ return $counts;
248
+ // @codingStandardsIgnoreEnd
249
  }
250
 
251
  /**
264
  ) );
265
  $field['multiple'] = true;
266
 
267
+ $field['file_input_name'] = '_file_' . $field['id'];
268
+
269
  return $field;
270
  }
271
 
338
  }
339
 
340
  /**
341
+ * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.
342
  *
343
+ * @param array $field Field parameters.
344
+ * @param array $value The value.
345
+ * @param array $args Additional arguments. Rarely used. See specific fields for details.
346
+ * @param int|null $post_id Post ID. null for current post. Optional.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
347
  *
 
 
348
  * @return string
349
  */
350
+ public static function format_single_value( $field, $value, $args, $post_id ) {
351
+ return sprintf( '<a href="%s" target="_blank">%s</a>', esc_url( $value['url'] ), esc_html( $value['title'] ) );
 
 
 
 
 
352
  }
353
  }
inc/libraries/meta-box/inc/fields/image-advanced.php CHANGED
@@ -14,7 +14,7 @@ class RWMB_Image_Advanced_Field extends RWMB_Media_Field {
14
  */
15
  public static function admin_enqueue_scripts() {
16
  parent::admin_enqueue_scripts();
17
- wp_enqueue_style( 'rwmb-image-advanced', RWMB_CSS_URL . 'image-advanced.css', array( 'rwmb-media' ), RWMB_VER );
18
  wp_enqueue_script( 'rwmb-image-advanced', RWMB_JS_URL . 'image-advanced.js', array( 'rwmb-media' ), RWMB_VER, true );
19
  }
20
 
@@ -64,25 +64,17 @@ class RWMB_Image_Advanced_Field extends RWMB_Media_Field {
64
  }
65
 
66
  /**
67
- * Format value for the helper functions.
68
  *
69
- * @param array $field Field parameters.
70
- * @param string|array $value The field meta value.
71
- * @return string
72
- */
73
- public static function format_value( $field, $value ) {
74
- return RWMB_Image_Field::format_value( $field, $value );
75
- }
76
-
77
- /**
78
- * Format a single value for the helper functions.
79
  *
80
- * @param array $field Field parameters.
81
- * @param array $value The value.
82
  * @return string
83
  */
84
- public static function format_single_value( $field, $value ) {
85
- return RWMB_Image_Field::format_single_value( $field, $value );
86
  }
87
 
88
  /**
14
  */
15
  public static function admin_enqueue_scripts() {
16
  parent::admin_enqueue_scripts();
17
+ RWMB_Image_Field::admin_enqueue_scripts();
18
  wp_enqueue_script( 'rwmb-image-advanced', RWMB_JS_URL . 'image-advanced.js', array( 'rwmb-media' ), RWMB_VER, true );
19
  }
20
 
64
  }
65
 
66
  /**
67
+ * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.
68
  *
69
+ * @param array $field Field parameters.
70
+ * @param string $value The value.
71
+ * @param array $args Additional arguments. Rarely used. See specific fields for details.
72
+ * @param int|null $post_id Post ID. null for current post. Optional.
 
 
 
 
 
 
73
  *
 
 
74
  * @return string
75
  */
76
+ public static function format_single_value( $field, $value, $args, $post_id ) {
77
+ return RWMB_Image_Field::format_single_value( $field, $value, $args, $post_id );
78
  }
79
 
80
  /**
inc/libraries/meta-box/inc/fields/image-select.php CHANGED
@@ -26,7 +26,7 @@ class RWMB_Image_Select_Field extends RWMB_Field {
26
  */
27
  public static function html( $meta, $field ) {
28
  $html = array();
29
- $tpl = '<label class="rwmb-image-select"><img src="%s"><input type="%s" class="rwmb-image_select hidden" name="%s" value="%s"%s></label>';
30
 
31
  $meta = (array) $meta;
32
  foreach ( $field['options'] as $value => $image ) {
@@ -57,13 +57,16 @@ class RWMB_Image_Select_Field extends RWMB_Field {
57
  }
58
 
59
  /**
60
- * Format a single value for the helper functions.
 
 
 
 
 
61
  *
62
- * @param array $field Field parameters.
63
- * @param string $value The meta value.
64
  * @return string
65
  */
66
- public static function format_single_value( $field, $value ) {
67
  return sprintf( '<img src="%s">', esc_url( $field['options'][ $value ] ) );
68
  }
69
  }
26
  */
27
  public static function html( $meta, $field ) {
28
  $html = array();
29
+ $tpl = '<label class="rwmb-image-select"><img src="%s"><input type="%s" class="rwmb-image_select" name="%s" value="%s"%s></label>';
30
 
31
  $meta = (array) $meta;
32
  foreach ( $field['options'] as $value => $image ) {
57
  }
58
 
59
  /**
60
+ * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.
61
+ *
62
+ * @param array $field Field parameters.
63
+ * @param string $value The value.
64
+ * @param array $args Additional arguments. Rarely used. See specific fields for details.
65
+ * @param int|null $post_id Post ID. null for current post. Optional.
66
  *
 
 
67
  * @return string
68
  */
69
+ public static function format_single_value( $field, $value, $args, $post_id ) {
70
  return sprintf( '<img src="%s">', esc_url( $field['options'][ $value ] ) );
71
  }
72
  }
inc/libraries/meta-box/inc/fields/image.php CHANGED
@@ -14,51 +14,80 @@ class RWMB_Image_Field extends RWMB_File_Field {
14
  */
15
  public static function admin_enqueue_scripts() {
16
  parent::admin_enqueue_scripts();
 
17
  wp_enqueue_style( 'rwmb-image', RWMB_CSS_URL . 'image.css', array(), RWMB_VER );
18
  }
19
 
20
  /**
21
- * Get HTML markup for ONE uploaded image.
 
 
 
 
22
  *
23
- * @param int $image Image ID.
24
  * @return string
25
  */
26
- public static function file_html( $image ) {
27
- list( $src ) = wp_get_attachment_image_src( $image, 'thumbnail' );
 
28
  return sprintf(
29
- '<li id="item_%s">
30
- <img src="%s">
31
- <div class="rwmb-image-bar">
32
- <a href="%s" target="_blank"><span class="dashicons dashicons-edit"></span></a> |
33
- <a class="rwmb-delete-file" href="#" data-attachment_id="%s">&times;</a>
 
 
 
 
 
 
 
 
34
  </div>
35
  </li>',
36
- $image,
37
- $src,
38
- get_edit_post_link( $image ),
39
- $image
 
40
  );
41
  }
42
 
 
43
  /**
44
- * Format a single value for the helper functions.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  *
46
- * @param array $field Field parameters.
47
- * @param array $value The value.
48
  * @return string
49
  */
50
- public static function format_single_value( $field, $value ) {
51
- $output = '<ul>';
52
- foreach ( $value as $file ) {
53
- $img = sprintf( '<img src="%s" alt="%s">', esc_url( $file['url'] ), esc_attr( $file['alt'] ) );
54
 
55
- // Link thumbnail to full size image?
56
- if ( isset( $args['link'] ) && $args['link'] ) {
57
- $img = sprintf( '<a href="%s" title="%s">%s</a>', esc_url( $file['full_url'] ), esc_attr( $file['title'] ), $img );
58
- }
59
- $output .= "<li>$img</li>";
60
  }
61
- $output .= '</ul>';
62
  return $output;
63
  }
64
 
14
  */
15
  public static function admin_enqueue_scripts() {
16
  parent::admin_enqueue_scripts();
17
+ wp_enqueue_media();
18
  wp_enqueue_style( 'rwmb-image', RWMB_CSS_URL . 'image.css', array(), RWMB_VER );
19
  }
20
 
21
  /**
22
+ * Get HTML for uploaded file.
23
+ *
24
+ * @param int $file Attachment (file) ID.
25
+ * @param int $index File index.
26
+ * @param array $field Field data.
27
  *
 
28
  * @return string
29
  */
30
+ protected static function file_html( $file, $index, $field ) {
31
+ $attributes = self::get_attributes( $field, $file );
32
+
33
  return sprintf(
34
+ '<li class="rwmb-image-item attachment %s">
35
+ <input type="hidden" name="%s[%s]" value="%s">
36
+ <div class="attachment-preview">
37
+ <div class="thumbnail">
38
+ <div class="centered">
39
+ %s
40
+ </div>
41
+ </div>
42
+ </div>
43
+ <div class="rwmb-image-overlay"></div>
44
+ <div class="rwmb-image-actions">
45
+ <a href="%s" class="rwmb-image-edit" target="_blank"><span class="dashicons dashicons-edit"></span></a>
46
+ <a href="#" class="rwmb-image-delete rwmb-file-delete" data-attachment_id="%s"><span class="dashicons dashicons-no-alt"></span></a>
47
  </div>
48
  </li>',
49
+ esc_attr( $field['image_size'] ),
50
+ $attributes['name'], $index, $file,
51
+ wp_get_attachment_image( $file, $field['image_size'] ),
52
+ get_edit_post_link( $file ),
53
+ $file
54
  );
55
  }
56
 
57
+
58
  /**
59
+ * Normalize field settings.
60
+ *
61
+ * @param array $field Field settings.
62
+ *
63
+ * @return array
64
+ */
65
+ public static function normalize( $field ) {
66
+ $field = parent::normalize( $field );
67
+ $field = wp_parse_args( $field, array(
68
+ 'image_size' => 'thumbnail',
69
+ ) );
70
+
71
+ return $field;
72
+ }
73
+
74
+ /**
75
+ * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.
76
+ *
77
+ * @param array $field Field parameters.
78
+ * @param array $value The value.
79
+ * @param array $args Additional arguments. Rarely used. See specific fields for details.
80
+ * @param int|null $post_id Post ID. null for current post. Optional.
81
  *
 
 
82
  * @return string
83
  */
84
+ public static function format_single_value( $field, $value, $args, $post_id ) {
85
+ $output = sprintf( '<img src="%s" alt="%s">', esc_url( $value['url'] ), esc_attr( $value['alt'] ) );
 
 
86
 
87
+ // Link thumbnail to full size image?
88
+ if ( ! empty( $args['link'] ) ) {
89
+ $output = sprintf( '<a href="%s" title="%s">%s</a>', esc_url( $value['full_url'] ), esc_attr( $value['title'] ), $output );
 
 
90
  }
 
91
  return $output;
92
  }
93
 
inc/libraries/meta-box/inc/fields/input-list.php CHANGED
@@ -32,9 +32,8 @@ class RWMB_Input_List_Field extends RWMB_Choice_Field {
32
  $output = self::get_select_all_html( $field );
33
  $output .= sprintf( '<ul class="rwmb-input-list %s %s">',
34
  $field['collapse'] ? 'collapse' : '',
35
- $field['inline'] ? 'inline' : ''
36
  );
37
-
38
  $output .= $walker->walk( $options, $field['flatten'] ? - 1 : 0 );
39
  $output .= '</ul>';
40
 
@@ -49,7 +48,6 @@ class RWMB_Input_List_Field extends RWMB_Choice_Field {
49
  */
50
  public static function normalize( $field ) {
51
  $field = $field['multiple'] ? RWMB_Multiple_Values_Field::normalize( $field ) : $field;
52
-
53
  $field = RWMB_Input_Field::normalize( $field );
54
  $field = parent::normalize( $field );
55
  $field = wp_parse_args( $field, array(
@@ -89,7 +87,7 @@ class RWMB_Input_List_Field extends RWMB_Choice_Field {
89
  */
90
  public static function get_select_all_html( $field ) {
91
  if ( $field['multiple'] && $field['select_all_none'] ) {
92
- return sprintf( '<p><button class="rwmb-input-list-select-all-none" data-name="%s">%s</button></p>', $field['id'], __( 'Select All / None','meta-box' ) );
93
  }
94
  return '';
95
  }
32
  $output = self::get_select_all_html( $field );
33
  $output .= sprintf( '<ul class="rwmb-input-list %s %s">',
34
  $field['collapse'] ? 'collapse' : '',
35
+ $field['inline'] ? 'inline' : ''
36
  );
 
37
  $output .= $walker->walk( $options, $field['flatten'] ? - 1 : 0 );
38
  $output .= '</ul>';
39
 
48
  */
49
  public static function normalize( $field ) {
50
  $field = $field['multiple'] ? RWMB_Multiple_Values_Field::normalize( $field ) : $field;
 
51
  $field = RWMB_Input_Field::normalize( $field );
52
  $field = parent::normalize( $field );
53
  $field = wp_parse_args( $field, array(
87
  */
88
  public static function get_select_all_html( $field ) {
89
  if ( $field['multiple'] && $field['select_all_none'] ) {
90
+ return sprintf( '<p><button class="rwmb-input-list-select-all-none button" data-name="%s">%s</button></p>', $field['id'], __( 'Select All / None', 'learnpress' ) );
91
  }
92
  return '';
93
  }
inc/libraries/meta-box/inc/fields/input.php CHANGED
@@ -30,9 +30,10 @@ abstract class RWMB_Input_Field extends RWMB_Field {
30
  public static function normalize( $field ) {
31
  $field = parent::normalize( $field );
32
  $field = wp_parse_args( $field, array(
33
- 'size' => 30,
34
- 'datalist' => false,
35
- 'readonly' => false,
 
36
  ) );
37
  if ( $field['datalist'] ) {
38
  $field['datalist'] = wp_parse_args( $field['datalist'], array(
@@ -53,12 +54,13 @@ abstract class RWMB_Input_Field extends RWMB_Field {
53
  public static function get_attributes( $field, $value = null ) {
54
  $attributes = parent::get_attributes( $field, $value );
55
  $attributes = wp_parse_args( $attributes, array(
56
- 'list' => $field['datalist'] ? $field['datalist']['id'] : false,
57
- 'readonly' => $field['readonly'],
58
- 'value' => $value,
59
- 'placeholder' => $field['placeholder'],
60
- 'type' => $field['type'],
61
- 'size' => $field['size'],
 
62
  ) );
63
 
64
  return $attributes;
30
  public static function normalize( $field ) {
31
  $field = parent::normalize( $field );
32
  $field = wp_parse_args( $field, array(
33
+ 'autocomplete' => false,
34
+ 'size' => 30,
35
+ 'datalist' => false,
36
+ 'readonly' => false,
37
  ) );
38
  if ( $field['datalist'] ) {
39
  $field['datalist'] = wp_parse_args( $field['datalist'], array(
54
  public static function get_attributes( $field, $value = null ) {
55
  $attributes = parent::get_attributes( $field, $value );
56
  $attributes = wp_parse_args( $attributes, array(
57
+ 'autocomplete' => $field['autocomplete'],
58
+ 'list' => $field['datalist'] ? $field['datalist']['id'] : false,
59
+ 'readonly' => $field['readonly'],
60
+ 'value' => $value,
61
+ 'placeholder' => $field['placeholder'],
62
+ 'type' => $field['type'],
63
+ 'size' => $field['size'],
64
  ) );
65
 
66
  return $attributes;
inc/libraries/meta-box/inc/fields/key-value.php CHANGED
@@ -14,6 +14,7 @@ class RWMB_Key_Value_Field extends RWMB_Text_Field {
14
  *
15
  * @param mixed $meta Meta value.
16
  * @param array $field Field parameters.
 
17
  * @return string
18
  */
19
  public static function html( $meta, $field ) {
@@ -27,7 +28,7 @@ class RWMB_Key_Value_Field extends RWMB_Text_Field {
27
  $val = isset( $meta[1] ) ? $meta[1] : '';
28
  $attributes = self::get_attributes( $field, $val );
29
  $attributes['placeholder'] = $field['placeholder']['value'];
30
- $html .= sprintf( '<input %s>', self::render_attributes( $attributes ) );
31
 
32
  return $html;
33
  }
@@ -37,6 +38,7 @@ class RWMB_Key_Value_Field extends RWMB_Text_Field {
37
  *
38
  * @param mixed $meta Meta value.
39
  * @param array $field Field parameters.
 
40
  * @return string
41
  */
42
  public static function begin_html( $meta, $field ) {
@@ -62,6 +64,7 @@ class RWMB_Key_Value_Field extends RWMB_Text_Field {
62
  * Do not show field description.
63
  *
64
  * @param array $field Field parameters.
 
65
  * @return string
66
  */
67
  public static function input_description( $field ) {
@@ -72,6 +75,7 @@ class RWMB_Key_Value_Field extends RWMB_Text_Field {
72
  * Do not show field description.
73
  *
74
  * @param array $field Field parameters.
 
75
  * @return string
76
  */
77
  public static function label_description( $field ) {
@@ -82,6 +86,7 @@ class RWMB_Key_Value_Field extends RWMB_Text_Field {
82
  * Escape meta for field output.
83
  *
84
  * @param mixed $meta Meta value.
 
85
  * @return mixed
86
  */
87
  public static function esc_meta( $meta ) {
@@ -99,7 +104,7 @@ class RWMB_Key_Value_Field extends RWMB_Text_Field {
99
  * @param int $post_id The post ID.
100
  * @param array $field The field parameters.
101
  *
102
- * @return string
103
  */
104
  public static function value( $new, $old, $post_id, $field ) {
105
  foreach ( $new as &$arr ) {
@@ -115,6 +120,7 @@ class RWMB_Key_Value_Field extends RWMB_Text_Field {
115
  * Normalize parameters for field.
116
  *
117
  * @param array $field Field parameters.
 
118
  * @return array
119
  */
120
  public static function normalize( $field ) {
@@ -123,8 +129,8 @@ class RWMB_Key_Value_Field extends RWMB_Text_Field {
123
  $field['multiple'] = true;
124
  $field['attributes']['type'] = 'text';
125
  $field['placeholder'] = wp_parse_args( (array) $field['placeholder'], array(
126
- 'key' => __( 'Key', 'meta-box' ),
127
- 'value' => __( 'Value', 'meta-box' ),
128
  ) );
129
  return $field;
130
  }
@@ -132,16 +138,14 @@ class RWMB_Key_Value_Field extends RWMB_Text_Field {
132
  /**
133
  * Format value for the helper functions.
134
  *
135
- * @param array $field Field parameters.
136
- * @param string|array $value The field meta value.
 
 
 
137
  * @return string
138
  */
139
- public static function format_value( $field, $value ) {
140
- $output = '<ul>';
141
- foreach ( $value as $subvalue ) {
142
- $output .= sprintf( '<li><label>%s</label>: %s</li>', $subvalue[0], $subvalue[1] );
143
- }
144
- $output .= '</ul>';
145
- return $output;
146
  }
147
  }
14
  *
15
  * @param mixed $meta Meta value.
16
  * @param array $field Field parameters.
17
+ *
18
  * @return string
19
  */
20
  public static function html( $meta, $field ) {
28
  $val = isset( $meta[1] ) ? $meta[1] : '';
29
  $attributes = self::get_attributes( $field, $val );
30
  $attributes['placeholder'] = $field['placeholder']['value'];
31
+ $html .= sprintf( '<input %s>', self::render_attributes( $attributes ) );
32
 
33
  return $html;
34
  }
38
  *
39
  * @param mixed $meta Meta value.
40
  * @param array $field Field parameters.
41
+ *
42
  * @return string
43
  */
44
  public static function begin_html( $meta, $field ) {
64
  * Do not show field description.
65
  *
66
  * @param array $field Field parameters.
67
+ *
68
  * @return string
69
  */
70
  public static function input_description( $field ) {
75
  * Do not show field description.
76
  *
77
  * @param array $field Field parameters.
78
+ *
79
  * @return string
80
  */
81
  public static function label_description( $field ) {
86
  * Escape meta for field output.
87
  *
88
  * @param mixed $meta Meta value.
89
+ *
90
  * @return mixed
91
  */
92
  public static function esc_meta( $meta ) {
104
  * @param int $post_id The post ID.
105
  * @param array $field The field parameters.
106
  *
107
+ * @return array
108
  */
109
  public static function value( $new, $old, $post_id, $field ) {
110
  foreach ( $new as &$arr ) {
120
  * Normalize parameters for field.
121
  *
122
  * @param array $field Field parameters.
123
+ *
124
  * @return array
125
  */
126
  public static function normalize( $field ) {
129
  $field['multiple'] = true;
130
  $field['attributes']['type'] = 'text';
131
  $field['placeholder'] = wp_parse_args( (array) $field['placeholder'], array(
132
+ 'key' => __( 'Key', 'learnpress' ),
133
+ 'value' => __( 'Value', 'learnpress' ),
134
  ) );
135
  return $field;
136
  }
138
  /**
139
  * Format value for the helper functions.
140
  *
141
+ * @param array $field Field parameters.
142
+ * @param string|array $value The field meta value.
143
+ * @param array $args Additional arguments. Rarely used. See specific fields for details.
144
+ * @param int|null $post_id Post ID. null for current post. Optional.
145
+ *
146
  * @return string
147
  */
148
+ public static function format_clone_value( $field, $value, $args, $post_id ) {
149
+ return sprintf( '<label>%s:</label> %s', $value[0], $value[1] );
 
 
 
 
 
150
  }
151
  }
inc/libraries/meta-box/inc/fields/map.php CHANGED
@@ -19,9 +19,15 @@ class RWMB_Map_Field extends RWMB_Field {
19
  * @link http://googlegeodevelopers.blogspot.com/2016/06/building-for-scale-updates-to-google.html
20
  * @link https://developers.google.com/maps/documentation/javascript/get-api-key
21
  */
22
- $args = func_get_args();
23
- $field = $args[0];
24
- $google_maps_url = add_query_arg( 'key', $field['api_key'], 'https://maps.google.com/maps/api/js' );
 
 
 
 
 
 
25
 
26
  /**
27
  * Allows developers load more libraries via a filter.
@@ -31,7 +37,10 @@ class RWMB_Map_Field extends RWMB_Field {
31
  $google_maps_url = apply_filters( 'rwmb_google_maps_url', $google_maps_url );
32
  wp_register_script( 'google-maps', esc_url_raw( $google_maps_url ), array(), '', true );
33
  wp_enqueue_style( 'rwmb-map', RWMB_CSS_URL . 'map.css', array(), RWMB_VER );
34
- wp_enqueue_script( 'rwmb-map', RWMB_JS_URL . 'map.js', array( 'jquery-ui-autocomplete', 'google-maps' ), RWMB_VER, true );
 
 
 
35
  }
36
 
37
  /**
@@ -43,7 +52,11 @@ class RWMB_Map_Field extends RWMB_Field {
43
  * @return string
44
  */
45
  public static function html( $meta, $field ) {
46
- $html = '<div class="rwmb-map-field">';
 
 
 
 
47
 
48
  $html .= sprintf(
49
  '<div class="rwmb-map-canvas" data-default-loc="%s" data-region="%s"></div>
@@ -54,12 +67,10 @@ class RWMB_Map_Field extends RWMB_Field {
54
  esc_attr( $meta )
55
  );
56
 
57
- $address = $field['address_field'];
58
- if ( $address ) {
59
  $html .= sprintf(
60
- '<button class="button rwmb-map-goto-address-button" value="%s">%s</button>',
61
- is_array( $address ) ? implode( ',', $address ) : $address,
62
- esc_html__( 'Find Address', 'meta-box' )
63
  );
64
  }
65
 
@@ -80,6 +91,7 @@ class RWMB_Map_Field extends RWMB_Field {
80
  $field = wp_parse_args( $field, array(
81
  'std' => '',
82
  'address_field' => '',
 
83
  'region' => '',
84
 
85
  // Default API key, required by Google Maps since June 2016.
@@ -112,23 +124,36 @@ class RWMB_Map_Field extends RWMB_Field {
112
  * Display Google maps.
113
  *
114
  * @param array $field Field parameters.
115
- * @param array $args Additional arguments. Not used for these fields.
116
  * @param int|null $post_id Post ID. null for current post. Optional.
117
  *
118
- * @return mixed Field value
119
  */
120
  public static function the_value( $field, $args = array(), $post_id = null ) {
121
- $value = self::get_value( $field, $args, $post_id );
122
- if ( ! $value['latitude'] || ! $value['longitude'] ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
  return '';
124
  }
125
- if ( ! $value['zoom'] ) {
126
- $value['zoom'] = 14;
127
- }
128
 
129
  $args = wp_parse_args( $args, array(
130
- 'latitude' => $value['latitude'],
131
- 'longitude' => $value['longitude'],
132
  'width' => '100%',
133
  'height' => '480px',
134
  'marker' => true, // Display marker?
@@ -138,24 +163,18 @@ class RWMB_Map_Field extends RWMB_Field {
138
 
139
  // Default API key, required by Google Maps since June 2016.
140
  // Users should overwrite this key with their own key.
141
- 'api_key' => 'AIzaSyC1mUh87SGFyf133tpZQJa-s96p0tgnraQ',
142
  ) );
143
 
144
- /*
145
- * Enqueue scripts.
146
- * API key is get from $field (if found by RWMB_Helper::find_field()) or $args as a fallback.
147
- * Note: We still can enqueue script which outputs in the footer.
148
- */
149
- $api_key = isset( $field['api_key'] ) ? $field['api_key'] : $args['api_key'];
150
- $google_maps_url = add_query_arg( 'key', $api_key, 'https://maps.google.com/maps/api/js' );
151
 
152
  /*
153
  * Allows developers load more libraries via a filter.
154
  * @link https://developers.google.com/maps/documentation/javascript/libraries
155
  */
156
  $google_maps_url = apply_filters( 'rwmb_google_maps_url', $google_maps_url );
157
- wp_register_script( 'google-maps', esc_url_raw( $google_maps_url ), array(), '', true );
158
- wp_enqueue_script( 'rwmb-map-frontend', RWMB_JS_URL . 'map-frontend.js', array( 'google-maps' ), '', true );
159
 
160
  /*
161
  * Google Maps options.
@@ -165,7 +184,7 @@ class RWMB_Map_Field extends RWMB_Field {
165
  */
166
  $args['js_options'] = wp_parse_args( $args['js_options'], array(
167
  // Default to 'zoom' level set in admin, but can be overwritten.
168
- 'zoom' => $value['zoom'],
169
 
170
  // Map type, see https://developers.google.com/maps/documentation/javascript/reference#MapTypeId.
171
  'mapTypeId' => 'ROADMAP',
19
  * @link http://googlegeodevelopers.blogspot.com/2016/06/building-for-scale-updates-to-google.html
20
  * @link https://developers.google.com/maps/documentation/javascript/get-api-key
21
  */
22
+ $args = func_get_args();
23
+ $field = $args[0];
24
+ $google_maps_url = add_query_arg(
25
+ array(
26
+ 'key' => $field['api_key'],
27
+ 'language' => $field['language'],
28
+ ),
29
+ 'https://maps.google.com/maps/api/js'
30
+ );
31
 
32
  /**
33
  * Allows developers load more libraries via a filter.
37
  $google_maps_url = apply_filters( 'rwmb_google_maps_url', $google_maps_url );
38
  wp_register_script( 'google-maps', esc_url_raw( $google_maps_url ), array(), '', true );
39
  wp_enqueue_style( 'rwmb-map', RWMB_CSS_URL . 'map.css', array(), RWMB_VER );
40
+ wp_enqueue_script( 'rwmb-map', RWMB_JS_URL . 'map.js', array(
41
+ 'jquery-ui-autocomplete',
42
+ 'google-maps',
43
+ ), RWMB_VER, true );
44
  }
45
 
46
  /**
52
  * @return string
53
  */
54
  public static function html( $meta, $field ) {
55
+ $address = is_array( $field['address_field'] ) ? implode( ',', $field['address_field'] ) : $field['address_field'];
56
+ $html = sprintf(
57
+ '<div class="rwmb-map-field" data-address-field="%s">',
58
+ esc_attr( $address )
59
+ );
60
 
61
  $html .= sprintf(
62
  '<div class="rwmb-map-canvas" data-default-loc="%s" data-region="%s"></div>
67
  esc_attr( $meta )
68
  );
69
 
70
+ if ( $field['address_field'] ) {
 
71
  $html .= sprintf(
72
+ '<button class="button rwmb-map-goto-address-button">%s</button>',
73
+ esc_html__( 'Find Address', 'learnpress' )
 
74
  );
75
  }
76
 
91
  $field = wp_parse_args( $field, array(
92
  'std' => '',
93
  'address_field' => '',
94
+ 'language' => '',
95
  'region' => '',
96
 
97
  // Default API key, required by Google Maps since June 2016.
124
  * Display Google maps.
125
  *
126
  * @param array $field Field parameters.
127
+ * @param array $args Additional arguments for the map.
128
  * @param int|null $post_id Post ID. null for current post. Optional.
129
  *
130
+ * @return string HTML output of the field
131
  */
132
  public static function the_value( $field, $args = array(), $post_id = null ) {
133
+ $value = parent::get_value( $field, $args, $post_id );
134
+ $args = wp_parse_args( $args, array(
135
+ 'api_key' => isset( $field['api_key'] ) ? $field['api_key'] : '',
136
+ ) );
137
+ return self::render_map( $value, $args );
138
+ }
139
+
140
+ /**
141
+ * Render a map in the frontend.
142
+ *
143
+ * @param array $location The [latitude, longitude[, zoom]] location.
144
+ * @param array $args Additional arguments for the map.
145
+ *
146
+ * @return string
147
+ */
148
+ public static function render_map( $location, $args = array() ) {
149
+ list( $latitude, $longitude, $zoom ) = explode( ',', $location . ',,' );
150
+ if ( ! $latitude || ! $longitude ) {
151
  return '';
152
  }
 
 
 
153
 
154
  $args = wp_parse_args( $args, array(
155
+ 'latitude' => $latitude,
156
+ 'longitude' => $longitude,
157
  'width' => '100%',
158
  'height' => '480px',
159
  'marker' => true, // Display marker?
163
 
164
  // Default API key, required by Google Maps since June 2016.
165
  // Users should overwrite this key with their own key.
166
+ 'api_key' => 'AIzaSyC1mUh87SGFyf133tpZQJa-s96p0tgnraQ',
167
  ) );
168
 
169
+ $google_maps_url = add_query_arg( 'key', $args['api_key'], 'https://maps.google.com/maps/api/js' );
 
 
 
 
 
 
170
 
171
  /*
172
  * Allows developers load more libraries via a filter.
173
  * @link https://developers.google.com/maps/documentation/javascript/libraries
174
  */
175
  $google_maps_url = apply_filters( 'rwmb_google_maps_url', $google_maps_url );
176
+ wp_register_script( 'google-maps', esc_url_raw( $google_maps_url ), array(), RWMB_VER, true );
177
+ wp_enqueue_script( 'rwmb-map-frontend', RWMB_JS_URL . 'map-frontend.js', array( 'google-maps' ), RWMB_VER, true );
178
 
179
  /*
180
  * Google Maps options.
184
  */
185
  $args['js_options'] = wp_parse_args( $args['js_options'], array(
186
  // Default to 'zoom' level set in admin, but can be overwritten.
187
+ 'zoom' => $zoom,
188
 
189
  // Map type, see https://developers.google.com/maps/documentation/javascript/reference#MapTypeId.
190
  'mapTypeId' => 'ROADMAP',
inc/libraries/meta-box/inc/fields/media.php CHANGED
@@ -21,18 +21,18 @@ class RWMB_Media_Field extends RWMB_File_Field {
21
  wp_enqueue_script( 'rwmb-media', RWMB_JS_URL . 'media.js', array( 'jquery-ui-sortable', 'underscore', 'backbone', 'media-grid' ), RWMB_VER, true );
22
 
23
  self::localize_script( 'rwmb-media', 'i18nRwmbMedia', array(
24
- 'add' => apply_filters( 'rwmb_media_add_string', _x( '+ Add Media', 'media', 'meta-box' ) ),
25
- 'single' => apply_filters( 'rwmb_media_single_files_string', _x( ' file', 'media', 'meta-box' ) ),
26
- 'multiple' => apply_filters( 'rwmb_media_multiple_files_string', _x( ' files', 'media', 'meta-box' ) ),
27
- 'remove' => apply_filters( 'rwmb_media_remove_string', _x( 'Remove', 'media', 'meta-box' ) ),
28
- 'edit' => apply_filters( 'rwmb_media_edit_string', _x( 'Edit', 'media', 'meta-box' ) ),
29
- 'view' => apply_filters( 'rwmb_media_view_string', _x( 'View', 'media', 'meta-box' ) ),
30
- 'noTitle' => _x( 'No Title', 'media', 'meta-box' ),
31
- 'loadingUrl' => RWMB_URL . 'img/loader.gif',
32
  'extensions' => self::get_mime_extensions(),
33
- 'select' => apply_filters( 'rwmb_media_select_string', _x( 'Select Files', 'media', 'meta-box' ) ),
34
- 'or' => apply_filters( 'rwmb_media_or_string', _x( 'or', 'media', 'meta-box' ) ),
35
- 'uploadInstructions' => apply_filters( 'rwmb_media_upload_instructions_string', _x( 'Drop files here to upload', 'media', 'meta-box' ) ),
36
  ) );
37
  }
38
 
@@ -56,11 +56,10 @@ class RWMB_Media_Field extends RWMB_File_Field {
56
  public static function html( $meta, $field ) {
57
  $meta = (array) $meta;
58
  $meta = implode( ',', $meta );
59
- $attributes = self::get_attributes( $field, $meta );
60
 
61
  $html = sprintf(
62
- '<input %s>
63
- <div class="rwmb-media-view" data-options="%s"></div>',
64
  self::render_attributes( $attributes ),
65
  esc_attr( wp_json_encode( $field['js_options'] ) )
66
  );
@@ -164,7 +163,8 @@ class RWMB_Media_Field extends RWMB_File_Field {
164
  * @param array $field The field parameters.
165
  */
166
  public static function save( $new, $old, $post_id, $field ) {
167
- delete_post_meta( $post_id, $field['id'] );
 
168
  parent::save( $new, array(), $post_id, $field );
169
  }
170
 
21
  wp_enqueue_script( 'rwmb-media', RWMB_JS_URL . 'media.js', array( 'jquery-ui-sortable', 'underscore', 'backbone', 'media-grid' ), RWMB_VER, true );
22
 
23
  self::localize_script( 'rwmb-media', 'i18nRwmbMedia', array(
24
+ 'add' => apply_filters( 'rwmb_media_add_string', _x( '+ Add Media', 'media', 'learnpress' ) ),
25
+ 'single' => apply_filters( 'rwmb_media_single_files_string', _x( ' file', 'media', 'learnpress' ) ),
26
+ 'multiple' => apply_filters( 'rwmb_media_multiple_files_string', _x( ' files', 'media', 'learnpress' ) ),
27
+ 'remove' => apply_filters( 'rwmb_media_remove_string', _x( 'Remove', 'media', 'learnpress' ) ),
28
+ 'edit' => apply_filters( 'rwmb_media_edit_string', _x( 'Edit', 'media', 'learnpress' ) ),
29
+ 'view' => apply_filters( 'rwmb_media_view_string', _x( 'View', 'media', 'learnpress' ) ),
30
+ 'noTitle' => _x( 'No Title', 'media', 'learnpress' ),
31
+ 'loadingUrl' => admin_url( 'images/spinner.gif' ),
32
  'extensions' => self::get_mime_extensions(),
33
+ 'select' => apply_filters( 'rwmb_media_select_string', _x( 'Select Files', 'media', 'learnpress' ) ),
34
+ 'or' => apply_filters( 'rwmb_media_or_string', _x( 'or', 'media', 'learnpress' ) ),
35
+ 'uploadInstructions' => apply_filters( 'rwmb_media_upload_instructions_string', _x( 'Drop files here to upload', 'media', 'learnpress' ) ),
36
  ) );
37
  }
38
 
56
  public static function html( $meta, $field ) {
57
  $meta = (array) $meta;
58
  $meta = implode( ',', $meta );
59
+ $attributes = self::call( 'get_attributes', $field, $meta );
60
 
61
  $html = sprintf(
62
+ '<input %s data-options="%s">',
 
63
  self::render_attributes( $attributes ),
64
  esc_attr( wp_json_encode( $field['js_options'] ) )
65
  );
163
  * @param array $field The field parameters.
164
  */
165
  public static function save( $new, $old, $post_id, $field ) {
166
+ $storage = $field['storage'];
167
+ $storage->delete( $post_id, $field['id'] );
168
  parent::save( $new, array(), $post_id, $field );
169
  }
170
 
inc/libraries/meta-box/inc/fields/multiple-values.php CHANGED
@@ -34,13 +34,16 @@ abstract class RWMB_Multiple_Values_Field extends RWMB_Field {
34
  }
35
 
36
  /**
37
- * Format a single value for the helper functions.
 
 
 
 
 
38
  *
39
- * @param array $field Field parameters.
40
- * @param string $value The value.
41
  * @return string
42
  */
43
- public static function format_single_value( $field, $value ) {
44
  return $field['options'][ $value ];
45
  }
46
  }
34
  }
35
 
36
  /**
37
+ * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.
38
+ *
39
+ * @param array $field Field parameters.
40
+ * @param string $value The value.
41
+ * @param array $args Additional arguments. Rarely used. See specific fields for details.
42
+ * @param int|null $post_id Post ID. null for current post. Optional.
43
  *
 
 
44
  * @return string
45
  */
46
+ public static function format_single_value( $field, $value, $args, $post_id ) {
47
  return $field['options'][ $value ];
48
  }
49
  }
inc/libraries/meta-box/inc/fields/oembed.php CHANGED
@@ -14,7 +14,7 @@ class RWMB_OEmbed_Field extends RWMB_Text_Field {
14
  */
15
  public static function admin_enqueue_scripts() {
16
  wp_enqueue_style( 'rwmb-oembed', RWMB_CSS_URL . 'oembed.css' );
17
- wp_enqueue_script( 'rwmb-oembed', RWMB_JS_URL . 'oembed.js', array(), RWMB_VER, true );
18
  }
19
 
20
  /**
@@ -61,7 +61,7 @@ class RWMB_OEmbed_Field extends RWMB_Text_Field {
61
  $embed = $GLOBALS['wp_embed']->shortcode( $args, $url );
62
  }
63
 
64
- return $embed ? $embed : __( 'Embed HTML not available.', 'meta-box' );
65
  }
66
 
67
  /**
@@ -73,10 +73,8 @@ class RWMB_OEmbed_Field extends RWMB_Text_Field {
73
  */
74
  public static function html( $meta, $field ) {
75
  return parent::html( $meta, $field ) . sprintf(
76
- '<a href="#" class="rwmb-embed-show button">%s</a>
77
- <span class="spinner"></span>
78
  <div class="rwmb-embed-media">%s</div>',
79
- esc_html__( 'Preview', 'meta-box' ),
80
  $meta ? self::get_embed( $meta ) : ''
81
  );
82
  }
@@ -96,13 +94,16 @@ class RWMB_OEmbed_Field extends RWMB_Text_Field {
96
  }
97
 
98
  /**
99
- * Format a single value for the helper functions.
 
 
 
 
 
100
  *
101
- * @param array $field Field parameters.
102
- * @param string $value Meta value.
103
  * @return string
104
  */
105
- public static function format_single_value( $field, $value ) {
106
  return self::get_embed( $value );
107
  }
108
  }
14
  */
15
  public static function admin_enqueue_scripts() {
16
  wp_enqueue_style( 'rwmb-oembed', RWMB_CSS_URL . 'oembed.css' );
17
+ wp_enqueue_script( 'rwmb-oembed', RWMB_JS_URL . 'oembed.js', array( 'jquery', 'underscore' ), RWMB_VER, true );
18
  }
19
 
20
  /**
61
  $embed = $GLOBALS['wp_embed']->shortcode( $args, $url );
62
  }
63
 
64
+ return $embed ? $embed : __( 'Embed HTML not available.', 'learnpress' );
65
  }
66
 
67
  /**
73
  */
74
  public static function html( $meta, $field ) {
75
  return parent::html( $meta, $field ) . sprintf(
76
+ '<span class="spinner"></span>
 
77
  <div class="rwmb-embed-media">%s</div>',
 
78
  $meta ? self::get_embed( $meta ) : ''
79
  );
80
  }
94
  }
95
 
96
  /**
97
+ * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.
98
+ *
99
+ * @param array $field Field parameters.
100
+ * @param string $value The value.
101
+ * @param array $args Additional arguments. Rarely used. See specific fields for details.
102
+ * @param int|null $post_id Post ID. null for current post. Optional.
103
  *
 
 
104
  * @return string
105
  */
106
+ public static function format_single_value( $field, $value, $args, $post_id ) {
107
  return self::get_embed( $value );
108
  }
109
  }
inc/libraries/meta-box/inc/fields/post.php CHANGED
@@ -13,7 +13,6 @@ class RWMB_Post_Field extends RWMB_Object_Choice_Field {
13
  * Normalize parameters for field.
14
  *
15
  * @param array $field Field parameters.
16
- *
17
  * @return array
18
  */
19
  public static function normalize( $field ) {
@@ -34,12 +33,12 @@ class RWMB_Post_Field extends RWMB_Object_Choice_Field {
34
  * - If single post type: show 'Select a %post_type_name%'.
35
  */
36
  if ( empty( $field['placeholder'] ) ) {
37
- $field['placeholder'] = __( 'Select a post', 'meta-box' );
38
  if ( is_string( $field['query_args']['post_type'] ) && post_type_exists( $field['query_args']['post_type'] ) ) {
39
  $post_type_object = get_post_type_object( $field['query_args']['post_type'] );
40
 
41
  // Translators: %s is the post type singular label.
42
- $field['placeholder'] = sprintf( __( 'Select a %s', 'meta-box' ), $post_type_object->labels->singular_name );
43
  }
44
  }
45
 
@@ -78,39 +77,31 @@ class RWMB_Post_Field extends RWMB_Object_Choice_Field {
78
  *
79
  * @see "save" method for better understanding
80
  *
81
- * @param int $post_id Post ID.
82
- * @param bool $saved Is the meta box saved.
83
- * @param array $field Field parameters.
84
  *
85
  * @return mixed
86
  */
87
  public static function meta( $post_id, $saved, $field ) {
88
- if ( isset( $field['parent'] ) && $field['parent'] ) {
89
- $post = get_post( $post_id );
90
-
91
- return $post->post_parent;
92
- }
93
-
94
- return parent::meta( $post_id, $saved, $field );
95
  }
96
 
97
  /**
98
  * Get options for walker.
99
  *
100
  * @param array $field Field parameters.
101
- *
102
  * @return array
103
  */
104
  public static function get_options( $field ) {
105
  $query = new WP_Query( $field['query_args'] );
106
-
107
  return $query->have_posts() ? $query->posts : array();
108
  }
109
 
110
  /**
111
  * Get option label.
112
  *
113
- * @param array $field Field parameters.
114
  * @param string $value Option value.
115
  *
116
  * @return string
@@ -126,22 +117,4 @@ class RWMB_Post_Field extends RWMB_Object_Choice_Field {
126
  get_the_title( $value )
127
  );
128
  }
129
-
130
- /**
131
- * Display field description.
132
- *
133
- * @param array $field
134
- *
135
- * @return string
136
- */
137
- protected static function input_description( $field ) {
138
-
139
- $id = $field['id'] ? ' id="' . esc_attr( $field['id'] ) . '-description"' : '';
140
-
141
- if ( ! sizeof( self::get_options( $field ) ) ) {
142
- return $field['desc_none'] ? "<p{$id} class='description'>{$field['desc_none']}</p>" : '';
143
- }
144
-
145
- return $field['desc'] ? "<p{$id} class='description'>{$field['desc']}</p>" : '';
146
- }
147
  }
13
  * Normalize parameters for field.
14
  *
15
  * @param array $field Field parameters.
 
16
  * @return array
17
  */
18
  public static function normalize( $field ) {
33
  * - If single post type: show 'Select a %post_type_name%'.
34
  */
35
  if ( empty( $field['placeholder'] ) ) {
36
+ $field['placeholder'] = __( 'Select a post', 'learnpress' );
37
  if ( is_string( $field['query_args']['post_type'] ) && post_type_exists( $field['query_args']['post_type'] ) ) {
38
  $post_type_object = get_post_type_object( $field['query_args']['post_type'] );
39
 
40
  // Translators: %s is the post type singular label.
41
+ $field['placeholder'] = sprintf( __( 'Select a %s', 'learnpress' ), $post_type_object->labels->singular_name );
42
  }
43
  }
44
 
77
  *
78
  * @see "save" method for better understanding
79
  *
80
+ * @param int $post_id Post ID.
81
+ * @param bool $saved Is the meta box saved.
82
+ * @param array $field Field parameters.
83
  *
84
  * @return mixed
85
  */
86
  public static function meta( $post_id, $saved, $field ) {
87
+ return $field['parent'] ? wp_get_post_parent_id( $post_id ) : parent::meta( $post_id, $saved, $field );
 
 
 
 
 
 
88
  }
89
 
90
  /**
91
  * Get options for walker.
92
  *
93
  * @param array $field Field parameters.
 
94
  * @return array
95
  */
96
  public static function get_options( $field ) {
97
  $query = new WP_Query( $field['query_args'] );
 
98
  return $query->have_posts() ? $query->posts : array();
99
  }
100
 
101
  /**
102
  * Get option label.
103
  *
104
+ * @param array $field Field parameters.
105
  * @param string $value Option value.
106
  *
107
  * @return string
117
  get_the_title( $value )
118
  );
119
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
120
  }
inc/libraries/meta-box/inc/fields/select-advanced.php CHANGED
@@ -42,7 +42,7 @@ class RWMB_Select_Advanced_Field extends RWMB_Select_Field {
42
  public static function normalize( $field ) {
43
  $field = wp_parse_args( $field, array(
44
  'js_options' => array(),
45
- 'placeholder' => __( 'Select an item', 'meta-box' ),
46
  ) );
47
 
48
  $field = parent::normalize( $field );
42
  public static function normalize( $field ) {
43
  $field = wp_parse_args( $field, array(
44
  'js_options' => array(),
45
+ 'placeholder' => __( 'Select an item', 'learnpress' ),
46
  ) );
47
 
48
  $field = parent::normalize( $field );
inc/libraries/meta-box/inc/fields/select.php CHANGED
@@ -84,7 +84,7 @@ class RWMB_Select_Field extends RWMB_Choice_Field {
84
  */
85
  public static function get_select_all_html( $field ) {
86
  if ( $field['multiple'] && $field['select_all_none'] ) {
87
- return '<div class="rwmb-select-all-none">' . __( 'Select', 'meta-box' ) . ': <a data-type="all" href="#">' . __( 'All', 'meta-box' ) . '</a> | <a data-type="none" href="#">' . __( 'None', 'meta-box' ) . '</a></div>';
88
  }
89
  return '';
90
  }
84
  */
85
  public static function get_select_all_html( $field ) {
86
  if ( $field['multiple'] && $field['select_all_none'] ) {
87
+ return '<div class="rwmb-select-all-none">' . __( 'Select', 'learnpress' ) . ': <a data-type="all" href="#">' . __( 'All', 'learnpress' ) . '</a> | <a data-type="none" href="#">' . __( 'None', 'learnpress' ) . '</a></div>';
88
  }
89
  return '';
90
  }
inc/libraries/meta-box/inc/fields/slider.php CHANGED
@@ -55,7 +55,7 @@ class RWMB_Slider_Field extends RWMB_Field {
55
  $field = wp_parse_args( $field, array(
56
  'prefix' => '',
57
  'suffix' => '',
58
- 'std' => '',
59
  'js_options' => array(),
60
  ) );
61
  $field['js_options'] = wp_parse_args( $field['js_options'], array(
55
  $field = wp_parse_args( $field, array(
56
  'prefix' => '',
57
  'suffix' => '',
58
+ 'std' => '',
59
  'js_options' => array(),
60
  ) );
61
  $field['js_options'] = wp_parse_args( $field['js_options'], array(
inc/libraries/meta-box/inc/fields/taxonomy-advanced.php CHANGED
@@ -52,10 +52,12 @@ class RWMB_Taxonomy_Advanced_Field extends RWMB_Taxonomy_Field {
52
  * @param array $field The field parameters.
53
  */
54
  public static function save( $new, $old, $post_id, $field ) {
 
 
55
  if ( $new ) {
56
- update_post_meta( $post_id, $field['id'], $new );
57
  } else {
58
- delete_post_meta( $post_id, $field['id'] );
59
  }
60
  }
61
 
@@ -75,9 +77,10 @@ class RWMB_Taxonomy_Advanced_Field extends RWMB_Taxonomy_Field {
75
  if ( empty( $meta ) ) {
76
  return $field['multiple'] ? array() : '';
77
  }
78
- $meta = array_filter( wp_parse_id_list( $meta ) );
 
79
 
80
- return $field['multiple'] ? $meta : reset( $meta );
81
  }
82
 
83
  /**
@@ -91,27 +94,40 @@ class RWMB_Taxonomy_Advanced_Field extends RWMB_Taxonomy_Field {
91
  * @return array List of post term objects.
92
  */
93
  public static function get_value( $field, $args = array(), $post_id = null ) {
94
- if ( ! $post_id ) {
95
- $post_id = get_the_ID();
 
 
 
 
 
 
 
96
  }
97
 
98
- $value = self::meta( $post_id, '', $field );
99
- if ( empty( $value ) ) {
100
- return null;
101
- }
102
 
103
- // Allow to pass more arguments to "get_terms".
104
- $args = wp_parse_args( array(
105
- 'include' => $value,
 
 
 
 
 
 
 
 
 
 
 
 
106
  'hide_empty' => false,
107
  ), $args );
108
- $value = get_terms( $field['taxonomy'], $args );
109
 
110
- // Get single value if necessary.
111
- if ( ! $field['clone'] && ! $field['multiple'] ) {
112
- $value = reset( $value );
113
- }
114
-
115
- return $value;
116
  }
117
  }
52
  * @param array $field The field parameters.
53
  */
54
  public static function save( $new, $old, $post_id, $field ) {
55
+ $storage = $field['storage'];
56
+
57
  if ( $new ) {
58
+ $storage->update( $post_id, $field['id'], $new );
59
  } else {
60
+ $storage->delete( $post_id, $field['id'] );
61
  }
62
  }
63
 
77
  if ( empty( $meta ) ) {
78
  return $field['multiple'] ? array() : '';
79
  }
80
+ $meta = is_array( $meta ) ? array_map( 'wp_parse_id_list', $meta ) : wp_parse_id_list( $meta );
81
+ $meta = array_filter( $meta );
82
 
83
+ return $meta;
84
  }
85
 
86
  /**
94
  * @return array List of post term objects.
95
  */
96
  public static function get_value( $field, $args = array(), $post_id = null ) {
97
+ $value = RWMB_Field::get_value( $field, $args, $post_id );
98
+ if ( ! $field['clone'] ) {
99
+ $value = self::call( 'terms_info', $field, $value, $args );
100
+ } else {
101
+ $return = array();
102
+ foreach ( $value as $subvalue ) {
103
+ $return[] = self::call( 'terms_info', $field, $subvalue, $args );
104
+ }
105
+ $value = $return;
106
  }
107
 
108
+ return $value;
109
+ }
 
 
110
 
111
+ /**
112
+ * Get terms information.
113
+ *
114
+ * @param array $field Field parameters.
115
+ * @param string $term_ids Term IDs, in CSV format.
116
+ * @param array $args Additional arguments (for image size).
117
+ *
118
+ * @return array
119
+ */
120
+ public static function terms_info( $field, $term_ids, $args ) {
121
+ if ( empty( $term_ids ) ) {
122
+ return array();
123
+ }
124
+ $args = wp_parse_args( array(
125
+ 'include' => $term_ids,
126
  'hide_empty' => false,
127
  ), $args );
 
128
 
129
+ $info = get_terms( $field['taxonomy'], $args );
130
+ $info = is_array( $info ) ? $info : array();
131
+ return $field['multiple'] ? $info : reset( $info );
 
 
 
132
  }
133
  }
inc/libraries/meta-box/inc/fields/taxonomy.php CHANGED
@@ -30,9 +30,12 @@ class RWMB_Taxonomy_Field extends RWMB_Object_Choice_Field {
30
  // Set default field args.
31
  $field = parent::normalize( $field );
32
  $field = wp_parse_args( $field, array(
33
- 'taxonomy' => 'category',
34
  ) );
35
 
 
 
 
36
  // Set default query args.
37
  $field['query_args'] = wp_parse_args( $field['query_args'], array(
38
  'hide_empty' => false,
@@ -44,12 +47,12 @@ class RWMB_Taxonomy_Field extends RWMB_Object_Choice_Field {
44
  * - If single taxonomy: show 'Select a %taxonomy_name%'.
45
  */
46
  if ( empty( $field['placeholder'] ) ) {
47
- $field['placeholder'] = __( 'Select a term', 'meta-box' );
48
  if ( is_string( $field['taxonomy'] ) && taxonomy_exists( $field['taxonomy'] ) ) {
49
  $taxonomy_object = get_taxonomy( $field['taxonomy'] );
50
 
51
  // Translators: %s is the taxonomy singular label.
52
- $field['placeholder'] = sprintf( __( 'Select a %s', 'meta-box' ), $taxonomy_object->labels->singular_name );
53
  }
54
  }
55
 
@@ -95,7 +98,10 @@ class RWMB_Taxonomy_Field extends RWMB_Object_Choice_Field {
95
  public static function save( $new, $old, $post_id, $field ) {
96
  $new = array_unique( array_map( 'intval', (array) $new ) );
97
  $new = empty( $new ) ? null : $new;
98
- wp_set_object_terms( $post_id, $new, $field['taxonomy'] );
 
 
 
99
  }
100
 
101
  /**
@@ -112,12 +118,7 @@ class RWMB_Taxonomy_Field extends RWMB_Object_Choice_Field {
112
  return '';
113
  }
114
 
115
- $meta = get_the_terms( $object_id, $field['taxonomy'] );
116
-
117
- if ( ! is_array( $meta ) || empty( $meta ) ) {
118
- return $field['multiple'] ? array() : '';
119
- }
120
-
121
  $meta = wp_list_pluck( $meta, 'term_id' );
122
 
123
  return $field['multiple'] ? $meta : reset( $meta );
@@ -134,7 +135,7 @@ class RWMB_Taxonomy_Field extends RWMB_Object_Choice_Field {
134
  * @return array List of post term objects.
135
  */
136
  public static function get_value( $field, $args = array(), $post_id = null ) {
137
- $value = get_the_terms( $post_id, $field['taxonomy'] );
138
 
139
  // Get single value if necessary.
140
  if ( ! $field['clone'] && ! $field['multiple'] && is_array( $value ) ) {
30
  // Set default field args.
31
  $field = parent::normalize( $field );
32
  $field = wp_parse_args( $field, array(
33
+ 'taxonomy' => 'category',
34
  ) );
35
 
36
+ // Force taxonomy to be an array.
37
+ $field['taxonomy'] = (array) $field['taxonomy'];
38
+
39
  // Set default query args.
40
  $field['query_args'] = wp_parse_args( $field['query_args'], array(
41
  'hide_empty' => false,
47
  * - If single taxonomy: show 'Select a %taxonomy_name%'.
48
  */
49
  if ( empty( $field['placeholder'] ) ) {
50
+ $field['placeholder'] = __( 'Select a term', 'learnpress' );
51
  if ( is_string( $field['taxonomy'] ) && taxonomy_exists( $field['taxonomy'] ) ) {
52
  $taxonomy_object = get_taxonomy( $field['taxonomy'] );
53
 
54
  // Translators: %s is the taxonomy singular label.
55
+ $field['placeholder'] = sprintf( __( 'Select a %s', 'learnpress' ), $taxonomy_object->labels->singular_name );
56
  }
57
  }
58
 
98
  public static function save( $new, $old, $post_id, $field ) {
99
  $new = array_unique( array_map( 'intval', (array) $new ) );
100
  $new = empty( $new ) ? null : $new;
101
+
102
+ foreach ( $field['taxonomy'] as $taxonomy ) {
103
+ wp_set_object_terms( $post_id, $new, $taxonomy );
104
+ }
105
  }
106
 
107
  /**
118
  return '';
119
  }
120
 
121
+ $meta = wp_get_object_terms( $object_id, $field['taxonomy'] );
 
 
 
 
 
122
  $meta = wp_list_pluck( $meta, 'term_id' );
123
 
124
  return $field['multiple'] ? $meta : reset( $meta );
135
  * @return array List of post term objects.
136
  */
137
  public static function get_value( $field, $args = array(), $post_id = null ) {
138
+ $value = wp_get_object_terms( $post_id, $field['taxonomy'] );
139
 
140
  // Get single value if necessary.
141
  if ( ! $field['clone'] && ! $field['multiple'] && is_array( $value ) ) {
inc/libraries/meta-box/inc/fields/text-list.php CHANGED
@@ -22,16 +22,18 @@ class RWMB_Text_List_Field extends RWMB_Multiple_Values_Field {
22
  $input = '<label><input type="text" class="rwmb-text-list" name="%s" value="%s" placeholder="%s"> %s</label>';
23
 
24
  $count = 0;
25
- foreach ( $field['options'] as $placeholder => $label ) {
26
- $html[] = sprintf(
27
- $input,
28
- $field['field_name'],
29
- isset( $meta[ $count ] ) ? esc_attr( $meta[ $count ] ) : '',
30
- $placeholder,
31
- $label
32
- );
33
- $count ++;
34
- }
 
 
35
 
36
  return implode( ' ', $html );
37
  }
@@ -39,22 +41,25 @@ class RWMB_Text_List_Field extends RWMB_Multiple_Values_Field {
39
  /**
40
  * Format value for the helper functions.
41
  *
42
- * @param array $field Field parameters.
43
- * @param string|array $value The field meta value.
 
 
 
44
  * @return string
45
  */
46
- public static function format_value( $field, $value ) {
47
  $output = '<table><thead><tr>';
48
  foreach ( $field['options'] as $label ) {
49
  $output .= "<th>$label</th>";
50
  }
51
- $output .= '<tr>';
52
 
53
  if ( ! $field['clone'] ) {
54
- $output .= self::format_single_value( $field, $value );
55
  } else {
56
  foreach ( $value as $subvalue ) {
57
- $output .= self::format_single_value( $field, $subvalue );
58
  }
59
  }
60
  $output .= '</tbody></table>';
@@ -62,13 +67,16 @@ class RWMB_Text_List_Field extends RWMB_Multiple_Values_Field {
62
  }
63
 
64
  /**
65
- * Format a single value for the helper functions.
 
 
 
 
 
66
  *
67
- * @param array $field Field parameters.
68
- * @param array $value The value.
69
  * @return string
70
  */
71
- public static function format_single_value( $field, $value ) {
72
  $output = '<tr>';
73
  foreach ( $value as $subvalue ) {
74
  $output .= "<td>$subvalue</td>";
@@ -86,7 +94,8 @@ class RWMB_Text_List_Field extends RWMB_Multiple_Values_Field {
86
  * @param array $field The field parameters.
87
  */
88
  public static function save( $new, $old, $post_id, $field ) {
89
- delete_post_meta( $post_id, $field['id'] );
 
90
  parent::save( $new, array(), $post_id, $field );
91
  }
92
  }
22
  $input = '<label><input type="text" class="rwmb-text-list" name="%s" value="%s" placeholder="%s"> %s</label>';
23
 
24
  $count = 0;
25
+ if ( ! empty( $field['options'] ) ) :
26
+ foreach ( $field['options'] as $placeholder => $label ) {
27
+ $html[] = sprintf(
28
+ $input,
29
+ $field['field_name'],
30
+ isset( $meta[ $count ] ) ? esc_attr( $meta[ $count ] ) : '',
31
+ $placeholder,
32
+ $label
33
+ );
34
+ $count ++;
35
+ }
36
+ endif;
37
 
38
  return implode( ' ', $html );
39
  }
41
  /**
42
  * Format value for the helper functions.
43
  *
44
+ * @param array $field Field parameters.
45
+ * @param string|array $value The field meta value.
46
+ * @param array $args Additional arguments. Rarely used. See specific fields for details.
47
+ * @param int|null $post_id Post ID. null for current post. Optional.
48
+ *
49
  * @return string
50
  */
51
+ public static function format_value( $field, $value, $args, $post_id ) {
52
  $output = '<table><thead><tr>';
53
  foreach ( $field['options'] as $label ) {
54
  $output .= "<th>$label</th>";
55
  }
56
+ $output .= '</tr></thead><tbody>';
57
 
58
  if ( ! $field['clone'] ) {
59
+ $output .= self::format_single_value( $field, $value, $args, $post_id );
60
  } else {
61
  foreach ( $value as $subvalue ) {
62
+ $output .= self::format_single_value( $field, $subvalue, $args, $post_id );
63
  }
64
  }
65
  $output .= '</tbody></table>';
67
  }
68
 
69
  /**
70
+ * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.
71
+ *
72
+ * @param array $field Field parameters.
73
+ * @param array $value The value.
74
+ * @param array $args Additional arguments. Rarely used. See specific fields for details.
75
+ * @param int|null $post_id Post ID. null for current post. Optional.
76
  *
 
 
77
  * @return string
78
  */
79
+ public static function format_single_value( $field, $value, $args, $post_id ) {
80
  $output = '<tr>';
81
  foreach ( $value as $subvalue ) {
82
  $output .= "<td>$subvalue</td>";
94
  * @param array $field The field parameters.
95
  */
96
  public static function save( $new, $old, $post_id, $field ) {
97
+ $storage = $field['storage'];
98
+ $storage->delete( $post_id, $field['id'] );
99
  parent::save( $new, array(), $post_id, $field );
100
  }
101
  }
inc/libraries/meta-box/inc/fields/textarea.php CHANGED
@@ -45,11 +45,12 @@ class RWMB_Textarea_Field extends RWMB_Field {
45
  public static function normalize( $field ) {
46
  $field = parent::normalize( $field );
47
  $field = wp_parse_args( $field, array(
48
- 'cols' => 60,
49
- 'rows' => 3,
50
- 'maxlength' => false,
51
- 'wrap' => false,
52
- 'readonly' => false,
 
53
  ) );
54
 
55
  return $field;
@@ -66,12 +67,13 @@ class RWMB_Textarea_Field extends RWMB_Field {
66
  public static function get_attributes( $field, $value = null ) {
67
  $attributes = parent::get_attributes( $field, $value );
68
  $attributes = wp_parse_args( $attributes, array(
69
- 'cols' => $field['cols'],
70
- 'rows' => $field['rows'],
71
- 'maxlength' => $field['maxlength'],
72
- 'wrap' => $field['wrap'],
73
- 'readonly' => $field['readonly'],
74
- 'placeholder' => $field['placeholder'],
 
75
  ) );
76
  $attributes['class'] .= ' large-text';
77
 
45
  public static function normalize( $field ) {
46
  $field = parent::normalize( $field );
47
  $field = wp_parse_args( $field, array(
48
+ 'autocomplete' => false,
49
+ 'cols' => 60,
50
+ 'rows' => 3,
51
+ 'maxlength' => false,
52
+ 'wrap' => false,
53
+ 'readonly' => false,
54
  ) );
55
 
56
  return $field;
67
  public static function get_attributes( $field, $value = null ) {
68
  $attributes = parent::get_attributes( $field, $value );
69
  $attributes = wp_parse_args( $attributes, array(
70
+ 'autocomplete' => $field['autocomplete'],
71
+ 'cols' => $field['cols'],
72
+ 'rows' => $field['rows'],
73
+ 'maxlength' => $field['maxlength'],
74
+ 'wrap' => $field['wrap'],
75
+ 'readonly' => $field['readonly'],
76
+ 'placeholder' => $field['placeholder'],
77
  ) );
78
  $attributes['class'] .= ' large-text';
79
 
inc/libraries/meta-box/inc/fields/thickbox-image.php DELETED
@@ -1,80 +0,0 @@
1
- <?php
2
- /**
3
- * Image upload field which uses thickbox library to upload.
4
- *
5
- * @package Meta Box
6
- * @deprecated Use image_advanced instead
7
- */
8
-
9
- /**
10
- * The thickbox image field class.
11
- */
12
- class RWMB_Thickbox_Image_Field extends RWMB_Image_Field {
13
- /**
14
- * Add custom actions for the field.
15
- */
16
- public static function add_actions() {
17
- parent::add_actions();
18
- add_filter( 'get_media_item_args', array( __CLASS__, 'allow_img_insertion' ) );
19
- }
20
-
21
- /**
22
- * Always enable insert to post button in the popup.
23
- *
24
- * @link https://github.com/rilwis/meta-box/issues/809
25
- * @link http://wordpress.stackexchange.com/q/22175/2051
26
- * @param array $vars Media item arguments in the popup.
27
- * @return array
28
- */
29
- public static function allow_img_insertion( $vars ) {
30
- $vars['send'] = true; // 'send' as in "Send to Editor".
31
- return $vars;
32
- }
33
-
34
- /**
35
- * Enqueue scripts and styles.
36
- */
37
- public static function admin_enqueue_scripts() {
38
- parent::admin_enqueue_scripts();
39
-
40
- add_thickbox();
41
- wp_enqueue_script( 'media-upload' );
42
-
43
- wp_enqueue_script( 'rwmb-thickbox-image', RWMB_JS_URL . 'thickbox-image.js', array( 'jquery' ), RWMB_VER, true );
44
- }
45
-
46
- /**
47
- * Get field HTML.
48
- *
49
- * @param mixed $meta Meta value.
50
- * @param array $field Field parameters.
51
- *
52
- * @return string
53
- */
54
- public static function html( $meta, $field ) {
55
- $i18n_title = apply_filters( 'rwmb_thickbox_image_upload_string', _x( 'Upload Images', 'image upload', 'meta-box' ), $field );
56
-
57
- // Uploaded images.
58
- $html = parent::get_uploaded_files( $meta, $field );
59
-
60
- // Show form upload.
61
- $html .= "<a href='#' class='button rwmb-thickbox-upload' data-field_id='{$field['id']}'>{$i18n_title}</a>";
62
-
63
- return $html;
64
- }
65
-
66
- /**
67
- * Get field value.
68
- * It's the combination of new (uploaded) images and saved images.
69
- *
70
- * @param mixed $new The submitted meta value.
71
- * @param mixed $old The existing meta value.
72
- * @param int $post_id The post ID.
73
- * @param array $field The field parameters.
74
- *
75
- * @return array
76
- */
77
- public static function value( $new, $old, $post_id, $field ) {
78
- return array_filter( array_unique( array_merge( (array) $old, (array) $new ) ) );
79
- }
80
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/libraries/meta-box/inc/fields/user.php CHANGED
@@ -27,7 +27,7 @@ class RWMB_User_Field extends RWMB_Object_Choice_Field {
27
  $field['flatten'] = true;
28
 
29
  // Set default placeholder.
30
- $field['placeholder'] = empty( $field['placeholder'] ) ? __( 'Select an user', 'meta-box' ) : $field['placeholder'];
31
 
32
  // Set default query args.
33
  $field['query_args'] = wp_parse_args( $field['query_args'], array(
27
  $field['flatten'] = true;
28
 
29
  // Set default placeholder.
30
+ $field['placeholder'] = empty( $field['placeholder'] ) ? __( 'Select an user', 'learnpress' ) : $field['placeholder'];
31
 
32
  // Set default query args.
33
  $field['query_args'] = wp_parse_args( $field['query_args'], array(
inc/libraries/meta-box/inc/fields/video.php CHANGED
@@ -3,7 +3,7 @@
3
  * Video field which uses WordPress media popup to upload and select video.
4
  *
5
  * @package Meta Box
6
- * @since 4.10
7
  */
8
 
9
  /**
@@ -40,7 +40,7 @@ class RWMB_Video_Field extends RWMB_Media_Field {
40
  * Get uploaded file information.
41
  *
42
  * @param int $file_id Attachment image ID (post ID). Required.
43
- * @param array $args Array of arguments (for size).
44
  *
45
  * @return array|bool False if file not found. Array of image info on success.
46
  */
@@ -100,16 +100,29 @@ class RWMB_Video_Field extends RWMB_Media_Field {
100
  }
101
 
102
  /**
103
- * Format a single value for the helper functions.
104
  *
105
- * @param array $field Field parameters.
106
- * @param array $value The value.
 
 
107
  *
108
  * @return string
109
  */
110
- public static function format_single_value( $field, $value ) {
111
  $ids = implode( ',', wp_list_pluck( $value, 'ID' ) );
112
 
 
 
 
 
 
 
 
 
 
 
 
113
  return wp_playlist_shortcode( array(
114
  'ids' => $ids,
115
  'type' => 'video',
3
  * Video field which uses WordPress media popup to upload and select video.
4
  *
5
  * @package Meta Box
6
+ * @since 4.10
7
  */
8
 
9
  /**
40
  * Get uploaded file information.
41
  *
42
  * @param int $file_id Attachment image ID (post ID). Required.
43
+ * @param array $args Array of arguments (for size).
44
  *
45
  * @return array|bool False if file not found. Array of image info on success.
46
  */
100
  }
101
 
102
  /**
103
+ * Format value for a clone.
104
  *
105
+ * @param array $field Field parameters.
106
+ * @param string|array $value The field meta value.
107
+ * @param array $args Additional arguments. Rarely used. See specific fields for details.
108
+ * @param int|null $post_id Post ID. null for current post. Optional.
109
  *
110
  * @return string
111
  */
112
+ public static function format_clone_value( $field, $value, $args, $post_id ) {
113
  $ids = implode( ',', wp_list_pluck( $value, 'ID' ) );
114
 
115
+ // Display single video.
116
+ if ( 1 === count( $value ) ) {
117
+ $video = reset( $value );
118
+ return wp_video_shortcode( array(
119
+ 'src' => $video['src'],
120
+ 'width' => $video['dimensions']['width'],
121
+ 'height' => $video['dimensions']['height'],
122
+ ) );
123
+ }
124
+
125
+ // Display multiple videos in a playlist.
126
  return wp_playlist_shortcode( array(
127
  'ids' => $ids,
128
  'type' => 'video',
inc/libraries/meta-box/inc/fields/wysiwyg.php CHANGED
@@ -34,7 +34,7 @@ class RWMB_Wysiwyg_Field extends RWMB_Field {
34
  * @return string
35
  */
36
  public static function value( $new, $old, $post_id, $field ) {
37
- return $field['raw'] ? $new : wpautop( $new );
38
  }
39
 
40
  /**
34
  * @return string
35
  */
36
  public static function value( $new, $old, $post_id, $field ) {
37
+ return $field['raw'] ? $new : wpautop( $new );
38
  }
39
 
40
  /**
inc/libraries/meta-box/inc/functions.php CHANGED
@@ -17,7 +17,7 @@ if ( ! function_exists( 'rwmb_meta' ) ) {
17
  */
18
  function rwmb_meta( $key, $args = array(), $post_id = null ) {
19
  $args = wp_parse_args( $args );
20
- $field = rwmb_get_field_data( $key, $args, $post_id );
21
 
22
  /*
23
  * If field is not found, which can caused by registering meta boxes for the backend only or conditional registration.
@@ -33,9 +33,9 @@ if ( ! function_exists( 'rwmb_meta' ) ) {
33
  }
34
  }
35
 
36
- if ( ! function_exists( 'rwmb_get_field_data' ) ) {
37
  /**
38
- * Get field data.
39
  *
40
  * @param string $key Meta key. Required.
41
  * @param array $args Array of arguments. Optional.
@@ -43,7 +43,7 @@ if ( ! function_exists( 'rwmb_get_field_data' ) ) {
43
  *
44
  * @return array
45
  */
46
- function rwmb_get_field_data( $key, $args = array(), $object_id = null ) {
47
  $args = wp_parse_args( $args, array(
48
  'object_type' => 'post',
49
  ) );
@@ -115,7 +115,7 @@ if ( ! function_exists( 'rwmb_get_value' ) ) {
115
  */
116
  function rwmb_get_value( $field_id, $args = array(), $post_id = null ) {
117
  $args = wp_parse_args( $args );
118
- $field = rwmb_get_field_data( $field_id, $args, $post_id );
119
 
120
  // Get field value.
121
  $value = $field ? RWMB_Field::call( 'get_value', $field, $args, $post_id ) : false;
@@ -148,7 +148,7 @@ if ( ! function_exists( 'rwmb_the_value' ) ) {
148
  */
149
  function rwmb_the_value( $field_id, $args = array(), $post_id = null, $echo = true ) {
150
  $args = wp_parse_args( $args );
151
- $field = rwmb_get_field_data( $field_id, $args, $post_id );
152
 
153
  if ( ! $field ) {
154
  return '';
@@ -217,7 +217,7 @@ if ( ! function_exists( 'rwmb_get_registry' ) ) {
217
  $class = 'RWMB_' . ucwords( $type ) . '_Registry';
218
  $class = str_replace( ' ', '_', $class );
219
  if ( ! isset( $data[ $type ] ) ) {
220
- $data[ $type ] = new $class;
221
  }
222
 
223
  return $data[ $type ];
@@ -249,12 +249,34 @@ if ( ! function_exists( 'rwmb_get_storage' ) ) {
249
  /**
250
  * Get storage instance.
251
  *
252
- * @param string $object_type Object type. Use post or term.
 
253
  * @return RWMB_Storage_Interface
254
  */
255
- function rwmb_get_storage( $object_type ) {
256
  $class_name = rwmb_get_storage_class_name( $object_type );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
257
 
258
- return rwmb_get_registry( 'storage' )->get( $class_name );
259
  }
260
  }
17
  */
18
  function rwmb_meta( $key, $args = array(), $post_id = null ) {
19
  $args = wp_parse_args( $args );
20
+ $field = rwmb_get_field_settings( $key, $args, $post_id );
21
 
22
  /*
23
  * If field is not found, which can caused by registering meta boxes for the backend only or conditional registration.
33
  }
34
  }
35
 
36
+ if ( ! function_exists( 'rwmb_get_field_settings' ) ) {
37
  /**
38
+ * Get field settings.
39
  *
40
  * @param string $key Meta key. Required.
41
  * @param array $args Array of arguments. Optional.
43
  *
44
  * @return array
45
  */
46
+ function rwmb_get_field_settings( $key, $args = array(), $object_id = null ) {
47
  $args = wp_parse_args( $args, array(
48
  'object_type' => 'post',
49
  ) );
115
  */
116
  function rwmb_get_value( $field_id, $args = array(), $post_id = null ) {
117
  $args = wp_parse_args( $args );
118
+ $field = rwmb_get_field_settings( $field_id, $args, $post_id );
119
 
120
  // Get field value.
121
  $value = $field ? RWMB_Field::call( 'get_value', $field, $args, $post_id ) : false;
148
  */
149
  function rwmb_the_value( $field_id, $args = array(), $post_id = null, $echo = true ) {
150
  $args = wp_parse_args( $args );
151
+ $field = rwmb_get_field_settings( $field_id, $args, $post_id );
152
 
153
  if ( ! $field ) {
154
  return '';
217
  $class = 'RWMB_' . ucwords( $type ) . '_Registry';
218
  $class = str_replace( ' ', '_', $class );
219
  if ( ! isset( $data[ $type ] ) ) {
220
+ $data[ $type ] = new $class();
221
  }
222
 
223
  return $data[ $type ];
249
  /**
250
  * Get storage instance.
251
  *
252
+ * @param string $object_type Object type. Use post or term.
253
+ * @param RW_Meta_Box $meta_box Meta box object. Optional.
254
  * @return RWMB_Storage_Interface
255
  */
256
+ function rwmb_get_storage( $object_type, $meta_box = null ) {
257
  $class_name = rwmb_get_storage_class_name( $object_type );
258
+ $storage = rwmb_get_registry( 'storage' )->get( $class_name );
259
+
260
+ return apply_filters( 'rwmb_get_storage', $storage, $object_type, $meta_box );
261
+ }
262
+ }
263
+
264
+ if ( ! function_exists( 'rwmb_get_meta_box' ) ) {
265
+ /**
266
+ * Get meta box object from meta box data.
267
+ *
268
+ * @param array $meta_box Array of meta box data.
269
+ * @return RW_Meta_Box
270
+ */
271
+ function rwmb_get_meta_box( $meta_box ) {
272
+ /**
273
+ * Allow filter meta box class name.
274
+ *
275
+ * @var string Meta box class name.
276
+ * @var array Meta box data.
277
+ */
278
+ $class_name = apply_filters( 'rwmb_meta_box_class_name', 'RW_Meta_Box', $meta_box );
279
 
280
+ return new $class_name( $meta_box );
281
  }
282
  }
inc/libraries/meta-box/inc/loader.php CHANGED
@@ -18,7 +18,7 @@ class RWMB_Loader {
18
  */
19
  protected function constants() {
20
  // Script version, used to add version for scripts and styles.
21
- define( 'RWMB_VER', '4.11.3' );
22
 
23
  list( $path, $url ) = self::get_path( dirname( dirname( __FILE__ ) ) );
24
 
@@ -72,9 +72,10 @@ class RWMB_Loader {
72
 
73
  // Register autoload for classes.
74
  require_once RWMB_INC_DIR . 'autoloader.php';
75
- $autoloader = new RWMB_Autoloader;
76
  $autoloader->add( RWMB_INC_DIR, 'RW_' );
77
  $autoloader->add( RWMB_INC_DIR, 'RWMB_' );
 
78
  $autoloader->add( RWMB_INC_DIR . 'fields', 'RWMB_', '_Field' );
79
  $autoloader->add( RWMB_INC_DIR . 'walkers', 'RWMB_Walker_' );
80
  $autoloader->add( RWMB_INC_DIR . 'interfaces', 'RWMB_', '_Interface' );
@@ -82,21 +83,24 @@ class RWMB_Loader {
82
  $autoloader->register();
83
 
84
  // Plugin core.
85
- $core = new RWMB_Core;
86
  $core->init();
87
 
 
 
 
88
  // Validation module.
89
- new RWMB_Validation;
90
 
91
- $sanitize = new RWMB_Sanitizer;
92
  $sanitize->init();
93
 
94
- $media_modal = new RWMB_Media_Modal;
95
  $media_modal->init();
96
 
97
  // WPML Compatibility.
98
- // $wpml = new RWMB_WPML;
99
- // $wpml->init();
100
 
101
  // Public functions.
102
  require_once RWMB_INC_DIR . 'functions.php';
18
  */
19
  protected function constants() {
20
  // Script version, used to add version for scripts and styles.
21
+ define( 'RWMB_VER', '4.14.2' );
22
 
23
  list( $path, $url ) = self::get_path( dirname( dirname( __FILE__ ) ) );
24
 
72
 
73
  // Register autoload for classes.
74
  require_once RWMB_INC_DIR . 'autoloader.php';
75
+ $autoloader = new RWMB_Autoloader();
76
  $autoloader->add( RWMB_INC_DIR, 'RW_' );
77
  $autoloader->add( RWMB_INC_DIR, 'RWMB_' );
78
+ $autoloader->add( RWMB_INC_DIR . 'about', 'RWMB_' );
79
  $autoloader->add( RWMB_INC_DIR . 'fields', 'RWMB_', '_Field' );
80
  $autoloader->add( RWMB_INC_DIR . 'walkers', 'RWMB_Walker_' );
81
  $autoloader->add( RWMB_INC_DIR . 'interfaces', 'RWMB_', '_Interface' );
83
  $autoloader->register();
84
 
85
  // Plugin core.
86
+ $core = new RWMB_Core();
87
  $core->init();
88
 
89
+ $about = new RWMB_About();
90
+ $about->init();
91
+
92
  // Validation module.
93
+ new RWMB_Validation();
94
 
95
+ $sanitize = new RWMB_Sanitizer();
96
  $sanitize->init();
97
 
98
+ $media_modal = new RWMB_Media_Modal();
99
  $media_modal->init();
100
 
101
  // WPML Compatibility.
102
+ $wpml = new RWMB_WPML();
103
+ $wpml->init();
104
 
105
  // Public functions.
106
  require_once RWMB_INC_DIR . 'functions.php';
inc/libraries/meta-box/inc/media-modal.php CHANGED
@@ -21,7 +21,9 @@ class RWMB_Media_Modal {
21
  * Initialize.
22
  */
23
  public function init() {
24
- add_action( 'init', array( $this, 'get_fields' ) );
 
 
25
  add_filter( 'attachment_fields_to_edit', array( $this, 'add_fields' ), 11, 2 );
26
  add_filter( 'attachment_fields_to_save', array( $this, 'save_fields' ), 11, 2 );
27
 
21
  * Initialize.
22
  */
23
  public function init() {
24
+ // Meta boxes are registered at priority 20, so we use 30 to capture them all.
25
+ add_action( 'init', array( $this, 'get_fields' ), 30 );
26
+
27
  add_filter( 'attachment_fields_to_edit', array( $this, 'add_fields' ), 11, 2 );
28
  add_filter( 'attachment_fields_to_save', array( $this, 'save_fields' ), 11, 2 );
29
 
inc/libraries/meta-box/inc/meta-box-registry.php CHANGED
@@ -37,6 +37,28 @@ class RWMB_Meta_Box_Registry {
37
  return isset( $this->data[ $id ] ) ? $this->data[ $id ] : false;
38
  }
39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  /**
41
  * Retrieve all meta boxes.
42
  *
37
  return isset( $this->data[ $id ] ) ? $this->data[ $id ] : false;
38
  }
39
 
40
+ /**
41
+ * Get meta boxes under some conditions.
42
+ *
43
+ * @param array $args Custom argument to get meta boxes by.
44
+ *
45
+ * @return array
46
+ */
47
+ public function get_by( $args ) {
48
+ $meta_boxes = $this->data;
49
+ foreach ( $meta_boxes as $index => $meta_box ) {
50
+ foreach ( $args as $key => $value ) {
51
+ $meta_box_key = 'object_type' === $key ? $meta_box->get_object_type() : $meta_box->$key;
52
+ if ( $meta_box_key !== $value ) {
53
+ unset( $meta_boxes[ $index ] );
54
+ continue 2; // Skip the meta box loop.
55
+ }
56
+ }
57
+ }
58
+
59
+ return $meta_boxes;
60
+ }
61
+
62
  /**
63
  * Retrieve all meta boxes.
64
  *
inc/libraries/meta-box/inc/meta-box.php CHANGED
@@ -34,7 +34,14 @@ class RW_Meta_Box {
34
  *
35
  * @var int
36
  */
37
- private $object_id = null;
 
 
 
 
 
 
 
38
 
39
  /**
40
  * Create meta box based on given data.
@@ -42,17 +49,37 @@ class RW_Meta_Box {
42
  * @param array $meta_box Meta box definition.
43
  */
44
  public function __construct( $meta_box ) {
45
- $meta_box = self::normalize( $meta_box );
46
- $meta_box['fields'] = self::normalize_fields( $meta_box['fields'] );
47
-
48
  $this->meta_box = $meta_box;
49
 
 
 
 
 
 
 
 
 
 
50
  if ( $this->is_shown() ) {
51
  $this->global_hooks();
52
  $this->object_hooks();
53
  }
54
  }
55
 
 
 
 
 
 
 
 
 
 
 
 
 
 
56
  /**
57
  * Conditional check for whether initializing meta box.
58
  *
@@ -73,6 +100,7 @@ class RW_Meta_Box {
73
  protected function global_hooks() {
74
  // Enqueue common styles and scripts.
75
  add_action( 'admin_enqueue_scripts', array( $this, 'enqueue' ) );
 
76
  // Add additional actions for fields.
77
  foreach ( $this->fields as $field ) {
78
  RWMB_Field::call( $field, 'add_actions' );
@@ -110,11 +138,16 @@ class RW_Meta_Box {
110
  if ( is_admin() && ! $this->is_edit_screen() ) {
111
  return;
112
  }
 
113
  wp_enqueue_style( 'rwmb', RWMB_CSS_URL . 'style.css', array(), RWMB_VER );
114
  if ( is_rtl() ) {
115
  wp_enqueue_style( 'rwmb-rtl', RWMB_CSS_URL . 'style-rtl.css', array(), RWMB_VER );
116
  }
117
 
 
 
 
 
118
  // Load clone script conditionally.
119
  foreach ( $this->fields as $field ) {
120
  if ( $field['clone'] ) {
@@ -177,13 +210,15 @@ class RW_Meta_Box {
177
  * Callback function to show fields in meta box
178
  */
179
  public function show() {
180
- $this->set_object_id();
181
  $saved = $this->is_saved();
182
 
183
  // Container.
184
  printf(
185
- '<div class="rwmb-meta-box" data-autosave="%s">',
186
- $this->autosave ? 'true' : 'false'
 
 
187
  );
188
 
189
  wp_nonce_field( "rwmb-save-{$this->id}", "nonce_{$this->id}" );
@@ -220,16 +255,32 @@ class RW_Meta_Box {
220
  $this->saved = true;
221
 
222
  // Make sure meta is added to the post, not a revision.
223
- $the_post = wp_is_post_revision( $post_id );
224
- if ( $the_post ) {
225
- $post_id = $the_post;
 
 
226
  }
227
 
228
  // Before save action.
229
  do_action( 'rwmb_before_save_post', $post_id );
230
  do_action( "rwmb_{$this->id}_before_save_post", $post_id );
231
 
232
- foreach ( $this->fields as $field ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
233
  $single = $field['clone'] || ! $field['multiple'];
234
  $old = RWMB_Field::call( $field, 'raw_meta', $post_id );
235
  // @codingStandardsIgnoreLine
@@ -246,11 +297,9 @@ class RW_Meta_Box {
246
 
247
  // Call defined method to save meta value, if there's no methods, call common one.
248
  RWMB_Field::call( $field, 'save', $new, $old, $post_id );
249
- }
250
 
251
- // After save action.
252
- do_action( 'rwmb_after_save_post', $post_id );
253
- do_action( "rwmb_{$this->id}_after_save_post", $post_id );
254
  }
255
 
256
  /**
@@ -264,8 +313,7 @@ class RW_Meta_Box {
264
  public function validate() {
265
  $nonce = filter_input( INPUT_POST, "nonce_{$this->id}", FILTER_SANITIZE_STRING );
266
 
267
- return
268
- ! $this->saved
269
  && ( ! defined( 'DOING_AUTOSAVE' ) || $this->autosave )
270
  && wp_verify_nonce( $nonce, "rwmb-save-{$this->id}" );
271
  }
@@ -286,6 +334,7 @@ class RW_Meta_Box {
286
  'post_types' => 'post',
287
  'autosave' => false,
288
  'default_hidden' => false,
 
289
  ) );
290
 
291
  /**
@@ -306,11 +355,12 @@ class RW_Meta_Box {
306
  /**
307
  * Normalize an array of fields
308
  *
309
- * @param array $fields Array of fields.
 
310
  *
311
  * @return array $fields Normalized fields.
312
  */
313
- public static function normalize_fields( $fields ) {
314
  foreach ( $fields as $k => $field ) {
315
  $field = RWMB_Field::call( 'normalize', $field );
316
 
@@ -319,6 +369,11 @@ class RW_Meta_Box {
319
  $field = apply_filters( "rwmb_normalize_{$field['type']}_field", $field );
320
  $field = apply_filters( "rwmb_normalize_{$field['id']}_field", $field );
321
 
 
 
 
 
 
322
  $fields[ $k ] = $field;
323
  }
324
 
@@ -359,6 +414,7 @@ class RW_Meta_Box {
359
  if ( ! ( $screen instanceof WP_Screen ) ) {
360
  $screen = get_current_screen();
361
  }
 
362
  return 'post' === $screen->base && in_array( $screen->post_type, $this->post_types, true );
363
  }
364
 
@@ -376,11 +432,36 @@ class RW_Meta_Box {
376
  /**
377
  * Set the object ID.
378
  *
379
- * @param null|int $id Object ID. null means the current object ID.
380
  */
381
  public function set_object_id( $id = null ) {
382
- if ( null === $this->object_id ) {
383
- $this->object_id = null === $id ? get_the_ID() : $id;
384
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
385
  }
386
  }
34
  *
35
  * @var int
36
  */
37
+ protected $object_id = null;
38
+
39
+ /**
40
+ * The object type.
41
+ *
42
+ * @var string
43
+ */
44
+ protected $object_type = 'post';
45
 
46
  /**
47
  * Create meta box based on given data.
49
  * @param array $meta_box Meta box definition.
50
  */
51
  public function __construct( $meta_box ) {
52
+ $meta_box = self::normalize( $meta_box );
 
 
53
  $this->meta_box = $meta_box;
54
 
55
+ $storage = $this->get_storage();
56
+ if ( ! $storage ) {
57
+ return;
58
+ }
59
+
60
+ $this->meta_box['fields'] = self::normalize_fields( $meta_box['fields'], $storage );
61
+
62
+ $this->meta_box = apply_filters( 'rwmb_meta_box_settings', $this->meta_box );
63
+
64
  if ( $this->is_shown() ) {
65
  $this->global_hooks();
66
  $this->object_hooks();
67
  }
68
  }
69
 
70
+ /**
71
+ * Add fields to field registry.
72
+ */
73
+ public function register_fields() {
74
+ $field_registry = rwmb_get_registry( 'field' );
75
+
76
+ foreach ( $this->post_types as $post_type ) {
77
+ foreach ( $this->fields as $field ) {
78
+ $field_registry->add( $field, $post_type );
79
+ }
80
+ }
81
+ }
82
+
83
  /**
84
  * Conditional check for whether initializing meta box.
85
  *
100
  protected function global_hooks() {
101
  // Enqueue common styles and scripts.
102
  add_action( 'admin_enqueue_scripts', array( $this, 'enqueue' ) );
103
+
104
  // Add additional actions for fields.
105
  foreach ( $this->fields as $field ) {
106
  RWMB_Field::call( $field, 'add_actions' );
138
  if ( is_admin() && ! $this->is_edit_screen() ) {
139
  return;
140
  }
141
+
142
  wp_enqueue_style( 'rwmb', RWMB_CSS_URL . 'style.css', array(), RWMB_VER );
143
  if ( is_rtl() ) {
144
  wp_enqueue_style( 'rwmb-rtl', RWMB_CSS_URL . 'style-rtl.css', array(), RWMB_VER );
145
  }
146
 
147
+ if ( 'seamless' === $this->style ) {
148
+ wp_enqueue_script( 'rwmb', RWMB_JS_URL . 'script.js', array( 'jquery' ), RWMB_VER, true );
149
+ }
150
+
151
  // Load clone script conditionally.
152
  foreach ( $this->fields as $field ) {
153
  if ( $field['clone'] ) {
210
  * Callback function to show fields in meta box
211
  */
212
  public function show() {
213
+ $this->set_object_id( $this->get_current_object_id() );
214
  $saved = $this->is_saved();
215
 
216
  // Container.
217
  printf(
218
+ '<div class="rwmb-meta-box%s" data-autosave="%s" data-object-type="%s">',
219
+ esc_attr( 'seamless' === $this->style ? ' rwmb-meta-box--seamless' : '' ),
220
+ esc_attr( $this->autosave ? 'true' : 'false' ),
221
+ esc_attr( $this->object_type )
222
  );
223
 
224
  wp_nonce_field( "rwmb-save-{$this->id}", "nonce_{$this->id}" );
255
  $this->saved = true;
256
 
257
  // Make sure meta is added to the post, not a revision.
258
+ if ( 'post' === $this->object_type ) {
259
+ $the_post = wp_is_post_revision( $post_id );
260
+ if ( $the_post ) {
261
+ $post_id = $the_post;
262
+ }
263
  }
264
 
265
  // Before save action.
266
  do_action( 'rwmb_before_save_post', $post_id );
267
  do_action( "rwmb_{$this->id}_before_save_post", $post_id );
268
 
269
+ $this->save_fields( $post_id, $this->fields );
270
+
271
+ // After save action.
272
+ do_action( 'rwmb_after_save_post', $post_id );
273
+ do_action( "rwmb_{$this->id}_after_save_post", $post_id );
274
+ }
275
+
276
+ /**
277
+ * Save fields data.
278
+ *
279
+ * @param int $post_id Post id.
280
+ * @param array $fields Fields data.
281
+ */
282
+ public function save_fields( $post_id, $fields ) {
283
+ foreach ( $fields as $field ) {
284
  $single = $field['clone'] || ! $field['multiple'];
285
  $old = RWMB_Field::call( $field, 'raw_meta', $post_id );
286
  // @codingStandardsIgnoreLine
297
 
298
  // Call defined method to save meta value, if there's no methods, call common one.
299
  RWMB_Field::call( $field, 'save', $new, $old, $post_id );
 
300
 
301
+ RWMB_Field::filter( 'after_save_field', null, $field, $new, $old, $post_id, $field );
302
+ }
 
303
  }
304
 
305
  /**
313
  public function validate() {
314
  $nonce = filter_input( INPUT_POST, "nonce_{$this->id}", FILTER_SANITIZE_STRING );
315
 
316
+ return ! $this->saved
 
317
  && ( ! defined( 'DOING_AUTOSAVE' ) || $this->autosave )
318
  && wp_verify_nonce( $nonce, "rwmb-save-{$this->id}" );
319
  }
334
  'post_types' => 'post',
335
  'autosave' => false,
336
  'default_hidden' => false,
337
+ 'style' => 'default',
338
  ) );
339
 
340
  /**
355
  /**
356
  * Normalize an array of fields
357
  *
358
+ * @param array $fields Array of fields.
359
+ * @param RWMB_Storage_Interface $storage Storage object. Optional.
360
  *
361
  * @return array $fields Normalized fields.
362
  */
363
+ public static function normalize_fields( $fields, $storage = null ) {
364
  foreach ( $fields as $k => $field ) {
365
  $field = RWMB_Field::call( 'normalize', $field );
366
 
369
  $field = apply_filters( "rwmb_normalize_{$field['type']}_field", $field );
370
  $field = apply_filters( "rwmb_normalize_{$field['id']}_field", $field );
371
 
372
+ // Add storage object to field.
373
+ if ( $storage ) {
374
+ $field['storage'] = $storage;
375
+ }
376
+
377
  $fields[ $k ] = $field;
378
  }
379
 
414
  if ( ! ( $screen instanceof WP_Screen ) ) {
415
  $screen = get_current_screen();
416
  }
417
+
418
  return 'post' === $screen->base && in_array( $screen->post_type, $this->post_types, true );
419
  }
420
 
432
  /**
433
  * Set the object ID.
434
  *
435
+ * @param mixed $id Object ID.
436
  */
437
  public function set_object_id( $id = null ) {
438
+ $this->object_id = $id;
439
+ }
440
+
441
+ /**
442
+ * Get object type.
443
+ *
444
+ * @return string
445
+ */
446
+ public function get_object_type() {
447
+ return $this->object_type;
448
+ }
449
+
450
+ /**
451
+ * Get storage object.
452
+ *
453
+ * @return RWMB_Storage_Interface
454
+ */
455
+ public function get_storage() {
456
+ return rwmb_get_storage( $this->object_type, $this );
457
+ }
458
+
459
+ /**
460
+ * Get current object id.
461
+ *
462
+ * @return int|string
463
+ */
464
+ protected function get_current_object_id() {
465
+ return get_the_ID();
466
  }
467
  }
inc/libraries/meta-box/inc/storage-registry.php CHANGED
@@ -25,6 +25,10 @@ class RWMB_Storage_Registry {
25
  */
26
  public function get( $class_name ) {
27
  if ( empty( $this->storages[ $class_name ] ) ) {
 
 
 
 
28
  $this->storages[ $class_name ] = new $class_name();
29
  }
30
 
25
  */
26
  public function get( $class_name ) {
27
  if ( empty( $this->storages[ $class_name ] ) ) {
28
+ if ( ! class_exists( $class_name ) ) {
29
+ return null;
30
+ }
31
+
32
  $this->storages[ $class_name ] = new $class_name();
33
  }
34
 
inc/libraries/meta-box/inc/storages/post.php CHANGED
@@ -8,18 +8,12 @@
8
  /**
9
  * Class RWMB_Post_Storage
10
  */
11
- class RWMB_Post_Storage implements RWMB_Storage_Interface {
12
 
13
  /**
14
- * Get value from storage.
15
  *
16
- * @param int $object_id Object id.
17
- * @param string $name Field name.
18
- * @param array $args Custom arguments.
19
- * @return mixed
20
  */
21
- public function get( $object_id, $name, $args = array() ) {
22
- $single = ! empty( $args['single'] );
23
- return get_post_meta( $object_id, $name, $single );
24
- }
25
  }
8
  /**
9
  * Class RWMB_Post_Storage
10
  */
11
+ class RWMB_Post_Storage extends RWMB_Base_Storage {
12
 
13
  /**
14
+ * Object type.
15
  *
16
+ * @var string
 
 
 
17
  */
18
+ protected $object_type = 'post';
 
 
 
19
  }
inc/libraries/meta-box/inc/templates/image-advanced.php CHANGED
@@ -1,7 +1,7 @@
1
  <script id="tmpl-rwmb-image-item" type="text/html">
2
  <input type="hidden" name="{{{ data.controller.fieldName }}}" value="{{{ data.id }}}" class="rwmb-media-input">
3
- <div class="rwmb-media-preview">
4
- <div class="rwmb-media-content">
5
  <div class="centered">
6
  <# if ( 'image' === data.type && data.sizes ) { #>
7
  <# if ( data.sizes[data.controller.imageSize] ) { #>
@@ -19,12 +19,12 @@
19
  </div>
20
  </div>
21
  </div>
22
- <div class="rwmb-overlay"></div>
23
- <div class="rwmb-media-bar">
24
- <a class="rwmb-edit-media" title="{{{ i18nRwmbMedia.edit }}}" href="{{{ data.editLink }}}" target="_blank">
25
  <span class="dashicons dashicons-edit"></span>
26
  </a>
27
- <a href="#" class="rwmb-remove-media" title="{{{ i18nRwmbMedia.remove }}}">
28
  <span class="dashicons dashicons-no-alt"></span>
29
  </a>
30
  </div>
1
  <script id="tmpl-rwmb-image-item" type="text/html">
2
  <input type="hidden" name="{{{ data.controller.fieldName }}}" value="{{{ data.id }}}" class="rwmb-media-input">
3
+ <div class="attachment-preview">
4
+ <div class="thumbnail">
5
  <div class="centered">
6
  <# if ( 'image' === data.type && data.sizes ) { #>
7
  <# if ( data.sizes[data.controller.imageSize] ) { #>
19
  </div>
20
  </div>
21
  </div>
22
+ <div class="rwmb-image-overlay"></div>
23
+ <div class="rwmb-image-actions">
24
+ <a class="rwmb-image-edit rwmb-edit-media" title="{{{ i18nRwmbMedia.edit }}}" href="{{{ data.editLink }}}" target="_blank">
25
  <span class="dashicons dashicons-edit"></span>
26
  </a>
27
+ <a href="#" class="rwmb-image-delete rwmb-remove-media" title="{{{ i18nRwmbMedia.remove }}}">
28
  <span class="dashicons dashicons-no-alt"></span>
29
  </a>
30
  </div>
inc/libraries/meta-box/inc/templates/media.php CHANGED
@@ -1,7 +1,7 @@
1
  <script id="tmpl-rwmb-media-item" type="text/html">
2
  <input type="hidden" name="{{{ data.controller.fieldName }}}" value="{{{ data.id }}}" class="rwmb-media-input">
3
- <div class="rwmb-media-preview">
4
- <div class="rwmb-media-content">
5
  <div class="centered">
6
  <# if ( 'image' === data.type && data.sizes ) { #>
7
  <# if ( data.sizes.thumbnail ) { #>
@@ -20,15 +20,15 @@
20
  </div>
21
  </div>
22
  <div class="rwmb-media-info">
23
- <h4>
24
- <a href="{{{ data.url }}}" target="_blank" title="{{{ i18nRwmbMedia.view }}}">
25
- <# if( data.title ) { #> {{{ data.title }}}
26
- <# } else { #> {{{ i18nRwmbMedia.noTitle }}}
27
- <# } #>
28
- </a>
29
- </h4>
30
- <p>{{{ data.mime }}}</p>
31
- <p>
32
  <a class="rwmb-edit-media" title="{{{ i18nRwmbMedia.edit }}}" href="{{{ data.editLink }}}" target="_blank">
33
  <span class="dashicons dashicons-edit"></span>{{{ i18nRwmbMedia.edit }}}
34
  </a>
1
  <script id="tmpl-rwmb-media-item" type="text/html">
2
  <input type="hidden" name="{{{ data.controller.fieldName }}}" value="{{{ data.id }}}" class="rwmb-media-input">
3
+ <div class="rwmb-media-preview attachment-preview">
4
+ <div class="rwmb-media-content thumbnail">
5
  <div class="centered">
6
  <# if ( 'image' === data.type && data.sizes ) { #>
7
  <# if ( data.sizes.thumbnail ) { #>
20
  </div>
21
  </div>
22
  <div class="rwmb-media-info">
23
+ <a href="{{{ data.url }}}" class="rwmb-media-title" target="_blank">
24
+ <# if( data.title ) { #>
25
+ {{{ data.title }}}
26
+ <# } else { #>
27
+ {{{ i18nRwmbMedia.noTitle }}}
28
+ <# } #>
29
+ </a>
30
+ <p class="rwmb-media-name">{{{ data.filename }}}</p>
31
+ <p class="rwmb-media-actions">
32
  <a class="rwmb-edit-media" title="{{{ i18nRwmbMedia.edit }}}" href="{{{ data.editLink }}}" target="_blank">
33
  <span class="dashicons dashicons-edit"></span>{{{ i18nRwmbMedia.edit }}}
34
  </a>
inc/libraries/meta-box/inc/templates/video.php CHANGED
@@ -23,15 +23,15 @@
23
  </div>
24
  </div>
25
  <div class="rwmb-media-info">
26
- <h4>
27
- <a href="{{{ data.url }}}" target="_blank" title="{{{ i18nRwmbMedia.view }}}">
28
- <# if( data.title ) { #> {{{ data.title }}}
29
- <# } else { #> {{{ i18nRwmbMedia.noTitle }}}
30
- <# } #>
31
- </a>
32
- </h4>
33
- <p>{{{ data.mime }}}</p>
34
- <p>
35
  <a class="rwmb-edit-media" title="{{{ i18nRwmbMedia.edit }}}" href="{{{ data.editLink }}}" target="_blank">
36
  <span class="dashicons dashicons-edit"></span>{{{ i18nRwmbMedia.edit }}}
37
  </a>
23
  </div>
24
  </div>
25
  <div class="rwmb-media-info">
26
+ <a href="{{{ data.url }}}" class="rwmb-media-title" target="_blank">
27
+ <# if( data.title ) { #>
28
+ {{{ data.title }}}
29
+ <# } else { #>
30
+ {{{ i18nRwmbMedia.noTitle }}}
31
+ <# } #>
32
+ </a>
33
+ <p class="rwmb-media-name">{{{ data.filename }}}</p>
34
+ <p class="rwmb-media-actions">
35
  <a class="rwmb-edit-media" title="{{{ i18nRwmbMedia.edit }}}" href="{{{ data.editLink }}}" target="_blank">
36
  <span class="dashicons dashicons-edit"></span>{{{ i18nRwmbMedia.edit }}}
37
  </a>
inc/libraries/meta-box/inc/validation.php CHANGED
@@ -44,7 +44,7 @@ class RWMB_Validation {
44
  wp_enqueue_script( 'rwmb-validate', RWMB_JS_URL . 'validate.js', array( 'jquery-validation', 'jquery-validation-additional-methods' ), RWMB_VER, true );
45
 
46
  RWMB_Field::localize_script( 'rwmb-validate', 'rwmbValidate', array(
47
- 'summaryMessage' => esc_html__( 'Please correct the errors highlighted below and try again.', 'meta-box' ),
48
  ) );
49
  }
50
  }
44
  wp_enqueue_script( 'rwmb-validate', RWMB_JS_URL . 'validate.js', array( 'jquery-validation', 'jquery-validation-additional-methods' ), RWMB_VER, true );
45
 
46
  RWMB_Field::localize_script( 'rwmb-validate', 'rwmbValidate', array(
47
+ 'summaryMessage' => esc_html__( 'Please correct the errors highlighted below and try again.', 'learnpress' ),
48
  ) );
49
  }
50
  }
inc/libraries/meta-box/inc/walkers/select.php CHANGED
@@ -29,7 +29,7 @@ class RWMB_Walker_Select extends RWMB_Walker_Base {
29
  $output .= sprintf(
30
  '<option value="%s" %s>%s%s</option>',
31
  esc_attr( $object->$id ),
32
- selected( in_array( esc_attr( $object->$id ), $meta, true ), true, false ),
33
  $indent,
34
  esc_html( RWMB_Field::filter( 'choice_label', $object->$label, $this->field, $object ) )
35
  );
29
  $output .= sprintf(
30
  '<option value="%s" %s>%s%s</option>',
31
  esc_attr( $object->$id ),
32
+ selected( in_array( $object->$id, $meta ), true, false ),
33
  $indent,
34
  esc_html( RWMB_Field::filter( 'choice_label', $object->$label, $this->field, $object ) )
35
  );
inc/libraries/meta-box/inc/wpml.php CHANGED
@@ -53,7 +53,7 @@ class RWMB_WPML {
53
  }
54
 
55
  $field = rwmb_get_registry( 'field' )->get( $meta_data['key'], get_post_type( $meta_data['master_post_id'] ) );
56
- if ( false !== $field || ! in_array( $field['type'], $this->field_types, true ) ) {
57
  return $value;
58
  }
59
 
@@ -103,7 +103,7 @@ class RWMB_WPML {
103
  }
104
 
105
  // If the post is the original one: do nothing.
106
- if ( ! $wpml_post_translations->get_source_lang_code( $post_id ) ) {
107
  return $field;
108
  }
109
 
53
  }
54
 
55
  $field = rwmb_get_registry( 'field' )->get( $meta_data['key'], get_post_type( $meta_data['master_post_id'] ) );
56
+ if ( false === $field || ! in_array( $field['type'], $this->field_types, true ) ) {
57
  return $value;
58
  }
59
 
103
  }
104
 
105
  // If the post is the original one: do nothing.
106
+ if ( ! method_exists( $wpml_post_translations, 'get_source_lang_code' ) || ! $wpml_post_translations->get_source_lang_code( $post_id ) ) {
107
  return $field;
108
  }
109
 
inc/libraries/meta-box/js/autocomplete.js CHANGED
@@ -39,11 +39,11 @@ jQuery( function ( $ ) {
39
  }
40
 
41
  $( '.rwmb-autocomplete-wrapper input[type="hidden"]' ).each( updateAutocomplete );
42
- $( '.rwmb-input' ).on( 'clone', ':input.rwmb-autocomplete', updateAutocomplete );
43
-
44
- // Handle remove action
45
- $( document ).on( 'click', '.rwmb-autocomplete-result .actions', function () {
46
- // remove result
47
- $( this ).parent().remove();
48
- } );
49
  } );
39
  }
40
 
41
  $( '.rwmb-autocomplete-wrapper input[type="hidden"]' ).each( updateAutocomplete );
42
+ $( document )
43
+ .on( 'clone', '.rwmb-autocomplete', updateAutocomplete )
44
+ // Handle remove action
45
+ .on( 'click', '.rwmb-autocomplete-result .actions', function () {
46
+ // remove result
47
+ $( this ).parent().remove();
48
+ } );
49
  } );
inc/libraries/meta-box/js/autosave.js CHANGED
@@ -1,14 +1,16 @@
1
- jQuery( function ( $ ) {
2
  'use strict';
3
 
4
- $( document ).ajaxSend( function ( e, xhr, s ) {
5
- if ( typeof s.data !== 'undefined' && - 1 !== s.data.indexOf( 'action=autosave' ) ) {
6
- $( '.rwmb-meta-box' ).each( function () {
7
- var $meta_box = $( this );
8
- if ( $meta_box.data( 'autosave' ) === true ) {
9
- s.data += '&' + $meta_box.find( ':input' ).serialize();
10
- }
11
- } );
12
  }
 
 
 
 
 
 
 
13
  } );
14
- } );
1
+ ( function ( $, document ) {
2
  'use strict';
3
 
4
+ $( document ).ajaxSend( function ( event, xhr, settings ) {
5
+ if ( typeof settings.data === 'undefined' || -1 === settings.data.indexOf( 'wp_autosave' ) ) {
6
+ return;
 
 
 
 
 
7
  }
8
+ var inputSelectors = 'input[class*="rwmb"], textarea[class*="rwmb"], select[class*="rwmb"], button[class*="rwmb"], input[name^="nonce_"]';
9
+ $( '.rwmb-meta-box' ).each( function () {
10
+ var $meta_box = $( this );
11
+ if ( true === $meta_box.data( 'autosave' ) ) {
12
+ settings.data += '&' + $meta_box.find( inputSelectors ).serialize();
13
+ }
14
+ } );
15
  } );
16
+ } )( jQuery, document );
inc/libraries/meta-box/js/clone.js CHANGED
@@ -6,15 +6,15 @@ jQuery( function ( $ ) {
6
  var cloneIndex = {
7
  /**
8
  * Set index for fields in a .rwmb-clone
9
- * @param $clone .rwmb-clone element
10
  * @param index Index value
11
  */
12
- set: function ( $clone, index ) {
13
- $clone.find( ':input[class|="rwmb"]' ).each( function () {
14
  var $field = $( this );
15
 
16
  // Name attribute
17
- var name = $field.attr( 'name' );
18
  if ( name && ! $field.closest( '.rwmb-group-clone' ).length ) {
19
  $field.attr( 'name', cloneIndex.replace( index, name, '[', ']', false ) );
20
  }
@@ -29,7 +29,7 @@ jQuery( function ( $ ) {
29
  } );
30
 
31
  // Address button's value attribute
32
- var $address = $clone.find( '.rwmb-map-goto-address-button' );
33
  if ( $address.length ) {
34
  var value = $address.attr( 'value' );
35
  $address.attr( 'value', cloneIndex.replace( index, value, '_' ) );
@@ -43,6 +43,7 @@ jQuery( function ( $ ) {
43
  * @param before String before returned value
44
  * @param after String after returned value
45
  * @param alternative Check if attribute does not contain any integer, will reset the attribute?
 
46
  * @return string
47
  */
48
  replace: function ( index, value, before, after, alternative, isEnd ) {
@@ -83,31 +84,64 @@ jQuery( function ( $ ) {
83
  }
84
  };
85
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
  /**
87
  * Clone fields
88
  * @param $container A div container which has all fields
89
- * @return void
90
  */
91
  function clone( $container ) {
92
- var $last = $container.children( '.rwmb-clone:last' ),
93
  $clone = $last.clone(),
94
- $input = $clone.find( ':input[class|="rwmb"]' ),
95
  nextIndex = cloneIndex.nextIndex( $container );
96
 
97
  // Reset value for fields
98
- $input.each( function () {
99
- var $field = $( this );
100
- if ( $field.is( ':radio' ) || $field.is( ':checkbox' ) ) {
101
- // Reset 'checked' attribute
102
- $field.prop( 'checked', false );
103
- } else if ( $field.is( 'select' ) ) {
104
- // Reset select
105
- $field.prop( 'selectedIndex', - 1 )
106
- } else if ( ! $field.hasClass( 'rwmb-hidden' ) ) {
107
- // Reset value
108
- $field.val( '' );
109
- }
110
- } );
111
 
112
  // Insert Clone
113
  $clone.insertAfter( $last );
@@ -116,18 +150,19 @@ jQuery( function ( $ ) {
116
  $clone.trigger( 'clone_instance', nextIndex );
117
 
118
  // Set fields index. Must run before trigger clone event.
119
- cloneIndex.set( $clone, nextIndex );
 
 
 
120
 
121
- // Trigger custom clone event
122
- $input.trigger( 'clone', nextIndex );
123
  }
124
 
125
  /**
126
  * Hide remove buttons when there's only 1 of them
127
  *
128
  * @param $container .rwmb-input container
129
- *
130
- * @return void
131
  */
132
  function toggleRemoveButtons( $container ) {
133
  var $clones = $container.children( '.rwmb-clone' );
@@ -144,17 +179,38 @@ jQuery( function ( $ ) {
144
  * Used with [data-max-clone] attribute. When max clone is reached, the add button is hid and vice versa
145
  *
146
  * @param $container .rwmb-input container
147
- *
148
- * @return void
149
  */
150
  function toggleAddButton( $container ) {
151
- var $button = $container.find( '.add-clone' ),
152
  maxClone = parseInt( $container.data( 'max-clone' ) ),
153
- numClone = $container.find( '.rwmb-clone' ).length;
154
 
155
  $button.toggle( isNaN( maxClone ) || ( maxClone && numClone < maxClone ) );
156
  }
157
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
158
  $( document )
159
  // Add clones
160
  .on( 'click', '.add-clone', function ( e ) {
@@ -165,6 +221,7 @@ jQuery( function ( $ ) {
165
 
166
  toggleRemoveButtons( $container );
167
  toggleAddButton( $container );
 
168
  } )
169
  // Remove clones
170
  .on( 'click', '.remove-clone', function ( e ) {
@@ -192,8 +249,8 @@ jQuery( function ( $ ) {
192
  .data( 'next-index', $container.children( '.rwmb-clone' ).length )
193
  .sortable( {
194
  handle: '.rwmb-clone-icon',
195
- placeholder: ' rwmb-clone rwmb-clone-placeholder',
196
- items: '.rwmb-clone',
197
  start: function ( event, ui ) {
198
  // Make the placeholder has the same height as dragged item
199
  ui.placeholder.height( ui.item.outerHeight() );
6
  var cloneIndex = {
7
  /**
8
  * Set index for fields in a .rwmb-clone
9
+ * @param $inputs .rwmb-clone element
10
  * @param index Index value
11
  */
12
+ set: function ( $inputs, index ) {
13
+ $inputs.each( function () {
14
  var $field = $( this );
15
 
16
  // Name attribute
17
+ var name = this.name;
18
  if ( name && ! $field.closest( '.rwmb-group-clone' ).length ) {
19
  $field.attr( 'name', cloneIndex.replace( index, name, '[', ']', false ) );
20
  }
29
  } );
30
 
31
  // Address button's value attribute
32
+ var $address = $inputs.filter( '.rwmb-map-goto-address-button' );
33
  if ( $address.length ) {
34
  var value = $address.attr( 'value' );
35
  $address.attr( 'value', cloneIndex.replace( index, value, '_' ) );
43
  * @param before String before returned value
44
  * @param after String after returned value
45
  * @param alternative Check if attribute does not contain any integer, will reset the attribute?
46
+ * @param isEnd Check if we find string at the end?
47
  * @return string
48
  */
49
  replace: function ( index, value, before, after, alternative, isEnd ) {
84
  }
85
  };
86
 
87
+ // Object holds all method related to fields' value when clone.
88
+ var cloneValue = {
89
+ /**
90
+ * Reset field value when clone. Expect this = current input.
91
+ */
92
+ reset: function() {
93
+ cloneValue.$field = $( this );
94
+ cloneValue.type = cloneValue.$field.attr( 'type' );
95
+ cloneValue.isHiddenField = cloneValue.$field.hasClass( 'rwmb-hidden' );
96
+
97
+ if ( true === cloneValue.$field.data( 'clone-default' ) ) {
98
+ cloneValue.resetToDefault();
99
+ } else {
100
+ cloneValue.clear();
101
+ }
102
+ },
103
+ /**
104
+ * Reset field value to its default.
105
+ */
106
+ resetToDefault: function() {
107
+ var defaultValue = cloneValue.$field.data( 'default' );
108
+ if ( 'radio' === cloneValue.type ) {
109
+ cloneValue.$field.prop( 'checked', cloneValue.$field.val() === defaultValue );
110
+ } else if ( 'checkbox' === cloneValue.type ) {
111
+ cloneValue.$field.prop( 'checked', !!defaultValue );
112
+ } else if ( 'select' === cloneValue.type ) {
113
+ cloneValue.$field.find( 'option[value="' + defaultValue + '"]' ).prop( 'selected', true );
114
+ } else if ( ! cloneValue.isHiddenField ) {
115
+ cloneValue.$field.val( defaultValue );
116
+ }
117
+ },
118
+ /**
119
+ * Clear field value.
120
+ */
121
+ clear: function() {
122
+ if ( 'radio' === cloneValue.type || 'checkbox' === cloneValue.type ) {
123
+ cloneValue.$field.prop( 'checked', false );
124
+ } else if ( 'select' === cloneValue.type ) {
125
+ cloneValue.$field.prop( 'selectedIndex', - 1 );
126
+ } else if ( ! cloneValue.isHiddenField ) {
127
+ cloneValue.$field.val( '' );
128
+ }
129
+ }
130
+ };
131
+
132
  /**
133
  * Clone fields
134
  * @param $container A div container which has all fields
 
135
  */
136
  function clone( $container ) {
137
+ var $last = $container.children( '.rwmb-clone' ).last(),
138
  $clone = $last.clone(),
139
+ inputSelectors = 'input[class*="rwmb"], textarea[class*="rwmb"], select[class*="rwmb"], button[class*="rwmb"]',
140
  nextIndex = cloneIndex.nextIndex( $container );
141
 
142
  // Reset value for fields
143
+ var $inputs = $clone.find( inputSelectors );
144
+ $inputs.each( cloneValue.reset );
 
 
 
 
 
 
 
 
 
 
 
145
 
146
  // Insert Clone
147
  $clone.insertAfter( $last );
150
  $clone.trigger( 'clone_instance', nextIndex );
151
 
152
  // Set fields index. Must run before trigger clone event.
153
+ cloneIndex.set( $inputs, nextIndex );
154
+
155
+ // Trigger custom clone event.
156
+ $inputs.trigger( 'clone', nextIndex );
157
 
158
+ // After cloning fields.
159
+ $inputs.trigger( 'after_clone', nextIndex );
160
  }
161
 
162
  /**
163
  * Hide remove buttons when there's only 1 of them
164
  *
165
  * @param $container .rwmb-input container
 
 
166
  */
167
  function toggleRemoveButtons( $container ) {
168
  var $clones = $container.children( '.rwmb-clone' );
179
  * Used with [data-max-clone] attribute. When max clone is reached, the add button is hid and vice versa
180
  *
181
  * @param $container .rwmb-input container
 
 
182
  */
183
  function toggleAddButton( $container ) {
184
+ var $button = $container.children( '.add-clone' ),
185
  maxClone = parseInt( $container.data( 'max-clone' ) ),
186
+ numClone = $container.children( '.rwmb-clone' ).length;
187
 
188
  $button.toggle( isNaN( maxClone ) || ( maxClone && numClone < maxClone ) );
189
  }
190
 
191
+ /**
192
+ * Initialize clone sorting.
193
+ */
194
+ function initSortable() {
195
+ $( '.rwmb-input' ).each( function () {
196
+ var $container = $( this );
197
+
198
+ if ( undefined !== $container.sortable( 'instance' ) ) {
199
+ return;
200
+ }
201
+
202
+ $container.sortable( {
203
+ handle: '.rwmb-clone-icon',
204
+ placeholder: ' rwmb-clone rwmb-sortable-placeholder',
205
+ items: '> .rwmb-clone',
206
+ start: function ( event, ui ) {
207
+ // Make the placeholder has the same height as dragged item
208
+ ui.placeholder.height( ui.item.outerHeight() );
209
+ }
210
+ } );
211
+ } );
212
+ }
213
+
214
  $( document )
215
  // Add clones
216
  .on( 'click', '.add-clone', function ( e ) {
221
 
222
  toggleRemoveButtons( $container );
223
  toggleAddButton( $container );
224
+ initSortable();
225
  } )
226
  // Remove clones
227
  .on( 'click', '.remove-clone', function ( e ) {
249
  .data( 'next-index', $container.children( '.rwmb-clone' ).length )
250
  .sortable( {
251
  handle: '.rwmb-clone-icon',
252
+ placeholder: ' rwmb-clone rwmb-sortable-placeholder',
253
+ items: '> .rwmb-clone',
254
  start: function ( event, ui ) {
255
  // Make the placeholder has the same height as dragged item
256
  ui.placeholder.height( ui.item.outerHeight() );
inc/libraries/meta-box/js/date.js CHANGED
@@ -23,6 +23,10 @@ jQuery( function ( $ ) {
23
  if ( $inline.length ) {
24
  options.altField = '#' + $this.attr( 'id' );
25
  $this.on( 'keydown', _.debounce( function () {
 
 
 
 
26
  $picker
27
  .datepicker( 'setDate', $this.val() )
28
  .find( ".ui-datepicker-current-day" )
@@ -55,6 +59,6 @@ jQuery( function ( $ ) {
55
  return Math.floor( milliseconds / 1000 );
56
  }
57
 
58
- $( ':input.rwmb-date' ).each( update );
59
- $( '.rwmb-input' ).on( 'clone', ':input.rwmb-date', update );
60
  } );
23
  if ( $inline.length ) {
24
  options.altField = '#' + $this.attr( 'id' );
25
  $this.on( 'keydown', _.debounce( function () {
26
+ // if val is empty, return to allow empty datepicker input.
27
+ if ( !$this.val() ) {
28
+ return;
29
+ }
30
  $picker
31
  .datepicker( 'setDate', $this.val() )
32
  .find( ".ui-datepicker-current-day" )
59
  return Math.floor( milliseconds / 1000 );
60
  }
61
 
62
+ $( '.rwmb-date' ).each( update );
63
+ $( document ).on( 'clone', '.rwmb-date', update );
64
  } );
inc/libraries/meta-box/js/datetime.js CHANGED
@@ -64,6 +64,6 @@ jQuery( function ( $ ) {
64
  $.timepicker.setDefaults( $.timepicker.regional[RWMB_Datetime.localeShort] );
65
  }
66
 
67
- $( ':input.rwmb-datetime' ).each( update );
68
- $( '.rwmb-input' ).on( 'clone', ':input.rwmb-datetime', update );
69
  } );
64
  $.timepicker.setDefaults( $.timepicker.regional[RWMB_Datetime.localeShort] );
65
  }
66
 
67
+ $( '.rwmb-datetime' ).each( update );
68
+ $( document ).on( 'clone', '.rwmb-datetime', update );
69
  } );
inc/libraries/meta-box/js/file-input.js CHANGED
@@ -1,9 +1,10 @@
1
  jQuery( function ( $ ) {
2
  'use strict';
3
 
4
- var frame;
 
5
 
6
- $( 'body' ).on( 'click', '.rwmb-file-input-select', function ( e ) {
7
  e.preventDefault();
8
  var $el = $( this );
9
 
@@ -30,8 +31,13 @@ jQuery( function ( $ ) {
30
  } );
31
 
32
  // Clear selected images
33
- $( 'body' ).on( 'click', '.rwmb-file-input-remove', function ( e ) {
34
  e.preventDefault();
35
  $( this ).addClass( 'hidden' ).siblings( 'input' ).val( '' );
36
  } );
 
 
 
 
 
37
  } );
1
  jQuery( function ( $ ) {
2
  'use strict';
3
 
4
+ var frame,
5
+ $doc = $( document );
6
 
7
+ $doc.on( 'click', '.rwmb-file-input-select', function ( e ) {
8
  e.preventDefault();
9
  var $el = $( this );
10
 
31
  } );
32
 
33
  // Clear selected images
34
+ $doc.on( 'click', '.rwmb-file-input-remove', function ( e ) {
35
  e.preventDefault();
36
  $( this ).addClass( 'hidden' ).siblings( 'input' ).val( '' );
37
  } );
38
+
39
+ // Hide the Remove button when cloning
40
+ $doc.on( 'clone', '.rwmb-file_input', function () {
41
+ $( this ).siblings( '.rwmb-file-input-remove' ).addClass( 'hidden' );
42
+ } );
43
  } );
inc/libraries/meta-box/js/file-upload.js CHANGED
@@ -49,7 +49,9 @@ jQuery( function ( $ ) {
49
  extensions = this.getExtensions().join( ',' ),
50
  max_file_size;
51
  this.plupload = $.extend( true, {
52
- multipart_params: {},
 
 
53
  multipart: true,
54
  urlstream_upload: true,
55
  drop_element: this.dropzone,
@@ -72,14 +74,6 @@ jQuery( function ( $ ) {
72
  this.plupload.required_features.send_binary_string = true;
73
  }
74
 
75
- if ( $('#post_ID').length && $('#post_ID').val() ) {
76
- if ( -1 === this.plupload.url.indexOf('?') ) {
77
- this.plupload.url += "?post_id=" + $('#post_ID').val();
78
- } else {
79
- this.plupload.url += "&post_id=" + $('#post_ID').val();
80
- }
81
- }
82
-
83
  // Initialize the plupload instance.
84
  this.uploader = new plupload.Uploader( this.plupload );
85
  this.uploader.init();
@@ -185,10 +179,12 @@ jQuery( function ( $ ) {
185
  * @return void
186
  */
187
  function init() {
188
- new FileUploadField( {input: this, el: $( this ).siblings( 'div.rwmb-media-view' )} );
 
 
 
189
  }
190
 
191
- $( ':input.rwmb-file_upload' ).each( init );
192
- $( '.rwmb-input' )
193
- .on( 'clone', ':input.rwmb-file_upload', init )
194
  } );
49
  extensions = this.getExtensions().join( ',' ),
50
  max_file_size;
51
  this.plupload = $.extend( true, {
52
+ multipart_params: {
53
+ post_id : $( '#post_ID' ).val()
54
+ },
55
  multipart: true,
56
  urlstream_upload: true,
57
  drop_element: this.dropzone,
74
  this.plupload.required_features.send_binary_string = true;
75
  }
76
 
 
 
 
 
 
 
 
 
77
  // Initialize the plupload instance.
78
  this.uploader = new plupload.Uploader( this.plupload );
79
  this.uploader.init();
179
  * @return void
180
  */
181
  function init() {
182
+ var view = new FileUploadField( { input: this } );
183
+ //Remove old then add new
184
+ $( this ).siblings( 'div.rwmb-media-view' ).remove();
185
+ $( this ).after( view.el );
186
  }
187
 
188
+ $( '.rwmb-file_upload' ).each( init );
189
+ $( document ).on( 'clone', '.rwmb-file_upload', init )
 
190
  } );
inc/libraries/meta-box/js/file.js CHANGED
@@ -14,9 +14,9 @@
14
  event.preventDefault();
15
 
16
  var $this = $( this ),
17
- $clone = $this.siblings( '.rwmb-file-input:last' ).clone();
18
 
19
- $clone.insertBefore( this );
20
  file.updateVisibility.call( $this.closest( '.rwmb-input' ).find( '.rwmb-uploaded' )[0] );
21
  };
22
 
@@ -31,20 +31,21 @@
31
 
32
  var $this = $( this ),
33
  $item = $this.closest( 'li' ),
34
- $uploaded = $this.closest( '.rwmb-uploaded' ),
35
- data = {
36
- action: 'rwmb_delete_file',
37
- _ajax_nonce: $uploaded.data( 'delete_nonce' ),
38
- post_id: $( '#post_ID' ).val(),
39
- field_id: $uploaded.data( 'field_id' ),
40
- attachment_id: $this.data( 'attachment_id' ),
41
- force_delete: $uploaded.data( 'force_delete' )
42
- };
43
 
44
  $item.remove();
45
  file.updateVisibility.call( $uploaded );
46
 
47
- $.post( ajaxurl, data, function ( response ) {
 
 
 
 
 
 
 
 
 
48
  if ( ! response.success ) {
49
  alert( response.data );
50
  }
@@ -56,19 +57,11 @@
56
  * Expects `this` to equal the uploaded file list.
57
  */
58
  file.sort = function () {
59
- var $this = $( this ),
60
- data = {
61
- action: 'rwmb_reorder_files',
62
- _ajax_nonce: $this.data( 'reorder_nonce' ),
63
- post_id: $( '#post_ID' ).val(),
64
- field_id: $this.data( 'field_id' )
65
- };
66
- $this.sortable( {
67
- placeholder: 'ui-state-highlight',
68
  items: 'li',
69
- update: function () {
70
- data.order = $this.sortable( 'serialize' );
71
- $.post( ajaxurl, data );
72
  }
73
  } );
74
  };
@@ -80,24 +73,33 @@
80
  file.updateVisibility = function () {
81
  var $uploaded = $( this ),
82
  max = parseInt( $uploaded.data( 'max_file_uploads' ), 10 ),
83
- $uploader = $uploaded.siblings( '.rwmb-new-files' ),
84
- $addMore = $uploader.find( '.rwmb-add-file' ),
85
  numFiles = $uploaded.children().length,
86
- numInputs = $uploader.find( '.rwmb-file-input' ).length;
87
 
88
  $uploaded.toggle( 0 < numFiles );
89
  if ( 0 === max ) {
90
  return;
91
  }
92
- $uploader.toggle( numFiles < max );
93
- $addMore.toggle( numFiles + numInputs < max );
 
 
 
 
 
 
 
 
94
  };
95
 
96
  // Initialize when document ready.
97
  $( function ( $ ) {
98
  $( document )
99
- .on( 'click', '.rwmb-add-file', file.addHandler )
100
- .on( 'click', '.rwmb-delete-file', file.deleteHandler );
 
101
 
102
  var $uploaded = $( '.rwmb-uploaded' );
103
  $uploaded.each( file.sort );
14
  event.preventDefault();
15
 
16
  var $this = $( this ),
17
+ $clone = $this.prev().clone();
18
 
19
+ $clone.insertBefore( this ).val( '' );
20
  file.updateVisibility.call( $this.closest( '.rwmb-input' ).find( '.rwmb-uploaded' )[0] );
21
  };
22
 
31
 
32
  var $this = $( this ),
33
  $item = $this.closest( 'li' ),
34
+ $uploaded = $this.closest( '.rwmb-uploaded' );
 
 
 
 
 
 
 
 
35
 
36
  $item.remove();
37
  file.updateVisibility.call( $uploaded );
38
 
39
+ if ( 1 > $uploaded.data( 'force_delete' ) ) {
40
+ return;
41
+ }
42
+
43
+ $.post( ajaxurl, {
44
+ action: 'rwmb_delete_file',
45
+ _ajax_nonce: $uploaded.data( 'delete_nonce' ),
46
+ field_id: $uploaded.data( 'field_id' ),
47
+ attachment_id: $this.data( 'attachment_id' )
48
+ }, function ( response ) {
49
  if ( ! response.success ) {
50
  alert( response.data );
51
  }
57
  * Expects `this` to equal the uploaded file list.
58
  */
59
  file.sort = function () {
60
+ $( this ).sortable( {
 
 
 
 
 
 
 
 
61
  items: 'li',
62
+ start: function ( e, ui ) {
63
+ ui.placeholder.height( ui.helper.outerHeight() );
64
+ ui.placeholder.width( ui.helper.outerWidth() );
65
  }
66
  } );
67
  };
73
  file.updateVisibility = function () {
74
  var $uploaded = $( this ),
75
  max = parseInt( $uploaded.data( 'max_file_uploads' ), 10 ),
76
+ $new = $uploaded.siblings( '.rwmb-file-new' ),
77
+ $add = $new.find( '.rwmb-file-add' ),
78
  numFiles = $uploaded.children().length,
79
+ numInputs = $new.find( '.rwmb-file-input' ).length;
80
 
81
  $uploaded.toggle( 0 < numFiles );
82
  if ( 0 === max ) {
83
  return;
84
  }
85
+ $new.toggle( numFiles < max );
86
+ $add.toggle( numFiles + numInputs < max );
87
+ };
88
+
89
+ // Reset field when cloning.
90
+ file.resetClone = function() {
91
+ var $this = $( this ),
92
+ $clone = $this.closest( '.rwmb-clone' );
93
+ $clone.find( '.rwmb-uploaded' ).remove();
94
+ $clone.find( '.rwmb-file-input' ).not( ':first' ).remove();
95
  };
96
 
97
  // Initialize when document ready.
98
  $( function ( $ ) {
99
  $( document )
100
+ .on( 'click', '.rwmb-file-add', file.addHandler )
101
+ .on( 'click', '.rwmb-file-delete', file.deleteHandler )
102
+ .on( 'clone', '.rwmb-file-input', file.resetClone );
103
 
104
  var $uploaded = $( '.rwmb-uploaded' );
105
  $uploaded.each( file.sort );
inc/libraries/meta-box/js/image-advanced.js CHANGED
@@ -14,7 +14,7 @@ jQuery( function ( $ ) {
14
  this.list = new MediaList( {
15
  controller: this.controller,
16
  itemView: MediaItem.extend( {
17
- className: 'rwmb-image-item',
18
  template: wp.template( 'rwmb-image-item' ),
19
  initialize: function( models, options ) {
20
  MediaItem.prototype.initialize.call( this, models, options );
@@ -29,9 +29,19 @@ jQuery( function ( $ ) {
29
  * Initialize image fields
30
  */
31
  function initImageField() {
32
- new ImageField( {input: this, el: $( this ).siblings( 'div.rwmb-media-view' )} );
 
33
  }
34
 
35
- $( 'input.rwmb-image_advanced' ).each( initImageField );
36
- $( document ).on( 'clone', 'input.rwmb-image_advanced', initImageField )
 
 
 
 
 
 
 
 
 
37
  } );
14
  this.list = new MediaList( {
15
  controller: this.controller,
16
  itemView: MediaItem.extend( {
17
+ className: 'rwmb-image-item attachment',
18
  template: wp.template( 'rwmb-image-item' ),
19
  initialize: function( models, options ) {
20
  MediaItem.prototype.initialize.call( this, models, options );
29
  * Initialize image fields
30
  */
31
  function initImageField() {
32
+ var view = new ImageField( { input: this } );
33
+ $( this ).after( view.el );
34
  }
35
 
36
+ /**
37
+ * Remove views for uploaded images.
38
+ */
39
+ function removeView() {
40
+ $( this ).siblings( '.rwmb-media-view' ).remove();
41
+ }
42
+
43
+ $( '.rwmb-image_advanced' ).each( initImageField );
44
+ $( document )
45
+ .on( 'clone', '.rwmb-image_advanced', removeView )
46
+ .on( 'after_clone', '.rwmb-image_advanced', initImageField );
47
  } );
inc/libraries/meta-box/js/image-upload.js CHANGED
@@ -19,10 +19,13 @@ jQuery( function ( $ ) {
19
  * @return void
20
  */
21
  function init() {
22
- new ImageUploadField( {input: this, el: $( this ).siblings( 'div.rwmb-media-view' )} );
 
 
 
23
  }
24
 
25
- $( ':input.rwmb-image_upload, :input.rwmb-plupload_image' ).each( init );
26
- $( '.rwmb-input' )
27
- .on( 'clone', ':input.rwmb-image_upload, :input.rwmb-plupload_image', init )
28
  } );
19
  * @return void
20
  */
21
  function init() {
22
+ var view = new ImageUploadField( { input: this } );
23
+ //Remove old then add new
24
+ $( this ).siblings( 'div.rwmb-media-view' ).remove();
25
+ $( this ).after( view.el );
26
  }
27
 
28
+ $( '.rwmb-image_upload, .rwmb-plupload_image' ).each( init );
29
+ $( document )
30
+ .on( 'clone', '.rwmb-image_upload, .rwmb-plupload_image', init )
31
  } );
inc/libraries/meta-box/js/input-list.js CHANGED
@@ -20,10 +20,10 @@ jQuery( function ( $ ) {
20
 
21
  $( '.rwmb-input-list-select-all-none' ).toggle(
22
  function () {
23
- $('input.rwmb-checkbox_list[name="' + $(this).data('name') + '[]"]').prop('checked', true);
24
  },
25
  function () {
26
- $('input.rwmb-checkbox_list[name="' + $(this).data('name') + '[]"]').prop('checked', false);
27
  }
28
  );
29
  } );
20
 
21
  $( '.rwmb-input-list-select-all-none' ).toggle(
22
  function () {
23
+ $('input[name="' + $(this).data('name') + '[]"]').prop('checked', true);
24
  },
25
  function () {
26
+ $('input[name="' + $(this).data('name') + '[]"]').prop('checked', false);
27
  }
28
  );
29
  } );
inc/libraries/meta-box/js/jquery-validation/additional-methods.min.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! jQuery Validation Plugin - v1.15.0 - 2/24/2016
2
- * http://jqueryvalidation.org/
3
- * Copyright (c) 2016 Jörn Zaefferer; Licensed MIT */
4
- !function(a){"function"==typeof define&&define.amd?define(["jquery","./jquery.validate.min"],a): "object" == typeof module && module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){!function(){function b(a){return a.replace(/<.[^<>]*?>/g," ").replace(/&nbsp;|&#160;/gi," ").replace(/[.(),;:!?%#$'\"_+=\/\-“”’]*/g,"")}a.validator.addMethod("maxWords",function(a,c,d){return this.optional(c) || b(a).match(/\b\w+\b/g).length <= d},a.validator.format("Please enter {0} words or less.")),a.validator.addMethod("minWords",function(a,c,d){return this.optional(c) || b(a).match(/\b\w+\b/g).length >= d},a.validator.format("Please enter at least {0} words.")),a.validator.addMethod("rangeWords",function(a,c,d){var e=b(a),f=/\b\w+\b/g;return this.optional(c)||e.match(f).length>=d[0]&&e.match(f).length<=d[1]},a.validator.format("Please enter between {0} and {1} words."))}(),a.validator.addMethod("accept",function(b,c,d){var e,f,g,h="string"==typeof d?d.replace(/\s/g,""):"image/*",i=this.optional(c);if(i)return i;if("file"===a(c).attr("type")&&(h=h.replace(/[\-\[\]\/\{\}\(\)\+\?\.\\\^\$\|]/g,"\\$&").replace(/,/g,"|").replace("/*","/.*"),c.files&&c.files.length))for(g=new RegExp(".?("+h+")$","i"),e=0;e<c.files.length;e++)if(f=c.files[e],!f.type.match(g))return!1;return!0},a.validator.format("Please enter a value with a valid mimetype.")),a.validator.addMethod("alphanumeric",function(a,b){return this.optional(b)||/^\w+$/i.test(a)},"Letters, numbers, and underscores only please"),a.validator.addMethod("bankaccountNL",function(a,b){if(this.optional(b))return!0;if(!/^[0-9]{9}|([0-9]{2} ){3}[0-9]{3}$/.test(a))return!1;var c,d,e,f=a.replace(/ /g,""),g=0,h=f.length;for(c=0;h>c;c++)d=h-c,e=f.substring(c,c+1),g+=d*e;return g%11===0},"Please specify a valid bank account number"),a.validator.addMethod("bankorgiroaccountNL",function(b,c){return this.optional(c)||a.validator.methods.bankaccountNL.call(this,b,c)||a.validator.methods.giroaccountNL.call(this,b,c)},"Please specify a valid bank or giro account number"),a.validator.addMethod("bic",function(a,b){return this.optional(b)||/^([A-Z]{6}[A-Z2-9][A-NP-Z1-9])(X{3}|[A-WY-Z0-9][A-Z0-9]{2})?$/.test(a.toUpperCase())},"Please specify a valid BIC code"),a.validator.addMethod("cifES",function(a){"use strict";var b,c,d,e,f,g,h=[];if(a=a.toUpperCase(),!a.match("((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)"))return!1;for(d=0;9>d;d++)h[d]=parseInt(a.charAt(d),10);for(c=h[2]+h[4]+h[6],e=1;8>e;e+=2)f=(2*h[e]).toString(),g=f.charAt(1),c+=parseInt(f.charAt(0),10)+(""===g?0:parseInt(g,10));return/^[ABCDEFGHJNPQRSUVW]{1}/.test(a)?(c+="",b=10-parseInt(c.charAt(c.length-1),10),a+=b,h[8].toString()===String.fromCharCode(64+b)||h[8].toString()===a.charAt(a.length-1)):!1},"Please specify a valid CIF number."),a.validator.addMethod("cpfBR",function(a){if(a=a.replace(/([~!@#$%^&*()_+=`{}\[\]\-|\\:;'<>,.\/? ])+/g,""),11!==a.length)return!1;var b,c,d,e,f=0;if(b=parseInt(a.substring(9,10),10),c=parseInt(a.substring(10,11),10),d=function(a,b){var c=10*a%11;return 10!==c&&11!==c||(c=0),c===b},""===a||"00000000000"===a||"11111111111"===a||"22222222222"===a||"33333333333"===a||"44444444444"===a||"55555555555"===a||"66666666666"===a||"77777777777"===a||"88888888888"===a||"99999999999"===a)return!1;for(e=1;9>=e;e++)f+=parseInt(a.substring(e-1,e),10)*(11-e);if(d(f,b)){for(f=0,e=1;10>=e;e++)f+=parseInt(a.substring(e-1,e),10)*(12-e);return d(f,c)}return!1},"Please specify a valid CPF number"),a.validator.addMethod("creditcard",function(a,b){if(this.optional(b))return"dependency-mismatch";if(/[^0-9 \-]+/.test(a))return!1;var c,d,e=0,f=0,g=!1;if(a=a.replace(/\D/g,""),a.length<13||a.length>19)return!1;for(c=a.length-1;c>=0;c--)d=a.charAt(c),f=parseInt(d,10),g&&(f*=2)>9&&(f-=9),e+=f,g=!g;return e%10===0},"Please enter a valid credit card number."),a.validator.addMethod("creditcardtypes",function(a,b,c){if(/[^0-9\-]+/.test(a))return!1;a=a.replace(/\D/g,"");var d=0;return c.mastercard&&(d|=1),c.visa&&(d|=2),c.amex&&(d|=4),c.dinersclub&&(d|=8),c.enroute&&(d|=16),c.discover&&(d|=32),c.jcb&&(d|=64),c.unknown&&(d|=128),c.all&&(d=255),1&d&&/^(5[12345])/.test(a)?16===a.length:2&d&&/^(4)/.test(a)?16===a.length:4&d&&/^(3[47])/.test(a)?15===a.length:8&d&&/^(3(0[012345]|[68]))/.test(a)?14===a.length:16&d&&/^(2(014|149))/.test(a)?15===a.length:32&d&&/^(6011)/.test(a)?16===a.length:64&d&&/^(3)/.test(a)?16===a.length:64&d&&/^(2131|1800)/.test(a)?15===a.length:!!(128&d)},"Please enter a valid credit card number."),a.validator.addMethod("currency",function(a,b,c){var d,e="string"==typeof c,f=e?c:c[0],g=e?!0:c[1];return f=f.replace(/,/g,""),f=g?f+"]":f+"]?",d="^["+f+"([1-9]{1}[0-9]{0,2}(\\,[0-9]{3})*(\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\.[0-9]{0,2})?|0(\\.[0-9]{0,2})?|(\\.[0-9]{1,2})?)$",d=new RegExp(d),this.optional(b)||d.test(a)},"Please specify a valid currency"),a.validator.addMethod("dateFA",function(a,b){return this.optional(b)||/^[1-4]\d{3}\/((0?[1-6]\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\/(30|([1-2][0-9])|(0?[1-9]))))$/.test(a)},a.validator.messages.date),a.validator.addMethod("dateITA",function(a,b){var c,d,e,f,g,h=!1,i=/^\d{1,2}\/\d{1,2}\/\d{4}$/;return i.test(a)?(c=a.split("/"),d=parseInt(c[0],10),e=parseInt(c[1],10),f=parseInt(c[2],10),g=new Date(Date.UTC(f,e-1,d,12,0,0,0)),h=g.getUTCFullYear()===f&&g.getUTCMonth()===e-1&&g.getUTCDate()===d):h=!1,this.optional(b)||h},a.validator.messages.date),a.validator.addMethod("dateNL",function(a,b){return this.optional(b)||/^(0?[1-9]|[12]\d|3[01])[\.\/\-](0?[1-9]|1[012])[\.\/\-]([12]\d)?(\d\d)$/.test(a)},a.validator.messages.date),a.validator.addMethod("extension",function(a,b,c){return c="string"==typeof c?c.replace(/,/g,"|"):"png|jpe?g|gif",this.optional(b)||a.match(new RegExp("\\.("+c+")$","i"))},a.validator.format("Please enter a value with a valid extension.")),a.validator.addMethod("giroaccountNL",function(a,b){return this.optional(b)||/^[0-9]{1,7}$/.test(a)},"Please specify a valid giro account number"),a.validator.addMethod("iban",function(a,b){if(this.optional(b))return!0;var c,d,e,f,g,h,i,j,k,l=a.replace(/ /g,"").toUpperCase(),m="",n=!0,o="",p="";if(c=l.substring(0,2),h={AL:"\\d{8}[\\dA-Z]{16}",AD:"\\d{8}[\\dA-Z]{12}",AT:"\\d{16}",AZ:"[\\dA-Z]{4}\\d{20}",BE:"\\d{12}",BH:"[A-Z]{4}[\\dA-Z]{14}",BA:"\\d{16}",BR:"\\d{23}[A-Z][\\dA-Z]",BG:"[A-Z]{4}\\d{6}[\\dA-Z]{8}",CR:"\\d{17}",HR:"\\d{17}",CY:"\\d{8}[\\dA-Z]{16}",CZ:"\\d{20}",DK:"\\d{14}",DO:"[A-Z]{4}\\d{20}",EE:"\\d{16}",FO:"\\d{14}",FI:"\\d{14}",FR:"\\d{10}[\\dA-Z]{11}\\d{2}",GE:"[\\dA-Z]{2}\\d{16}",DE:"\\d{18}",GI:"[A-Z]{4}[\\dA-Z]{15}",GR:"\\d{7}[\\dA-Z]{16}",GL:"\\d{14}",GT:"[\\dA-Z]{4}[\\dA-Z]{20}",HU:"\\d{24}",IS:"\\d{22}",IE:"[\\dA-Z]{4}\\d{14}",IL:"\\d{19}",IT:"[A-Z]\\d{10}[\\dA-Z]{12}",KZ:"\\d{3}[\\dA-Z]{13}",KW:"[A-Z]{4}[\\dA-Z]{22}",LV:"[A-Z]{4}[\\dA-Z]{13}",LB:"\\d{4}[\\dA-Z]{20}",LI:"\\d{5}[\\dA-Z]{12}",LT:"\\d{16}",LU:"\\d{3}[\\dA-Z]{13}",MK:"\\d{3}[\\dA-Z]{10}\\d{2}",MT:"[A-Z]{4}\\d{5}[\\dA-Z]{18}",MR:"\\d{23}",MU:"[A-Z]{4}\\d{19}[A-Z]{3}",MC:"\\d{10}[\\dA-Z]{11}\\d{2}",MD:"[\\dA-Z]{2}\\d{18}",ME:"\\d{18}",NL:"[A-Z]{4}\\d{10}",NO:"\\d{11}",PK:"[\\dA-Z]{4}\\d{16}",PS:"[\\dA-Z]{4}\\d{21}",PL:"\\d{24}",PT:"\\d{21}",RO:"[A-Z]{4}[\\dA-Z]{16}",SM:"[A-Z]\\d{10}[\\dA-Z]{12}",SA:"\\d{2}[\\dA-Z]{18}",RS:"\\d{18}",SK:"\\d{20}",SI:"\\d{15}",ES:"\\d{20}",SE:"\\d{20}",CH:"\\d{5}[\\dA-Z]{12}",TN:"\\d{20}",TR:"\\d{5}[\\dA-Z]{17}",AE:"\\d{3}\\d{16}",GB:"[A-Z]{4}\\d{14}",VG:"[\\dA-Z]{4}\\d{16}"},g=h[c],"undefined"!=typeof g&&(i=new RegExp("^[A-Z]{2}\\d{2}"+g+"$",""),!i.test(l)))return!1;for(d=l.substring(4,l.length)+l.substring(0,4),j=0;j<d.length;j++)e=d.charAt(j),"0"!==e&&(n=!1),n||(m+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(e));for(k=0;k<m.length;k++)f=m.charAt(k),p=""+o+f,o=p%97;return 1===o},"Please specify a valid IBAN"),a.validator.addMethod("integer",function(a,b){return this.optional(b)||/^-?\d+$/.test(a)},"A positive or negative non-decimal number please"),a.validator.addMethod("ipv4",function(a,b){return this.optional(b)||/^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$/i.test(a)},"Please enter a valid IP v4 address."),a.validator.addMethod("ipv6",function(a,b){return this.optional(b)||/^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(a)},"Please enter a valid IP v6 address."),a.validator.addMethod("lettersonly",function(a,b){return this.optional(b)||/^[a-z]+$/i.test(a)},"Letters only please"),a.validator.addMethod("letterswithbasicpunc",function(a,b){return this.optional(b)||/^[a-z\-.,()'"\s]+$/i.test(a)},"Letters or punctuation only please"),a.validator.addMethod("mobileNL",function(a,b){return this.optional(b)||/^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)6((\s|\s?\-\s?)?[0-9]){8}$/.test(a)},"Please specify a valid mobile number"),a.validator.addMethod("mobileUK",function(a,b){return a=a.replace(/\(|\)|\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?|0)7(?:[1345789]\d{2}|624)\s?\d{3}\s?\d{3})$/)},"Please specify a valid mobile number"),a.validator.addMethod("nieES",function(a){"use strict";return a=a.toUpperCase(),a.match("((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)")?/^[T]{1}/.test(a)?a[8]===/^[T]{1}[A-Z0-9]{8}$/.test(a):/^[XYZ]{1}/.test(a)?a[8]==="TRWAGMYFPDXBNJZSQVHLCKE".charAt(a.replace("X","0").replace("Y","1").replace("Z","2").substring(0,8)%23):!1:!1},"Please specify a valid NIE number."),a.validator.addMethod("nifES",function(a){"use strict";return a=a.toUpperCase(),a.match("((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)")?/^[0-9]{8}[A-Z]{1}$/.test(a)?"TRWAGMYFPDXBNJZSQVHLCKE".charAt(a.substring(8,0)%23)===a.charAt(8):/^[KLM]{1}/.test(a)?a[8]===String.fromCharCode(64):!1:!1},"Please specify a valid NIF number."),jQuery.validator.addMethod("notEqualTo",function(b,c,d){return this.optional(c)||!a.validator.methods.equalTo.call(this,b,c,d)},"Please enter a different value, values must not be the same."),a.validator.addMethod("nowhitespace",function(a,b){return this.optional(b)||/^\S+$/i.test(a)},"No white space please"),a.validator.addMethod("pattern",function(a,b,c){return this.optional(b)?!0:("string"==typeof c&&(c=new RegExp("^(?:"+c+")$")),c.test(a))},"Invalid format."),a.validator.addMethod("phoneNL",function(a,b){return this.optional(b)||/^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)[1-9]((\s|\s?\-\s?)?[0-9]){8}$/.test(a)},"Please specify a valid phone number."),a.validator.addMethod("phoneUK",function(a,b){return a=a.replace(/\(|\)|\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?)|(?:\(?0))(?:\d{2}\)?\s?\d{4}\s?\d{4}|\d{3}\)?\s?\d{3}\s?\d{3,4}|\d{4}\)?\s?(?:\d{5}|\d{3}\s?\d{3})|\d{5}\)?\s?\d{4,5})$/)},"Please specify a valid phone number"),a.validator.addMethod("phoneUS",function(a,b){return a=a.replace(/\s+/g,""),this.optional(b)||a.length>9&&a.match(/^(\+?1-?)?(\([2-9]([02-9]\d|1[02-9])\)|[2-9]([02-9]\d|1[02-9]))-?[2-9]([02-9]\d|1[02-9])-?\d{4}$/)},"Please specify a valid phone number"),a.validator.addMethod("phonesUK",function(a,b){return a=a.replace(/\(|\)|\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?|0)(?:1\d{8,9}|[23]\d{9}|7(?:[1345789]\d{8}|624\d{6})))$/)},"Please specify a valid uk phone number"),a.validator.addMethod("postalCodeCA",function(a,b){return this.optional(b)||/^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ] *\d[ABCEGHJKLMNPRSTVWXYZ]\d$/i.test(a)},"Please specify a valid postal code"),a.validator.addMethod("postalcodeBR",function(a,b){return this.optional(b)||/^\d{2}.\d{3}-\d{3}?$|^\d{5}-?\d{3}?$/.test(a)},"Informe um CEP válido."),a.validator.addMethod("postalcodeIT",function(a,b){return this.optional(b)||/^\d{5}$/.test(a)},"Please specify a valid postal code"),a.validator.addMethod("postalcodeNL",function(a,b){return this.optional(b)||/^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/.test(a)},"Please specify a valid postal code"),a.validator.addMethod("postcodeUK",function(a,b){return this.optional(b)||/^((([A-PR-UWYZ][0-9])|([A-PR-UWYZ][0-9][0-9])|([A-PR-UWYZ][A-HK-Y][0-9])|([A-PR-UWYZ][A-HK-Y][0-9][0-9])|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))\s?([0-9][ABD-HJLNP-UW-Z]{2})|(GIR)\s?(0AA))$/i.test(a)},"Please specify a valid UK postcode"),a.validator.addMethod("require_from_group",function(b,c,d){var e=a(d[1],c.form),f=e.eq(0),g=f.data("valid_req_grp")?f.data("valid_req_grp"):a.extend({},this),h=e.filter(function(){return g.elementValue(this)}).length>=d[0];return f.data("valid_req_grp",g),a(c).data("being_validated")||(e.data("being_validated",!0),e.each(function(){g.element(this)}),e.data("being_validated",!1)),h},a.validator.format("Please fill at least {0} of these fields.")),a.validator.addMethod("skip_or_fill_minimum",function(b,c,d){var e=a(d[1],c.form),f=e.eq(0),g=f.data("valid_skip")?f.data("valid_skip"):a.extend({},this),h=e.filter(function(){return g.elementValue(this)}).length,i=0===h||h>=d[0];return f.data("valid_skip",g),a(c).data("being_validated")||(e.data("being_validated",!0),e.each(function(){g.element(this)}),e.data("being_validated",!1)),i},a.validator.format("Please either skip these fields or fill at least {0} of them.")),a.validator.addMethod("stateUS",function(a,b,c){var d,e="undefined"==typeof c,f=e||"undefined"==typeof c.caseSensitive?!1:c.caseSensitive,g=e||"undefined"==typeof c.includeTerritories?!1:c.includeTerritories,h=e||"undefined"==typeof c.includeMilitary?!1:c.includeMilitary;return d=g||h?g&&h?"^(A[AEKLPRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$":g?"^(A[KLRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$":"^(A[AEKLPRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$":"^(A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$",d=f?new RegExp(d):new RegExp(d,"i"),this.optional(b)||d.test(a)},"Please specify a valid state"),a.validator.addMethod("strippedminlength",function(b,c,d){return a(b).text().length>=d},a.validator.format("Please enter at least {0} characters")),a.validator.addMethod("time",function(a,b){return this.optional(b)||/^([01]\d|2[0-3]|[0-9])(:[0-5]\d){1,2}$/.test(a)},"Please enter a valid time, between 00:00 and 23:59"),a.validator.addMethod("time12h",function(a,b){return this.optional(b)||/^((0?[1-9]|1[012])(:[0-5]\d){1,2}(\ ?[AP]M))$/i.test(a)},"Please enter a valid time in 12-hour am/pm format"),a.validator.addMethod("url2",function(a,b){return this.optional(b)||/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([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])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(a)},a.validator.messages.url),a.validator.addMethod("vinUS",function(a){if(17!==a.length)return!1;var b,c,d,e,f,g,h=["A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y","Z"],i=[1,2,3,4,5,6,7,8,1,2,3,4,5,7,9,2,3,4,5,6,7,8,9],j=[8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2],k=0;for(b=0;17>b;b++){if(e=j[b],d=a.slice(b,b+1),8===b&&(g=d),isNaN(d)){for(c=0;c<h.length;c++)if(d.toUpperCase()===h[c]){d=i[c],d*=e,isNaN(g)&&8===c&&(g=h[c]);break}}else d*=e;k+=d}return f=k%11,10===f&&(f="X"),f===g},"The specified vehicle identification number (VIN) is invalid."),a.validator.addMethod("zipcodeUS",function(a,b){return this.optional(b)||/^\d{5}(-\d{4})?$/.test(a)},"The specified US ZIP Code is invalid"),a.validator.addMethod("ziprange",function(a,b){return this.optional(b)||/^90[2-5]\d\{2\}-\d{4}$/.test(a)},"Your ZIP-code must be in the range 902xx-xxxx to 905xx-xxxx")});
1
+ /*! jQuery Validation Plugin - v1.17.0 - 7/29/2017
2
+ * https://jqueryvalidation.org/
3
+ * Copyright (c) 2017 Jörn Zaefferer; Licensed MIT */
4
+ !function(a){"function"==typeof define&&define.amd?define(["jquery","./jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return function(){function b(a){return a.replace(/<.[^<>]*?>/g," ").replace(/&nbsp;|&#160;/gi," ").replace(/[.(),;:!?%#$'\"_+=\/\-“”’]*/g,"")}a.validator.addMethod("maxWords",function(a,c,d){return this.optional(c)||b(a).match(/\b\w+\b/g).length<=d},a.validator.format("Please enter {0} words or less.")),a.validator.addMethod("minWords",function(a,c,d){return this.optional(c)||b(a).match(/\b\w+\b/g).length>=d},a.validator.format("Please enter at least {0} words.")),a.validator.addMethod("rangeWords",function(a,c,d){var e=b(a),f=/\b\w+\b/g;return this.optional(c)||e.match(f).length>=d[0]&&e.match(f).length<=d[1]},a.validator.format("Please enter between {0} and {1} words."))}(),a.validator.addMethod("accept",function(b,c,d){var e,f,g,h="string"==typeof d?d.replace(/\s/g,""):"image/*",i=this.optional(c);if(i)return i;if("file"===a(c).attr("type")&&(h=h.replace(/[\-\[\]\/\{\}\(\)\+\?\.\\\^\$\|]/g,"\\$&").replace(/,/g,"|").replace(/\/\*/g,"/.*"),c.files&&c.files.length))for(g=new RegExp(".?("+h+")$","i"),e=0;e<c.files.length;e++)if(f=c.files[e],!f.type.match(g))return!1;return!0},a.validator.format("Please enter a value with a valid mimetype.")),a.validator.addMethod("alphanumeric",function(a,b){return this.optional(b)||/^\w+$/i.test(a)},"Letters, numbers, and underscores only please"),a.validator.addMethod("bankaccountNL",function(a,b){if(this.optional(b))return!0;if(!/^[0-9]{9}|([0-9]{2} ){3}[0-9]{3}$/.test(a))return!1;var c,d,e,f=a.replace(/ /g,""),g=0,h=f.length;for(c=0;c<h;c++)d=h-c,e=f.substring(c,c+1),g+=d*e;return g%11===0},"Please specify a valid bank account number"),a.validator.addMethod("bankorgiroaccountNL",function(b,c){return this.optional(c)||a.validator.methods.bankaccountNL.call(this,b,c)||a.validator.methods.giroaccountNL.call(this,b,c)},"Please specify a valid bank or giro account number"),a.validator.addMethod("bic",function(a,b){return this.optional(b)||/^([A-Z]{6}[A-Z2-9][A-NP-Z1-9])(X{3}|[A-WY-Z0-9][A-Z0-9]{2})?$/.test(a.toUpperCase())},"Please specify a valid BIC code"),a.validator.addMethod("cifES",function(a,b){"use strict";function c(a){return a%2===0}if(this.optional(b))return!0;var d,e,f,g,h=new RegExp(/^([ABCDEFGHJKLMNPQRSUVW])(\d{7})([0-9A-J])$/gi),i=a.substring(0,1),j=a.substring(1,8),k=a.substring(8,9),l=0,m=0,n=0;if(9!==a.length||!h.test(a))return!1;for(d=0;d<j.length;d++)e=parseInt(j[d],10),c(d)?(e*=2,n+=e<10?e:e-9):m+=e;return l=m+n,f=(10-l.toString().substr(-1)).toString(),f=parseInt(f,10)>9?"0":f,g="JABCDEFGHI".substr(f,1).toString(),i.match(/[ABEH]/)?k===f:i.match(/[KPQS]/)?k===g:k===f||k===g},"Please specify a valid CIF number."),a.validator.addMethod("cpfBR",function(a){if(a=a.replace(/([~!@#$%^&*()_+=`{}\[\]\-|\\:;'<>,.\/? ])+/g,""),11!==a.length)return!1;var b,c,d,e,f=0;if(b=parseInt(a.substring(9,10),10),c=parseInt(a.substring(10,11),10),d=function(a,b){var c=10*a%11;return 10!==c&&11!==c||(c=0),c===b},""===a||"00000000000"===a||"11111111111"===a||"22222222222"===a||"33333333333"===a||"44444444444"===a||"55555555555"===a||"66666666666"===a||"77777777777"===a||"88888888888"===a||"99999999999"===a)return!1;for(e=1;e<=9;e++)f+=parseInt(a.substring(e-1,e),10)*(11-e);if(d(f,b)){for(f=0,e=1;e<=10;e++)f+=parseInt(a.substring(e-1,e),10)*(12-e);return d(f,c)}return!1},"Please specify a valid CPF number"),a.validator.addMethod("creditcard",function(a,b){if(this.optional(b))return"dependency-mismatch";if(/[^0-9 \-]+/.test(a))return!1;var c,d,e=0,f=0,g=!1;if(a=a.replace(/\D/g,""),a.length<13||a.length>19)return!1;for(c=a.length-1;c>=0;c--)d=a.charAt(c),f=parseInt(d,10),g&&(f*=2)>9&&(f-=9),e+=f,g=!g;return e%10===0},"Please enter a valid credit card number."),a.validator.addMethod("creditcardtypes",function(a,b,c){if(/[^0-9\-]+/.test(a))return!1;a=a.replace(/\D/g,"");var d=0;return c.mastercard&&(d|=1),c.visa&&(d|=2),c.amex&&(d|=4),c.dinersclub&&(d|=8),c.enroute&&(d|=16),c.discover&&(d|=32),c.jcb&&(d|=64),c.unknown&&(d|=128),c.all&&(d=255),1&d&&/^(5[12345])/.test(a)?16===a.length:2&d&&/^(4)/.test(a)?16===a.length:4&d&&/^(3[47])/.test(a)?15===a.length:8&d&&/^(3(0[012345]|[68]))/.test(a)?14===a.length:16&d&&/^(2(014|149))/.test(a)?15===a.length:32&d&&/^(6011)/.test(a)?16===a.length:64&d&&/^(3)/.test(a)?16===a.length:64&d&&/^(2131|1800)/.test(a)?15===a.length:!!(128&d)},"Please enter a valid credit card number."),a.validator.addMethod("currency",function(a,b,c){var d,e="string"==typeof c,f=e?c:c[0],g=!!e||c[1];return f=f.replace(/,/g,""),f=g?f+"]":f+"]?",d="^["+f+"([1-9]{1}[0-9]{0,2}(\\,[0-9]{3})*(\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\.[0-9]{0,2})?|0(\\.[0-9]{0,2})?|(\\.[0-9]{1,2})?)$",d=new RegExp(d),this.optional(b)||d.test(a)},"Please specify a valid currency"),a.validator.addMethod("dateFA",function(a,b){return this.optional(b)||/^[1-4]\d{3}\/((0?[1-6]\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\/(30|([1-2][0-9])|(0?[1-9]))))$/.test(a)},a.validator.messages.date),a.validator.addMethod("dateITA",function(a,b){var c,d,e,f,g,h=!1,i=/^\d{1,2}\/\d{1,2}\/\d{4}$/;return i.test(a)?(c=a.split("/"),d=parseInt(c[0],10),e=parseInt(c[1],10),f=parseInt(c[2],10),g=new Date(Date.UTC(f,e-1,d,12,0,0,0)),h=g.getUTCFullYear()===f&&g.getUTCMonth()===e-1&&g.getUTCDate()===d):h=!1,this.optional(b)||h},a.validator.messages.date),a.validator.addMethod("dateNL",function(a,b){return this.optional(b)||/^(0?[1-9]|[12]\d|3[01])[\.\/\-](0?[1-9]|1[012])[\.\/\-]([12]\d)?(\d\d)$/.test(a)},a.validator.messages.date),a.validator.addMethod("extension",function(a,b,c){return c="string"==typeof c?c.replace(/,/g,"|"):"png|jpe?g|gif",this.optional(b)||a.match(new RegExp("\\.("+c+")$","i"))},a.validator.format("Please enter a value with a valid extension.")),a.validator.addMethod("giroaccountNL",function(a,b){return this.optional(b)||/^[0-9]{1,7}$/.test(a)},"Please specify a valid giro account number"),a.validator.addMethod("iban",function(a,b){if(this.optional(b))return!0;var c,d,e,f,g,h,i,j,k,l=a.replace(/ /g,"").toUpperCase(),m="",n=!0,o="",p="",q=5;if(l.length<q)return!1;if(c=l.substring(0,2),h={AL:"\\d{8}[\\dA-Z]{16}",AD:"\\d{8}[\\dA-Z]{12}",AT:"\\d{16}",AZ:"[\\dA-Z]{4}\\d{20}",BE:"\\d{12}",BH:"[A-Z]{4}[\\dA-Z]{14}",BA:"\\d{16}",BR:"\\d{23}[A-Z][\\dA-Z]",BG:"[A-Z]{4}\\d{6}[\\dA-Z]{8}",CR:"\\d{17}",HR:"\\d{17}",CY:"\\d{8}[\\dA-Z]{16}",CZ:"\\d{20}",DK:"\\d{14}",DO:"[A-Z]{4}\\d{20}",EE:"\\d{16}",FO:"\\d{14}",FI:"\\d{14}",FR:"\\d{10}[\\dA-Z]{11}\\d{2}",GE:"[\\dA-Z]{2}\\d{16}",DE:"\\d{18}",GI:"[A-Z]{4}[\\dA-Z]{15}",GR:"\\d{7}[\\dA-Z]{16}",GL:"\\d{14}",GT:"[\\dA-Z]{4}[\\dA-Z]{20}",HU:"\\d{24}",IS:"\\d{22}",IE:"[\\dA-Z]{4}\\d{14}",IL:"\\d{19}",IT:"[A-Z]\\d{10}[\\dA-Z]{12}",KZ:"\\d{3}[\\dA-Z]{13}",KW:"[A-Z]{4}[\\dA-Z]{22}",LV:"[A-Z]{4}[\\dA-Z]{13}",LB:"\\d{4}[\\dA-Z]{20}",LI:"\\d{5}[\\dA-Z]{12}",LT:"\\d{16}",LU:"\\d{3}[\\dA-Z]{13}",MK:"\\d{3}[\\dA-Z]{10}\\d{2}",MT:"[A-Z]{4}\\d{5}[\\dA-Z]{18}",MR:"\\d{23}",MU:"[A-Z]{4}\\d{19}[A-Z]{3}",MC:"\\d{10}[\\dA-Z]{11}\\d{2}",MD:"[\\dA-Z]{2}\\d{18}",ME:"\\d{18}",NL:"[A-Z]{4}\\d{10}",NO:"\\d{11}",PK:"[\\dA-Z]{4}\\d{16}",PS:"[\\dA-Z]{4}\\d{21}",PL:"\\d{24}",PT:"\\d{21}",RO:"[A-Z]{4}[\\dA-Z]{16}",SM:"[A-Z]\\d{10}[\\dA-Z]{12}",SA:"\\d{2}[\\dA-Z]{18}",RS:"\\d{18}",SK:"\\d{20}",SI:"\\d{15}",ES:"\\d{20}",SE:"\\d{20}",CH:"\\d{5}[\\dA-Z]{12}",TN:"\\d{20}",TR:"\\d{5}[\\dA-Z]{17}",AE:"\\d{3}\\d{16}",GB:"[A-Z]{4}\\d{14}",VG:"[\\dA-Z]{4}\\d{16}"},g=h[c],"undefined"!=typeof g&&(i=new RegExp("^[A-Z]{2}\\d{2}"+g+"$",""),!i.test(l)))return!1;for(d=l.substring(4,l.length)+l.substring(0,4),j=0;j<d.length;j++)e=d.charAt(j),"0"!==e&&(n=!1),n||(m+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(e));for(k=0;k<m.length;k++)f=m.charAt(k),p=""+o+f,o=p%97;return 1===o},"Please specify a valid IBAN"),a.validator.addMethod("integer",function(a,b){return this.optional(b)||/^-?\d+$/.test(a)},"A positive or negative non-decimal number please"),a.validator.addMethod("ipv4",function(a,b){return this.optional(b)||/^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$/i.test(a)},"Please enter a valid IP v4 address."),a.validator.addMethod("ipv6",function(a,b){return this.optional(b)||/^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(a)},"Please enter a valid IP v6 address."),a.validator.addMethod("lettersonly",function(a,b){return this.optional(b)||/^[a-z]+$/i.test(a)},"Letters only please"),a.validator.addMethod("letterswithbasicpunc",function(a,b){return this.optional(b)||/^[a-z\-.,()'"\s]+$/i.test(a)},"Letters or punctuation only please"),a.validator.addMethod("mobileNL",function(a,b){return this.optional(b)||/^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)6((\s|\s?\-\s?)?[0-9]){8}$/.test(a)},"Please specify a valid mobile number"),a.validator.addMethod("mobileUK",function(a,b){return a=a.replace(/\(|\)|\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?|0)7(?:[1345789]\d{2}|624)\s?\d{3}\s?\d{3})$/)},"Please specify a valid mobile number"),a.validator.addMethod("netmask",function(a,b){return this.optional(b)||/^(254|252|248|240|224|192|128)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(254|252|248|240|224|192|128|0)/i.test(a)},"Please enter a valid netmask."),a.validator.addMethod("nieES",function(a,b){"use strict";if(this.optional(b))return!0;var c,d=new RegExp(/^[MXYZ]{1}[0-9]{7,8}[TRWAGMYFPDXBNJZSQVHLCKET]{1}$/gi),e="TRWAGMYFPDXBNJZSQVHLCKET",f=a.substr(a.length-1).toUpperCase();return a=a.toString().toUpperCase(),!(a.length>10||a.length<9||!d.test(a))&&(a=a.replace(/^[X]/,"0").replace(/^[Y]/,"1").replace(/^[Z]/,"2"),c=9===a.length?a.substr(0,8):a.substr(0,9),e.charAt(parseInt(c,10)%23)===f)},"Please specify a valid NIE number."),a.validator.addMethod("nifES",function(a,b){"use strict";return!!this.optional(b)||(a=a.toUpperCase(),!!a.match("((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)")&&(/^[0-9]{8}[A-Z]{1}$/.test(a)?"TRWAGMYFPDXBNJZSQVHLCKE".charAt(a.substring(8,0)%23)===a.charAt(8):!!/^[KLM]{1}/.test(a)&&a[8]==="TRWAGMYFPDXBNJZSQVHLCKE".charAt(a.substring(8,1)%23)))},"Please specify a valid NIF number."),a.validator.addMethod("nipPL",function(a){"use strict";if(a=a.replace(/[^0-9]/g,""),10!==a.length)return!1;for(var b=[6,5,7,2,3,4,5,6,7],c=0,d=0;d<9;d++)c+=b[d]*a[d];var e=c%11,f=10===e?0:e;return f===parseInt(a[9],10)},"Please specify a valid NIP number."),a.validator.addMethod("notEqualTo",function(b,c,d){return this.optional(c)||!a.validator.methods.equalTo.call(this,b,c,d)},"Please enter a different value, values must not be the same."),a.validator.addMethod("nowhitespace",function(a,b){return this.optional(b)||/^\S+$/i.test(a)},"No white space please"),a.validator.addMethod("pattern",function(a,b,c){return!!this.optional(b)||("string"==typeof c&&(c=new RegExp("^(?:"+c+")$")),c.test(a))},"Invalid format."),a.validator.addMethod("phoneNL",function(a,b){return this.optional(b)||/^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)[1-9]((\s|\s?\-\s?)?[0-9]){8}$/.test(a)},"Please specify a valid phone number."),a.validator.addMethod("phonesUK",function(a,b){return a=a.replace(/\(|\)|\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?|0)(?:1\d{8,9}|[23]\d{9}|7(?:[1345789]\d{8}|624\d{6})))$/)},"Please specify a valid uk phone number"),a.validator.addMethod("phoneUK",function(a,b){return a=a.replace(/\(|\)|\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?)|(?:\(?0))(?:\d{2}\)?\s?\d{4}\s?\d{4}|\d{3}\)?\s?\d{3}\s?\d{3,4}|\d{4}\)?\s?(?:\d{5}|\d{3}\s?\d{3})|\d{5}\)?\s?\d{4,5})$/)},"Please specify a valid phone number"),a.validator.addMethod("phoneUS",function(a,b){return a=a.replace(/\s+/g,""),this.optional(b)||a.length>9&&a.match(/^(\+?1-?)?(\([2-9]([02-9]\d|1[02-9])\)|[2-9]([02-9]\d|1[02-9]))-?[2-9]([02-9]\d|1[02-9])-?\d{4}$/)},"Please specify a valid phone number"),a.validator.addMethod("postalcodeBR",function(a,b){return this.optional(b)||/^\d{2}.\d{3}-\d{3}?$|^\d{5}-?\d{3}?$/.test(a)},"Informe um CEP válido."),a.validator.addMethod("postalCodeCA",function(a,b){return this.optional(b)||/^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ] *\d[ABCEGHJKLMNPRSTVWXYZ]\d$/i.test(a)},"Please specify a valid postal code"),a.validator.addMethod("postalcodeIT",function(a,b){return this.optional(b)||/^\d{5}$/.test(a)},"Please specify a valid postal code"),a.validator.addMethod("postalcodeNL",function(a,b){return this.optional(b)||/^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/.test(a)},"Please specify a valid postal code"),a.validator.addMethod("postcodeUK",function(a,b){return this.optional(b)||/^((([A-PR-UWYZ][0-9])|([A-PR-UWYZ][0-9][0-9])|([A-PR-UWYZ][A-HK-Y][0-9])|([A-PR-UWYZ][A-HK-Y][0-9][0-9])|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))\s?([0-9][ABD-HJLNP-UW-Z]{2})|(GIR)\s?(0AA))$/i.test(a)},"Please specify a valid UK postcode"),a.validator.addMethod("require_from_group",function(b,c,d){var e=a(d[1],c.form),f=e.eq(0),g=f.data("valid_req_grp")?f.data("valid_req_grp"):a.extend({},this),h=e.filter(function(){return g.elementValue(this)}).length>=d[0];return f.data("valid_req_grp",g),a(c).data("being_validated")||(e.data("being_validated",!0),e.each(function(){g.element(this)}),e.data("being_validated",!1)),h},a.validator.format("Please fill at least {0} of these fields.")),a.validator.addMethod("skip_or_fill_minimum",function(b,c,d){var e=a(d[1],c.form),f=e.eq(0),g=f.data("valid_skip")?f.data("valid_skip"):a.extend({},this),h=e.filter(function(){return g.elementValue(this)}).length,i=0===h||h>=d[0];return f.data("valid_skip",g),a(c).data("being_validated")||(e.data("being_validated",!0),e.each(function(){g.element(this)}),e.data("being_validated",!1)),i},a.validator.format("Please either skip these fields or fill at least {0} of them.")),a.validator.addMethod("stateUS",function(a,b,c){var d,e="undefined"==typeof c,f=!e&&"undefined"!=typeof c.caseSensitive&&c.caseSensitive,g=!e&&"undefined"!=typeof c.includeTerritories&&c.includeTerritories,h=!e&&"undefined"!=typeof c.includeMilitary&&c.includeMilitary;return d=g||h?g&&h?"^(A[AEKLPRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$":g?"^(A[KLRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$":"^(A[AEKLPRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$":"^(A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$",d=f?new RegExp(d):new RegExp(d,"i"),this.optional(b)||d.test(a)},"Please specify a valid state"),a.validator.addMethod("strippedminlength",function(b,c,d){return a(b).text().length>=d},a.validator.format("Please enter at least {0} characters")),a.validator.addMethod("time",function(a,b){return this.optional(b)||/^([01]\d|2[0-3]|[0-9])(:[0-5]\d){1,2}$/.test(a)},"Please enter a valid time, between 00:00 and 23:59"),a.validator.addMethod("time12h",function(a,b){return this.optional(b)||/^((0?[1-9]|1[012])(:[0-5]\d){1,2}(\ ?[AP]M))$/i.test(a)},"Please enter a valid time in 12-hour am/pm format"),a.validator.addMethod("url2",function(a,b){return this.optional(b)||/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([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])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(a)},a.validator.messages.url),a.validator.addMethod("vinUS",function(a){if(17!==a.length)return!1;var b,c,d,e,f,g,h=["A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y","Z"],i=[1,2,3,4,5,6,7,8,1,2,3,4,5,7,9,2,3,4,5,6,7,8,9],j=[8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2],k=0;for(b=0;b<17;b++){if(e=j[b],d=a.slice(b,b+1),8===b&&(g=d),isNaN(d)){for(c=0;c<h.length;c++)if(d.toUpperCase()===h[c]){d=i[c],d*=e,isNaN(g)&&8===c&&(g=h[c]);break}}else d*=e;k+=d}return f=k%11,10===f&&(f="X"),f===g},"The specified vehicle identification number (VIN) is invalid."),a.validator.addMethod("zipcodeUS",function(a,b){return this.optional(b)||/^\d{5}(-\d{4})?$/.test(a)},"The specified US ZIP Code is invalid"),a.validator.addMethod("ziprange",function(a,b){return this.optional(b)||/^90[2-5]\d\{2\}-\d{4}$/.test(a)},"Your ZIP-code must be in the range 902xx-xxxx to 905xx-xxxx"),a});
inc/libraries/meta-box/js/jquery-validation/jquery.validate.min.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! jQuery Validation Plugin - v1.15.0 - 2/24/2016
2
- * http://jqueryvalidation.org/
3
- * Copyright (c) 2016 Jörn Zaefferer; Licensed MIT */
4
- !function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){a.extend(a.fn,{validate:function(b){if(!this.length)return void(b&&b.debug&&window.console&&console.warn("Nothing selected, can't validate, returning nothing."));var c=a.data(this[0],"validator");return c?c:(this.attr("novalidate","novalidate"),c=new a.validator(b,this[0]),a.data(this[0],"validator",c),c.settings.onsubmit&&(this.on("click.validate",":submit",function(b){c.settings.submitHandler&&(c.submitButton=b.target),a(this).hasClass("cancel")&&(c.cancelSubmit=!0),void 0!==a(this).attr("formnovalidate")&&(c.cancelSubmit=!0)}),this.on("submit.validate",function(b){function d(){var d,e;return c.settings.submitHandler?(c.submitButton&&(d=a("<input type='hidden'/>").attr("name",c.submitButton.name).val(a(c.submitButton).val()).appendTo(c.currentForm)),e=c.settings.submitHandler.call(c,c.currentForm,b),c.submitButton&&d.remove(),void 0!==e?e:!1):!0}return c.settings.debug&&b.preventDefault(),c.cancelSubmit?(c.cancelSubmit=!1,d()):c.form()?c.pendingRequest?(c.formSubmitted=!0,!1):d():(c.focusInvalid(),!1)})),c)},valid:function(){var b,c,d;return a(this[0]).is("form")?b=this.validate().form():(d=[],b=!0,c=a(this[0].form).validate(),this.each(function(){b=c.element(this)&&b,b||(d=d.concat(c.errorList))}),c.errorList=d),b},rules:function(b,c){if(this.length){var d,e,f,g,h,i,j=this[0];if(b)switch(d=a.data(j.form,"validator").settings,e=d.rules,f=a.validator.staticRules(j),b){case"add":a.extend(f,a.validator.normalizeRule(c)),delete f.messages,e[j.name]=f,c.messages&&(d.messages[j.name]=a.extend(d.messages[j.name],c.messages));break;case"remove":return c?(i={},a.each(c.split(/\s/),function(b,c){i[c]=f[c],delete f[c],"required"===c&&a(j).removeAttr("aria-required")}),i):(delete e[j.name],f)}return g=a.validator.normalizeRules(a.extend({},a.validator.classRules(j),a.validator.attributeRules(j),a.validator.dataRules(j),a.validator.staticRules(j)),j),g.required&&(h=g.required,delete g.required,g=a.extend({required:h},g),a(j).attr("aria-required","true")),g.remote&&(h=g.remote,delete g.remote,g=a.extend(g,{remote:h})),g}}}),a.extend(a.expr[":"],{blank:function(b){return!a.trim(""+a(b).val())},filled:function(b){var c=a(b).val();return null!==c&&!!a.trim(""+c)},unchecked:function(b){return!a(b).prop("checked")}}),a.validator=function(b,c){this.settings=a.extend(!0,{},a.validator.defaults,b),this.currentForm=c,this.init()},a.validator.format=function(b,c){return 1===arguments.length?function(){var c=a.makeArray(arguments);return c.unshift(b),a.validator.format.apply(this,c)}:void 0===c?b:(arguments.length>2&&c.constructor!==Array&&(c=a.makeArray(arguments).slice(1)),c.constructor!==Array&&(c=[c]),a.each(c,function(a,c){b=b.replace(new RegExp("\\{"+a+"\\}","g"),function(){return c})}),b)},a.extend(a.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",pendingClass:"pending",validClass:"valid",errorElement:"label",focusCleanup:!1,focusInvalid:!0,errorContainer:a([]),errorLabelContainer:a([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(a){this.lastActive=a,this.settings.focusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(a)))},onfocusout:function(a){this.checkable(a)||!(a.name in this.submitted)&&this.optional(a)||this.element(a)},onkeyup:function(b,c){var d=[16,17,18,20,35,36,37,38,39,40,45,144,225];9===c.which&&""===this.elementValue(b)||-1!==a.inArray(c.keyCode,d)||(b.name in this.submitted||b.name in this.invalid)&&this.element(b)},onclick:function(a){a.name in this.submitted?this.element(a):a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).addClass(c).removeClass(d):a(b).addClass(c).removeClass(d)},unhighlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).removeClass(c).addClass(d):a(b).removeClass(c).addClass(d)}},setDefaults:function(b){a.extend(a.validator.defaults,b)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date ( ISO ).",number:"Please enter a valid number.",digits:"Please enter only digits.",equalTo:"Please enter the same value again.",maxlength:a.validator.format("Please enter no more than {0} characters."),minlength:a.validator.format("Please enter at least {0} characters."),rangelength:a.validator.format("Please enter a value between {0} and {1} characters long."),range:a.validator.format("Please enter a value between {0} and {1}."),max:a.validator.format("Please enter a value less than or equal to {0}."),min:a.validator.format("Please enter a value greater than or equal to {0}."),step:a.validator.format("Please enter a multiple of {0}.")},autoCreateRanges:!1,prototype:{init:function(){function b(b){var c=a.data(this.form,"validator"),d="on"+b.type.replace(/^validate/,""),e=c.settings;e[d]&&!a(this).is(e.ignore)&&e[d].call(c,this,b)}this.labelContainer=a(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||a(this.currentForm),this.containers=a(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var c,d=this.groups={};a.each(this.settings.groups,function(b,c){"string"==typeof c&&(c=c.split(/\s/)),a.each(c,function(a,c){d[c]=b})}),c=this.settings.rules,a.each(c,function(b,d){c[b]=a.validator.normalizeRule(d)}),a(this.currentForm).on("focusin.validate focusout.validate keyup.validate",":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], [type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox'], [contenteditable]",b).on("click.validate","select, option, [type='radio'], [type='checkbox']",b),this.settings.invalidHandler&&a(this.currentForm).on("invalid-form.validate",this.settings.invalidHandler),a(this.currentForm).find("[required], [data-rule-required], .required").attr("aria-required","true")},form:function(){return this.checkForm(),a.extend(this.submitted,this.errorMap),this.invalid=a.extend({},this.errorMap),this.valid()||a(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);return this.valid()},element:function(b){var c,d,e=this.clean(b),f=this.validationTargetFor(e),g=this,h=!0;return void 0===f?delete this.invalid[e.name]:(this.prepareElement(f),this.currentElements=a(f),d=this.groups[f.name],d&&a.each(this.groups,function(a,b){b===d&&a!==f.name&&(e=g.validationTargetFor(g.clean(g.findByName(a))),e&&e.name in g.invalid&&(g.currentElements.push(e),h=h&&g.check(e)))}),c=this.check(f)!==!1,h=h&&c,c?this.invalid[f.name]=!1:this.invalid[f.name]=!0,this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),a(b).attr("aria-invalid",!c)),h},showErrors:function(b){if(b){var c=this;a.extend(this.errorMap,b),this.errorList=a.map(this.errorMap,function(a,b){return{message:a,element:c.findByName(b)[0]}}),this.successList=a.grep(this.successList,function(a){return!(a.name in b)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){a.fn.resetForm&&a(this.currentForm).resetForm(),this.invalid={},this.submitted={},this.prepareForm(),this.hideErrors();var b=this.elements().removeData("previousValue").removeAttr("aria-invalid");this.resetElements(b)},resetElements:function(a){var b;if(this.settings.unhighlight)for(b=0;a[b];b++)this.settings.unhighlight.call(this,a[b],this.settings.errorClass,""),this.findByName(a[b].name).removeClass(this.settings.validClass);else a.removeClass(this.settings.errorClass).removeClass(this.settings.validClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b,c=0;for(b in a)a[b]&&c++;return c},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(a){a.not(this.containers).text(""),this.addWrapper(a).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{a(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(b){}},findLastActive:function(){var b=this.lastActive;return b&&1===a.grep(this.errorList,function(a){return a.element.name===b.name}).length&&b},elements:function(){var b=this,c={};return a(this.currentForm).find("input, select, textarea, [contenteditable]").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter(function(){var d=this.name||a(this).attr("name");return!d&&b.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.hasAttribute("contenteditable")&&(this.form=a(this).closest("form")[0]),d in c||!b.objectLength(a(this).rules())?!1:(c[d]=!0,!0)})},clean:function(b){return a(b)[0]},errors:function(){var b=this.settings.errorClass.split(" ").join(".");return a(this.settings.errorElement+"."+b,this.errorContext)},resetInternals:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=a([]),this.toHide=a([])},reset:function(){this.resetInternals(),this.currentElements=a([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(a){this.reset(),this.toHide=this.errorsFor(a)},elementValue:function(b){var c,d,e=a(b),f=b.type;return"radio"===f||"checkbox"===f?this.findByName(b.name).filter(":checked").val():"number"===f&&"undefined"!=typeof b.validity?b.validity.badInput?"NaN":e.val():(c=b.hasAttribute("contenteditable")?e.text():e.val(),"file"===f?"C:\\fakepath\\"===c.substr(0,12)?c.substr(12):(d=c.lastIndexOf("/"),d>=0?c.substr(d+1):(d=c.lastIndexOf("\\"),d>=0?c.substr(d+1):c)):"string"==typeof c?c.replace(/\r/g,""):c)},check:function(b){b=this.validationTargetFor(this.clean(b));var c,d,e,f=a(b).rules(),g=a.map(f,function(a,b){return b}).length,h=!1,i=this.elementValue(b);if("function"==typeof f.normalizer){if(i=f.normalizer.call(b,i),"string"!=typeof i)throw new TypeError("The normalizer should return a string value.");delete f.normalizer}for(d in f){e={method:d,parameters:f[d]};try{if(c=a.validator.methods[d].call(this,i,b,e.parameters),"dependency-mismatch"===c&&1===g){h=!0;continue}if(h=!1,"pending"===c)return void(this.toHide=this.toHide.not(this.errorsFor(b)));if(!c)return this.formatAndAdd(b,e),!1}catch(j){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+b.id+", check the '"+e.method+"' method.",j),j instanceof TypeError&&(j.message+=". Exception occurred when checking element "+b.id+", check the '"+e.method+"' method."),j}}if(!h)return this.objectLength(f)&&this.successList.push(b),!0},customDataMessage:function(b,c){return a(b).data("msg"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase())||a(b).data("msg")},customMessage:function(a,b){var c=this.settings.messages[a];return c&&(c.constructor===String?c:c[b])},findDefined:function(){for(var a=0;a<arguments.length;a++)if(void 0!==arguments[a])return arguments[a]},defaultMessage:function(b,c){var d=this.findDefined(this.customMessage(b.name,c.method),this.customDataMessage(b,c.method),!this.settings.ignoreTitle&&b.title||void 0,a.validator.messages[c.method],"<strong>Warning: No message defined for "+b.name+"</strong>"),e=/\$?\{(\d+)\}/g;return"function"==typeof d?d=d.call(this,c.parameters,b):e.test(d)&&(d=a.validator.format(d.replace(e,"{$1}"),c.parameters)),d},formatAndAdd:function(a,b){var c=this.defaultMessage(a,b);this.errorList.push({message:c,element:a,method:b.method}),this.errorMap[a.name]=c,this.submitted[a.name]=c},addWrapper:function(a){return this.settings.wrapper&&(a=a.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b,c;for(a=0;this.errorList[a];a++)c=this.errorList[a],this.settings.highlight&&this.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d,e,f,g,h=this.errorsFor(b),i=this.idOrName(b),j=a(b).attr("aria-describedby");h.length?(h.removeClass(this.settings.validClass).addClass(this.settings.errorClass),h.html(c)):(h=a("<"+this.settings.errorElement+">").attr("id",i+"-error").addClass(this.settings.errorClass).html(c||""),d=h,this.settings.wrapper&&(d=h.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(d):this.settings.errorPlacement?this.settings.errorPlacement(d,a(b)):d.insertAfter(b),h.is("label")?h.attr("for",i):0===h.parents("label[for='"+this.escapeCssMeta(i)+"']").length&&(f=h.attr("id"),j?j.match(new RegExp("\\b"+this.escapeCssMeta(f)+"\\b"))||(j+=" "+f):j=f,a(b).attr("aria-describedby",j),e=this.groups[b.name],e&&(g=this,a.each(g.groups,function(b,c){c===e&&a("[name='"+g.escapeCssMeta(b)+"']",g.currentForm).attr("aria-describedby",h.attr("id"))})))),!c&&this.settings.success&&(h.text(""),"string"==typeof this.settings.success?h.addClass(this.settings.success):this.settings.success(h,b)),this.toShow=this.toShow.add(h)},errorsFor:function(b){var c=this.escapeCssMeta(this.idOrName(b)),d=a(b).attr("aria-describedby"),e="label[for='"+c+"'], label[for='"+c+"'] *";return d&&(e=e+", #"+this.escapeCssMeta(d).replace(/\s+/g,", #")),this.errors().filter(e)},escapeCssMeta:function(a){return a.replace(/([\\!"#$%&'()*+,./:;<=>?@\[\]^`{|}~])/g,"\\$1")},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(b){return this.checkable(b)&&(b=this.findByName(b.name)),a(b).not(this.settings.ignore)[0]},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find("[name='"+this.escapeCssMeta(b)+"']")},getLength:function(b,c){switch(c.nodeName.toLowerCase()){case"select":return a("option:selected",c).length;case"input":if(this.checkable(c))return this.findByName(c.name).filter(":checked").length}return b.length},depend:function(a,b){return this.dependTypes[typeof a]?this.dependTypes[typeof a](a,b):!0},dependTypes:{"boolean":function(a){return a},string:function(b,c){return!!a(b,c.form).length},"function":function(a,b){return a(b)}},optional:function(b){var c=this.elementValue(b);return!a.validator.methods.required.call(this,c,b)&&"dependency-mismatch"},startRequest:function(b){this.pending[b.name]||(this.pendingRequest++,a(b).addClass(this.settings.pendingClass),this.pending[b.name]=!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[b.name],a(b).removeClass(this.settings.pendingClass),c&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(a(this.currentForm).submit(),this.formSubmitted=!1):!c&&0===this.pendingRequest&&this.formSubmitted&&(a(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(b,c){return a.data(b,"previousValue")||a.data(b,"previousValue",{old:null,valid:!0,message:this.defaultMessage(b,{method:c})})},destroy:function(){this.resetForm(),a(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-blur")}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(b,c){b.constructor===String?this.classRuleSettings[b]=c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c={},d=a(b).attr("class");return d&&a.each(d.split(" "),function(){this in a.validator.classRuleSettings&&a.extend(c,a.validator.classRuleSettings[this])}),c},normalizeAttributeRule:function(a,b,c,d){/min|max|step/.test(c)&&(null===b||/number|range|text/.test(b))&&(d=Number(d),isNaN(d)&&(d=void 0)),d||0===d?a[c]=d:b===c&&"range"!==b&&(a[c]=!0)},attributeRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)"required"===c?(d=b.getAttribute(c),""===d&&(d=!0),d=!!d):d=f.attr(c),this.normalizeAttributeRule(e,g,c,d);return e.maxlength&&/-1|2147483647|524288/.test(e.maxlength)&&delete e.maxlength,e},dataRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)d=f.data("rule"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase()),this.normalizeAttributeRule(e,g,c,d);return e},staticRules:function(b){var c={},d=a.data(b.form,"validator");return d.settings.rules&&(c=a.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e===!1)return void delete b[d];if(e.param||e.depends){var f=!0;switch(typeof e.depends){case"string":f=!!a(e.depends,c.form).length;break;case"function":f=e.depends.call(c,c)}f?b[d]=void 0!==e.param?e.param:!0:(a.data(c.form,"validator").resetElements(a(c)),delete b[d])}}),a.each(b,function(d,e){b[d]=a.isFunction(e)&&"normalizer"!==d?e(c):e}),a.each(["minlength","maxlength"],function(){b[this]&&(b[this]=Number(b[this]))}),a.each(["rangelength","range"],function(){var c;b[this]&&(a.isArray(b[this])?b[this]=[Number(b[this][0]),Number(b[this][1])]:"string"==typeof b[this]&&(c=b[this].replace(/[\[\]]/g,"").split(/[\s,]+/),b[this]=[Number(c[0]),Number(c[1])]))}),a.validator.autoCreateRanges&&(null!=b.min&&null!=b.max&&(b.range=[b.min,b.max],delete b.min,delete b.max),null!=b.minlength&&null!=b.maxlength&&(b.rangelength=[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b},normalizeRule:function(b){if("string"==typeof b){var c={};a.each(b.split(/\s/),function(){c[this]=!0}),b=c}return b},addMethod:function(b,c,d){a.validator.methods[b]=c,a.validator.messages[b]=void 0!==d?d:a.validator.messages[b],c.length<3&&a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))return"dependency-mismatch";if("select"===c.nodeName.toLowerCase()){var e=a(c).val();return e&&e.length>0}return this.checkable(c)?this.getLength(b,c)>0:b.length>0},email:function(a,b){return this.optional(b)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(a)},url:function(a,b){return this.optional(b)||/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i.test(a)},date:function(a,b){return this.optional(b)||!/Invalid|NaN/.test(new Date(a).toString())},dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(a)},number:function(a,b){return this.optional(b)||/^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},minlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d},maxlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||d>=e},rangelength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d[0]&&e<=d[1]},min:function(a,b,c){return this.optional(b)||a>=c},max:function(a,b,c){return this.optional(b)||c>=a},range:function(a,b,c){return this.optional(b)||a>=c[0]&&a<=c[1]},step:function(b,c,d){var e=a(c).attr("type"),f="Step attribute on input type "+e+" is not supported.",g=["text","number","range"],h=new RegExp("\\b"+e+"\\b"),i=e&&!h.test(g.join());if(i)throw new Error(f);return this.optional(c)||b%d===0},equalTo:function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.not(".validate-equalTo-blur").length&&e.addClass("validate-equalTo-blur").on("blur.validate-equalTo",function(){a(c).valid()}),b===e.val()},remote:function(b,c,d,e){if(this.optional(c))return"dependency-mismatch";e="string"==typeof e&&e||"remote";var f,g,h,i=this.previousValue(c,e);return this.settings.messages[c.name]||(this.settings.messages[c.name]={}),i.originalMessage=i.originalMessage||this.settings.messages[c.name][e],this.settings.messages[c.name][e]=i.message,d="string"==typeof d&&{url:d}||d,h=a.param(a.extend({data:b},d.data)),i.old===h?i.valid:(i.old=h,f=this,this.startRequest(c),g={},g[c.name]=b,a.ajax(a.extend(!0,{mode:"abort",port:"validate"+c.name,dataType:"json",data:g,context:f.currentForm,success:function(a){var d,g,h,j=a===!0||"true"===a;f.settings.messages[c.name][e]=i.originalMessage,j?(h=f.formSubmitted,f.resetInternals(),f.toHide=f.errorsFor(c),f.formSubmitted=h,f.successList.push(c),f.invalid[c.name]=!1,f.showErrors()):(d={},g=a||f.defaultMessage(c,{method:e,parameters:b}),d[c.name]=i.message=g,f.invalid[c.name]=!0,f.showErrors(d)),i.valid=j,f.stopRequest(c,j)}},d)),"pending")}}});var b,c={};a.ajaxPrefilter?a.ajaxPrefilter(function(a,b,d){var e=a.port;"abort"===a.mode&&(c[e]&&c[e].abort(),c[e]=d)}):(b=a.ajax,a.ajax=function(d){var e=("mode"in d?d:a.ajaxSettings).mode,f=("port"in d?d:a.ajaxSettings).port;return"abort"===e?(c[f]&&c[f].abort(),c[f]=b.apply(this,arguments),c[f]):b.apply(this,arguments)})});
1
+ /*! jQuery Validation Plugin - v1.17.0 - 7/29/2017
2
+ * https://jqueryvalidation.org/
3
+ * Copyright (c) 2017 Jörn Zaefferer; Licensed MIT */
4
+ !function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){a.extend(a.fn,{validate:function(b){if(!this.length)return void(b&&b.debug&&window.console&&console.warn("Nothing selected, can't validate, returning nothing."));var c=a.data(this[0],"validator");return c?c:(this.attr("novalidate","novalidate"),c=new a.validator(b,this[0]),a.data(this[0],"validator",c),c.settings.onsubmit&&(this.on("click.validate",":submit",function(b){c.submitButton=b.currentTarget,a(this).hasClass("cancel")&&(c.cancelSubmit=!0),void 0!==a(this).attr("formnovalidate")&&(c.cancelSubmit=!0)}),this.on("submit.validate",function(b){function d(){var d,e;return c.submitButton&&(c.settings.submitHandler||c.formSubmitted)&&(d=a("<input type='hidden'/>").attr("name",c.submitButton.name).val(a(c.submitButton).val()).appendTo(c.currentForm)),!c.settings.submitHandler||(e=c.settings.submitHandler.call(c,c.currentForm,b),d&&d.remove(),void 0!==e&&e)}return c.settings.debug&&b.preventDefault(),c.cancelSubmit?(c.cancelSubmit=!1,d()):c.form()?c.pendingRequest?(c.formSubmitted=!0,!1):d():(c.focusInvalid(),!1)})),c)},valid:function(){var b,c,d;return a(this[0]).is("form")?b=this.validate().form():(d=[],b=!0,c=a(this[0].form).validate(),this.each(function(){b=c.element(this)&&b,b||(d=d.concat(c.errorList))}),c.errorList=d),b},rules:function(b,c){var d,e,f,g,h,i,j=this[0];if(null!=j&&(!j.form&&j.hasAttribute("contenteditable")&&(j.form=this.closest("form")[0],j.name=this.attr("name")),null!=j.form)){if(b)switch(d=a.data(j.form,"validator").settings,e=d.rules,f=a.validator.staticRules(j),b){case"add":a.extend(f,a.validator.normalizeRule(c)),delete f.messages,e[j.name]=f,c.messages&&(d.messages[j.name]=a.extend(d.messages[j.name],c.messages));break;case"remove":return c?(i={},a.each(c.split(/\s/),function(a,b){i[b]=f[b],delete f[b]}),i):(delete e[j.name],f)}return g=a.validator.normalizeRules(a.extend({},a.validator.classRules(j),a.validator.attributeRules(j),a.validator.dataRules(j),a.validator.staticRules(j)),j),g.required&&(h=g.required,delete g.required,g=a.extend({required:h},g)),g.remote&&(h=g.remote,delete g.remote,g=a.extend(g,{remote:h})),g}}}),a.extend(a.expr.pseudos||a.expr[":"],{blank:function(b){return!a.trim(""+a(b).val())},filled:function(b){var c=a(b).val();return null!==c&&!!a.trim(""+c)},unchecked:function(b){return!a(b).prop("checked")}}),a.validator=function(b,c){this.settings=a.extend(!0,{},a.validator.defaults,b),this.currentForm=c,this.init()},a.validator.format=function(b,c){return 1===arguments.length?function(){var c=a.makeArray(arguments);return c.unshift(b),a.validator.format.apply(this,c)}:void 0===c?b:(arguments.length>2&&c.constructor!==Array&&(c=a.makeArray(arguments).slice(1)),c.constructor!==Array&&(c=[c]),a.each(c,function(a,c){b=b.replace(new RegExp("\\{"+a+"\\}","g"),function(){return c})}),b)},a.extend(a.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",pendingClass:"pending",validClass:"valid",errorElement:"label",focusCleanup:!1,focusInvalid:!0,errorContainer:a([]),errorLabelContainer:a([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(a){this.lastActive=a,this.settings.focusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(a)))},onfocusout:function(a){this.checkable(a)||!(a.name in this.submitted)&&this.optional(a)||this.element(a)},onkeyup:function(b,c){var d=[16,17,18,20,35,36,37,38,39,40,45,144,225];9===c.which&&""===this.elementValue(b)||a.inArray(c.keyCode,d)!==-1||(b.name in this.submitted||b.name in this.invalid)&&this.element(b)},onclick:function(a){a.name in this.submitted?this.element(a):a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).addClass(c).removeClass(d):a(b).addClass(c).removeClass(d)},unhighlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).removeClass(c).addClass(d):a(b).removeClass(c).addClass(d)}},setDefaults:function(b){a.extend(a.validator.defaults,b)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",equalTo:"Please enter the same value again.",maxlength:a.validator.format("Please enter no more than {0} characters."),minlength:a.validator.format("Please enter at least {0} characters."),rangelength:a.validator.format("Please enter a value between {0} and {1} characters long."),range:a.validator.format("Please enter a value between {0} and {1}."),max:a.validator.format("Please enter a value less than or equal to {0}."),min:a.validator.format("Please enter a value greater than or equal to {0}."),step:a.validator.format("Please enter a multiple of {0}.")},autoCreateRanges:!1,prototype:{init:function(){function b(b){!this.form&&this.hasAttribute("contenteditable")&&(this.form=a(this).closest("form")[0],this.name=a(this).attr("name"));var c=a.data(this.form,"validator"),d="on"+b.type.replace(/^validate/,""),e=c.settings;e[d]&&!a(this).is(e.ignore)&&e[d].call(c,this,b)}this.labelContainer=a(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||a(this.currentForm),this.containers=a(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var c,d=this.groups={};a.each(this.settings.groups,function(b,c){"string"==typeof c&&(c=c.split(/\s/)),a.each(c,function(a,c){d[c]=b})}),c=this.settings.rules,a.each(c,function(b,d){c[b]=a.validator.normalizeRule(d)}),a(this.currentForm).on("focusin.validate focusout.validate keyup.validate",":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], [type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox'], [contenteditable], [type='button']",b).on("click.validate","select, option, [type='radio'], [type='checkbox']",b),this.settings.invalidHandler&&a(this.currentForm).on("invalid-form.validate",this.settings.invalidHandler)},form:function(){return this.checkForm(),a.extend(this.submitted,this.errorMap),this.invalid=a.extend({},this.errorMap),this.valid()||a(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);return this.valid()},element:function(b){var c,d,e=this.clean(b),f=this.validationTargetFor(e),g=this,h=!0;return void 0===f?delete this.invalid[e.name]:(this.prepareElement(f),this.currentElements=a(f),d=this.groups[f.name],d&&a.each(this.groups,function(a,b){b===d&&a!==f.name&&(e=g.validationTargetFor(g.clean(g.findByName(a))),e&&e.name in g.invalid&&(g.currentElements.push(e),h=g.check(e)&&h))}),c=this.check(f)!==!1,h=h&&c,c?this.invalid[f.name]=!1:this.invalid[f.name]=!0,this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),a(b).attr("aria-invalid",!c)),h},showErrors:function(b){if(b){var c=this;a.extend(this.errorMap,b),this.errorList=a.map(this.errorMap,function(a,b){return{message:a,element:c.findByName(b)[0]}}),this.successList=a.grep(this.successList,function(a){return!(a.name in b)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){a.fn.resetForm&&a(this.currentForm).resetForm(),this.invalid={},this.submitted={},this.prepareForm(),this.hideErrors();var b=this.elements().removeData("previousValue").removeAttr("aria-invalid");this.resetElements(b)},resetElements:function(a){var b;if(this.settings.unhighlight)for(b=0;a[b];b++)this.settings.unhighlight.call(this,a[b],this.settings.errorClass,""),this.findByName(a[b].name).removeClass(this.settings.validClass);else a.removeClass(this.settings.errorClass).removeClass(this.settings.validClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b,c=0;for(b in a)void 0!==a[b]&&null!==a[b]&&a[b]!==!1&&c++;return c},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(a){a.not(this.containers).text(""),this.addWrapper(a).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{a(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(b){}},findLastActive:function(){var b=this.lastActive;return b&&1===a.grep(this.errorList,function(a){return a.element.name===b.name}).length&&b},elements:function(){var b=this,c={};return a(this.currentForm).find("input, select, textarea, [contenteditable]").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter(function(){var d=this.name||a(this).attr("name");return!d&&b.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.hasAttribute("contenteditable")&&(this.form=a(this).closest("form")[0],this.name=d),!(d in c||!b.objectLength(a(this).rules()))&&(c[d]=!0,!0)})},clean:function(b){return a(b)[0]},errors:function(){var b=this.settings.errorClass.split(" ").join(".");return a(this.settings.errorElement+"."+b,this.errorContext)},resetInternals:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=a([]),this.toHide=a([])},reset:function(){this.resetInternals(),this.currentElements=a([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(a){this.reset(),this.toHide=this.errorsFor(a)},elementValue:function(b){var c,d,e=a(b),f=b.type;return"radio"===f||"checkbox"===f?this.findByName(b.name).filter(":checked").val():"number"===f&&"undefined"!=typeof b.validity?b.validity.badInput?"NaN":e.val():(c=b.hasAttribute("contenteditable")?e.text():e.val(),"file"===f?"C:\\fakepath\\"===c.substr(0,12)?c.substr(12):(d=c.lastIndexOf("/"),d>=0?c.substr(d+1):(d=c.lastIndexOf("\\"),d>=0?c.substr(d+1):c)):"string"==typeof c?c.replace(/\r/g,""):c)},check:function(b){b=this.validationTargetFor(this.clean(b));var c,d,e,f,g=a(b).rules(),h=a.map(g,function(a,b){return b}).length,i=!1,j=this.elementValue(b);if("function"==typeof g.normalizer?f=g.normalizer:"function"==typeof this.settings.normalizer&&(f=this.settings.normalizer),f){if(j=f.call(b,j),"string"!=typeof j)throw new TypeError("The normalizer should return a string value.");delete g.normalizer}for(d in g){e={method:d,parameters:g[d]};try{if(c=a.validator.methods[d].call(this,j,b,e.parameters),"dependency-mismatch"===c&&1===h){i=!0;continue}if(i=!1,"pending"===c)return void(this.toHide=this.toHide.not(this.errorsFor(b)));if(!c)return this.formatAndAdd(b,e),!1}catch(k){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+b.id+", check the '"+e.method+"' method.",k),k instanceof TypeError&&(k.message+=". Exception occurred when checking element "+b.id+", check the '"+e.method+"' method."),k}}if(!i)return this.objectLength(g)&&this.successList.push(b),!0},customDataMessage:function(b,c){return a(b).data("msg"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase())||a(b).data("msg")},customMessage:function(a,b){var c=this.settings.messages[a];return c&&(c.constructor===String?c:c[b])},findDefined:function(){for(var a=0;a<arguments.length;a++)if(void 0!==arguments[a])return arguments[a]},defaultMessage:function(b,c){"string"==typeof c&&(c={method:c});var d=this.findDefined(this.customMessage(b.name,c.method),this.customDataMessage(b,c.method),!this.settings.ignoreTitle&&b.title||void 0,a.validator.messages[c.method],"<strong>Warning: No message defined for "+b.name+"</strong>"),e=/\$?\{(\d+)\}/g;return"function"==typeof d?d=d.call(this,c.parameters,b):e.test(d)&&(d=a.validator.format(d.replace(e,"{$1}"),c.parameters)),d},formatAndAdd:function(a,b){var c=this.defaultMessage(a,b);this.errorList.push({message:c,element:a,method:b.method}),this.errorMap[a.name]=c,this.submitted[a.name]=c},addWrapper:function(a){return this.settings.wrapper&&(a=a.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b,c;for(a=0;this.errorList[a];a++)c=this.errorList[a],this.settings.highlight&&this.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d,e,f,g,h=this.errorsFor(b),i=this.idOrName(b),j=a(b).attr("aria-describedby");h.length?(h.removeClass(this.settings.validClass).addClass(this.settings.errorClass),h.html(c)):(h=a("<"+this.settings.errorElement+">").attr("id",i+"-error").addClass(this.settings.errorClass).html(c||""),d=h,this.settings.wrapper&&(d=h.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(d):this.settings.errorPlacement?this.settings.errorPlacement.call(this,d,a(b)):d.insertAfter(b),h.is("label")?h.attr("for",i):0===h.parents("label[for='"+this.escapeCssMeta(i)+"']").length&&(f=h.attr("id"),j?j.match(new RegExp("\\b"+this.escapeCssMeta(f)+"\\b"))||(j+=" "+f):j=f,a(b).attr("aria-describedby",j),e=this.groups[b.name],e&&(g=this,a.each(g.groups,function(b,c){c===e&&a("[name='"+g.escapeCssMeta(b)+"']",g.currentForm).attr("aria-describedby",h.attr("id"))})))),!c&&this.settings.success&&(h.text(""),"string"==typeof this.settings.success?h.addClass(this.settings.success):this.settings.success(h,b)),this.toShow=this.toShow.add(h)},errorsFor:function(b){var c=this.escapeCssMeta(this.idOrName(b)),d=a(b).attr("aria-describedby"),e="label[for='"+c+"'], label[for='"+c+"'] *";return d&&(e=e+", #"+this.escapeCssMeta(d).replace(/\s+/g,", #")),this.errors().filter(e)},escapeCssMeta:function(a){return a.replace(/([\\!"#$%&'()*+,.\/:;<=>?@\[\]^`{|}~])/g,"\\$1")},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(b){return this.checkable(b)&&(b=this.findByName(b.name)),a(b).not(this.settings.ignore)[0]},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find("[name='"+this.escapeCssMeta(b)+"']")},getLength:function(b,c){switch(c.nodeName.toLowerCase()){case"select":return a("option:selected",c).length;case"input":if(this.checkable(c))return this.findByName(c.name).filter(":checked").length}return b.length},depend:function(a,b){return!this.dependTypes[typeof a]||this.dependTypes[typeof a](a,b)},dependTypes:{"boolean":function(a){return a},string:function(b,c){return!!a(b,c.form).length},"function":function(a,b){return a(b)}},optional:function(b){var c=this.elementValue(b);return!a.validator.methods.required.call(this,c,b)&&"dependency-mismatch"},startRequest:function(b){this.pending[b.name]||(this.pendingRequest++,a(b).addClass(this.settings.pendingClass),this.pending[b.name]=!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[b.name],a(b).removeClass(this.settings.pendingClass),c&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(a(this.currentForm).submit(),this.submitButton&&a("input:hidden[name='"+this.submitButton.name+"']",this.currentForm).remove(),this.formSubmitted=!1):!c&&0===this.pendingRequest&&this.formSubmitted&&(a(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(b,c){return c="string"==typeof c&&c||"remote",a.data(b,"previousValue")||a.data(b,"previousValue",{old:null,valid:!0,message:this.defaultMessage(b,{method:c})})},destroy:function(){this.resetForm(),a(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-blur")}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(b,c){b.constructor===String?this.classRuleSettings[b]=c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c={},d=a(b).attr("class");return d&&a.each(d.split(" "),function(){this in a.validator.classRuleSettings&&a.extend(c,a.validator.classRuleSettings[this])}),c},normalizeAttributeRule:function(a,b,c,d){/min|max|step/.test(c)&&(null===b||/number|range|text/.test(b))&&(d=Number(d),isNaN(d)&&(d=void 0)),d||0===d?a[c]=d:b===c&&"range"!==b&&(a[c]=!0)},attributeRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)"required"===c?(d=b.getAttribute(c),""===d&&(d=!0),d=!!d):d=f.attr(c),this.normalizeAttributeRule(e,g,c,d);return e.maxlength&&/-1|2147483647|524288/.test(e.maxlength)&&delete e.maxlength,e},dataRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)d=f.data("rule"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase()),this.normalizeAttributeRule(e,g,c,d);return e},staticRules:function(b){var c={},d=a.data(b.form,"validator");return d.settings.rules&&(c=a.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e===!1)return void delete b[d];if(e.param||e.depends){var f=!0;switch(typeof e.depends){case"string":f=!!a(e.depends,c.form).length;break;case"function":f=e.depends.call(c,c)}f?b[d]=void 0===e.param||e.param:(a.data(c.form,"validator").resetElements(a(c)),delete b[d])}}),a.each(b,function(d,e){b[d]=a.isFunction(e)&&"normalizer"!==d?e(c):e}),a.each(["minlength","maxlength"],function(){b[this]&&(b[this]=Number(b[this]))}),a.each(["rangelength","range"],function(){var c;b[this]&&(a.isArray(b[this])?b[this]=[Number(b[this][0]),Number(b[this][1])]:"string"==typeof b[this]&&(c=b[this].replace(/[\[\]]/g,"").split(/[\s,]+/),b[this]=[Number(c[0]),Number(c[1])]))}),a.validator.autoCreateRanges&&(null!=b.min&&null!=b.max&&(b.range=[b.min,b.max],delete b.min,delete b.max),null!=b.minlength&&null!=b.maxlength&&(b.rangelength=[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b},normalizeRule:function(b){if("string"==typeof b){var c={};a.each(b.split(/\s/),function(){c[this]=!0}),b=c}return b},addMethod:function(b,c,d){a.validator.methods[b]=c,a.validator.messages[b]=void 0!==d?d:a.validator.messages[b],c.length<3&&a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))return"dependency-mismatch";if("select"===c.nodeName.toLowerCase()){var e=a(c).val();return e&&e.length>0}return this.checkable(c)?this.getLength(b,c)>0:b.length>0},email:function(a,b){return this.optional(b)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(a)},url:function(a,b){return this.optional(b)||/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[\/?#]\S*)?$/i.test(a)},date:function(a,b){return this.optional(b)||!/Invalid|NaN/.test(new Date(a).toString())},dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(a)},number:function(a,b){return this.optional(b)||/^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},minlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d},maxlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e<=d},rangelength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d[0]&&e<=d[1]},min:function(a,b,c){return this.optional(b)||a>=c},max:function(a,b,c){return this.optional(b)||a<=c},range:function(a,b,c){return this.optional(b)||a>=c[0]&&a<=c[1]},step:function(b,c,d){var e,f=a(c).attr("type"),g="Step attribute on input type "+f+" is not supported.",h=["text","number","range"],i=new RegExp("\\b"+f+"\\b"),j=f&&!i.test(h.join()),k=function(a){var b=(""+a).match(/(?:\.(\d+))?$/);return b&&b[1]?b[1].length:0},l=function(a){return Math.round(a*Math.pow(10,e))},m=!0;if(j)throw new Error(g);return e=k(d),(k(b)>e||l(b)%l(d)!==0)&&(m=!1),this.optional(c)||m},equalTo:function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.not(".validate-equalTo-blur").length&&e.addClass("validate-equalTo-blur").on("blur.validate-equalTo",function(){a(c).valid()}),b===e.val()},remote:function(b,c,d,e){if(this.optional(c))return"dependency-mismatch";e="string"==typeof e&&e||"remote";var f,g,h,i=this.previousValue(c,e);return this.settings.messages[c.name]||(this.settings.messages[c.name]={}),i.originalMessage=i.originalMessage||this.settings.messages[c.name][e],this.settings.messages[c.name][e]=i.message,d="string"==typeof d&&{url:d}||d,h=a.param(a.extend({data:b},d.data)),i.old===h?i.valid:(i.old=h,f=this,this.startRequest(c),g={},g[c.name]=b,a.ajax(a.extend(!0,{mode:"abort",port:"validate"+c.name,dataType:"json",data:g,context:f.currentForm,success:function(a){var d,g,h,j=a===!0||"true"===a;f.settings.messages[c.name][e]=i.originalMessage,j?(h=f.formSubmitted,f.resetInternals(),f.toHide=f.errorsFor(c),f.formSubmitted=h,f.successList.push(c),f.invalid[c.name]=!1,f.showErrors()):(d={},g=a||f.defaultMessage(c,{method:e,parameters:b}),d[c.name]=i.message=g,f.invalid[c.name]=!0,f.showErrors(d)),i.valid=j,f.stopRequest(c,j)}},d)),"pending")}}});var b,c={};return a.ajaxPrefilter?a.ajaxPrefilter(function(a,b,d){var e=a.port;"abort"===a.mode&&(c[e]&&c[e].abort(),c[e]=d)}):(b=a.ajax,a.ajax=function(d){var e=("mode"in d?d:a.ajaxSettings).mode,f=("port"in d?d:a.ajaxSettings).port;return"abort"===e?(c[f]&&c[f].abort(),c[f]=b.apply(this,arguments),c[f]):b.apply(this,arguments)}),a});
inc/libraries/meta-box/js/map-frontend.js CHANGED
@@ -34,6 +34,11 @@ jQuery( function ( $ ) {
34
 
35
  // Typcast zoom to a number
36
  mapOptions.zoom *= 1;
 
 
 
 
 
37
  map = new google.maps.Map( this, mapOptions );
38
 
39
  // Set marker
34
 
35
  // Typcast zoom to a number
36
  mapOptions.zoom *= 1;
37
+
38
+ if ( typeof mapOptions.styles === 'string' ) {
39
+ mapOptions.styles = JSON.parse(mapOptions.styles);
40
+ }
41
+
42
  map = new google.maps.Map( this, mapOptions );
43
 
44
  // Set marker
inc/libraries/meta-box/js/map.js CHANGED
@@ -1,4 +1,6 @@
1
- (function ( $ ) {
 
 
2
  'use strict';
3
 
4
  // Use function construction to store map & DOM elements separately for each instance
@@ -6,6 +8,9 @@
6
  this.$container = $container;
7
  };
8
 
 
 
 
9
  // Use prototype for better performance
10
  MapField.prototype = {
11
  // Initialize everything
@@ -24,7 +29,7 @@
24
  this.canvas = this.$canvas[0];
25
  this.$coordinate = this.$container.find( '.rwmb-map-coordinate' );
26
  this.$findButton = this.$container.find( '.rwmb-map-goto-address-button' );
27
- this.addressField = this.$findButton.val();
28
  },
29
 
30
  // Initialize map elements
@@ -42,20 +47,19 @@
42
  mapTypeId: google.maps.MapTypeId.ROADMAP
43
  } );
44
  this.marker = new google.maps.Marker( {position: latLng, map: this.map, draggable: true} );
45
- this.geocoder = new google.maps.Geocoder();
46
  },
47
 
48
  // Initialize marker position
49
  initMarkerPosition: function () {
50
- var coord = this.$coordinate.val(),
51
- l,
52
  zoom;
53
 
54
- if ( coord ) {
55
- l = coord.split( ',' );
56
- this.marker.setPosition( new google.maps.LatLng( l[0], l[1] ) );
57
 
58
- zoom = l.length > 2 ? parseInt( l[2], 10 ) : 14;
59
 
60
  this.map.setCenter( this.marker.position );
61
  this.map.setZoom( zoom );
@@ -90,8 +94,7 @@
90
  * Add a custom event that allows other scripts to refresh the maps when needed
91
  * For example: when maps is in tabs or hidden div (this is known issue of Google Maps)
92
  *
93
- * @see https://developers.google.com/maps/documentation/javascript/reference
94
- * ('resize' Event)
95
  */
96
  $( window ).on( 'rwmb_map_refresh', function () {
97
  that.refresh();
@@ -127,7 +130,12 @@
127
  return;
128
  }
129
 
130
- var $address = $( '#' + this.addressField );
 
 
 
 
 
131
 
132
  // If Meta Box Geo Location installed. Do not run auto complete.
133
  if ( $( '.rwmb-geo-binding' ).length ) {
@@ -144,7 +152,7 @@
144
  'address': request.term,
145
  'region': that.$canvas.data( 'region' )
146
  };
147
- that.geocoder.geocode( options, function ( results ) {
148
  response( $.map( results, function ( item ) {
149
  return {
150
  label: item.formatted_address,
@@ -180,39 +188,43 @@
180
  that = this;
181
 
182
  for ( loop = 0; loop < fieldList.length; loop ++ ) {
183
- addressList[loop] = jQuery( '#' + fieldList[loop] ).val();
184
  }
185
 
186
  address = addressList.join( ',' ).replace( /\n/g, ',' ).replace( /,,/g, ',' );
187
 
188
- if ( address ) {
189
- this.geocoder.geocode( {'address': address}, function ( results, status ) {
190
- if ( status === google.maps.GeocoderStatus.OK ) {
191
- that.map.setCenter( results[0].geometry.location );
192
- that.marker.setPosition( results[0].geometry.location );
193
- that.updateCoordinate( results[0].geometry.location );
194
- }
195
- } );
196
  }
 
 
 
 
 
 
 
 
 
197
  }
198
  };
199
 
200
- $( function () {
201
  $( '.rwmb-map-field' ).each( function () {
202
- var field = new MapField( $( this ) );
203
- field.init();
 
 
 
204
 
205
- $( this ).data( 'mapController', field );
 
 
206
  } );
 
207
 
208
- $( '.rwmb-input' ).on( 'clone', function () {
209
- $( '.rwmb-map-field' ).each( function () {
210
- var field = new MapField( $( this ) );
211
- field.init();
212
-
213
- $( this ).data( 'mapController', field );
214
- } );
215
- } );
216
  } );
217
 
218
- })( jQuery );
1
+ /* global google */
2
+
3
+ (function ( $, document, window, google ) {
4
  'use strict';
5
 
6
  // Use function construction to store map & DOM elements separately for each instance
8
  this.$container = $container;
9
  };
10
 
11
+ // Geocoder service.
12
+ var geocoder = new google.maps.Geocoder();
13
+
14
  // Use prototype for better performance
15
  MapField.prototype = {
16
  // Initialize everything
29
  this.canvas = this.$canvas[0];
30
  this.$coordinate = this.$container.find( '.rwmb-map-coordinate' );
31
  this.$findButton = this.$container.find( '.rwmb-map-goto-address-button' );
32
+ this.addressField = this.$container.data( 'address-field' );
33
  },
34
 
35
  // Initialize map elements
47
  mapTypeId: google.maps.MapTypeId.ROADMAP
48
  } );
49
  this.marker = new google.maps.Marker( {position: latLng, map: this.map, draggable: true} );
 
50
  },
51
 
52
  // Initialize marker position
53
  initMarkerPosition: function () {
54
+ var coordinate = this.$coordinate.val(),
55
+ location,
56
  zoom;
57
 
58
+ if ( coordinate ) {
59
+ location = coordinate.split( ',' );
60
+ this.marker.setPosition( new google.maps.LatLng( location[0], location[1] ) );
61
 
62
+ zoom = location.length > 2 ? parseInt( location[2], 10 ) : 14;
63
 
64
  this.map.setCenter( this.marker.position );
65
  this.map.setZoom( zoom );
94
  * Add a custom event that allows other scripts to refresh the maps when needed
95
  * For example: when maps is in tabs or hidden div (this is known issue of Google Maps)
96
  *
97
+ * @see https://developers.google.com/maps/documentation/javascript/reference ('resize' Event)
 
98
  */
99
  $( window ).on( 'rwmb_map_refresh', function () {
100
  that.refresh();
130
  return;
131
  }
132
 
133
+ var $address = $( 'input[name="' + this.addressField + '"]');
134
+
135
+ // If map and address is inside a group, the input name of address field is changed.
136
+ if ( 0 === $address.length ) {
137
+ $address = this.$container.closest( '.rwmb-group-wrapper' ).find( 'input[name*="[' + this.addressField + ']"]' );
138
+ }
139
 
140
  // If Meta Box Geo Location installed. Do not run auto complete.
141
  if ( $( '.rwmb-geo-binding' ).length ) {
152
  'address': request.term,
153
  'region': that.$canvas.data( 'region' )
154
  };
155
+ geocoder.geocode( options, function ( results ) {
156
  response( $.map( results, function ( item ) {
157
  return {
158
  label: item.formatted_address,
188
  that = this;
189
 
190
  for ( loop = 0; loop < fieldList.length; loop ++ ) {
191
+ addressList[loop] = $( '#' + fieldList[loop] ).val();
192
  }
193
 
194
  address = addressList.join( ',' ).replace( /\n/g, ',' ).replace( /,,/g, ',' );
195
 
196
+ if ( ! address ) {
197
+ return;
 
 
 
 
 
 
198
  }
199
+
200
+ geocoder.geocode( {'address': address}, function ( results, status ) {
201
+ if ( status !== google.maps.GeocoderStatus.OK ) {
202
+ return;
203
+ }
204
+ that.map.setCenter( results[0].geometry.location );
205
+ that.marker.setPosition( results[0].geometry.location );
206
+ that.updateCoordinate( results[0].geometry.location );
207
+ } );
208
  }
209
  };
210
 
211
+ function update() {
212
  $( '.rwmb-map-field' ).each( function () {
213
+ var $this = $( this ),
214
+ controller = $this.data( 'mapController' );
215
+ if ( controller ) {
216
+ return;
217
+ }
218
 
219
+ controller = new MapField( $( this ) );
220
+ controller.init();
221
+ $this.data( 'mapController', controller );
222
  } );
223
+ }
224
 
225
+ $( function () {
226
+ update();
227
+ $( '.rwmb-input' ).on( 'clone', update );
 
 
 
 
 
228
  } );
229
 
230
+ })( jQuery, document, window, google );
inc/libraries/meta-box/js/media.js CHANGED
@@ -7,9 +7,12 @@ jQuery( function ( $ ) {
7
 
8
  var views = rwmb.views = rwmb.views || {},
9
  models = rwmb.models = rwmb.models || {},
10
- MediaCollection, Controller, MediaField, MediaList, MediaItem, MediaButton, MediaStatus, EditMedia, MediaDetails;
 
 
 
11
 
12
- MediaCollection = models.MediaCollection = wp.media.model.Attachments.extend( {
13
  initialize: function ( models, options ) {
14
  this.controller = options.controller || new models.Controller;
15
  this.on( 'add remove reset', function () {
@@ -18,7 +21,7 @@ jQuery( function ( $ ) {
18
  this.controller.set( 'full', max > 0 && this.length >= max );
19
  } );
20
 
21
- wp.media.model.Attachments.prototype.initialize.call( this, models, options );
22
  },
23
 
24
  add: function ( models, options ) {
@@ -28,24 +31,23 @@ jQuery( function ( $ ) {
28
  if ( max > 0 && left <= 0 ) {
29
  return this;
30
  }
31
-
32
- if ( ! models.hasOwnProperty( 'length' ) ) {
33
- models = [models];
34
- }
35
- else if ( models instanceof wp.media.model.Attachments ) {
36
- models = models.models;
37
  }
38
-
39
  if ( left > 0 ) {
40
  models = _.difference( models, this.models );
41
  models = _.first( models, left );
42
  }
43
 
44
- return wp.media.model.Attachments.prototype.add.call( this, models, options );
45
  },
46
 
47
  remove: function ( models, options ) {
48
- models = wp.media.model.Attachments.prototype.remove.call( this, models, options );
49
  if ( this.controller.get( 'forceDelete' ) === true ) {
50
  models = ! _.isArray( models ) ? [models] : models;
51
  _.each( models, function ( model ) {
@@ -116,15 +118,22 @@ jQuery( function ( $ ) {
116
  * Sets up media field view and subviews
117
  */
118
  MediaField = views.MediaField = Backbone.View.extend( {
 
119
  initialize: function ( options ) {
120
- var that = this;
 
121
  this.$input = $( options.input );
 
 
 
 
 
122
  this.controller = new Controller( _.extend(
123
  {
124
- fieldName: this.$input.attr( 'name' ) + '[]',
125
  ids: this.$input.val().split( ',' )
126
  },
127
- this.$el.data( 'options' )
128
  ) );
129
 
130
  // Create views
@@ -140,11 +149,15 @@ jQuery( function ( $ ) {
140
 
141
  // Listen for destroy event on input
142
  this.$input.on( 'remove', function () {
143
- this.controller.destroy();
 
 
 
 
144
  } );
145
 
146
  this.controller.get( 'items' ).on( 'add remove reset', _.debounce( function () {
147
- that.$input.trigger( 'change' );
148
  }, 500 ) );
149
 
150
  this.controller.get( 'items' ).on( 'remove', _.debounce( function () {
@@ -206,6 +219,7 @@ jQuery( function ( $ ) {
206
 
207
  this.listenTo( this.collection, 'add', this.addItemView );
208
  this.listenTo( this.collection, 'remove', this.removeItemView );
 
209
 
210
  // Sort media using sortable
211
  this.initSortable();
@@ -242,27 +256,39 @@ jQuery( function ( $ ) {
242
  this.collection.remove( item );
243
  },
244
 
245
- switchItem: function () {
 
 
 
 
 
 
 
 
 
 
246
  if ( this._switchFrame ) {
247
  //this.stopListening( this._frame );
248
  this._switchFrame.dispose();
249
  }
250
- this._switchFrame = wp.media( {
251
  className: 'media-frame rwmb-media-frame',
252
  multiple: false,
253
  title: i18nRwmbMedia.select,
254
  editing: true,
255
  library: {
256
  type: this.controller.get( 'mimeType' )
257
- }
 
258
  } );
259
 
260
  this._switchFrame.on( 'select', function () {
261
  var selection = this._switchFrame.state().get( 'selection' ),
262
  collection = this.collection,
263
- index = collection.indexOf( this.model );
 
264
  if ( ! _.isEmpty( selection ) ) {
265
- collection.remove( this.model );
266
  collection.add( selection, {at: index} );
267
  }
268
  }, this );
@@ -300,9 +326,8 @@ jQuery( function ( $ ) {
300
  initSortable: function () {
301
  var collection = this.controller.get( 'items' );
302
  this.$el.sortable( {
303
- // Change the position of the attachment as soon as the
304
- // mouse pointer overlaps a thumbnail.
305
- tolerance: 'pointer',
306
 
307
  // Record the initial `index` of the dragged model.
308
  start: function ( event, ui ) {
@@ -350,6 +375,7 @@ jQuery( function ( $ ) {
350
 
351
  // Re-render if changes happen in controller
352
  this.listenTo( this.controller.get( 'items' ), 'update', this.render );
 
353
 
354
  // Render
355
  this.render();
@@ -376,15 +402,16 @@ jQuery( function ( $ ) {
376
  //this.stopListening( this._frame );
377
  this._frame.dispose();
378
  }
379
- var maxFiles = this.controller.get( 'maxFiles');
380
- this._frame = wp.media( {
381
  className: 'media-frame rwmb-media-frame',
382
  multiple: maxFiles > 1 || maxFiles <= 0 ? 'add' : false,
383
  title: i18nRwmbMedia.select,
384
  editing: true,
385
  library: {
386
  type: this.controller.get( 'mimeType' )
387
- }
 
388
  } );
389
 
390
  this._frame.on( 'select', function () {
@@ -419,7 +446,7 @@ jQuery( function ( $ ) {
419
  */
420
  MediaItem = views.MediaItem = Backbone.View.extend( {
421
  tagName: 'li',
422
- className: 'rwmb-media-item',
423
  template: wp.template( 'rwmb-media-item' ),
424
  initialize: function ( options ) {
425
  this.controller = options.controller;
@@ -433,7 +460,7 @@ jQuery( function ( $ ) {
433
 
434
 
435
  events: {
436
- 'click .rwmb-switch': function () {
437
  this.trigger( 'click:switch', this.model );
438
  return false;
439
  },
@@ -466,26 +493,91 @@ jQuery( function ( $ ) {
466
  * MediaDetails
467
  * Custom version of TwoColumn view to prevent all video and audio from being unset
468
  */
469
- MediaDetails = views.MediaDetails = wp.media.view.Attachment.Details.TwoColumn.extend( {
470
  render: function () {
471
  var that = this;
472
- wp.media.view.Attachment.Details.prototype.render.apply( this, arguments );
473
  this.players = this.players || [];
474
 
475
- wp.media.mixin.unsetPlayers.call( this );
476
 
477
  this.$( 'audio, video' ).each( function ( i, elem ) {
478
- var el = wp.media.view.MediaDetails.prepareSrc( elem );
479
- that.players.push( new window.MediaElementPlayer( el, wp.media.mixin.mejsSettings ) );
480
  } );
481
  }
482
  } );
483
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
484
  /***
485
  * EditMedia
486
  * Custom version of EditAttachments frame to prevent all video and audio from being unset
487
  */
488
- EditMedia = views.EditMedia = wp.media.view.MediaFrame.EditAttachments.extend( {
489
  /**
490
  * Content region rendering callback for the `edit-metadata` mode.
491
  *
@@ -502,7 +594,7 @@ jQuery( function ( $ ) {
502
  * Attach a subview to display fields added via the
503
  * `attachment_fields_to_edit` filter.
504
  */
505
- contentRegion.view.views.set( '.attachment-compat', new wp.media.view.AttachmentCompat( {
506
  controller: this,
507
  model: this.model
508
  } ) );
@@ -514,10 +606,12 @@ jQuery( function ( $ ) {
514
  * @return void
515
  */
516
  function initMediaField() {
517
- new MediaField( {input: this, el: $( this ).siblings( 'div.rwmb-media-view' )} );
 
 
 
518
  }
519
 
520
- $( ':input.rwmb-file_advanced' ).each( initMediaField );
521
- $( '.rwmb-input' )
522
- .on( 'clone', ':input.rwmb-file_advanced', initMediaField );
523
  } );
7
 
8
  var views = rwmb.views = rwmb.views || {},
9
  models = rwmb.models = rwmb.models || {},
10
+ media = wp.media,
11
+ MediaFrame = media.view.MediaFrame,
12
+ MediaCollection, Controller, MediaField, MediaList, MediaItem, MediaButton, MediaStatus, EditMedia,
13
+ MediaDetails, MediaLibrary, MediaSelect;
14
 
15
+ MediaCollection = models.MediaCollection = media.model.Attachments.extend( {
16
  initialize: function ( models, options ) {
17
  this.controller = options.controller || new models.Controller;
18
  this.on( 'add remove reset', function () {
21
  this.controller.set( 'full', max > 0 && this.length >= max );
22
  } );
23
 
24
+ media.model.Attachments.prototype.initialize.call( this, models, options );
25
  },
26
 
27
  add: function ( models, options ) {
31
  if ( max > 0 && left <= 0 ) {
32
  return this;
33
  }
34
+ if( models) {
35
+ if ( ! models.hasOwnProperty( 'length' ) ) {
36
+ models = [models];
37
+ } else if ( models instanceof media.model.Attachments ) {
38
+ models = models.models;
39
+ }
40
  }
 
41
  if ( left > 0 ) {
42
  models = _.difference( models, this.models );
43
  models = _.first( models, left );
44
  }
45
 
46
+ return media.model.Attachments.prototype.add.call( this, models, options );
47
  },
48
 
49
  remove: function ( models, options ) {
50
+ models = media.model.Attachments.prototype.remove.call( this, models, options );
51
  if ( this.controller.get( 'forceDelete' ) === true ) {
52
  models = ! _.isArray( models ) ? [models] : models;
53
  _.each( models, function ( model ) {
118
  * Sets up media field view and subviews
119
  */
120
  MediaField = views.MediaField = Backbone.View.extend( {
121
+ className: 'rwmb-media-view',
122
  initialize: function ( options ) {
123
+ var that = this,
124
+ fieldName = options.input.name;
125
  this.$input = $( options.input );
126
+
127
+ if ( 1 != this.$input.attr( 'data-single-image' ) ) {
128
+ fieldName += '[]';
129
+ }
130
+
131
  this.controller = new Controller( _.extend(
132
  {
133
+ fieldName: fieldName,
134
  ids: this.$input.val().split( ',' )
135
  },
136
+ this.$input.data( 'options' )
137
  ) );
138
 
139
  // Create views
149
 
150
  // Listen for destroy event on input
151
  this.$input.on( 'remove', function () {
152
+ that.controller.destroy();
153
+ } );
154
+
155
+ this.$input.on( 'media:reset', function() {
156
+ that.controller.get( 'items' ).reset();
157
  } );
158
 
159
  this.controller.get( 'items' ).on( 'add remove reset', _.debounce( function () {
160
+ that.$input.trigger( 'change', [that.$( '.rwmb-media-input' )] );
161
  }, 500 ) );
162
 
163
  this.controller.get( 'items' ).on( 'remove', _.debounce( function () {
219
 
220
  this.listenTo( this.collection, 'add', this.addItemView );
221
  this.listenTo( this.collection, 'remove', this.removeItemView );
222
+ this.listenTo( this.collection, 'reset', this.resetItemViews );
223
 
224
  // Sort media using sortable
225
  this.initSortable();
256
  this.collection.remove( item );
257
  },
258
 
259
+ resetItemViews: function( items, options ){
260
+ var that = this;
261
+ _.each( options.previousModels, function( item ){
262
+ that.removeItemView( item );
263
+ } );
264
+ items.each( function( item ) {
265
+ that.addItemView( item );
266
+ } );
267
+ },
268
+
269
+ switchItem: function ( item ) {
270
  if ( this._switchFrame ) {
271
  //this.stopListening( this._frame );
272
  this._switchFrame.dispose();
273
  }
274
+ this._switchFrame = new MediaSelect( {
275
  className: 'media-frame rwmb-media-frame',
276
  multiple: false,
277
  title: i18nRwmbMedia.select,
278
  editing: true,
279
  library: {
280
  type: this.controller.get( 'mimeType' )
281
+ },
282
+ edit: this.controller.get( 'items' )
283
  } );
284
 
285
  this._switchFrame.on( 'select', function () {
286
  var selection = this._switchFrame.state().get( 'selection' ),
287
  collection = this.collection,
288
+ index = collection.indexOf( item );
289
+
290
  if ( ! _.isEmpty( selection ) ) {
291
+ collection.remove( item );
292
  collection.add( selection, {at: index} );
293
  }
294
  }, this );
326
  initSortable: function () {
327
  var collection = this.controller.get( 'items' );
328
  this.$el.sortable( {
329
+ // Clone the element and the clone will be dragged. Prevent trigger click on the image, which means reselect.
330
+ helper : 'clone',
 
331
 
332
  // Record the initial `index` of the dragged model.
333
  start: function ( event, ui ) {
375
 
376
  // Re-render if changes happen in controller
377
  this.listenTo( this.controller.get( 'items' ), 'update', this.render );
378
+ this.listenTo( this.controller.get( 'items' ), 'reset', this.render );
379
 
380
  // Render
381
  this.render();
402
  //this.stopListening( this._frame );
403
  this._frame.dispose();
404
  }
405
+ var maxFiles = this.controller.get( 'maxFiles' );
406
+ this._frame = new MediaSelect( {
407
  className: 'media-frame rwmb-media-frame',
408
  multiple: maxFiles > 1 || maxFiles <= 0 ? 'add' : false,
409
  title: i18nRwmbMedia.select,
410
  editing: true,
411
  library: {
412
  type: this.controller.get( 'mimeType' )
413
+ },
414
+ edit: this.controller.get( 'items' )
415
  } );
416
 
417
  this._frame.on( 'select', function () {
446
  */
447
  MediaItem = views.MediaItem = Backbone.View.extend( {
448
  tagName: 'li',
449
+ className: 'rwmb-media-item attachment',
450
  template: wp.template( 'rwmb-media-item' ),
451
  initialize: function ( options ) {
452
  this.controller = options.controller;
460
 
461
 
462
  events: {
463
+ 'click .rwmb-overlay': function () {
464
  this.trigger( 'click:switch', this.model );
465
  return false;
466
  },
493
  * MediaDetails
494
  * Custom version of TwoColumn view to prevent all video and audio from being unset
495
  */
496
+ MediaDetails = views.MediaDetails = media.view.Attachment.Details.TwoColumn.extend( {
497
  render: function () {
498
  var that = this;
499
+ media.view.Attachment.Details.prototype.render.apply( this, arguments );
500
  this.players = this.players || [];
501
 
502
+ media.mixin.unsetPlayers.call( this );
503
 
504
  this.$( 'audio, video' ).each( function ( i, elem ) {
505
+ var el = media.view.MediaDetails.prepareSrc( elem );
506
+ that.players.push( new window.MediaElementPlayer( el, media.mixin.mejsSettings ) );
507
  } );
508
  }
509
  } );
510
 
511
+ /**
512
+ * MediaLibrary
513
+ * Custom version of Library to exclude already selected media in a media frame
514
+ */
515
+ MediaLibrary = media.controller.Library.extend( {
516
+ defaults: _.defaults( {
517
+ multiple: 'add',
518
+ filterable: 'uploaded',
519
+ priority: 100,
520
+ syncSelection: false
521
+ }, media.controller.Library.prototype.defaults ),
522
+
523
+ activate: function () {
524
+ var library = this.get( 'library' ),
525
+ edit = this.frame.options.edit;
526
+
527
+ if ( this.editLibrary && this.editLibrary !== edit ) {
528
+ library.unobserve( this.editLibrary );
529
+ }
530
+
531
+ // Accepts attachments that exist in the original library and
532
+ // that do not exist in gallery's library.
533
+ library.validator = function ( attachment ) {
534
+ return ! ! this.mirroring.get( attachment.cid ) && ! edit.get( attachment.cid ) && media.model.Selection.prototype.validator.apply( this, arguments );
535
+ };
536
+
537
+ // Reset the library to ensure that all attachments are re-added
538
+ // to the collection. Do so silently, as calling `observe` will
539
+ // trigger the `reset` event.
540
+ library.reset( library.mirroring.models, {silent: true} );
541
+ library.observe( edit );
542
+ this.editLibrary = edit;
543
+
544
+ media.controller.Library.prototype.activate.apply( this, arguments );
545
+ }
546
+ } );
547
+
548
+ /**
549
+ * MediaSelect
550
+ * Custom version of Select media frame that uses MediaLibrary
551
+ */
552
+ MediaSelect = views.MediaSelect = MediaFrame.Select.extend( {
553
+ /**
554
+ * Create the default states on the frame.
555
+ */
556
+ createStates: function () {
557
+ var options = this.options;
558
+
559
+ if ( this.options.states ) {
560
+ return;
561
+ }
562
+
563
+ // Add the default states.
564
+ this.states.add( [
565
+ // Main states.
566
+ new MediaLibrary( {
567
+ library: media.query( options.library ),
568
+ multiple: options.multiple,
569
+ title: options.title,
570
+ priority: 20
571
+ } )
572
+ ] );
573
+ }
574
+ } );
575
+
576
  /***
577
  * EditMedia
578
  * Custom version of EditAttachments frame to prevent all video and audio from being unset
579
  */
580
+ EditMedia = views.EditMedia = MediaFrame.EditAttachments.extend( {
581
  /**
582
  * Content region rendering callback for the `edit-metadata` mode.
583
  *
594
  * Attach a subview to display fields added via the
595
  * `attachment_fields_to_edit` filter.
596
  */
597
+ contentRegion.view.views.set( '.attachment-compat', new media.view.AttachmentCompat( {
598
  controller: this,
599
  model: this.model
600
  } ) );
606
  * @return void
607
  */
608
  function initMediaField() {
609
+ var view = new MediaField( { input: this } );
610
+ //Remove old then add new
611
+ $( this ).siblings( 'div.rwmb-media-view' ).remove();
612
+ $( this ).after( view.el );
613
  }
614
 
615
+ $( '.rwmb-file_advanced' ).each( initMediaField );
616
+ $( document ).on( 'clone', '.rwmb-file_advanced', initMediaField );
 
617
  } );
inc/libraries/meta-box/js/oembed.js CHANGED
@@ -11,13 +11,13 @@ jQuery( function ( $ ) {
11
  $spinner = $this.siblings( '.spinner' ),
12
  data = {
13
  action: 'rwmb_get_embed',
14
- url: $this.siblings( 'input' ).val()
15
  };
16
 
17
  $spinner.css( 'visibility', 'visible' );
18
- $.post( ajaxurl, data, function ( r ) {
19
  $spinner.css( 'visibility', 'hidden' );
20
- $this.siblings( '.rwmb-embed-media' ).html( r.data );
21
  }, 'json' );
22
  }
23
 
@@ -28,9 +28,7 @@ jQuery( function ( $ ) {
28
  $( this ).siblings( '.rwmb-embed-media' ).html( '' );
29
  }
30
 
31
- // Show oembeded media when clicking "Preview" button
32
- $( 'body' ).on( 'click', '.rwmb-embed-show', showPreview );
33
-
34
- // Remove oembed preview when cloning
35
- $( '.rwmb-input' ).on( 'clone', '.rwmb-oembed', removePreview );
36
  } );
11
  $spinner = $this.siblings( '.spinner' ),
12
  data = {
13
  action: 'rwmb_get_embed',
14
+ url: $this.val()
15
  };
16
 
17
  $spinner.css( 'visibility', 'visible' );
18
+ $.post( ajaxurl, data, function ( response ) {
19
  $spinner.css( 'visibility', 'hidden' );
20
+ $this.siblings( '.rwmb-embed-media' ).html( response.data );
21
  }, 'json' );
22
  }
23
 
28
  $( this ).siblings( '.rwmb-embed-media' ).html( '' );
29
  }
30
 
31
+ $( document )
32
+ .on( 'change', '.rwmb-oembed', _.debounce( showPreview, 250 ) )
33
+ .on( 'clone', '.rwmb-oembed', removePreview );
 
 
34
  } );
inc/libraries/meta-box/js/range.js CHANGED
@@ -15,6 +15,6 @@ jQuery( function ( $ ) {
15
 
16
  }
17
 
18
- $( ':input.rwmb-range' ).each( update );
19
- $( '.rwmb-input' ).on( 'clone', 'input.rwmb-range', update );
20
  } );
15
 
16
  }
17
 
18
+ $( '.rwmb-range' ).each( update );
19
+ $( document ).on( 'clone', '.rwmb-range', update );
20
  } );
inc/libraries/meta-box/js/select-advanced.js CHANGED
@@ -16,6 +16,6 @@ jQuery( function ( $ ) {
16
  rwmbSelect.bindEvents( $this );
17
  }
18
 
19
- $( ':input.rwmb-select_advanced' ).each( update );
20
- $( '.rwmb-input' ).on( 'clone', ':input.rwmb-select_advanced', update );
21
  } );
16
  rwmbSelect.bindEvents( $this );
17
  }
18
 
19
+ $( '.rwmb-select_advanced' ).each( update );
20
+ $( document ).on( 'clone', '.rwmb-select_advanced', update );
21
  } );
inc/libraries/meta-box/js/select.js CHANGED
@@ -67,6 +67,6 @@ jQuery( function ( $ ) {
67
  }
68
 
69
  // Run for select field
70
- $( ':input.rwmb-select' ).each( update );
71
- $( '.rwmb-input' ).on( 'clone', ':input.rwmb-select', update );
72
  } );
67
  }
68
 
69
  // Run for select field
70
+ $( '.rwmb-select' ).each( update );
71
+ $( document ).on( 'clone', '.rwmb-select', update );
72
  } );
inc/libraries/meta-box/js/select2/i18n/en.js CHANGED
@@ -1,3 +1,3 @@
1
  /*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
 
3
- (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Please delete "+t+" character";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Please enter "+t+" or more characters";return n},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var t="You can only select "+e.maximum+" item";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No results found."},searching:function(){return"Searching…"}}}),{define:e.define,require:e.require}})();
1
  /*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
 
3
+ (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Please delete "+t+" character";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Please enter "+t+" or more characters";return n},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var t="You can only select "+e.maximum+" item";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),{define:e.define,require:e.require}})();
inc/libraries/meta-box/js/select2/select2.min.js CHANGED
@@ -1,2 +1,2 @@
1
  /*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.select2&&a.fn.select2.amd)var b=a.fn.select2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return u.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=b&&b.split("/"),o=s.map,p=o&&o["*"]||{};if(a&&"."===a.charAt(0))if(b){for(a=a.split("/"),g=a.length-1,s.nodeIdCompat&&w.test(a[g])&&(a[g]=a[g].replace(w,"")),a=n.slice(0,n.length-1).concat(a),k=0;k<a.length;k+=1)if(m=a[k],"."===m)a.splice(k,1),k-=1;else if(".."===m){if(1===k&&(".."===a[2]||".."===a[0]))break;k>0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if((n||p)&&o){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),n)for(l=n.length;l>0;l-=1)if(e=o[n.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&p&&p[d]&&(i=p[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){var d=v.call(arguments,0);return"string"!=typeof d[0]&&1===d.length&&d.push(null),n.apply(b,d.concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){q[a]=b}}function j(a){if(e(r,a)){var c=r[a];delete r[a],t[a]=!0,m.apply(b,c)}if(!e(q,a)&&!e(t,a))throw new Error("No "+a);return q[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return function(){return s&&s.config&&s.config[a]||{}}}var m,n,o,p,q={},r={},s={},t={},u=Object.prototype.hasOwnProperty,v=[].slice,w=/\.js$/;o=function(a,b){var c,d=k(a),e=d[0];return a=d[1],e&&(e=f(e,b),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(b)):f(a,b):(a=f(a,b),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},p={require:function(a){return g(a)},exports:function(a){var b=q[a];return"undefined"!=typeof b?b:q[a]={}},module:function(a){return{id:a,uri:"",exports:q[a],config:l(a)}}},m=function(a,c,d,f){var h,k,l,m,n,s,u=[],v=typeof d;if(f=f||a,"undefined"===v||"function"===v){for(c=!c.length&&d.length?["require","exports","module"]:c,n=0;n<c.length;n+=1)if(m=o(c[n],f),k=m.f,"require"===k)u[n]=p.require(a);else if("exports"===k)u[n]=p.exports(a),s=!0;else if("module"===k)h=u[n]=p.module(a);else if(e(q,k)||e(r,k)||e(t,k))u[n]=j(k);else{if(!m.p)throw new Error(a+" missing "+k);m.p.load(m.n,g(f,!0),i(k),{}),u[n]=q[k]}l=d?d.apply(q[a],u):void 0,a&&(h&&h.exports!==b&&h.exports!==q[a]?q[a]=h.exports:l===b&&s||(q[a]=l))}else a&&(q[a]=d)},a=c=n=function(a,c,d,e,f){if("string"==typeof a)return p[a]?p[a](c):j(o(a,c).f);if(!a.splice){if(s=a,s.deps&&n(s.deps,s.callback),!c)return;c.splice?(a=c,c=d,d=null):a=b}return c=c||function(){},"function"==typeof d&&(d=e,e=f),e?m(b,a,c,d):setTimeout(function(){m(b,a,c,d)},4),n},n.config=function(a){return n(a)},a._defined=q,d=function(a,b,c){if("string"!=typeof a)throw new Error("See almond README: incorrect module build, no module name");b.splice||(c=b,b=[]),e(q,a)||e(r,a)||(r[a]=[a,b,c])},d.amd={jQuery:!0}}(),b.requirejs=a,b.require=c,b.define=d}}(),b.define("almond",function(){}),b.define("jquery",[],function(){var b=a||$;return null==b&&console&&console.error&&console.error("Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page."),b}),b.define("select2/utils",["jquery"],function(a){function b(a){var b=a.prototype,c=[];for(var d in b){var e=b[d];"function"==typeof e&&"constructor"!==d&&c.push(d)}return c}var c={};c.Extend=function(a,b){function c(){this.constructor=a}var d={}.hasOwnProperty;for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},c.Decorate=function(a,c){function d(){var b=Array.prototype.unshift,d=c.prototype.constructor.length,e=a.prototype.constructor;d>0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;h<g.length;h++){var i=g[h];d.prototype[i]=a.prototype[i]}for(var j=(function(a){var b=function(){};a in d.prototype&&(b=d.prototype[a]);var e=c.prototype[a];return function(){var a=Array.prototype.unshift;return a.call(arguments,b),e.apply(this,arguments)}}),k=0;k<f.length;k++){var l=f[k];d.prototype[l]=j(l)}return d};var d=function(){this.listeners={}};return d.prototype.on=function(a,b){this.listeners=this.listeners||{},a in this.listeners?this.listeners[a].push(b):this.listeners[a]=[b]},d.prototype.trigger=function(a){var b=Array.prototype.slice;this.listeners=this.listeners||{},a in this.listeners&&this.invoke(this.listeners[a],b.call(arguments,1)),"*"in this.listeners&&this.invoke(this.listeners["*"],arguments)},d.prototype.invoke=function(a,b){for(var c=0,d=a.length;d>c;c++)a[c].apply(this,b)},c.Observable=d,c.generateChars=function(a){for(var b="",c=0;a>c;c++){var d=Math.floor(36*Math.random());b+=d.toString(36)}return b},c.bind=function(a,b){return function(){a.apply(b,arguments)}},c._convertData=function(a){for(var b in a){var c=b.split("-"),d=a;if(1!==c.length){for(var e=0;e<c.length;e++){var f=c[e];f=f.substring(0,1).toLowerCase()+f.substring(1),f in d||(d[f]={}),e==c.length-1&&(d[f]=a[b]),d=d[f]}delete a[b]}}return a},c.hasScroll=function(b,c){var d=a(c),e=c.style.overflowX,f=c.style.overflowY;return e!==f||"hidden"!==f&&"visible"!==f?"scroll"===e||"scroll"===f?!0:d.innerHeight()<c.scrollHeight||d.innerWidth()<c.scrollWidth:!1},c.escapeMarkup=function(a){var b={"\\":"&#92;","&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#47;"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c.appendMany=function(b,c){if("1.7"===a.fn.jquery.substr(0,3)){var d=a();a.map(c,function(a){d=d.add(a)}),c=d}b.append(c)},c}),b.define("select2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<ul class="select2-results__options" role="tree"></ul>');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('<li role="treeitem" aria-live="assertive" class="select2-results__option"></li>'),e=this.options.get("translations").get(b.message);d.append(c(e(b.args))),d[0].className+=" select2-results__message",this.$results.append(d)},c.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c<a.results.length;c++){var d=a.results[c],e=this.option(d);b.push(e)}this.$results.append(b)},c.prototype.position=function(a,b){var c=b.find(".select2-results");c.append(a)},c.prototype.sort=function(a){var b=this.options.get("sorter");return b(a)},c.prototype.setClasses=function(){var b=this;this.data.current(function(c){var d=a.map(c,function(a){return a.id.toString()}),e=b.$results.find(".select2-results__option[aria-selected]");e.each(function(){var b=a(this),c=a.data(this,"data"),e=""+c.id;null!=c.element&&c.element.selected||null==c.element&&a.inArray(e,d)>-1?b.attr("aria-selected","true"):b.attr("aria-selected","false")});var f=e.filter("[aria-selected=true]");f.length>0?f.first().trigger("mouseenter"):e.first().trigger("mouseenter")})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(b){var c=document.createElement("li");c.className="select2-results__option";var d={role:"treeitem","aria-selected":"false"};b.disabled&&(delete d["aria-selected"],d["aria-disabled"]="true"),null==b.id&&delete d["aria-selected"],null!=b._resultId&&(c.id=b._resultId),b.title&&(c.title=b.title),b.children&&(d.role="group",d["aria-label"]=b.text,delete d["aria-selected"]);for(var e in d){var f=d[e];c.setAttribute(e,f)}if(b.children){var g=a(c),h=document.createElement("strong");h.className="select2-results__group";a(h);this.template(b,h);for(var i=[],j=0;j<b.children.length;j++){var k=b.children[j],l=this.option(k);i.push(l)}var m=a("<ul></ul>",{"class":"select2-results__options select2-results__options--nested"});m.append(i),g.append(h),g.append(m)}else this.template(b,c);return a.data(c,"data",b),c},c.prototype.bind=function(b,c){var d=this,e=b.id+"-results";this.$results.attr("id",e),b.on("results:all",function(a){d.clear(),d.append(a.data),b.isOpen()&&d.setClasses()}),b.on("results:append",function(a){d.append(a.data),b.isOpen()&&d.setClasses()}),b.on("query",function(a){d.hideMessages(),d.showLoading(a)}),b.on("select",function(){b.isOpen()&&d.setClasses()}),b.on("unselect",function(){b.isOpen()&&d.setClasses()}),b.on("open",function(){d.$results.attr("aria-expanded","true"),d.$results.attr("aria-hidden","false"),d.setClasses(),d.ensureHighlightVisible()}),b.on("close",function(){d.$results.attr("aria-expanded","false"),d.$results.attr("aria-hidden","true"),d.$results.removeAttr("aria-activedescendant")}),b.on("results:toggle",function(){var a=d.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),b.on("results:select",function(){var a=d.getHighlightedResults();if(0!==a.length){var b=a.data("data");"true"==a.attr("aria-selected")?d.trigger("close",{}):d.trigger("select",{data:b})}}),b.on("results:previous",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a);if(0!==c){var e=c-1;0===a.length&&(e=0);var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top,h=f.offset().top,i=d.$results.scrollTop()+(h-g);0===e?d.$results.scrollTop(0):0>h-g&&d.$results.scrollTop(i)}}),b.on("results:next",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a),e=c+1;if(!(e>=b.length)){var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top+d.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=d.$results.scrollTop()+h-g;0===e?d.$results.scrollTop(0):h>g&&d.$results.scrollTop(i)}}),b.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),b.on("results:message",function(a){d.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=d.$results.scrollTop(),c=d.$results.get(0).scrollHeight-b+a.deltaY,e=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&c<=d.$results.height();e?(d.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(d.$results.scrollTop(d.$results.get(0).scrollHeight-d.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(b){var c=a(this),e=c.data("data");return"true"===c.attr("aria-selected")?void(d.options.get("multiple")?d.trigger("unselect",{originalEvent:b,data:e}):d.trigger("close",{})):void d.trigger("select",{originalEvent:b,data:e})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(b){var c=a(this).data("data");d.getHighlightedResults().removeClass("select2-results__option--highlighted"),d.trigger("results:focus",{data:c,element:a(this)})})},c.prototype.getHighlightedResults=function(){var a=this.$results.find(".select2-results__option--highlighted");return a},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),2>=c?this.$results.scrollTop(0):(g>this.$results.outerHeight()||0>g)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b,c);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("select2/keys",[],function(){var a={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46};return a}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var b=a('<span class="select2-selection" role="combobox" aria-haspopup="true" aria-expanded="false"></span>');return this._tabindex=0,null!=this.$element.data("old-tabindex")?this._tabindex=this.$element.data("old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),b.attr("title",this.$element.attr("title")),b.attr("tabindex",this._tabindex),this.$selection=b,b},d.prototype.bind=function(a,b){var d=this,e=(a.id+"-container",a.id+"-results");this.container=a,this.$selection.on("focus",function(a){d.trigger("focus",a)}),this.$selection.on("blur",function(a){d._handleBlur(a)}),this.$selection.on("keydown",function(a){d.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){d.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){d.update(a.data)}),a.on("open",function(){d.$selection.attr("aria-expanded","true"),d.$selection.attr("aria-owns",e),d._attachCloseHandler(a)}),a.on("close",function(){d.$selection.attr("aria-expanded","false"),d.$selection.removeAttr("aria-activedescendant"),d.$selection.removeAttr("aria-owns"),d.$selection.focus(),d._detachCloseHandler(a)}),a.on("enable",function(){d.$selection.attr("tabindex",d._tabindex)}),a.on("disable",function(){d.$selection.attr("tabindex","-1")})},d.prototype._handleBlur=function(b){var c=this;window.setTimeout(function(){document.activeElement==c.$selection[0]||a.contains(c.$selection[0],document.activeElement)||c.trigger("blur",b)},1)},d.prototype._attachCloseHandler=function(b){a(document.body).on("mousedown.select2."+b.id,function(b){var c=a(b.target),d=c.closest(".select2"),e=a(".select2.select2-container--open");e.each(function(){var b=a(this);if(this!=d[0]){var c=b.data("element");c.select2("close")}})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){var c=b.find(".selection");c.append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(a){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c,d){function e(){e.__super__.constructor.apply(this,arguments)}return c.Extend(e,b),e.prototype.render=function(){var a=e.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html('<span class="select2-selection__rendered"></span><span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span>'),a},e.prototype.bind=function(a,b){var c=this;e.__super__.bind.apply(this,arguments);var d=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",d),this.$selection.attr("aria-labelledby",d),this.$selection.on("mousedown",function(a){1===a.which&&c.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(a){}),this.$selection.on("blur",function(a){}),a.on("selection:update",function(a){c.update(a.data)})},e.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},e.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},e.prototype.selectionContainer=function(){return a("<span></span>")},e.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.$selection.find(".select2-selection__rendered"),d=this.display(b,c);c.empty().append(d),c.prop("title",b.title||b.text)},e}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(a,b){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('<ul class="select2-selection__rendered"></ul>'),a},d.prototype.bind=function(b,c){var e=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){e.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(b){if(!e.options.get("disabled")){var c=a(this),d=c.parent(),f=d.data("data");e.trigger("unselect",{originalEvent:b,data:f})}})},d.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},d.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},d.prototype.selectionContainer=function(){var b=a('<li class="select2-selection__choice"><span class="select2-selection__choice__remove" role="presentation">&times;</span></li>');return b},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],d=0;d<a.length;d++){var e=a[d],f=this.selectionContainer(),g=this.display(e,f);f.append(g),f.prop("title",e.title||e.text),f.data("data",e),b.push(f)}var h=this.$selection.find(".select2-selection__rendered");c.appendMany(h,b)}},d}),b.define("select2/selection/placeholder",["../utils"],function(a){function b(a,b,c){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c)}return b.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},b.prototype.createPlaceholder=function(a,b){var c=this.selectionContainer();return c.html(this.display(b)),c.addClass("select2-selection__placeholder").removeClass("select2-selection__choice"),c},b.prototype.update=function(a,b){var c=1==b.length&&b[0].id!=this.placeholder.id,d=b.length>1;if(d||c)return a.call(this,b);this.clear();var e=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(e)},b}),b.define("select2/selection/allowClear",["jquery","../keys"],function(a,b){function c(){}return c.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(a){d._handleClear(a)}),b.on("keypress",function(a){d._handleKeyboardClear(a,b)})},c.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var c=this.$selection.find(".select2-selection__clear");if(0!==c.length){b.stopPropagation();for(var d=c.data("data"),e=0;e<d.length;e++){var f={data:d[e]};if(this.trigger("unselect",f),f.prevented)return}this.$element.val(this.placeholder.id).trigger("change"),this.trigger("toggle",{})}}},c.prototype._handleKeyboardClear=function(a,c,d){d.isOpen()||(c.which==b.DELETE||c.which==b.BACKSPACE)&&this._handleClear(c)},c.prototype.update=function(b,c){if(b.call(this,c),!(this.$selection.find(".select2-selection__placeholder").length>0||0===c.length)){var d=a('<span class="select2-selection__clear">&times;</span>');d.data("data",c),this.$selection.find(".select2-selection__rendered").prepend(d)}},c}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('<li class="select2-search select2-search--inline"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" aria-autocomplete="list" /></li>');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return this._transferTabIndex(),d},d.prototype.bind=function(a,b,d){var e=this;a.call(this,b,d),b.on("open",function(){e.$search.trigger("focus")}),b.on("close",function(){e.$search.val(""),e.$search.removeAttr("aria-activedescendant"),e.$search.trigger("focus")}),b.on("enable",function(){e.$search.prop("disabled",!1),e._transferTabIndex()}),b.on("disable",function(){e.$search.prop("disabled",!0)}),b.on("focus",function(a){e.$search.trigger("focus")}),b.on("results:focus",function(a){e.$search.attr("aria-activedescendant",a.id)}),this.$selection.on("focusin",".select2-search--inline",function(a){e.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){e._handleBlur(a)}),this.$selection.on("keydown",".select2-search--inline",function(a){a.stopPropagation(),e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented();var b=a.which;if(b===c.BACKSPACE&&""===e.$search.val()){var d=e.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var f=d.data("data");e.searchRemoveChoice(f),a.preventDefault()}}});var f=document.documentMode,g=f&&11>=f;this.$selection.on("input.searchcheck",".select2-search--inline",function(a){return g?void e.$selection.off("input.search input.searchcheck"):void e.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(a){if(g&&"input"===a.type)return void e.$selection.off("input.search input.searchcheck");var b=a.which;b!=c.SHIFT&&b!=c.CTRL&&b!=c.ALT&&b!=c.TAB&&e.handleSearch(a)})},d.prototype._transferTabIndex=function(a){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){var c=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),c&&this.$search.focus()},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.$search.val(b.text),this.handleSearch()},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{var b=this.$search.val().length+1;a=.75*b+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting"],g=["opening","closing","selecting","unselecting"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){var a={"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"};return a}),b.define("select2/data/base",["../utils"],function(a){function b(a,c){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(a){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(a,b){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(a,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),d+=null!=c.id?"-"+c.id.toString():"-"+a.generateChars(4)},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change");if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f<a.length;f++){var g=a[f].id;-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")});else{var d=a.id;this.$element.val(d),this.$element.trigger("change")}},d.prototype.unselect=function(a){var b=this;if(this.$element.prop("multiple"))return a.selected=!1,
2
- c(a.element).is("option")?(a.element.selected=!1,void this.$element.trigger("change")):void this.current(function(d){for(var e=[],f=0;f<d.length;f++){var g=d[f].id;g!==a.id&&-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")})},d.prototype.bind=function(a,b){var c=this;this.container=a,a.on("select",function(a){c.select(a.data)}),a.on("unselect",function(a){c.unselect(a.data)})},d.prototype.destroy=function(){this.$element.find("*").each(function(){c.removeData(this,"data")})},d.prototype.query=function(a,b){var d=[],e=this,f=this.$element.children();f.each(function(){var b=c(this);if(b.is("option")||b.is("optgroup")){var f=e.item(b),g=e.matches(a,f);null!==g&&d.push(g)}}),b({results:d})},d.prototype.addOptions=function(a){b.appendMany(this.$element,a)},d.prototype.option=function(a){var b;a.children?(b=document.createElement("optgroup"),b.label=a.text):(b=document.createElement("option"),void 0!==b.textContent?b.textContent=a.text:b.innerText=a.text),a.id&&(b.value=a.id),a.disabled&&(b.disabled=!0),a.selected&&(b.selected=!0),a.title&&(b.title=a.title);var d=c(b),e=this._normalizeItem(a);return e.element=b,c.data(b,"data",e),d},d.prototype.item=function(a){var b={};if(b=c.data(a[0],"data"),null!=b)return b;if(a.is("option"))b={id:a.val(),text:a.text(),disabled:a.prop("disabled"),selected:a.prop("selected"),title:a.prop("title")};else if(a.is("optgroup")){b={text:a.prop("label"),children:[],title:a.prop("title")};for(var d=a.children("option"),e=[],f=0;f<d.length;f++){var g=c(d[f]),h=this.item(g);e.push(h)}b.children=e}return b=this._normalizeItem(b),b.element=a[0],c.data(a[0],"data",b),b},d.prototype._normalizeItem=function(a){c.isPlainObject(a)||(a={id:a,text:a}),a=c.extend({},{text:""},a);var b={selected:!1,disabled:!1};return null!=a.id&&(a.id=a.id.toString()),null!=a.text&&(a.text=a.text.toString()),null==a._resultId&&a.id&&null!=this.container&&(a._resultId=this.generateResultId(this.container,a)),c.extend({},b,a)},d.prototype.matches=function(a,b){var c=this.options.get("matcher");return c(a,b)},d}),b.define("select2/data/array",["./select","../utils","jquery"],function(a,b,c){function d(a,b){var c=b.get("data")||[];d.__super__.constructor.call(this,a,b),this.addOptions(this.convertToOptions(c))}return b.Extend(d,a),d.prototype.select=function(a){var b=this.$element.find("option").filter(function(b,c){return c.value==a.id.toString()});0===b.length&&(b=this.option(a),this.addOptions(b)),d.__super__.select.call(this,a)},d.prototype.convertToOptions=function(a){function d(a){return function(){return c(this).val()==a.id}}for(var e=this,f=this.$element.find("option"),g=f.map(function(){return e.item(c(this)).id}).get(),h=[],i=0;i<a.length;i++){var j=this._normalizeItem(a[i]);if(c.inArray(j.id,g)>=0){var k=f.filter(d(j)),l=this.item(k),m=c.extend(!0,{},j,l),n=this.option(m);k.replaceWith(n)}else{var o=this.option(j);if(j.children){var p=this.convertToOptions(j.children);b.appendMany(o,p)}h.push(o)}}return h},d}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(a,b){this.ajaxOptions=this._applyDefaults(b.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),d.__super__.constructor.call(this,a,b)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return c.extend({},a,{q:a.term})},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){e.trigger("results:message",{message:"errorLoading"})});e._request=d}var e=this;null!=this._request&&(c.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url.call(this.$element,a)),"function"==typeof f.data&&(f.data=f.data.call(this.$element,a)),this.ajaxOptions.delay&&""!==a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");void 0!==f&&(this.createTag=f);var g=d.get("insertTag");if(void 0!==g&&(this.insertTag=g),b.call(this,c,d),a.isArray(e))for(var h=0;h<e.length;h++){var i=e[h],j=this._normalizeItem(i),k=this.option(j);this.$element.append(k)}}return b.prototype.query=function(a,b,c){function d(a,f){for(var g=a.results,h=0;h<g.length;h++){var i=g[h],j=null!=i.children&&!d({results:i.children},!0),k=i.text===b.term;if(k||j)return f?!1:(a.data=g,void c(a))}if(f)return!0;var l=e.createTag(b);if(null!=l){var m=e.option(l);m.attr("data-select2-tag",!0),e.addOptions([m]),e.insertTag(g,l)}a.results=g,c(a)}var e=this;return this._removeOldTags(),null==b.term||null!=b.page?void a.call(this,b,c):void a.call(this,b,d)},b.prototype.createTag=function(b,c){var d=a.trim(c.term);return""===d?null:{id:d,text:d}},b.prototype.insertTag=function(a,b,c){b.unshift(c)},b.prototype._removeOldTags=function(b){var c=(this._lastTag,this.$element.find("option[data-select2-tag]"));c.each(function(){this.selected||a(this).remove()})},b}),b.define("select2/data/tokenizer",["jquery"],function(a){function b(a,b,c){var d=c.get("tokenizer");void 0!==d&&(this.tokenizer=d),a.call(this,b,c)}return b.prototype.bind=function(a,b,c){a.call(this,b,c),this.$search=b.dropdown.$search||b.selection.$search||c.find(".select2-search__field")},b.prototype.query=function(a,b,c){function d(a){e.trigger("select",{data:a})}var e=this;b.term=b.term||"";var f=this.tokenizer(b,this.options,d);f.term!==b.term&&(this.$search.length&&(this.$search.val(f.term),this.$search.focus()),b.term=f.term),a.call(this,b,c)},b.prototype.tokenizer=function(b,c,d,e){for(var f=d.get("tokenSeparators")||[],g=c.term,h=0,i=this.createTag||function(a){return{id:a.term,text:a.term}};h<g.length;){var j=g[h];if(-1!==a.inArray(j,f)){var k=g.substr(0,h),l=a.extend({},c,{term:k}),m=i(l);null!=m?(e(m),g=g.substr(h+1)||"",h=0):h++}else h++}return{term:g}},b}),b.define("select2/data/minimumInputLength",[],function(){function a(a,b,c){this.minimumInputLength=c.get("minimumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){return b.term=b.term||"",b.term.length<this.minimumInputLength?void this.trigger("results:message",{message:"inputTooShort",args:{minimum:this.minimumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("select2/data/maximumInputLength",[],function(){function a(a,b,c){this.maximumInputLength=c.get("maximumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){return b.term=b.term||"",this.maximumInputLength>0&&b.term.length>this.maximumInputLength?void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;return d.maximumSelectionLength>0&&f>=d.maximumSelectionLength?void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}}):void a.call(d,b,c)})},a}),b.define("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<span class="select2-dropdown"><span class="select2-results"></span></span>');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.bind=function(){},c.prototype.position=function(a,b){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("select2/dropdown/search",["jquery","../utils"],function(a,b){function c(){}return c.prototype.render=function(b){var c=b.call(this),d=a('<span class="select2-search select2-search--dropdown"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" /></span>');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},c.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(b){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val("")}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){var b=e.showSearch(a);b?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},c.prototype.handleSearch=function(a){if(!this._keyUpPrevented){var b=this.$search.val();this.trigger("query",{term:b})}this._keyUpPrevented=!1},c.prototype.showSearch=function(a,b){return!0},c}),b.define("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){var c=e.$results.offset().top+e.$results.outerHeight(!1),d=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1);c+50>=d&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('<li class="select2-results__option select2-results__option--load-more"role="treeitem" aria-disabled="true"></li>'),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(b,c,d){this.$dropdownParent=d.get("dropdownParent")||a(document.body),b.call(this,c,d)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.destroy=function(a){a.call(this),this.$dropdownContainer.remove()},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a("<span></span>"),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(a){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c,d){var e=this,f="scroll.select2."+d.id,g="resize.select2."+d.id,h="orientationchange.select2."+d.id,i=this.$container.parents().filter(b.hasScroll);i.each(function(){a(this).data("select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),i.on(f,function(b){var c=a(this).data("select2-scroll-position");a(this).scrollTop(c.y)}),a(window).on(f+" "+g+" "+h,function(a){e._positionDropdown(),e._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c,d){var e="scroll.select2."+d.id,f="resize.select2."+d.id,g="orientationchange.select2."+d.id,h=this.$container.parents().filter(b.hasScroll);h.off(e),a(window).off(e+" "+f+" "+g)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=this.$container.offset();f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.top<f.top-h.height,k=i.bottom>f.bottom+h.height,l={left:f.left,top:g.bottom},m=this.$dropdownParent;"static"===m.css("position")&&(m=m.offsetParent());var n=m.offset();l.top-=n.top,l.left-=n.left,c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){var a={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(a.minWidth=a.width,a.width="auto"),this.$dropdown.css(a)},c.prototype._showDropdown=function(a){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d<b.length;d++){var e=b[d];e.children?c+=a(e.children):c++}return c}function b(a,b,c,d){this.minimumResultsForSearch=c.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),a.call(this,b,c,d)}return b.prototype.showSearch=function(b,c){return a(c.data.results)<this.minimumResultsForSearch?!1:b.call(this,c)},b}),b.define("select2/dropdown/selectOnClose",[],function(){function a(){}return a.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("close",function(){d._handleSelectOnClose()})},a.prototype._handleSelectOnClose=function(){var a=this.getHighlightedResults();if(!(a.length<1)){var b=a.data("data");null!=b.element&&b.element.selected||null==b.element&&b.selected||this.trigger("select",{data:b})}},a}),b.define("select2/dropdown/closeOnSelect",[],function(){function a(){}return a.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("select",function(a){d._selectTriggered(a)}),b.on("unselect",function(a){d._selectTriggered(a)})},a.prototype._selectTriggered=function(a,b){var c=b.originalEvent;c&&c.ctrlKey||this.trigger("close",{})},a}),b.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(a){var b=a.input.length-a.maximum,c="Please delete "+b+" character";return 1!=b&&(c+="s"),c},inputTooShort:function(a){var b=a.minimum-a.input.length,c="Please enter "+b+" or more characters";return c},loadingMore:function(){return"Loading more results…"},maximumSelected:function(a){var b="You can only select "+a.maximum+" item";return 1!=a.maximum&&(b+="s"),b},noResults:function(){return"No results found."},searching:function(){return"Searching…"}}}),b.define("select2/defaults",["jquery","require","./results","./selection/single","./selection/multiple","./selection/placeholder","./selection/allowClear","./selection/search","./selection/eventRelay","./utils","./translation","./diacritics","./data/select","./data/array","./data/ajax","./data/tags","./data/tokenizer","./data/minimumInputLength","./data/maximumInputLength","./data/maximumSelectionLength","./dropdown","./dropdown/search","./dropdown/hidePlaceholder","./dropdown/infiniteScroll","./dropdown/attachBody","./dropdown/minimumResultsForSearch","./dropdown/selectOnClose","./dropdown/closeOnSelect","./i18n/en"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C){function D(){this.reset()}D.prototype.apply=function(l){if(l=a.extend(!0,{},this.defaults,l),null==l.dataAdapter){if(null!=l.ajax?l.dataAdapter=o:null!=l.data?l.dataAdapter=n:l.dataAdapter=m,l.minimumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),(null!=l.tokenSeparators||null!=l.tokenizer)&&(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}if(0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),null!=l.dropdownCssClass||null!=l.dropdownCss||null!=l.adaptDropdownCssClass){var F=b(l.amdBase+"compat/dropdownCss");l.dropdownAdapter=j.Decorate(l.dropdownAdapter,F)}l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter){if(l.multiple?l.selectionAdapter=e:l.selectionAdapter=d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),null!=l.containerCssClass||null!=l.containerCss||null!=l.adaptContainerCssClass){var G=b(l.amdBase+"compat/containerCss");l.selectionAdapter=j.Decorate(l.selectionAdapter,G)}l.selectionAdapter=j.Decorate(l.selectionAdapter,i)}if("string"==typeof l.language)if(l.language.indexOf("-")>0){var H=l.language.split("-"),I=H[0];l.language=[l.language,I]}else l.language=[l.language];if(a.isArray(l.language)){var J=new k;l.language.push("en");for(var K=l.language,L=0;L<K.length;L++){var M=K[L],N={};try{N=k.loadPath(M)}catch(O){try{M=this.defaults.amdLanguageBase+M,N=k.loadPath(M)}catch(P){l.debug&&window.console&&console.warn&&console.warn('Select2: The language file for "'+M+'" could not be automatically loaded. A fallback will be used instead.');continue}}J.extend(N)}l.translations=J}else{var Q=k.loadPath(this.defaults.amdLanguageBase+"en"),R=new k(l.language);R.extend(Q),l.translations=R}return l},D.prototype.reset=function(){function b(a){function b(a){return l[a]||a}return a.replace(/[^\u0000-\u007E]/g,b)}function c(d,e){if(""===a.trim(d.term))return e;if(e.children&&e.children.length>0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){var h=e.children[g],i=c(d,h);null==i&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var j=b(e.text).toUpperCase(),k=b(d.term).toUpperCase();return j.indexOf(k)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(this.defaults,f)};var E=new D;return E}),b.define("select2/options",["require","jquery","./defaults","./utils"],function(a,b,c,d){function e(b,e){if(this.options=b,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=a(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(a){var c=["select2"];null==this.options.multiple&&(this.options.multiple=a.prop("multiple")),null==this.options.disabled&&(this.options.disabled=a.prop("disabled")),null==this.options.language&&(a.prop("lang")?this.options.language=a.prop("lang").toLowerCase():a.closest("[lang]").prop("lang")&&(this.options.language=a.closest("[lang]").prop("lang"))),null==this.options.dir&&(a.prop("dir")?this.options.dir=a.prop("dir"):a.closest("[dir]").prop("dir")?this.options.dir=a.closest("[dir]").prop("dir"):this.options.dir="ltr"),a.prop("disabled",this.options.disabled),a.prop("multiple",this.options.multiple),a.data("select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),a.data("data",a.data("select2Tags")),a.data("tags",!0)),a.data("ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),a.attr("ajax--url",a.data("ajaxUrl")),a.data("ajax--url",a.data("ajaxUrl")));var e={};e=b.fn.jquery&&"1."==b.fn.jquery.substr(0,2)&&a[0].dataset?b.extend(!0,{},a[0].dataset,a.data()):a.data();var f=b.extend(!0,{},e);f=d._convertData(f);for(var g in f)b.inArray(g,c)>-1||(b.isPlainObject(this.options[g])?b.extend(this.options[g],f[g]):this.options[g]=f[g]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,c){null!=a.data("select2")&&a.data("select2").destroy(),this.$element=a,this.id=this._generateId(a),c=c||{},this.options=new b(c,a),e.__super__.constructor.call(this);var d=a.attr("tabindex")||0;a.data("old-tabindex",d),a.attr("tabindex","-1");var f=this.options.get("dataAdapter");this.dataAdapter=new f(a,this.options);var g=this.render();this._placeContainer(g);var h=this.options.get("selectionAdapter");this.selection=new h(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,g);var i=this.options.get("dropdownAdapter");this.dropdown=new i(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,g);var j=this.options.get("resultsAdapter");this.results=new j(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var k=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){k.trigger("selection:update",{data:a})}),a.addClass("select2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),a.data("select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b=b.replace(/(:|\.|\[|\]|,)/g,""),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return 0>=e?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;i>h;h+=1){var j=g[h].replace(/\s/g,""),k=j.match(c);if(null!==k&&k.length>=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this._sync=c.bind(this._syncAttributes,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._sync);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._sync)}),this._observer.observe(this.$element[0],{attributes:!0,subtree:!1})):this.$element[0].addEventListener&&this.$element[0].addEventListener("DOMAttrModified",b._sync,!1)},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle","focus"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("focus",function(a){b.focus(a)}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open",{}),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ESC||c===d.TAB||c===d.UP&&b.altKey?(a.close(),b.preventDefault()):c===d.ENTER?(a.trigger("results:select",{}),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle",{}),b.preventDefault()):c===d.UP?(a.trigger("results:previous",{}),b.preventDefault()):c===d.DOWN&&(a.trigger("results:next",{}),b.preventDefault()):(c===d.ENTER||c===d.SPACE||c===d.DOWN&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting"};if(void 0===b&&(b={}),a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||this.trigger("query",{})},e.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},e.prototype.focus=function(a){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},e.prototype.enable=function(a){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),(null==a||0===a.length)&&(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._sync),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&this.$element[0].removeEventListener("DOMAttrModified",this._sync,!1),this._sync=null,this.$element.off(".select2"),this.$element.attr("tabindex",this.$element.data("old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},e.prototype.render=function(){var b=a('<span class="select2 select2-container"><span class="selection"></span><span class="dropdown-wrapper" aria-hidden="true"></span></span>');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),b.data("element",this.$element),b},e}),b.define("jquery-mousewheel",["jquery"],function(a){return a}),b.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults"],function(a,b,c,d){if(null==a.fn.select2){var e=["open","close","destroy"];a.fn.select2=function(b){if(b=b||{},"object"==typeof b)return this.each(function(){var d=a.extend(!0,{},b);new c(a(this),d)}),this;if("string"==typeof b){var d;return this.each(function(){var c=a(this).data("select2");null==c&&window.console&&console.error&&console.error("The select2('"+b+"') method was called on an element that is not using Select2.");var e=Array.prototype.slice.call(arguments,1);d=c[b].apply(c,e)}),a.inArray(b,e)>-1?this:d}throw new Error("Invalid arguments for Select2: "+b)}}return null==a.fn.select2.defaults&&(a.fn.select2.defaults=d),c}),{define:b.define,require:b.require}}(),c=b.require("jquery.select2");return a.fn.select2.amd=b,c});
1
  /*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.select2&&a.fn.select2.amd)var b=a.fn.select2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return u.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=b&&b.split("/"),o=s.map,p=o&&o["*"]||{};if(a&&"."===a.charAt(0))if(b){for(a=a.split("/"),g=a.length-1,s.nodeIdCompat&&w.test(a[g])&&(a[g]=a[g].replace(w,"")),a=n.slice(0,n.length-1).concat(a),k=0;k<a.length;k+=1)if(m=a[k],"."===m)a.splice(k,1),k-=1;else if(".."===m){if(1===k&&(".."===a[2]||".."===a[0]))break;k>0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if((n||p)&&o){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),n)for(l=n.length;l>0;l-=1)if(e=o[n.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&p&&p[d]&&(i=p[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){var d=v.call(arguments,0);return"string"!=typeof d[0]&&1===d.length&&d.push(null),n.apply(b,d.concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){q[a]=b}}function j(a){if(e(r,a)){var c=r[a];delete r[a],t[a]=!0,m.apply(b,c)}if(!e(q,a)&&!e(t,a))throw new Error("No "+a);return q[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return function(){return s&&s.config&&s.config[a]||{}}}var m,n,o,p,q={},r={},s={},t={},u=Object.prototype.hasOwnProperty,v=[].slice,w=/\.js$/;o=function(a,b){var c,d=k(a),e=d[0];return a=d[1],e&&(e=f(e,b),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(b)):f(a,b):(a=f(a,b),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},p={require:function(a){return g(a)},exports:function(a){var b=q[a];return"undefined"!=typeof b?b:q[a]={}},module:function(a){return{id:a,uri:"",exports:q[a],config:l(a)}}},m=function(a,c,d,f){var h,k,l,m,n,s,u=[],v=typeof d;if(f=f||a,"undefined"===v||"function"===v){for(c=!c.length&&d.length?["require","exports","module"]:c,n=0;n<c.length;n+=1)if(m=o(c[n],f),k=m.f,"require"===k)u[n]=p.require(a);else if("exports"===k)u[n]=p.exports(a),s=!0;else if("module"===k)h=u[n]=p.module(a);else if(e(q,k)||e(r,k)||e(t,k))u[n]=j(k);else{if(!m.p)throw new Error(a+" missing "+k);m.p.load(m.n,g(f,!0),i(k),{}),u[n]=q[k]}l=d?d.apply(q[a],u):void 0,a&&(h&&h.exports!==b&&h.exports!==q[a]?q[a]=h.exports:l===b&&s||(q[a]=l))}else a&&(q[a]=d)},a=c=n=function(a,c,d,e,f){if("string"==typeof a)return p[a]?p[a](c):j(o(a,c).f);if(!a.splice){if(s=a,s.deps&&n(s.deps,s.callback),!c)return;c.splice?(a=c,c=d,d=null):a=b}return c=c||function(){},"function"==typeof d&&(d=e,e=f),e?m(b,a,c,d):setTimeout(function(){m(b,a,c,d)},4),n},n.config=function(a){return n(a)},a._defined=q,d=function(a,b,c){if("string"!=typeof a)throw new Error("See almond README: incorrect module build, no module name");b.splice||(c=b,b=[]),e(q,a)||e(r,a)||(r[a]=[a,b,c])},d.amd={jQuery:!0}}(),b.requirejs=a,b.require=c,b.define=d}}(),b.define("almond",function(){}),b.define("jquery",[],function(){var b=a||$;return null==b&&console&&console.error&&console.error("Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page."),b}),b.define("select2/utils",["jquery"],function(a){function b(a){var b=a.prototype,c=[];for(var d in b){var e=b[d];"function"==typeof e&&"constructor"!==d&&c.push(d)}return c}var c={};c.Extend=function(a,b){function c(){this.constructor=a}var d={}.hasOwnProperty;for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},c.Decorate=function(a,c){function d(){var b=Array.prototype.unshift,d=c.prototype.constructor.length,e=a.prototype.constructor;d>0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;h<g.length;h++){var i=g[h];d.prototype[i]=a.prototype[i]}for(var j=(function(a){var b=function(){};a in d.prototype&&(b=d.prototype[a]);var e=c.prototype[a];return function(){var a=Array.prototype.unshift;return a.call(arguments,b),e.apply(this,arguments)}}),k=0;k<f.length;k++){var l=f[k];d.prototype[l]=j(l)}return d};var d=function(){this.listeners={}};return d.prototype.on=function(a,b){this.listeners=this.listeners||{},a in this.listeners?this.listeners[a].push(b):this.listeners[a]=[b]},d.prototype.trigger=function(a){var b=Array.prototype.slice;this.listeners=this.listeners||{},a in this.listeners&&this.invoke(this.listeners[a],b.call(arguments,1)),"*"in this.listeners&&this.invoke(this.listeners["*"],arguments)},d.prototype.invoke=function(a,b){for(var c=0,d=a.length;d>c;c++)a[c].apply(this,b)},c.Observable=d,c.generateChars=function(a){for(var b="",c=0;a>c;c++){var d=Math.floor(36*Math.random());b+=d.toString(36)}return b},c.bind=function(a,b){return function(){a.apply(b,arguments)}},c._convertData=function(a){for(var b in a){var c=b.split("-"),d=a;if(1!==c.length){for(var e=0;e<c.length;e++){var f=c[e];f=f.substring(0,1).toLowerCase()+f.substring(1),f in d||(d[f]={}),e==c.length-1&&(d[f]=a[b]),d=d[f]}delete a[b]}}return a},c.hasScroll=function(b,c){var d=a(c),e=c.style.overflowX,f=c.style.overflowY;return e!==f||"hidden"!==f&&"visible"!==f?"scroll"===e||"scroll"===f?!0:d.innerHeight()<c.scrollHeight||d.innerWidth()<c.scrollWidth:!1},c.escapeMarkup=function(a){var b={"\\":"&#92;","&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#47;"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c.appendMany=function(b,c){if("1.7"===a.fn.jquery.substr(0,3)){var d=a();a.map(c,function(a){d=d.add(a)}),c=d}b.append(c)},c}),b.define("select2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<ul class="select2-results__options" role="tree"></ul>');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('<li role="treeitem" aria-live="assertive" class="select2-results__option"></li>'),e=this.options.get("translations").get(b.message);d.append(c(e(b.args))),d[0].className+=" select2-results__message",this.$results.append(d)},c.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c<a.results.length;c++){var d=a.results[c],e=this.option(d);b.push(e)}this.$results.append(b)},c.prototype.position=function(a,b){var c=b.find(".select2-results");c.append(a)},c.prototype.sort=function(a){var b=this.options.get("sorter");return b(a)},c.prototype.setClasses=function(){var b=this;this.data.current(function(c){var d=a.map(c,function(a){return a.id.toString()}),e=b.$results.find(".select2-results__option[aria-selected]");e.each(function(){var b=a(this),c=a.data(this,"data"),e=""+c.id;null!=c.element&&c.element.selected||null==c.element&&a.inArray(e,d)>-1?b.attr("aria-selected","true"):b.attr("aria-selected","false")});var f=e.filter("[aria-selected=true]");f.length>0?f.first().trigger("mouseenter"):e.first().trigger("mouseenter")})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(b){var c=document.createElement("li");c.className="select2-results__option";var d={role:"treeitem","aria-selected":"false"};b.disabled&&(delete d["aria-selected"],d["aria-disabled"]="true"),null==b.id&&delete d["aria-selected"],null!=b._resultId&&(c.id=b._resultId),b.title&&(c.title=b.title),b.children&&(d.role="group",d["aria-label"]=b.text,delete d["aria-selected"]);for(var e in d){var f=d[e];c.setAttribute(e,f)}if(b.children){var g=a(c),h=document.createElement("strong");h.className="select2-results__group";a(h);this.template(b,h);for(var i=[],j=0;j<b.children.length;j++){var k=b.children[j],l=this.option(k);i.push(l)}var m=a("<ul></ul>",{"class":"select2-results__options select2-results__options--nested"});m.append(i),g.append(h),g.append(m)}else this.template(b,c);return a.data(c,"data",b),c},c.prototype.bind=function(b,c){var d=this,e=b.id+"-results";this.$results.attr("id",e),b.on("results:all",function(a){d.clear(),d.append(a.data),b.isOpen()&&d.setClasses()}),b.on("results:append",function(a){d.append(a.data),b.isOpen()&&d.setClasses()}),b.on("query",function(a){d.hideMessages(),d.showLoading(a)}),b.on("select",function(){b.isOpen()&&d.setClasses()}),b.on("unselect",function(){b.isOpen()&&d.setClasses()}),b.on("open",function(){d.$results.attr("aria-expanded","true"),d.$results.attr("aria-hidden","false"),d.setClasses(),d.ensureHighlightVisible()}),b.on("close",function(){d.$results.attr("aria-expanded","false"),d.$results.attr("aria-hidden","true"),d.$results.removeAttr("aria-activedescendant")}),b.on("results:toggle",function(){var a=d.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),b.on("results:select",function(){var a=d.getHighlightedResults();if(0!==a.length){var b=a.data("data");"true"==a.attr("aria-selected")?d.trigger("close",{}):d.trigger("select",{data:b})}}),b.on("results:previous",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a);if(0!==c){var e=c-1;0===a.length&&(e=0);var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top,h=f.offset().top,i=d.$results.scrollTop()+(h-g);0===e?d.$results.scrollTop(0):0>h-g&&d.$results.scrollTop(i)}}),b.on("results:next",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a),e=c+1;if(!(e>=b.length)){var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top+d.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=d.$results.scrollTop()+h-g;0===e?d.$results.scrollTop(0):h>g&&d.$results.scrollTop(i)}}),b.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),b.on("results:message",function(a){d.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=d.$results.scrollTop(),c=d.$results.get(0).scrollHeight-b+a.deltaY,e=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&c<=d.$results.height();e?(d.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(d.$results.scrollTop(d.$results.get(0).scrollHeight-d.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(b){var c=a(this),e=c.data("data");return"true"===c.attr("aria-selected")?void(d.options.get("multiple")?d.trigger("unselect",{originalEvent:b,data:e}):d.trigger("close",{})):void d.trigger("select",{originalEvent:b,data:e})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(b){var c=a(this).data("data");d.getHighlightedResults().removeClass("select2-results__option--highlighted"),d.trigger("results:focus",{data:c,element:a(this)})})},c.prototype.getHighlightedResults=function(){var a=this.$results.find(".select2-results__option--highlighted");return a},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),2>=c?this.$results.scrollTop(0):(g>this.$results.outerHeight()||0>g)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b,c);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("select2/keys",[],function(){var a={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46};return a}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var b=a('<span class="select2-selection" role="combobox" aria-haspopup="true" aria-expanded="false"></span>');return this._tabindex=0,null!=this.$element.data("old-tabindex")?this._tabindex=this.$element.data("old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),b.attr("title",this.$element.attr("title")),b.attr("tabindex",this._tabindex),this.$selection=b,b},d.prototype.bind=function(a,b){var d=this,e=(a.id+"-container",a.id+"-results");this.container=a,this.$selection.on("focus",function(a){d.trigger("focus",a)}),this.$selection.on("blur",function(a){d._handleBlur(a)}),this.$selection.on("keydown",function(a){d.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){d.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){d.update(a.data)}),a.on("open",function(){d.$selection.attr("aria-expanded","true"),d.$selection.attr("aria-owns",e),d._attachCloseHandler(a)}),a.on("close",function(){d.$selection.attr("aria-expanded","false"),d.$selection.removeAttr("aria-activedescendant"),d.$selection.removeAttr("aria-owns"),d.$selection.focus(),d._detachCloseHandler(a)}),a.on("enable",function(){d.$selection.attr("tabindex",d._tabindex)}),a.on("disable",function(){d.$selection.attr("tabindex","-1")})},d.prototype._handleBlur=function(b){var c=this;window.setTimeout(function(){document.activeElement==c.$selection[0]||a.contains(c.$selection[0],document.activeElement)||c.trigger("blur",b)},1)},d.prototype._attachCloseHandler=function(b){a(document.body).on("mousedown.select2."+b.id,function(b){var c=a(b.target),d=c.closest(".select2"),e=a(".select2.select2-container--open");e.each(function(){var b=a(this);if(this!=d[0]){var c=b.data("element");c.select2("close")}})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){var c=b.find(".selection");c.append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(a){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c,d){function e(){e.__super__.constructor.apply(this,arguments)}return c.Extend(e,b),e.prototype.render=function(){var a=e.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html('<span class="select2-selection__rendered"></span><span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span>'),a},e.prototype.bind=function(a,b){var c=this;e.__super__.bind.apply(this,arguments);var d=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",d),this.$selection.attr("aria-labelledby",d),this.$selection.on("mousedown",function(a){1===a.which&&c.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(a){}),this.$selection.on("blur",function(a){}),a.on("selection:update",function(a){c.update(a.data)})},e.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},e.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},e.prototype.selectionContainer=function(){return a("<span></span>")},e.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.$selection.find(".select2-selection__rendered"),d=this.display(b,c);c.empty().append(d),c.prop("title",b.title||b.text)},e}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(a,b){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('<ul class="select2-selection__rendered"></ul>'),a},d.prototype.bind=function(b,c){var e=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){e.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(b){if(!e.options.get("disabled")){var c=a(this),d=c.parent(),f=d.data("data");e.trigger("unselect",{originalEvent:b,data:f})}})},d.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},d.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},d.prototype.selectionContainer=function(){var b=a('<li class="select2-selection__choice"><span class="select2-selection__choice__remove" role="presentation">&times;</span></li>');return b},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],d=0;d<a.length;d++){var e=a[d],f=this.selectionContainer(),g=this.display(e,f);f.append(g),f.prop("title",e.title||e.text),f.data("data",e),b.push(f)}var h=this.$selection.find(".select2-selection__rendered");c.appendMany(h,b)}},d}),b.define("select2/selection/placeholder",["../utils"],function(a){function b(a,b,c){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c)}return b.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},b.prototype.createPlaceholder=function(a,b){var c=this.selectionContainer();return c.html(this.display(b)),c.addClass("select2-selection__placeholder").removeClass("select2-selection__choice"),c},b.prototype.update=function(a,b){var c=1==b.length&&b[0].id!=this.placeholder.id,d=b.length>1;if(d||c)return a.call(this,b);this.clear();var e=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(e)},b}),b.define("select2/selection/allowClear",["jquery","../keys"],function(a,b){function c(){}return c.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(a){d._handleClear(a)}),b.on("keypress",function(a){d._handleKeyboardClear(a,b)})},c.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var c=this.$selection.find(".select2-selection__clear");if(0!==c.length){b.stopPropagation();for(var d=c.data("data"),e=0;e<d.length;e++){var f={data:d[e]};if(this.trigger("unselect",f),f.prevented)return}this.$element.val(this.placeholder.id).trigger("change"),this.trigger("toggle",{})}}},c.prototype._handleKeyboardClear=function(a,c,d){d.isOpen()||(c.which==b.DELETE||c.which==b.BACKSPACE)&&this._handleClear(c)},c.prototype.update=function(b,c){if(b.call(this,c),!(this.$selection.find(".select2-selection__placeholder").length>0||0===c.length)){var d=a('<span class="select2-selection__clear">&times;</span>');d.data("data",c),this.$selection.find(".select2-selection__rendered").prepend(d)}},c}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('<li class="select2-search select2-search--inline"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" aria-autocomplete="list" /></li>');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return this._transferTabIndex(),d},d.prototype.bind=function(a,b,d){var e=this;a.call(this,b,d),b.on("open",function(){e.$search.trigger("focus")}),b.on("close",function(){e.$search.val(""),e.$search.removeAttr("aria-activedescendant"),e.$search.trigger("focus")}),b.on("enable",function(){e.$search.prop("disabled",!1),e._transferTabIndex()}),b.on("disable",function(){e.$search.prop("disabled",!0)}),b.on("focus",function(a){e.$search.trigger("focus")}),b.on("results:focus",function(a){e.$search.attr("aria-activedescendant",a.id)}),this.$selection.on("focusin",".select2-search--inline",function(a){e.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){e._handleBlur(a)}),this.$selection.on("keydown",".select2-search--inline",function(a){a.stopPropagation(),e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented();var b=a.which;if(b===c.BACKSPACE&&""===e.$search.val()){var d=e.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var f=d.data("data");e.searchRemoveChoice(f),a.preventDefault()}}});var f=document.documentMode,g=f&&11>=f;this.$selection.on("input.searchcheck",".select2-search--inline",function(a){return g?void e.$selection.off("input.search input.searchcheck"):void e.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(a){if(g&&"input"===a.type)return void e.$selection.off("input.search input.searchcheck");var b=a.which;b!=c.SHIFT&&b!=c.CTRL&&b!=c.ALT&&b!=c.TAB&&e.handleSearch(a)})},d.prototype._transferTabIndex=function(a){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){var c=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),c&&this.$search.focus()},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.$search.val(b.text),this.handleSearch()},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{var b=this.$search.val().length+1;a=.75*b+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting"],g=["opening","closing","selecting","unselecting"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){var a={"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"};return a}),b.define("select2/data/base",["../utils"],function(a){function b(a,c){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(a){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(a,b){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(a,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),d+=null!=c.id?"-"+c.id.toString():"-"+a.generateChars(4)},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change");if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f<a.length;f++){var g=a[f].id;-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")});else{var d=a.id;this.$element.val(d),this.$element.trigger("change")}},d.prototype.unselect=function(a){var b=this;if(this.$element.prop("multiple"))return a.selected=!1,
2
+ c(a.element).is("option")?(a.element.selected=!1,void this.$element.trigger("change")):void this.current(function(d){for(var e=[],f=0;f<d.length;f++){var g=d[f].id;g!==a.id&&-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")})},d.prototype.bind=function(a,b){var c=this;this.container=a,a.on("select",function(a){c.select(a.data)}),a.on("unselect",function(a){c.unselect(a.data)})},d.prototype.destroy=function(){this.$element.find("*").each(function(){c.removeData(this,"data")})},d.prototype.query=function(a,b){var d=[],e=this,f=this.$element.children();f.each(function(){var b=c(this);if(b.is("option")||b.is("optgroup")){var f=e.item(b),g=e.matches(a,f);null!==g&&d.push(g)}}),b({results:d})},d.prototype.addOptions=function(a){b.appendMany(this.$element,a)},d.prototype.option=function(a){var b;a.children?(b=document.createElement("optgroup"),b.label=a.text):(b=document.createElement("option"),void 0!==b.textContent?b.textContent=a.text:b.innerText=a.text),a.id&&(b.value=a.id),a.disabled&&(b.disabled=!0),a.selected&&(b.selected=!0),a.title&&(b.title=a.title);var d=c(b),e=this._normalizeItem(a);return e.element=b,c.data(b,"data",e),d},d.prototype.item=function(a){var b={};if(b=c.data(a[0],"data"),null!=b)return b;if(a.is("option"))b={id:a.val(),text:a.text(),disabled:a.prop("disabled"),selected:a.prop("selected"),title:a.prop("title")};else if(a.is("optgroup")){b={text:a.prop("label"),children:[],title:a.prop("title")};for(var d=a.children("option"),e=[],f=0;f<d.length;f++){var g=c(d[f]),h=this.item(g);e.push(h)}b.children=e}return b=this._normalizeItem(b),b.element=a[0],c.data(a[0],"data",b),b},d.prototype._normalizeItem=function(a){c.isPlainObject(a)||(a={id:a,text:a}),a=c.extend({},{text:""},a);var b={selected:!1,disabled:!1};return null!=a.id&&(a.id=a.id.toString()),null!=a.text&&(a.text=a.text.toString()),null==a._resultId&&a.id&&null!=this.container&&(a._resultId=this.generateResultId(this.container,a)),c.extend({},b,a)},d.prototype.matches=function(a,b){var c=this.options.get("matcher");return c(a,b)},d}),b.define("select2/data/array",["./select","../utils","jquery"],function(a,b,c){function d(a,b){var c=b.get("data")||[];d.__super__.constructor.call(this,a,b),this.addOptions(this.convertToOptions(c))}return b.Extend(d,a),d.prototype.select=function(a){var b=this.$element.find("option").filter(function(b,c){return c.value==a.id.toString()});0===b.length&&(b=this.option(a),this.addOptions(b)),d.__super__.select.call(this,a)},d.prototype.convertToOptions=function(a){function d(a){return function(){return c(this).val()==a.id}}for(var e=this,f=this.$element.find("option"),g=f.map(function(){return e.item(c(this)).id}).get(),h=[],i=0;i<a.length;i++){var j=this._normalizeItem(a[i]);if(c.inArray(j.id,g)>=0){var k=f.filter(d(j)),l=this.item(k),m=c.extend(!0,{},j,l),n=this.option(m);k.replaceWith(n)}else{var o=this.option(j);if(j.children){var p=this.convertToOptions(j.children);b.appendMany(o,p)}h.push(o)}}return h},d}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(a,b){this.ajaxOptions=this._applyDefaults(b.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),d.__super__.constructor.call(this,a,b)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return c.extend({},a,{q:a.term})},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){e.trigger("results:message",{message:"errorLoading"})});e._request=d}var e=this;null!=this._request&&(c.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url.call(this.$element,a)),"function"==typeof f.data&&(f.data=f.data.call(this.$element,a)),this.ajaxOptions.delay&&""!==a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");void 0!==f&&(this.createTag=f);var g=d.get("insertTag");if(void 0!==g&&(this.insertTag=g),b.call(this,c,d),a.isArray(e))for(var h=0;h<e.length;h++){var i=e[h],j=this._normalizeItem(i),k=this.option(j);this.$element.append(k)}}return b.prototype.query=function(a,b,c){function d(a,f){for(var g=a.results,h=0;h<g.length;h++){var i=g[h],j=null!=i.children&&!d({results:i.children},!0),k=i.text===b.term;if(k||j)return f?!1:(a.data=g,void c(a))}if(f)return!0;var l=e.createTag(b);if(null!=l){var m=e.option(l);m.attr("data-select2-tag",!0),e.addOptions([m]),e.insertTag(g,l)}a.results=g,c(a)}var e=this;return this._removeOldTags(),null==b.term||null!=b.page?void a.call(this,b,c):void a.call(this,b,d)},b.prototype.createTag=function(b,c){var d=a.trim(c.term);return""===d?null:{id:d,text:d}},b.prototype.insertTag=function(a,b,c){b.unshift(c)},b.prototype._removeOldTags=function(b){var c=(this._lastTag,this.$element.find("option[data-select2-tag]"));c.each(function(){this.selected||a(this).remove()})},b}),b.define("select2/data/tokenizer",["jquery"],function(a){function b(a,b,c){var d=c.get("tokenizer");void 0!==d&&(this.tokenizer=d),a.call(this,b,c)}return b.prototype.bind=function(a,b,c){a.call(this,b,c),this.$search=b.dropdown.$search||b.selection.$search||c.find(".select2-search__field")},b.prototype.query=function(a,b,c){function d(a){e.trigger("select",{data:a})}var e=this;b.term=b.term||"";var f=this.tokenizer(b,this.options,d);f.term!==b.term&&(this.$search.length&&(this.$search.val(f.term),this.$search.focus()),b.term=f.term),a.call(this,b,c)},b.prototype.tokenizer=function(b,c,d,e){for(var f=d.get("tokenSeparators")||[],g=c.term,h=0,i=this.createTag||function(a){return{id:a.term,text:a.term}};h<g.length;){var j=g[h];if(-1!==a.inArray(j,f)){var k=g.substr(0,h),l=a.extend({},c,{term:k}),m=i(l);null!=m?(e(m),g=g.substr(h+1)||"",h=0):h++}else h++}return{term:g}},b}),b.define("select2/data/minimumInputLength",[],function(){function a(a,b,c){this.minimumInputLength=c.get("minimumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){return b.term=b.term||"",b.term.length<this.minimumInputLength?void this.trigger("results:message",{message:"inputTooShort",args:{minimum:this.minimumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("select2/data/maximumInputLength",[],function(){function a(a,b,c){this.maximumInputLength=c.get("maximumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){return b.term=b.term||"",this.maximumInputLength>0&&b.term.length>this.maximumInputLength?void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;return d.maximumSelectionLength>0&&f>=d.maximumSelectionLength?void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}}):void a.call(d,b,c)})},a}),b.define("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<span class="select2-dropdown"><span class="select2-results"></span></span>');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.bind=function(){},c.prototype.position=function(a,b){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("select2/dropdown/search",["jquery","../utils"],function(a,b){function c(){}return c.prototype.render=function(b){var c=b.call(this),d=a('<span class="select2-search select2-search--dropdown"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" /></span>');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},c.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(b){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val("")}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){var b=e.showSearch(a);b?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},c.prototype.handleSearch=function(a){if(!this._keyUpPrevented){var b=this.$search.val();this.trigger("query",{term:b})}this._keyUpPrevented=!1},c.prototype.showSearch=function(a,b){return!0},c}),b.define("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){var c=e.$results.offset().top+e.$results.outerHeight(!1),d=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1);c+50>=d&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('<li class="select2-results__option select2-results__option--load-more"role="treeitem" aria-disabled="true"></li>'),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(b,c,d){this.$dropdownParent=d.get("dropdownParent")||a(document.body),b.call(this,c,d)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.destroy=function(a){a.call(this),this.$dropdownContainer.remove()},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a("<span></span>"),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(a){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c,d){var e=this,f="scroll.select2."+d.id,g="resize.select2."+d.id,h="orientationchange.select2."+d.id,i=this.$container.parents().filter(b.hasScroll);i.each(function(){a(this).data("select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),i.on(f,function(b){var c=a(this).data("select2-scroll-position");a(this).scrollTop(c.y)}),a(window).on(f+" "+g+" "+h,function(a){e._positionDropdown(),e._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c,d){var e="scroll.select2."+d.id,f="resize.select2."+d.id,g="orientationchange.select2."+d.id,h=this.$container.parents().filter(b.hasScroll);h.off(e),a(window).off(e+" "+f+" "+g)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=this.$container.offset();f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.top<f.top-h.height,k=i.bottom>f.bottom+h.height,l={left:f.left,top:g.bottom},m=this.$dropdownParent;"static"===m.css("position")&&(m=m.offsetParent());var n=m.offset();l.top-=n.top,l.left-=n.left,c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){var a={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(a.minWidth=a.width,a.width="auto"),this.$dropdown.css(a)},c.prototype._showDropdown=function(a){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d<b.length;d++){var e=b[d];e.children?c+=a(e.children):c++}return c}function b(a,b,c,d){this.minimumResultsForSearch=c.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),a.call(this,b,c,d)}return b.prototype.showSearch=function(b,c){return a(c.data.results)<this.minimumResultsForSearch?!1:b.call(this,c)},b}),b.define("select2/dropdown/selectOnClose",[],function(){function a(){}return a.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("close",function(){d._handleSelectOnClose()})},a.prototype._handleSelectOnClose=function(){var a=this.getHighlightedResults();if(!(a.length<1)){var b=a.data("data");null!=b.element&&b.element.selected||null==b.element&&b.selected||this.trigger("select",{data:b})}},a}),b.define("select2/dropdown/closeOnSelect",[],function(){function a(){}return a.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("select",function(a){d._selectTriggered(a)}),b.on("unselect",function(a){d._selectTriggered(a)})},a.prototype._selectTriggered=function(a,b){var c=b.originalEvent;c&&c.ctrlKey||this.trigger("close",{})},a}),b.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(a){var b=a.input.length-a.maximum,c="Please delete "+b+" character";return 1!=b&&(c+="s"),c},inputTooShort:function(a){var b=a.minimum-a.input.length,c="Please enter "+b+" or more characters";return c},loadingMore:function(){return"Loading more results…"},maximumSelected:function(a){var b="You can only select "+a.maximum+" item";return 1!=a.maximum&&(b+="s"),b},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),b.define("select2/defaults",["jquery","require","./results","./selection/single","./selection/multiple","./selection/placeholder","./selection/allowClear","./selection/search","./selection/eventRelay","./utils","./translation","./diacritics","./data/select","./data/array","./data/ajax","./data/tags","./data/tokenizer","./data/minimumInputLength","./data/maximumInputLength","./data/maximumSelectionLength","./dropdown","./dropdown/search","./dropdown/hidePlaceholder","./dropdown/infiniteScroll","./dropdown/attachBody","./dropdown/minimumResultsForSearch","./dropdown/selectOnClose","./dropdown/closeOnSelect","./i18n/en"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C){function D(){this.reset()}D.prototype.apply=function(l){if(l=a.extend(!0,{},this.defaults,l),null==l.dataAdapter){if(null!=l.ajax?l.dataAdapter=o:null!=l.data?l.dataAdapter=n:l.dataAdapter=m,l.minimumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),(null!=l.tokenSeparators||null!=l.tokenizer)&&(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}if(0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),null!=l.dropdownCssClass||null!=l.dropdownCss||null!=l.adaptDropdownCssClass){var F=b(l.amdBase+"compat/dropdownCss");l.dropdownAdapter=j.Decorate(l.dropdownAdapter,F)}l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter){if(l.multiple?l.selectionAdapter=e:l.selectionAdapter=d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),null!=l.containerCssClass||null!=l.containerCss||null!=l.adaptContainerCssClass){var G=b(l.amdBase+"compat/containerCss");l.selectionAdapter=j.Decorate(l.selectionAdapter,G)}l.selectionAdapter=j.Decorate(l.selectionAdapter,i)}if("string"==typeof l.language)if(l.language.indexOf("-")>0){var H=l.language.split("-"),I=H[0];l.language=[l.language,I]}else l.language=[l.language];if(a.isArray(l.language)){var J=new k;l.language.push("en");for(var K=l.language,L=0;L<K.length;L++){var M=K[L],N={};try{N=k.loadPath(M)}catch(O){try{M=this.defaults.amdLanguageBase+M,N=k.loadPath(M)}catch(P){l.debug&&window.console&&console.warn&&console.warn('Select2: The language file for "'+M+'" could not be automatically loaded. A fallback will be used instead.');continue}}J.extend(N)}l.translations=J}else{var Q=k.loadPath(this.defaults.amdLanguageBase+"en"),R=new k(l.language);R.extend(Q),l.translations=R}return l},D.prototype.reset=function(){function b(a){function b(a){return l[a]||a}return a.replace(/[^\u0000-\u007E]/g,b)}function c(d,e){if(""===a.trim(d.term))return e;if(e.children&&e.children.length>0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){var h=e.children[g],i=c(d,h);null==i&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var j=b(e.text).toUpperCase(),k=b(d.term).toUpperCase();return j.indexOf(k)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(this.defaults,f)};var E=new D;return E}),b.define("select2/options",["require","jquery","./defaults","./utils"],function(a,b,c,d){function e(b,e){if(this.options=b,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=a(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(a){var c=["select2"];null==this.options.multiple&&(this.options.multiple=a.prop("multiple")),null==this.options.disabled&&(this.options.disabled=a.prop("disabled")),null==this.options.language&&(a.prop("lang")?this.options.language=a.prop("lang").toLowerCase():a.closest("[lang]").prop("lang")&&(this.options.language=a.closest("[lang]").prop("lang"))),null==this.options.dir&&(a.prop("dir")?this.options.dir=a.prop("dir"):a.closest("[dir]").prop("dir")?this.options.dir=a.closest("[dir]").prop("dir"):this.options.dir="ltr"),a.prop("disabled",this.options.disabled),a.prop("multiple",this.options.multiple),a.data("select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),a.data("data",a.data("select2Tags")),a.data("tags",!0)),a.data("ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),a.attr("ajax--url",a.data("ajaxUrl")),a.data("ajax--url",a.data("ajaxUrl")));var e={};e=b.fn.jquery&&"1."==b.fn.jquery.substr(0,2)&&a[0].dataset?b.extend(!0,{},a[0].dataset,a.data()):a.data();var f=b.extend(!0,{},e);f=d._convertData(f);for(var g in f)b.inArray(g,c)>-1||(b.isPlainObject(this.options[g])?b.extend(this.options[g],f[g]):this.options[g]=f[g]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,c){null!=a.data("select2")&&a.data("select2").destroy(),this.$element=a,this.id=this._generateId(a),c=c||{},this.options=new b(c,a),e.__super__.constructor.call(this);var d=a.attr("tabindex")||0;a.data("old-tabindex",d),a.attr("tabindex","-1");var f=this.options.get("dataAdapter");this.dataAdapter=new f(a,this.options);var g=this.render();this._placeContainer(g);var h=this.options.get("selectionAdapter");this.selection=new h(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,g);var i=this.options.get("dropdownAdapter");this.dropdown=new i(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,g);var j=this.options.get("resultsAdapter");this.results=new j(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var k=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){k.trigger("selection:update",{data:a})}),a.addClass("select2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),a.data("select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b=b.replace(/(:|\.|\[|\]|,)/g,""),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return 0>=e?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;i>h;h+=1){var j=g[h].replace(/\s/g,""),k=j.match(c);if(null!==k&&k.length>=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this._sync=c.bind(this._syncAttributes,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._sync);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._sync)}),this._observer.observe(this.$element[0],{attributes:!0,subtree:!1})):this.$element[0].addEventListener&&this.$element[0].addEventListener("DOMAttrModified",b._sync,!1)},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle","focus"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("focus",function(a){b.focus(a)}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open",{}),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ESC||c===d.TAB||c===d.UP&&b.altKey?(a.close(),b.preventDefault()):c===d.ENTER?(a.trigger("results:select",{}),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle",{}),b.preventDefault()):c===d.UP?(a.trigger("results:previous",{}),b.preventDefault()):c===d.DOWN&&(a.trigger("results:next",{}),b.preventDefault()):(c===d.ENTER||c===d.SPACE||c===d.DOWN&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting"};if(void 0===b&&(b={}),a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||this.trigger("query",{})},e.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},e.prototype.focus=function(a){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},e.prototype.enable=function(a){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),(null==a||0===a.length)&&(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._sync),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&this.$element[0].removeEventListener("DOMAttrModified",this._sync,!1),this._sync=null,this.$element.off(".select2"),this.$element.attr("tabindex",this.$element.data("old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},e.prototype.render=function(){var b=a('<span class="select2 select2-container"><span class="selection"></span><span class="dropdown-wrapper" aria-hidden="true"></span></span>');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),b.data("element",this.$element),b},e}),b.define("jquery-mousewheel",["jquery"],function(a){return a}),b.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults"],function(a,b,c,d){if(null==a.fn.select2){var e=["open","close","destroy"];a.fn.select2=function(b){if(b=b||{},"object"==typeof b)return this.each(function(){var d=a.extend(!0,{},b);new c(a(this),d)}),this;if("string"==typeof b){var d;return this.each(function(){var c=a(this).data("select2");null==c&&window.console&&console.error&&console.error("The select2('"+b+"') method was called on an element that is not using Select2.");var e=Array.prototype.slice.call(arguments,1);d=c[b].apply(c,e)}),a.inArray(b,e)>-1?this:d}throw new Error("Invalid arguments for Select2: "+b)}}return null==a.fn.select2.defaults&&(a.fn.select2.defaults=d),c}),{define:b.define,require:b.require}}(),c=b.require("jquery.select2");return a.fn.select2.amd=b,c});
inc/libraries/meta-box/js/slider.js CHANGED
@@ -30,6 +30,6 @@ jQuery( function ( $ ) {
30
  $slider.slider( options );
31
  }
32
 
33
- $( ':input.rwmb-slider-value' ).each( rwmb_update_slider );
34
- $( '.rwmb-input' ).on( 'clone', ':input.rwmb-slider-value', rwmb_update_slider );
35
  } );
30
  $slider.slider( options );
31
  }
32
 
33
+ $( '.rwmb-slider-value' ).each( rwmb_update_slider );
34
+ $( document ).on( 'clone', '.rwmb-slider-value', rwmb_update_slider );
35
  } );
inc/libraries/meta-box/js/thickbox-image.js DELETED
@@ -1,34 +0,0 @@
1
- jQuery( function ( $ ) {
2
- 'use strict';
3
-
4
- $( 'body' ).on( 'click', '.rwmb-thickbox-upload', function () {
5
- var $this = $( this ),
6
- $holder = $this.siblings( '.rwmb-images' ),
7
- post_id = $( '#post_ID' ).val(),
8
- field_id = $this.data( 'field_id' ),
9
- backup = window.send_to_editor;
10
-
11
- window.send_to_editor = function ( html ) {
12
- var $img = $( '<div />' ).append( html ).find( 'img' ),
13
- url = $img.attr( 'src' ),
14
- img_class = $img.attr( 'class' ),
15
- id = parseInt( img_class.replace( /\D/g, '' ), 10 );
16
-
17
- html = '<li id="item_' + id + '">';
18
- html += '<img src="' + url + '">';
19
- html += '<div class="rwmb-image-bar">';
20
- html += '<a class="rwmb-delete-file" href="#" data-attachment_id="' + id + '">×</a>';
21
- html += '</div>';
22
- html += '<input type="hidden" name="' + field_id + '[]" value="' + id + '">';
23
- html += '</li>';
24
-
25
- $holder.append( $( html ) ).removeClass( 'hidden' );
26
-
27
- tb_remove();
28
- window.send_to_editor = backup;
29
- };
30
- tb_show( '', 'media-upload.php?post_id=' + post_id + '&TB_iframe=true' );
31
-
32
- return false;
33
- } );
34
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/libraries/meta-box/js/validate.js CHANGED
@@ -9,7 +9,12 @@ jQuery( function ( $ ) {
9
  $form.siblings( '#message' ).remove();
10
  $form.before( '<div id="message" class="error"><p>' + rwmbValidate.summaryMessage + '</p></div>' );
11
  },
12
- ignore: ':not([class|="rwmb"])'
 
 
 
 
 
13
  };
14
 
15
  // Edit post form.
@@ -33,7 +38,7 @@ jQuery( function ( $ ) {
33
  // Required field styling
34
  $.each( subRules.rules, function ( k, v ) {
35
  if ( v['required'] ) {
36
- $( '#' + k ).parent().siblings( '.rwmb-label' ).addClass( 'required' ).append( '<span>*</span>' );
37
  }
38
  } );
39
  } );
9
  $form.siblings( '#message' ).remove();
10
  $form.before( '<div id="message" class="error"><p>' + rwmbValidate.summaryMessage + '</p></div>' );
11
  },
12
+ ignore: ':not([class|="rwmb"])',
13
+ errorPlacement: function(error, element) {
14
+ error.appendTo( element.closest( '.rwmb-input' ) );
15
+ },
16
+ errorClass: 'rwmb-error',
17
+ errorElement: 'p'
18
  };
19
 
20
  // Edit post form.
38
  // Required field styling
39
  $.each( subRules.rules, function ( k, v ) {
40
  if ( v['required'] ) {
41
+ $( '#' + k ).parent().siblings( '.rwmb-label' ).append( '<span class="rwmb-required">*</span>' );
42
  }
43
  } );
44
  } );
inc/libraries/meta-box/js/video.js CHANGED
@@ -35,9 +35,12 @@ jQuery( function ( $ )
35
  */
36
  function initVideoField()
37
  {
38
- new VideoField( { input: this, el: $( this ).siblings( 'div.rwmb-media-view' ) } );
 
 
 
39
  }
40
- $( ':input.rwmb-video' ).each( initVideoField );
41
- $( '.rwmb-input' )
42
- .on( 'clone', ':input.rwmb-video', initVideoField )
43
  } );
35
  */
36
  function initVideoField()
37
  {
38
+ var view = new VideoField( { input: this } );
39
+ //Remove old then add new
40
+ $( this ).siblings( 'div.rwmb-media-view' ).remove();
41
+ $( this ).after( view.el );
42
  }
43
+ $( '.rwmb-video' ).each( initVideoField );
44
+ $( document )
45
+ .on( 'clone', '.rwmb-video', initVideoField )
46
  } );
inc/libraries/meta-box/js/wysiwyg.js CHANGED
@@ -29,9 +29,9 @@ jQuery( function ( $ ) {
29
 
30
  // TinyMCE
31
  if ( tinyMCEPreInit.mceInit.hasOwnProperty( originalId ) ) {
32
- var settings = tinyMCEPreInit.mceInit[originalId];
33
- settings.selector = '#' + id;
34
- tinymce.init( settings );
35
  }
36
 
37
  // Quick tags
@@ -89,6 +89,6 @@ jQuery( function ( $ ) {
89
  .find( '.quicktags-toolbar' ).attr( 'id', 'qt_' + id + '_toolbar' ).html( '' );
90
  }
91
 
92
- $( ':input.rwmb-wysiwyg' ).each( update );
93
- $( '.rwmb-input' ).on( 'clone', ':input.rwmb-wysiwyg', update );
94
  } );
29
 
30
  // TinyMCE
31
  if ( tinyMCEPreInit.mceInit.hasOwnProperty( originalId ) ) {
32
+ var settings = tinyMCEPreInit.mceInit[originalId],
33
+ editor = new tinymce.Editor(id, settings, tinymce.EditorManager);
34
+ editor.render();
35
  }
36
 
37
  // Quick tags
89
  .find( '.quicktags-toolbar' ).attr( 'id', 'qt_' + id + '_toolbar' ).html( '' );
90
  }
91
 
92
+ $( '.rwmb-wysiwyg' ).each( update );
93
+ $( document ).on( 'clone', '.rwmb-wysiwyg', update );
94
  } );
inc/libraries/meta-box/meta-box.php CHANGED
@@ -3,9 +3,9 @@
3
  * Plugin Name: Meta Box
4
  * Plugin URI: https://metabox.io
5
  * Description: Create custom meta boxes and custom fields in WordPress.
6
- * Version: 4.11
7
- * Author: Anh Tran
8
- * Author URI: http://www.deluxeblogtips.com
9
  * License: GPL2+
10
  * Text Domain: meta-box
11
  * Domain Path: /languages/
3
  * Plugin Name: Meta Box
4
  * Plugin URI: https://metabox.io
5
  * Description: Create custom meta boxes and custom fields in WordPress.
6
+ * Version: 4.14.2
7
+ * Author: MetaBox.io
8
+ * Author URI: https://metabox.io
9
  * License: GPL2+
10
  * Text Domain: meta-box
11
  * Domain Path: /languages/
inc/libraries/meta-box/readme.txt CHANGED
@@ -1,10 +1,10 @@
1
  === Meta Box ===
2
  Contributors: metabox, rilwis, fitwp, f-j-kaiser, funkatronic, PerWiklander, ruanmer, Omnicia
3
- Donate link: http://paypal.me/anhtnt
4
  Tags: meta-box, custom fields, custom field, meta, meta-boxes, admin, advanced, custom, edit, field, file, image, magic fields, matrix, more fields, Post, repeater, simple fields, text, textarea, type, cms, fields post
5
- Requires at least: 4.1
6
- Tested up to: 4.7.3
7
- Stable tag: 4.11
8
  License: GPLv2 or later
9
 
10
  Meta Box plugin is a powerful, professional developer toolkit to create custom meta boxes and custom fields for WordPress.
@@ -17,67 +17,109 @@ The plugin provides a **wide range of field types** and **a lot of options to fo
17
 
18
  With the extensions, you can easily build meta boxes not only for custom post types (default), but also for **settings page, user meta, term meta**. You can also display the fields the way you want with columns, tabs or groups.
19
 
20
- The plugin is built mostly for developers with a little coding, but if you prefer GUI for faster creating custom post types, meta boxes and custom fields, the plugin has extensions for that: [MB Custom Post Type](https://wordpress.org/plugins/mb-custom-post-type/) and [Meta Box Builder](https://metabox.io/plugins/meta-box-builder/).
21
 
22
  ### Features
23
 
 
 
24
  * Create custom meta boxes for posts, pages or any custom post type.
25
  * Create custom [settings pages or theme option page](https://metabox.io/plugins/mb-settings-page/).
26
  * Create custom meta boxes for [user profile pages](https://metabox.io/plugins/mb-user-meta/).
27
  * Create custom meta boxes for [taxonomy terms](https://metabox.io/plugins/mb-term-meta/).
28
- * Supports 40+ built-in [field types](https://metabox.io/docs/define-fields/) for all your needs (text, textarea, wysiwyg/editor, image, file, post, select, checkbox, radio buttons, date time picker, taxonomy, user, oembed and more to come!). You can also [create your own field type](https://metabox.io/docs/create-field-type/) easily.
 
 
 
29
  * Support cloning (repeatable) fields for most field types, including WYSIWYG/editor field. Also support [repeatable field groups](https://metabox.io/plugins/meta-box-group/).
30
- * Powerful [actions and filters](https://metabox.io/docs-category/reference/) that developers can build or change the appearance and behavior in the plugin.
31
- * Uses the [native WordPress meta data storage](https://metabox.io/docs/how-post-meta-is-saved-in-the-database/) and functions for ease of use and fast processing.
32
- * [Easily integrate with themes and plugins](https://metabox.io/docs/include-meta-box-plugin-themes/).
33
- * [Works with Composer](https://metabox.io/docs/using-meta-box-composer/) if you want to include the plugin in your project.
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  * Compatible with WPML multilingual plugin (officially supported by WPML team).
35
 
36
- ### Documentation
37
 
38
- - [Getting Started](https://metabox.io/docs/getting-started/)
39
- - [Register Meta Boxes](https://metabox.io/docs/registering-meta-boxes/)
40
- - [Define Fields](https://metabox.io/docs/define-fields/)
41
- - [Get Meta Value](https://metabox.io/docs/get-meta-value/)
42
 
43
- See more documentation [here](https://metabox.io/docs/).
 
 
 
 
 
44
 
45
  ### Extensions
46
 
47
- - [MB User Meta](https://metabox.io/plugins/mb-user-meta/): Add custom fields to user profile (user meta) quickly with simple syntax.
48
- - [Meta Box Geolocation](https://metabox.io/plugins/meta-box-geolocation/): Automatically and instantly populate location data with the power of Google Maps Geolocation API.
49
- - [MB Admin Columns](https://metabox.io/plugins/mb-admin-columns/): Display custom fields in table columns in admin screens for All Posts (types).
50
- - [MB Term Meta](https://metabox.io/plugins/mb-term-meta/): Add meta data to categories, tags or any custom taxonomy with simple syntax.
51
- - [MB Settings Page](https://metabox.io/plugins/mb-settings-page/): Create settings pages for themes, plugins or websites with beautiful syntax.
52
  - [MB Custom Post Type](https://wordpress.org/plugins/mb-custom-post-type/): Create and manage custom post types and taxonomies easily in WordPress with an easy-to-use interface.
 
53
  - [Meta Box Yoast SEO](https://wordpress.org/plugins/meta-box-yoast-seo/): Add content of custom fields to Yoast SEO Content Analysis to have better/correct SEO score.
 
 
 
54
  - [Meta Box Text Limiter](https://wordpress.org/plugins/meta-box-text-limiter/): Limit the number of characters or words entered for text and textarea fields.
55
- - [Meta Box Conditional Logic](https://metabox.io/plugins/meta-box-conditional-logic/): Add visibility dependency for custom meta boxes and custom fields in WordPress.
56
- - [Meta Box Group](https://metabox.io/plugins/meta-box-group/): Create repeatable groups of custom fields for better appearance and structure.
 
 
57
  - [Meta Box Builder](https://metabox.io/plugins/meta-box-builder/): Create custom meta boxes and custom fields in WordPress using the drag-and-drop interface.
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  - [Meta Box Template](https://metabox.io/plugins/meta-box-template/): Define custom meta boxes and custom fields easier with templates.
59
  - [Meta Box Tooltip](https://metabox.io/plugins/meta-box-tooltip/): Display help information for fields using beautiful tooltips.
60
- - [Meta Box Show Hide (Javascript)](https://metabox.io/plugins/meta-box-show-hide-javascript/): Toggle meta boxes by page template, post format, taxonomy (including category) via Javascript.
61
- - [Meta Box Tabs](https://metabox.io/plugins/meta-box-tabs/): Create tabs for meta boxes easily. Support 3 WordPress-native tab styles and tab icon.
62
- - [Meta Box Columns](https://metabox.io/plugins/meta-box-columns/): Display fields more beautiful by putting them into 12-columns grid.
63
- - [Meta Box Include Exclude](https://metabox.io/plugins/meta-box-include-exclude/): Show/hide meta boxes by ID, page template, taxonomy or custom function.
64
 
65
  See all extensions [here](https://metabox.io/plugins/).
66
 
67
  ### Plugin Links
68
 
69
  - [Project Page](https://metabox.io)
70
- - [Documentation](https://metabox.io/docs/)
71
- - [Report Bugs/Issues](https://github.com/rilwis/meta-box/issues)
72
- - [Premium Extensions](https://metabox.io)
73
 
74
  == Installation ==
75
 
 
 
 
 
 
 
 
 
 
76
  1. Unzip the download package
77
  1. Upload `meta-box` to the `/wp-content/plugins/` directory
78
  1. Activate the plugin through the 'Plugins' menu in WordPress
79
 
80
- To getting started with the plugin API, please read [this tutorial](https://metabox.io/docs/getting-started/).
81
 
82
  == Frequently Asked Questions ==
83
 
@@ -91,646 +133,6 @@ To getting started with the plugin API, please read [this tutorial](https://meta
91
 
92
  == Changelog ==
93
 
94
- = 4.11 =
95
-
96
- * Code architecture update:
97
- * Add `object_id` property to the meta box object. Used to connect the meta box to the post object. Not heavily used yet.
98
- * Add RWMB_Meta_Box_Registry and RWMB_Field_Registry to store all registered meta boxes and fields. Used to future access these objects. Use internally only. 3rd-party code should not use it as it's still experimental and can change in the future.
99
- * Deprecated RWMB_Core::get_meta_boxes() due to the meta box registry above. This function was made for internally use only. 3rd-party code should not rely on it.
100
- * Add magic method __get to the meta box object to quick access to meta box configuration.
101
- * UI update:
102
- * Make the field label bold (similar to WordPress settings page).
103
- * Increase margin between fields and change color for remove clone button (also reduce minus size)
104
- * Remove style for checkbox (default is good).
105
- * Improve styles for checkbox/radio list
106
- * A little smaller padding for select box. Also remove default size for select[multiple]
107
- * Add a little space between the map canvas and the "Find Address" button
108
- * Media fields:
109
- * Media field update: Hidden field for media fields now no longer disabled. If media field js not loaded properly, code will default to hidden field and process
110
- accordingly. Issue #1088.
111
- * Better and simpler way to handle HTML file upload using `media_handle_upload` function.
112
- * Rewrite JS for "file", simpler and modular. Also fix bug when add/remove items that doesn't toggle the Add more link correctly.
113
- * Improve JS code for media field, using MediaList instead of item views (Backbone JS code).
114
- * Add support for image sizes in image_advanced and image_upload. Default is thumbnail. Fixes #425.
115
- * Clone:
116
- * Add new parameter `add_button` for the add new clone button text. Better than use filter.
117
- * Fix position for remove clone button in RTL languages
118
- * Update margin between clones and set clone placeholder = outer height of the cloned element.
119
- * Scripts and styles:
120
- * Check condition for enqueueing scripts & styles only in the admin.
121
- * Update the time picker library to the latest version (1.6.3) to supports "select" control for time picker. [See demo](http://trentrichardson.com/examples/timepicker/#slider_examples).
122
- * Better dependencies for date picker CSS, autocomplete field.
123
- * Other improvements:
124
- * Remove the static helper class because of a bad OOP code.
125
- * Fix get plugin URL symlink when plugin is put in a theme and symlinked. Props @tutv95.
126
- * Add support for "region" in the map field to limit autocomplete from wrong entries (to help preventing from entering wrong address or country). See https://developers.google.com/maps/documentation/geocoding/intro#RegionCodes
127
-
128
- = 4.10.4 =
129
- * Improvement: Add support for validate user edit and term edit forms (requires MB Term Meta or MB User Meta extension).
130
- * Improvement: Add new parameter `label_description` for fields to display a description below field label (name).
131
- * Improvement: Add support for edit custom fields in the media modal. Requires `post_type` set to `attachment` and `media_modal` set to true. [See demo](https://github.com/rilwis/meta-box/blob/master/demo/media-modal.php).
132
- * Improvement: For WPML users: Add support to hide fields in "Do not translate" mode and disable editing fields in "Copy" mode.
133
- * Fix: Users can't select same images for 2 different `image_advanced` fields.
134
- * Fix: `max_status` doesn't work.
135
-
136
- = 4.10.3 =
137
- * Fix: `force_delete` causes files to be deleted even when set to `false`.
138
- * Fix: `max_file_uploads` not working.
139
-
140
- = 4.10.2 =
141
- * Improvement: Add `max_file_size` to upload fields (`File_Upload`, `Image_Upload`, `Plupload_Image`).
142
- * Improvement: Add support for attributes for file input.
143
- * Improvement: Update Polish translation.
144
- * Improvement: Add translation support for Key and Value strings (@prop saqibsarwar).
145
- * Fix: Shorter width of email field vs. other fields (@prop saqibsarwar).
146
- * Fix: Fix cloneable datetime field with timestamp=true.
147
- * Fix: Remove margin bottom in select_advanced options.
148
- * Fix: Showing the correct selected value for select_advanced field when the option value contains '&' character.
149
- * Fix: Fix default values not working with taxonomy and taxonomy_advanced fields.
150
-
151
- = 4.10.1 =
152
- * Fix: Fix `image_upload` and `plupload_image` field when select images to upload.
153
-
154
- = 4.10 =
155
- * Improvement: Add `video` field type which allows users to upload or select video from the Media Library. See [demo](https://github.com/rilwis/meta-box/blob/master/demo/video.php).
156
- * Improvement: Update Turkish. Prop Emre Tuna <tunaemre@windowslive.com>.
157
- * Improvement: Use WP 4.6 date picker localization instead of JS localized file to reduce plugin size.
158
- * Improvement: Refactor the media fields for better performance. Add `change` event for item list when add, remove or reset.
159
- * Fix: `taxonomy_advanced` field now can be cloned.
160
- * Fix: Make localize_script works with WP 4.1.
161
-
162
- = 4.9.8 =
163
- * Fix: Quick fix for enqueueing validation script
164
-
165
- = 4.9.7 =
166
- * Improvement: Re-add change event on media fields to make Conditional Logic extension works with media fields.
167
- * Improvement: Add `rwmb_choice_label`, `rwmv_{$field_type}_choice_label` and `rwmb_{field_id}_choice_label` filters for post, user, taxonomy fields, allowing users to customize the labels of choice fields.
168
- * Improvement: Change coding styles to follow WordPress Coding Standards.
169
- * Various improvements to reduce duplicated code.
170
- * Fix: Map field now works in the frontend.
171
- * Fix: `std` now works for taxonomy fields.
172
-
173
- = 4.9.6 =
174
- * Fix: Wrong CSS selector when cloning wysiwyg field
175
- * Fix: Remove preview for oembed field when cloning
176
- * Fix: 'std' for taxonomy field now works
177
-
178
- = 4.9.5 =
179
- * Fix: Quick fix for wrong field wrapper class which causes color field to render incorrectly
180
-
181
- = 4.9.4 =
182
- * Fix: Quick fix for cloning bug
183
-
184
- = 4.9.3 =
185
- * Fix: Quick fix saving datetime field
186
-
187
- = 4.9.2 =
188
- * Fix: Quick fix validation
189
-
190
- = 4.9.1 =
191
- * Fix: Quick fix for `rwmb_meta()` to be better backward compatible
192
-
193
- = 4.9 =
194
- * Improvement: Update Chinese language. Add Chinese Taiwan.
195
- * Improvement: Add support for Google Maps API key. Default API key is added, however users should replace it with their own key.
196
- * Improvement: Add additional methods for jQuery validation module which makes it understand HTML5 "pattern" attribute.
197
- * Improvement: Fully WPML compatibility (supported by WPML team)
198
- * Improvement: Add placeholders for `key_value` field
199
- * Fix: Toggle remove clone buttons for nested groups.
200
- * Fix: Error on date field, not save
201
- * Fix: Add fix for date/datetime when both inline and timestamp used
202
- * Fix: Set default language for date/time picker.
203
- * Fix: rwmb_meta for images returns incorrect width/height
204
- * Fix: PHP warning when uploading files in Settings Pages extension.
205
- * Fix: Blank space in the footer when using plupload_image.
206
- * Fix: Cloning wysiwyg when deleting the 1st clone
207
-
208
- = 4.8.7 =
209
- * Improvement: Refactor the code to reduce the complexity in the fields' inheritance
210
- * Improvement: All HTML 5 input types (week, month, etc.) are supported
211
- * Improvement: Optimize the_value function, use recursive call to reduce nested loop. Sub-fields need to define format_single_value only.
212
- * Improvement: Use 1 single localization file for jQuery date picker for simplicity
213
- * Improvement: Add support for custom marker for map field (param `marker_icon`) in rwmb_meta function
214
- * Improvement: Add `limit` option for media fields in `rwmb_meta` function when retrieving meta value.
215
- * Improvement: Add `rwmb_option_label` filter for choice fields (user, post, taxonomy) so users can choose which object field is used as label
216
- * Improvement: Use `WP_User_Query` for user field which supports more options for querying
217
- * Improvement: Optimize code for oembed, also use esc_html__ for better security
218
- * Improvement: Compatibility with Meta Box Geolocation
219
- * Fix: Fix first option is auto selected in select_advanced field.
220
- * Fix: Fix clone issue for color in Meta Box Group extension.
221
- * Fix: Fix clone issue for image advanced in Meta Box Group extension.
222
- * Fix: Fix not parsing $args to array in helper functions.
223
-
224
- = 4.8.6 =
225
- * Improvement: Edit link on media items now opens edit modal
226
- * Improvement: Refresh map when sorting meta boxes.
227
- * Improvement: Wrap checkbox's description into a <label> to make it clickable to activate/deactivate the checkbox.
228
- * Improvement: Remove Spanish language (ES) as it's already translated on translate.wordpress.org
229
- * Improvement: Add support for saving zoom in map
230
- * Improvement: Prevent output localized strings twice.
231
- * Improvement: Add fallback for autoload in PHP 5.2 in case it's disabled.
232
- * Improvement: No need to json_encode for custom attributes. User can pass an array to custom attribute
233
- * Improvement: Add style for `select2` library to match WordPress admin style
234
- * Improvement: Adds min width to select. @prop ahmadawais
235
- * Improvement: Added `max_status` option for media type fields. `true` to show status, `false` to hide
236
- * Improvement: Add attachment meta data to file info
237
- * Fix: Validation for non-Meta Box fields
238
- * Fix: advanced_image field after reload page F5 in Firefox
239
- * Fix: Cannot read property 'getFullYear' of null
240
- * Fix: Empty date converting to 0
241
- * Fix: Add missing class for image_select field which prevents setting input's name when cloning.
242
- * Fix: Fix bug with blank maps on the front end
243
- * Fix: Fix bug with cloning media fields
244
- * Fix: Remove empty values in clones and reset index.
245
- * Fix: Reset of cloned select fields
246
- * Fix: select_advanced with multiple=true adds empty selected option
247
- * Fix: No empty option for simple select field
248
- * Fix: Empty datetime field with timestamp => true returns January 1, 1970
249
- * Fix: For color picker when using with Columns extension
250
- * Fix: Fix bug with taxonomy advanced returns all taxonomy items for posts with no meta saved
251
- * Fix: Fix bug with taxonomy advanced not saving value when field isn't multiple
252
- * Fix: Make radio inline again
253
- * Fix: Wrong meta value when using helper function outside the loop
254
- * Fix: Validation now works for hidden elements in tabs
255
-
256
- = 4.8.5 =
257
- * Improvement: Add localization for Select2 library
258
- * Improvement: Range preview output added
259
- * Improvement: Add Persian translation and nag fix
260
- * Fix: Map has no refresh in collapsed meta boxes
261
- * Fix: Fix incorrect URL if the plugin is symlinked.
262
- * Fix: Added fix for saved order in object-choice
263
-
264
- = 4.8.4 =
265
- * Improvement: Refactor code for plupload_image. Introduces file_upload and image_upload field which acts the same as plupload_image but for files and images.
266
- * Improvement: Do not show "Embed is not available" if fields don't have any value
267
- * Improvement: Refactor date/time related fields. 'timestamp' now works for date field as well.
268
- * Improvement: Add 'inline' mode for date/datetime fields.
269
- * Improvement: Add option 'select_all_none' for select/select2 with default = false
270
- * Fix: users now can register 2 meta boxes with same field IDs for different post types.
271
- * Fix: width of embeded video if $content_width is too large.
272
- * Fix: autoloader now works more safely.
273
- * Fix: post field doesn't show correct post link
274
- * Fix: select field must call field's get_value to get field's value as 'select' is used in many non-inherited classes
275
- * Fix: Allows old syntax for `query_args.post_types` for post/user/taxonomy fields
276
- * Fix: Do not reset value for hidden field when clone
277
- * Fix: Missing Insert into Post button for thickbox_image field
278
- * Fix: Date picker cut off by TinyMCE
279
- * Fix: CSS for multi months in date picker
280
-
281
- = 4.8.3 =
282
- * Improvement: WYSIWYG field now can be cloned. Sorting clone hasn't worked yet.
283
- * Fix: 'std' value not working if there is 'divider' or 'heading' field withough 'id'
284
- * Fix: helper function not working in AJAX or admin.
285
- * Fix: getting plugin's path on Windows system.
286
- * Fix: warning get_value of taxonomy field
287
- * Fix: guarantee file ids are in an array
288
-
289
- = 4.8.2 =
290
- * Fix: re-add code for backward compatibility for helper function
291
- * Fix: undefined 'class' attribute for button
292
- * Improvement: speedup the helper function
293
-
294
- = 4.8.1 =
295
-
296
- * Fix: select multiple value with post, user and taxonomy
297
- * Fix: bug in oembed field
298
- * Fix: fix JS/CSS compatibility with WooCommerce
299
- * Fix: do not force field ID to lowercase, which can potentially breaks existing fields or fields with ID of CAPS characters.
300
-
301
- = 4.8.0 =
302
-
303
- * Improvement: rewrite the way the plugin loads file, which allows developers to include the plugin into themes/plugins simply by include the main file. The new loading mechanism also uses autoloading feature which prevents loading files twice and saves memory.
304
- * Improvement: rewrite `user`, `post`, `taxonomy` fields using the same codebase as they're native WordPress objects and sharing similar options. Also changes the syntax of query parameters for these fields (old syntax still works). Please see docs for details.
305
- * Improvement: add `srcset` in the returned value of helper function for image fields
306
- * Improvement: better sanitize value for `url` field
307
- * Improvement: prevent issues with dashes in field types
308
- * Improvement: remove redundant value in checkbox
309
- * Improvement: update CSS for date, time fields
310
- * Improvement: select2 now updated to 4.0.1
311
- * Improvement: optimize code for `file_advanced` and `image_advanced` fields which now submit array of values when saving instead of single CSV value
312
- * Improvement: add `collapse` option to `checkbox_list` and `checkbox_tree` in `user`, `taxonomy`, `post` fields which prevents plugin save parent values.
313
- * Improvement: secure password field so it is no longer saved in plain text. To check if a password matches the hash, please use `wp_check_password`.
314
- * Improvement: change the output of `color` field in the helper function. Now it shows the color instead of hex value.
315
- * Improvement: add `color:change` and `color:clear` JavaScript event for detecting changes in `color` field.
316
- * Improvement: refactor code for better structure and security
317
- * Fix: rewrite the JavaScript for cloning which causes bugs for date field.
318
- * Fix: fix missing attributes if value is '0' or 0.
319
- * Fix: add missing `class` attribute for fields
320
- * Fix: do not auto populate color field with '#'
321
- * Fix: wrong callback for fix page template
322
-
323
-
324
- = 4.7.3 =
325
-
326
- * Improvement: add `change` event for `file_advanced` and `image_advanced` fields.
327
- * Improvement: add support for boolean attributes.
328
- * Improvement: add support for boolean attributes.
329
- * Improvement: add Russian language.
330
- * Improvement: changed `wp_get_post_terms` to `get_the_terms` to use WordPress cache.
331
- * Improvement: refactored code to make textarea, select use attributes.
332
- * Improvement: `fieldset_text` now cloneable. Also removed `rows` option for this field.
333
- * Improvement: refactored `has_been_saved()` function.
334
-
335
- = 4.7.2 =
336
-
337
- * Fix: notice undefined index in date, time fields.
338
-
339
- = 4.7.1 =
340
-
341
- * Fix: remove default `maxlength = 30` for text fields.
342
-
343
- = 4.7 =
344
-
345
- * Improvement: add `attributes` for all input fields (text, number, email, ...) so users can add any custom attributes for them. Also added default attributes `required`, `disabled`, `readonly`, `maxlength` and `pattern` for those fields as well. These attributes will be merged into the `attributes`.
346
- * Improvement: add `js_options` for color field which allows users to define custom color palettes and other attributes for color picker. See the options in [Iris page](http://automattic.github.io/Iris/).
347
- * Fix: fix for file and image uploaded via `file_advanced` and `image_advanced` not showing up.
348
-
349
- = 4.6 =
350
-
351
- * Improvement: the plugin translation is now handled in translate.wordpress.org. While the plugin keeps old translation as backward compatibility, it's recommended to translate everything in translate.wordpress.org. Language packs will be automatically updated by WordPress.
352
- * Improvement: rewrite code for `file_advanced` and `image_advanced`, which share the same code base. These fields are now clonable and not autosave (you have to save post to save files)! Props @funkatronic.
353
- * Improvement: restyle clone icon, sort clone icon and add clone button for better UI. The new UI now is compatible with `color` and `date` fields
354
- * Improvement: separate validation module into 1 class, for better code structure
355
- * Improvement: add `pattern` attribute for `url` field
356
- * Improvement: improve code quality
357
- * Fix: missing "checked" when clone radio
358
- * Fix: language file name for Dutch
359
- * Fix: oembed not render preview if provider is added via `wp_embed_register_handler`
360
-
361
- = 4.5.7 =
362
- * Fix: Always set std as value for hidden field
363
- * Fix: `rwmb_meta` now can display rich content from `oembed` field
364
- * Fix: Wrong format for `datetime` field
365
- * Fix: Check and reset clone index when add/remove/sort clones
366
- * Improvement: Optionally display ID attribute for heading and divider
367
- * Improvement: Adding new style to date field to match WordPress style
368
- * Improvement: Change saving hooks to specific post types to prevent saving images to wrong post
369
-
370
- = 4.5.6 =
371
- * Fix: Warning for timestamp for datetime field.
372
- * Fix: z-index for color picker.
373
- * Fix: Marker title in map
374
-
375
- = 4.5.5 =
376
- * Fix: CSS alignment for sort clone icon for field type `group` (require Meta Box Group extension)
377
- * Fix: rwmbSelect is not defined
378
-
379
- = 4.5.4 =
380
- * Improvement: Add "Select All|None" for `select`, `select_advanced`, `post` fields
381
- * Improvement: Add `max_clone` parameter which limits number of clones
382
- * Improvement: Add `sort_clone` parameter which allows users to sort (drag and drop) cloned inputs
383
- * Improvement: Add Polish language. Thank Michael
384
- * Fix: Prevent warning when post type doesn't exist (`post` field)
385
-
386
- = 4.5.3 =
387
- * Improvement: Use `wp_json_encode` instead of `json_encode`. Thank Sam Ford.
388
- * Fix: Escape value for cloneable fields
389
- * Fix: Notice for missing parameters for `rwmb_meta` field for `map`
390
-
391
-
392
- = 4.5.2 =
393
- * Improvement: Add Persian (Farsi) language. Thank Ahmad Azimi.
394
- * Improvement: Update Spanish translation. Thank David Perez.
395
- * Fix: Cloning text fields
396
- * Fix: rwmb_meta works incorrectly for image fields if multiple=false
397
-
398
- = 4.5.1 =
399
- * Improvement: Add ability to use multiple post types for `post` field
400
- * Fix: Duplicated description for `checkbox` field
401
- * Fix: Blank gallery for image fields
402
-
403
- = 4.5 =
404
- * Improvement: Separate `esc_meta` method
405
- * Improvement: Add ability to use URL to retrieve options for autocomplete field
406
- * Improvement: Add `rwmb_get_field` and `rwmb_the_field` functions to get and display field values in the frontend
407
- * Improvement: Add field type `custom_html` to display any HTML in the meta box
408
- * Improvement: Add field type `key_value` which allows users to add any number of key-value pairs
409
- * Improvement: Use single JS file to display Google Maps in the frontend. No more inline Javascript.
410
- * Improvement: Code refactor
411
-
412
- = 4.4.3 =
413
- * Fix: Incorrect path to loader image for `plupload_image`
414
- * Fix: Missing placeholder for `post` field when `field_type` = `select`
415
- * Improvement: No errors showing if invalid value is returned from `rwmb_meta_boxes` filter
416
- * Improvement: Add filter for add/remove clone buttons text
417
- * Improvement: Add French translation
418
-
419
- = 4.4.2 =
420
- * Fix: Values of text_list field not showing correctly
421
- * Fix: Time picker field cannot select hour > 22, time > 58
422
- * Fix: Notice error when showing fields which don't have ID
423
- * Fix: Don't return non-existing files or images via rwmb_meta function
424
- * Fix: CSS alignment for taxonomy tree
425
- * Fix: Placeholder not working for "select" taxonomy
426
- * Improvement: Update timepicker to latest version
427
- * Improvement: Improve output markup for checkbox field
428
-
429
- = 4.4.1 =
430
- * Fix: wrong text domain
431
- * Fix: `select_advanced` field not cloning
432
- * Fix: cloned emails are not saved
433
- * Improvement: Use `post_types` instead of `pages`, accept string for single post type as well. Fallback to `pages` for previous versions.
434
-
435
- = 4.4.0 =
436
- * New: 'autocomplete' field.
437
- * Improvement: field id is now optional (heading, divider)
438
- * Improvement: heading now supports 'description'
439
- * Improvement: update select2 library to version 3.5.2
440
- * Improvement: coding standards
441
-
442
- = 4.3.11 =
443
- * Bug fix: use field id instead of field_name for wysiwyg field
444
- * Improvement: allow to sort files
445
- * Improvement: use 'meta-box' text domain instead of 'rwmb'
446
- * Improvement: coding standards
447
-
448
- = 4.3.10 =
449
- * Bug fix: upload & reorder for image fields
450
- * Bug fix: not saving meta caused by page template issue
451
- * Bug fix: filter names for helper and shortcode callback functions
452
- * Bug fix: loads correct locale JS files for jQueryUI date/time picker
453
-
454
- = 4.3.9 =
455
- * Bug fix: `text-list` field type
456
- * Improvement: better coding styles
457
- * Improvement: wysiwyg field is now clonable
458
- * Improvement: launch geolocation autocomplete when address field is cloned
459
- * Improvement: better cloning for radio, checkbox
460
- * Improvement: add more hooks
461
- * Improvement: allow child fields to add their own add/remove clone buttons.
462
- * Improvement: remove 'clone-group'. Too complicated and not user-friendly.
463
-
464
- = 4.3.8 =
465
- * Bug fix: compatibility with PHP 5.2
466
-
467
- = 4.3.7 =
468
- * Bug fix: use WP_Query instead of `query_posts` to be compatible with WPML
469
- * Bug fix: `get_called_class` function in PHP < 5.3
470
- * Bug fix: clone now works for `slider` field
471
- * Bug fix: fix cloning URL field
472
- * Bug fix: hidden drop area if no max_file_uploads defined
473
- * Improvement: added composer.json
474
- * Improvement: add Chinese language
475
- * Improvement: better check for duplication when save post
476
- * Improvement: new `image_select` file, which is "radio image", e.g. select a radio value by selecting image
477
- * Improvement: new `file_input` field, which allows to upload files or enter file URL
478
- * Improvement: separate core code for meta box and fields
479
- * Improvement: allow to add more map options in helper function
480
- * Improvement: allow to pass more arguments to "get_terms" function when getting meta value with "rwmb_meta"
481
-
482
- = 4.3.6 =
483
- * Bug fix: fatal error in PHP 5.2 (continue)
484
- * Improvement: allow register meta boxes via filter
485
-
486
- = 4.3.5 =
487
- * Bug fix: fatal error in PHP 5.2
488
- * Bug fix: save empty values of clonable fields
489
-
490
- = 4.3.4 =
491
- * Bug fix: not show upload button after delete image when reach max_file_upload. #347
492
- * Bug fix: autocomplete for map which conflicts with tags (terms) autocomplete
493
- * Bug fix: random image order when reorder
494
- * Bug fix: undefined index, notices in WordPress 3.6, notice error for oembed field
495
- * Improvement: add default location for map field (via `std` param as usual)
496
- * Improvement: add `placeholder` for text fields (url, email, etc.)
497
- * Improvement: add `multiple` param for helper function to get value of multiple fields
498
- * Improvement: `width` & `height` for map in helper function now requires units (allow to set %)
499
- * Drop support for WordPress 3.3 (wysiwyg) and < 3.5 (for file & image field which uses new json functions)
500
-
501
- = 4.3.3 =
502
- * Bug fix: cannot clear all terms in taxonomy field
503
- * Bug fix: potential problem with autosave
504
- * Bug fix: cannot save zero string value "0"
505
- * Improvement: add Turkish language
506
- * Improvement: add taxonomy_advanced field, which saves term IDs as comma separated value in custom field
507
-
508
- = 4.3.2 =
509
- * Bug fix: allow to have more than 1 map on a page
510
- * Bug fix: use HTTPS for Google Maps to work both in HTTP & HTTPS
511
- * Bug fix: allow to clear all terms in taxonomy field
512
- * Bug fix: "std" value for select fields is no longer "placeholder"
513
- * Improvement: add "placeholder" param for select fields
514
- * Improvement: add to helper function ability to show Google Maps in the front end. Check documentation for usage.
515
- * Improvement: add spaces between radio inputs
516
- * Improvement: add more params to "rwmb_meta" filter
517
- * Improvement: using CSS animation for delete image
518
-
519
- = 4.3.1 =
520
- * Bug fix: fatal error if ASP open tag is allowed in php.ini
521
-
522
- = 4.3 =
523
- * Bug fix: show full size image after upload if thumbnail is not available
524
- * Bug fix: new added file not shown
525
- * Bug fix: issue with color field disappearing
526
- * Bug fix: `max_file_upload` now works for normal `file` & `image` as well
527
- * Bug fix: problem with uploading with the advanced fields
528
- * Bug fix: file & image advanced not saving
529
- * Bug fix: `select_advanced` cloning issue
530
- * Bug fix: `plupload_image` ordering
531
- * Improvement: add `divider`, `heading`, `button`, `range`, `oembed`, `email`, `post` fields
532
- * Improvement: translation for file & image fields
533
- * Improvement: add option `default_hidden` to hide meta box by default
534
- * Improvement: allow to have multiple maps on the same page
535
- * Improvement: file and image advanced now use Underscore.js
536
- * Improvement: `slider` filed now has `prefix` and `suffix` for text labels and `js_options` for more JS options
537
- * Improvement: WYSIWYS can bypass the `wpautop` using `raw` parameter
538
- * Improvement: `color` field now supports new color picker in WP 3.5
539
- * Improvement: add `ID` to results returned by `rwmb_meta` when getting meta value of file & image
540
- * Improvement: auto use localized version for date & time fields
541
- * Improvement: add `timestamp` option to save the datetime as unix timestamp internally
542
- * Improvement: add `autosave` option for meta box
543
- * Improvement: add `force_delete` option for file and image field
544
- * And lots of changes and improvements
545
-
546
-
547
- = 4.2.4 =
548
- * Bug fix: path to Select2 JS and CSS. [Link](http://wordpress.org/support/topic/missing-files-5)
549
- * Bug fix: `taxonomy.js` loading
550
- * Bug fix: saving in quick mode edit
551
- * Improvement: add `before` and `after` attributes to fields that can be used to display custom text
552
- * Improvement: add Arabic and Spanish languages
553
- * Improvement: add `rwmb*_before_save_post` and `rwmb*_before_save_post` actions before and after save post
554
- * Improvement: add autocomplete for geo location in `map` field, add fancy animation to drop marker
555
- * Improvemnet: add `url` field
556
-
557
-
558
- = 4.2.3 =
559
- * Bug fix: clone date field. [Link](http://www.deluxeblogtips.com/forums/viewtopic.php?id=299)
560
-
561
- = 4.2.2 =
562
- * Bug fix: `time` field doesn't work. [Link](http://wordpress.org/support/topic/time-field-js-wont-run-without-datetime)
563
- * Bug fix: wrong JS call for `datetime`. [Link](http://wordpress.org/support/topic/421-datetime)
564
- * Improvement: file and images now not deleted from library, *unless* use `force_delete` option
565
- * Improvement: add `select_advanced` field, which uses [select2](http://ivaynberg.github.com/select2/) for better UX. Thanks @funkedgeek
566
-
567
- = 4.2.1 =
568
- * Bug fix: not save wysiwyg field in full screen mode. [Link](http://www.deluxeblogtips.com/forums/viewtopic.php?id=161)
569
- * Bug fix: default value for select/checkbox_list. [Link](http://www.deluxeblogtips.com/forums/viewtopic.php?id=174)
570
- * Bug fix: duplicated append test to `date` picker
571
- * Bug fix: incorrect enqueue styles, issue #166
572
- * Improvement: initial new field type `map`
573
-
574
- = 4.2 =
575
- * Bug fix: save only last element of `select` field with `multiple` values. [Link](http://wordpress.org/support/topic/plugin-meta-box-multiple-declaration-for-select-fields-no-longer-working?replies=5#post-3254534)
576
- * Improvement: add `js_options` attribute for `date`, `datetime`, `time` fields to adjust jQuery date/datetime picker options. See `demo/demo.php` for usage
577
- * Improvement: add `options` attribute for `wysiwyg`. You now can pass arguments same as for `wp_editor` function
578
- * Improvement: clone feature now works with `checkbox_list` and `select` with `multiple` values
579
- * Improvement: add `rwmb-{$field_type}-wrapper` class to field markup
580
- * Improvement: Add [rwmb_meta meta_key="..."] shortcode. Attributes are the same as `rwmb_meta` function.
581
- * Code refactored
582
-
583
- = 4.1.11 =
584
- * Bug fix: helper function for getting `taxonomy` field type
585
- * Bug fix: `multiple` attribute for `select` field type
586
-
587
- = 4.1.10 =
588
- * Allow helper functions can be used in admin area
589
- * Allow cloned fields to have a uniquely indexed `name` attribute
590
- * Add Swedish translation
591
- * Allow hidden field has its own value
592
- * Taxonomy field now supported by `rwmb_meta` function
593
- * Improvement in code format and field normalizing
594
-
595
- = 4.1.9 =
596
- * Add helper function to retrieve meta values
597
- * Add basic validation (JS based)
598
- * Fix image reorder bug
599
- * Fix `select_tree` option for taxonomy field
600
- * Fix not showing loading image for 1st image using plupload
601
-
602
- = 4.1.8 =
603
- * Add missed JS file for thickbox image
604
-
605
- = 4.1.7 =
606
- * Quick fix for thickbox image
607
-
608
- = 4.1.6 =
609
- * Quick fix for checkbox list and multiple/clonable fields
610
-
611
- = 4.1.5 =
612
- * Taxonomy field is now in core
613
- * Add demo for including meta boxes for specific posts based on IDs or page templates
614
- * Meta box ID is now optional
615
- * Add `thickbox_image` field for uploading image with WP style
616
- * Fix `guid` for uploaded images
617
-
618
- = 4.1.4 =
619
- * Fix taxonomy field
620
-
621
- = 4.1.3 =
622
- * Support max_file_uploads for plupload_image
623
- * Better enqueue styles & scripts
624
- * Store images in correct order after re-order
625
- * Fix cloning color, date, time, datetime fields
626
-
627
- = 4.1.2 =
628
- * Improve taxonomy field
629
- * Add filter to wp_editor
630
- * Add more options for time field
631
- * Improve plupload_image field
632
- * Fix translation, use string for textdomain
633
-
634
- = 4.1.1 =
635
- * Fix translation
636
- * Change jQueryUI theme to 'smoothness'
637
- * Add more demos in the `demo` folder
638
-
639
- = 4.1 =
640
- * Added jQuery UI slider field
641
- * Added new Plupload file uploader
642
- * Added new checkbox list
643
- * Fix empty jQuery UI div seen in FF in admin footer area
644
- * Fix style for 'side' meta box
645
-
646
- = 4.0.2 =
647
- * Reformat code to make more readable
648
- * Fix bugs of checkbox field and date field
649
-
650
- = 4.0.1 =
651
- * Change format_response() to ajax_response() and use WP_Ajax_Response class to control the ajax response
652
- * Use wp_editor() built-in with WP 3.3 (with fallback)
653
-
654
- = 4.0 =
655
- * strongly refactor code
656
- * create/check better nonce for each meta box
657
- * use local JS/CSS libs instead of remote files for better control if conflict occurs
658
- * separate field functions (enqueue scripts and styles, add actions, show, save) into separated classes
659
- * use filters to let user change HTML of fields
660
- * use filters to validate/change field values instead of validation class
661
- * don't use Ajax on image upload as it's buggy and complicated. Revert to default upload
662
-
663
- = 3.2.2 =
664
- * fix WYSIWYG field for custom post type without 'editor' support. Thanks Jamie, Eugene and Selin Online. (http =//disq.us/2hzgsk)
665
- * change some helper function to static as they're shared between objects
666
-
667
- = 3.2.1 =
668
- * fix code for getting script's url in Windows
669
- * make meta box id is optional
670
-
671
- = 3.2 =
672
- * move js and css codes to separated files (rewrite js code for fields, too)
673
- * allow to add multiple images to image meta field with selection, modified from "Fast Insert Image" plugin
674
- * remove 'style' attibutes for fields as all CSS rules now can be put in the 'meta=box.css' file. All fields now has the class 'rw=$type', and table cells have class 'rwmb=label' and 'rwmb=field'
675
- * allow to use file uploader for images as well, regarding http =//disq.us/1k2lwf
676
- * when delete uploaded images, they're not deleted from the server (in case you insert them from the media, not the uploader). Also remove hook to delete all attachments when delete post. Regarding http =//disq.us/1nppyi
677
- * change hook for adding meta box to 'add_meta_boxes', according Codex. Required WP 3.0+
678
- * fix image uploading when custom post type doesn't support "editor"
679
- * fix show many alerts when delete files, regarding http =//disq.us/1lolgb
680
- * fix js comma missing bug when implement multiple fields with same type
681
- * fix order of uploaded images, thank Onur
682
- * fix deleting new uploaded image
683
- * fix bug when save meta value = zero (0), regarding http =//disq.us/1tg008
684
- * some minor changes such as = add 'id' attribute to fields, show uploaded images as thumbnail, add script to header of post.php and post=new.php only
685
-
686
- = 3.1 =
687
- * use thickbox for image uploading, allow user edit title, caption or crop, rotate image (credit to Stewart Duffy, idea from Jaace http =//disq.us/1bu64d)
688
- * allow to reorder uploaded images (credit to Kai)
689
- * save attach ID instead of url (credit to Stewart Duffy)
690
- * escape fields value (credit to Stewart Duffy)
691
- * add 'style' attribute to fields, allow user quick style fields (like height, width, etc.) (credit to Anders Larsson http =//disq.us/1eg4kp)
692
- * wrap ajax callbacks into the class
693
- * fix jquery UI conflict (for time picker, color picker, contextual help)
694
- * fix notice error for checking post type
695
-
696
- = 3.0.1 =
697
- * save uploaded images and files' urls in meta fields
698
- * fix date picker bug to not show saved value (http =//disq.us/1cg6mx)
699
- * fix check_admin_referer for non=supported post types (http =//goo.gl/B6cah)
700
- * refactor code for showing fields
701
-
702
- = 3.0 =
703
- * separate functions for checking, displaying and saving each type of field; allow developers easily extend the class
704
- * add 'checkbox_list' (credit to Jan Fabry http =//goo.gl/9sDAx), 'color', 'date', 'time' types. The 'taxonomy' type is added as an example of extending class (credit to Manny Fresh http =//goo.gl/goGfm)
705
- * show uploaded files as well as allow to add/delete attached files
706
- * delete attached files when post is deleted (credit to Kai http =//goo.gl/9gfvd)
707
- * validation function MUST return the value instead of true, false
708
- * change the way of definition 'radio', 'select' field type to make it more simpler, allow multiple selection of select box
709
- * improved some codes, fix code to not show warnings when in debugging mode
710
-
711
- = 2.4.1 =
712
- * fix bug of not receiving value for select box
713
-
714
- = 2.4 =
715
- * (image upload features are credit to Kai http =//twitter.com/ungestaltbar)
716
- * change image upload using meta fields to using default WP gallery
717
- * add delete button for images, using ajax
718
- * allow to upload multiple images
719
- * add validation for meta fields
720
-
721
- = 2.3 =
722
- * add wysiwyg editor type, improve check for upload fields, change context and priority attributes to optional
723
-
724
- = 2.2 =
725
- * add enctype to post form (fix upload bug), thanks to http =//goo.gl/PWWNf
726
-
727
- = 2.1 =
728
- * add file upload, image upload support
729
-
730
- = 2.0 =
731
- * oop code, support multiple post types, multiple meta boxes
732
-
733
- = 1.0 =
734
- * procedural code
735
 
736
  == Upgrade Notice ==
1
  === Meta Box ===
2
  Contributors: metabox, rilwis, fitwp, f-j-kaiser, funkatronic, PerWiklander, ruanmer, Omnicia
3
+ Donate link: https://metabox.io/pricing/
4
  Tags: meta-box, custom fields, custom field, meta, meta-boxes, admin, advanced, custom, edit, field, file, image, magic fields, matrix, more fields, Post, repeater, simple fields, text, textarea, type, cms, fields post
5
+ Requires at least: 4.3
6
+ Tested up to: 4.9.4
7
+ Stable tag: 4.14.2
8
  License: GPLv2 or later
9
 
10
  Meta Box plugin is a powerful, professional developer toolkit to create custom meta boxes and custom fields for WordPress.
17
 
18
  With the extensions, you can easily build meta boxes not only for custom post types (default), but also for **settings page, user meta, term meta**. You can also display the fields the way you want with columns, tabs or groups.
19
 
20
+ The plugin requires a little coding, but if you're not familiar with coding or prefer GUI for faster creating custom post types, meta boxes and custom fields, you can use our [Online Generator](https://metabox.io/online-generator/) or use the extensions [MB Custom Post Type](https://wordpress.org/plugins/mb-custom-post-type/) or [Meta Box Builder](https://metabox.io/plugins/meta-box-builder/).
21
 
22
  ### Features
23
 
24
+ #### Create any type of meta data
25
+
26
  * Create custom meta boxes for posts, pages or any custom post type.
27
  * Create custom [settings pages or theme option page](https://metabox.io/plugins/mb-settings-page/).
28
  * Create custom meta boxes for [user profile pages](https://metabox.io/plugins/mb-user-meta/).
29
  * Create custom meta boxes for [taxonomy terms](https://metabox.io/plugins/mb-term-meta/).
30
+
31
+ #### Wide-range of field types and options
32
+
33
+ * Supports 40+ built-in [field types](https://docs.metabox.io/field-settings/) for all your needs (text, textarea, wysiwyg/editor, image, file, post, select, checkbox, radio buttons, date time picker, taxonomy, user, oembed and more to come!). You can also [create your own field type](https://docs.metabox.io/custom-field-type/) easily.
34
  * Support cloning (repeatable) fields for most field types, including WYSIWYG/editor field. Also support [repeatable field groups](https://metabox.io/plugins/meta-box-group/).
35
+ * Powerful [actions](https://docs.metabox.io/actions/) and [filters](https://docs.metabox.io/filters/) that developers can build or change the appearance and behavior in the plugin.
36
+
37
+ #### Create meta boxes and custom fields with UI
38
+
39
+ The plugin is built mostly for developers with a little coding, but if you prefer GUI for faster creating custom post types, meta boxes and custom fields, the plugin has extensions for that:
40
+
41
+ - [Online Generator](https://metabox.io/online-generator/)
42
+ - [MB Custom Post Type](https://wordpress.org/plugins/mb-custom-post-type/)
43
+ - [Meta Box Builder](https://metabox.io/plugins/meta-box-builder/)
44
+
45
+ <blockquote>To make it easy for all users to create custom meta boxes and custom fields, we have created an <a href="https://metabox.io/online-generator/">Online Generator</a> tool. It has an user-friendly interface with drag and drop features. No custom code anymore!</blockquote>
46
+
47
+ #### Developer-friendly
48
+
49
+ * Uses the [native WordPress meta data storage](https://docs.metabox.io/database/) and functions for ease of use and fast processing.
50
+ * [Easily integrate with themes and plugins](https://docs.metabox.io/integration/).
51
+ * [Works with Composer](https://docs.metabox.io/composer/) if you want to include the plugin in your project.
52
  * Compatible with WPML multilingual plugin (officially supported by WPML team).
53
 
54
+ #### Detailed Documentation
55
 
56
+ We provide regular updated and extensive documentation. Not only technical things, but also tutorials on how to use the plugin better.
 
 
 
57
 
58
+ - [Quick Start Guide](https://docs.metabox.io/quick-start/)
59
+ - [Creating Meta Boxes](https://docs.metabox.io/creating-meta-boxes/)
60
+ - [Field Settings](https://docs.metabox.io/field-settings/)
61
+ - [Displaying Fields](https://docs.metabox.io/displaying-fields/)
62
+
63
+ See more documentation [here](https://docs.metabox.io).
64
 
65
  ### Extensions
66
 
67
+ #### Free Extensions
68
+
 
 
 
69
  - [MB Custom Post Type](https://wordpress.org/plugins/mb-custom-post-type/): Create and manage custom post types and taxonomies easily in WordPress with an easy-to-use interface.
70
+ - [MB Relationships](https://wordpress.org/plugins/mb-relationships/): Create many-to-many relationships from posts to posts.
71
  - [Meta Box Yoast SEO](https://wordpress.org/plugins/meta-box-yoast-seo/): Add content of custom fields to Yoast SEO Content Analysis to have better/correct SEO score.
72
+ - [MB Rest API](https://metabox.io/plugins/mb-rest-api/): Pull all meta value from posts, terms into the WP REST API responses.
73
+ - [MB Comment Meta](https://wordpress.org/plugins/mb-comment-meta/): Add custom fields to comments in WordPress. Support all field types and options.
74
+ - [MB Custom Taxonomy](https://metabox.io/plugins/custom-taxonomy/): Create and manage custom taxonomies with an easy-to-use interface in WordPress.
75
  - [Meta Box Text Limiter](https://wordpress.org/plugins/meta-box-text-limiter/): Limit the number of characters or words entered for text and textarea fields.
76
+ - [Meta Box FacetWP Integrator](https://metabox.io/plugins/meta-box-facetwp-integrator/): Integrates Meta Box and FacetWP, makes custom fields searchable and filterable in the frontend.
77
+
78
+ #### Premium Extensions
79
+
80
  - [Meta Box Builder](https://metabox.io/plugins/meta-box-builder/): Create custom meta boxes and custom fields in WordPress using the drag-and-drop interface.
81
+ - [Meta Box Group](https://metabox.io/plugins/meta-box-group/): Create repeatable groups of custom fields for better appearance and structure.
82
+ - [MB Settings Page](https://metabox.io/plugins/mb-settings-page/): Create settings pages for themes, plugins or websites with beautiful syntax.
83
+ - [MB Term Meta](https://metabox.io/plugins/mb-term-meta/): Add meta data to categories, tags or any custom taxonomy with simple syntax.
84
+ - [Meta Box Conditional Logic](https://metabox.io/plugins/meta-box-conditional-logic/): Add visibility dependency for custom meta boxes and custom fields in WordPress.
85
+ - [Meta Box Include Exclude](https://metabox.io/plugins/meta-box-include-exclude/): Show/hide meta boxes by ID, page template, taxonomy or custom function.
86
+ - [MB Frontend Submission](https://metabox.io/plugins/mb-frontend-submission/): Create frontend forms for users to submit custom content. Embed everywhere with shortcode.
87
+ - [Meta Box Columns](https://metabox.io/plugins/meta-box-columns/): Display fields more beautiful by putting them into 12-columns grid.
88
+ - [Meta Box Tabs](https://metabox.io/plugins/meta-box-tabs/): Create tabs for meta boxes easily. Support 3 WordPress-native tab styles and tab icon.
89
+ - [MB Admin Columns](https://metabox.io/plugins/mb-admin-columns/): Display custom fields in table columns in admin screens for All Posts (types).
90
+ - [MB Custom Table](https://metabox.io/plugins/mb-custom-table/): Save custom fields data to custom table instead of the default meta tables. Reduce database size and increase performance.
91
+ - [MB Revision](https://metabox.io/plugins/mb-revision/): Track changes of custom fields with WordPress revision. Save, compare, restore the changes easily.
92
+ - [MB User Meta](https://metabox.io/plugins/mb-user-meta/): Add custom fields to user profile (user meta) quickly with simple syntax.
93
+ - [Meta Box Geolocation](https://metabox.io/plugins/meta-box-geolocation/): Automatically and instantly populate location data with the power of Google Maps Geolocation API.
94
  - [Meta Box Template](https://metabox.io/plugins/meta-box-template/): Define custom meta boxes and custom fields easier with templates.
95
  - [Meta Box Tooltip](https://metabox.io/plugins/meta-box-tooltip/): Display help information for fields using beautiful tooltips.
96
+ - [Meta Box Show Hide](https://metabox.io/plugins/meta-box-show-hide-javascript/): Toggle meta boxes by page template, post format, taxonomy (including category) via Javascript.
 
 
 
97
 
98
  See all extensions [here](https://metabox.io/plugins/).
99
 
100
  ### Plugin Links
101
 
102
  - [Project Page](https://metabox.io)
103
+ - [Documentation](https://docs.metabox.io)
104
+ - [Report Bugs/Issues](https://github.com/wpmetabox/meta-box/issues)
105
+ - [Premium Extensions](https://metabox.io/plugins/)
106
 
107
  == Installation ==
108
 
109
+ From within WordPress
110
+
111
+ 1. Visit **Plugins > Add New**
112
+ 1. Search for **Meta Box**
113
+ 1. Click the **Install Now** button to install the plugin
114
+ 1. Click the **Activate** button to activate the plugin
115
+
116
+ Manually
117
+
118
  1. Unzip the download package
119
  1. Upload `meta-box` to the `/wp-content/plugins/` directory
120
  1. Activate the plugin through the 'Plugins' menu in WordPress
121
 
122
+ To getting started with the plugin, please read [this tutorial](https://docs.metabox.io/quick-start/).
123
 
124
  == Frequently Asked Questions ==
125
 
133
 
134
  == Changelog ==
135
 
136
+ [See full changelog here](https://github.com/wpmetabox/meta-box/blob/master/CHANGELOG.md).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
137
 
138
  == Upgrade Notice ==
inc/lp-constants.php CHANGED
@@ -4,7 +4,7 @@
4
  */
5
  $upload_dir = wp_upload_dir();
6
  // version
7
- define( 'LEARNPRESS_VERSION', '3.0.6' );
8
 
9
  define( 'LP_WP_CONTENT', basename( WP_CONTENT_DIR ) );
10
 
4
  */
5
  $upload_dir = wp_upload_dir();
6
  // version
7
+ define( 'LEARNPRESS_VERSION', '3.0.7' );
8
 
9
  define( 'LP_WP_CONTENT', basename( WP_CONTENT_DIR ) );
10
 
inc/lp-core-functions.php CHANGED
@@ -1288,7 +1288,7 @@ function learn_press_currency_symbols() {
1288
  'TMT' => '&#109;',
1289
  'TND' => '&#1583;.&#1578;',
1290
  'TOP' => '&#84;&#36;',
1291
- 'TRY' => '&#8356;',
1292
  'TTD' => '&#36;',
1293
  'TWD' => '&#78;&#84;&#36;',
1294
  'TZS' => 'Sh',
@@ -1342,17 +1342,17 @@ function learn_press_get_currency_symbol( $currency = '' ) {
1342
  */
1343
  function learn_press_get_page_link( $key ) {
1344
  $page_id = LP()->settings->get( $key . '_page_id' );
1345
- if ( get_post_status( $page_id ) == 'publish' ) {
1346
- $link = apply_filters( 'learn_press_get_page_link', get_permalink( $page_id ), $page_id, $key );
1347
 
1348
- $link = apply_filters( 'learn-press/get-page-link', get_permalink( $page_id ), $page_id, $key );
1349
- } else {
1350
- $link = '';
 
1351
  }
1352
 
1353
  $link = apply_filters( 'learn_press_get_page_' . $key . '_link', $link, $page_id );
1354
 
1355
- return apply_filters( 'learn-press/get-page-' . $key . '-link', $link, $page_id );
1356
  }
1357
 
1358
 
1288
  'TMT' => '&#109;',
1289
  'TND' => '&#1583;.&#1578;',
1290
  'TOP' => '&#84;&#36;',
1291
+ 'TRY' => '&#x20BA;',
1292
  'TTD' => '&#36;',
1293
  'TWD' => '&#78;&#84;&#36;',
1294
  'TZS' => 'Sh',
1342
  */
1343
  function learn_press_get_page_link( $key ) {
1344
  $page_id = LP()->settings->get( $key . '_page_id' );
1345
+ $link = '';
 
1346
 
1347
+ if ( get_post_status( $page_id ) == 'publish' ) {
1348
+ $permalink = trailingslashit( get_permalink( $page_id ) );
1349
+ $permalink = apply_filters( 'learn_press_get_page_link', $permalink, $page_id, $key );
1350
+ $link = apply_filters( 'learn-press/get-page-link', $permalink, $page_id, $key );
1351
  }
1352
 
1353
  $link = apply_filters( 'learn_press_get_page_' . $key . '_link', $link, $page_id );
1354
 
1355
+ return apply_filters( 'learn-press/get-page-' . $key . '-link', trailingslashit( $link ), $page_id );
1356
  }
1357
 
1358
 
inc/user-item/class-lp-user-item-course.php CHANGED
@@ -254,7 +254,7 @@ class LP_User_Item_Course extends LP_User_Item implements ArrayAccess {
254
  }
255
 
256
  if ( $prop === 'status' ) {
257
- if ( isset($results['grade']) ) {
258
  $prop = 'grade';
259
  }
260
  }
@@ -297,7 +297,10 @@ class LP_User_Item_Course extends LP_User_Item implements ArrayAccess {
297
  * @return array
298
  */
299
  protected function _evaluate_course_by_lesson() {
300
- if ( false === ( $data = wp_cache_get( 'user-course-' . $this->get_user_id() . '-' . $this->get_id(), 'lp-user-course-results/evaluate-by-lesson' ) ) ) {
 
 
 
301
  $completing = $this->get_completed_items( LP_LESSON_CPT, true );
302
  if ( $completing[1] ) {
303
  $result = $completing[0] / $completing[1];
@@ -311,10 +314,13 @@ class LP_User_Item_Course extends LP_User_Item implements ArrayAccess {
311
  'status' => $this->get_status()
312
  );
313
 
314
- wp_cache_set( 'user-course-' . $this->get_user_id() . '-' . $this->get_id(), $data, 'lp-user-course-results/evaluate-by-lesson' );
 
 
 
315
  }
316
 
317
- return $data;
318
  }
319
 
320
  /**
@@ -336,7 +342,9 @@ class LP_User_Item_Course extends LP_User_Item implements ArrayAccess {
336
  */
337
  protected function _evaluate_course_by_final_quiz() {
338
 
339
- if ( false === ( $data = wp_cache_get( 'user-course-' . $this->get_user_id() . '-' . $this->get_id(), 'lp-user-course-results/evaluate-by-final-quiz' ) ) ) {
 
 
340
  $course = $this->get_course();
341
  $final_quiz = $course->get_final_quiz();
342
  $result = false;
@@ -350,11 +358,13 @@ class LP_User_Item_Course extends LP_User_Item implements ArrayAccess {
350
  'grade' => $this->is_finished() ? $this->_is_passed( $percent ) : '',
351
  'status' => $this->get_status()
352
  );
 
 
353
 
354
- wp_cache_set( 'user-course-' . $this->get_user_id() . '-' . $this->get_id(), $data, 'lp-user-course-results/evaluate-by-final-quiz' );
355
  }
356
 
357
- return $data;
358
  }
359
 
360
  /**
@@ -364,10 +374,12 @@ class LP_User_Item_Course extends LP_User_Item implements ArrayAccess {
364
  */
365
  protected function _evaluate_course_by_quizzes() {
366
 
367
- if ( false === ( $data = wp_cache_get( 'user-course-' . $this->get_user_id() . '-' . $this->get_id(), 'lp-user-course-results/evaluate-by-quizzes' ) ) ) {
368
 
369
- $data = array( 'result' => 0, 'grade' => '', 'status' => $this->get_status() );
370
- $result = 0;
 
 
371
  $result_of_items = 0;
372
 
373
  if ( $items = $this->get_items() ) {
@@ -375,22 +387,25 @@ class LP_User_Item_Course extends LP_User_Item implements ArrayAccess {
375
  if ( $item->get_type() !== LP_QUIZ_CPT ) {
376
  continue;
377
  }
378
- if( $item->get_quiz()->get_data( 'passing_grade' ) ) {
379
- $result += $item->get_results( 'result' );
380
- $result_of_items++;
381
  }
382
  }
383
- $result = $result/$result_of_items;
384
  $data['result'] = $result;
385
  if ( $this->is_finished() ) {
386
  $data['grade'] = $this->_is_passed( $result );
387
  }
388
  }
389
 
390
- wp_cache_set( 'user-course-' . $this->get_user_id() . '-' . $this->get_id(), $data, 'lp-user-course-results/lp-user-course-results/evaluate-by-quizzes' );
 
 
 
391
  }
392
 
393
- return $data;
394
  }
395
 
396
  /**
@@ -400,22 +415,24 @@ class LP_User_Item_Course extends LP_User_Item implements ArrayAccess {
400
  */
401
  protected function _evaluate_course_by_passed_quizzes() {
402
 
403
- if ( false === ( $data = wp_cache_get( 'user-course-' . $this->get_user_id() . '-' . $this->get_id(), 'lp-user-course-results/evaluate-by-passed-quizzes' ) ) ) {
404
 
405
- $data = array( 'result' => 0, 'grade' => '', 'status' => $this->get_status() );
406
- $result = 0;
 
 
407
  $result_of_items = 0;
408
  if ( $items = $this->get_items() ) {
409
  foreach ( $items as $item ) {
410
  if ( $item->get_type() !== LP_QUIZ_CPT ) {
411
  continue;
412
  }
413
- if( $item->get_quiz()->get_data( 'passing_grade' ) ) {
414
- $result += $item->is_passed() ? $item->get_results( 'result' ) : 0;
415
- $result_of_items++;
416
  }
417
  }
418
- $result = $result/$result_of_items;
419
  $data['result'] = $result;
420
 
421
  if ( $this->is_finished() ) {
@@ -423,10 +440,13 @@ class LP_User_Item_Course extends LP_User_Item implements ArrayAccess {
423
  }
424
  }
425
 
426
- wp_cache_set( 'user-course-' . $this->get_user_id() . '-' . $this->get_id(), $data, 'lp-user-course-results/evaluate-by-passed-quizzes' );
 
 
 
427
  }
428
 
429
- return $data;
430
  }
431
 
432
  /**
@@ -435,35 +455,39 @@ class LP_User_Item_Course extends LP_User_Item implements ArrayAccess {
435
  * @return array
436
  */
437
  protected function _evaluate_course_by_completed_quizzes() {
 
438
 
439
- if ( false === ( $data = wp_cache_get( 'user-course-' . $this->get_user_id() . '-' . $this->get_id(), 'lp-user-course-results/evaluate-by-completed-quizzes' ) ) ) {
440
  $course = $this->get_course();
441
 
442
  $data = array( 'result' => 0, 'grade' => '', 'status' => $this->get_status() );
443
  $result = 0;
444
 
445
  if ( $items = $this->get_items() ) {
446
- $result_of_items = 0;
447
- foreach ( $items as $item ) {
448
- if ( $item->get_type() !== LP_QUIZ_CPT ) {
449
- continue;
450
- }
451
- if( $item->get_quiz()->get_data( 'passing_grade' ) ) {
452
- $result += $item->is_passed() ? 1 : 0;
453
- $result_of_items++;
454
- }
455
- }
456
- $result = $result*100/$result_of_items;
457
  $data['result'] = $result;
458
  if ( $this->is_finished() ) {
459
  $data['grade'] = $this->_is_passed( $result );
460
  }
461
  }
462
 
463
- wp_cache_set( 'user-course-' . $this->get_user_id() . '-' . $this->get_id(), $data, 'lp-user-course-results/evaluate-by-completed-quizzes' );
 
 
 
464
  }
465
 
466
- return $data;
467
  }
468
 
469
  protected function _is_passed( $result ) {
@@ -475,9 +499,9 @@ class LP_User_Item_Course extends LP_User_Item implements ArrayAccess {
475
  /**
476
  * Get completed items.
477
  *
478
- * @param string $type - Optional. Filter by type (such lp_quiz, lp_lesson) if passed
479
- * @param bool $with_total - Optional. Include total if TRUE
480
- * @param int $section_id - Optional. Get in specific section
481
  *
482
  * @return array|bool|mixed
483
  */
@@ -514,7 +538,7 @@ class LP_User_Item_Course extends LP_User_Item implements ArrayAccess {
514
  if ( $item->get_status() == 'completed' ) {
515
  $completed ++;
516
  }
517
-
518
  //if ( ! $item->is_preview() ) {
519
  $total ++;
520
  //}
@@ -531,8 +555,8 @@ class LP_User_Item_Course extends LP_User_Item implements ArrayAccess {
531
  /**
532
  * Get items completed by percentage.
533
  *
534
- * @param string $type - Optional. Filter by type or not
535
- * @param int $section_id - Optional. Get in specific section
536
  *
537
  * @return float|int
538
  */
254
  }
255
 
256
  if ( $prop === 'status' ) {
257
+ if ( isset( $results['grade'] ) ) {
258
  $prop = 'grade';
259
  }
260
  }
297
  * @return array
298
  */
299
  protected function _evaluate_course_by_lesson() {
300
+
301
+ $cache_key = 'user-course-' . $this->get_user_id() . '-' . $this->get_id();
302
+
303
+ if ( false === ( $cached_data = wp_cache_get( $cache_key, 'course-results' ) ) || ! array_key_exists( 'lessons', $cached_data ) ) {
304
  $completing = $this->get_completed_items( LP_LESSON_CPT, true );
305
  if ( $completing[1] ) {
306
  $result = $completing[0] / $completing[1];
314
  'status' => $this->get_status()
315
  );
316
 
317
+ settype( $cached_data, 'array' );
318
+ $cached_data['lessons'] = $data;
319
+
320
+ wp_cache_set( $cache_key, $cached_data, 'course-results' );
321
  }
322
 
323
+ return isset( $cached_data['lessons'] ) ? $cached_data['lessons'] : array();
324
  }
325
 
326
  /**
342
  */
343
  protected function _evaluate_course_by_final_quiz() {
344
 
345
+ $cache_key = 'user-course-' . $this->get_user_id() . '-' . $this->get_id();
346
+
347
+ if ( false === ( $cached_data = wp_cache_get( $cache_key, 'course-results' ) ) || ! array_key_exists( 'final-quiz', $cached_data ) ) {
348
  $course = $this->get_course();
349
  $final_quiz = $course->get_final_quiz();
350
  $result = false;
358
  'grade' => $this->is_finished() ? $this->_is_passed( $percent ) : '',
359
  'status' => $this->get_status()
360
  );
361
+ settype( $cached_data, 'array' );
362
+ $cached_data['final-quiz'] = $data;
363
 
364
+ wp_cache_set( $cache_key, $cached_data, 'course-results' );
365
  }
366
 
367
+ return isset( $cached_data['final-quiz'] ) ? $cached_data['final-quiz'] : array();
368
  }
369
 
370
  /**
374
  */
375
  protected function _evaluate_course_by_quizzes() {
376
 
377
+ $cache_key = 'user-course-' . $this->get_user_id() . '-' . $this->get_id();
378
 
379
+ if ( ( false === ( $cached_data = wp_cache_get( $cache_key, 'course-results' ) ) ) || ! array_key_exists( 'quizzes', $cached_data ) ) {
380
+
381
+ $data = array( 'result' => 0, 'grade' => '', 'status' => $this->get_status() );
382
+ $result = 0;
383
  $result_of_items = 0;
384
 
385
  if ( $items = $this->get_items() ) {
387
  if ( $item->get_type() !== LP_QUIZ_CPT ) {
388
  continue;
389
  }
390
+ if ( $item->get_quiz()->get_data( 'passing_grade' ) ) {
391
+ $result += $item->get_results( 'result' );
392
+ $result_of_items ++;
393
  }
394
  }
395
+ $result = $result_of_items ? $result / $result_of_items : 0;
396
  $data['result'] = $result;
397
  if ( $this->is_finished() ) {
398
  $data['grade'] = $this->_is_passed( $result );
399
  }
400
  }
401
 
402
+ settype( $cached_data, 'array' );
403
+ $cached_data['quizzes'] = $data;
404
+
405
+ wp_cache_set( $cache_key, $cached_data, 'course-results' );
406
  }
407
 
408
+ return isset( $cached_data['quizzes'] ) ? $cached_data['quizzes'] : array();
409
  }
410
 
411
  /**
415
  */
416
  protected function _evaluate_course_by_passed_quizzes() {
417
 
418
+ $cache_key = 'user-course-' . $this->get_user_id() . '-' . $this->get_id();
419
 
420
+ if ( false === ( $cached_data = wp_cache_get( $cache_key, 'course-results' )) || ! array_key_exists( 'passed-quizzes', $cached_data ) ) {
421
+
422
+ $data = array( 'result' => 0, 'grade' => '', 'status' => $this->get_status() );
423
+ $result = 0;
424
  $result_of_items = 0;
425
  if ( $items = $this->get_items() ) {
426
  foreach ( $items as $item ) {
427
  if ( $item->get_type() !== LP_QUIZ_CPT ) {
428
  continue;
429
  }
430
+ if ( $item->get_quiz()->get_data( 'passing_grade' ) ) {
431
+ $result += $item->is_passed() ? $item->get_results( 'result' ) : 0;
432
+ $result_of_items ++;
433
  }
434
  }
435
+ $result = $result_of_items ? $result / $result_of_items : 0;
436
  $data['result'] = $result;
437
 
438
  if ( $this->is_finished() ) {
440
  }
441
  }
442
 
443
+ settype( $cached_data, 'array' );
444
+ $cached_data['passed-quizzes'] = $data;
445
+
446
+ wp_cache_set( $cache_key, $cached_data, 'course-results' );
447
  }
448
 
449
+ return isset( $cached_data['passed-quizzes'] ) ? $cached_data['passed-quizzes'] : array();
450
  }
451
 
452
  /**
455
  * @return array
456
  */
457
  protected function _evaluate_course_by_completed_quizzes() {
458
+ $cache_key = 'user-course-' . $this->get_user_id() . '-' . $this->get_id();
459
 
460
+ if ( false === ( $cached_data = wp_cache_get( $cache_key, 'course-results' ) ) || ! array_key_exists( 'completed-quizzes', $cached_data ) ) {
461
  $course = $this->get_course();
462
 
463
  $data = array( 'result' => 0, 'grade' => '', 'status' => $this->get_status() );
464
  $result = 0;
465
 
466
  if ( $items = $this->get_items() ) {
467
+ $result_of_items = 0;
468
+ foreach ( $items as $item ) {
469
+ if ( $item->get_type() !== LP_QUIZ_CPT ) {
470
+ continue;
471
+ }
472
+ if ( $item->get_quiz()->get_data( 'passing_grade' ) ) {
473
+ $result += $item->is_passed() ? 1 : 0;
474
+ $result_of_items ++;
475
+ }
476
+ }
477
+ $result = $result_of_items ? $result * 100 / $result_of_items : 0;
478
  $data['result'] = $result;
479
  if ( $this->is_finished() ) {
480
  $data['grade'] = $this->_is_passed( $result );
481
  }
482
  }
483
 
484
+ settype( $cached_data, 'array' );
485
+ $cached_data['completed-quizzes'] = $data;
486
+
487
+ wp_cache_set( $cache_key, $cached_data, 'course-results' );
488
  }
489
 
490
+ return isset( $cached_data['completed-quizzes'] ) ? $cached_data['completed-quizzes'] : array();
491
  }
492
 
493
  protected function _is_passed( $result ) {
499
  /**
500
  * Get completed items.
501
  *
502
+ * @param string $type - Optional. Filter by type (such lp_quiz, lp_lesson) if passed
503
+ * @param bool $with_total - Optional. Include total if TRUE
504
+ * @param int $section_id - Optional. Get in specific section
505
  *
506
  * @return array|bool|mixed
507
  */
538
  if ( $item->get_status() == 'completed' ) {
539
  $completed ++;
540
  }
541
+ $completed = apply_filters( 'learn-press/course-item/completed', $completed, $item, $item->get_status() );
542
  //if ( ! $item->is_preview() ) {
543
  $total ++;
544
  //}
555
  /**
556
  * Get items completed by percentage.
557
  *
558
+ * @param string $type - Optional. Filter by type or not
559
+ * @param int $section_id - Optional. Get in specific section
560
  *
561
  * @return float|int
562
  */
inc/user-item/class-lp-user-item-quiz.php CHANGED
@@ -135,17 +135,17 @@ class LP_User_Item_Quiz extends LP_User_Item {
135
 
136
  if ( $questions = $quiz->get_questions() ) {
137
  foreach ( $questions as $question_id ) {
138
- $question = LP_Question::get_question( $question_id );
139
- $answered = $this->get_question_answer( $question_id );
140
- $check = apply_filters( 'learn-press/quiz/check-question-result', $question->check( $answered ), $question_id, $this );
141
- $check['type'] = !isset($check['type']) || !$check['type'] ?$question->get_type() : $check['type'];
142
- $check['answered'] = !isset($check['answered']) ? $answered !== false: $check['answered'];
143
 
144
- if ( false !== $check['answered'] && $check['correct'] ) {
145
  $result['question_correct'] ++;
146
  $result['user_mark'] += array_key_exists( 'mark', $check ) ? floatval( $check['mark'] ) : $question->get_mark();
147
  } else {
148
- if ( false === $check['answered'] ) {
149
  $result['question_empty'] ++;
150
  } else {
151
  $result['question_wrong'] ++;
@@ -227,7 +227,11 @@ class LP_User_Item_Quiz extends LP_User_Item {
227
  public function get_questions_answered( $percent = false ) {
228
  $result = $this->get_results();
229
  if ( $percent ) {
230
- $return = $result['question_answered'] ? ( $result['question_answered'] / $result['question_count'] ) * 100 : 0;
 
 
 
 
231
  } else {
232
  $return = $result['question_answered'];
233
  }
135
 
136
  if ( $questions = $quiz->get_questions() ) {
137
  foreach ( $questions as $question_id ) {
138
+ $question = LP_Question::get_question( $question_id );
139
+ $answered = $this->get_question_answer( $question_id );
140
+ $check = apply_filters( 'learn-press/quiz/check-question-result', $question->check( $answered ), $question_id, $this );
141
+ $check['type'] = ! isset( $check['type'] ) || ! $check['type'] ? $question->get_type() : $check['type'];
142
+ $check['answered'] = ! isset( $check['answered'] ) ? $answered !== false : $check['answered'];
143
 
144
+ if ( false !== $check['answered'] && $check['correct'] ) {
145
  $result['question_correct'] ++;
146
  $result['user_mark'] += array_key_exists( 'mark', $check ) ? floatval( $check['mark'] ) : $question->get_mark();
147
  } else {
148
+ if ( false === $check['answered'] ) {
149
  $result['question_empty'] ++;
150
  } else {
151
  $result['question_wrong'] ++;
227
  public function get_questions_answered( $percent = false ) {
228
  $result = $this->get_results();
229
  if ( $percent ) {
230
+ if ( $result['question_count'] ) {
231
+ $return = 0;
232
+ } else {
233
+ $return = $result['question_answered'] ? ( $result['question_answered'] / $result['question_count'] ) * 100 : 0;
234
+ }
235
  } else {
236
  $return = $result['question_answered'];
237
  }
inc/user/class-lp-profile.php CHANGED
@@ -385,7 +385,7 @@ if ( ! class_exists( 'LP_Profile' ) ) {
385
  * Get current tab slug in query string.
386
  *
387
  * @param string $default Optional.
388
- * @param bool $key Optional. True if return the key instead of value.
389
  *
390
  * @return string
391
  */
@@ -614,11 +614,11 @@ if ( ! class_exists( 'LP_Profile' ) ) {
614
  * from settings in admin.
615
  */
616
  if ( ( $user = $this->get_user() ) && ( '' === ( $publicity = $user->get_data( 'profile_publicity' ) ) ) ) {
617
- $publicity = array(
618
  'my-dashboard' => LP()->settings()->get( 'profile_publicity.dashboard' ),
619
  'courses' => LP()->settings()->get( 'profile_publicity.courses' ),
620
  'quizzes' => LP()->settings()->get( 'profile_publicity.quizzes' )
621
- );
622
  }
623
 
624
  if ( $publicity && $tab ) {
385
  * Get current tab slug in query string.
386
  *
387
  * @param string $default Optional.
388
+ * @param bool $key Optional. True if return the key instead of value.
389
  *
390
  * @return string
391
  */
614
  * from settings in admin.
615
  */
616
  if ( ( $user = $this->get_user() ) && ( '' === ( $publicity = $user->get_data( 'profile_publicity' ) ) ) ) {
617
+ $publicity = apply_filters( 'learn-press/get-publicity-setting', array(
618
  'my-dashboard' => LP()->settings()->get( 'profile_publicity.dashboard' ),
619
  'courses' => LP()->settings()->get( 'profile_publicity.courses' ),
620
  'quizzes' => LP()->settings()->get( 'profile_publicity.quizzes' )
621
+ ) );
622
  }
623
 
624
  if ( $publicity && $tab ) {
languages/learnpress-pl_PL.mo CHANGED
Binary file
languages/learnpress-pl_PL.po CHANGED
@@ -1,2528 +1,8223 @@
 
 
 
 
 
1
  msgid ""
2
  msgstr ""
3
- "Project-Id-Version: LearnPress\n"
4
  "Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: 2015-07-16 16:21+0700\n"
6
- "PO-Revision-Date: 2017-10-24 01:18+0000\n"
7
- "Last-Translator: Nguyễn Ngoc Tú <tunnhn@gmail.com>\n"
8
  "Language-Team: Polish\n"
 
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "Language: pl-PL\n"
13
- "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10 >= 2 && n%10<=4 "
14
- "&&(n%100<10||n%100 >= 20)? 1 : 2)\n"
15
- "X-Generator: Loco - https://localise.biz/"
16
 
17
- #: inc/custom-post-types/order.php:388
18
  #, php-format
19
- msgid "Draft order <span class=\"count\">(%s)</span>"
20
- msgid_plural "Draft order <span class=\"count\">(%s)</span>"
21
- msgstr[0] ""
22
- msgstr[1] ""
23
- msgstr[2] ""
24
-
25
- #: learnpress.php:352
26
- msgid "Learning Management System"
27
- msgstr "System Zarządzania Nauczaniem"
28
-
29
- #: learnpress.php:353 learnpress.php:373
30
- msgid "LearnPress"
31
- msgstr "LearnPress"
32
 
33
- #: learnpress.php:364 learnpress.php:365
34
- msgid "Statistics"
35
- msgstr "Statystyki"
 
36
 
37
- #: learnpress.php:372
38
- msgid "LearnPress Settings"
39
- msgstr "Ustawienia LearnPress"
40
 
41
- #: learnpress.php:380 learnpress.php:381
42
- msgid "Add-ons"
43
- msgstr "Dodatki"
44
 
45
- #: learnpress.php:405
46
- msgctxt "User role"
47
- msgid "Instructor"
48
- msgstr "Opiekun: "
49
 
50
- #: inc/class.lpr-ajax.php:177
51
- msgid "Sorry! You can not retake this quiz"
52
- msgstr "Przepraszamy! Nie możesz powtórzyć tego kursu"
53
 
54
- #: inc/class.lpr-ajax.php:335 inc/class.lpr-ajax.php:377
55
  msgid "Access denied!"
56
- msgstr "Brak dostępu"
57
-
58
- #: inc/class.lpr-ajax.php:404
59
- msgid "Congratulation ! You have finished this course"
60
- msgstr "Gratulacje ! Kurs zaliczony"
61
-
62
- #: inc/class.lpr-ajax.php:407
63
- msgid "Sorry! You can not finish this course now"
64
- msgstr "Przepraszamy! Nie możesz dokończyć teraz kursu"
65
 
66
- #: inc/class.lpr-ajax.php:457 inc/class.lpr-ajax.php:463
67
- msgid "Error"
68
- msgstr "Błąd"
69
-
70
- #: inc/class.lpr-multi-language.php:40 lib/meta-box/inc/common.php:48
71
- msgid "Documentation"
72
- msgstr "Dokumentacja"
73
 
74
- #: inc/class.lpr-multi-language.php:41 lib/meta-box/inc/common.php:49
75
- msgid "Extensions"
76
- msgstr "Dodatki"
 
 
 
77
 
78
- #: inc/class.lpr-question-type.php:119
79
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:147
80
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:237
81
- #: templates/archive-course-content.php:25 templates/course_content.php:27
82
- msgid "Edit"
83
- msgstr "Edytuj"
84
-
85
- #: inc/class.lpr-question-type.php:120
86
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:114
87
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:146
88
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:169
89
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:212
90
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:237
91
- #: lib/meta-box/inc/fields/file-input.php:38
92
- msgid "Remove"
93
- msgstr "Usuń"
94
 
95
- #: inc/class.lpr-question-type.php:121
96
- msgid "Expand"
97
- msgstr "Rozwiń"
 
98
 
99
- #: inc/class.lpr-question-type.php:122
100
- msgid "Collapse"
101
- msgstr "Rachunek"
102
 
103
- #: inc/class.lpr-question-type.php:138
104
- msgid "Answer"
105
- msgstr "Odpowiedź"
106
 
107
- #: inc/class.lpr-question-type.php:170 inc/class.lpr-question-type.php:181
108
  #, php-format
109
- msgid "Function %s should override from its child"
110
- msgstr "Funkcja %s powinna nadpisać poprzednią wersję"
111
 
112
- #: inc/class.lpr-question-type.php:570
113
- msgid "Answer explanation"
114
- msgstr "Wytłumaczenie odpowiedzi"
115
 
116
- #: inc/class.lpr-shortcodes.php:47
117
- msgid "You are a teacher now"
118
- msgstr "Jesteś teraz opiekunem "
 
 
119
 
120
- #: inc/class.lpr-shortcodes.php:51
121
- msgid "Please login to fill out this form"
122
- msgstr "Zaloguj się, by wypełnić ten formularz"
123
 
124
- #: inc/class.lpr-shortcodes.php:55
125
- msgid "Your request has been sent! We will get in touch with you soon!"
126
- msgstr "Twoje zapytanie zostało wysłane ! Skontaktujemy się wkróce !"
127
 
128
- #: inc/class.lpr-shortcodes.php:62
129
- #: inc/admin/settings/class.lpr-settings-pages.php:103
130
- msgid "Become a Teacher"
131
- msgstr "Zostań opiekunem"
132
 
133
- #: inc/class.lpr-shortcodes.php:63
134
- msgid "Fill out your information and send to us to become a teacher"
135
- msgstr "Wypełni oraz wyślij do nas, aby zostać opiekunem"
136
 
137
- #: inc/class.lpr-shortcodes.php:64
138
- msgid "Submit"
139
- msgstr "Zatwierdź"
 
 
 
 
 
 
140
 
141
- #: inc/class.lpr-shortcodes.php:70
142
- msgid "Name"
143
- msgstr "Imię i Nazwisko"
 
 
 
 
 
 
 
144
 
145
- #: inc/class.lpr-shortcodes.php:72
146
- msgid "Your name"
147
- msgstr "Twoje imię i nazwisko"
148
 
149
- #: inc/class.lpr-shortcodes.php:76
150
- msgid "Email"
151
- msgstr "E-mail"
 
152
 
153
- #: inc/class.lpr-shortcodes.php:78
154
- msgid "Your email address"
155
- msgstr "Twój adres E-mail"
 
156
 
157
- #: inc/class.lpr-shortcodes.php:82
158
- msgid "Phone"
159
- msgstr "Telefon"
 
160
 
161
- #: inc/class.lpr-shortcodes.php:84
162
- msgid "Your phone number"
163
- msgstr "Twój numer telefonu"
 
164
 
165
- #: inc/class.lpr-shortcodes.php:151 inc/shortcodes/profile-page.php:21
166
- msgid "This user in not available!"
167
- msgstr "Użytkownik nie jest dostępny!"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
168
 
169
- #: inc/lpr-add-on-functions.php:18 inc/lpr-core-functions.php:356
170
- msgid "All"
171
- msgstr "Wszystkie"
172
 
173
- #: inc/lpr-add-on-functions.php:31 inc/lpr-add-on-functions.php:639
174
- #: inc/lpr-add-on-functions.php:665
175
- #: inc/admin/class-lpr-plugin-install-list-table.php:417
176
- msgid "Enabled"
177
- msgstr "Włączone"
178
 
179
- #: inc/lpr-add-on-functions.php:42 inc/lpr-add-on-functions.php:639
180
- #: inc/lpr-add-on-functions.php:665
181
- #: inc/admin/class-lpr-plugin-install-list-table.php:419
182
- msgid "Disabled"
183
- msgstr "Wyłączone"
184
 
185
- #: inc/lpr-add-on-functions.php:53
186
- msgid "Get More"
187
- msgstr "Zdobądź więcej"
188
 
189
- #: inc/lpr-add-on-functions.php:81
190
- msgid "All LearnPress Add-ons require a slug parameter."
191
- msgstr "Wszystkie dodatki LearnPress wymagają parametr slug."
192
 
193
- #: inc/lpr-add-on-functions.php:84
194
- msgid "All LearnPress Add-ons require a name parameter."
195
- msgstr "Wszystkie dodatki LearnPress wymagają parametr Nazwa"
196
 
197
- #: inc/lpr-add-on-functions.php:87
198
- msgid "All LearnPress Add-ons require a file parameter."
199
- msgstr "Wszystkie dodatki LearnPress wymagają parametr Plik"
 
200
 
201
- #: inc/lpr-add-on-functions.php:367
202
- msgid "bbPress Integration"
203
- msgstr "Integracja z bbPress"
204
 
205
- #: inc/lpr-add-on-functions.php:368
 
206
  #, php-format
207
- msgid "Using the forum for courses provided by bbPress.%s"
208
- msgstr "Używanie podczas kursów forum rozwijanego przez bbPress.%s"
209
 
210
- #: inc/lpr-add-on-functions.php:377
211
- msgid "BuddyPress Integration"
212
- msgstr "Integracja z BuddyPress"
213
 
214
- #: inc/lpr-add-on-functions.php:378
215
- #, php-format
216
- msgid "Using the profile system provided by BuddyPress.%s"
217
- msgstr ""
218
- "Używanie podczas kursów systemu profilowego rozwijanego przez bbPress.%s"
 
 
219
 
220
- #: inc/lpr-add-on-functions.php:387
221
- msgid "Certificate"
222
- msgstr "Certyfikat"
223
 
224
- #: inc/lpr-add-on-functions.php:388
225
- msgid "Allow create a certificate for student after they finish a course"
226
- msgstr "Zezwól na Tworzenie certyfikatów dla kursantów jak zakończą kurs."
227
 
228
- #: inc/lpr-add-on-functions.php:398
229
- msgid "Courses Collection"
230
- msgstr "Zbiór kursów"
231
 
232
- #: inc/lpr-add-on-functions.php:399
233
- msgid "Collecting related courses into one collection by administrator"
234
- msgstr "Zbieranie kolekcji kursów do jednej kolekcji przez administratora"
235
 
236
- #: inc/lpr-add-on-functions.php:409
237
- msgid "Course Review"
238
- msgstr "Recenzja kursu"
239
 
240
- #: inc/lpr-add-on-functions.php:410
241
- msgid "Adding review for course "
242
- msgstr "Dodawanie recenzji kursu"
243
 
244
- #: inc/lpr-add-on-functions.php:419
245
- msgid "Export/Import"
246
- msgstr "Eksport/Import"
247
 
248
- #: inc/lpr-add-on-functions.php:420
249
- msgid "Export and Import your courses with all lesson and quiz in easiest way"
 
 
250
  msgstr ""
251
- "Eksport oraz Import Twoich kursów wraz ze wszystkimi modułami oraz testami w "
252
- "najprostrzy sposób."
 
 
 
 
 
 
 
 
253
 
254
- #: inc/lpr-add-on-functions.php:429
255
- msgid "Prerequisite Courses"
256
- msgstr "Wymagania odnośnie kursu"
 
 
 
 
 
 
 
 
257
 
258
- #: inc/lpr-add-on-functions.php:430
259
- msgid "Adding prerequisite course when add new a course "
260
- msgstr "Dodawanie wymagań odnośnie kursu kiedy to jest jakiś nowy dodawany"
261
 
262
- #: inc/lpr-add-on-functions.php:439
263
- msgid "Stripe"
264
- msgstr "Stripe"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
265
 
266
- #: inc/lpr-add-on-functions.php:440
267
- msgid "Make the payment with Stripe"
268
- msgstr "Rób płatności ze Stripe"
269
 
270
- #: inc/lpr-add-on-functions.php:449
271
- msgid "Courses Wishlist"
272
- msgstr "Lista życzeń kursów"
 
273
 
274
- #: inc/lpr-add-on-functions.php:450
275
- msgid "Wishlist feature"
276
- msgstr "Funkcje listy życzeń"
277
 
278
- #: inc/lpr-add-on-functions.php:459
279
- msgid "WooCommerce Payment"
280
- msgstr "Płatności WooCommerce"
 
 
281
 
282
- #: inc/lpr-add-on-functions.php:460
283
  #, php-format
284
- msgid "Using the payment system provided by WooCommerce.%s"
285
- msgstr "Używanie płatności stworzonej przez WooCommerce.%s"
286
 
287
- #: inc/lpr-add-on-functions.php:515
288
- msgid ""
289
- "An unexpected error occurred. Something may be wrong with WordPress.org or "
290
- "this server&#8217;s configuration. If you continue to have problems, please "
291
- "try the <a href=\"https://wordpress.org/support/\">support forums</a>."
292
- msgstr ""
293
- "Nieznany błąd. Cos mogło pójsć nie tak z WordPress.org, lub z konfiguracją "
294
- "serwera. Jeżeli problem bedzie się powtarzać napisz na <a href=\"https:"
295
- "//wordpress.org/support/\"> forum </a>."
296
 
297
- #: inc/lpr-add-on-functions.php:515
298
- msgid ""
299
- "(WordPress could not establish a secure connection to WordPress.org. Please "
300
- "contact your server administrator.)"
301
- msgstr ""
302
- "(WordPress nie mógł ustalić bezpiecznego połączenia z WordPress.oeg. "
303
- "Skontaktuj się z administratorem serwera)"
304
 
305
- #: inc/lpr-add-on-functions.php:610
 
 
 
 
306
  #, php-format
307
- msgid "Installing Plugin: %s"
308
- msgstr "Instalacja pluginu: %s"
309
 
310
- #: inc/lpr-add-on-functions.php:624
311
- msgid "Not install"
312
- msgstr "Nie instaluj"
313
 
314
- #: inc/lpr-add-on-functions.php:629 inc/admin/lpr-admin-functions.php:444
315
- msgid "Installed"
316
- msgstr "Zainstalowane"
317
 
318
- #: inc/lpr-core-functions.php:56 inc/lpr-quiz-functions.php:270
319
- msgid "Invalid ID"
320
- msgstr "Błędne ID"
321
 
322
- #: inc/lpr-core-functions.php:61
323
- msgid "Unable to take the course"
324
- msgstr "Nie można wziąć udziału w kursie."
325
 
326
- #: inc/lpr-core-functions.php:136
327
- msgid "<"
328
- msgstr "<"
329
 
330
- #: inc/lpr-core-functions.php:137
331
- msgid ">"
332
- msgstr ">"
 
333
 
334
- #: inc/lpr-core-functions.php:170 inc/gateways/paypal/paypal-ipn/ipn.php:52
335
- msgid "Order on "
336
- msgstr "Zamówienie na"
337
 
338
- #: inc/lpr-core-functions.php:312
339
- msgid "Sorry! You don't have permission to do this action"
340
- msgstr "Przepraszamy! Nie masz dostępu by wykonać tą akcję"
341
 
342
- #: inc/lpr-core-functions.php:357
343
- msgid "Published"
344
- msgstr "Opublikowane"
345
 
346
- #: inc/lpr-core-functions.php:358
347
- msgid "Private"
348
- msgstr "Prywatne"
349
 
350
- #: inc/lpr-core-functions.php:359
351
- msgid "Pending Review"
352
- msgstr "W oczekiwaniu na opinię"
353
 
354
- #: inc/lpr-core-functions.php:360
355
- msgid "Scheduled"
356
- msgstr "Zaplanowane"
 
357
 
358
- #: inc/lpr-core-functions.php:361
359
- msgid "Draft"
360
- msgstr "Szpic"
361
 
362
- #: inc/lpr-core-functions.php:362
363
- msgid "Trash"
364
- msgstr "Śmietnik"
365
 
366
- #: inc/lpr-core-functions.php:413
367
- msgid "Want to be an instructor?"
368
- msgstr "Chcesz zostać opiekunem?"
369
 
370
- #: inc/lpr-core-functions.php:605 inc/admin/class.lpr-profile.php:77
371
- #: inc/admin/sub-menus/statistics.php:17 inc/custom-post-types/course.php:40
372
- #: inc/custom-post-types/course.php:42 inc/custom-post-types/order.php:447
373
- msgid "Courses"
374
- msgstr "Kursy"
375
 
376
- #: inc/lpr-core-functions.php:611
377
- msgid "Categories"
378
- msgstr "Kategorie"
 
379
 
380
- #: inc/lpr-core-functions.php:616 inc/custom-post-types/course.php:114
381
- msgid "Tags"
382
- msgstr "Tagi"
 
383
 
384
- #: inc/lpr-core-functions.php:715
385
  #, php-format
386
- msgid ""
387
- "<strong>LearnPress is almost ready</strong>. <a class=\"lpr-set-up\" "
388
- "href=\"%s\">Setting up</a> something right now is a good idea. That's better "
389
- "than you <a class=\"lpr-ignore lpr-set-up\">ignore</a> the message."
390
- msgstr ""
391
- "<strong>LearnPress jest prawie gotowy</strong>. <a class=\"lpr-set-up\" "
392
- "href=\"%s\">Ustawienie</a> czegoś bedzie dobrym krokiem. To będzie lepsze "
393
- "niz <a class=\"lpr-ignore lpr-set-up\">zignorowanie</a> tej wiadomości."
394
 
395
- #: inc/lpr-core-functions.php:728
396
  #, php-format
397
- msgid ""
398
- "<strong>LearnPress Profile is almost ready</strong>. You must <a href=\"%s\">"
399
- "update your permalink structure</a> to something other than the default for "
400
- "it to work."
401
- msgstr ""
402
- "<strong>LearnPress Profile jest prawie gotowy</strong>. Musisz tylko <a "
403
- "href=\"%s\">poprawić strukturę linków</a> ustawiając coś innego niż "
404
- "podstawowe ustawienia."
405
 
406
- #: inc/lpr-core-functions.php:1071
407
- msgid "LearnPress webhook process Complete"
408
- msgstr "Proces LearnPress webhook zakończony"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
409
 
410
- #: inc/lpr-core-functions.php:1071
411
- msgid "iThemes Exchange Webhook Process Complete"
412
- msgstr "Proces iThemes Exchange Webhook zakończony"
413
 
414
- #: inc/lpr-core-functions.php:1090
 
 
 
 
415
  msgid "Left"
416
- msgstr "Lewo"
417
 
418
- #: inc/lpr-core-functions.php:1091
419
  msgid "Right"
420
- msgstr "Prawo"
421
 
422
- #: inc/lpr-core-functions.php:1092
423
  msgid "Left with space"
424
- msgstr "Lewo z odstępem"
425
 
426
- #: inc/lpr-core-functions.php:1093
427
  msgid "Right with space"
428
- msgstr "Prawo z odstępem"
429
 
430
- #: inc/lpr-core-functions.php:1341
431
- msgid "Select Page"
432
- msgstr "Wybierz stronę"
433
 
434
- #: inc/lpr-core-functions.php:1355
435
- msgid "Select a page&hellip;"
436
- msgstr "Wybierz stronę&hellip;"
437
 
438
- #: inc/lpr-core-functions.php:1431
439
- msgid "View Course Profile"
440
- msgstr "Zobacz profil kursu"
441
 
442
- #: inc/lpr-core-functions.php:1443
443
- msgid "Become An Instructor"
444
- msgstr "Zostań Opiekunem"
445
 
446
- #: inc/lpr-core-functions.php:1598
447
- msgid "Please enter your name"
448
- msgstr "Wpisz swoje Imię i nazwisko"
449
 
450
- #: inc/lpr-core-functions.php:1602
451
- msgid "Please enter your email address"
452
- msgstr "Podaj swój adres e-mail"
453
 
454
- #: inc/lpr-core-functions.php:1614
455
- #, php-format
456
- msgid "The user <a href=\"%s\">%s</a> want to be a teacher."
457
- msgstr "Użytkownik <a href=\"%s\">%s</a> chciałby zostać opiekunem."
458
 
459
- #: inc/lpr-core-functions.php:1616
460
- #, php-format
461
- msgid "Name: %s"
462
- msgstr "Imię i nazwisko: %s"
463
 
464
- #: inc/lpr-core-functions.php:1617
465
- #, php-format
466
- msgid "Email: %s"
467
- msgstr "E-mail: %s"
468
 
469
- #: inc/lpr-core-functions.php:1618
470
- #, php-format
471
- msgid "Phone: %s"
472
- msgstr "Telefon: %s"
473
 
474
- #: inc/lpr-core-functions.php:1619
475
- #, php-format
476
- msgid "Accept: %s"
477
- msgstr "Akceptacja: %s"
478
 
479
- #: inc/lpr-course-functions.php:273 inc/lpr-course-functions.php:284
480
- msgid "You have not permission to view this page"
481
- msgstr "Nie masz uprawnień by zobaczyć tą stronę"
482
 
483
- #: inc/lpr-course-functions.php:1065
484
- msgid "Congratulations! You have enrolled this course"
485
- msgstr "Gratulacje ! Dołączyłeś do kursu"
486
 
487
- #: inc/lpr-course-functions.php:1085
488
- msgid "Invalid payment method."
489
- msgstr "Błędna metoda płątności"
490
 
491
- #: inc/lpr-course-functions.php:1090
492
- msgid "Sorry! You can not enroll to this course"
493
- msgstr "Przepraszamy ! Nie możesz dołączyć do tego kursu "
494
 
495
- #: inc/lpr-course-functions.php:2099
496
- msgid "Be sure you want to retake this course! All your data will be deleted."
497
- msgstr ""
498
- "Na pewno chcesz wziąć udział ponownie w kursie? Wszystkie wcześniejsze dane "
499
- "zostaną skasowane."
500
 
501
- #: inc/lpr-course-functions.php:2100
502
- msgid "Be sure you want to retake this quiz! All your data will be deleted."
503
- msgstr ""
504
- "Na pewno chcesz wziąć udział ponownie w teście? Wszystkie wcześniejsze dane "
505
- "zostaną skasowane."
506
 
507
- #: inc/lpr-course-functions.php:2101
508
- msgid "Are you sure you want to finish this quiz?"
509
- msgstr "Na pewno chcesz zakończyć test?"
510
 
511
- #: inc/lpr-deprecated-functions.php:9
512
- msgid "Payment"
513
- msgstr "Płątność"
514
 
515
- #: inc/lpr-js-template.php:7
516
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:256
517
- msgid "--Select a Lesson--"
518
- msgstr "--Wybierz moduł--"
519
 
520
- #: inc/lpr-quiz-functions.php:72
521
- msgid "You have not saved answer for this question yet"
522
- msgstr "Nie masz zapisanych odpowiedzi dla tego pytania jeszcze"
523
 
524
- #: inc/lpr-quiz-functions.php:136
525
- msgid "Security check failed !"
526
- msgstr "Sprawdzenie bezpieczeństwa oblane !"
527
 
528
- #: inc/lpr-quiz-functions.php:147
529
- msgid "Assignment can not be re-started"
530
- msgstr "Zadanie nie może być rozpoczęte ponownie"
531
 
532
- #: inc/lpr-quiz-functions.php:158
533
- msgid "TIME EXPIRED, PLEASE SUBMIT THE ASSIGNMENT"
534
- msgstr "CZAS SIĘ SKOŃCZYŁ, PROSZĘ ZAKOŃCZYĆ"
535
 
536
- #: inc/lpr-quiz-functions.php:166
537
- msgid "Assignment "
538
- msgstr "Zadanie "
539
 
540
- #: inc/lpr-quiz-functions.php:166
541
- msgid " submitted by student "
542
- msgstr " dodany przez kursanta "
543
 
544
- #: inc/lpr-quiz-functions.php:169
545
- msgid "Assignment submitted by Student"
546
- msgstr "Zadanie złożone przez kursanta"
547
 
548
- #: inc/lpr-quiz-functions.php:205
549
- msgid "START ASSIGNMENT"
550
- msgstr "ZACZNIJ ZADANIE"
551
 
552
- #: inc/lpr-quiz-functions.php:218
553
- msgid "CONTINUE ASSIGNMENT"
554
- msgstr "KONTYNUUJ ZADANIE"
555
 
556
- #: inc/lpr-quiz-functions.php:246 inc/lpr-quiz-functions.php:255
557
- msgid "SUBMIT ASSIGNMENT"
558
- msgstr "POTWIERDŹ ZADANIE"
559
 
560
- #: inc/lpr-quiz-functions.php:251
561
- msgid "INACTIVE COURSE "
562
- msgstr "WYŁĄCZ KURS"
563
 
564
- #: inc/lpr-quiz-functions.php:274
565
- msgid " previous submissions removed ! Reloading page ..."
566
- msgstr " poprzednie zgłoszenie usunięte ! Przeładuj stronę ..."
567
 
568
- #: inc/lpr-quiz-functions.php:276
569
- msgid "Unable to remove previous submissions"
570
- msgstr "Niemożliwe usunięcie poprzednich zgłoszeń"
571
 
572
- #: inc/lpr-quiz-functions.php:399 inc/lpr-quiz-functions.php:408
573
- msgid "Next Question"
574
- msgstr "Następne pytanie"
575
 
576
- #: inc/lpr-quiz-functions.php:404 inc/lpr-quiz-functions.php:407
577
- msgid "Previous Question"
578
- msgstr "Poprzednie pytanie"
579
 
580
- #: inc/lpr-quiz-functions.php:456
581
- msgid "Duration not Set"
582
- msgstr "Bez ustalonego czasu"
583
 
584
- #: inc/lpr-quiz-functions.php:468
585
- msgid "Time Remaining"
586
- msgstr "Pozostały czas"
587
 
588
- #: inc/lpr-quiz-functions.php:469
589
- msgid "Mins"
590
- msgstr "min"
591
 
592
- #: inc/lpr-quiz-functions.php:469
593
- msgid "Secs"
594
- msgstr "sec"
595
 
596
- #: inc/lpr-template-functions.php:414
597
- msgid "Back to Course"
598
- msgstr "Wróć do kursu"
599
 
600
- #: inc/lpr-template-functions.php:575
601
- #, php-format
602
- msgid "This course will end within %s next"
603
- msgstr "Kurs zostanie zakończony za %s."
604
 
605
- #: inc/lpr-template-functions.php:587
606
- #, php-format
607
- msgid ""
608
- "You have passed %d percent of course and now you can finish this course if "
609
- "you want"
610
- msgstr ""
611
- "Zakończyłeś %d procent kursu i możesz teraz zakończyć go jeśli tego chcesz."
612
 
613
- #: inc/lpr-template-functions.php:844
614
- msgid "Congratulations! You have completed this lesson."
615
- msgstr "Gratulacje ! Zakończyłeś ten moduł."
616
 
617
- #: inc/lpr-template-functions.php:848
618
- msgid "Complete Lesson"
619
- msgstr "Zakończ moduł"
620
 
621
- #: inc/lpr-template-functions.php:906
622
- msgid "Previous"
623
- msgstr "Poprzedni"
624
 
625
- #: inc/lpr-template-functions.php:907 templates/quiz/nav.php:4
626
- msgid "Next"
627
- msgstr "Następny"
628
 
629
- #: inc/lpr-template-functions.php:939
630
- msgid "This is a quiz. Please enroll to do this quiz"
631
- msgstr "To jest test. Dołącz, aby wziąć w nim udział"
632
 
633
- #: inc/lpr-template-functions.php:941
634
- msgid "This is a lesson. Please enroll to study this lesson"
635
- msgstr "To jest modul. Dołącz, aby wziąć w nim udział."
636
 
637
- #: inc/lpr-template-functions.php:949
638
- #, php-format
639
- msgid "%s and answered correctly %d out of %d total questions"
640
- msgstr "%s i odpowiedzi poprawnych %d z %d"
641
 
642
- #: inc/lpr-template-functions.php:950
643
- msgid "You have finished this quiz"
644
- msgstr "Zakończyłeś już ten test"
645
 
646
- #: inc/lpr-template-functions.php:950
647
- msgid "You have started this quiz"
648
- msgstr "Rozpocząłeś już ten test"
649
 
650
- #: inc/lpr-template-functions.php:955
651
- msgid "This is a quiz. Click on link to complete this quiz"
652
- msgstr "To jest test. Kliknij na link, aby wziąć w nim udział."
653
 
654
- #: inc/lpr-template-functions.php:960
655
- msgid "Congratulations! You have completed this lesson"
656
- msgstr "Gratulacje ! Zakończyłeś ten moduł. "
657
 
658
- #: inc/lpr-template-functions.php:963
659
- msgid "You are studying this lesson"
660
- msgstr "Jesteś w trakcie tego modułu"
661
 
662
- #: inc/lpr-template-functions.php:964
663
- msgid "This is a lesson. Click on link to complete this lesson"
664
- msgstr "To jest moduł. Kliknij na link, aby wziąć w nim udział."
665
 
666
- #: inc/admin/class-lpr-plugin-install-list-table.php:159
667
- msgid "No plugins found."
668
- msgstr "Nie znaleziono ploginów."
669
 
670
- #: inc/admin/class-lpr-plugin-install-list-table.php:293
671
- msgctxt "Plugin installer group title"
672
- msgid "Performance"
673
- msgstr "Wydajność"
674
 
675
- #: inc/admin/class-lpr-plugin-install-list-table.php:294
676
- msgctxt "Plugin installer group title"
677
- msgid "Social"
678
- msgstr "Social"
679
 
680
- #: inc/admin/class-lpr-plugin-install-list-table.php:295
681
- msgctxt "Plugin installer group title"
682
- msgid "Tools"
683
- msgstr "Narzędzia"
684
 
685
- #: inc/admin/class-lpr-plugin-install-list-table.php:338
686
- #, php-format
687
- msgid "By %s"
688
- msgstr "Z %s"
689
 
690
- #: inc/admin/class-lpr-plugin-install-list-table.php:359
691
- #, php-format
692
- msgid "Install %s now"
693
- msgstr "Zainstaluj %s teraz"
694
 
695
- #: inc/admin/class-lpr-plugin-install-list-table.php:359
696
- msgid "Install and Active"
697
- msgstr "Zainstaluj i aktywuj"
698
 
699
- #: inc/admin/class-lpr-plugin-install-list-table.php:366
700
- #, php-format
701
- msgid "Update %s now"
702
- msgstr "Zaktualizuj %s teraz"
703
 
704
- #: inc/admin/class-lpr-plugin-install-list-table.php:366
705
- msgid "Update Now"
706
- msgstr "Zaktualizuj teraz"
707
 
708
- #: inc/admin/class-lpr-plugin-install-list-table.php:373
709
- msgctxt "plugin"
710
- msgid "Enabled"
711
- msgstr "Włączony"
712
 
713
- #: inc/admin/class-lpr-plugin-install-list-table.php:375
714
- msgctxt "plugin"
715
- msgid "Enable"
716
- msgstr "Włącz"
717
 
718
- #: inc/admin/class-lpr-plugin-install-list-table.php:407
719
- #: inc/admin/sub-menus/add-ons.php:197
720
- msgid "M j, Y @ H:i"
721
- msgstr "M d, R @ H:min"
722
 
723
- #: inc/admin/class-lpr-plugin-install-list-table.php:422
724
- msgid "Not Install"
725
- msgstr "Nie instaluj"
726
 
727
- #: inc/admin/class-lpr-plugin-install-list-table.php:451
728
- #: inc/admin/sub-menus/add-ons.php:225
729
- msgid "Last Updated:"
730
- msgstr "Ostatnio zaktualizowane:"
731
 
732
- #: inc/admin/class-lpr-plugin-install-list-table.php:452
733
- #: inc/admin/sub-menus/add-ons.php:226 inc/custom-post-types/order.php:306
734
- #, php-format
735
- msgid "%s ago"
736
- msgstr "%s temu"
737
 
738
- #: inc/admin/class-lpr-plugin-install-list-table.php:458
739
- #: inc/admin/sub-menus/add-ons.php:232
740
- msgctxt "Active plugin installs"
741
- msgid "1+ Million"
742
- msgstr "ponad 1 milion"
743
 
744
- #: inc/admin/class-lpr-plugin-install-list-table.php:462
745
- #: inc/admin/sub-menus/add-ons.php:236
746
- #, php-format
747
- msgid "%s Active Installs"
748
- msgstr "%s Aktywnych instalacji"
749
 
750
- #: inc/admin/class-lpr-plugin-install-list-table.php:468
751
- #: inc/admin/sub-menus/add-ons.php:242
752
- msgid "Untested with your version of WordPress"
753
- msgstr "Nietestowane z Twoją wersją WordPress"
754
 
755
- #: inc/admin/class-lpr-plugin-install-list-table.php:470
756
- #: inc/admin/sub-menus/add-ons.php:244
757
- msgid "<strong>Incompatible</strong> with your version of WordPress"
758
- msgstr "<strong>Niezgodny</strong> z Twoją wersją WordPress"
759
 
760
- #: inc/admin/class-lpr-plugin-install-list-table.php:472
761
- #: inc/admin/sub-menus/add-ons.php:246
762
- msgid "<strong>Compatible</strong> with your version of WordPress"
763
- msgstr "<strong>Zgodny</strong> z Twoją wersją WordPress"
764
 
765
- #: inc/admin/class-lpr-upgrader.php:12
766
- msgid "Invalid Data provided."
767
- msgstr "Umieszczono niepoprawne dane."
768
 
769
- #: inc/admin/class-lpr-upgrader.php:13
770
- msgid "Could not access filesystem."
771
- msgstr "Nie można dostać dostępu do plików systemowych."
772
 
773
- #: inc/admin/class-lpr-upgrader.php:14
774
- msgid "Filesystem error."
775
- msgstr "Błąd plików systemowych."
776
 
777
- #: inc/admin/class-lpr-upgrader.php:15
778
- msgid "Unable to locate WordPress Root directory."
779
- msgstr "Niemożliwe zlokalizowanie ścieżli WordPress."
780
 
781
- #: inc/admin/class-lpr-upgrader.php:16
782
- msgid "Unable to locate WordPress Content directory (wp-content)."
783
- msgstr "Niemożliwe zlokalizowanie ścieżli WordPress (wp-content)."
784
 
785
- #: inc/admin/class-lpr-upgrader.php:17
786
- msgid "Unable to locate WordPress Plugin directory."
787
- msgstr "Niemożliwe zlokalizowanie ścieżli Pluginów."
788
 
789
- #: inc/admin/class-lpr-upgrader.php:18
790
- msgid "Unable to locate WordPress Theme directory."
791
- msgstr "Niemożliwe zlokalizowanie ścieżli szablonu."
792
 
793
- #: inc/admin/class-lpr-upgrader.php:20
794
- #, php-format
795
- msgid "Unable to locate needed folder (%s)."
796
- msgstr "Niemożliwe zlokalizowanie wymaganego folderu (%s)."
797
 
798
- #: inc/admin/class-lpr-upgrader.php:22
799
- msgid "Download failed."
800
- msgstr "Ściąganie nieudane"
801
 
802
- #: inc/admin/class-lpr-upgrader.php:23
803
- msgid "Installing the latest version&#8230;"
804
- msgstr "Instalowanie najnowszej wersji&#8230;"
805
 
806
- #: inc/admin/class-lpr-upgrader.php:24
807
- msgid "The package contains no files."
808
- msgstr "Pakiet nie zawiera żadnych plików"
809
 
810
- #: inc/admin/class-lpr-upgrader.php:25
811
- msgid "Destination folder already exists."
812
- msgstr "Folder docelowy już istnieje !"
813
 
814
- #: inc/admin/class-lpr-upgrader.php:26
815
- msgid "Could not create directory."
816
- msgstr "Nie można stworzyć ścieżki."
817
 
818
- #: inc/admin/class-lpr-upgrader.php:27
819
- msgid "The package could not be installed."
820
- msgstr "Paczka nie mogła zostać zainstalowana"
821
 
822
- #: inc/admin/class-lpr-upgrader.php:29
823
- msgid "Enabling Maintenance mode&#8230;"
824
- msgstr "Enabling Maintenance mode&#8230;"
825
 
826
- #: inc/admin/class-lpr-upgrader.php:30
827
- msgid "Disabling Maintenance mode&#8230;"
828
- msgstr "Disabling Maintenance mode&#8230;"
829
 
830
- #: inc/admin/class.lpr-admin-ajax.php:60
831
- msgid "Import/Export addon not found"
832
- msgstr "Import/Eksport dodatków nie znaleziony. "
833
 
834
- #: inc/admin/class.lpr-admin-ajax.php:72
835
- msgid "Import sample data successfully. The page will reload now!"
836
- msgstr ""
837
- "Import prostych danych zakończony pomyślnie ! Strona zostanie przeładowana !"
838
 
839
- #: inc/admin/class.lpr-admin-ajax.php:75
840
- msgid "Unknown error when importing sample data. Please try again!"
841
- msgstr "Nieznany łąd podczas importowania prostych danych. Spróbuj ponownie !"
842
 
843
- #: inc/admin/class.lpr-admin-ajax.php:78
844
- msgid "Dummy sample data not found. Please try again!"
845
- msgstr "Nie znaleziono plików. Spróbuj ponownie!"
846
 
847
- #: inc/admin/class.lpr-admin-ajax.php:82
848
- msgid ""
849
- "Unknown error when installing/activating Import/Export addon. Please try "
850
- "again!"
851
- msgstr ""
852
- "Nieznany błąd podczas instalacji.aktywacji Dodatku Impor/Eksport. Spróbuj "
853
- "ponownie !"
854
 
855
- #: inc/admin/class.lpr-admin-ajax.php:98 inc/admin/class.lpr-admin-ajax.php:119
856
- #: inc/admin/class.lpr-admin-ajax.php:139
857
- msgid ""
858
- "You do not have sufficient permissions to deactivate plugins for this site."
859
- msgstr "Nie masz władzy by deaktywawać tego pluginu."
860
 
861
- #: inc/admin/class.lpr-admin-ajax.php:170
862
- #: inc/admin/class.lpr-admin-ajax.php:193
863
- #: inc/admin/settings/class.lpr-settings-pages.php:62
864
- #: inc/admin/settings/class.lpr-settings-pages.php:73
865
- #: inc/admin/settings/class.lpr-settings-pages.php:97
866
- #: inc/admin/settings/class.lpr-settings-pages.php:119
867
- msgid "Edit Page"
868
- msgstr "Edytuj stronę"
869
 
870
- #: inc/admin/class.lpr-admin-ajax.php:171
871
- #: inc/admin/class.lpr-admin-ajax.php:194
872
- #: inc/admin/settings/class.lpr-settings-pages.php:63
873
- #: inc/admin/settings/class.lpr-settings-pages.php:74
874
- #: inc/admin/settings/class.lpr-settings-pages.php:98
875
- #: inc/admin/settings/class.lpr-settings-pages.php:120
876
- msgid "View Page"
877
- msgstr "Zobacz stronę"
878
 
879
- #: inc/admin/class.lpr-admin-ajax.php:196
880
- msgid "Page name is empty!"
881
- msgstr "Nazwa strony nie może być pusta !"
882
 
883
- #: inc/admin/class.lpr-admin-assets.php:27
884
- msgid "Delete?"
885
- msgstr "Usunąć?"
886
 
887
- #: inc/admin/class.lpr-profile.php:49
888
- msgid "LearnPress Profile"
889
- msgstr "Profil LearnPress "
890
 
891
- #: inc/admin/class.lpr-profile.php:72
892
- msgid "User Information"
893
- msgstr "Informacje o użytkowniku"
894
 
895
- #: inc/admin/class.lpr-profile.php:82
896
- msgid "Quiz Results"
897
- msgstr "Wyniki testu"
898
 
899
- #: inc/admin/class.lpr-profile.php:132
900
- msgid "<span class=\"course-status passed\">Passed</span>"
901
- msgstr "<span class=\"course-status passed\">Zaliczone</span>"
902
 
903
- #: inc/admin/lpr-admin-functions.php:13
904
- msgid "Quiz is not available"
905
- msgstr "Test nie jest dostępny"
906
 
907
- #: inc/admin/lpr-admin-functions.php:14
908
- msgid "Lesson is not available"
909
- msgstr "Moduł nie jest dostępny"
910
 
911
- #: inc/admin/lpr-admin-functions.php:27
912
- #: inc/admin/settings/class.lpr-settings-pages.php:19
913
- msgid "General"
914
- msgstr "Ogólne"
915
 
916
- #: inc/admin/lpr-admin-functions.php:28
917
- #: inc/admin/settings/class.lpr-settings-pages.php:9
918
- msgid "Pages"
919
- msgstr "Strony"
920
 
921
- #: inc/admin/lpr-admin-functions.php:29
922
- #: inc/admin/settings/class.lpr-settings-payment.php:9
923
- msgid "Payments"
924
- msgstr "Płatności"
925
 
926
- #: inc/admin/lpr-admin-functions.php:30
927
- #: inc/admin/settings/class.lpr-settings-emails.php:9
928
- msgid "Emails"
929
- msgstr "E-maile"
930
 
931
- #: inc/admin/lpr-admin-functions.php:186
932
- msgid "Pending Courses / Publish Courses"
933
- msgstr "Oczekujące kursy / Opublikowane kursy"
934
 
935
- #: inc/admin/lpr-admin-functions.php:186
936
- msgid "Free Courses / Priced Courses"
937
- msgstr "Darmowe kursy / Płatne kursy"
938
 
939
- #: inc/admin/lpr-admin-functions.php:291
940
- msgid "Duplicate this course"
941
- msgstr "Duplikuj kurs"
942
 
943
- #: inc/admin/lpr-admin-functions.php:302 inc/custom-post-types/lesson.php:171
944
- #: inc/custom-post-types/order.php:255 inc/custom-post-types/quiz.php:210
945
- #: templates/order/order-details.php:19
946
- msgid "Course"
947
- msgstr "Kurs"
948
 
949
- #: inc/admin/lpr-admin-functions.php:330
950
- msgid "Op! The course does not exists"
951
- msgstr "Ops... Kurs nie istnieje"
952
 
953
- #: inc/admin/lpr-admin-functions.php:334
954
- msgid "Sorry! You have not permission to duplicate this course"
955
- msgstr "Przepraszamy ! Nie masz uprawnień by zduplikować ten kurs"
956
 
957
- #: inc/admin/lpr-admin-functions.php:396
958
- #, php-format
959
- msgid ""
960
- "Want full free features? Click <a href=\"%s\">here</a> to install LearnPress "
961
- "Add-ons Bundle for free!"
962
- msgstr ""
963
- "Chcesz więcej? Kliknij <a href=\"%s\">tutaj</a>, aby zainstalować LearnPress "
964
- "Add-ons Bundle za darmo !"
965
 
966
- #: inc/admin/lpr-admin-functions.php:467
967
- #, php-format
968
- msgid "The user %s has become a teacher"
969
- msgstr "Użytkownik %s został opiekunem"
970
 
971
- #: inc/admin/lpr-admin-functions.php:508
972
- msgid ""
973
- "\n"
974
- " <div class=\"updated\" id=\"learn-press-install-sample-data-"
975
- "notice\">\n"
976
- " <p>You haven't got any courses yet! Would you like to "
977
- "install sample data?</p>\n"
978
- " <p>If yes, it requires to install addon named <strong>"
979
- "LearnPress Import/Export</strong> but don't worry because it is completely "
980
- "automated. [<a href=\"\" class=\"yes\">Yes</a>]&nbsp;&nbsp;&nbsp;&nbsp;[<a "
981
- "href=\"\" class=\"no\">No thank!</a>]</p>\n"
982
- " </div>"
983
- msgstr ""
984
- "\n"
985
- " <div class=\"updated\" id=\"learn-press-install-sample-data-"
986
- "notice\">\n"
987
- " <p>Nie dodałeś jeszcze rzadnych kursów ! Niechciałbyś dodać "
988
- "jakiś sekcji?</p>\n"
989
- " <p>Jeżeli tak to możesz zainstalować dodatek <strong>"
990
- "LearnPress Import/Export</strong>, ale nie martw się - jest to całkowicie "
991
- "automatyczne . [<a href=\"\" class=\"yes\">Tak</a>]&nbsp;&nbsp;&nbsp;&nbsp;"
992
- "[<a href=\"\" class=\"no\">Nie dzięki!</a>]</p>\n"
993
- " </div>"
994
-
995
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:31
996
- msgid "Do you want to remove this lesson permanently?"
997
- msgstr "Czy na pewno chcesz usunąć ten moduł?"
998
-
999
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:32
1000
- msgid "Do you want to remove this quiz permanently?"
1001
- msgstr "Czy na pewno chcesz usunąć ten test?"
1002
-
1003
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:33
1004
- msgid "Do you want to remove this section permanently?"
1005
- msgstr "Czy na pewno chcesz usunąć tą sekcję?"
1006
-
1007
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:34
1008
- msgid "New quiz added"
1009
- msgstr "Nowy test dodany"
1010
-
1011
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:35
1012
- msgid "New lesson added"
1013
- msgstr "Nowy moduł dodany"
1014
-
1015
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:36
1016
- msgid "New section added"
1017
- msgstr "Nowa sekcja dodana"
1018
-
1019
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:37
1020
- msgid "The lesson removed"
1021
- msgstr "Moduł usunięty"
1022
-
1023
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:38
1024
- msgid "The quiz removed"
1025
- msgstr "Test usunięty"
1026
-
1027
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:39
1028
- msgid "The section removed"
1029
- msgstr "Sekcja usunięta"
1030
-
1031
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:40
1032
- msgid "The ordering completed"
1033
- msgstr "Ustawianie kolejności zakończone"
1034
-
1035
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:41
1036
- msgid "Lesson added to section complete!"
1037
- msgstr "Zakończono dodawanie modułu do sekcji !"
1038
-
1039
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:42
1040
- msgid "Quiz added to section complete!"
1041
- msgstr "Zakończono dodawanie testy do sekcji !"
1042
-
1043
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:43
1044
- #, php-format
1045
- msgid "%s updated"
1046
- msgstr "%s zaktualizowano"
1047
-
1048
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:44
1049
- msgid "Click to quick edit name"
1050
- msgstr "Kliknij, aby szybko edytować nazwę"
1051
-
1052
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:96
1053
- #: inc/admin/meta-boxes/fields/class.quiz-question.php:121
1054
- msgid "Expand All"
1055
- msgstr "Rozwiń wszystkie"
1056
-
1057
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:97
1058
- #: inc/admin/meta-boxes/fields/class.quiz-question.php:122
1059
- msgid "Collapse All"
1060
- msgstr "Zwiń wszystkie"
1061
-
1062
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:99
1063
- msgid "Outline your course and add content with sections, lessons and quizzes."
1064
- msgstr "Określ kurs i dodaj zawartość z sekcjami, modułami oraz testami."
1065
-
1066
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:112
1067
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:167
1068
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:210
1069
- msgid "Expand/Close"
1070
- msgstr "Rozwiń/zamknij"
1071
-
1072
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:145
1073
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:237
1074
- msgid "Click to quick edit"
1075
- msgstr "Kliknij i szybko edytuj"
1076
-
1077
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:155
1078
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:180
1079
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:221
1080
- msgid "Add Lesson"
1081
- msgstr "Dodaj lekcję"
1082
-
1083
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:156
1084
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:181
1085
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:222
1086
- msgid "Add Quiz"
1087
- msgstr "Dodaj test"
1088
-
1089
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:157
1090
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:182
1091
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:223
1092
- msgid "Quick add <span>L</span>esson"
1093
- msgstr "Szybkie dodanie <span>M</span>odułu"
1094
-
1095
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:158
1096
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:183
1097
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:224
1098
- msgid "Quick add <span>Q</span>uiz"
1099
- msgstr "Szybkie dodanie <span>T</span>estu"
1100
-
1101
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:193
1102
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:201
1103
- #: inc/custom-post-types/question.php:164 inc/custom-post-types/quiz.php:187
1104
- msgid "Cancel [ESC]"
1105
- msgstr "Anuluj [ESC]"
1106
 
1107
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:194
1108
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:202
1109
- #: inc/custom-post-types/question.php:163 inc/custom-post-types/quiz.php:186
1110
- msgid "Add [Enter]"
1111
- msgstr "Dodaj [Enter]"
1112
 
1113
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:271
1114
- msgid "--Select a Quiz--"
1115
- msgstr "--Wybierz test--"
1116
 
1117
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:459
1118
- msgid "The course is empty"
1119
- msgstr "Kurs jest pusty"
1120
 
1121
- #: inc/admin/meta-boxes/fields/class.course-lesson-quiz.php:493
1122
- msgid "Success"
1123
- msgstr "Sukces !"
1124
 
1125
- #: inc/admin/meta-boxes/fields/class.question.php:85
1126
- msgid "Select..."
1127
- msgstr "Wybierz..."
1128
 
1129
- #: inc/admin/meta-boxes/fields/class.quiz-question.php:67
1130
- msgid "Can not create a question"
1131
- msgstr "Nie można stworzyć nowego pytania"
1132
 
1133
- #: inc/admin/meta-boxes/fields/class.quiz-question.php:140
1134
- msgid "Add new Question"
1135
- msgstr "Dodaj nowe pytanie"
1136
 
1137
- #: inc/admin/meta-boxes/fields/class.quiz-question.php:144
1138
- msgid "Toggle Dropdown"
1139
- msgstr "Włącz rozwijanie"
1140
 
1141
- #: inc/admin/meta-boxes/fields/class.quiz-question.php:159
1142
- msgid "--Select existing question--"
1143
- msgstr "--Wybierz istniejące pytanie--"
1144
 
1145
- #: inc/admin/meta-boxes/fields/class.teacher.php:46
1146
- #: lib/meta-box/inc/fields/post.php:46
1147
- msgid "Post"
1148
- msgstr "Poczta"
1149
 
1150
- #: inc/admin/meta-boxes/fields/class.teacher.php:54
1151
- #: lib/meta-box/inc/fields/post.php:59 lib/meta-box/inc/fields/taxonomy.php:36
1152
- #: lib/meta-box/inc/fields/user.php:56
1153
- #, php-format
1154
- msgid "Select a %s"
1155
- msgstr "Wybierz %s"
1156
 
1157
- #: inc/admin/pointers/pointers.php:66 inc/custom-post-types/course.php:148
1158
- #: inc/custom-post-types/course.php:153 templates/course/curriculum.php:11
1159
- msgid "Course Curriculum"
1160
- msgstr "Program kursu"
1161
 
1162
- #: inc/admin/pointers/pointers.php:67
1163
- msgid ""
1164
- "Build a course by selecting created lessons and quizzes or adding new ones. "
1165
- "Sorting, editing, shortcuts (l and q), it never gets easier with LearnPress."
1166
- msgstr ""
1167
- "Stwórz kurs, poprzez zaznaczenie stworzonych lekcji i testów lub dodanie "
1168
- "któregoś. Sortowanie, edytowanie oraz skróty (l i q), nigdy nie będzie "
1169
- "łatwiej."
1170
 
1171
- #: inc/admin/settings/class.lpr-settings-emails.php:19
1172
- msgid "General options"
1173
- msgstr "Ustawienia ogólne"
1174
 
1175
- #: inc/admin/settings/class.lpr-settings-emails.php:20
1176
- msgid "Published course"
1177
- msgstr "Kursy opublikowane"
1178
 
1179
- #: inc/admin/settings/class.lpr-settings-emails.php:21
1180
- msgid "Enrolled course"
1181
- msgstr "Kursy rozpoczęte"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1182
 
1183
- #: inc/admin/settings/class.lpr-settings-emails.php:22
1184
- msgid "Passed course"
1185
- msgstr "Kursy zaliczone"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1186
 
1187
- #: inc/admin/settings/class.lpr-settings-emails.php:53
1188
- msgid "Email Options"
1189
- msgstr "Opcje E-maila"
1190
 
1191
- #: inc/admin/settings/class.lpr-settings-emails.php:58
1192
- msgid "From Name"
1193
- msgstr "Z Imienia i nazwiska"
1194
 
1195
- #: inc/admin/settings/class.lpr-settings-emails.php:64
1196
- msgid "From Email"
1197
- msgstr "Z E-maila"
1198
-
1199
- #: inc/admin/settings/class.lpr-settings-emails.php:91
1200
- #: inc/admin/settings/class.lpr-settings-emails.php:138
1201
- #: inc/admin/settings/class.lpr-settings-emails.php:184
1202
- #: inc/admin/settings/class.lpr-settings-emails.php:228
1203
- #: inc/admin/settings/class.lpr-settings-payment.php:60
1204
- #: inc/admin/sub-menus/add-ons.php:443
1205
- msgid "Enable"
1206
- msgstr "Włączone"
1207
 
1208
- #: inc/admin/settings/class.lpr-settings-emails.php:95
1209
- msgid "Send notification for instructors when their course was approved"
1210
- msgstr "Wyślij wiadomość dla opiekunów, kiedy kurs został zatwierdzony"
1211
 
1212
- #: inc/admin/settings/class.lpr-settings-emails.php:99
1213
- #: inc/admin/settings/class.lpr-settings-emails.php:146
1214
- #: inc/admin/settings/class.lpr-settings-emails.php:192
1215
- #: inc/admin/settings/class.lpr-settings-emails.php:236
1216
- msgid "Subject"
1217
- msgstr "Wiadomość"
1218
 
1219
- #: inc/admin/settings/class.lpr-settings-emails.php:103
1220
- #: inc/admin/settings/class.lpr-settings-emails.php:150
1221
- #: inc/admin/settings/class.lpr-settings-emails.php:196
1222
- #: inc/admin/settings/class.lpr-settings-emails.php:240
1223
- msgid "Email subject"
1224
- msgstr "Temat E-maila"
1225
 
1226
- #: inc/admin/settings/class.lpr-settings-emails.php:108
1227
- #: inc/admin/settings/class.lpr-settings-emails.php:154
1228
- #: inc/admin/settings/class.lpr-settings-emails.php:200
1229
- #: inc/admin/settings/class.lpr-settings-emails.php:244
1230
- msgid "Message"
1231
- msgstr "Wiadomość"
1232
 
1233
- #: inc/admin/settings/class.lpr-settings-emails.php:112
1234
- #: inc/admin/settings/class.lpr-settings-emails.php:157
1235
- #: inc/admin/settings/class.lpr-settings-emails.php:203
1236
- msgid "Placeholders"
1237
- msgstr "Placeholders"
1238
 
1239
- #: inc/admin/settings/class.lpr-settings-emails.php:142
1240
- msgid "Send notification for users when they enrolled a course"
1241
- msgstr "Wyslij emaila, kiedy użytkownik dołączy do kursu"
1242
 
1243
- #: inc/admin/settings/class.lpr-settings-emails.php:188
1244
- msgid "Send notification for users when they finished a course"
1245
- msgstr "Wyślij emaila, kiedy użytkownik zakończy kurs"
1246
 
1247
- #: inc/admin/settings/class.lpr-settings-emails.php:232
1248
- msgid "Send notification when a user want to be a teacher"
1249
- msgstr "Wyślij emaila, kiedy użytkownik chce zostać opiekunem"
1250
 
1251
- #: inc/admin/settings/class.lpr-settings-general.php:15
1252
- msgid "General Settings"
1253
- msgstr "Ustawienia"
1254
 
1255
- #: inc/admin/settings/class.lpr-settings-general.php:20
1256
- msgid "Profile methods"
1257
- msgstr "Profil metod"
1258
 
1259
- #: inc/admin/settings/class.lpr-settings-general.php:32
1260
- msgid "Currency"
1261
- msgstr "Waluta"
1262
 
1263
- #: inc/admin/settings/class.lpr-settings-general.php:48
1264
- msgid "For integrated payment method"
1265
- msgstr "Dla zintegrowanej metody płatności"
1266
 
1267
- #: inc/admin/settings/class.lpr-settings-general.php:52
1268
- msgid "Currency Position"
1269
- msgstr "Pozycja waluty"
1270
 
1271
- #: inc/admin/settings/class.lpr-settings-general.php:83
1272
- msgid "Thousands Separator"
1273
- msgstr "Separator tysięcy"
 
 
1274
 
1275
- #: inc/admin/settings/class.lpr-settings-general.php:89
1276
- msgid "Decimals Separator"
1277
- msgstr "Separator dziesiętnych"
1278
 
1279
- #: inc/admin/settings/class.lpr-settings-general.php:95
1280
- msgid "Number of Decimals"
1281
- msgstr "Liczb po przecinku"
1282
 
1283
- #: inc/admin/settings/class.lpr-settings-pages.php:39
1284
- msgid "[ Add a new page ]"
1285
- msgstr "[Dodaj nową stronę]"
1286
 
1287
- #: inc/admin/settings/class.lpr-settings-pages.php:52
1288
- msgid "Courses Page"
1289
- msgstr "Strona kursów"
 
 
 
 
1290
 
1291
- #: inc/admin/settings/class.lpr-settings-pages.php:58
1292
- #: inc/admin/settings/class.lpr-settings-pages.php:92
1293
- #: inc/admin/settings/class.lpr-settings-pages.php:114
1294
- msgid "Ok"
1295
- msgstr "Chap nhan"
1296
 
1297
- #: inc/admin/settings/class.lpr-settings-pages.php:59
1298
- #: inc/admin/settings/class.lpr-settings-pages.php:93
1299
- #: inc/admin/settings/class.lpr-settings-pages.php:115
1300
- msgid "Cancel"
1301
- msgstr "Huy bo"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1302
 
1303
- #: inc/admin/settings/class.lpr-settings-pages.php:69
1304
- msgid "Profile Page"
1305
- msgstr "Strona profilowa"
1306
 
1307
- #: inc/admin/settings/class.lpr-settings-pages.php:80
1308
- msgid "Take Course Confirm"
1309
- msgstr "Potwierdzenie kursu"
 
1310
 
1311
- #: inc/admin/settings/class.lpr-settings-pages.php:137
1312
- msgid "Retake course"
1313
- msgstr "Liczba możliwych podejść do kursu"
 
1314
 
1315
- #: inc/admin/settings/class.lpr-settings-pages.php:140
1316
- msgid "The number of times a user can re-take course. Set to 0 to disabled"
1317
- msgstr "Liczba jaką kursant może powtórzyć kurs. Wybierz 0, aby wyłączyć."
 
1318
 
1319
- #: inc/admin/settings/class.lpr-settings-pages.php:157
1320
- msgid "Retake quiz"
1321
- msgstr "Liczba możliwych podejść do testu"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1322
 
1323
- #: inc/admin/settings/class.lpr-settings-pages.php:160
1324
- msgid "The number of times a user can re-take quiz. Set to 0 to disabled"
1325
- msgstr "Liczba jaką kursant może powtórzyć test. Wybierz 0, aby wyłączyć."
 
1326
 
1327
- #: inc/admin/settings/class.lpr-settings-payment.php:15
1328
- msgid "Paypal"
1329
- msgstr "Paypal"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1330
 
1331
- #: inc/admin/settings/class.lpr-settings-payment.php:66
1332
- msgid "Type"
1333
- msgstr "Typy"
 
 
1334
 
1335
- #: inc/admin/settings/class.lpr-settings-payment.php:69
1336
- msgid "Basic"
1337
- msgstr "Podstawy"
1338
 
1339
- #: inc/admin/settings/class.lpr-settings-payment.php:70
1340
- msgid "Security"
1341
- msgstr "Zabezpieczenia"
1342
 
1343
- #: inc/admin/settings/class.lpr-settings-payment.php:75
1344
- msgid "Email Address"
1345
- msgstr "Adres E-mail"
1346
 
1347
- #: inc/admin/settings/class.lpr-settings-payment.php:81
1348
- msgid "API Username"
1349
- msgstr "API Username"
1350
 
1351
- #: inc/admin/settings/class.lpr-settings-payment.php:87
1352
- msgid "API Password"
1353
- msgstr "API Password"
 
1354
 
1355
- #: inc/admin/settings/class.lpr-settings-payment.php:93
1356
- msgid "API Signature"
1357
- msgstr "API Signature"
1358
 
1359
- #: inc/admin/settings/class.lpr-settings-payment.php:104
1360
- msgid "Sandbox Mode"
1361
- msgstr "Sandbox Mode"
1362
 
1363
- #: inc/admin/settings/class.lpr-settings-payment.php:110
1364
- msgid "Sandbox Email Address"
1365
- msgstr "Sandbox Email Address"
1366
 
1367
- #: inc/admin/settings/class.lpr-settings-payment.php:116
1368
- msgid "Sandbox API Username"
1369
- msgstr "Sandbox API Username"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1370
 
1371
- #: inc/admin/settings/class.lpr-settings-payment.php:122
1372
- msgid "Sandbox API Password"
1373
- msgstr "Sandbox API Password"
 
1374
 
1375
- #: inc/admin/settings/class.lpr-settings-payment.php:128
1376
- msgid "Sandbox API Signature"
1377
- msgstr "Sandbox API Signature"
1378
 
1379
- #: inc/admin/statistics/courses.php:9
1380
- msgid "Relation of your courses"
1381
- msgstr "Relacje kursów"
1382
 
1383
- #: inc/admin/statistics/students.php:9
1384
- msgid "Number of student enrolled your courses"
1385
- msgstr "Liczba studentów, która dołączyła do kursu"
 
1386
 
1387
- #: inc/admin/statistics/students.php:12
1388
- msgid "Last 7 Days"
1389
- msgstr "Ostatnie 7 dni"
 
1390
 
1391
- #: inc/admin/statistics/students.php:15
1392
- msgid "Last 30 Days"
1393
- msgstr "Ostatnie 30 dni"
1394
 
1395
- #: inc/admin/statistics/students.php:18
1396
- msgid "Last 12 Months"
1397
- msgstr "Ostatnie 12 miesięcy"
1398
 
1399
- #: inc/admin/statistics/students.php:22
1400
- msgid "From"
1401
- msgstr "Z"
1402
 
1403
- #: inc/admin/statistics/students.php:24
1404
- msgid "To"
1405
- msgstr "Do"
 
1406
 
1407
- #: inc/admin/statistics/students.php:27
1408
- msgid "Go"
1409
- msgstr "Idź"
1410
 
1411
- #: inc/admin/sub-menus/add-ons.php:21
1412
- #, php-format
1413
- msgid "All <span class=\"count\">(%s)</span>"
1414
- msgstr "Wszystkie <span class=\"count\">(%s)</span>"
 
 
1415
 
1416
- #: inc/admin/sub-menus/add-ons.php:26
1417
- #, php-format
1418
- msgid "Bundle Activate <span class=\"count\">(%s)</span>"
1419
- msgstr "Pakiet aktywny <span class=\"count\">(%s)</span>"
1420
 
1421
- #: inc/admin/sub-menus/add-ons.php:31
1422
- #, php-format
1423
- msgid "Get more <span class=\"count\">(%s)</span>"
1424
- msgstr "Więcej <span class=\"count\">(%s)</span>"
1425
 
1426
- #: inc/admin/sub-menus/add-ons.php:56
1427
- msgid "LearnPress Add-ons"
1428
- msgstr "Dodatki LearnPress"
 
 
 
 
 
 
 
 
 
1429
 
1430
- #: inc/admin/sub-menus/add-ons.php:57
1431
- msgid "Add-ons are features that you can add or remove depending on your needs"
1432
  msgstr ""
1433
- "Dodatki są narzędziami które możesz włączyć lub wyłączyć w zależności od "
1434
- "potrzeb."
1435
 
1436
- #: inc/admin/sub-menus/add-ons.php:95
1437
  msgid ""
1438
- "One or more plugins state has changed to activate/deactivate. Click 'Apply' "
1439
- "button to update"
1440
  msgstr ""
1441
- "Jeden lub więcej pluginów ma zmieniony status na aktywowany/nie aktywny. "
1442
- "Kliknij \"Zatwierdź\" aby zaktualizować"
1443
 
1444
- #: inc/admin/sub-menus/add-ons.php:158
1445
- msgid "Install and/or activate all"
1446
- msgstr "Zainstaluj i.lub aktywuj wszystkie"
1447
 
1448
- #: inc/admin/sub-menus/add-ons.php:165
1449
- msgid "Plugin <i>'{{data.name}}'</i> install failed! Please try again"
1450
  msgstr ""
1451
- "Instalacja pluginu <i>'{{data.name}}'</i> nie powiodła się. Spróbuj ponownie."
1452
 
1453
- #: inc/admin/sub-menus/add-ons.php:170
1454
- msgid "Plugin <i>'{{data.name}}'</i> install completed!"
1455
- msgstr "Instalacja pluginu <i>'{{data.name}}'</i> zakończona!"
1456
 
1457
- #: inc/admin/sub-menus/add-ons.php:216
1458
- #, php-format
1459
- msgid "<cite>By <a href=\"%s\">%s</a></cite>"
1460
- msgstr "<cite>Przez <a href=\"%s\">%s</a></cite>"
1461
 
1462
- #: inc/admin/sub-menus/add-ons.php:268
1463
- msgid "Core"
1464
- msgstr "Jądro"
1465
 
1466
- #: inc/admin/sub-menus/add-ons.php:278
1467
- msgid "Settings"
1468
- msgstr "Ustawienia"
1469
 
1470
- #: inc/admin/sub-menus/add-ons.php:326
1471
- msgid "Plugin"
1472
- msgstr "Plugin"
1473
 
1474
- #: inc/admin/sub-menus/add-ons.php:327
1475
- msgid "Description"
1476
- msgstr "Opis"
 
1477
 
1478
- #: inc/admin/sub-menus/add-ons.php:386
1479
- msgid "Network Activate"
1480
- msgstr "Sieć aktywna"
 
 
 
1481
 
1482
- #: inc/admin/sub-menus/add-ons.php:386
1483
- msgid "Activate"
1484
- msgstr "Aktywuj"
 
 
 
 
1485
 
1486
- #: inc/admin/sub-menus/add-ons.php:389
1487
- msgid "Network Deactivate"
1488
- msgstr "Sieć nie aktywna"
 
 
 
 
 
 
1489
 
1490
- #: inc/admin/sub-menus/add-ons.php:389
1491
- msgid "Deactivate"
1492
- msgstr "Zdeaktywuj"
1493
 
1494
- #: inc/admin/sub-menus/add-ons.php:393
1495
- msgid "Update"
1496
- msgstr "Zaktualizuj"
 
1497
 
1498
- #: inc/admin/sub-menus/add-ons.php:395
1499
- #: lib/meta-box/inc/fields/autocomplete.php:15
1500
- #: lib/meta-box/inc/fields/autocomplete.php:66
1501
  msgid "Delete"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1502
  msgstr "Usuń"
1503
 
1504
- #: inc/admin/sub-menus/add-ons.php:441
1505
- msgid "Disable this plugin"
1506
- msgstr "Wyłącz ten plugin"
 
1507
 
1508
- #: inc/admin/sub-menus/add-ons.php:441
1509
- msgid "Disable"
1510
- msgstr "Wyłącz"
 
1511
 
1512
- #: inc/admin/sub-menus/add-ons.php:443
1513
- msgid "Enable this plugin"
1514
- msgstr "Włącz ten plugin"
 
1515
 
1516
- #: inc/admin/sub-menus/add-ons.php:456
1517
- #, php-format
1518
- msgid "Select %s"
1519
- msgstr "Zaznacz %s"
1520
 
1521
- #: inc/admin/sub-menus/settings.php:36
1522
- msgid "Settings saved"
1523
- msgstr "Ustawienia zapisane"
 
1524
 
1525
- #: inc/admin/sub-menus/settings.php:57
1526
- msgid "Save settings"
1527
- msgstr "Zapisz ustawienia"
 
1528
 
1529
- #: inc/admin/sub-menus/statistics.php:16
1530
- msgid "Students"
1531
- msgstr "Kursanci"
1532
 
1533
- #: inc/custom-post-types/course.php:38
1534
- msgctxt "Post Type General Name"
1535
- msgid "Courses"
1536
- msgstr "Kursy"
1537
 
1538
- #: inc/custom-post-types/course.php:39
1539
- msgctxt "Post Type Singular Name"
1540
- msgid "Course"
1541
- msgstr "Kurs"
 
1542
 
1543
- #: inc/custom-post-types/course.php:41
1544
- msgid "Parent Item:"
1545
- msgstr "Przedmioty ponad"
1546
 
1547
- #: inc/custom-post-types/course.php:43
1548
- msgid "View Course"
1549
- msgstr "Zobacz kurs"
1550
 
1551
- #: inc/custom-post-types/course.php:44
1552
- msgid "Add New Course"
1553
- msgstr "Dodaj nowy kurs"
1554
 
1555
- #: inc/custom-post-types/course.php:45 inc/custom-post-types/lesson.php:46
1556
- #: inc/custom-post-types/question.php:36
1557
- msgid "Add New"
1558
- msgstr "Dodaj nowy"
1559
 
1560
- #: inc/custom-post-types/course.php:46
1561
- msgid "Edit Course"
1562
- msgstr "Edytuj kurs"
1563
 
1564
- #: inc/custom-post-types/course.php:47
1565
- msgid "Update Course"
1566
- msgstr "Zaktualizuj kurs"
 
1567
 
1568
- #: inc/custom-post-types/course.php:48
1569
- msgid "Search Course"
1570
- msgstr "Znajdź kurs"
1571
 
1572
- #: inc/custom-post-types/course.php:49
1573
- msgid "No course found"
1574
- msgstr "Nie znaleziono kursów"
 
1575
 
1576
- #: inc/custom-post-types/course.php:50
1577
- msgid "No course found in Trash"
1578
- msgstr "Nie znaleziono kursów w śmieciach"
 
 
1579
 
1580
- #: inc/custom-post-types/course.php:74 inc/custom-post-types/course.php:76
1581
- msgid "Course Categories"
1582
- msgstr "Kategoria kursu"
1583
 
1584
- #: inc/custom-post-types/course.php:77 inc/custom-post-types/course.php:78
1585
- msgid "Category"
1586
- msgstr "Kategoria"
1587
 
1588
- #: inc/custom-post-types/course.php:79
1589
- msgid "Add New Course Category"
1590
- msgstr "Dodaj nową kategorię kursu"
1591
 
1592
- #: inc/custom-post-types/course.php:80
1593
- msgid "All Categories"
1594
- msgstr "Wszystkie kategorie"
 
1595
 
1596
- #: inc/custom-post-types/course.php:100
1597
- msgid "Course Tags"
1598
- msgstr "Tagi kursu"
 
 
 
 
1599
 
1600
- #: inc/custom-post-types/course.php:101 inc/custom-post-types/lesson.php:80
1601
- #: inc/custom-post-types/lesson.php:81 inc/custom-post-types/lesson.php:82
1602
- #: inc/custom-post-types/question.php:63 inc/custom-post-types/question.php:64
1603
- msgid "Tag"
1604
- msgstr "Tag"
1605
 
1606
- #: inc/custom-post-types/course.php:102
1607
- msgid "Search Course Tags"
1608
- msgstr "Znajdź tagi kursu"
 
 
 
 
1609
 
1610
- #: inc/custom-post-types/course.php:103
1611
- msgid "Popular Course Tags"
1612
- msgstr "Popularne tagi kursu"
 
1613
 
1614
- #: inc/custom-post-types/course.php:104
1615
- msgid "All Course Tags"
1616
- msgstr "Wszystkie tagi kursu"
 
 
 
 
1617
 
1618
- #: inc/custom-post-types/course.php:107
1619
- msgid "Edit Course Tag"
1620
- msgstr "Edytuj tag kursu"
 
1621
 
1622
- #: inc/custom-post-types/course.php:108
1623
- msgid "Update Course Tag"
1624
- msgstr "Zaktualizuj tag kursu"
 
 
 
 
1625
 
1626
- #: inc/custom-post-types/course.php:109
1627
- msgid "Add New Course Tag"
1628
- msgstr "Dodaj nowy tag kursu"
 
1629
 
1630
- #: inc/custom-post-types/course.php:110
1631
- msgid "New Course Tag Name"
1632
- msgstr "Nowa nazwa tagu kursu"
 
 
 
 
1633
 
1634
- #: inc/custom-post-types/course.php:111
1635
- msgid "Separate tags with commas"
1636
- msgstr "Rozdziel tagi za pomocą przecinka"
 
 
 
1637
 
1638
- #: inc/custom-post-types/course.php:112
1639
- msgid "Add or remove tags"
1640
- msgstr "Dodaj lub usuń tagi"
1641
 
1642
- #: inc/custom-post-types/course.php:113
1643
- msgid "Choose from the most used tags"
1644
- msgstr "Wybierz z najbardziej używanych tagów"
1645
 
1646
- #: inc/custom-post-types/course.php:169
1647
- msgid "Course Settings"
1648
- msgstr "Ustawienia kursu"
 
 
 
 
 
1649
 
1650
- #: inc/custom-post-types/course.php:174
1651
- msgid "Course Duration"
1652
- msgstr "Czas trwania kursu"
1653
 
1654
- #: inc/custom-post-types/course.php:177
1655
- msgid "The length of the course (by weeks)"
1656
- msgstr "Długość kursu (w tygodniach)"
 
1657
 
1658
- #: inc/custom-post-types/course.php:187
1659
- msgid "Number of Students Enrolled"
1660
- msgstr "Liczba kursantów, którzy dołączyli"
 
1661
 
1662
- #: inc/custom-post-types/course.php:190
1663
- msgid "The number of students took this course"
1664
- msgstr "Liczba kursantów, którzy wzięli udział w kursie"
 
1665
 
1666
- #: inc/custom-post-types/course.php:194
1667
- msgid "Maximum students can take the course"
1668
- msgstr "Maksymalna liczba kursantów jaka może wziąć udział w kursie"
1669
 
1670
- #: inc/custom-post-types/course.php:197
1671
- msgid "Maximum Number Student of the Course"
1672
- msgstr "Maksymalna liczba kursantów kursu"
1673
 
1674
- #: inc/custom-post-types/course.php:201
1675
- msgid "Re-take course"
1676
- msgstr "Liczba możliwych podejść do kursu"
1677
 
1678
- #: inc/custom-post-types/course.php:204
1679
- msgid "How many times the user can re-take this course. Set to 0 to disable"
1680
- msgstr "Ile razy kursant może wziąć udział w kursie. Wybierz 0, aby wyłączyć"
1681
 
1682
- #: inc/custom-post-types/course.php:219
1683
- msgid "Course Assessment Settings"
1684
- msgstr "Ustawienia zadań kursów"
1685
 
1686
- #: inc/custom-post-types/course.php:224
1687
- msgid "Course Final Quiz"
1688
- msgstr "Test kończący kurs"
1689
 
1690
- #: inc/custom-post-types/course.php:227
1691
- msgid ""
1692
- "If Final Quiz option is checked, then the course will be assessed by result "
1693
- "of the last quiz, else the course\n"
1694
- " will be assessed by the progress of "
1695
- "learning lessons"
1696
- msgstr ""
1697
- "Jeśli opcja \"test końcowy\" jest zaznaczona, to oczywiście będą oceniane "
1698
- "przez wyniku ostatniego testu, ewentualnie kurs będzie rozstrzygany poprzez "
1699
- "postęp nauki."
1700
 
1701
- #: inc/custom-post-types/course.php:230
1702
- msgid "No Final Quiz"
1703
- msgstr "Bez testu kończącego"
1704
 
1705
- #: inc/custom-post-types/course.php:231
1706
- msgid "Using Final Quiz"
1707
- msgstr "Test kończący"
1708
 
1709
- #: inc/custom-post-types/course.php:236
1710
- msgid "Passing Condition"
1711
- msgstr "Minimalny % do zaliczenia"
1712
 
1713
- #: inc/custom-post-types/course.php:241
1714
- msgid "The percentage of quiz result to finish the course"
1715
- msgstr "Procent z wyników testu, aby zatwierdzić zdanie kursu."
 
1716
 
1717
- #: inc/custom-post-types/course.php:255
1718
- msgid "Course Payment Settings"
1719
- msgstr "Ustawienia płatności za kurs"
1720
 
1721
- #: inc/custom-post-types/course.php:260
1722
- msgid "Enrolled Require"
1723
- msgstr "Wymagana rejestracja"
1724
 
1725
- #: inc/custom-post-types/course.php:263
1726
- msgid "Require users logged in to study or public to all"
1727
- msgstr "Wymagać zalogowania, czy dostępny dla wszystkich."
1728
 
1729
- #: inc/custom-post-types/course.php:265
1730
- msgid "Yes, enroll is required"
1731
- msgstr "Tak, przystąpienie jest wymagane"
1732
 
1733
- #: inc/custom-post-types/course.php:266 inc/custom-post-types/lesson.php:117
1734
- msgid "No"
1735
- msgstr "Nie"
 
 
 
 
1736
 
1737
- #: inc/custom-post-types/course.php:272
1738
- msgid "Course Payment"
1739
- msgstr "Opłata za kurs"
1740
 
1741
- #: inc/custom-post-types/course.php:275
1742
  msgid ""
1743
- "If Paid be checked, An administrator will review then set course price and "
1744
- "commission"
1745
  msgstr ""
1746
- "Jeżeli płatność jest zaznaczona, administrator przejrzy ustawienia i je "
1747
- "potwierdzi"
1748
 
1749
- #: inc/custom-post-types/course.php:277 inc/order/lpr-order-functions.php:352
1750
- msgid "Free"
1751
- msgstr "Darmowy. "
 
1752
 
1753
- #: inc/custom-post-types/course.php:278
1754
- msgid "Paid"
1755
- msgstr "Płatny"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1756
 
1757
- #: inc/custom-post-types/course.php:287
1758
- msgid "If free, this field is empty or set 0. (Only admin can edit this field)"
 
 
1759
  msgstr ""
1760
- "Dla opcji \"darmowy\" zostaw puste lub wybierz 0. (tylko admin może edytować "
1761
- "to pole)"
1762
 
1763
- #: inc/custom-post-types/course.php:296
1764
- msgid "This course is enrolled require and the suggestion price is "
1765
- msgstr "Kurs wymaga przystąpienia i proponowana cena wynosi"
 
1766
 
1767
- #: inc/custom-post-types/course.php:300
1768
- msgid "This course is free."
1769
- msgstr "Kurs jest bezpłatny"
 
1770
 
1771
- #: inc/custom-post-types/course.php:306
1772
- msgid "Course Price"
1773
- msgstr "Cena kursu"
1774
 
1775
- #: inc/custom-post-types/course.php:320
1776
- msgid "Course Suggestion Price"
1777
- msgstr "Sugestia ceny kursu"
1778
 
1779
- #: inc/custom-post-types/course.php:325
1780
- msgid "The course price you want to suggest for admin to set."
1781
- msgstr "Sugestia dla admina jeżeli chodzi o cenę kursu"
1782
 
1783
- #: inc/custom-post-types/course.php:356
1784
- msgid "Please enter the title of the course"
1785
- msgstr "Proszę nadać tytuł dla kursu"
1786
 
1787
- #: inc/custom-post-types/course.php:360
1788
- msgid "Please add at least one section for the course"
1789
- msgstr "Proszę dodać minimum jedną sekcję do kursu"
1790
 
1791
- #: inc/custom-post-types/course.php:367
1792
- msgid "Please enter the title of the section"
1793
- msgstr "Proszę dodać tytuł sekcji"
1794
 
1795
- #: inc/custom-post-types/course.php:375
1796
- msgid "Please set a price for this course"
1797
- msgstr "Proszę nadać cenę dla tego kursu"
1798
 
1799
- #: inc/custom-post-types/lesson.php:40 inc/custom-post-types/lesson.php:41
1800
- #: inc/custom-post-types/lesson.php:44
1801
- msgid "Lessons"
1802
- msgstr "Moduły"
1803
 
1804
- #: inc/custom-post-types/lesson.php:42
1805
- msgid "Lesson"
1806
- msgstr "Moduł"
1807
 
1808
- #: inc/custom-post-types/lesson.php:43
1809
- msgid "Add New Lesson"
1810
- msgstr "Dodaj nowy moduł"
1811
 
1812
- #: inc/custom-post-types/lesson.php:45
1813
- msgid "View Lesson"
1814
- msgstr "Zobacz moduł"
1815
 
1816
- #: inc/custom-post-types/lesson.php:47
1817
- msgid "Edit Lesson"
1818
- msgstr "Edytuj moduł"
 
1819
 
1820
- #: inc/custom-post-types/lesson.php:48
1821
- msgid "Update Lesson"
1822
- msgstr "Zaktualizuj moduł"
1823
 
1824
- #: inc/custom-post-types/lesson.php:49
1825
- msgid "Search Lesson"
1826
- msgstr "Znajdź moduł"
 
 
1827
 
1828
- #: inc/custom-post-types/lesson.php:50
1829
- msgid "No lesson found"
1830
- msgstr "Żadnego modułu nie znaleziono"
1831
 
1832
- #: inc/custom-post-types/lesson.php:51
1833
- msgid "No lesson found in Trash"
1834
- msgstr "Żadnego modułu nie znaleziono w śmieciach"
1835
 
1836
- #: inc/custom-post-types/lesson.php:83 inc/custom-post-types/question.php:65
1837
- msgid "Add New Tag"
1838
- msgstr "Dodaj nowy tag"
1839
 
1840
- #: inc/custom-post-types/lesson.php:84 inc/custom-post-types/question.php:66
1841
- msgid "All Tags"
1842
- msgstr "Wszystkie tagi"
1843
 
1844
- #: inc/custom-post-types/lesson.php:100
1845
- msgid "Lesson Settings"
1846
- msgstr "Ustawienia modułu"
1847
 
1848
- #: inc/custom-post-types/lesson.php:104
1849
- msgid "Lesson Duration"
1850
- msgstr "Czas trwania kursu"
1851
 
1852
- #: inc/custom-post-types/lesson.php:107
1853
- msgid "The length of the lesson (in minutes)"
1854
- msgstr "Długość kursu (w minutach)"
1855
 
1856
- #: inc/custom-post-types/lesson.php:111
1857
- msgid "Preview Lesson"
1858
- msgstr "Lekcja podglądowa"
1859
 
1860
- #: inc/custom-post-types/lesson.php:114
1861
- msgid ""
1862
- "If this is a preview lesson, then student can view this lesson content "
1863
- "without taking the course"
1864
- msgstr ""
1865
- "Jeżeli jest to lekcja podglądowa, student może zobaczyć ja bez dołączania do "
1866
- "kursu"
1867
 
1868
- #: inc/custom-post-types/lesson.php:116
1869
- msgid "Yes"
1870
- msgstr "Tak"
1871
 
1872
- #: inc/custom-post-types/lesson.php:140
1873
- msgid "Please enter the title of the lesson"
1874
- msgstr "Proszę wpisać tytuł modułu"
 
1875
 
1876
- #: inc/custom-post-types/lesson.php:195 inc/custom-post-types/quiz.php:234
1877
- msgid "Not assigned yet"
1878
- msgstr "Jeszcze nie przypisano"
1879
 
1880
- #: inc/custom-post-types/order.php:137
1881
- msgid "Processing..."
1882
- msgstr "Ładowanie..."
1883
 
1884
- #: inc/custom-post-types/order.php:154 inc/custom-post-types/order.php:157
1885
- #: inc/custom-post-types/order.php:484
1886
- msgid "Apply"
1887
- msgstr "Zatwierdź"
1888
 
1889
- #: inc/custom-post-types/order.php:189
1890
- msgid "View the transaction details"
1891
- msgstr "Zobacz szczegóły transakcji"
1892
 
1893
- #: inc/custom-post-types/order.php:189
1894
- msgid "Details"
1895
- msgstr "Szczegóły"
1896
 
1897
- #: inc/custom-post-types/order.php:253 inc/custom-post-types/order.php:351
1898
- msgid "Order"
1899
- msgstr "Zamówienie"
1900
 
1901
- #: inc/custom-post-types/order.php:254
1902
- msgid "Student"
1903
- msgstr "Kursant"
1904
 
1905
- #: inc/custom-post-types/order.php:256
1906
- msgid "Date"
1907
- msgstr "Data"
1908
 
1909
- #: inc/custom-post-types/order.php:257 inc/custom-post-types/order.php:470
1910
- #: templates/order/order-details.php:20 templates/order/order-details.php:58
1911
- msgid "Total"
1912
- msgstr "Razem"
1913
 
1914
- #: inc/custom-post-types/order.php:258 inc/custom-post-types/order.php:476
1915
- msgid "Status"
1916
- msgstr "Status"
1917
 
1918
- #: inc/custom-post-types/order.php:299
1919
- msgid "Y/m/d g:i:s a"
1920
- msgstr "r/m/d g:m:s a"
1921
 
1922
- #: inc/custom-post-types/order.php:308
1923
- msgid "Y/m/d"
1924
- msgstr "r/m/d"
1925
 
1926
- #: inc/custom-post-types/order.php:321
1927
- msgid "Course has been removed"
1928
- msgstr "Kurs został usunięty"
1929
 
1930
- #: inc/custom-post-types/order.php:349 inc/custom-post-types/order.php:350
1931
- #: inc/custom-post-types/order.php:354
1932
- msgid "Orders"
1933
- msgstr "Zamówienia"
1934
 
1935
- #: inc/custom-post-types/order.php:352
1936
- msgid "Add New Order"
1937
- msgstr "Zrób nowe zamówienie"
1938
 
1939
- #: inc/custom-post-types/order.php:353 inc/custom-post-types/order.php:404
1940
- #: templates/order/order-details.php:15
1941
- msgid "Order Details"
1942
- msgstr "Detale zamówienia"
1943
 
1944
- #: inc/custom-post-types/order.php:383
1945
- msgctxt "Order status"
1946
- msgid "Draft Order"
1947
- msgstr "Podgląd zamówienia"
1948
 
1949
- #: inc/custom-post-types/order.php:432 inc/custom-post-types/order.php:436
1950
- msgid "Unknow"
1951
- msgstr "Nieznany"
1952
 
1953
- #: inc/custom-post-types/order.php:448
1954
- msgid "Amount"
1955
- msgstr "Cena"
1956
 
1957
- #: inc/custom-post-types/order.php:457 templates/order/order-details.php:41
1958
- msgid "Free!"
1959
- msgstr "Darmowy !"
1960
 
1961
- #: inc/custom-post-types/order.php:464
1962
- msgid "Sub Total"
1963
- msgstr "Suma cząstkowa"
1964
 
1965
- #: inc/custom-post-types/order.php:478
1966
- msgid "Unpublished"
1967
- msgstr "Nie opublikowano"
1968
 
1969
- #: inc/custom-post-types/order.php:480
1970
- msgid "Pending"
1971
- msgstr "W oczekiwaniu"
1972
 
1973
- #: inc/custom-post-types/order.php:482
1974
- msgid "Completed"
1975
- msgstr "Zakończono"
1976
 
1977
- #: inc/custom-post-types/question.php:30 inc/custom-post-types/question.php:31
1978
- msgid "Question Bank"
1979
- msgstr "Bank pytań"
 
 
 
 
 
 
1980
 
1981
- #: inc/custom-post-types/question.php:32
1982
- msgid "Question"
1983
- msgstr "Pytanie"
1984
 
1985
- #: inc/custom-post-types/question.php:33 inc/custom-post-types/quiz.php:85
1986
- msgid "Questions"
1987
- msgstr "Pytania"
1988
 
1989
- #: inc/custom-post-types/question.php:34
1990
- msgid "View Question"
1991
- msgstr "Zobacz pytanie"
1992
 
1993
- #: inc/custom-post-types/question.php:35
1994
- msgid "Add New Question"
1995
- msgstr "Dodaj nowe pytanie"
1996
 
1997
- #: inc/custom-post-types/question.php:37
1998
- msgid "Edit Question"
1999
- msgstr "Edytuj pytanie"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2000
 
2001
- #: inc/custom-post-types/question.php:38
2002
- msgid "Update Question"
2003
- msgstr "Zaktualizuj pytanie"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2004
 
2005
- #: inc/custom-post-types/question.php:39
2006
- msgid "Search Questions"
2007
- msgstr "Znajdź pytania"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2008
 
2009
- #: inc/custom-post-types/question.php:40
2010
- msgid "No question found"
2011
- msgstr "Nie znaleziono pytań"
2012
 
2013
- #: inc/custom-post-types/question.php:41
2014
- msgid "No question found in trash"
2015
- msgstr "Nie znaleziono pytań w śmieciach"
 
 
 
 
 
 
 
 
 
2016
 
2017
- #: inc/custom-post-types/question.php:62
2018
- msgid "Question Tag"
2019
- msgstr "Tagi pytania"
2020
 
2021
- #: inc/custom-post-types/question.php:97
2022
- msgid "Type of question"
2023
- msgstr "Typ pytania"
2024
 
2025
- #: inc/custom-post-types/question.php:106
2026
- msgid "Mark For This Question"
2027
- msgstr "Oznacz dla tego pytania"
2028
 
2029
- #: inc/custom-post-types/question.php:110
2030
- msgid "Mark for choosing the right answer"
2031
- msgstr "Zaznacz dla wyboru poprawnej odpowiedzi."
 
2032
 
2033
- #: inc/custom-post-types/question.php:133
2034
- msgid "Please enter the title of the question"
2035
- msgstr "Proszę wpisać tytuł pytania"
2036
 
2037
- #: inc/custom-post-types/question.php:137
2038
- msgid "Please a type of question"
2039
- msgstr "Proszę wpisać pytanie"
2040
 
2041
- #: inc/custom-post-types/quiz.php:50 inc/custom-post-types/quiz.php:51
2042
- #: inc/custom-post-types/quiz.php:55
2043
- msgid "Quizzes"
2044
- msgstr "Testy"
2045
 
2046
- #: inc/custom-post-types/quiz.php:52
2047
- msgid "Quiz"
2048
- msgstr "Test"
2049
 
2050
- #: inc/custom-post-types/quiz.php:53
2051
- msgid "Add New Quiz"
2052
- msgstr "Dodaj nowy test"
2053
 
2054
- #: inc/custom-post-types/quiz.php:54
2055
- msgid "Edit Quiz"
2056
- msgstr "Edytuj test"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2057
 
2058
- #: inc/custom-post-types/quiz.php:101
2059
- msgid "LearnPress Quiz Settings"
2060
- msgstr "Ustawienia testu LearnPress"
2061
 
2062
- #: inc/custom-post-types/quiz.php:107
2063
- msgid "Quiz Duration"
2064
- msgstr "Czas trwania kursu"
2065
 
2066
- #: inc/custom-post-types/quiz.php:108
2067
- msgid "Quiz duration (in minutes). Auto submits when expire. Set 0 to disable."
2068
- msgstr ""
2069
- "Czas trwania kursu (w minutach). Auto zakończenie po upływie czasu. Wpisz 0, "
2070
- "by wyłączyć."
2071
 
2072
- #: inc/custom-post-types/quiz.php:115
2073
- msgid "Re-take quiz"
2074
- msgstr "Przystąp ponownie do testu"
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3
+ # This file is distributed under the same license as the PACKAGE package.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
+ #
6
  msgid ""
7
  msgstr ""
8
+ "Project-Id-Version: \n"
9
  "Report-Msgid-Bugs-To: \n"
10
+ "POT-Creation-Date: 2018-04-11 09:01+0700\n"
11
+ "PO-Revision-Date: 2018-04-11 03:28+0000\n"
12
+ "Last-Translator: admin <phonglq@foobla.com>\n"
13
  "Language-Team: Polish\n"
14
+ "Language: pl_PL\n"
15
  "MIME-Version: 1.0\n"
16
  "Content-Type: text/plain; charset=UTF-8\n"
17
  "Content-Transfer-Encoding: 8bit\n"
18
+ "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
19
+ "|| n%100>=20) ? 1 : 2);\n"
20
+ "X-Generator: Loco https://localise.biz/"
 
21
 
22
+ #: learnpress.php:293
23
  #, php-format
24
+ msgid ""
25
+ "LearnPress plugin base directory must be <strong>learnpress/learnpres."
26
+ "php</strong> (case sensitive) to ensure all functions work properly and "
27
+ "fully operational (currently <strong>%s</strong>)"
28
+ msgstr ""
29
+ "Folder pluginu LeanPress musi się równać <strong>learnpress/learnpress."
30
+ "php</strong>, aby wszystkie funkcje działały poprawnie! (Obecnie jest to "
31
+ "<strong>%s</strong>)"
 
 
 
 
 
32
 
33
+ #: inc/abstract-settings.php:59
34
+ #: inc/admin/settings/abstract-settings-page.php:48
35
+ msgid "No setting available."
36
+ msgstr "Brak ustawień."
37
 
38
+ #: inc/class-lp-ajax.php:109
39
+ msgid "Sorry! Registration is not allowed on this site."
40
+ msgstr "Przepraszamy ! Rejestracja jest niedostępna na tej stronie."
41
 
42
+ #: inc/class-lp-ajax.php:113
43
+ msgid "Bad request."
44
+ msgstr "Złe żądanie."
45
 
46
+ #: inc/class-lp-ajax.php:192
47
+ #, php-format
48
+ msgid "The order %s has been successfully recovered."
49
+ msgstr "Zamówienie %s zostało odzyskane poprawnie."
50
 
51
+ #: inc/class-lp-ajax.php:246 inc/admin/class-lp-admin-ajax.php:854
52
+ msgid "Profile picture upload failed"
53
+ msgstr "Błąd ładowania zdjęcia profilowego"
54
 
55
+ #: inc/class-lp-ajax.php:269
56
  msgid "Access denied!"
57
+ msgstr "Dostęp zabroniony!"
 
 
 
 
 
 
 
 
58
 
59
+ #: inc/class-lp-ajax.php:279
60
+ #, php-format
61
+ msgid "You have finished this course \"%s\""
62
+ msgstr "Ukończyłeś kurs \"%s\""
 
 
 
63
 
64
+ #: inc/class-lp-ajax.php:282
65
+ msgid ""
66
+ "Error! You cannot finish this course. Please contact your administrator for "
67
+ "more information."
68
+ msgstr ""
69
+ "Błąd! Nie możesz ukończyć tego kursu. Prosimy o kontakt z administracją."
70
 
71
+ #: inc/class-lp-ajax.php:315
72
+ msgid "Error! Invalid lesson or failed security check."
73
+ msgstr "Błąd! Nieprawidłowa lekcja lub blokada zabezpieczeń."
 
 
 
 
 
 
 
 
 
 
 
 
 
74
 
75
+ #: inc/class-lp-ajax.php:325
76
+ #, php-format
77
+ msgid "Congrats! You have completed \"%s\"."
78
+ msgstr "Gratulacje! Ukończyłeś \"%s\"."
79
 
80
+ #: inc/class-lp-ajax.php:362
81
+ msgid "Error! Invalid course or failed security check."
82
+ msgstr ".Błąd! Nieprawidłowy kurs lub blokada zabezpieczeń."
83
 
84
+ #: inc/class-lp-ajax.php:366
85
+ msgid "Error!"
86
+ msgstr "Błąd!"
87
 
88
+ #: inc/class-lp-ajax.php:368
89
  #, php-format
90
+ msgid "You have retaken the course \"%s\""
91
+ msgstr "Wziąłeś udział ponownie w kursie \"%s\""
92
 
93
+ #: inc/class-lp-ajax.php:372
94
+ msgid "Error! You can not retake the course"
95
+ msgstr "Błąd! Nie możesz wziąć udział ponownie w kursie"
96
 
97
+ #: inc/class-lp-assets.php:52 inc/class-lp-assets.php:59
98
+ #: inc/shortcodes/class-lp-shortcode-become-a-teacher.php:124
99
+ #: templates/checkout/payment.php:20
100
+ msgid "Processing"
101
+ msgstr "W toku"
102
 
103
+ #: inc/class-lp-assets.php:53 inc/class-lp-assets.php:60
104
+ msgid "Redirecting"
105
+ msgstr "Przekierowanie"
106
 
107
+ #: inc/class-lp-assets.php:54
108
+ msgid "Invalid field"
109
+ msgstr "Nieprawidłowe pole"
110
 
111
+ #: inc/class-lp-assets.php:55 inc/attributes/course.php:103
112
+ msgid "Unknown error"
113
+ msgstr "Nieznany błąd"
 
114
 
115
+ #: inc/class-lp-assets.php:56 templates/checkout/payment.php:19
116
+ msgid "Place order"
117
+ msgstr "Kupuję i płacę"
118
 
119
+ #: inc/class-lp-backward-plugins.php:40
120
+ msgid ""
121
+ "There are some add-ons had gone outdated and might conflict with <strong>"
122
+ "LearnPress</strong> that need to be deactivated. Please upgrade them to the "
123
+ "newest version to ensure stability and performance of your site."
124
+ msgstr ""
125
+ "Część z dodatków jest za stara lub wywołuje błędy z <strong>"
126
+ "LearnPress</strong> %s musiało zostać zdezaktywowane. Proszę zaktualizować "
127
+ "do najnowszej wersji, aby wszystko zaczęło działać prawidłowo."
128
 
129
+ #: inc/class-lp-backward-plugins.php:95
130
+ #, php-format
131
+ msgid ""
132
+ "LearnPress plugin slug should be <strong>%s</strong> to make sure it works "
133
+ "properly. Currently, it is <strong>%s</strong>. Please correct it's name and "
134
+ "active again. <a href=\"%s\">Back</a>"
135
+ msgstr ""
136
+ "URL pluginu LearnPress powinien być <strong>%s</strong>, aby działał "
137
+ "poprawnie. Teraz jest <strong>%s</strong>. Proszę poprawić nazwę i aktywować "
138
+ "ponownie <a href=\"%s\">Wstecz</a>"
139
 
140
+ #: inc/class-lp-breadcrumb.php:125
141
+ msgid "Error 404"
142
+ msgstr "Błąd 404 - Strona nie została znaleziona"
143
 
144
+ #: inc/class-lp-breadcrumb.php:224
145
+ #, php-format
146
+ msgid "Courses tagged &ldquo;%s&rdquo;"
147
+ msgstr "Kursy oznaczone &ldquo;%s&rdquo;"
148
 
149
+ #: inc/class-lp-breadcrumb.php:278
150
+ #, php-format
151
+ msgid "Posts tagged &ldquo;%s&rdquo;"
152
+ msgstr "Wpisy oznaczone &ldquo;%s&rdquo;"
153
 
154
+ #: inc/class-lp-breadcrumb.php:355
155
+ #, php-format
156
+ msgid "Author: %s"
157
+ msgstr "Autor: %s"
158
 
159
+ #: inc/class-lp-breadcrumb.php:388
160
+ #, php-format
161
+ msgid "Search results for &ldquo;%s&rdquo;"
162
+ msgstr "Wyniki wyszukiwania: &ldquo;%s&rdquo;"
163
 
164
+ #: inc/class-lp-breadcrumb.php:397
165
+ #, php-format
166
+ msgid "Page %d"
167
+ msgstr "Strona %d"
168
+
169
+ #: inc/class-lp-checkout.php:154 inc/class-lp-checkout.php:414
170
+ msgid "Please enter your email."
171
+ msgstr "Proszę wpisać adres e-mail."
172
+
173
+ #: inc/class-lp-checkout.php:200
174
+ #: inc/shortcodes/class-lp-shortcode-register-form.php:64
175
+ #: inc/shortcodes/class-lp-shortcode-register-form.php:66
176
+ #: templates/checkout/form-login.php:63
177
+ msgid "Username"
178
+ msgstr "Konto użytkownika"
179
+
180
+ #: inc/class-lp-checkout.php:201
181
+ #: inc/shortcodes/class-lp-shortcode-login-form.php:69
182
+ #: inc/shortcodes/class-lp-shortcode-login-form.php:71
183
+ #: inc/shortcodes/class-lp-shortcode-register-form.php:80
184
+ #: inc/shortcodes/class-lp-shortcode-register-form.php:82
185
+ #: inc/user/class-lp-profile.php:336 templates/checkout/form-login.php:70
186
+ msgid "Password"
187
+ msgstr "Hasło"
188
+
189
+ #: inc/class-lp-checkout.php:257 inc/class-lp-checkout.php:266
190
+ #: inc/class-lp-checkout.php:305
191
+ #, php-format
192
+ msgid "Error %d: Unable to create order. Please try again."
193
+ msgstr "Error %d: nie można utworzyć zamówienia. Prosimy spróbować ponownie."
194
 
195
+ #: inc/class-lp-checkout.php:299
196
+ msgid "Item does not exist!"
197
+ msgstr "Element nie istnieje!"
198
 
199
+ #: inc/class-lp-checkout.php:329
200
+ msgid "Unable to checkout. Order creation failed."
201
+ msgstr "Błąd przy tworzeniu zamówienia."
 
 
202
 
203
+ #: inc/class-lp-checkout.php:405
204
+ msgid "Please enter username."
205
+ msgstr "Wprowadź nazwę użytkownika."
 
 
206
 
207
+ #: inc/class-lp-checkout.php:409
208
+ msgid "Please enter user password"
209
+ msgstr "Proszę podać hasło"
210
 
211
+ #: inc/class-lp-checkout.php:491
212
+ msgid "No payment method is selected"
213
+ msgstr "Nie wybrano metody płatności"
214
 
215
+ #: inc/class-lp-checkout.php:531 templates/checkout/empty-cart.php:19
216
+ msgid "Your cart is currently empty."
217
+ msgstr "Twój koszyk jest pusty."
218
 
219
+ #: inc/class-lp-checkout.php:550
220
+ #, php-format
221
+ msgid "Item \"%s\" is not purchasable."
222
+ msgstr "Element \"%s\" nie jest do kupienia."
223
 
224
+ #: inc/class-lp-emails.php:124 inc/class-lp-emails.php:131
225
+ msgid "Cheatin&#8217; huh?"
226
+ msgstr "Oszukujesz, co?"
227
 
228
+ #: inc/class-lp-forms-handler.php:39 inc/class-lp-forms-handler.php:117
229
+ #: inc/class-lp-forms-handler.php:200
230
  #, php-format
231
+ msgid "Field \"%s\" is required."
232
+ msgstr "Pole \"%s\" jest wymagane."
233
 
234
+ #: inc/class-lp-forms-handler.php:52
235
+ msgid "Thank you! Your message has been sent."
236
+ msgstr "Dziękujemy! Twoja wiadomość została wysłana."
237
 
238
+ #: inc/class-lp-forms-handler.php:76
239
+ msgid "Your email does not exist!"
240
+ msgstr "Twój email nie istnieje !"
241
+
242
+ #: inc/class-lp-forms-handler.php:153
243
+ msgid "Login successfully."
244
+ msgstr "Logowanie pomyślne."
245
 
246
+ #: inc/class-lp-forms-handler.php:239
247
+ msgid "Register successfully."
248
+ msgstr "Rejestracja pomyślna."
249
 
250
+ #: inc/class-lp-forms-handler.php:266
251
+ msgid "Password is too short!"
252
+ msgstr "Hasło jest za krótkie!"
253
 
254
+ #: inc/class-lp-forms-handler.php:270
255
+ msgid "Password can not have spacing!"
256
+ msgstr "Hasło nie może zawierać spacji!"
257
 
258
+ #: inc/class-lp-forms-handler.php:274
259
+ msgid "Password must include at least one letter!"
260
+ msgstr "Hasło musi zawierać przynajmniej jedną literę!"
261
 
262
+ #: inc/class-lp-forms-handler.php:278
263
+ msgid "Password must include at least one capitalized letter!"
264
+ msgstr "Hasło musi zawierać przynajmniej jedną dużą literę!"
265
 
266
+ #: inc/class-lp-forms-handler.php:282
267
+ msgid "Password must include at least one number!"
268
+ msgstr "Hasło musi zawierać przynajmniej jedną liczbę!"
269
 
270
+ #: inc/class-lp-forms-handler.php:286
271
+ msgid "Password must include at least one of these characters ~!@#$%^&*() !"
272
+ msgstr "Hasło musi zawierać przynajmniej jeden ze znaków ~!@#$%^&*() !"
273
 
274
+ #: inc/class-lp-install.php:473
275
+ msgid ""
276
+ "It seems like you have updated LearnPress from an older version and there "
277
+ "are some outdated courses or data that need to be upgraded."
278
  msgstr ""
279
+ "Wygląda na to, że zaktualizowałeś LearnPress z jakieś starszej wersji i "
280
+ "jakieś nieaktualne kursy, które muszą zostać zaktualizowane."
281
+
282
+ #: inc/class-lp-install.php:474
283
+ msgid "Do not ask again."
284
+ msgstr "Nie pytaj ponownie."
285
+
286
+ #: inc/class-lp-install.php:474
287
+ msgid "Ok"
288
+ msgstr "Ok"
289
 
290
+ #: inc/class-lp-install.php:474 inc/lp-core-functions.php:2203
291
+ #: inc/admin/class-lp-admin-ajax.php:651 inc/admin/class-lp-admin.php:214
292
+ #: inc/custom-post-types/course.php:818 inc/order/class-lp-order.php:940
293
+ #: templates/checkout/form-login.php:103
294
+ msgid "Cancel"
295
+ msgstr "Zatrzymaj"
296
+
297
+ #: inc/class-lp-install.php:475
298
+ #: inc/admin/views/tools/database/html-upgrade-database.php:17
299
+ msgid "Upgrade now"
300
+ msgstr "Aktualizuj"
301
 
302
+ #: inc/class-lp-install.php:475
303
+ msgid "No, thank!"
304
+ msgstr "Nie, dzięki!"
305
 
306
+ #: inc/class-lp-install.php:482
307
+ msgid ""
308
+ "LearnPress has been updated and the database needs to be upgraded before you "
309
+ "can work with it. Please notify the site administrator."
310
+ msgstr ""
311
+ "LearnPress został zaktualizowany i musi zaktualizować bazę danych zanim "
312
+ "zaczniesz pracę. Proszę napisz do administratora strony."
313
+
314
+ #: inc/class-lp-install.php:501
315
+ msgid "Thank you for using LearnPress"
316
+ msgstr "Dziękujemy za używanie LearnPress"
317
+
318
+ #: inc/class-lp-multi-language.php:52
319
+ #: inc/admin/meta-box/fields/list-emails.php:64
320
+ #: inc/admin/sub-menus/class-lp-submenu-settings.php:14
321
+ #: inc/admin/views/quiz/question-meta.php:13
322
+ #: inc/custom-post-types/question.php:277 inc/user/class-lp-profile.php:325
323
+ msgid "Settings"
324
+ msgstr "Ustawienia"
325
 
326
+ #: inc/class-lp-multi-language.php:53 inc/libraries/meta-box/inc/core.php:33
327
+ msgid "Documentation"
328
+ msgstr "Dokumentacja"
329
 
330
+ #: inc/class-lp-multi-language.php:54
331
+ #: inc/admin/sub-menus/class-lp-submenu-addons.php:15
332
+ msgid "Add-ons"
333
+ msgstr "Dodatki"
334
 
335
+ #: inc/class-lp-page-controller.php:118
336
+ msgid "You can not view this item or it does not exist!"
337
+ msgstr "Nie możesz tego zobaczyć lub to nie istnieje!"
338
 
339
+ #: inc/class-lp-page-controller.php:146
340
+ #: templates/content-question/multi-choice/answer-options.php:17
341
+ #: templates/content-question/single-choice/answer-options.php:17
342
+ msgid "Invalid question!"
343
+ msgstr "Niepoprawne pytanie!"
344
 
345
+ #: inc/class-lp-page-controller.php:390
346
  #, php-format
347
+ msgid "The user %s is not available!"
348
+ msgstr "Użytkownik %s nie jest dostępny!"
349
 
350
+ #: inc/class-lp-preview-course.php:44
351
+ msgid "Preview Course"
352
+ msgstr "Podgląd kursu"
 
 
 
 
 
 
353
 
354
+ #: inc/class-lp-preview-course.php:83 inc/class-lp-preview-course.php:100
355
+ msgid "Invalid preview item."
356
+ msgstr "Nieprawidłowy element podglądu."
 
 
 
 
357
 
358
+ #: inc/class-lp-preview-course.php:106
359
+ msgid "Access denied."
360
+ msgstr "Dostęp zabroniony."
361
+
362
+ #: inc/class-lp-preview-course.php:175
363
  #, php-format
364
+ msgid "You are in preview mode. Continue <a href=\"%s\">editing</a>?"
365
+ msgstr "Jesteś w trybie podglądu. Kontynuować <a href=\"%s\">edycję</a>?"
366
 
367
+ #: inc/class-lp-query-list-table.php:28 inc/custom-post-types/course.php:211
368
+ msgid "item"
369
+ msgstr "element"
370
 
371
+ #: inc/class-lp-query-list-table.php:29
372
+ msgid "items"
373
+ msgstr "elementy"
374
 
375
+ #: inc/class-lp-query-list-table.php:140
376
+ msgid "Displaying {{from}} to {{to}} of {{total}} {{item_name}}."
377
+ msgstr "Wyświetlanie {{from}} do {{to}} z {{total}} {{item_name}}."
378
 
379
+ #: inc/class-lp-query-list-table.php:142
380
+ msgid "Displaying {{from}} to {{to}} of {{total}}."
381
+ msgstr "Wyświetlanie {{from}} do {{to}} z {{total}}."
382
 
383
+ #: inc/class-lp-request-handler.php:144
384
+ msgid "You have already purchased this course and haven't finished it."
385
+ msgstr "Już kupiłeś kurs i jeszcze go nie ukończyłeś."
386
 
387
+ #: inc/class-lp-request-handler.php:152
388
+ msgid ""
389
+ "You have already purchased this course and the order is still processing..."
390
+ msgstr "Już kupiłeś kurs, a zamówienie jest przetwarzane...."
391
 
392
+ #: inc/class-lp-request-handler.php:175
393
+ msgid "You have finished course."
394
+ msgstr "Zakończyłeś kurs."
395
 
396
+ #: inc/class-lp-request-handler.php:191
397
+ msgid "You have to purchase the course before enrolling."
398
+ msgstr "Przed zapisaniem się, musisz zakupić kurs."
399
 
400
+ #: inc/class-lp-request-handler.php:226
401
+ msgid "Invalid action."
402
+ msgstr "Nieprawidłowe zachowanie."
403
 
404
+ #: inc/class-lp-request-handler.php:273 inc/cart/class-lp-cart.php:459
405
+ msgid "Checkout page hasn't been setup"
406
+ msgstr "Strona zamówienia nie została ustawiona"
407
 
408
+ #: inc/class-lp-request-handler.php:296 inc/course/lp-course-functions.php:1025
409
+ msgid "Invalid request!"
410
+ msgstr "Nieprawidłowe żądanie!"
411
 
412
+ #: inc/class-lp-request-handler.php:314
413
+ #, php-format
414
+ msgid "Congrats! You have enrolled &quot;%s&quot"
415
+ msgstr "Gratulacje! Dołączyłeś do &quot;%s&quot"
416
 
417
+ #: inc/class-lp-request-handler.php:340
418
+ msgid "Checkout page hasn't been setup or page does not exists."
419
+ msgstr "Strona zamówienia nie jest zainstalowana lub nie istnieje."
420
 
421
+ #: inc/class-lp-request-handler.php:342
422
+ msgid "Checkout error! Please contact with admin for getting more information."
423
+ msgstr "Błąd zamawiania! Proszę skontaktować się z administratorem."
424
 
425
+ #: inc/class-lp-shortcodes.php:225
426
+ msgid "Forgot password?"
427
+ msgstr "Forgot password?"
428
 
429
+ #: inc/class-lp-shortcodes.php:227
430
+ msgid "Create new account"
431
+ msgstr "Create new account"
 
 
432
 
433
+ #: inc/class-lp-strings.php:16
434
+ #, php-format
435
+ msgid "Do you want to redo quiz \"%s\"?"
436
+ msgstr "Chcesz ponownie przejść test pt. \"%s\"?"
437
 
438
+ #: inc/class-lp-strings.php:17
439
+ #, php-format
440
+ msgid "Do you want to complete quiz \"%s\"?"
441
+ msgstr "Jesteś pewny, że chcesz ukończyć test \"%s\"?"
442
 
443
+ #: inc/class-lp-strings.php:18
444
  #, php-format
445
+ msgid "Do you want to complete lesson \"%s\"?"
446
+ msgstr "Chcesz ukończyć lekcję \"%s\"?"
 
 
 
 
 
 
447
 
448
+ #: inc/class-lp-strings.php:19
449
  #, php-format
450
+ msgid "Do you want to finish course \"%s\"?"
451
+ msgstr "Chcesz ukończyć kurs \"%s\" na obecnym etapie lekcji i testów?"
 
 
 
 
 
 
452
 
453
+ #: inc/class-lp-strings.php:20
454
+ #, php-format
455
+ msgid "Do you want to retake course \"%s\"?"
456
+ msgstr "Chcesz wziąć udział ponownie w kursie \"%s\"?"
457
+
458
+ #: inc/class-lp-widget.php:213
459
+ #, php-format
460
+ msgid "Function %s should be overwritten in child class"
461
+ msgstr "Funkcja %s powinna zostać nadpisana pod klasą"
462
+
463
+ #: inc/lp-core-functions.php:351 inc/lp-template-functions.php:2653
464
+ #: inc/admin/settings/class-lp-settings-courses.php:150
465
+ #: inc/course/lp-course-functions.php:531 inc/custom-post-types/lesson.php:181
466
+ msgid "Lesson"
467
+ msgstr "Lekcja"
468
+
469
+ #: inc/lp-core-functions.php:352 inc/lp-template-functions.php:2643
470
+ #: inc/admin/settings/class-lp-settings-courses.php:157
471
+ #: inc/course/lp-course-functions.php:532
472
+ #: inc/custom-post-types/question.php:320 inc/custom-post-types/quiz.php:92
473
+ #: templates/profile/tabs/quizzes.php:37
474
+ msgid "Quiz"
475
+ msgstr "Test"
476
+
477
+ #: inc/lp-core-functions.php:677 inc/admin/class-lp-modal-search-items.php:209
478
+ #: inc/admin/class-lp-modal-search-users.php:135
479
+ #: node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py:77
480
+ msgid "<"
481
+ msgstr "<"
482
+
483
+ #: inc/lp-core-functions.php:678 inc/admin/class-lp-modal-search-items.php:210
484
+ #: inc/admin/class-lp-modal-search-users.php:136
485
+ #: node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py:86
486
+ msgid ">"
487
+ msgstr ">"
488
+
489
+ #: inc/lp-core-functions.php:756
490
+ msgid "Minute(s)"
491
+ msgstr "Minut(-a)"
492
+
493
+ #: inc/lp-core-functions.php:757
494
+ msgid "Hour(s)"
495
+ msgstr "Godzin(-a)"
496
 
497
+ #: inc/lp-core-functions.php:758
498
+ msgid "Day(s)"
499
+ msgstr "Dni(-dzień)"
500
 
501
+ #: inc/lp-core-functions.php:759
502
+ msgid "Week(s)"
503
+ msgstr "Tygodni(-dzień)"
504
+
505
+ #: inc/lp-core-functions.php:904
506
  msgid "Left"
507
+ msgstr "Lewy"
508
 
509
+ #: inc/lp-core-functions.php:905
510
  msgid "Right"
511
+ msgstr "Prawy"
512
 
513
+ #: inc/lp-core-functions.php:906
514
  msgid "Left with space"
515
+ msgstr "Po lewej ze spacją"
516
 
517
+ #: inc/lp-core-functions.php:907
518
  msgid "Right with space"
519
+ msgstr "Po prawej ze spacją"
520
 
521
+ #: inc/lp-core-functions.php:971
522
+ msgid "Afghan afghani"
523
+ msgstr "Afghan afghani"
524
 
525
+ #: inc/lp-core-functions.php:972
526
+ msgid "Albanian lek"
527
+ msgstr "Albanian lek"
528
 
529
+ #: inc/lp-core-functions.php:973
530
+ msgid "Algerian dinar"
531
+ msgstr "Algerian dinar"
532
 
533
+ #: inc/lp-core-functions.php:974
534
+ msgid "Euro"
535
+ msgstr "Euro"
536
 
537
+ #: inc/lp-core-functions.php:975
538
+ msgid "Angolan kwanza"
539
+ msgstr "Angolan kwanza"
540
 
541
+ #: inc/lp-core-functions.php:976
542
+ msgid "East Caribbean dollar"
543
+ msgstr "East Caribbean dollar"
544
 
545
+ #: inc/lp-core-functions.php:977
546
+ msgid "Argentine peso"
547
+ msgstr "Argentine peso"
 
548
 
549
+ #: inc/lp-core-functions.php:978
550
+ msgid "Armenian dram"
551
+ msgstr "Armenian dram"
 
552
 
553
+ #: inc/lp-core-functions.php:979
554
+ msgid "Aruban florin"
555
+ msgstr "Aruban florin"
 
556
 
557
+ #: inc/lp-core-functions.php:980
558
+ msgid "Australian dollar"
559
+ msgstr "Australian dollar"
 
560
 
561
+ #: inc/lp-core-functions.php:981
562
+ msgid "Azerbaijani manat"
563
+ msgstr "Azerbaijani manat"
 
564
 
565
+ #: inc/lp-core-functions.php:982
566
+ msgid "Bahamian dollar"
567
+ msgstr "Bahamian dollar"
568
 
569
+ #: inc/lp-core-functions.php:983
570
+ msgid "Bahraini dinar"
571
+ msgstr "Bahraini dinar"
572
 
573
+ #: inc/lp-core-functions.php:984
574
+ msgid "Bangladeshi taka"
575
+ msgstr "Bangladeshi taka"
576
 
577
+ #: inc/lp-core-functions.php:985
578
+ msgid "Barbadian dollar"
579
+ msgstr "Barbadian dollar"
580
 
581
+ #: inc/lp-core-functions.php:986
582
+ msgid "Belarusian ruble"
583
+ msgstr "Belarusian ruble"
 
 
584
 
585
+ #: inc/lp-core-functions.php:987
586
+ msgid "Belizean dollar"
587
+ msgstr "Belizean dollar"
 
 
588
 
589
+ #: inc/lp-core-functions.php:988
590
+ msgid "West African CFA franc"
591
+ msgstr "West African CFA franc"
592
 
593
+ #: inc/lp-core-functions.php:989
594
+ msgid "Bermudian dollar"
595
+ msgstr "Bermudian dollar"
596
 
597
+ #: inc/lp-core-functions.php:990
598
+ msgid "Bhutanese ngultrum"
599
+ msgstr "Bhutanese ngultrum"
 
600
 
601
+ #: inc/lp-core-functions.php:991
602
+ msgid "Bolivian boliviano"
603
+ msgstr "Bolivian boliviano"
604
 
605
+ #: inc/lp-core-functions.php:992
606
+ msgid "US dollar"
607
+ msgstr "US dollar"
608
 
609
+ #: inc/lp-core-functions.php:993
610
+ msgid "Bosnia and Herzegovina convertible mark"
611
+ msgstr "Bosnia and Herzegovina convertible mark"
612
 
613
+ #: inc/lp-core-functions.php:994
614
+ msgid "Botswana pula"
615
+ msgstr "Botswana pula"
616
 
617
+ #: inc/lp-core-functions.php:995
618
+ msgid "Brazilian real"
619
+ msgstr "Brazilian real"
620
 
621
+ #: inc/lp-core-functions.php:996
622
+ msgid "Brunei dollar"
623
+ msgstr "Brunei dollar"
624
 
625
+ #: inc/lp-core-functions.php:997
626
+ msgid "Bulgarian lev"
627
+ msgstr "Bulgarian lev"
628
 
629
+ #: inc/lp-core-functions.php:998
630
+ msgid "Burmese kyat"
631
+ msgstr "Burmese kyat"
632
 
633
+ #: inc/lp-core-functions.php:999
634
+ msgid "Burundian franc"
635
+ msgstr "Burundian franc"
636
 
637
+ #: inc/lp-core-functions.php:1000
638
+ msgid "Cambodian riel"
639
+ msgstr "Cambodian riel"
640
 
641
+ #: inc/lp-core-functions.php:1001
642
+ msgid "Central African CFA franc"
643
+ msgstr "Central African CFA franc"
644
 
645
+ #: inc/lp-core-functions.php:1002
646
+ msgid "Canadian dollar"
647
+ msgstr "Canadian dollar"
648
 
649
+ #: inc/lp-core-functions.php:1003
650
+ msgid "Cape Verdean escudo"
651
+ msgstr "Cape Verdean escudo"
652
 
653
+ #: inc/lp-core-functions.php:1004
654
+ msgid "Cayman Islands dollar"
655
+ msgstr "Cayman Islands dollar"
656
 
657
+ #: inc/lp-core-functions.php:1005
658
+ msgid "Chilean peso"
659
+ msgstr "Chilean peso"
660
 
661
+ #: inc/lp-core-functions.php:1006
662
+ msgid "Chinese renminbi"
663
+ msgstr "Chinese renminbi"
664
 
665
+ #: inc/lp-core-functions.php:1007
666
+ msgid "Colombian peso"
667
+ msgstr "Colombian peso"
668
 
669
+ #: inc/lp-core-functions.php:1008
670
+ msgid "Comorian franc"
671
+ msgstr "Comorian franc"
672
 
673
+ #: inc/lp-core-functions.php:1009
674
+ msgid "Congolese franc"
675
+ msgstr "Congolese franc"
676
 
677
+ #: inc/lp-core-functions.php:1010
678
+ msgid "New Zealand dollar"
679
+ msgstr "New Zealand dollar"
680
 
681
+ #: inc/lp-core-functions.php:1011
682
+ msgid "Costa Rican colón"
683
+ msgstr "Costa Rican colón"
 
684
 
685
+ #: inc/lp-core-functions.php:1012
686
+ msgid "Croatian kuna"
687
+ msgstr "Croatian kuna"
 
 
 
 
688
 
689
+ #: inc/lp-core-functions.php:1013
690
+ msgid "Cuban peso"
691
+ msgstr "Cuban peso"
692
 
693
+ #: inc/lp-core-functions.php:1014
694
+ msgid "Netherlands Antilles guilder"
695
+ msgstr "Netherlands Antilles guilder"
696
 
697
+ #: inc/lp-core-functions.php:1015
698
+ msgid "Czech koruna"
699
+ msgstr "Czech koruna"
700
 
701
+ #: inc/lp-core-functions.php:1016
702
+ msgid "Danish krone"
703
+ msgstr "Danish krone"
704
 
705
+ #: inc/lp-core-functions.php:1017
706
+ msgid "Djiboutian franc"
707
+ msgstr "Djiboutian franc"
708
 
709
+ #: inc/lp-core-functions.php:1018
710
+ msgid "Dominican peso"
711
+ msgstr "Dominican peso"
712
 
713
+ #: inc/lp-core-functions.php:1019
714
+ msgid "Egyptian pound"
715
+ msgstr "Egyptian pound"
 
716
 
717
+ #: inc/lp-core-functions.php:1020
718
+ msgid "Salvadoran colón"
719
+ msgstr "Salvadoran colón"
720
 
721
+ #: inc/lp-core-functions.php:1021
722
+ msgid "Eritrean nakfa"
723
+ msgstr "Eritrean nakfa"
724
 
725
+ #: inc/lp-core-functions.php:1022
726
+ msgid "Ethiopian birr"
727
+ msgstr "Ethiopian birr"
728
 
729
+ #: inc/lp-core-functions.php:1023
730
+ msgid "Falkland Islands pound"
731
+ msgstr "Falkland Islands pound"
732
 
733
+ #: inc/lp-core-functions.php:1024
734
+ msgid "Fijian dollar"
735
+ msgstr "Fijian dollar"
736
 
737
+ #: inc/lp-core-functions.php:1025
738
+ msgid "CFP franc"
739
+ msgstr "CFP franc"
740
 
741
+ #: inc/lp-core-functions.php:1026
742
+ msgid "Gambian dalasi"
743
+ msgstr "Gambian dalasi"
744
 
745
+ #: inc/lp-core-functions.php:1027
746
+ msgid "Georgian lari"
747
+ msgstr "Georgian lari"
 
748
 
749
+ #: inc/lp-core-functions.php:1028
750
+ msgid "Ghanian cedi"
751
+ msgstr "Ghanian cedi"
 
752
 
753
+ #: inc/lp-core-functions.php:1029
754
+ msgid "Gibraltar pound"
755
+ msgstr "Gibraltar pound"
 
756
 
757
+ #: inc/lp-core-functions.php:1030
758
+ msgid "Guatemalan quetzal"
759
+ msgstr "Guatemalan quetzal"
 
760
 
761
+ #: inc/lp-core-functions.php:1031
762
+ msgid "British pound"
763
+ msgstr "British pound"
 
764
 
765
+ #: inc/lp-core-functions.php:1032
766
+ msgid "Guinean franc"
767
+ msgstr "Guinean franc"
768
 
769
+ #: inc/lp-core-functions.php:1033
770
+ msgid "Guyanese dollar"
771
+ msgstr "Guyanese dollar"
 
772
 
773
+ #: inc/lp-core-functions.php:1034
774
+ msgid "Haitian gourde"
775
+ msgstr "Haitian gourde"
776
 
777
+ #: inc/lp-core-functions.php:1035
778
+ msgid "Honduran lempira"
779
+ msgstr "Honduran lempira"
 
780
 
781
+ #: inc/lp-core-functions.php:1036
782
+ msgid "Hong Kong dollar"
783
+ msgstr "Hong Kong dollar"
 
784
 
785
+ #: inc/lp-core-functions.php:1037
786
+ msgid "Hungarian forint"
787
+ msgstr "Hungarian forint"
 
788
 
789
+ #: inc/lp-core-functions.php:1038
790
+ msgid "Icelandic króna"
791
+ msgstr "Icelandic króna"
792
 
793
+ #: inc/lp-core-functions.php:1039
794
+ msgid "Indian rupee"
795
+ msgstr "Indian rupee"
 
796
 
797
+ #: inc/lp-core-functions.php:1040
798
+ msgid "Indonesian rupiah"
799
+ msgstr "Indonesian rupiah"
 
 
800
 
801
+ #: inc/lp-core-functions.php:1041
802
+ msgid "Iranian rial"
803
+ msgstr "Iranian rial"
 
 
804
 
805
+ #: inc/lp-core-functions.php:1042
806
+ msgid "Iraqi dinar"
807
+ msgstr "Iraqi dinar"
 
 
808
 
809
+ #: inc/lp-core-functions.php:1043
810
+ msgid "Israeli new sheqel"
811
+ msgstr "Israeli new sheqel"
 
812
 
813
+ #: inc/lp-core-functions.php:1044
814
+ msgid "Jamaican dollar"
815
+ msgstr "Jamaican dollar"
 
816
 
817
+ #: inc/lp-core-functions.php:1045
818
+ msgid "Japanese yen "
819
+ msgstr "Japanese yen "
 
820
 
821
+ #: inc/lp-core-functions.php:1046
822
+ msgid "Jordanian dinar"
823
+ msgstr "Jordanian dinar"
824
 
825
+ #: inc/lp-core-functions.php:1047
826
+ msgid "Kazakhstani tenge"
827
+ msgstr "Kazakhstani tenge"
828
 
829
+ #: inc/lp-core-functions.php:1048
830
+ msgid "Kenyan shilling"
831
+ msgstr "Kenyan shilling"
832
 
833
+ #: inc/lp-core-functions.php:1049
834
+ msgid "North Korean won"
835
+ msgstr "North Korean won"
836
 
837
+ #: inc/lp-core-functions.php:1050
838
+ msgid "Kuwaiti dinar"
839
+ msgstr "Kuwaiti dinar"
840
 
841
+ #: inc/lp-core-functions.php:1051
842
+ msgid "Kyrgyzstani som"
843
+ msgstr "Kyrgyzstani som"
844
 
845
+ #: inc/lp-core-functions.php:1052
846
+ msgid "South Korean won"
847
+ msgstr "South Korean won"
848
 
849
+ #: inc/lp-core-functions.php:1053
850
+ msgid "Lao kip"
851
+ msgstr "Lao kip"
 
852
 
853
+ #: inc/lp-core-functions.php:1054
854
+ msgid "Latvian lats"
855
+ msgstr "Latvian lats"
856
 
857
+ #: inc/lp-core-functions.php:1055
858
+ msgid "Lebanese pound"
859
+ msgstr "Lebanese pound"
860
 
861
+ #: inc/lp-core-functions.php:1056
862
+ msgid "Lesotho loti"
863
+ msgstr "Lesotho loti"
864
 
865
+ #: inc/lp-core-functions.php:1057
866
+ msgid "Liberian dollar"
867
+ msgstr "Liberian dollar"
868
 
869
+ #: inc/lp-core-functions.php:1058 inc/lp-core-functions.php:1129
870
+ msgid "Libyan dinar"
871
+ msgstr "Libyan dinar"
872
 
873
+ #: inc/lp-core-functions.php:1059
874
+ msgid "Swiss franc"
875
+ msgstr "Swiss franc"
876
 
877
+ #: inc/lp-core-functions.php:1060
878
+ msgid "Lithuanian litas"
879
+ msgstr "Lithuanian litas"
880
 
881
+ #: inc/lp-core-functions.php:1061
882
+ msgid "Macanese pataca"
883
+ msgstr "Macanese pataca"
884
 
885
+ #: inc/lp-core-functions.php:1062
886
+ msgid "Macedonian denar"
887
+ msgstr "Macedonian denar"
888
 
889
+ #: inc/lp-core-functions.php:1063
890
+ msgid "Malagasy ariary"
891
+ msgstr "Malagasy ariary"
 
892
 
893
+ #: inc/lp-core-functions.php:1064
894
+ msgid "Malawian kwacha"
895
+ msgstr "Malawian kwacha"
896
 
897
+ #: inc/lp-core-functions.php:1065
898
+ msgid "Malaysian ringgit"
899
+ msgstr "Malaysian ringgit"
900
 
901
+ #: inc/lp-core-functions.php:1066
902
+ msgid "Maldivian rufiyaa"
903
+ msgstr "Maldivian rufiyaa"
 
 
 
 
904
 
905
+ #: inc/lp-core-functions.php:1067
906
+ msgid "Mauritanian ouguiya"
907
+ msgstr "Mauritanian ouguiya"
 
 
908
 
909
+ #: inc/lp-core-functions.php:1068
910
+ msgid "Mauritian rupee"
911
+ msgstr "Mauritian rupee"
 
 
 
 
 
912
 
913
+ #: inc/lp-core-functions.php:1069
914
+ msgid "Mexican peso"
915
+ msgstr "Mexican peso"
 
 
 
 
 
916
 
917
+ #: inc/lp-core-functions.php:1070
918
+ msgid "Moldovan leu"
919
+ msgstr "Moldovan leu"
920
 
921
+ #: inc/lp-core-functions.php:1071
922
+ msgid "Mongolian tugrik"
923
+ msgstr "Mongolian tugrik"
924
 
925
+ #: inc/lp-core-functions.php:1072
926
+ msgid "Moroccan dirham"
927
+ msgstr "Moroccan dirham"
928
 
929
+ #: inc/lp-core-functions.php:1073
930
+ msgid "Mozambican metical"
931
+ msgstr "Mozambican metical"
932
 
933
+ #: inc/lp-core-functions.php:1074
934
+ msgid "Namibian dollar"
935
+ msgstr "Namibian dollar"
936
 
937
+ #: inc/lp-core-functions.php:1075
938
+ msgid "Nepalese rupee"
939
+ msgstr "Nepalese rupee"
940
 
941
+ #: inc/lp-core-functions.php:1076
942
+ msgid "Nicaraguan córdoba"
943
+ msgstr "Nicaraguan córdoba"
944
 
945
+ #: inc/lp-core-functions.php:1077
946
+ msgid "Nigerian naira"
947
+ msgstr "Nigerian naira"
948
 
949
+ #: inc/lp-core-functions.php:1078
950
+ msgid "Norwegian krone"
951
+ msgstr "Norwegian krone"
 
952
 
953
+ #: inc/lp-core-functions.php:1079
954
+ msgid "Omani rial"
955
+ msgstr "Omani rial"
 
956
 
957
+ #: inc/lp-core-functions.php:1080
958
+ msgid "Pakistani rupee"
959
+ msgstr "Pakistani rupee"
 
960
 
961
+ #: inc/lp-core-functions.php:1081
962
+ msgid "Panamanian balboa"
963
+ msgstr "Panamanian balboa"
 
964
 
965
+ #: inc/lp-core-functions.php:1082
966
+ msgid "Papua New Guinea kina"
967
+ msgstr "Papua New Guinea kina"
968
 
969
+ #: inc/lp-core-functions.php:1083
970
+ msgid "Paraguayan guarani"
971
+ msgstr "Paraguayan guarani"
972
 
973
+ #: inc/lp-core-functions.php:1084
974
+ msgid "Peruvian nuevo sol"
975
+ msgstr "Peruvian nuevo sol"
976
 
977
+ #: inc/lp-core-functions.php:1085
978
+ msgid "Philippine peso"
979
+ msgstr "Philippine peso"
 
 
980
 
981
+ #: inc/lp-core-functions.php:1086
982
+ msgid "Polish zloty"
983
+ msgstr "Polski złoty"
984
 
985
+ #: inc/lp-core-functions.php:1087
986
+ msgid "Qatari riyal"
987
+ msgstr "Qatari riyal"
988
 
989
+ #: inc/lp-core-functions.php:1088
990
+ msgid "Romanian leu"
991
+ msgstr "Romanian leu"
 
 
 
 
 
992
 
993
+ #: inc/lp-core-functions.php:1089
994
+ msgid "Russian ruble"
995
+ msgstr "Russian ruble"
 
996
 
997
+ #: inc/lp-core-functions.php:1090
998
+ msgid "Rwandan franc"
999
+ msgstr "Rwandan franc"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1000
 
1001
+ #: inc/lp-core-functions.php:1091
1002
+ msgid "Samoan tālā"
1003
+ msgstr "Samoan tālā"
 
 
1004
 
1005
+ #: inc/lp-core-functions.php:1092
1006
+ msgid "São Tomé and Príncipe dobra"
1007
+ msgstr "São Tomé and Príncipe dobra"
1008
 
1009
+ #: inc/lp-core-functions.php:1093
1010
+ msgid "Saudi riyal"
1011
+ msgstr "Saudi riyal"
1012
 
1013
+ #: inc/lp-core-functions.php:1094
1014
+ msgid "Serbian dinar"
1015
+ msgstr "Serbian dinar"
1016
 
1017
+ #: inc/lp-core-functions.php:1095
1018
+ msgid "Seychellois rupee"
1019
+ msgstr "Seychellois rupee"
1020
 
1021
+ #: inc/lp-core-functions.php:1096
1022
+ msgid "Sierra Leonean leone"
1023
+ msgstr "Sierra Leonean leone"
1024
 
1025
+ #: inc/lp-core-functions.php:1097
1026
+ msgid "Singapore dollar"
1027
+ msgstr "Singapore dollar"
1028
 
1029
+ #: inc/lp-core-functions.php:1098
1030
+ msgid "Solomon Islands dollar"
1031
+ msgstr "Solomon Islands dollar"
1032
 
1033
+ #: inc/lp-core-functions.php:1099
1034
+ msgid "Somali shilling"
1035
+ msgstr "Somali shilling"
1036
 
1037
+ #: inc/lp-core-functions.php:1100
1038
+ msgid "South African rand"
1039
+ msgstr "South African rand"
 
1040
 
1041
+ #: inc/lp-core-functions.php:1101
1042
+ msgid "Sri Lankan rupee"
1043
+ msgstr "Sri Lankan rupee"
 
 
 
1044
 
1045
+ #: inc/lp-core-functions.php:1102
1046
+ msgid "St. Helena pound"
1047
+ msgstr "St. Helena pound"
 
1048
 
1049
+ #: inc/lp-core-functions.php:1103
1050
+ msgid "Sudanese pound"
1051
+ msgstr "Sudanese pound"
 
 
 
 
 
1052
 
1053
+ #: inc/lp-core-functions.php:1104
1054
+ msgid "Surinamese dollar"
1055
+ msgstr "Surinamese dollar"
1056
 
1057
+ #: inc/lp-core-functions.php:1105
1058
+ msgid "Swazi lilangeni"
1059
+ msgstr "Swazi lilangeni"
1060
 
1061
+ #: inc/lp-core-functions.php:1106
1062
+ msgid "Swedish krona"
1063
+ msgstr "Swedish krona"
1064
+
1065
+ #: inc/lp-core-functions.php:1107
1066
+ msgid "Syrian pound"
1067
+ msgstr "Syrian pound"
1068
+
1069
+ #: inc/lp-core-functions.php:1108
1070
+ msgid "New Taiwan dollar"
1071
+ msgstr "New Taiwan dollar"
1072
+
1073
+ #: inc/lp-core-functions.php:1109
1074
+ msgid "Tajikistani somoni"
1075
+ msgstr "Tajikistani somoni"
1076
+
1077
+ #: inc/lp-core-functions.php:1110
1078
+ msgid "Tanzanian shilling"
1079
+ msgstr "Tanzanian shilling"
1080
+
1081
+ #: inc/lp-core-functions.php:1111
1082
+ msgid "Thai baht "
1083
+ msgstr "Thai baht "
1084
+
1085
+ #: inc/lp-core-functions.php:1112
1086
+ msgid "Tongan pa’anga"
1087
+ msgstr "Tongan pa’anga"
1088
+
1089
+ #: inc/lp-core-functions.php:1113
1090
+ msgid "Trinidad and Tobago dollar"
1091
+ msgstr "Trinidad and Tobago dollar"
1092
+
1093
+ #: inc/lp-core-functions.php:1114
1094
+ msgid "Tunisian dinar"
1095
+ msgstr "Tunisian dinar"
1096
+
1097
+ #: inc/lp-core-functions.php:1115
1098
+ msgid "Turkish lira"
1099
+ msgstr "Turkish lira"
1100
+
1101
+ #: inc/lp-core-functions.php:1116
1102
+ msgid "Turkmenistani manat"
1103
+ msgstr "Turkmenistani manat"
1104
+
1105
+ #: inc/lp-core-functions.php:1117
1106
+ msgid "Ugandan shilling"
1107
+ msgstr "Ugandan shilling"
1108
+
1109
+ #: inc/lp-core-functions.php:1118
1110
+ msgid "Ukrainian hryvnia"
1111
+ msgstr "Ukrainian hryvnia"
1112
+
1113
+ #: inc/lp-core-functions.php:1119
1114
+ msgid "United Arab Emirates dirham"
1115
+ msgstr "United Arab Emirates dirham"
1116
+
1117
+ #: inc/lp-core-functions.php:1120
1118
+ msgid "Uruguayan peso"
1119
+ msgstr "Uruguayan peso"
1120
+
1121
+ #: inc/lp-core-functions.php:1121
1122
+ msgid "Uzbekistani som"
1123
+ msgstr "Uzbekistani som"
1124
+
1125
+ #: inc/lp-core-functions.php:1122
1126
+ msgid "Vanuatu vatu"
1127
+ msgstr "Vanuatu vatu"
1128
+
1129
+ #: inc/lp-core-functions.php:1123
1130
+ msgid "Venezuelan bolivar"
1131
+ msgstr "Venezuelan bolivar"
1132
+
1133
+ #: inc/lp-core-functions.php:1124
1134
+ msgid "Vietnamese dong"
1135
+ msgstr "Vietnamese dong"
1136
+
1137
+ #: inc/lp-core-functions.php:1125
1138
+ msgid "Yemeni rial"
1139
+ msgstr "Yemeni rial"
1140
+
1141
+ #: inc/lp-core-functions.php:1126
1142
+ msgid "Zambian kwacha"
1143
+ msgstr "Zambian kwacha"
1144
+
1145
+ #: inc/lp-core-functions.php:1127
1146
+ msgid "Zimbabwean dollar"
1147
+ msgstr "Zimbabwean dollar"
1148
+
1149
+ #: inc/lp-core-functions.php:1128
1150
+ msgid "Jersey pound"
1151
+ msgstr "Jersey pound"
1152
+
1153
+ #: inc/lp-core-functions.php:1415
1154
+ msgid "week"
1155
+ msgid_plural "weeks"
1156
+ msgstr[0] "tydzień"
1157
+ msgstr[1] "tygodnie"
1158
+ msgstr[2] "tygodni"
1159
+
1160
+ #: inc/lp-core-functions.php:1419
1161
+ msgid "day"
1162
+ msgid_plural "days"
1163
+ msgstr[0] "dzień"
1164
+ msgstr[1] "dni"
1165
+ msgstr[2] "dni"
1166
+
1167
+ #: inc/lp-core-functions.php:1424
1168
+ msgid "hour"
1169
+ msgid_plural "hours"
1170
+ msgstr[0] "godzina"
1171
+ msgstr[1] "godziny"
1172
+ msgstr[2] "godzin"
1173
+
1174
+ #: inc/lp-core-functions.php:1428
1175
+ msgid "minute"
1176
+ msgid_plural "minutes"
1177
+ msgstr[0] "minuta"
1178
+ msgstr[1] "minuty"
1179
+ msgstr[2] "minut"
1180
+
1181
+ #: inc/lp-core-functions.php:1497 inc/admin/views/quiz/editor.php:26
1182
+ #: inc/admin/views/tools/course/html-course.php:26
1183
+ #: inc/admin/views/tools/course/html-user.php:26
1184
+ msgid "Name"
1185
+ msgstr "Nazwisko i imiona"
1186
 
1187
+ #: inc/lp-core-functions.php:1499
1188
+ msgid "Your name"
1189
+ msgstr "Twoje imię i nazwisko"
1190
+
1191
+ #: inc/lp-core-functions.php:1505 inc/admin/meta-box/fields/list-emails.php:28
1192
+ #: inc/shortcodes/class-lp-shortcode-register-form.php:72
1193
+ #: inc/shortcodes/class-lp-shortcode-register-form.php:74
1194
+ msgid "Email"
1195
+ msgstr "E-mail"
1196
+
1197
+ #: inc/lp-core-functions.php:1507
1198
+ msgid "Your email address"
1199
+ msgstr "Twój adres email"
1200
+
1201
+ #: inc/lp-core-functions.php:1513
1202
+ msgid "Phone"
1203
+ msgstr "Numer telefonu"
1204
+
1205
+ #: inc/lp-core-functions.php:1515
1206
+ msgid "Your phone number"
1207
+ msgstr "Twój numer telefonu"
1208
+
1209
+ #: inc/lp-core-functions.php:1545
1210
+ msgid "Please enter your name"
1211
+ msgstr "Wprowadź swoje imię i nazwisko"
1212
+
1213
+ #: inc/lp-core-functions.php:1550
1214
+ msgid "Please enter your email address"
1215
+ msgstr "Proszę podać swojego emaila"
1216
+
1217
+ #: inc/lp-core-functions.php:1558
1218
+ msgid "Please moderate"
1219
+ msgstr "Proszę zmoderować"
1220
+
1221
+ #: inc/lp-core-functions.php:1569
1222
+ #, php-format
1223
+ msgid "The user <a href=\"%s\">%s</a> wants to become a teacher."
1224
+ msgstr "Użytkownik <a href=\"%s\">%s</a> chciałby być nauczycielem."
1225
+
1226
+ #: inc/lp-core-functions.php:1570
1227
+ #, php-format
1228
+ msgid "Name: %s"
1229
+ msgstr "Imię i nazwisko: %s"
1230
+
1231
+ #: inc/lp-core-functions.php:1571
1232
+ #, php-format
1233
+ msgid "Email: %s"
1234
+ msgstr "E-mail: %s"
1235
+
1236
+ #: inc/lp-core-functions.php:1572
1237
+ #, php-format
1238
+ msgid "Phone: %s"
1239
+ msgstr "Telefon: %s"
1240
+
1241
+ #: inc/lp-core-functions.php:1578
1242
+ #, php-format
1243
+ msgid "Accept: %s"
1244
+ msgstr "Akceptacja: %s"
1245
+
1246
+ #: inc/lp-core-functions.php:1589
1247
+ #: inc/shortcodes/class-lp-shortcode-become-a-teacher.php:109
1248
+ msgid "Your request has been sent! We will get back to you soon!"
1249
+ msgstr "Twoje zapytanie zostało przesłane! Wkrótce się z Tobą skontaktujemy!"
1250
+
1251
+ #: inc/lp-core-functions.php:2202
1252
+ msgid "OK"
1253
+ msgstr "OK"
1254
+
1255
+ #: inc/lp-core-functions.php:2204
1256
+ #: inc/libraries/meta-box/inc/fields/checkbox.php:50
1257
+ msgid "Yes"
1258
+ msgstr "Tak"
1259
+
1260
+ #: inc/lp-core-functions.php:2205
1261
+ #: inc/libraries/meta-box/inc/fields/checkbox.php:50
1262
+ #: templates/content-quiz/intro.php:25
1263
+ msgid "No"
1264
+ msgstr "Nie"
1265
+
1266
+ #: inc/lp-core-functions.php:2450
1267
+ #, php-format
1268
+ msgid "Congrats! You've enrolled the course \"%s\"."
1269
+ msgstr "Gratulacje! Dołączyłeś do kursu \"%s\"."
1270
+
1271
+ #: inc/lp-core-functions.php:2483
1272
+ msgid "Cart"
1273
+ msgstr "Koszyk"
1274
+
1275
+ #: inc/lp-core-functions.php:2487
1276
+ msgid "Enable cart"
1277
+ msgstr "Włącz koszyk"
1278
+
1279
+ #: inc/lp-core-functions.php:2488
1280
+ msgid "Check this option to enable user purchase multiple courses at one time."
1281
+ msgstr ""
1282
+ "Zaznacz tą opcję, aby umożliwić zamówienie wielu kursów w jednym czasie."
1283
+
1284
+ #: inc/lp-core-functions.php:2494
1285
+ msgid "Add to cart redirect"
1286
+ msgstr "Dodaj do karty przekierowanie"
1287
+
1288
+ #: inc/lp-core-functions.php:2495
1289
+ msgid "Redirect to checkout immediately after adding course to cart."
1290
+ msgstr "Przekierowanie do kasy, gdy tylko kurs zostanie dodany do koszyka."
1291
+
1292
+ #: inc/lp-core-functions.php:2501
1293
+ msgid "AJAX add to cart"
1294
+ msgstr "Dodawanie do koszyka w AJAX"
1295
+
1296
+ #: inc/lp-core-functions.php:2502
1297
+ msgid "Using AJAX to add course to cart."
1298
+ msgstr "Używaj AJAX w celu dodania kursu do karty."
1299
+
1300
+ #: inc/lp-core-functions.php:2508
1301
+ msgid "Cart page"
1302
+ msgstr "Strona koszyka"
1303
+
1304
+ #: inc/lp-core-functions.php:2646
1305
+ msgid "Are you sure you want to cancel order?"
1306
+ msgstr "Jesteś pewny, że chcesz anulować zamówienie?"
1307
+
1308
+ #: inc/lp-core-functions.php:2647
1309
+ msgid "Cancel Order"
1310
+ msgstr "Anuluj zamówienie"
1311
+
1312
+ #: inc/lp-core-functions.php:2702 inc/course/lp-course-functions.php:925
1313
+ #: inc/user/class-lp-profile.php:833 inc/user/class-lp-profile.php:867
1314
+ #: inc/user-item/class-lp-user-item.php:344
1315
+ msgid "Passed"
1316
+ msgstr "Zdane"
1317
+
1318
+ #: inc/lp-core-functions.php:2705 inc/course/lp-course-functions.php:928
1319
+ #: inc/user/class-lp-profile.php:834 inc/user/class-lp-profile.php:868
1320
+ #: inc/user-item/class-lp-user-item.php:345
1321
+ msgid "Failed"
1322
+ msgstr "Niepowodzenie"
1323
+
1324
+ #: inc/lp-core-functions.php:2895
1325
+ msgctxt "static-page-name"
1326
+ msgid "Checkout"
1327
+ msgstr "Koszyk"
1328
+
1329
+ #: inc/lp-core-functions.php:2896
1330
+ msgctxt "static-page-name"
1331
+ msgid "Courses"
1332
+ msgstr "Kursy"
1333
+
1334
+ #: inc/lp-core-functions.php:2897
1335
+ msgctxt "static-page-name"
1336
+ msgid "Profile"
1337
+ msgstr "Twój profil"
1338
+
1339
+ #: inc/lp-core-functions.php:2898
1340
+ msgctxt "static-page-name"
1341
+ msgid "Become a Teacher"
1342
+ msgstr "Zostań nauczycielem"
1343
+
1344
+ #: inc/lp-deprecated.php:370 inc/lp-deprecated.php:402
1345
+ #: inc/admin/lp-admin-actions.php:54 inc/admin/lp-admin-functions.php:818
1346
+ #: inc/admin/lp-admin-functions.php:983 inc/admin/lp-admin-functions.php:1185
1347
+ #: inc/admin/lp-admin-functions.php:2066
1348
+ #: inc/admin/views/statistics/courses.php:27
1349
+ #: inc/admin/views/statistics/courses.php:42
1350
+ #: inc/admin/views/statistics/general.php:43
1351
+ #: inc/admin/views/statistics/general.php:59
1352
+ #: inc/admin/views/statistics/orders.php:28
1353
+ #: inc/admin/views/statistics/orders.php:62
1354
+ #: inc/admin/views/statistics/users.php:29
1355
+ #: inc/admin/views/statistics/users.php:45
1356
+ #: inc/libraries/meta-box/inc/fields/select.php:87
1357
+ #: inc/user/class-lp-profile.php:799 inc/user/class-lp-profile.php:831
1358
+ #: inc/user/class-lp-profile.php:865
1359
+ #: templates/widgets/course-info/default.php:44
1360
+ msgid "All"
1361
+ msgstr "Wszystkie"
1362
+
1363
+ #: inc/lp-deprecated.php:371
1364
+ msgid "Learning"
1365
+ msgstr "Szkolenie"
1366
+
1367
+ #: inc/lp-deprecated.php:372 inc/custom-post-types/order.php:711
1368
+ #: inc/user/class-lp-profile.php:284
1369
+ msgid "Purchased"
1370
+ msgstr "Zakupiony"
1371
+
1372
+ #: inc/lp-deprecated.php:373 inc/lp-deprecated.php:404
1373
+ #: inc/user/class-lp-profile.php:832 inc/user/class-lp-profile.php:866
1374
+ #: inc/user-item/class-lp-user-item.php:343
1375
+ msgid "Finished"
1376
+ msgstr "Zakończono"
1377
+
1378
+ #: inc/lp-deprecated.php:374 inc/user/class-lp-profile.php:277
1379
+ msgid "Owned"
1380
+ msgstr "Własne"
1381
+
1382
+ #: inc/lp-deprecated.php:403 inc/course/lp-course-functions.php:931
1383
+ #: inc/user-item/class-lp-user-item.php:339
1384
+ #: inc/user-item/class-lp-user-item.php:340
1385
+ #: inc/user-item/class-lp-user-item.php:341
1386
+ msgid "In Progress"
1387
+ msgstr "W trakcie"
1388
+
1389
+ #: inc/lp-js-template.php:11
1390
+ msgid "--Select a Lesson--"
1391
+ msgstr "--Wybierz lekcję--"
1392
+
1393
+ #: inc/lp-template-functions.php:55
1394
+ msgid "Your order is waiting for processing"
1395
+ msgstr "Twój kurs oczekuje na sprawdzenie"
1396
+
1397
+ #: inc/lp-template-functions.php:541
1398
+ msgid "Overview"
1399
+ msgstr "Opis"
1400
+
1401
+ #: inc/lp-template-functions.php:549 inc/admin/views/course/curriculum.php:15
1402
+ msgid "Curriculum"
1403
+ msgstr "Program kursu"
1404
+
1405
+ #: inc/lp-template-functions.php:555
1406
+ #: inc/emails/class-lp-email-cancelled-order-instructor.php:24
1407
+ #: inc/emails/class-lp-email-enrolled-course-instructor.php:27
1408
+ #: inc/emails/class-lp-email-finished-course-instructor.php:27
1409
+ #: inc/emails/class-lp-email-new-order-instructor.php:26
1410
+ #: inc/emails/_bk/class-lp-email-finished-course-instructor.php:26
1411
+ #: templates/single-course/tabs/instructor.php:22
1412
+ msgid "Instructor"
1413
+ msgstr "Nauczyciel"
1414
+
1415
+ #: inc/lp-template-functions.php:1302
1416
+ msgid "Course Search Results"
1417
+ msgstr "Wynik"
1418
+
1419
+ #: inc/lp-template-functions.php:1304 inc/admin/class-lp-admin.php:276
1420
+ #: inc/admin/lp-admin-actions.php:208
1421
+ #: inc/admin/settings/class-lp-settings-courses.php:12
1422
+ #: inc/admin/settings/class-lp-settings-profile.php:148
1423
+ #: inc/admin/settings/class-lp-settings-profile.php:273
1424
+ #: inc/admin/sub-menus/class-lp-submenu-statistics.php:21
1425
+ #: inc/admin/sub-menus/class-lp-submenu-statistics.php:28
1426
+ #: inc/admin/views/setup/steps/pages.php:22
1427
+ #: inc/admin/views/tools/course/html-user.php:27
1428
+ #: inc/custom-post-types/course.php:74 inc/custom-post-types/course.php:76
1429
+ #: inc/user/class-lp-profile.php:299
1430
+ msgid "Courses"
1431
+ msgstr "Kursy"
1432
+
1433
+ #: inc/lp-template-functions.php:1437
1434
+ msgctxt "breadcrumb"
1435
+ msgid "Home"
1436
+ msgstr "Strona główna"
1437
+
1438
+ #: inc/lp-template-functions.php:2315
1439
+ #: inc/admin/settings/class-lp-settings-checkout.php:76
1440
+ #: inc/admin/settings/class-lp-settings-payments.php:125
1441
+ msgid "Order received"
1442
+ msgstr "Zamówienie przyjęte"
1443
+
1444
+ #: inc/lp-template-functions.php:2331
1445
+ #, php-format
1446
+ msgid "Access denied \"%s\""
1447
+ msgstr "Odmowa dostępu \"%s\""
1448
+
1449
+ #: inc/lp-template-functions.php:2381
1450
+ #, php-format
1451
+ msgid "Search Results for: &ldquo;%s&rdquo;"
1452
+ msgstr "Wyniki wyszukiwania: &ldquo;%s&rdquo;"
1453
+
1454
+ #: inc/lp-template-functions.php:2384
1455
+ #, php-format
1456
+ msgid "&nbsp;&ndash; Page %s"
1457
+ msgstr "&nbsp;&ndash; Strona %s"
1458
+
1459
+ #: inc/lp-template-functions.php:2647 inc/lp-template-functions.php:3191
1460
+ msgid "Final"
1461
+ msgstr "Kończący"
1462
+
1463
+ #: inc/lp-template-functions.php:2656 inc/course/lp-course-functions.php:827
1464
+ #: inc/custom-post-types/abstract.php:514 inc/custom-post-types/lesson.php:314
1465
+ #: inc/libraries/meta-box/inc/fields/oembed.php:79
1466
+ #: templates/single-course/section/item-meta.php:25
1467
+ msgid "Preview"
1468
+ msgstr "Podgląd"
1469
+
1470
+ #: inc/lp-template-functions.php:2940
1471
+ msgid "Fill out the form and send us your requesting."
1472
+ msgstr "Wypełnij formularz i wyślij nam swoje zapytanie."
1473
+
1474
+ #: inc/lp-template-functions.php:3199 inc/custom-post-types/quiz.php:388
1475
+ #, php-format
1476
+ msgid "%d question"
1477
+ msgid_plural "%d questions"
1478
+ msgstr[0] "%d zapytanie"
1479
+ msgstr[1] "%d zapytania"
1480
+ msgstr[2] "%d zapytań"
1481
+
1482
+ #: inc/lp-template-functions.php:3210
1483
+ #, php-format
1484
+ msgctxt "duration"
1485
+ msgid "%s day"
1486
+ msgstr "%s dzień"
1487
+
1488
+ #: inc/lp-template-functions.php:3211
1489
+ #, php-format
1490
+ msgctxt "duration"
1491
+ msgid "%s hour"
1492
+ msgstr "%s godzina"
1493
+
1494
+ #: inc/lp-template-functions.php:3212
1495
+ #, php-format
1496
+ msgctxt "duration"
1497
+ msgid "%s min"
1498
+ msgstr "%s minut"
1499
+
1500
+ #: inc/lp-template-functions.php:3213
1501
+ #, php-format
1502
+ msgctxt "duration"
1503
+ msgid "%s sec"
1504
+ msgstr "%s sekunda"
1505
+
1506
+ #: inc/lp-template-functions.php:3225 inc/course/lp-course-functions.php:748
1507
+ msgid "Edit this item"
1508
+ msgstr "Edytuj ten element"
1509
+
1510
+ #: inc/lp-template-functions.php:3280
1511
+ msgid "Back to class"
1512
+ msgstr "Wróć do tablicy"
1513
+
1514
+ #: inc/lp-template-functions.php:3396
1515
+ msgid "Popup links color"
1516
+ msgstr "Popup - kolor linków"
1517
+
1518
+ #: inc/lp-template-functions.php:3404
1519
+ msgid "Popup heading background"
1520
+ msgstr "Popup - tło nagłówka"
1521
+
1522
+ #: inc/lp-template-functions.php:3412
1523
+ msgid "Popup heading color"
1524
+ msgstr "Popup - kolor nagłówka"
1525
+
1526
+ #: inc/lp-template-functions.php:3424
1527
+ msgid "Popup curriculum background"
1528
+ msgstr "Popup - tło programu"
1529
+
1530
+ #: inc/lp-template-functions.php:3433
1531
+ msgid "Popup item color"
1532
+ msgstr "Popup - kolor elementów"
1533
+
1534
+ #: inc/lp-template-functions.php:3441
1535
+ msgid "Popup active item background"
1536
+ msgstr "Popup - tło aktywnych elementów"
1537
+
1538
+ #: inc/lp-template-functions.php:3449
1539
+ msgid "Popup active item color"
1540
+ msgstr "Popup - kolor aktywnych elementów"
1541
+
1542
+ #: inc/lp-template-functions.php:3457
1543
+ msgid "Popup content background"
1544
+ msgstr "Popup - tło zawartości"
1545
+
1546
+ #: inc/lp-template-functions.php:3465
1547
+ msgid "Popup content color"
1548
+ msgstr "Popup - kolor zawartości"
1549
+
1550
+ #: inc/lp-template-functions.php:3473
1551
+ msgid "Section heading background"
1552
+ msgstr "Tło sekcji nagłówka"
1553
+
1554
+ #: inc/lp-template-functions.php:3480
1555
+ msgid "Section heading color"
1556
+ msgstr "Kolor sekcji nagłówka"
1557
+
1558
+ #: inc/lp-template-functions.php:3487
1559
+ msgid "Section heading bottom color"
1560
+ msgstr "Kolor stopki sekcji nagłówka"
1561
+
1562
+ #: inc/lp-template-functions.php:3495
1563
+ msgid "Lines color"
1564
+ msgstr "Kolor lini"
1565
+
1566
+ #: inc/lp-template-functions.php:3506
1567
+ msgid "Profile cover background"
1568
+ msgstr "Tło okładki profilu"
1569
+
1570
+ #: inc/lp-template-functions.php:3514
1571
+ msgid "Scrollbar"
1572
+ msgstr "Pasek przewijania"
1573
+
1574
+ #: inc/lp-template-functions.php:3523
1575
+ msgid "Progress bar color"
1576
+ msgstr "Kolor paska postępu"
1577
+
1578
+ #: inc/lp-template-functions.php:3531
1579
+ msgid "Progress bar active color"
1580
+ msgstr "Kolor aktywnego paska postępu"
1581
+
1582
+ #: inc/lp-webhooks.php:82
1583
+ #, php-format
1584
+ msgid "LearnPress webhook %s process completed"
1585
+ msgstr "Proces LearnPress Webhook %s ukończony"
1586
+
1587
+ #: inc/lp-webhooks.php:88
1588
+ msgid "LearnPress webhook process Complete"
1589
+ msgstr "Proces LearnPress webhook ukończony"
1590
+
1591
+ #: inc/abstracts/abstract-addon.php:185
1592
+ #, php-format
1593
+ msgid ""
1594
+ "<strong>%s</strong> add-on version %s requires <strong>LearnPress</strong> "
1595
+ "version %s or higher"
1596
+ msgstr ""
1597
+ "<strong>%s</strong>dodatek w wersji %s wymaga <strong>LearnPress</strong> w "
1598
+ "wersji %s lub więcej"
1599
+
1600
+ #: inc/abstracts/abstract-addon.php:244
1601
+ #, php-format
1602
+ msgid "%s plugin file does not exist."
1603
+ msgstr "Plik pluginu %s nie istnieje."
1604
+
1605
+ #: inc/abstracts/abstract-addon.php:262
1606
+ #, php-format
1607
+ msgid "%s plugin class does not exist."
1608
+ msgstr "Klasa pluginu %s nie istnieje."
1609
+
1610
+ #: inc/abstracts/abstract-object-data.php:324
1611
+ #, php-format
1612
+ msgid "The following these functions %s do not exists in %s"
1613
+ msgstr "Poniższe funkcje %s nie istnieją w %s"
1614
+
1615
+ #: inc/abstracts/abstract-shortcode-courses.php:142
1616
+ #: inc/admin/views/tools/course/html-course.php:48
1617
+ #: templates/content-archive-course.php:74
1618
+ msgid "No course found."
1619
+ msgstr "Nie znaleziono kursów."
1620
+
1621
+ #: inc/admin/class-lp-admin-ajax.php:175
1622
+ msgid "Ops! ID not found"
1623
+ msgstr ""
1624
+
1625
+ #: inc/admin/class-lp-admin-ajax.php:204
1626
+ msgid "Duplicate post fail, please try again"
1627
+ msgstr ""
1628
+
1629
+ #: inc/admin/class-lp-admin-ajax.php:354
1630
+ msgid "Access denied"
1631
+ msgstr "Dostęp zabroniony"
1632
+
1633
+ #: inc/admin/class-lp-admin-ajax.php:366 inc/admin/class-lp-admin-ajax.php:412
1634
+ #: templates/order/order-details.php:18
1635
+ msgid "Invalid order"
1636
+ msgstr "Niepoprawne zamówienie"
1637
+
1638
+ #: inc/admin/class-lp-admin-ajax.php:400
1639
+ msgid "Permission denied"
1640
+ msgstr "Odmowa dostępu"
1641
+
1642
+ #: inc/admin/class-lp-admin-ajax.php:600 inc/admin/class-lp-admin-ajax.php:773
1643
+ #: inc/admin/lp-admin-functions.php:253
1644
+ msgid "Edit Page"
1645
+ msgstr "Edytuj stronę"
1646
+
1647
+ #: inc/admin/class-lp-admin-ajax.php:601 inc/admin/class-lp-admin-ajax.php:775
1648
+ #: inc/admin/lp-admin-functions.php:255
1649
+ msgid "View Page"
1650
+ msgstr "Zobacz Stronę"
1651
+
1652
+ #: inc/admin/class-lp-admin-ajax.php:603
1653
+ msgid "Error! Page creation failed. Please try again."
1654
+ msgstr "Error! Błąd przy tworzeniu strony. Spróbuj ponownie."
1655
+
1656
+ #: inc/admin/class-lp-admin-ajax.php:606
1657
+ msgid "Empty page name!"
1658
+ msgstr "Pusta nazwa strony!"
1659
+
1660
+ #: inc/admin/class-lp-admin-ajax.php:640
1661
+ msgid "The required pages are successfully created."
1662
+ msgstr "Wymagana strona została stworzona poprawnie."
1663
+
1664
+ #: inc/admin/class-lp-admin-ajax.php:650
1665
+ msgid "Please try again."
1666
+ msgstr "Spróbuj ponownie."
1667
+
1668
+ #: inc/admin/class-lp-admin-ajax.php:676
1669
+ msgid "Successfully import sample data."
1670
+ msgstr "Poprawnie zaimportowano przykładowe dane."
1671
+
1672
+ #: inc/admin/class-lp-admin-ajax.php:676
1673
+ msgid "View courses"
1674
+ msgstr "Zobacz kursy"
1675
+
1676
+ #: inc/admin/class-lp-admin-ajax.php:680
1677
+ msgid "Failed to import sample data. Please try again."
1678
+ msgstr "Import przykładowych danych poszedł źle. Spróbuj ponownie!."
1679
+
1680
+ #: inc/admin/class-lp-admin-ajax.php:684
1681
+ msgid ""
1682
+ "Unknown error when installing/activating Import/Export add-on. Please try "
1683
+ "again!"
1684
+ msgstr ""
1685
+ "Nieznany błąd podczas instalacji/aktywacji dodatku Importu/Eksportu. Spróbuj "
1686
+ "ponownie!"
1687
+
1688
+ #: inc/admin/class-lp-admin-ajax.php:700 inc/admin/class-lp-admin-ajax.php:721
1689
+ #: inc/admin/class-lp-admin-ajax.php:741
1690
+ msgid "You do not have the permission to deactivate plugins on this site."
1691
+ msgstr ""
1692
+ "Nie posiadasz wystarczających uprawnień, by wyłączać wtyczki na tej witrynie."
1693
+
1694
+ #: inc/admin/class-lp-admin-assets.php:38
1695
+ msgid "Ooops! Error."
1696
+ msgstr "Uppps! Błąd."
1697
+
1698
+ #: inc/admin/class-lp-admin-assets.php:39
1699
+ #: inc/emails/class-lp-email-cancelled-order-guest.php:27
1700
+ #: inc/emails/class-lp-email-completed-order-guest.php:29
1701
+ #: inc/emails/class-lp-email-new-order-guest.php:27
1702
+ #: inc/emails/class-lp-email-processing-order-guest.php:27
1703
+ msgid "Guest"
1704
+ msgstr "Gość"
1705
+
1706
+ #: inc/admin/class-lp-admin-assets.php:45
1707
+ msgid ""
1708
+ "Before taking this action, we strongly recommend you should backup your site "
1709
+ "first before proceeding. Should any issues come at hand, do not hesitate to "
1710
+ "contact our Support team. Are you sure to proceed the update protocol?"
1711
+ msgstr ""
1712
+
1713
+ #: inc/admin/class-lp-admin-dashboard.php:19
1714
+ msgid "LearnPress order status"
1715
+ msgstr "Status zamówień LearnPress"
1716
+
1717
+ #: inc/admin/class-lp-admin-dashboard.php:24
1718
+ msgid "LearnPress status"
1719
+ msgstr "Status LeadnPress"
1720
+
1721
+ #: inc/admin/class-lp-admin-dashboard.php:49
1722
+ #: inc/admin/dashboard-statistics/class-lp-statistic-status.php:30
1723
+ msgid "Total Raised"
1724
+ msgstr "Łączne"
1725
+
1726
+ #: inc/admin/class-lp-admin-dashboard.php:65
1727
+ #: inc/admin/class-lp-admin-dashboard.php:67
1728
+ #: inc/admin/dashboard-statistics/class-lp-statistic-status.php:45
1729
+ #: inc/admin/dashboard-statistics/class-lp-statistic-status.php:50
1730
+ #, php-format
1731
+ msgid "%d order"
1732
+ msgid_plural "%d orders"
1733
+ msgstr[0] "%d zamówień"
1734
+ msgstr[1] "%d zamówienia"
1735
+ msgstr[2] "%d zamówień"
1736
+
1737
+ #: inc/admin/class-lp-admin-dashboard.php:83
1738
+ #: inc/admin/dashboard-statistics/class-lp-statistic-status.php:63
1739
+ msgid "Created by: "
1740
+ msgstr "Stworzone przez: "
1741
+
1742
+ #: inc/admin/class-lp-admin-menu.php:69
1743
+ msgid "View Courses"
1744
+ msgstr "Pokaż kursy"
1745
+
1746
+ #: inc/admin/class-lp-admin-menu.php:89
1747
+ msgid "Learning Management System"
1748
+ msgstr "System szkoleń"
1749
+
1750
+ #: inc/admin/class-lp-admin-menu.php:90 inc/admin/class-lp-admin-menu.php:141
1751
+ #: inc/admin/class-lp-admin.php:93 inc/admin/class-lp-admin.php:101
1752
+ #: inc/admin/lp-admin-functions.php:1565
1753
+ #: inc/admin/settings/class-lp-settings-emails.php:150
1754
+ msgid "LearnPress"
1755
+ msgstr "LearnPress"
1756
+
1757
+ #: inc/admin/class-lp-admin-tools.php:129
1758
+ msgid "All courses, lessons, quizzes and questions have been removed"
1759
+ msgstr "Wszystkie kursy, testy, pytania zostały usunięte"
1760
+
1761
+ #: inc/admin/class-lp-admin-tools.php:192
1762
+ msgid "Outdated data from version older than 1.0 has been removed"
1763
+ msgstr "Nieaktualne informacje z wersji starszej niż 1.0 zostały usunięte"
1764
+
1765
+ #: inc/admin/class-lp-admin.php:179
1766
+ msgid "Shop Page"
1767
+ msgstr "Strona sklepu"
1768
+
1769
+ #: inc/admin/class-lp-admin.php:183
1770
+ msgid "Cart Page"
1771
+ msgstr "Strona koszyka"
1772
+
1773
+ #: inc/admin/class-lp-admin.php:187 inc/admin/class-lp-admin.php:579
1774
+ msgid "Checkout Page"
1775
+ msgstr "Strona kasy"
1776
+
1777
+ #: inc/admin/class-lp-admin.php:191
1778
+ msgid "My Account Page"
1779
+ msgstr "Strona konta"
1780
+
1781
+ #: inc/admin/class-lp-admin.php:195
1782
+ msgid "Terms and Conditions Page"
1783
+ msgstr "Strona regulaminu i zasad"
1784
+
1785
+ #: inc/admin/class-lp-admin.php:212
1786
+ msgid "Account"
1787
+ msgstr "Konto"
1788
+
1789
+ #: inc/admin/class-lp-admin.php:213
1790
+ msgid "Billing"
1791
+ msgstr "Wykaz"
1792
+
1793
+ #: inc/admin/class-lp-admin.php:215 inc/admin/class-lp-admin.php:278
1794
+ #: inc/admin/settings/class-lp-settings-checkout.php:22
1795
+ #: inc/admin/views/setup/steps/pages.php:40
1796
+ msgid "Checkout"
1797
+ msgstr "Koszyk"
1798
+
1799
+ #: inc/admin/class-lp-admin.php:216
1800
+ msgid "Confirmation"
1801
+ msgstr "Potwierdzenie"
1802
+
1803
+ #: inc/admin/class-lp-admin.php:217
1804
+ msgid "Invoice"
1805
+ msgstr "Faktura"
1806
+
1807
+ #: inc/admin/class-lp-admin.php:218
1808
+ msgid "Levels"
1809
+ msgstr "Poziomy"
1810
+
1811
+ #: inc/admin/class-lp-admin.php:246
1812
+ msgid "Members"
1813
+ msgstr "Członkowie"
1814
+
1815
+ #: inc/admin/class-lp-admin.php:247
1816
+ msgid "Activity"
1817
+ msgstr "Aktywność"
1818
+
1819
+ #: inc/admin/class-lp-admin.php:248 templates/checkout/form-register.php:48
1820
+ #: templates/global/form-register.php:43
1821
+ msgid "Register"
1822
+ msgstr "Rejestracja"
1823
+
1824
+ #: inc/admin/class-lp-admin.php:249
1825
+ msgid "Activate"
1826
+ msgstr "Aktywacja"
1827
+
1828
+ #: inc/admin/class-lp-admin.php:277
1829
+ #: inc/admin/settings/class-lp-settings-profile.php:22
1830
+ #: inc/admin/views/setup/steps/pages.php:31
1831
+ msgid "Profile"
1832
+ msgstr "Twój profil"
1833
+
1834
+ #: inc/admin/class-lp-admin.php:279 inc/admin/views/setup/steps/pages.php:49
1835
+ #: inc/shortcodes/class-lp-shortcode-become-a-teacher.php:121
1836
+ msgid "Become a Teacher"
1837
+ msgstr "Zostań nauczycielem"
1838
+
1839
+ #: inc/admin/class-lp-admin.php:317
1840
+ msgid "LearnPress Page"
1841
+ msgstr "Strona LearnPress"
1842
+
1843
+ #: inc/admin/class-lp-admin.php:359
1844
+ #, php-format
1845
+ msgid "LearnPress Pages (%d)"
1846
+ msgstr "Strony LearnPress (%d)"
1847
+
1848
+ #: inc/admin/class-lp-admin.php:400
1849
+ msgctxt "pending-request"
1850
+ msgid "Accept"
1851
+ msgstr "Akceptacja"
1852
+
1853
+ #: inc/admin/class-lp-admin.php:452
1854
+ #, php-format
1855
+ msgid "Pending Request %s"
1856
+ msgstr "Oczekujące rządanie %s"
1857
+
1858
+ #: inc/admin/class-lp-admin.php:473
1859
+ msgid "Sorry, you are not allowed to edit this user."
1860
+ msgstr "Przepraszamy, nie jesteś dopuszczony do edycji tego użytkownika."
1861
+
1862
+ #: inc/admin/class-lp-admin.php:475
1863
+ msgid "User has accepted to become a teacher."
1864
+ msgstr "Użytkownik zaakceptował bycie nauczycielem."
1865
+
1866
+ #: inc/admin/class-lp-admin.php:553
1867
+ #, php-format
1868
+ msgid ""
1869
+ "LearnPress requires permalink option <strong>Post name</strong> is enabled. "
1870
+ "Please enable it <a href=\"%s\">here</a> to ensure that all functions work "
1871
+ "properly."
1872
+ msgstr ""
1873
+ "LeanPress wymaga włączenia opcji bezpośredniego linku <strong>Nazwa "
1874
+ "postu</strong>. Proszę to włączyć <a href=\"%s\">tutaj</a>, aby umożliwić "
1875
+ "poprawne działanie tej funkcji."
1876
+
1877
+ #: inc/admin/class-lp-admin.php:575
1878
+ msgid "Profile Page"
1879
+ msgstr "Strona profilu"
1880
+
1881
+ #: inc/admin/class-lp-admin.php:605
1882
+ #, php-format
1883
+ msgid "The following required page(s) are currently missing: %s."
1884
+ msgstr "Brakuje poniższych podstron, które są wymagane: %s."
1885
+
1886
+ #: inc/admin/class-lp-admin.php:606
1887
+ #, php-format
1888
+ msgid ""
1889
+ "To ensure all functions work properly, please click <a class=\"button\" "
1890
+ "id=\"learn-press-create-pages\" href=\"%s\">here</a> to create and set it up "
1891
+ "automatically."
1892
+ msgstr ""
1893
+ "Aby upewnić się, że wszystkie funkcje działają poprawnie kliknij <a "
1894
+ "class=\"button\" id=\"learn-press-create-pages\" href=\"%s\">tutaj</a>, aby "
1895
+ "stworzyć i skonfigurować automatycznie."
1896
+
1897
+ #: inc/admin/class-lp-admin.php:656
1898
+ #, php-format
1899
+ msgid ""
1900
+ "If you like <strong>LearnPress</strong> please leave us a %s&#9733;&#9733;"
1901
+ "&#9733;&#9733;&#9733;%s rating. A huge thanks from LearnPress team for your "
1902
+ "generous."
1903
+ msgstr ""
1904
+ "Jeżeli lubisz <strong>LearnPress</strong> Proszę oceń %s&#9733;&#9733;&#9733;"
1905
+ "&#9733;&#9733;%s Nas. Dzięki wielkie."
1906
+
1907
+ #: inc/admin/class-lp-admin.php:656
1908
+ msgid "Thanks :)"
1909
+ msgstr "Dzięki :)"
1910
+
1911
+ #: inc/admin/class-lp-install-sample-data.php:64
1912
+ msgid "Are you sure you want to install sample course data?"
1913
+ msgstr "Jesteś pewny, że chcesz zainstalować przykładowa dane?"
1914
+
1915
+ #: inc/admin/class-lp-install-sample-data.php:65
1916
+ msgid "Are you sure you want to delete sample course data?"
1917
+ msgstr "Jesteś pewny, że chcesz usunąć przykładowe dane?"
1918
+
1919
+ #: inc/admin/class-lp-install-sample-data.php:128
1920
+ #, php-format
1921
+ msgid "Course \"%s\" has been created"
1922
+ msgstr "Kurs \"%s\" został ukończony"
1923
+
1924
+ #: inc/admin/class-lp-install-sample-data.php:130
1925
+ #: inc/admin/views/meta-boxes/course/assigned.php:22
1926
+ #: inc/admin/views/meta-boxes/quiz/assigned.php:28
1927
+ #: inc/admin/views/meta-boxes/quiz/assigned.php:38
1928
+ #: inc/custom-post-types/abstract.php:493
1929
+ #: inc/custom-post-types/abstract.php:502 inc/custom-post-types/lesson.php:349
1930
+ #: inc/custom-post-types/question.php:359 inc/custom-post-types/quiz.php:369
1931
+ #: inc/order/class-lp-order.php:933
1932
+ msgid "View"
1933
+ msgstr "Podgląd"
1934
+
1935
+ #: inc/admin/class-lp-install-sample-data.php:132 inc/attributes/course.php:232
1936
+ #: inc/custom-post-types/lesson.php:347 inc/custom-post-types/question.php:357
1937
+ #: inc/custom-post-types/quiz.php:367
1938
+ #: templates/content-lesson/no-content.php:22
1939
+ msgid "Edit"
1940
+ msgstr "Edycja"
1941
+
1942
+ #: inc/admin/class-lp-install-sample-data.php:302
1943
+ #: inc/admin/views/tools/database/html-install-sample-data.php:25
1944
+ msgid "Sample course"
1945
+ msgstr ""
1946
+
1947
+ #: inc/admin/class-lp-install-sample-data.php:605
1948
+ #: inc/admin/class-lp-install-sample-data.php:613
1949
+ msgctxt "install-sample-course"
1950
+ msgid " [TRUE]"
1951
+ msgstr " [PRAWDA]"
1952
+
1953
+ #: inc/admin/class-lp-meta-box-tabs.php:29
1954
+ msgid "Meta box tabs"
1955
+ msgstr "Tabelki Meta"
1956
+
1957
+ #: inc/admin/class-lp-modal-search-items.php:58
1958
+ #: inc/admin/class-lp-modal-search-users.php:49
1959
+ #: inc/admin/views/course/modal-choose-items.php:95
1960
+ #: inc/admin/views/quiz/modal-choose-items.php:87
1961
+ msgid "Add"
1962
+ msgstr "Dodaj"
1963
+
1964
+ #: inc/admin/class-lp-modal-search-items.php:59
1965
+ #: inc/admin/class-lp-modal-search-users.php:50
1966
+ #: inc/admin/views/meta-boxes/order/details.php:239
1967
+ msgid "Close"
1968
+ msgstr "Zamknij"
1969
+
1970
+ #: inc/admin/class-lp-modal-search-items.php:60
1971
+ #: inc/admin/views/modal-search-items.php:11
1972
+ msgid "Search items"
1973
+ msgstr "Wyszukaj elementy"
1974
+
1975
+ #: inc/admin/class-lp-modal-search-items.php:248
1976
+ #: inc/admin/class-lp-modal-search-users.php:184
1977
+ msgid "No item found"
1978
+ msgstr "Nie znaleziono elementów"
1979
+
1980
+ #: inc/admin/class-lp-modal-search-items.php:341
1981
+ msgid "There are no available lessons for this course, please use "
1982
+ msgstr "Brak dostępnych lekcji dla tego kursu, proszę użyć "
1983
+
1984
+ #: inc/admin/class-lp-modal-search-items.php:342
1985
+ #: inc/admin/class-lp-modal-search-items.php:346
1986
+ #: inc/admin/class-lp-modal-search-items.php:350
1987
+ msgid "Add new item"
1988
+ msgstr "Dodaj nowy plik"
1989
+
1990
+ #: inc/admin/class-lp-modal-search-items.php:345
1991
+ msgid "There are no available quizzes for this course, please use "
1992
+ msgstr "Brak dostępnych testów dla tego kursu, proszę użyć "
1993
+
1994
+ #: inc/admin/class-lp-modal-search-items.php:349
1995
+ msgid "There are no available questions for this quiz, please use "
1996
+ msgstr "Brak dostępnych pytań dla tego testu, proszę użyć "
1997
+
1998
+ #: inc/admin/class-lp-modal-search-users.php:51
1999
+ #: inc/admin/views/modal-search-users.php:10
2000
+ msgid "Search users"
2001
+ msgstr "Wyszukaj użytkownika"
2002
+
2003
+ #: inc/admin/class-lp-plugin-install-list-table.php:162
2004
+ msgid "No plugin found."
2005
+ msgstr "Nie znaleziono żadnych wtyczek."
2006
+
2007
+ #: inc/admin/class-lp-plugin-install-list-table.php:296
2008
+ msgctxt "Plugin installer group title"
2009
+ msgid "Performance"
2010
+ msgstr "Wydajność"
2011
+
2012
+ #: inc/admin/class-lp-plugin-install-list-table.php:297
2013
+ msgctxt "Plugin installer group title"
2014
+ msgid "Social"
2015
+ msgstr "Social"
2016
+
2017
+ #: inc/admin/class-lp-plugin-install-list-table.php:298
2018
+ msgctxt "Plugin installer group title"
2019
+ msgid "Tools"
2020
+ msgstr "Przybory"
2021
+
2022
+ #: inc/admin/class-lp-plugin-install-list-table.php:341
2023
+ #, php-format
2024
+ msgid "By %s"
2025
+ msgstr "Od %s"
2026
+
2027
+ #: inc/admin/class-lp-plugin-install-list-table.php:362
2028
+ #: inc/admin/helpers/class-lp-plugins-helper.php:255
2029
+ #, php-format
2030
+ msgid "Install %s now"
2031
+ msgstr "Zainstaluj %s"
2032
+
2033
+ #: inc/admin/class-lp-plugin-install-list-table.php:362
2034
+ msgid "Install and Active"
2035
+ msgstr "Instaluj i aktywuj"
2036
+
2037
+ #: inc/admin/class-lp-plugin-install-list-table.php:369
2038
+ #: inc/admin/helpers/class-lp-plugins-helper.php:262
2039
+ #, php-format
2040
+ msgid "Update %s now"
2041
+ msgstr "Aktualizuj %s"
2042
+
2043
+ #: inc/admin/class-lp-plugin-install-list-table.php:369
2044
+ #: inc/admin/helpers/class-lp-plugins-helper.php:262
2045
+ #: inc/admin/views/updates/html-update-message.php:17
2046
+ #: inc/admin/views/updates/0.9/step-repair-database.php:17
2047
+ msgid "Update Now"
2048
+ msgstr "Zaktualizuj teraz"
2049
+
2050
+ #: inc/admin/class-lp-plugin-install-list-table.php:376
2051
+ msgctxt "plugin"
2052
+ msgid "Enabled"
2053
+ msgstr "Włączona"
2054
+
2055
+ #: inc/admin/class-lp-plugin-install-list-table.php:378
2056
+ msgctxt "plugin"
2057
+ msgid "Enable"
2058
+ msgstr "Włącz"
2059
+
2060
+ #: inc/admin/class-lp-plugin-install-list-table.php:420
2061
+ msgid "Enabled"
2062
+ msgstr "Włączona"
2063
+
2064
+ #: inc/admin/class-lp-plugin-install-list-table.php:422
2065
+ msgid "Disabled"
2066
+ msgstr "Wyłączony"
2067
+
2068
+ #: inc/admin/class-lp-plugin-install-list-table.php:425
2069
+ msgid "Not Install"
2070
+ msgstr "Nie zainstalowane"
2071
+
2072
+ #: inc/admin/class-lp-plugin-install-list-table.php:454
2073
+ msgid "Last Updated:"
2074
+ msgstr "Ostatnio zaktualizowany:"
2075
+
2076
+ #: inc/admin/class-lp-plugin-install-list-table.php:455
2077
+ #: inc/custom-post-types/order.php:779
2078
+ #, php-format
2079
+ msgid "%s ago"
2080
+ msgstr "%s temu"
2081
+
2082
+ #: inc/admin/class-lp-plugin-install-list-table.php:461
2083
+ msgctxt "Active plugin installs"
2084
+ msgid "1+ Million"
2085
+ msgstr "Ponad milion"
2086
+
2087
+ #: inc/admin/class-lp-plugin-install-list-table.php:465
2088
+ #, php-format
2089
+ msgid "%s Active Installs"
2090
+ msgstr "%s aktywnych instalacji"
2091
+
2092
+ #: inc/admin/class-lp-plugin-install-list-table.php:471
2093
+ #: inc/admin/views/addons/html-loop-plugin.php:54
2094
+ msgid "Untested with your version of WordPress"
2095
+ msgstr "Nie testowano z twoją wersją WordPressa"
2096
+
2097
+ #: inc/admin/class-lp-plugin-install-list-table.php:473
2098
+ #: inc/admin/views/addons/html-loop-plugin.php:56
2099
+ msgid "<strong>Incompatible</strong> with your version of WordPress"
2100
+ msgstr "<strong>Niekompatybilna</strong> z twoją wersją WordPressa"
2101
+
2102
+ #: inc/admin/class-lp-plugin-install-list-table.php:475
2103
+ #: inc/admin/views/addons/html-loop-plugin.php:58
2104
+ msgid "<strong>Compatible</strong> with your version of WordPress"
2105
+ msgstr "<strong>Zgodny</strong> z używaną przez ciebie wersją WordPressa"
2106
+
2107
+ #: inc/admin/class-lp-reset-data.php:68
2108
+ msgid "Data deleted"
2109
+ msgstr "Dane usunięte"
2110
+
2111
+ #: inc/admin/class-lp-reset-data.php:70
2112
+ msgid "No data found"
2113
+ msgstr "Nie znaleziono danych"
2114
+
2115
+ #: inc/admin/class-lp-setup-wizard.php:72
2116
+ msgctxt "static-page"
2117
+ msgid "LP Courses"
2118
+ msgstr "Podstrona Kursów"
2119
+
2120
+ #: inc/admin/class-lp-setup-wizard.php:73
2121
+ msgctxt "static-page"
2122
+ msgid "LP Profile"
2123
+ msgstr "Podstrona Profilu"
2124
+
2125
+ #: inc/admin/class-lp-setup-wizard.php:74
2126
+ msgctxt "static-page"
2127
+ msgid "LP Checkout"
2128
+ msgstr "Podstrona Koszyka"
2129
+
2130
+ #: inc/admin/class-lp-setup-wizard.php:75
2131
+ msgctxt "static-page"
2132
+ msgid "LP Become Teacher"
2133
+ msgstr "Podstrona Zostań nauczycielem"
2134
+
2135
+ #: inc/admin/class-lp-setup-wizard.php:206
2136
+ msgid "Welcome"
2137
+ msgstr "Witaj"
2138
+
2139
+ #: inc/admin/class-lp-setup-wizard.php:208
2140
+ #: inc/admin/views/setup/notice-setup.php:5
2141
+ msgid "Run setup wizard"
2142
+ msgstr "Zacznij przewodnik instalacji"
2143
+
2144
+ #: inc/admin/class-lp-setup-wizard.php:211
2145
+ #: inc/admin/settings/class-lp-settings-general.php:52
2146
+ #: inc/admin/settings/class-lp-settings-general.php:57
2147
+ #: inc/admin/views/setup/steps/currency.php:17
2148
+ #: inc/admin/views/setup/steps/currency.php:21
2149
+ msgid "Currency"
2150
+ msgstr "Waluta"
2151
+
2152
+ #: inc/admin/class-lp-setup-wizard.php:217
2153
+ #: inc/admin/views/setup/steps/pages.php:14
2154
+ msgid "Static Pages"
2155
+ msgstr "Strony statyczne"
2156
+
2157
+ #: inc/admin/class-lp-setup-wizard.php:221
2158
+ #: inc/admin/meta-box/fields/payment-order.php:29
2159
+ #: inc/admin/views/setup/steps/payment.php:16
2160
+ #: inc/custom-post-types/course.php:721
2161
+ msgid "Payment"
2162
+ msgstr "Płatność"
2163
+
2164
+ #: inc/admin/class-lp-setup-wizard.php:225
2165
+ #: inc/admin/settings/class-lp-settings-emails.php:26
2166
+ #: inc/admin/settings/class-lp-settings-emails.php:155
2167
+ msgid "Emails"
2168
+ msgstr "Wiadomości e-mail"
2169
+
2170
+ #: inc/admin/class-lp-setup-wizard.php:229 inc/admin/views/setup/content.php:92
2171
+ #: inc/admin/views/setup/steps/finish.php:12
2172
+ msgid "Finish"
2173
+ msgstr "Zakończ"
2174
+
2175
+ #: inc/admin/class-lp-setup-wizard.php:346
2176
+ #: inc/gateways/paypal/class-lp-gateway-paypal.php:91
2177
+ #: inc/gateways/paypal/class-lp-gateway-paypal.php:95
2178
+ msgid "Paypal"
2179
+ msgstr "Paypal"
2180
+
2181
+ #: inc/admin/class-lp-setup-wizard.php:347
2182
+ msgid "Enter your Paypal email address to accept payment via Paypal."
2183
+ msgstr "Wpisz swój email Paypal aby zaakceptować płatność przez Paypal."
2184
+
2185
+ #: inc/admin/class-lp-updater.php:43
2186
+ #, php-format
2187
+ msgid "<p>Updated version %s</p>"
2188
+ msgstr "<p>Zaktualizowana wersja %s</p>"
2189
+
2190
+ #: inc/admin/class-lp-updater.php:60
2191
+ msgid "Successfully updated your database."
2192
+ msgstr "Zaktualizowano bazę danych."
2193
+
2194
+ #: inc/admin/class-lp-upgrader.php:12
2195
+ msgid "Invalid Data provided."
2196
+ msgstr "Podano nieprawidłowe dane."
2197
+
2198
+ #: inc/admin/class-lp-upgrader.php:13
2199
+ msgid "Could not access filesystem."
2200
+ msgstr "Brak dostępu do plików."
2201
+
2202
+ #: inc/admin/class-lp-upgrader.php:14
2203
+ msgid "Filesystem error."
2204
+ msgstr "Błąd systemu plików."
2205
+
2206
+ #: inc/admin/class-lp-upgrader.php:15
2207
+ msgid "Unable to locate WordPress Root directory."
2208
+ msgstr "Nie udało się zlokalizować głównego katalogu WordPressa."
2209
+
2210
+ #: inc/admin/class-lp-upgrader.php:16
2211
+ msgid "Unable to locate WordPress Content directory (wp-content)."
2212
+ msgstr "Nie można zlokalizować katalog zawartości Wordpress (wp-content)"
2213
+
2214
+ #: inc/admin/class-lp-upgrader.php:17
2215
+ msgid "Unable to locate WordPress Plugin directory."
2216
+ msgstr "Nie udało się zlokalizować katalogu wtyczek WordPressa."
2217
+
2218
+ #: inc/admin/class-lp-upgrader.php:18
2219
+ msgid "Unable to locate WordPress Theme directory."
2220
+ msgstr "Nie udało się zlokalizować katalogu motywów WordPressa."
2221
+
2222
+ #: inc/admin/class-lp-upgrader.php:20
2223
+ #, php-format
2224
+ msgid "Unable to locate necessary folder (%s)."
2225
+ msgstr "Nie udało się zlokalizować wymaganego folderu (%s)."
2226
+
2227
+ #: inc/admin/class-lp-upgrader.php:22
2228
+ msgid "Download failed."
2229
+ msgstr "Pobieranie nie powiodło się."
2230
+
2231
+ #: inc/admin/class-lp-upgrader.php:23
2232
+ msgid "Installing the latest version&#8230;"
2233
+ msgstr "Instalacja najnowszej wersji&#8230;"
2234
+
2235
+ #: inc/admin/class-lp-upgrader.php:24
2236
+ msgid "The package contains no files."
2237
+ msgstr "Pakiet nie zawiera plików."
2238
+
2239
+ #: inc/admin/class-lp-upgrader.php:25
2240
+ msgid "Destination folder already exists."
2241
+ msgstr "Docelowy folder już istnieje."
2242
+
2243
+ #: inc/admin/class-lp-upgrader.php:26
2244
+ msgid "Could not create directory."
2245
+ msgstr "Nie można było utworzyć katalogu."
2246
+
2247
+ #: inc/admin/class-lp-upgrader.php:27
2248
+ msgid "The package could not be installed."
2249
+ msgstr "Paczka nie mogła zostać zainstalowana."
2250
+
2251
+ #: inc/admin/class-lp-upgrader.php:29
2252
+ msgid "Enabling Maintenance mode&#8230;"
2253
+ msgstr "Włączanie trybu konserwacji&#8230;"
2254
+
2255
+ #: inc/admin/class-lp-upgrader.php:30
2256
+ msgid "Disabling Maintenance mode&#8230;"
2257
+ msgstr "Wyłączanie trybu konserwacji&#8230;"
2258
+
2259
+ #: inc/admin/lp-admin-actions.php:55
2260
+ #: inc/admin/views/dashboard/plugin-status/html-results.php:31
2261
+ msgid "Published"
2262
+ msgstr "Opublikowane"
2263
+
2264
+ #: inc/admin/lp-admin-actions.php:56
2265
+ msgid "Private"
2266
+ msgstr "Prywatny"
2267
+
2268
+ #: inc/admin/lp-admin-actions.php:57
2269
+ msgid "Pending Review"
2270
+ msgstr "Oczekujące na przegląd"
2271
+
2272
+ #: inc/admin/lp-admin-actions.php:58
2273
+ msgid "Scheduled"
2274
+ msgstr "Zaplanowane"
2275
+
2276
+ #: inc/admin/lp-admin-actions.php:59
2277
+ msgid "Draft"
2278
+ msgstr "Szkice"
2279
+
2280
+ #: inc/admin/lp-admin-actions.php:60
2281
+ msgid "Trash"
2282
+ msgstr "Wyrzuć"
2283
+
2284
+ #: inc/admin/lp-admin-actions.php:138
2285
+ msgid "LearnPress Plugin"
2286
+ msgstr "Plugin LearnPress"
2287
+
2288
+ #: inc/admin/lp-admin-actions.php:142
2289
+ msgid "LearnPress Status"
2290
+ msgstr "Status LearnPress"
2291
+
2292
+ #: inc/admin/lp-admin-actions.php:214 inc/custom-post-types/course.php:1253
2293
+ msgid "Categories"
2294
+ msgstr "Kategorie"
2295
+
2296
+ #: inc/admin/lp-admin-actions.php:219 inc/custom-post-types/course.php:166
2297
+ msgid "Tags"
2298
+ msgstr "Tagi"
2299
+
2300
+ #: inc/admin/lp-admin-functions.php:32
2301
+ msgid "Duplicate this course"
2302
+ msgstr "Duplikuj kurs"
2303
+
2304
+ #: inc/admin/lp-admin-functions.php:44
2305
+ #: inc/admin/meta-box/fields/course-permalink.php:39
2306
+ #: inc/admin/sub-menus/class-lp-submenu-tools.php:22
2307
+ #: inc/admin/views/settings/fields/course-permalink.php:31
2308
+ #: inc/admin/views/statistics/orders.php:47
2309
+ #: inc/custom-post-types/lesson.php:308 inc/custom-post-types/quiz.php:336
2310
+ #: templates/checkout/review-order.php:32
2311
+ #: templates/emails/order-items-table.php:57
2312
+ #: templates/order/order-details.php:28 templates/profile/tabs/courses.php:32
2313
+ #: templates/profile/tabs/courses/purchased.php:38
2314
+ msgid "Course"
2315
+ msgstr "Kurs"
2316
+
2317
+ #: inc/admin/lp-admin-functions.php:52
2318
+ msgid "Duplicate this quiz"
2319
+ msgstr "Zduplikuj ten test"
2320
+
2321
+ #: inc/admin/lp-admin-functions.php:56
2322
+ msgid "Duplicate this question"
2323
+ msgstr "Zduplikuj te pytanie"
2324
+
2325
+ #: inc/admin/lp-admin-functions.php:60
2326
+ msgid "Duplicate this lesson"
2327
+ msgstr "Zduplikuj te lekcję"
2328
+
2329
+ #: inc/admin/lp-admin-functions.php:183
2330
+ msgid "[ Add a new page ]"
2331
+ msgstr "[ Dodaj stronę ]"
2332
+
2333
+ #: inc/admin/lp-admin-functions.php:206
2334
+ msgid "Select Page"
2335
+ msgstr "Wybierz stronę"
2336
+
2337
+ #: inc/admin/lp-admin-functions.php:223
2338
+ msgid "Select a page&hellip;"
2339
+ msgstr "Wybierz stronę&hellip;"
2340
+
2341
+ #: inc/admin/lp-admin-functions.php:244
2342
+ msgid "Create"
2343
+ msgstr "Stwórz"
2344
+
2345
+ #: inc/admin/lp-admin-functions.php:247
2346
+ msgid "New page title"
2347
+ msgstr "Nowy tytuł strony"
2348
+
2349
+ #: inc/admin/lp-admin-functions.php:248
2350
+ msgid "Ok [Enter]"
2351
+ msgstr "Ok [Enter]"
2352
+
2353
+ #: inc/admin/lp-admin-functions.php:249
2354
+ msgid "Cancel [ESC]"
2355
+ msgstr "Anuluj [ESC]"
2356
+
2357
+ #: inc/admin/lp-admin-functions.php:333
2358
+ msgid "Minutes"
2359
+ msgstr "Minuty"
2360
+
2361
+ #: inc/admin/lp-admin-functions.php:374 inc/admin/lp-admin-functions.php:400
2362
+ msgid "Plain text"
2363
+ msgstr "Zwykły tekst"
2364
+
2365
+ #: inc/admin/lp-admin-functions.php:375 inc/admin/lp-admin-functions.php:401
2366
+ msgid "HTML"
2367
+ msgstr "HTML"
2368
+
2369
+ #: inc/admin/lp-admin-functions.php:544
2370
+ #: inc/admin/views/addons/html-loop-theme.php:51
2371
+ msgid "Get it now"
2372
+ msgstr "Zrób to teraz"
2373
+
2374
+ #: inc/admin/lp-admin-functions.php:546
2375
+ #: inc/admin/views/addons/html-loop-theme.php:53
2376
+ msgid "View Demo"
2377
+ msgstr "Zobacz Demo"
2378
+
2379
+ #: inc/admin/lp-admin-functions.php:823
2380
+ #: inc/admin/views/statistics/courses.php:9
2381
+ #: inc/admin/views/statistics/general.php:9
2382
+ #: inc/admin/views/statistics/orders.php:9
2383
+ #: inc/admin/views/statistics/users.php:9
2384
+ #: inc/admin/views/statistics/users.php:46
2385
+ msgid "Instructors"
2386
+ msgstr "Nauczyciele"
2387
+
2388
+ #: inc/admin/lp-admin-functions.php:828
2389
+ #: inc/admin/views/statistics/courses.php:8
2390
+ #: inc/admin/views/statistics/general.php:8
2391
+ #: inc/admin/views/statistics/orders.php:8
2392
+ #: inc/admin/views/statistics/users.php:8
2393
+ #: inc/admin/views/statistics/users.php:47
2394
+ #: inc/admin/views/tools/course/html-course.php:27
2395
+ #: inc/custom-post-types/course.php:1242 inc/custom-post-types/course.php:1249
2396
+ msgid "Students"
2397
+ msgstr "Kursantów"
2398
+
2399
+ #: inc/admin/lp-admin-functions.php:988 inc/admin/lp-admin-functions.php:2071
2400
+ #: inc/admin/views/meta-boxes/course/review-logs.php:25
2401
+ #: inc/user/class-lp-profile.php:800
2402
+ msgid "Publish"
2403
+ msgstr "Opublikowane"
2404
+
2405
+ #: inc/admin/lp-admin-functions.php:993 inc/admin/lp-admin-functions.php:1195
2406
+ #: inc/admin/lp-admin-functions.php:2076
2407
+ #: inc/admin/views/statistics/courses.php:44
2408
+ #: inc/admin/views/statistics/general.php:61
2409
+ #: inc/admin/views/statistics/orders.php:64 inc/user/class-lp-profile.php:801
2410
+ msgid "Pending"
2411
+ msgstr "Oczekujące"
2412
+
2413
+ #: inc/admin/lp-admin-functions.php:998 inc/admin/lp-admin-functions.php:2081
2414
+ #: inc/admin/views/statistics/courses.php:45
2415
+ #: inc/admin/views/statistics/general.php:62
2416
+ msgid "Paid"
2417
+ msgstr "Zapłacone"
2418
+
2419
+ #: inc/admin/lp-admin-functions.php:1003 inc/admin/lp-admin-functions.php:2086
2420
+ #: inc/admin/views/statistics/courses.php:46
2421
+ #: inc/admin/views/statistics/general.php:63 inc/course/abstract-course.php:719
2422
+ #: inc/custom-post-types/course.php:1330
2423
+ msgid "Free"
2424
+ msgstr "Bezpłatne"
2425
+
2426
+ #: inc/admin/lp-admin-functions.php:1190
2427
+ #: inc/admin/views/statistics/orders.php:63
2428
+ #: inc/user-item/class-lp-user-item.php:342
2429
+ #: templates/content-lesson/button-complete.php:36
2430
+ msgid "Completed"
2431
+ msgstr "Zakończone"
2432
+
2433
+ #: inc/admin/lp-admin-functions.php:1222
2434
+ msgid "Pending Courses / Publish Courses"
2435
+ msgstr "Oczekujące kursy / Opublikowane kursy"
2436
+
2437
+ #: inc/admin/lp-admin-functions.php:1223
2438
+ msgid "Free Courses / Priced Courses"
2439
+ msgstr "Darmowe kursy / Płatne kursy"
2440
+
2441
+ #: inc/admin/lp-admin-functions.php:1391
2442
+ msgid "Installed"
2443
+ msgstr "Zainstalowana"
2444
+
2445
+ #: inc/admin/lp-admin-functions.php:1424
2446
+ #, php-format
2447
+ msgid "The user %s has become a teacher"
2448
+ msgstr "Użytkownik %s został nauczycielem"
2449
+
2450
+ #: inc/admin/lp-admin-functions.php:1482
2451
+ msgid "You haven't got any courses yet! Would you like to import sample data?"
2452
+ msgstr "Nie masz jeszcze żadnych kursów! Może chciałbyś zaimportować coś?"
2453
+
2454
+ #: inc/admin/lp-admin-functions.php:1483
2455
+ msgid "If yes, please install add-on name"
2456
+ msgstr "Jeżeli tak, wymagane jest zainstalowanie dodatku"
2457
+
2458
+ #: inc/admin/lp-admin-functions.php:1484
2459
+ msgid "LearnPress Import/Export"
2460
+ msgstr "LearnPress Import/Export"
2461
+
2462
+ #: inc/admin/lp-admin-functions.php:1485
2463
+ msgid "but don't worry because it is completely automated."
2464
+ msgstr "ale nie martw się, ponieważ jest to całkowicie automatyczne."
2465
+
2466
+ #: inc/admin/lp-admin-functions.php:1486
2467
+ msgid "Import now"
2468
+ msgstr "Zaimportuj"
2469
+
2470
+ #: inc/admin/lp-admin-functions.php:1487
2471
+ msgid "No, thanks!"
2472
+ msgstr "Nie, dzięki!"
2473
+
2474
+ #: inc/admin/lp-admin-functions.php:1697
2475
+ msgid " Copy"
2476
+ msgstr " Kopiuj"
2477
+
2478
+ #: inc/admin/lp-admin-functions.php:1790
2479
+ #, php-format
2480
+ msgid "Question id %s does not exist."
2481
+ msgstr "Pytanie o id %s nie istnieje."
2482
+
2483
+ #: inc/admin/lp-admin-functions.php:1793
2484
+ #, php-format
2485
+ msgid "Quiz id %s does not exist."
2486
+ msgstr "Test o id %s nie istnieje."
2487
+
2488
+ #: inc/admin/editor/class-lp-admin-editor-course.php:71
2489
+ #: inc/curds/class-lp-course-curd.php:45
2490
+ msgid "New Course"
2491
+ msgstr "Nowy kurs"
2492
+
2493
+ #: inc/admin/editor/class-lp-admin-editor-question.php:104
2494
+ #: inc/curds/class-lp-question-curd.php:46
2495
+ msgid "New Question"
2496
+ msgstr "Nowe pytanie"
2497
+
2498
+ #: inc/admin/editor/class-lp-admin-editor-quiz.php:45
2499
+ msgid "Invalid quiz"
2500
+ msgstr ""
2501
+
2502
+ #: inc/admin/editor/class-lp-admin-editor-quiz.php:141
2503
+ #: inc/curds/class-lp-quiz-curd.php:80 inc/custom-post-types/quiz.php:97
2504
+ msgid "New Quiz"
2505
+ msgstr "Nowy test"
2506
+
2507
+ #: inc/admin/editor/class-lp-admin-editor-quiz.php:150
2508
+ #: inc/admin/editor/class-lp-admin-editor-quiz.php:567
2509
+ msgid "Quiz creation failed."
2510
+ msgstr "Niepowodzenie w tworzeniu testu."
2511
+
2512
+ #: inc/admin/helpers/class-lp-plugins-helper.php:255
2513
+ msgid "Install Now"
2514
+ msgstr "Instaluj"
2515
+
2516
+ #: inc/admin/helpers/class-lp-plugins-helper.php:269
2517
+ #: inc/admin/helpers/class-lp-plugins-helper.php:279
2518
+ #, php-format
2519
+ msgid "Disable %s now"
2520
+ msgstr "Wyłącz %s"
2521
+
2522
+ #: inc/admin/helpers/class-lp-plugins-helper.php:269
2523
+ #: inc/admin/helpers/class-lp-plugins-helper.php:279
2524
+ msgid "Disable Now"
2525
+ msgstr "Wyłącz"
2526
+
2527
+ #: inc/admin/helpers/class-lp-plugins-helper.php:271
2528
+ #: inc/admin/helpers/class-lp-plugins-helper.php:281
2529
+ #, php-format
2530
+ msgid "Enable %s now"
2531
+ msgstr "Włącz %s teraz"
2532
+
2533
+ #: inc/admin/helpers/class-lp-plugins-helper.php:271
2534
+ #: inc/admin/helpers/class-lp-plugins-helper.php:281
2535
+ msgid "Enable Now"
2536
+ msgstr "Włącz teraz"
2537
+
2538
+ #: inc/admin/helpers/class-lp-plugins-helper.php:286
2539
+ #, php-format
2540
+ msgid "Buy %s now"
2541
+ msgstr "Kup %s teraz"
2542
+
2543
+ #: inc/admin/helpers/class-lp-plugins-helper.php:286
2544
+ msgid "Buy Now"
2545
+ msgstr "Kup teraz"
2546
+
2547
+ #: inc/admin/meta-box/fields/color-schema.php:99
2548
+ msgid "Save as new"
2549
+ msgstr "Zapisz jako nowe"
2550
+
2551
+ #: inc/admin/meta-box/fields/color-schema.php:101
2552
+ #: inc/admin/sub-menus/class-lp-submenu-settings.php:100
2553
+ #: inc/admin/views/tools/course/html-course.php:38
2554
+ #: inc/admin/views/tools/course/html-user-item.php:28
2555
+ #: inc/admin/views/tools/course/html-user.php:40
2556
+ #: inc/widgets/course-filters/tmpl/default.php:85
2557
+ msgid "Reset"
2558
+ msgstr "Reset"
2559
+
2560
+ #: inc/admin/meta-box/fields/color-schema.php:102
2561
+ msgid "Use this colors"
2562
+ msgstr "Użyj tych kolorów"
2563
+
2564
+ #: inc/admin/meta-box/fields/color-schema.php:103
2565
+ #: inc/admin/views/meta-boxes/course/review-logs.php:31
2566
+ #: inc/libraries/meta-box/inc/fields/autocomplete.php:20
2567
+ #: inc/libraries/meta-box/inc/fields/autocomplete.php:81
2568
+ #: inc/libraries/meta-box/inc/fields/autocomplete.php:93
2569
+ msgid "Delete"
2570
+ msgstr "Kasuj"
2571
+
2572
+ #: inc/admin/meta-box/fields/course-permalink.php:22
2573
+ #: inc/admin/settings/class-lp-settings-courses.php:39
2574
+ #: inc/admin/views/settings/fields/course-permalink.php:14
2575
+ msgctxt "default-slug"
2576
+ msgid "courses"
2577
+ msgstr "kursy"
2578
+
2579
+ #: inc/admin/meta-box/fields/course-permalink.php:23
2580
+ #: inc/admin/views/settings/fields/course-permalink.php:15
2581
+ msgctxt "default-slug"
2582
+ msgid "course"
2583
+ msgstr "kurs"
2584
+
2585
+ #: inc/admin/meta-box/fields/course-permalink.php:34
2586
+ #: inc/admin/views/settings/fields/course-permalink.php:26
2587
+ msgid "Default"
2588
+ msgstr "Domyślna"
2589
+
2590
+ #: inc/admin/meta-box/fields/course-permalink.php:44
2591
+ #: inc/admin/views/settings/fields/course-permalink.php:36
2592
+ msgid "Courses base"
2593
+ msgstr "Baza kursów"
2594
+
2595
+ #: inc/admin/meta-box/fields/course-permalink.php:49
2596
+ #: inc/admin/views/settings/fields/course-permalink.php:41
2597
+ msgid "Courses base with category"
2598
+ msgstr "Baza kursów na podstawie kategorii"
2599
+
2600
+ #: inc/admin/meta-box/fields/course-permalink.php:84
2601
+ #: inc/admin/views/settings/fields/course-permalink.php:77
2602
+ msgid "Custom Base"
2603
+ msgstr "Własny format"
2604
+
2605
+ #: inc/admin/meta-box/fields/course-permalink.php:92
2606
+ #: inc/admin/views/settings/fields/course-permalink.php:84
2607
+ msgid ""
2608
+ "Enter a custom base to use. A base <strong>must</strong> be set or WordPress "
2609
+ "will use default values instead."
2610
+ msgstr ""
2611
+ "Wpisz własny format. Format <strong>musi</strong> być wpisany albo WordPress "
2612
+ "użyje domyślnych ustawień."
2613
+
2614
+ #: inc/admin/meta-box/fields/email-content.php:113
2615
+ #: inc/admin/views/settings/emails/email-template.php:52
2616
+ #, php-format
2617
+ msgid ""
2618
+ "This template has been overridden by your theme and can be found in: <code>"
2619
+ "%s</code>. <br />Please open the file in an editor program to edit"
2620
+ msgstr ""
2621
+ "Ten szablon został nadpisany przez Twój szablon i może zostać znalezione w: "
2622
+ "<code>%s</code>. <br /> Otwórz plik w edytorze aby go edytować"
2623
+
2624
+ #: inc/admin/meta-box/fields/email-content.php:149
2625
+ #: inc/admin/views/settings/emails/email-template.php:77
2626
+ msgid "Click on variables to add it into email content."
2627
+ msgstr "Kliknij na zmienne, aby dodać je do treści emalii."
2628
+
2629
+ #: inc/admin/meta-box/fields/google-fonts.php:30
2630
+ msgid "Fonts"
2631
+ msgstr "Czcionki"
2632
+
2633
+ #: inc/admin/meta-box/fields/google-fonts.php:38
2634
+ msgid "Font families separated by |, eg: Open Sans|Roboto."
2635
+ msgstr "Czcionki rozdzielone przez |, np.: Open Sans|Roboto."
2636
+
2637
+ #: inc/admin/meta-box/fields/google-fonts.php:40
2638
+ msgid "Subset"
2639
+ msgstr "Podzbiór"
2640
+
2641
+ #: inc/admin/meta-box/fields/google-fonts.php:48
2642
+ msgid "Font subsets separated by comma, eg: greek,latin."
2643
+ msgstr "Czcionka podzbioru oddzielona przez przecinek, np. greek,latin."
2644
+
2645
+ #: inc/admin/meta-box/fields/image-dimensions.php:32
2646
+ #: inc/admin/views/settings/fields/image-size.php:13
2647
+ msgid "px"
2648
+ msgstr "pikseli"
2649
+
2650
+ #: inc/admin/meta-box/fields/list-emails.php:29
2651
+ #: inc/admin/meta-box/fields/payment-order.php:31
2652
+ #: inc/admin/views/setup/setup-stripe.php:11
2653
+ msgid "Description"
2654
+ msgstr "Opis"
2655
+
2656
+ #: inc/admin/meta-box/fields/list-emails.php:30
2657
+ #: inc/admin/meta-box/fields/payment-order.php:32
2658
+ #: inc/admin/views/meta-boxes/order/details.php:58
2659
+ #: inc/custom-post-types/order.php:714
2660
+ #: templates/emails/order-items-table.php:44
2661
+ #: templates/emails/plain/order-items-table.php:30
2662
+ #: templates/profile/tabs/orders/list.php:34
2663
+ msgid "Status"
2664
+ msgstr "Status"
2665
+
2666
+ #: inc/admin/meta-box/fields/list-emails.php:71
2667
+ msgid ""
2668
+ "You can enable/disable each email by clicking on the status icon or apply "
2669
+ "status for all emails by clicking these buttons"
2670
+ msgstr ""
2671
+ "Możesz włączyć/wyłączyć każdy email poprzez kliknięcie na ikonkę statusu "
2672
+ "albo zaakceptować dla wszystkich emaili klikając na ten przycisk"
2673
+
2674
+ #: inc/admin/meta-box/fields/list-emails.php:74
2675
+ msgid "Enable all"
2676
+ msgstr "Włącz wszystkie"
2677
+
2678
+ #: inc/admin/meta-box/fields/list-emails.php:77
2679
+ msgid "Disable all"
2680
+ msgstr "Wyłącz wszystkie"
2681
+
2682
+ #: inc/admin/meta-box/fields/payment-order.php:30
2683
+ #: inc/admin/views/tools/course/html-course.php:25
2684
+ #: inc/admin/views/tools/course/html-user.php:25
2685
+ msgid "ID"
2686
+ msgstr "ID"
2687
+
2688
+ #: inc/admin/pointers/pointers.php:66
2689
+ msgid "Course Curriculum"
2690
+ msgstr "Program kursu"
2691
+
2692
+ #: inc/admin/pointers/pointers.php:67
2693
+ msgid ""
2694
+ "Build a course by selecting created lessons and quizzes or adding new ones. "
2695
+ "You can easily sort, edit, shortcut (l and q). With LearnPress, it's never "
2696
+ "been easier."
2697
+ msgstr ""
2698
+ "Stwórz kurs wybierając stworzone lekcję oraz testy lub dodając nowe. "
2699
+ "Sortowanie, edycja, skróty - nigdy nie było to prostsze."
2700
+
2701
+ #: inc/admin/settings/class-lp-settings-advanced.php:22
2702
+ #: inc/admin/settings/class-lp-settings-advanced.php:88
2703
+ msgid "Advanced"
2704
+ msgstr "Zaawansowane"
2705
+
2706
+ #: inc/admin/settings/class-lp-settings-advanced.php:53
2707
+ msgid "Enable custom colors"
2708
+ msgstr "Użyj własnych kolorów"
2709
+
2710
+ #: inc/admin/settings/class-lp-settings-advanced.php:57
2711
+ msgid "Use color schema for main colors."
2712
+ msgstr "Użyj schematu kolorów głównych kolorów."
2713
+
2714
+ #: inc/admin/settings/class-lp-settings-advanced.php:60
2715
+ msgid "Color schema"
2716
+ msgstr "Schemat kolorów"
2717
+
2718
+ #: inc/admin/settings/class-lp-settings-advanced.php:66
2719
+ msgid "Load css"
2720
+ msgstr "Załaduj css"
2721
+
2722
+ #: inc/admin/settings/class-lp-settings-advanced.php:70
2723
+ msgid "Load default stylesheet for LearnPress."
2724
+ msgstr "Załaduj domyślne style dla LearnPress."
2725
+
2726
+ #: inc/admin/settings/class-lp-settings-advanced.php:73
2727
+ msgid "Debug mode"
2728
+ msgstr "Tryb debugowania"
2729
+
2730
+ #: inc/admin/settings/class-lp-settings-advanced.php:77
2731
+ msgid "Turn on/off debug mode for developer."
2732
+ msgstr "Włącz/Wyłącz tryb debugowania dla developerów."
2733
+
2734
+ #: inc/admin/settings/class-lp-settings-advanced.php:80
2735
+ msgid "Hard cache"
2736
+ msgstr "Pamięć Podręczna"
2737
+
2738
+ #: inc/admin/settings/class-lp-settings-advanced.php:84
2739
+ msgid "Enable hard cache"
2740
+ msgstr "Włącz pamięć podręczną"
2741
+
2742
+ #: inc/admin/settings/class-lp-settings-advanced.php:88
2743
+ #, php-format
2744
+ msgid ""
2745
+ "Enable cache for static content such as content and settings of course, "
2746
+ "lesson, quiz. <a href=\"%s\">%s</a>"
2747
+ msgstr ""
2748
+ "Włącz pamięć podręczną dla statycznych elementów contentu i ustawień kursu, "
2749
+ "lekcji i testu. <a href=\"%s\">%s</a>"
2750
+
2751
+ #: inc/admin/settings/class-lp-settings-advanced.php:91
2752
+ msgid "Others"
2753
+ msgstr ""
2754
+
2755
+ #: inc/admin/settings/class-lp-settings-advanced.php:95
2756
+ msgid "Enable lesson video"
2757
+ msgstr ""
2758
+
2759
+ #: inc/admin/settings/class-lp-settings-advanced.php:99
2760
+ msgid ""
2761
+ "When this option is enabled, the first video embed in lesson content will be "
2762
+ "detected and move to the top."
2763
+ msgstr ""
2764
+
2765
+ #: inc/admin/settings/class-lp-settings-checkout.php:36
2766
+ #: inc/admin/settings/class-lp-settings-courses.php:66
2767
+ #: inc/admin/settings/class-lp-settings-general.php:16
2768
+ #: inc/admin/settings/class-lp-settings-general.php:40
2769
+ #: inc/admin/settings/class-lp-settings-payments.php:55
2770
+ #: inc/admin/settings/class-lp-settings-profile.php:53
2771
+ #: inc/admin/sub-menus/class-lp-submenu-statistics.php:26
2772
+ #: inc/custom-post-types/course.php:532 inc/user/class-lp-profile.php:330
2773
+ msgid "General"
2774
+ msgstr "Generalne"
2775
+
2776
+ #: inc/admin/settings/class-lp-settings-checkout.php:59
2777
+ #: inc/admin/settings/class-lp-settings-payments.php:87
2778
+ msgid "Auto enroll"
2779
+ msgstr "Automatyczne dołączenie"
2780
+
2781
+ #: inc/admin/settings/class-lp-settings-checkout.php:60
2782
+ #: inc/admin/settings/class-lp-settings-payments.php:91
2783
+ msgid "Auto enroll a user after they buy a course."
2784
+ msgstr "Wyłącz auto dołączenie użytkowników po zakupie kursu."
2785
+
2786
+ #: inc/admin/settings/class-lp-settings-checkout.php:66
2787
+ #: inc/admin/settings/class-lp-settings-payments.php:81
2788
+ msgid "Checkout page"
2789
+ msgstr "Strona podsumowania"
2790
+
2791
+ #: inc/admin/settings/class-lp-settings-checkout.php:72
2792
+ msgid "Checkout Endpoints"
2793
+ msgstr "Zamówienie - punkty końcowe"
2794
+
2795
+ #: inc/admin/settings/class-lp-settings-courses.php:24
2796
+ #: inc/custom-post-types/course.php:87
2797
+ msgctxt "slug"
2798
+ msgid "courses"
2799
+ msgstr "kursy"
2800
+
2801
+ #: inc/admin/settings/class-lp-settings-courses.php:68
2802
+ #: inc/admin/settings/class-lp-settings-general.php:42
2803
+ #: inc/admin/settings/class-lp-settings-profile.php:55
2804
+ msgid "General settings."
2805
+ msgstr "Generalne ustawienia."
2806
+
2807
+ #: inc/admin/settings/class-lp-settings-courses.php:71
2808
+ msgid "Review course before publishing"
2809
+ msgstr "Sprawdź kurs przed publikacją"
2810
+
2811
+ #: inc/admin/settings/class-lp-settings-courses.php:72
2812
+ msgid "The course needs to be reviewed by admin before it can be published."
2813
+ msgstr "Kurs musi zostać zweryfikowany przez admina przed jego opublikowaniem."
2814
+
2815
+ #: inc/admin/settings/class-lp-settings-courses.php:78
2816
+ msgid "Enable editing published course"
2817
+ msgstr "Włącz możliwość edycji opublikowanych kursów"
2818
+
2819
+ #: inc/admin/settings/class-lp-settings-courses.php:79
2820
+ msgid ""
2821
+ "Allow instructors to edit the course which were published without review.<br "
2822
+ "/> If this option is disabled, the course status will be changed to Pending "
2823
+ "Review when the instructor update course."
2824
+ msgstr ""
2825
+ "Upoważnij nauczycieli do edycji kursów któe są opublikowane bez akceptacji."
2826
+ "<br /> Jeżeli ta opcja jest wyłączona, status kursu będzie zmieniony na "
2827
+ "\"oczekujący opinii\" kiedy nauczyciel zaktualizuje kurs."
2828
+
2829
+ #: inc/admin/settings/class-lp-settings-courses.php:99
2830
+ msgid "Archive"
2831
+ msgstr "Na stronach archiwum"
2832
+
2833
+ #: inc/admin/settings/class-lp-settings-courses.php:101
2834
+ msgid "Those settings are applied to archive course page."
2835
+ msgstr "Te ustawienia są dedykowane stronie listy kursów."
2836
+
2837
+ #: inc/admin/settings/class-lp-settings-courses.php:104
2838
+ msgid "Courses Page"
2839
+ msgstr "Strona kursów"
2840
+
2841
+ #: inc/admin/settings/class-lp-settings-courses.php:110
2842
+ #: inc/admin/settings/class-lp-settings-profile.php:108
2843
+ msgid "Courses limit"
2844
+ msgstr "Limit kursów"
2845
+
2846
+ #: inc/admin/settings/class-lp-settings-courses.php:111
2847
+ msgid "Number of courses displayed per page."
2848
+ msgstr "Liczba kursów wyświetlana na stronę."
2849
+
2850
+ #: inc/admin/settings/class-lp-settings-courses.php:126
2851
+ #: inc/admin/settings/class-lp-settings-courses.php:180
2852
+ msgid "Single course"
2853
+ msgstr "Pojedynczy kurs"
2854
+
2855
+ #: inc/admin/settings/class-lp-settings-courses.php:128
2856
+ msgid "Those settings are applied to single course page."
2857
+ msgstr "Te ustawienia są dedykowane stronie pojedynczego kursu."
2858
+
2859
+ #: inc/admin/settings/class-lp-settings-courses.php:132
2860
+ msgid "Course category base"
2861
+ msgstr "Bazowa kategoria kursu"
2862
+
2863
+ #: inc/admin/settings/class-lp-settings-courses.php:138
2864
+ msgid "Course tag base"
2865
+ msgstr "Baza etykiety kursu"
2866
+
2867
+ #: inc/admin/settings/class-lp-settings-courses.php:144
2868
+ msgid "Single course permalink"
2869
+ msgstr "Link do pojedynczego kursu"
2870
+
2871
+ #: inc/admin/settings/class-lp-settings-courses.php:164
2872
+ msgid "Enrolled students number"
2873
+ msgstr "Liczba kursantów"
2874
+
2875
+ #: inc/admin/settings/class-lp-settings-courses.php:167
2876
+ msgid ""
2877
+ "Displays a fake numbers of enrolled students. Disable to show the real value."
2878
+ msgstr ""
2879
+ "Wyświetl fałszywą liczę kursantów. Wyłącz, aby pokazać prawdziwą liczbę."
2880
+
2881
+ #: inc/admin/settings/class-lp-settings-courses.php:175
2882
+ msgid "Course thumbnails"
2883
+ msgstr "Miniaturka kursu"
2884
+
2885
+ #: inc/admin/settings/class-lp-settings-courses.php:177
2886
+ msgid "Thumbnail generation for archive/single course."
2887
+ msgstr "Miniaturka generowana dla listy kursów/pojedynczego kursu."
2888
+
2889
+ #: inc/admin/settings/class-lp-settings-courses.php:184
2890
+ #: inc/admin/settings/class-lp-settings-courses.php:206
2891
+ msgid "Turn on/off courses extra thumbnail."
2892
+ msgstr "Włącz/Wyłącz miniaturki kursów."
2893
+
2894
+ #: inc/admin/settings/class-lp-settings-courses.php:187
2895
+ #: inc/admin/settings/class-lp-settings-courses.php:209
2896
+ msgid "Thumbnail dimensions"
2897
+ msgstr "Wymiary miniaturki"
2898
+
2899
+ #: inc/admin/settings/class-lp-settings-courses.php:202
2900
+ msgid "Archive course"
2901
+ msgstr "Lista kursów"
2902
+
2903
+ #: inc/admin/settings/class-lp-settings-emails.php:64
2904
+ msgid "General options"
2905
+ msgstr "Opcje ogólne"
2906
+
2907
+ #: inc/admin/settings/class-lp-settings-emails.php:112
2908
+ msgid "Email options"
2909
+ msgstr "Opcje emaila"
2910
+
2911
+ #: inc/admin/settings/class-lp-settings-emails.php:114
2912
+ #: inc/admin/views/settings/emails/general.php:17
2913
+ msgid ""
2914
+ "The following options affect the sender (email address and name) used in "
2915
+ "LearnPress emails."
2916
+ msgstr ""
2917
+ "Poniższe opcje wpływają na nadawcę (email, adres oraz nazwisko) używanego w "
2918
+ "emailach LearnPress."
2919
+
2920
+ #: inc/admin/settings/class-lp-settings-emails.php:117
2921
+ msgid "From name"
2922
+ msgstr "Nazwa adresata"
2923
+
2924
+ #: inc/admin/settings/class-lp-settings-emails.php:123
2925
+ msgid "From email"
2926
+ msgstr "Email adresata"
2927
+
2928
+ #: inc/admin/settings/class-lp-settings-emails.php:129
2929
+ msgid "Send email in background"
2930
+ msgstr "Wyślij emaila w tle"
2931
+
2932
+ #: inc/admin/settings/class-lp-settings-emails.php:133
2933
+ msgid "Defer transaction email and runs in background."
2934
+ msgstr "Odrocz email transakcji i działaj w tle."
2935
+
2936
+ #: inc/admin/settings/class-lp-settings-emails.php:136
2937
+ msgid "Email template"
2938
+ msgstr "Szablon emaila"
2939
+
2940
+ #: inc/admin/settings/class-lp-settings-emails.php:140
2941
+ #: inc/admin/views/settings/emails/general.php:40
2942
+ msgid "Header image"
2943
+ msgstr "Obraz nagłówka"
2944
+
2945
+ #: inc/admin/settings/class-lp-settings-emails.php:145
2946
+ #: inc/admin/views/settings/emails/general.php:43
2947
+ msgid "The image will be displayed in the top of the email."
2948
+ msgstr "Ten obrazek zostanie wyświetlony na początku emaila."
2949
+
2950
+ #: inc/admin/settings/class-lp-settings-emails.php:148
2951
+ #: inc/admin/views/settings/emails/general.php:47
2952
+ msgid "Footer text"
2953
+ msgstr "Tekst stopki"
2954
+
2955
+ #: inc/admin/settings/class-lp-settings-emails.php:152
2956
+ msgid "The texts display in the bottom of email."
2957
+ msgstr "Tekst wyświetlany w stopce emaila."
2958
+
2959
+ #: inc/admin/settings/class-lp-settings-general.php:45
2960
+ msgid "Logout redirect"
2961
+ msgstr "Przekierowanie przy wylogowaniu"
2962
+
2963
+ #: inc/admin/settings/class-lp-settings-general.php:49
2964
+ msgid "The page where user will be redirected to after logging out."
2965
+ msgstr "Strona na którą użytkownik zostanie przekierowany po wylogowaniu."
2966
+
2967
+ #: inc/admin/settings/class-lp-settings-general.php:54
2968
+ msgid "Setting up your currency unit and its formatting."
2969
+ msgstr "Ustaw swoją jednostkę walutową i formatowanie."
2970
+
2971
+ #: inc/admin/settings/class-lp-settings-general.php:65
2972
+ #: inc/admin/views/setup/steps/currency.php:37
2973
+ msgid "Currency position"
2974
+ msgstr "Pozycja waluty"
2975
+
2976
+ #: inc/admin/settings/class-lp-settings-general.php:72
2977
+ #: inc/admin/views/setup/steps/currency.php:51
2978
+ msgid "Thousands Separator"
2979
+ msgstr "Separator tysięcy"
2980
+
2981
+ #: inc/admin/settings/class-lp-settings-general.php:78
2982
+ #: inc/admin/views/setup/steps/currency.php:56
2983
+ msgid "Decimals Separator"
2984
+ msgstr "Separator jedności dziesiętnych"
2985
+
2986
+ #: inc/admin/settings/class-lp-settings-general.php:84
2987
+ #: inc/admin/views/setup/steps/currency.php:61
2988
+ msgid "Number of Decimals"
2989
+ msgstr "Liczba znaków po przecinku"
2990
+
2991
+ #: inc/admin/settings/class-lp-settings-pages.php:16
2992
+ msgid "Pages"
2993
+ msgstr "Strony"
2994
+
2995
+ #: inc/admin/settings/class-lp-settings-pages.php:28
2996
+ msgid "Become a teacher"
2997
+ msgstr "Zostań nauczycielem"
2998
+
2999
+ #: inc/admin/settings/class-lp-settings-pages.php:39
3000
+ msgid "Become a teacher page"
3001
+ msgstr "Strona Zostań nauczycielem"
3002
+
3003
+ #: inc/admin/settings/class-lp-settings-pages.php:45
3004
+ msgid "Instructors registration"
3005
+ msgstr ""
3006
+
3007
+ #: inc/admin/settings/class-lp-settings-pages.php:46
3008
+ msgid "Create option for instructors registration."
3009
+ msgstr ""
3010
+
3011
+ #: inc/admin/settings/class-lp-settings-payments.php:28
3012
+ #: inc/admin/settings/class-lp-settings-payments.php:137
3013
+ msgid "Payments"
3014
+ msgstr "Płatności"
3015
+
3016
+ #: inc/admin/settings/class-lp-settings-payments.php:94
3017
+ msgid "Enable guest checkout"
3018
+ msgstr "Włącz koszyk Gościa"
3019
+
3020
+ #: inc/admin/settings/class-lp-settings-payments.php:98
3021
+ msgid "Enable user buy course as a Guest."
3022
+ msgstr "Uruchm możliwość zakupu kursu, gdy użytkownik jest Gościem."
3023
+
3024
+ #: inc/admin/settings/class-lp-settings-payments.php:101
3025
+ msgid "Enable login in checkout"
3026
+ msgstr "Włącz Login w koszyku"
3027
+
3028
+ #: inc/admin/settings/class-lp-settings-payments.php:105
3029
+ msgid "Enable login form in checkout page."
3030
+ msgstr "Włącz formularz logowania na stronie koszyka."
3031
+
3032
+ #: inc/admin/settings/class-lp-settings-payments.php:108
3033
+ msgid "Enable registration in checkout"
3034
+ msgstr "Włącz rejestrację w koszyku"
3035
+
3036
+ #: inc/admin/settings/class-lp-settings-payments.php:112
3037
+ msgid "Enable registration form in checkout page."
3038
+ msgstr "Włącz formularz rejestracyjny na stronie koszyka."
3039
+
3040
+ #: inc/admin/settings/class-lp-settings-payments.php:121
3041
+ msgid "Endpoints"
3042
+ msgstr "Punkty końcowe"
3043
+
3044
+ #: inc/admin/settings/class-lp-settings-payments.php:128
3045
+ msgid "lp-order-received"
3046
+ msgstr "lp-order-received"
3047
+
3048
+ #: inc/admin/settings/class-lp-settings-payments.php:130
3049
+ #, php-format
3050
+ msgid ""
3051
+ "Unique slug in checkout page to displays order details. Example: http:"
3052
+ "//example.com/lp-checkout/%s/"
3053
+ msgstr ""
3054
+ "Unikalny URL strony koszyka pozwoli wyświetlić detale zamówienia. Na "
3055
+ "przykład http://example.com/lp-checkout/%s/"
3056
+
3057
+ #: inc/admin/settings/class-lp-settings-payments.php:139
3058
+ msgid ""
3059
+ "All available payments are listed here. Drag and drop the payments to re-"
3060
+ "order."
3061
+ msgstr ""
3062
+ "Wszystkie możliwe sposoby płatności są wylistowane tutaj. Przeciągnij i "
3063
+ "upuść by zmienić kolejność."
3064
+
3065
+ #: inc/admin/settings/class-lp-settings-payments.php:142
3066
+ msgid "Payment order"
3067
+ msgstr "Kolejność płatności"
3068
+
3069
+ #: inc/admin/settings/class-lp-settings-profile.php:58
3070
+ msgid "Profile page"
3071
+ msgstr "Strona profilu"
3072
+
3073
+ #: inc/admin/settings/class-lp-settings-profile.php:64
3074
+ msgid "Add link to admin bar"
3075
+ msgstr "Dodaj link do panelu admina"
3076
+
3077
+ #: inc/admin/settings/class-lp-settings-profile.php:70
3078
+ msgid "Text link"
3079
+ msgstr "Tekst odnośnika"
3080
+
3081
+ #: inc/admin/settings/class-lp-settings-profile.php:75
3082
+ msgid "If empty, please enter the name of the page used for profile."
3083
+ msgstr "Jeżeli puste, tekst jest nazwany stroną profilową."
3084
+
3085
+ #: inc/admin/settings/class-lp-settings-profile.php:88
3086
+ msgid "Target link"
3087
+ msgstr "Cel linku"
3088
+
3089
+ #: inc/admin/settings/class-lp-settings-profile.php:93
3090
+ msgid "Open in same the window"
3091
+ msgstr "Otwórz w tym samym oknie"
3092
+
3093
+ #: inc/admin/settings/class-lp-settings-profile.php:94
3094
+ msgid "Open in a new window"
3095
+ msgstr "Otwórz w nowym oknie"
3096
+
3097
+ #: inc/admin/settings/class-lp-settings-profile.php:113
3098
+ msgid "Number of courses displayed per page in profile."
3099
+ msgstr "Liczba kursów wyświetlana na stronę w profilu."
3100
+
3101
+ #: inc/admin/settings/class-lp-settings-profile.php:116
3102
+ msgid "Enable login form"
3103
+ msgstr "Włącz formularz logowania"
3104
+
3105
+ #: inc/admin/settings/class-lp-settings-profile.php:120
3106
+ msgid "Enable login from profile if the user is not logged in."
3107
+ msgstr "Włącz formularz logowania jeżeli użytkownik nie jest zalogowany."
3108
+
3109
+ #: inc/admin/settings/class-lp-settings-profile.php:123
3110
+ msgid "Enable register form"
3111
+ msgstr "Włącz rejestrację"
3112
+
3113
+ #: inc/admin/settings/class-lp-settings-profile.php:127
3114
+ msgid "Enable register from profile if the user is not logged in."
3115
+ msgstr "Włącz formularz rejestracyjny dla niezalogowanych użytkowników."
3116
+
3117
+ #: inc/admin/settings/class-lp-settings-profile.php:135
3118
+ msgid "Sub tab slugs"
3119
+ msgstr "URL pod zakładki"
3120
+
3121
+ #: inc/admin/settings/class-lp-settings-profile.php:137
3122
+ msgid "The slugs of tabs display in profile page. Each tab should be unique."
3123
+ msgstr ""
3124
+ "URL zakładki wyświetlany na stronie profilu. Każda zakładka powinna być inna."
3125
+
3126
+ #: inc/admin/settings/class-lp-settings-profile.php:140
3127
+ #: inc/admin/views/updates/0.9/step-upgraded.php:16
3128
+ #: inc/user/class-lp-profile.php:293
3129
+ msgid "Dashboard"
3130
+ msgstr "Panel"
3131
+
3132
+ #: inc/admin/settings/class-lp-settings-profile.php:145
3133
+ #: inc/admin/settings/class-lp-settings-profile.php:153
3134
+ #: inc/admin/settings/class-lp-settings-profile.php:161
3135
+ #: inc/admin/settings/class-lp-settings-profile.php:169
3136
+ #: inc/admin/settings/class-lp-settings-profile.php:177
3137
+ #: inc/admin/settings/class-lp-settings-profile.php:196
3138
+ #: inc/admin/settings/class-lp-settings-profile.php:204
3139
+ #: inc/admin/settings/class-lp-settings-profile.php:212
3140
+ #: inc/admin/settings/class-lp-settings-profile.php:220
3141
+ #, php-format
3142
+ msgid "Example link is %s"
3143
+ msgstr "Przykładowym linkiem jest %s"
3144
+
3145
+ #: inc/admin/settings/class-lp-settings-profile.php:156
3146
+ #: inc/admin/settings/class-lp-settings-profile.php:290
3147
+ #: inc/custom-post-types/quiz.php:90 inc/custom-post-types/quiz.php:91
3148
+ #: inc/custom-post-types/quiz.php:95 inc/user/class-lp-profile.php:306
3149
+ #: templates/widgets/course-info/default.php:34
3150
+ msgid "Quizzes"
3151
+ msgstr "Testy"
3152
+
3153
+ #: inc/admin/settings/class-lp-settings-profile.php:164
3154
+ #: inc/admin/sub-menus/class-lp-submenu-statistics.php:22
3155
+ #: inc/admin/sub-menus/class-lp-submenu-statistics.php:29
3156
+ #: inc/custom-post-types/order.php:842 inc/custom-post-types/order.php:843
3157
+ #: inc/custom-post-types/order.php:847 inc/user/class-lp-profile.php:312
3158
+ msgid "Orders"
3159
+ msgstr "Zamówienia"
3160
+
3161
+ #: inc/admin/settings/class-lp-settings-profile.php:172
3162
+ #: inc/admin/views/meta-boxes/order/details.php:37
3163
+ #: inc/user/class-lp-profile.php:318
3164
+ msgid "Order details"
3165
+ msgstr "Detale zamówienia"
3166
+
3167
+ #: inc/admin/settings/class-lp-settings-profile.php:186
3168
+ msgid "Settings Tab"
3169
+ msgstr "Zakładka stawień"
3170
+
3171
+ #: inc/admin/settings/class-lp-settings-profile.php:188
3172
+ msgid "The slugs of sections in settings tab. Each slugs should be unique."
3173
+ msgstr "URL sekcji w ustawieniach. Każdy URL powinien być inny."
3174
+
3175
+ #: inc/admin/settings/class-lp-settings-profile.php:191
3176
+ msgid "Slug"
3177
+ msgstr "Uproszczona nazwa elementu strony"
3178
+
3179
+ #: inc/admin/settings/class-lp-settings-profile.php:199
3180
+ msgid "Basic Information"
3181
+ msgstr "Podstawowe informacje"
3182
+
3183
+ #: inc/admin/settings/class-lp-settings-profile.php:207
3184
+ #: inc/admin/settings/class-lp-settings-profile.php:228
3185
+ #: inc/user/class-lp-profile.php:348
3186
+ msgid "Avatar"
3187
+ msgstr "Avatar"
3188
+
3189
+ #: inc/admin/settings/class-lp-settings-profile.php:215
3190
+ msgid "Change Password"
3191
+ msgstr "Zmień hasło"
3192
+
3193
+ #: inc/admin/settings/class-lp-settings-profile.php:230
3194
+ msgid "User avatar settings."
3195
+ msgstr "Ustawienia avatara użytkownika."
3196
+
3197
+ #: inc/admin/settings/class-lp-settings-profile.php:233
3198
+ msgid "Enable custom avatar"
3199
+ msgstr "Umożliw edycje avatara"
3200
+
3201
+ #: inc/admin/settings/class-lp-settings-profile.php:239
3202
+ msgid "Size"
3203
+ msgstr "Wymiar"
3204
+
3205
+ #: inc/admin/settings/class-lp-settings-profile.php:253
3206
+ msgid "The height and width of avatar should be equal."
3207
+ msgstr "Wysokość i szerokość avatara muszą być równe."
3208
+
3209
+ #: inc/admin/settings/class-lp-settings-profile.php:261
3210
+ #: inc/user/class-lp-profile.php:357
3211
+ msgid "Publicity"
3212
+ msgstr "Rozgłos"
3213
+
3214
+ #: inc/admin/settings/class-lp-settings-profile.php:263
3215
+ msgid "Publicity and sharing user profile content."
3216
+ msgstr "Rozgłos i dzielenie się zawartością profilu użytkownika."
3217
+
3218
+ #: inc/admin/settings/class-lp-settings-profile.php:266
3219
+ #: templates/profile/tabs/settings/publicity.php:38
3220
+ msgid "My dashboard"
3221
+ msgstr "Mój panel"
3222
+
3223
+ #: inc/admin/settings/class-lp-settings-profile.php:270
3224
+ #: templates/profile/tabs/settings/publicity.php:43
3225
+ msgid ""
3226
+ "Public user profile content, if this option is turn off then other sections "
3227
+ "in profile also become invisible."
3228
+ msgstr ""
3229
+ "Publikacja zawartości profilu użytkownika, jeżeli ta opcja jest wyłączona, "
3230
+ "inne sekcje profilu również są niewidoczne."
3231
+
3232
+ #: inc/admin/settings/class-lp-settings-profile.php:277
3233
+ msgid "Public user profile courses."
3234
+ msgstr "Publikuj kursy profilu użytkownika."
3235
+
3236
+ #: inc/admin/settings/class-lp-settings-profile.php:277
3237
+ msgid "Allow user to turn on/off sharing profile course option"
3238
+ msgstr ""
3239
+ "Włącz opcję uruchamiania/wyłączania przez użytkowników dzielenia się kursami "
3240
+ "użytkowników"
3241
+
3242
+ #: inc/admin/settings/class-lp-settings-profile.php:294
3243
+ msgid "Public user profile quizzes."
3244
+ msgstr "Upublicznij testy użytkownika."
3245
+
3246
+ #: inc/admin/settings/class-lp-settings-profile.php:294
3247
+ msgid "Allow user to turn on/off sharing profile quizzes option"
3248
+ msgstr ""
3249
+ "Włącz opcję uruchamiania/wyłączania przez użytkowników dzielenia się testami "
3250
+ "użytkowników"
3251
+
3252
+ #: inc/admin/settings/email-groups/class-lp-settings-become-teacher-emails.php:22
3253
+ msgid "Become an Instructor"
3254
+ msgstr "Zostań instruktorem"
3255
+
3256
+ #: inc/admin/settings/email-groups/class-lp-settings-cancelled-order-emails.php:24
3257
+ msgid "Cancelled Order"
3258
+ msgstr "Anuluj zamówienie"
3259
+
3260
+ #: inc/admin/settings/email-groups/class-lp-settings-completed-order-emails.php:23
3261
+ msgid "Completed Order"
3262
+ msgstr "Zakończ zamówienie"
3263
+
3264
+ #: inc/admin/settings/email-groups/class-lp-settings-course-review-emails.php:23
3265
+ msgid "Review Course"
3266
+ msgstr "Sprawdź kurs"
3267
+
3268
+ #: inc/admin/settings/email-groups/class-lp-settings-enrolled-course-emails.php:26
3269
+ msgid "Enrolled Course"
3270
+ msgstr "Dołączenie do kursu"
3271
+
3272
+ #: inc/admin/settings/email-groups/class-lp-settings-finished-course-emails.php:26
3273
+ msgid "Finished Course"
3274
+ msgstr "Zakończone kursy"
3275
+
3276
+ #: inc/admin/settings/email-groups/class-lp-settings-new-order-emails.php:24
3277
+ msgid "New Order"
3278
+ msgstr "Nowe zamówienie"
3279
+
3280
+ #: inc/admin/settings/email-groups/class-lp-settings-processing-order-emails.php:22
3281
+ msgid "Processing Order"
3282
+ msgstr "Zamówienie oczekujące"
3283
+
3284
+ #: inc/admin/sub-menus/class-lp-submenu-addons.php:16
3285
+ msgid "LearnPress Add-ons"
3286
+ msgstr "Dodatki LearnPress"
3287
+
3288
+ #: inc/admin/sub-menus/class-lp-submenu-addons.php:30
3289
+ #, php-format
3290
+ msgid "Installed (%d)"
3291
+ msgstr "Zainstalowane (%d)"
3292
+
3293
+ #: inc/admin/sub-menus/class-lp-submenu-addons.php:31
3294
+ #, php-format
3295
+ msgid "Get more (%d)"
3296
+ msgstr "Zdobądź więcej (%d)"
3297
+
3298
+ #: inc/admin/sub-menus/class-lp-submenu-addons.php:32
3299
+ #, php-format
3300
+ msgid "Themes (%d)"
3301
+ msgstr "Szablony (%d)"
3302
+
3303
+ #: inc/admin/sub-menus/class-lp-submenu-addons.php:55
3304
+ msgid "Search..."
3305
+ msgstr "Wyszukaj..."
3306
+
3307
+ #: inc/admin/sub-menus/class-lp-submenu-settings.php:15
3308
+ msgid "LearnPress Settings"
3309
+ msgstr "Ustawienia LearnPress"
3310
+
3311
+ #: inc/admin/sub-menus/class-lp-submenu-settings.php:63
3312
+ #: inc/emails/class-lp-email-new-course.php:28
3313
+ #: inc/emails/class-lp-email-new-course.php:35
3314
+ msgid "New course"
3315
+ msgstr "Nowy kurs"
3316
+
3317
+ #: inc/admin/sub-menus/class-lp-submenu-settings.php:95
3318
+ msgid "Save settings"
3319
+ msgstr "Zapisz zmiany"
3320
+
3321
+ #: inc/admin/sub-menus/class-lp-submenu-settings.php:99
3322
+ msgid "Do you want to restore all settings to default?"
3323
+ msgstr "Czy chcesz przywrócić wszystkie ustawienia do fabrycznych?"
3324
+
3325
+ #: inc/admin/sub-menus/class-lp-submenu-statistics.php:15
3326
+ msgid "Statistics"
3327
+ msgstr "Statystyki"
3328
+
3329
+ #: inc/admin/sub-menus/class-lp-submenu-statistics.php:16
3330
+ msgid "LearnPress Statistics"
3331
+ msgstr "Statystyki LearnPress"
3332
+
3333
+ #: inc/admin/sub-menus/class-lp-submenu-statistics.php:27
3334
+ msgid "Users"
3335
+ msgstr "Użytkownicy"
3336
+
3337
+ #: inc/admin/sub-menus/class-lp-submenu-tools.php:13
3338
+ msgid "Tools"
3339
+ msgstr "Opcje"
3340
+
3341
+ #: inc/admin/sub-menus/class-lp-submenu-tools.php:14
3342
+ msgid "LearnPress Tools"
3343
+ msgstr "Narzędzia LearnPress"
3344
+
3345
+ #: inc/admin/sub-menus/class-lp-submenu-tools.php:20
3346
+ msgid "Template"
3347
+ msgstr "Szablon"
3348
+
3349
+ #: inc/admin/sub-menus/class-lp-submenu-tools.php:21
3350
+ msgid "Database"
3351
+ msgstr "Baza danych"
3352
+
3353
+ #: inc/admin/sub-menus/class-lp-submenu-tools.php:23
3354
+ msgid "Cache"
3355
+ msgstr "Pamięć podręczna"
3356
+
3357
+ #: inc/admin/views/html-admin-notice-templates.php:31
3358
+ #, php-format
3359
+ msgid ""
3360
+ "There is a new update of LearnPress. You may need to update your theme "
3361
+ "<strong>(%s)</strong> to avoid outdated template files."
3362
+ msgstr ""
3363
+ "Jest nowa wersja LeadPress. Powinieneś zaktualizować swój szablon <strong>"
3364
+ "(%s)</strong> by poprawić nieaktualne pliki."
3365
+
3366
+ #: inc/admin/views/html-admin-notice-templates.php:32
3367
+ #, php-format
3368
+ msgid ""
3369
+ "This is not a bug, don't worry. Read more about Outdated template files "
3370
+ "notice <a href=\"%s\" target=\"_blank\">here</a>."
3371
+ msgstr ""
3372
+ "To nie błąd - spokojnie ;). Poczytaj więcej o nieaktualnych plikach "
3373
+ "szablonu<a href=\"%s\" target=\"_blank\">tutaj</a>."
3374
+
3375
+ #: inc/admin/views/html-admin-notice-templates.php:40
3376
+ msgid "View list of outdated templates"
3377
+ msgstr "Zobacz listę nieaktualnych szablonów"
3378
+
3379
+ #: inc/admin/views/addons/html-loop-plugin.php:37
3380
+ #, php-format
3381
+ msgid "<cite>By %s</cite>"
3382
+ msgstr "<cite>Przez %s</cite>"
3383
+
3384
+ #: inc/admin/views/addons/html-loop-plugin.php:43
3385
+ msgid "Version: "
3386
+ msgstr "Wersja: "
3387
+
3388
+ #: inc/admin/views/addons/html-loop-theme.php:30
3389
+ msgid "$"
3390
+ msgstr "$"
3391
+
3392
+ #: inc/admin/views/addons/html-loop-theme.php:33
3393
+ msgid " sales"
3394
+ msgstr " wyprzedaż"
3395
+
3396
+ #: inc/admin/views/addons/html-plugins-installed.php:18
3397
+ msgid "There is no add-on installed."
3398
+ msgstr "Brak zainstalowanych dodatków."
3399
+
3400
+ #: inc/admin/views/addons/html-plugins-installed.php:25
3401
+ msgid "Installed add-ons"
3402
+ msgstr "Zainstalowane dodatki"
3403
+
3404
+ #: inc/admin/views/addons/html-plugins-more.php:20
3405
+ msgid "There is no available add-ons."
3406
+ msgstr "Brak dostępnych dodatków."
3407
+
3408
+ #: inc/admin/views/addons/html-plugins-more.php:28
3409
+ msgid "Free add-ons"
3410
+ msgstr "Darmowe dodatki"
3411
+
3412
+ #: inc/admin/views/addons/html-plugins-more.php:33
3413
+ msgid "Premium add-ons"
3414
+ msgstr "Dodatki premium"
3415
+
3416
+ #: inc/admin/views/addons/html-themes.php:20
3417
+ msgid "No related themes."
3418
+ msgstr "Brak powiązanych szablonów."
3419
+
3420
+ #: inc/admin/views/addons/html-themes.php:30
3421
+ msgid "Education Support"
3422
+ msgstr "Wsparcie edukacji"
3423
+
3424
+ #: inc/admin/views/addons/html-themes.php:34
3425
+ msgid "Other"
3426
+ msgstr "Inne"
3427
+
3428
+ #: inc/admin/views/course/editor.php:37
3429
+ msgid "Something went wrong! Please reload to continue editing curriculum."
3430
+ msgstr "Coś poszło nie tak! Załaduj ponownie aby edytować program."
3431
+
3432
+ #: inc/admin/views/course/modal-choose-items.php:54
3433
+ #: inc/admin/views/quiz/modal-choose-items.php:52
3434
+ #: inc/custom-post-types/course.php:214 inc/custom-post-types/quiz.php:177
3435
+ msgid "Selected items"
3436
+ msgstr "Wybrane elementy"
3437
+
3438
+ #: inc/admin/views/course/modal-choose-items.php:72
3439
+ #: inc/admin/views/quiz/modal-choose-items.php:64
3440
+ msgid "Type here to search item"
3441
+ msgstr "Wpisz tutaj, aby wyszukać element"
3442
+
3443
+ #: inc/admin/views/course/modal-choose-items.php:78
3444
+ #: inc/admin/views/quiz/modal-choose-items.php:69
3445
+ msgid "No item found."
3446
+ msgstr "Nie znaleziono elementów."
3447
+
3448
+ #: inc/admin/views/course/modal-choose-items.php:96
3449
+ #: inc/admin/views/quiz/modal-choose-items.php:88
3450
+ msgid "Adding"
3451
+ msgstr "Dodawanie"
3452
+
3453
+ #: inc/admin/views/course/new-section.php:17
3454
+ msgid "Create a new section"
3455
+ msgstr "Stwórz nową sekcję"
3456
+
3457
+ #: inc/admin/views/course/pagination.php:18
3458
+ #: inc/admin/views/quiz/pagination.php:16
3459
+ msgctxt "page-navigation"
3460
+ msgid "Previous"
3461
+ msgstr "Wstecz"
3462
+
3463
+ #: inc/admin/views/course/pagination.php:20
3464
+ #: inc/admin/views/quiz/pagination.php:18
3465
+ msgctxt "page-navigation"
3466
+ msgid "Next"
3467
+ msgstr "Dalej"
3468
+
3469
+ #: inc/admin/views/course/section-item.php:36
3470
+ msgid "Remove from course"
3471
+ msgstr "Usuń z kursu"
3472
+
3473
+ #: inc/admin/views/course/section-item.php:40
3474
+ #: inc/admin/views/quiz/question-actions.php:48
3475
+ msgid "Delete permanently"
3476
+ msgstr "Usuń całkowicie"
3477
+
3478
+ #: inc/admin/views/course/section.php:20
3479
+ msgid "Enter the name section"
3480
+ msgstr "Wpisz nazwę sekcji"
3481
+
3482
+ #: inc/admin/views/course/section.php:34
3483
+ msgid "Describe about this section"
3484
+ msgstr ""
3485
+
3486
+ #: inc/admin/views/course/section.php:52
3487
+ msgid "Select items"
3488
+ msgstr "Wybierz elementy"
3489
+
3490
+ #: inc/admin/views/course/section.php:56
3491
+ msgid "Are you sure?"
3492
+ msgstr "Jesteś pewien?"
3493
+
3494
+ #: inc/admin/views/dashboard/plugin-status/html-no-data.php:4
3495
+ msgid "No results found"
3496
+ msgstr "Brak znalezionych wyników"
3497
+
3498
+ #: inc/admin/views/dashboard/plugin-status/html-results.php:17
3499
+ msgid "Downloaded"
3500
+ msgstr "Pobrano"
3501
+
3502
+ #: inc/admin/views/dashboard/plugin-status/html-results.php:18
3503
+ msgid "Active Installed"
3504
+ msgstr "Aktywuj zainstalowane"
3505
+
3506
+ #: inc/admin/views/dashboard/plugin-status/html-results.php:32
3507
+ msgid "Updated"
3508
+ msgstr "Zaktualizowano"
3509
+
3510
+ #: inc/admin/views/dashboard/plugin-status/html-results.php:33
3511
+ msgid "Current Version"
3512
+ msgstr "Obecna wersja"
3513
+
3514
+ #: inc/admin/views/meta-boxes/tabs.php:93
3515
+ msgid "Initializing..."
3516
+ msgstr "Inicjowanie..."
3517
+
3518
+ #: inc/admin/views/meta-boxes/course/assigned.php:27
3519
+ #: inc/admin/views/meta-boxes/quiz/assigned.php:49
3520
+ #: inc/custom-post-types/lesson.php:353 inc/custom-post-types/question.php:362
3521
+ #: inc/custom-post-types/quiz.php:374
3522
+ msgid "Not assigned yet"
3523
+ msgstr "Jeszcze nie przypisano"
3524
+
3525
+ #: inc/admin/views/meta-boxes/course/review-log.php:25
3526
+ msgid "Your course is pending for reviewing"
3527
+ msgstr "Kurs oczekuje na sprawdzenie"
3528
+
3529
+ #: inc/admin/views/meta-boxes/course/review-log.php:27
3530
+ msgid ""
3531
+ "Your course will not be submitted for reviewing until you check 'Submit for "
3532
+ "Review'"
3533
+ msgstr ""
3534
+ "Twój kurs nie zostanie przesłany do sprawdzenia dopóki nie zaznaczysz 'Zgłoś "
3535
+ "do recenzji'"
3536
+
3537
+ #: inc/admin/views/meta-boxes/course/review-log.php:31
3538
+ msgid "Submit for Review"
3539
+ msgstr "Wyślij do zatwierdzenia"
3540
+
3541
+ #: inc/admin/views/meta-boxes/course/review-log.php:34
3542
+ #: inc/admin/views/meta-boxes/course/review-log.php:42
3543
+ msgid "Message to Reviewer"
3544
+ msgstr "Wiadomość do recenzenta"
3545
+
3546
+ #: inc/admin/views/meta-boxes/course/review-log.php:40
3547
+ msgid ""
3548
+ "Warning! Your course will become Pending Review for admins to review before "
3549
+ "it can be published when you update."
3550
+ msgstr ""
3551
+ "Uwaga! Twój kurs będzie udostępniony do przeglądu dla administratorów przed "
3552
+ "uch opublikowaniem."
3553
+
3554
+ #: inc/admin/views/meta-boxes/course/review-log.php:48
3555
+ msgid "This course is pending for reviewing"
3556
+ msgstr "Kurs oczekuje na sprawdzenie"
3557
+
3558
+ #: inc/admin/views/meta-boxes/course/review-log.php:51
3559
+ msgid "Message to Instructor"
3560
+ msgstr "Wiadomość do nauczyciela"
3561
+
3562
+ #: inc/admin/views/meta-boxes/course/review-logs.php:7
3563
+ #, php-format
3564
+ msgid "%d review"
3565
+ msgid_plural "%d reviews"
3566
+ msgstr[0] "%d recenzja"
3567
+ msgstr[1] "%d recenzje"
3568
+ msgstr[2] "%d recenzji"
3569
+
3570
+ #: inc/admin/views/meta-boxes/course/review-logs.php:9
3571
+ msgid "This course has not got any reviews yet"
3572
+ msgstr "Kurs nie uzyskał jeszcze żadnych opinii"
3573
+
3574
+ #: inc/admin/views/meta-boxes/course/review-logs.php:25
3575
+ msgid "Rejected"
3576
+ msgstr "Odrzucone"
3577
+
3578
+ #: inc/admin/views/meta-boxes/course/review-logs.php:25
3579
+ msgid "Submit for review"
3580
+ msgstr "Zatwierdź, aby ocenić"
3581
+
3582
+ #: inc/admin/views/meta-boxes/course/review-logs.php:40
3583
+ msgid "View less"
3584
+ msgstr "Zobacz mniej"
3585
+
3586
+ #: inc/admin/views/meta-boxes/course/review-logs.php:42
3587
+ msgid "View all"
3588
+ msgstr "Pokaż wszystko"
3589
+
3590
+ #: inc/admin/views/meta-boxes/order/actions.php:19
3591
+ #: inc/admin/views/quiz/editor.php:28
3592
+ #: inc/admin/views/tools/course/html-course.php:28
3593
+ #: inc/admin/views/tools/course/html-user.php:28
3594
+ msgid "Actions"
3595
+ msgstr "Akcje"
3596
+
3597
+ #: inc/admin/views/meta-boxes/order/actions.php:20
3598
+ msgid "Trigger action of current order status"
3599
+ msgstr "Czynność wyzwalająca status obecnego zamówienia"
3600
+
3601
+ #: inc/admin/views/meta-boxes/order/actions.php:29
3602
+ msgid "Delete Permanently"
3603
+ msgstr "Usuń trwale"
3604
+
3605
+ #: inc/admin/views/meta-boxes/order/actions.php:31
3606
+ msgid "Move to Trash"
3607
+ msgstr "Przenieś do kosza"
3608
+
3609
+ #: inc/admin/views/meta-boxes/order/details.php:26
3610
+ #, php-format
3611
+ msgid "Order %s"
3612
+ msgstr "Zamówienie %s"
3613
+
3614
+ #: inc/admin/views/meta-boxes/order/details.php:39
3615
+ #: inc/admin/views/statistics/orders.php:46 inc/custom-post-types/order.php:712
3616
+ #: templates/checkout/order-received.php:35
3617
+ #: templates/profile/tabs/courses.php:33 templates/profile/tabs/quizzes.php:38
3618
+ #: templates/profile/tabs/courses/purchased.php:39
3619
+ #: templates/profile/tabs/orders/list.php:33
3620
+ msgid "Date"
3621
+ msgstr "Data"
3622
+
3623
+ #: inc/admin/views/meta-boxes/order/details.php:73
3624
+ msgid "Customers"
3625
+ msgstr "Klienci"
3626
+
3627
+ #: inc/admin/views/meta-boxes/order/details.php:79
3628
+ #: inc/admin/views/meta-boxes/order/details.php:100
3629
+ #: inc/admin/views/meta-boxes/order/details.php:207
3630
+ msgid "Add multi users"
3631
+ msgstr "Dodaj multi użytkowników"
3632
+
3633
+ #: inc/admin/views/meta-boxes/order/details.php:82
3634
+ #: inc/admin/views/meta-boxes/order/details.php:193
3635
+ #: inc/admin/views/meta-boxes/order/details.php:202
3636
+ msgid "Customer"
3637
+ msgstr "Klient"
3638
+
3639
+ #: inc/admin/views/meta-boxes/order/details.php:93
3640
+ #: inc/admin/views/meta-boxes/order/details.php:198
3641
+ msgid "Change"
3642
+ msgstr "Zmień"
3643
+
3644
+ #: inc/admin/views/meta-boxes/order/details.php:98
3645
+ msgid "- Or -"
3646
+ msgstr "- Lub -"
3647
+
3648
+ #: inc/admin/views/meta-boxes/order/details.php:105
3649
+ msgid ""
3650
+ "In order to change the order user, please change the order status to "
3651
+ "'Pending'."
3652
+ msgstr "W celu zmiany zlecenia, zmień status na 'Oczekujący' lub 'Zakończony'."
3653
+
3654
+ #: inc/admin/views/meta-boxes/order/details.php:114
3655
+ #: templates/order/recover-form.php:22
3656
+ msgid "Order key"
3657
+ msgstr "Klucz zamówienia"
3658
+
3659
+ #: inc/admin/views/meta-boxes/order/details.php:118
3660
+ msgid "Order Items"
3661
+ msgstr "Zamów przedmiot"
3662
+
3663
+ #: inc/admin/views/meta-boxes/order/details.php:123
3664
+ #: inc/gateways/paypal/class-lp-gateway-paypal.php:434
3665
+ msgid "Item"
3666
+ msgstr "Pozycja"
3667
+
3668
+ #: inc/admin/views/meta-boxes/order/details.php:124
3669
+ msgid "Cost"
3670
+ msgstr "Koszt"
3671
+
3672
+ #: inc/admin/views/meta-boxes/order/details.php:125
3673
+ #: templates/emails/order-items-table.php:58
3674
+ msgid "Quantity"
3675
+ msgstr "Liczba sztuk"
3676
+
3677
+ #: inc/admin/views/meta-boxes/order/details.php:126
3678
+ msgid "Amount"
3679
+ msgstr "Kwota"
3680
+
3681
+ #: inc/admin/views/meta-boxes/order/details.php:136
3682
+ msgid "No order items"
3683
+ msgstr "Brak zamówionych elementów"
3684
+
3685
+ #: inc/admin/views/meta-boxes/order/details.php:142
3686
+ msgid "Sub Total"
3687
+ msgstr "Całość"
3688
+
3689
+ #: inc/admin/views/meta-boxes/order/details.php:156
3690
+ #: inc/custom-post-types/order.php:713 templates/checkout/order-received.php:41
3691
+ #: templates/checkout/review-order.php:33
3692
+ #: templates/checkout/review-order.php:162
3693
+ #: templates/emails/order-items-table.php:87
3694
+ #: templates/emails/plain/order-items-table.php:60
3695
+ #: templates/order/order-details.php:29 templates/order/order-details.php:85
3696
+ #: templates/profile/tabs/orders/list.php:35
3697
+ msgid "Total"
3698
+ msgstr "Suma"
3699
+
3700
+ #: inc/admin/views/meta-boxes/order/details.php:172
3701
+ msgid "Add Item"
3702
+ msgstr "Dodaj pozycję"
3703
+
3704
+ #: inc/admin/views/meta-boxes/order/details.php:175
3705
+ msgid ""
3706
+ "In order to change the order item, please change the order status to "
3707
+ "'Pending'."
3708
+ msgstr ""
3709
+ "W celu zmiany zlecenia elementów, użytkownik zmienia status na "
3710
+ "\"Oczekujący\"."
3711
+
3712
+ #: inc/admin/views/meta-boxes/order/details.php:178
3713
+ msgid "Calculate Total"
3714
+ msgstr "Wylicz sumę"
3715
+
3716
+ #: inc/admin/views/meta-boxes/order/details.php:186
3717
+ msgid "Customer Note"
3718
+ msgstr "Notatka kupującego"
3719
+
3720
+ #: inc/admin/views/meta-boxes/order/details.php:233
3721
+ msgid "Type here to search the course"
3722
+ msgstr "Wpisz tutaj, aby wyszukać kurs"
3723
+
3724
+ #: inc/admin/views/meta-boxes/order/details.php:236
3725
+ msgid "No results"
3726
+ msgstr "Brak wyników"
3727
+
3728
+ #: inc/admin/views/meta-boxes/order/order-item.php:17
3729
+ msgid "delete"
3730
+ msgstr "usuń"
3731
+
3732
+ #: inc/admin/views/question/actions.php:12
3733
+ msgid "Question Answers"
3734
+ msgstr "Odpowiedzi na pytania"
3735
+
3736
+ #: inc/admin/views/question/answer.php:18
3737
+ #: inc/admin/views/quiz/question-answer.php:19
3738
+ msgid "Answer Text"
3739
+ msgstr "Tekst odpowiedzi"
3740
+
3741
+ #: inc/admin/views/question/answer.php:19
3742
+ msgid "Correct answer"
3743
+ msgstr "Poprawna odpowiedź"
3744
+
3745
+ #: inc/admin/views/question/answer.php:35
3746
+ #: inc/admin/views/quiz/question-answer.php:34
3747
+ msgid "Add option"
3748
+ msgstr "Dodaj opcję"
3749
+
3750
+ #: inc/admin/views/quiz/editor.php:16
3751
+ #: inc/admin/views/quiz/modal-choose-items.php:55
3752
+ #: inc/custom-post-types/question.php:170 inc/custom-post-types/quiz.php:337
3753
+ #: templates/content-quiz/intro.php:36
3754
+ msgid "Questions"
3755
+ msgstr "Pytania"
3756
+
3757
+ #: inc/admin/views/quiz/editor.php:27 inc/admin/views/settings/payments.php:24
3758
+ #: inc/custom-post-types/question.php:321
3759
+ msgid "Type"
3760
+ msgstr "Typ"
3761
+
3762
+ #: inc/admin/views/quiz/editor.php:42
3763
+ msgid " Create a new question"
3764
+ msgstr " Stwórz nową sekcję"
3765
+
3766
+ #: inc/admin/views/quiz/editor.php:49
3767
+ msgid "Add as New"
3768
+ msgstr "Dodaj jako nowe"
3769
+
3770
+ #: inc/admin/views/quiz/editor.php:59
3771
+ #: inc/libraries/meta-box/inc/fields/file-input.php:38
3772
+ #: inc/libraries/meta-box/inc/fields/select.php:87
3773
+ msgid "Select"
3774
+ msgstr "Jednokrotnego wyboru"
3775
+
3776
+ #: inc/admin/views/quiz/editor.php:85
3777
+ msgid "Something went wrong! Please reload to continue editing quiz questions."
3778
+ msgstr "Coś poszło nie tak! Załaduj ponownie, aby edytować pytania testowe."
3779
+
3780
+ #: inc/admin/views/quiz/question-actions.php:44
3781
+ msgid "Remove from quiz"
3782
+ msgstr "Usuń z testu"
3783
+
3784
+ #: inc/admin/views/quiz/question-answer.php:20
3785
+ msgid "Is Correct?"
3786
+ msgstr "Jest poprawne?"
3787
+
3788
+ #: inc/admin/views/quiz/question-meta.php:18
3789
+ #: inc/question/class-lp-question.php:412
3790
+ msgid "Question Content"
3791
+ msgstr "Treść pytania"
3792
+
3793
+ #: inc/admin/views/quiz/question-meta.php:30
3794
+ #: inc/custom-post-types/question.php:281
3795
+ msgid "Mark for this question"
3796
+ msgstr "Ocena tego pytania"
3797
+
3798
+ #: inc/admin/views/quiz/question-meta.php:36
3799
+ #: inc/custom-post-types/question.php:285
3800
+ msgid "Mark for choosing the right answer."
3801
+ msgstr "Ocena za wybranie odpowiedniej odpowiedzi."
3802
+
3803
+ #: inc/admin/views/quiz/question-meta.php:42
3804
+ #: inc/custom-post-types/question.php:290
3805
+ msgid "Question Explanation"
3806
+ msgstr "Wytłumaczenie pytania"
3807
+
3808
+ #: inc/admin/views/quiz/question-meta.php:50
3809
+ #: inc/custom-post-types/question.php:293
3810
+ msgid ""
3811
+ "Explain why an option is true and other is false. The text will be shown "
3812
+ "when user click on 'Check answer' button."
3813
+ msgstr ""
3814
+ "Wyjaśnij dlaczego opcja jest poprawna lub błędna. Tekst zostanie pokazany "
3815
+ "kiedy użytkownik kliknie przycisk \"Sprawdź odpowiedź\"."
3816
+
3817
+ #: inc/admin/views/quiz/question-meta.php:56
3818
+ #: inc/custom-post-types/question.php:297
3819
+ msgid "Question Hint"
3820
+ msgstr "Podpowiedź do pytania"
3821
+
3822
+ #: inc/admin/views/quiz/question-meta.php:63
3823
+ #: inc/custom-post-types/question.php:300
3824
+ msgid ""
3825
+ "Instruction for user to select the right answer. The text will be shown when "
3826
+ "users click the 'Hint' button."
3827
+ msgstr ""
3828
+ "Instrukcja dla użytkownika jak dać poprawną odpowiedź. Tekst zostanie "
3829
+ "pokazany kiedy użytkownik kliknie \"Sprawdź\"."
3830
+
3831
+ #: inc/admin/views/settings/payments.php:17
3832
+ #: inc/admin/views/settings/emails/become-a-teacher-request.php:25
3833
+ #: inc/admin/views/setup/setup-paypal.php:17
3834
+ #: inc/admin/views/setup/setup-stripe.php:3
3835
+ #: inc/emails/class-lp-email-new-course.php:131
3836
+ #: inc/emails/class-lp-email-published-course.php:122
3837
+ #: inc/emails/class-lp-email-rejected-course.php:119
3838
+ #: inc/emails/class-lp-email-updated-course.php:164
3839
+ #: inc/emails/class-lp-email-user-order-changed-status.php:136
3840
+ #: inc/emails/class-lp-email-user-order-completed.php:137
3841
+ #: inc/emails/class-lp-email.php:982
3842
+ #: inc/emails/_bk/class-lp-email-finished-course-admin.php:131
3843
+ #: inc/emails/_bk/class-lp-email-finished-course-instructor.php:133
3844
+ #: inc/emails/_bk/class-lp-email-finished-course-user.php:133
3845
+ #: inc/gateways/paypal/class-lp-gateway-paypal.php:498
3846
+ msgid "Enable"
3847
+ msgstr "Włącz"
3848
+
3849
+ #: inc/admin/views/settings/payments.php:27
3850
+ msgid "Basic"
3851
+ msgstr "Podstawowa"
3852
+
3853
+ #: inc/admin/views/settings/payments.php:28
3854
+ msgid "Security"
3855
+ msgstr "Ochrona"
3856
+
3857
+ #: inc/admin/views/settings/payments.php:33
3858
+ msgid "Email Address"
3859
+ msgstr "Adres email"
3860
+
3861
+ #: inc/admin/views/settings/payments.php:42
3862
+ msgid "API Username"
3863
+ msgstr "API Username"
3864
+
3865
+ #: inc/admin/views/settings/payments.php:49
3866
+ msgid "API Password"
3867
+ msgstr "API Password"
3868
+
3869
+ #: inc/admin/views/settings/payments.php:56
3870
+ msgid "API Signature"
3871
+ msgstr "API Signature"
3872
+
3873
+ #: inc/admin/views/settings/payments.php:68
3874
+ #: inc/admin/views/setup/setup-paypal.php:34
3875
+ #: inc/gateways/paypal/class-lp-gateway-paypal.php:524
3876
+ msgid "Sandbox Mode"
3877
+ msgstr "Sandbox Mode"
3878
+
3879
+ #: inc/admin/views/settings/payments.php:76
3880
+ #: inc/gateways/paypal/class-lp-gateway-paypal.php:540
3881
+ msgid "Sandbox Email Address"
3882
+ msgstr "Sandbox Email Address"
3883
+
3884
+ #: inc/admin/views/settings/payments.php:85
3885
+ msgid "Sandbox API Username"
3886
+ msgstr "Sandbox API Username"
3887
+
3888
+ #: inc/admin/views/settings/payments.php:93
3889
+ msgid "Sandbox API Password"
3890
+ msgstr "Sandbox API Password"
3891
+
3892
+ #: inc/admin/views/settings/payments.php:101
3893
+ msgid "Sandbox API Signature"
3894
+ msgstr "Sandbox API Signature"
3895
+
3896
+ #: inc/admin/views/settings/setting-field.php:96
3897
+ msgid ""
3898
+ "The settings of this image size have been disabled because its values are "
3899
+ "being overwritten by a filter."
3900
+ msgstr ""
3901
+ "Ustawienia rozmiaru tej grafiki zostały wyłączone ponieważ wartości zostały "
3902
+ "nadpisane przez filter."
3903
+
3904
+ #: inc/admin/views/settings/setting-field.php:108
3905
+ msgid "Hard Crop?"
3906
+ msgstr "Przyciąć?"
3907
+
3908
+ #: inc/admin/views/settings/emails/become-a-teacher-request.php:29
3909
+ msgid "Send notification when a user signs up to be a teacher"
3910
+ msgstr "Wyślij powiadomienie kiedy użytkownik chce zostać nauczycielem"
3911
+
3912
+ #: inc/admin/views/settings/emails/become-a-teacher-request.php:33
3913
+ #: inc/emails/class-lp-email-new-course.php:154
3914
+ #: inc/emails/class-lp-email-published-course.php:128
3915
+ #: inc/emails/class-lp-email-rejected-course.php:125
3916
+ #: inc/emails/class-lp-email-updated-course.php:170
3917
+ #: inc/emails/class-lp-email-user-order-changed-status.php:142
3918
+ #: inc/emails/class-lp-email-user-order-completed.php:143
3919
+ #: inc/emails/class-lp-email.php:1005
3920
+ #: inc/emails/_bk/class-lp-email-finished-course-admin.php:137
3921
+ #: inc/emails/_bk/class-lp-email-finished-course-instructor.php:139
3922
+ #: inc/emails/_bk/class-lp-email-finished-course-user.php:139
3923
+ msgid "Subject"
3924
+ msgstr "Temat"
3925
+
3926
+ #: inc/admin/views/settings/emails/become-a-teacher-request.php:37
3927
+ msgid "Email subject"
3928
+ msgstr "Temat e-mail"
3929
+
3930
+ #: inc/admin/views/settings/emails/become-a-teacher-request.php:41
3931
+ msgid "Message"
3932
+ msgstr "Wiadomość 1"
3933
+
3934
+ #: inc/admin/views/settings/emails/email-template.php:6
3935
+ #: inc/admin/views/settings/emails/_email-template.php:3
3936
+ #: inc/emails/class-lp-email-new-course.php:188
3937
+ #: inc/emails/class-lp-email-published-course.php:162
3938
+ #: inc/emails/class-lp-email-rejected-course.php:159
3939
+ #: inc/emails/class-lp-email-updated-course.php:204
3940
+ #: inc/emails/class-lp-email-user-order-changed-status.php:176
3941
+ #: inc/emails/class-lp-email-user-order-completed.php:177
3942
+ #: inc/emails/class-lp-email.php:1039
3943
+ #: inc/emails/_bk/class-lp-email-finished-course-admin.php:171
3944
+ #: inc/emails/_bk/class-lp-email-finished-course-instructor.php:173
3945
+ #: inc/emails/_bk/class-lp-email-finished-course-user.php:173
3946
+ msgid "Email content"
3947
+ msgstr "Zawartość wiadomości"
3948
+
3949
+ #: inc/admin/views/settings/emails/email-template.php:13
3950
+ #: inc/admin/views/settings/emails/_email-template.php:11
3951
+ msgid "HTML template"
3952
+ msgstr "Szablon HTML"
3953
+
3954
+ #: inc/admin/views/settings/emails/email-template.php:14
3955
+ #: inc/admin/views/settings/emails/_email-template.php:12
3956
+ msgid "Plain text template"
3957
+ msgstr "Szablon zwykłego tekstu"
3958
+
3959
+ #: inc/admin/views/settings/emails/email-template.php:87
3960
+ #: inc/admin/views/settings/emails/_email-template.php:78
3961
+ #, php-format
3962
+ msgid ""
3963
+ "To override and edit this email template copy <code>%s</code> to your theme "
3964
+ "folder: <code>%s</code>."
3965
+ msgstr ""
3966
+ "Aby nadpisać i edytować szablon skopiuj <code>%s</code> do katalogu motywu: "
3967
+ "<code>%s</code>."
3968
+
3969
+ #: inc/admin/views/settings/emails/general.php:15
3970
+ msgid "Email Options"
3971
+ msgstr "Opcje e-mail"
3972
+
3973
+ #: inc/admin/views/settings/emails/general.php:23
3974
+ msgid "From Name"
3975
+ msgstr "Imię i nazwisko nadawcy"
3976
+
3977
+ #: inc/admin/views/settings/emails/general.php:29
3978
+ msgid "From Email"
3979
+ msgstr "Od (e-mail)"
3980
+
3981
+ #: inc/admin/views/settings/emails/general.php:36
3982
+ msgid "Email Template"
3983
+ msgstr "Szablon Email"
3984
+
3985
+ #: inc/admin/views/settings/emails/general.php:50
3986
+ msgid "The texts display in the bottom of email"
3987
+ msgstr "Tekst wyświetlany na dole emaila"
3988
+
3989
+ #: inc/admin/views/settings/emails/_email-template.php:36
3990
+ #, php-format
3991
+ msgid ""
3992
+ "This template has been overridden by your theme and can be found in: <code>"
3993
+ "%s</code>. Please open the file in an editor program to edit"
3994
+ msgstr ""
3995
+ "Ten szablon został nadpisany przez Twój szablon i może zostać znaleziony: "
3996
+ "<code>%s</code>. Proszę otwórz plik i skoryguj"
3997
+
3998
+ #: inc/admin/views/settings/emails/_email-template.php:63
3999
+ #, php-format
4000
+ msgid ""
4001
+ "This template has been overridden by your theme and can be found in: <code>"
4002
+ "%s</code>."
4003
+ msgstr ""
4004
+ "Ten szablon jest nadpisywany przez twój motyw i można go znaleźć tu: <code>"
4005
+ "%s</code>."
4006
+
4007
+ #: inc/admin/views/settings/emails/_email-template.php:68
4008
+ msgid "Delete template file"
4009
+ msgstr "Skasuj szablon"
4010
+
4011
+ #: inc/admin/views/settings/emails/_email-template.php:83
4012
+ msgid "Copy file to theme"
4013
+ msgstr "Skopiuj plik do katalogu motywu"
4014
+
4015
+ #: inc/admin/views/settings/emails/_email-template.php:89
4016
+ msgid "File not found."
4017
+ msgstr "Nie znaleziono pliku."
4018
+
4019
+ #: inc/admin/views/settings/fields/image-size.php:18
4020
+ msgid "Crop?"
4021
+ msgstr "Przyciąć?"
4022
+
4023
+ #: inc/admin/views/setup/content.php:47
4024
+ msgid "Skip to prev step"
4025
+ msgstr "Przeskocz do poprzedniego etapu"
4026
+
4027
+ #: inc/admin/views/setup/content.php:60
4028
+ msgid "Skip to next step"
4029
+ msgstr "Przeskocz do następnego etapu"
4030
+
4031
+ #: inc/admin/views/setup/content.php:67
4032
+ #: inc/admin/views/setup/steps/finish.php:29
4033
+ msgid "Back to Dashboard"
4034
+ msgstr "Wróć do tablicy"
4035
+
4036
+ #: inc/admin/views/setup/content.php:75
4037
+ #: inc/admin/views/updates/update-screen.php:46
4038
+ #: inc/custom-post-types/course.php:213 inc/custom-post-types/quiz.php:176
4039
+ #: templates/checkout/form.php:89 templates/checkout/payment.php:132
4040
+ msgid "Back"
4041
+ msgstr "Wróć"
4042
+
4043
+ #: inc/admin/views/setup/content.php:86
4044
+ #: templates/content-quiz/buttons/continue.php:26
4045
+ #: templates/single-course/buttons/continue.php:23
4046
+ msgid "Continue"
4047
+ msgstr "Kontynuuj"
4048
+
4049
+ #: inc/admin/views/setup/footer.php:15
4050
+ #, php-format
4051
+ msgid "LearnPress %s. Designed by @ThimPress."
4052
+ msgstr "LearnPress %s. Stworzone przez @ThimPress."
4053
+
4054
+ #: inc/admin/views/setup/header.php:17
4055
+ msgid "LearnPress &rsaquo; Setup Wizard"
4056
+ msgstr "LearnPress &rsaquo; Przewodnik instalacji"
4057
+
4058
+ #: inc/admin/views/setup/notice-setup.php:2
4059
+ msgid "<strong>LearnPress has just successfully installed.</strong>"
4060
+ msgstr "<strong>LearnPress został zainstalowany.</strong>"
4061
+
4062
+ #: inc/admin/views/setup/notice-setup.php:6
4063
+ msgid "Skip"
4064
+ msgstr "Przeskocz"
4065
+
4066
+ #: inc/admin/views/setup/setup-paypal.php:24
4067
+ #: inc/gateways/paypal/class-lp-gateway-paypal.php:504
4068
+ msgid "Paypal Email"
4069
+ msgstr "Email Paypal"
4070
+
4071
+ #: inc/admin/views/setup/setup-paypal.php:29
4072
+ msgid "Your Paypal email in live mode."
4073
+ msgstr "Twój email Paypal w trybie na żywo."
4074
+
4075
+ #: inc/admin/views/setup/setup-paypal.php:39
4076
+ #, php-format
4077
+ msgid ""
4078
+ "For testing purpose with Paypal sandbox mode. Create an account <a "
4079
+ "href=\"%s\">here</a>!"
4080
+ msgstr ""
4081
+ "Dla testy możesz użyć trybu Paypal sandbox. Stwórz konto <a href=\"%s\">"
4082
+ "tutaj</a>!"
4083
+
4084
+ #: inc/admin/views/setup/setup-paypal.php:44
4085
+ msgid "Paypal Sandbox Email"
4086
+ msgstr "Paypal Sandbox Email"
4087
+
4088
+ #: inc/admin/views/setup/setup-paypal.php:49
4089
+ msgid "Your Paypal email in sandbox mode."
4090
+ msgstr "Twój email Paypal w trybie sandbox."
4091
+
4092
+ #: inc/admin/views/setup/setup-stripe.php:7
4093
+ #: inc/widgets/course-attributes/course-attributes.php:11
4094
+ #: inc/widgets/course-filters/course-filters.php:11
4095
+ #: inc/widgets/course-info/course-info.php:46
4096
+ #: inc/widgets/course-progress/course-progress.php:46
4097
+ #: inc/widgets/featured-courses/featured-courses.php:45
4098
+ #: inc/widgets/popular-courses/popular-courses.php:46
4099
+ #: inc/widgets/recent-courses/recent-courses.php:46
4100
+ msgid "Title"
4101
+ msgstr "Tytuł"
4102
+
4103
+ #: inc/admin/views/setup/setup-stripe.php:15
4104
+ msgid "Live secret key"
4105
+ msgstr "Klucz live secret"
4106
+
4107
+ #: inc/admin/views/setup/setup-stripe.php:19
4108
+ msgid "Live publish key"
4109
+ msgstr "Klucz live publish"
4110
+
4111
+ #: inc/admin/views/setup/setup-stripe.php:24
4112
+ msgid "Test mode"
4113
+ msgstr "Tryb testowy"
4114
+
4115
+ #: inc/admin/views/setup/setup-stripe.php:28
4116
+ msgid "Test secret key"
4117
+ msgstr "Przetestuj Secret Key"
4118
+
4119
+ #: inc/admin/views/setup/setup-stripe.php:32
4120
+ msgid "Test publish key"
4121
+ msgstr "Przetestyj Publish Key"
4122
+
4123
+ #: inc/admin/views/setup/steps/emails.php:12
4124
+ msgid "Emails system"
4125
+ msgstr "System emaili"
4126
+
4127
+ #: inc/admin/views/setup/steps/emails.php:14
4128
+ msgid "Emails are sent to users or teachers for each particular action."
4129
+ msgstr "Emaile są wysyłane do użytkownika lub nauczyciela po każdej akcji."
4130
+
4131
+ #: inc/admin/views/setup/steps/emails.php:15
4132
+ msgid "You can enable/disable each email in LearnPress settings later."
4133
+ msgstr ""
4134
+ "Możesz włączyć/wyłączyć wysyłanie emaili w ustawieniach LearnPress później."
4135
+
4136
+ #: inc/admin/views/setup/steps/emails.php:16
4137
+ msgid "But in right now, you can enable all emails to see how emails work."
4138
+ msgstr "Ale teraz, możesz włączyć wszystkie emaile by sprawdzić jak to działa."
4139
+
4140
+ #: inc/admin/views/setup/steps/emails.php:17
4141
+ msgid "You can skip to next step if you don’t want to."
4142
+ msgstr "Jeżeli chcesz, to możesz przeskoczyć do kolejnego etapu."
4143
+
4144
+ #: inc/admin/views/setup/steps/emails.php:22
4145
+ msgid "Enable emails"
4146
+ msgstr "Włącz emaile"
4147
+
4148
+ #: inc/admin/views/setup/steps/finish.php:14
4149
+ msgid "Congrats! You are almost done with your settings."
4150
+ msgstr "Gratulacje! Prawie skończyłeś ustawianie."
4151
+
4152
+ #: inc/admin/views/setup/steps/finish.php:16
4153
+ #: inc/admin/views/updates/0.9/step-upgraded.php:2
4154
+ msgid "What's next?"
4155
+ msgstr "Co dalej?"
4156
+
4157
+ #: inc/admin/views/setup/steps/finish.php:22
4158
+ msgid "Install sample course"
4159
+ msgstr "Zainstaluj przykładowy kurs"
4160
+
4161
+ #: inc/admin/views/setup/steps/finish.php:25
4162
+ msgid "Create new course"
4163
+ msgstr "Stwórz nowy kurs"
4164
+
4165
+ #: inc/admin/views/setup/steps/finish.php:27
4166
+ msgid "Visit your site"
4167
+ msgstr "Odwiedź swoją stronę"
4168
+
4169
+ #: inc/admin/views/setup/steps/pages.php:16
4170
+ msgid ""
4171
+ "The pages will display content of LP's necessary pages, such as: Courses, "
4172
+ "Checkout, Profile"
4173
+ msgstr ""
4174
+ "Podstrony będą wyświetlały zawartość wymaganych podstron jak: Kursy, Koszy, "
4175
+ "Profil"
4176
+
4177
+ #: inc/admin/views/setup/steps/pages.php:17
4178
+ #, php-format
4179
+ msgid ""
4180
+ "If you are not sure, click <a href=\"%s\" id=\"create-pages\">here</a> to "
4181
+ "create pages automatically."
4182
+ msgstr ""
4183
+ "Jeżeli nie jesteś pewny, kliknij <a href=\"%s\" id=\"create-pages\">tutaj</a>"
4184
+ " by stworzyć podstrony automatycznie."
4185
+
4186
+ #: inc/admin/views/setup/steps/pages.php:23
4187
+ msgid "Page will display all courses inside."
4188
+ msgstr "Strona wyświetlająca wszystkie zawarte kursy."
4189
+
4190
+ #: inc/admin/views/setup/steps/pages.php:32
4191
+ msgid "Page will display content of user profile."
4192
+ msgstr "Strona wyświetlająca zawartość profilu użytkownika."
4193
+
4194
+ #: inc/admin/views/setup/steps/pages.php:41
4195
+ msgid "Page will display content of form for processing checkout."
4196
+ msgstr "Strona wyświetlająca zawartość procesu płatności."
4197
+
4198
+ #: inc/admin/views/setup/steps/pages.php:50
4199
+ msgid "Page will display the form for submitting request to become a teacher."
4200
+ msgstr "Strona wyświetlająca formularz zgłoszeń \"zostań nauczycielem\"."
4201
+
4202
+ #: inc/admin/views/setup/steps/welcome.php:12
4203
+ msgid "Welcome to LearnPress"
4204
+ msgstr "Witamy w LearnPress"
4205
+
4206
+ #: inc/admin/views/setup/steps/welcome.php:14
4207
+ msgid "Thanks for choosing LearnPress to sell your courses online!"
4208
+ msgstr "Dziękujemy za wybranie LearnPress w celu sprzedaży kursów online!"
4209
+
4210
+ #: inc/admin/views/setup/steps/welcome.php:16
4211
+ msgid ""
4212
+ "Setup Wizard helps you config some basic information before publishing your "
4213
+ "site."
4214
+ msgstr ""
4215
+ "Przewodnik instalacji pomoże Tobie ustawić podstawowe informacje dotyczące "
4216
+ "witryny."
4217
+
4218
+ #: inc/admin/views/statistics/courses.php:18
4219
+ #: inc/admin/views/statistics/general.php:33
4220
+ #: inc/admin/views/statistics/orders.php:19
4221
+ #: inc/admin/views/statistics/users.php:19
4222
+ msgid "Last 7 Days"
4223
+ msgstr "Ostatnie 7 dni"
4224
+
4225
+ #: inc/admin/views/statistics/courses.php:21
4226
+ #: inc/admin/views/statistics/general.php:36
4227
+ #: inc/admin/views/statistics/orders.php:22
4228
+ #: inc/admin/views/statistics/users.php:22
4229
+ msgid "Last 30 Days"
4230
+ msgstr "Ostatnie 30 dni"
4231
+
4232
+ #: inc/admin/views/statistics/courses.php:24
4233
+ #: inc/admin/views/statistics/general.php:40
4234
+ #: inc/admin/views/statistics/orders.php:25
4235
+ #: inc/admin/views/statistics/users.php:26
4236
+ msgid "Last 12 Months"
4237
+ msgstr "Ostatnie 12 miesięcy"
4238
+
4239
+ #: inc/admin/views/statistics/courses.php:31
4240
+ #: inc/admin/views/statistics/general.php:47
4241
+ #: inc/admin/views/statistics/orders.php:32
4242
+ #: inc/admin/views/statistics/users.php:33
4243
+ msgid "From"
4244
+ msgstr "Od"
4245
+
4246
+ #: inc/admin/views/statistics/courses.php:33
4247
+ #: inc/admin/views/statistics/general.php:49
4248
+ #: inc/admin/views/statistics/orders.php:34
4249
+ #: inc/admin/views/statistics/users.php:35
4250
+ msgid "To"
4251
+ msgstr "Do"
4252
+
4253
+ #: inc/admin/views/statistics/courses.php:36
4254
+ #: inc/admin/views/statistics/general.php:53
4255
+ #: inc/admin/views/statistics/orders.php:37
4256
+ #: inc/admin/views/statistics/users.php:39
4257
+ msgid "Go"
4258
+ msgstr "Go"
4259
+
4260
+ #: inc/admin/views/statistics/courses.php:43
4261
+ #: inc/admin/views/statistics/general.php:60
4262
+ msgid "Public"
4263
+ msgstr "Publiczny"
4264
+
4265
+ #: inc/admin/views/statistics/orders.php:44
4266
+ msgid "Sale by"
4267
+ msgstr "W sprzedaży przez"
4268
+
4269
+ #: inc/admin/views/statistics/orders.php:48
4270
+ msgid "Course Category"
4271
+ msgstr "Kategoria kursu"
4272
+
4273
+ #: inc/admin/views/statistics/orders.php:51
4274
+ msgid "Select a course"
4275
+ msgstr "Wybierz kurs"
4276
+
4277
+ #: inc/admin/views/statistics/orders.php:55
4278
+ msgid "Select a course category"
4279
+ msgstr "Wybierz kategorię kursu"
4280
+
4281
+ #: inc/admin/views/tools/html-cache.php:12
4282
+ msgid "LearnPress hard cache"
4283
+ msgstr "Cache LearnPress"
4284
+
4285
+ #: inc/admin/views/tools/html-cache.php:13
4286
+ msgid ""
4287
+ "Hard cache is build-in tool of LearnPress for caching of static content such "
4288
+ "as course, lesson, quiz."
4289
+ msgstr ""
4290
+ "Pamięć podręczna wbudowana w LearnPress do trzymania statycznych zawartości "
4291
+ "jak kursy, lekcje, testy."
4292
+
4293
+ #: inc/admin/views/tools/html-cache.php:14
4294
+ msgid ""
4295
+ "When caching is enabled, the content will be cached when course is accessed "
4296
+ "in the first time."
4297
+ msgstr ""
4298
+ "Jak pamięć jest aktywna, zawartość jest zapisywana kiedy kurs uruchamiany "
4299
+ "jest po raz pierwszy."
4300
+
4301
+ #: inc/admin/views/tools/html-cache.php:15
4302
+ msgid ""
4303
+ "And it will not change in all later accesses until the cache is cleared."
4304
+ msgstr "Nie będzie ona zmieniana do momentu wyczyszczenia pamięci podręcznej."
4305
+
4306
+ #: inc/admin/views/tools/html-cache.php:16
4307
+ msgid ""
4308
+ "If the content is not changed after updating course, click the button below "
4309
+ "to flush the cache and apply changes."
4310
+ msgstr ""
4311
+ "Jeżeli zawartość nie zostanie zmieniona po aktualizacji kursu, kliknij na "
4312
+ "przycisk poniżej, aby wyczyścić pamięć i zapisać zmiany."
4313
+
4314
+ #: inc/admin/views/tools/html-cache.php:21
4315
+ msgid "Enable/Disable hard cache"
4316
+ msgstr "Włącz/wyłącz pamięć podręczną"
4317
+
4318
+ #: inc/admin/views/tools/html-cache.php:25
4319
+ #: inc/admin/views/tools/html-cache.php:28
4320
+ msgid "Clear cache"
4321
+ msgstr "Wyczyść pamięć podręczną"
4322
+
4323
+ #: inc/admin/views/tools/html-cache.php:26
4324
+ msgid "Cleaning..."
4325
+ msgstr "Czyszczenie..."
4326
+
4327
+ #: inc/admin/views/tools/html-template.php:30
4328
+ #, php-format
4329
+ msgid "Override Templates (%s)"
4330
+ msgstr "Nadpisz Szablon (%s)"
4331
+
4332
+ #: inc/admin/views/tools/html-template.php:38
4333
+ msgid "File"
4334
+ msgstr "Plik"
4335
+
4336
+ #: inc/admin/views/tools/html-template.php:41
4337
+ #, php-format
4338
+ msgid "All (%d)"
4339
+ msgstr "Wszystkie (%d)"
4340
+
4341
+ #: inc/admin/views/tools/html-template.php:49
4342
+ #, php-format
4343
+ msgid "Outdated (%d)"
4344
+ msgstr "Przeterminowane (%d)"
4345
+
4346
+ #: inc/admin/views/tools/html-template.php:51
4347
+ #, php-format
4348
+ msgid "Unversioned (%d)"
4349
+ msgstr "Bez wersji (%d)"
4350
+
4351
+ #: inc/admin/views/tools/html-template.php:55
4352
+ msgid "Version"
4353
+ msgstr "Wersja"
4354
+
4355
+ #: inc/admin/views/tools/html-template.php:57
4356
+ msgid "Core version"
4357
+ msgstr "Wersja silnika"
4358
+
4359
+ #: inc/admin/views/tools/html-template.php:89
4360
+ msgid "There is no template file has overwritten"
4361
+ msgstr "Żadne pliki szablonu nie były nadpisane"
4362
+
4363
+ #: inc/admin/views/tools/course/html-course.php:12
4364
+ msgid "Reset course user data"
4365
+ msgstr "Reset użytkowników kursu"
4366
+
4367
+ #: inc/admin/views/tools/course/html-course.php:14
4368
+ msgid "Search results only show course have user data."
4369
+ msgstr "Szukanie wyników pokazuje tylko kursy z danymi użytkownika."
4370
+
4371
+ #: inc/admin/views/tools/course/html-course.php:18
4372
+ #: inc/admin/views/tools/course/html-user.php:18 templates/search-form.php:29
4373
+ msgid "Search"
4374
+ msgstr "Wyszukaj"
4375
+
4376
+ #: inc/admin/views/tools/course/html-course.php:39
4377
+ #: inc/admin/views/tools/course/html-user.php:47
4378
+ msgid "Done"
4379
+ msgstr "Zrobione"
4380
+
4381
+ #: inc/admin/views/tools/course/html-course.php:40
4382
+ #: inc/admin/views/tools/course/html-user.php:48
4383
+ msgid "Resetting..."
4384
+ msgstr "Resetowanie..."
4385
+
4386
+ #: inc/admin/views/tools/course/html-course.php:47
4387
+ msgid "Please enter at least 3 characters to searching courses."
4388
+ msgstr "Wpisz przynajmniej 3 znaki aby wyszukać kursy."
4389
+
4390
+ #: inc/admin/views/tools/course/html-course.php:49
4391
+ msgid "Searching course..."
4392
+ msgstr "Szukanie kursów..."
4393
+
4394
+ #: inc/admin/views/tools/course/html-course.php:57
4395
+ #: inc/admin/views/tools/course/html-user-item.php:35
4396
+ #: inc/admin/views/tools/course/html-user.php:65
4397
+ msgid "Remove all users from this course?"
4398
+ msgstr "Usunąć wszystkich użytkowników z kursu?"
4399
+
4400
+ #: inc/admin/views/tools/course/html-user-item.php:12
4401
+ msgid "Reset item data for an user"
4402
+ msgstr "Zresetuj dane dla użytkownika"
4403
+
4404
+ #: inc/admin/views/tools/course/html-user-item.php:14
4405
+ #: inc/admin/views/tools/course/html-user.php:14
4406
+ msgid "Search results only show users have course data."
4407
+ msgstr "Szukanie wyników pokazuje tylko użytkowników z danymi kursu."
4408
+
4409
+ #: inc/admin/views/tools/course/html-user-item.php:18
4410
+ msgid "User ID or Email"
4411
+ msgstr "ID użytkownika lub Email"
4412
+
4413
+ #: inc/admin/views/tools/course/html-user-item.php:19
4414
+ msgid "Item ID (ID of quiz or lesson)"
4415
+ msgstr "ID elementu (ID testu lub lekcji)"
4416
+
4417
+ #: inc/admin/views/tools/course/html-user.php:12
4418
+ msgid "Reset course data by user"
4419
+ msgstr "Reset danych kursu przez użytkownika"
4420
+
4421
+ #: inc/admin/views/tools/course/html-user.php:46
4422
+ msgid "Reset all"
4423
+ msgstr "Zresetuj wszystkie"
4424
+
4425
+ #: inc/admin/views/tools/course/html-user.php:55
4426
+ msgid "Please enter at least 3 characters to searching users."
4427
+ msgstr "Wpisz przynajmniej 3 znaki aby wyszukać użytkowników."
4428
+
4429
+ #: inc/admin/views/tools/course/html-user.php:56
4430
+ msgid "No user found."
4431
+ msgstr "Nie znaleziono użytkowników."
4432
+
4433
+ #: inc/admin/views/tools/course/html-user.php:57
4434
+ msgid "Searching user..."
4435
+ msgstr "Wyszukiwanie użytkowników..."
4436
+
4437
+ #: inc/admin/views/tools/database/html-install-sample-data.php:16
4438
+ msgid "Install Sample Data"
4439
+ msgstr "Zainstaluj przykładowe dane"
4440
+
4441
+ #: inc/admin/views/tools/database/html-install-sample-data.php:17
4442
+ msgid ""
4443
+ "Create a <strong>Sample course</strong> with lessons and quizzes. The "
4444
+ "content will be filled with <strong>Lorem</strong> text."
4445
+ msgstr ""
4446
+ "Stwórz <strong>Przykładowy kurs</strong> z lekcjami i testami. Zawartość "
4447
+ "zostanie wypełniona przez <strong>Lorem Ipsum</strong>."
4448
+
4449
+ #: inc/admin/views/tools/database/html-install-sample-data.php:19
4450
+ msgid "Options"
4451
+ msgstr "Opcje"
4452
+
4453
+ #: inc/admin/views/tools/database/html-install-sample-data.php:23
4454
+ msgid "Course name"
4455
+ msgstr ""
4456
+
4457
+ #: inc/admin/views/tools/database/html-install-sample-data.php:28
4458
+ msgid "Random number of sections in range"
4459
+ msgstr "Losowa liczba sekcji w zakresie"
4460
+
4461
+ #: inc/admin/views/tools/database/html-install-sample-data.php:35
4462
+ msgid "Random number of items in range (each section)"
4463
+ msgstr "Losowa liczba elementów w zakresie (każda sekcja)"
4464
+
4465
+ #: inc/admin/views/tools/database/html-install-sample-data.php:42
4466
+ msgid "Random number of questions in range (each quiz)"
4467
+ msgstr "Losowa liczba pytań w zakresie (każdy test)"
4468
+
4469
+ #: inc/admin/views/tools/database/html-install-sample-data.php:49
4470
+ msgid "Random number of answers in range (each question)"
4471
+ msgstr "Losowa liczba odpowiedzi w zakresie (każde pytanie)"
4472
+
4473
+ #: inc/admin/views/tools/database/html-install-sample-data.php:60
4474
+ #: inc/admin/views/tools/database/html-install-sample-data.php:63
4475
+ msgid "Install"
4476
+ msgstr "Instaluj"
4477
+
4478
+ #: inc/admin/views/tools/database/html-install-sample-data.php:61
4479
+ msgid "Installing..."
4480
+ msgstr "Instalowanie..."
4481
+
4482
+ #: inc/admin/views/tools/database/html-install-sample-data.php:65
4483
+ msgid "Show options"
4484
+ msgstr "Pokaż opcje"
4485
+
4486
+ #: inc/admin/views/tools/database/html-install-sample-data.php:67
4487
+ #: inc/admin/views/tools/database/html-install-sample-data.php:71
4488
+ msgid "Delete sample course"
4489
+ msgstr "Usuń przykładowy kurs"
4490
+
4491
+ #: inc/admin/views/tools/database/html-install-sample-data.php:68
4492
+ msgid "Deleting..."
4493
+ msgstr "Usuwanie..."
4494
+
4495
+ #: inc/admin/views/tools/database/html-remove-database.php:12
4496
+ msgid "Remove current Data"
4497
+ msgstr "Usuń obecne dane"
4498
+
4499
+ #: inc/admin/views/tools/database/html-remove-database.php:13
4500
+ msgid "Remove all courses, lessons, quizzes and questions."
4501
+ msgstr "Usuń wszystkie kursy, lekcje, testy i pytania."
4502
+
4503
+ #: inc/admin/views/tools/database/html-remove-database.php:16
4504
+ msgid "Be careful before using this action!"
4505
+ msgstr "Bądź uważny podczas korzystania z tej funkcji!"
4506
+
4507
+ #: inc/admin/views/tools/database/html-remove-database.php:20
4508
+ #: inc/admin/views/tools/database/html-remove-outdated-data.php:20
4509
+ msgid "Check this box and click this button again to confirm."
4510
+ msgstr "Zaznacz ten box oraz kliknij przycisk ponownie by potwierdzić."
4511
+
4512
+ #: inc/admin/views/tools/database/html-remove-database.php:23
4513
+ #: inc/admin/views/tools/database/html-remove-outdated-data.php:23
4514
+ #: inc/libraries/meta-box/inc/fields/file-input.php:40
4515
+ #: templates/profile/tabs/settings/avatar.php:60
4516
+ msgid "Remove"
4517
+ msgstr "Usuń"
4518
+
4519
+ #: inc/admin/views/tools/database/html-remove-outdated-data.php:12
4520
+ msgid "Remove outdated Data"
4521
+ msgstr "Usuń nieaktualne dane"
4522
+
4523
+ #: inc/admin/views/tools/database/html-remove-outdated-data.php:13
4524
+ msgid ""
4525
+ "Remove all courses, lessons, quizzes and questions from version older than 1."
4526
+ "0."
4527
+ msgstr ""
4528
+ "Usuń wszystkie kursy, lekcje, testy oraz pytania starsze niż z wersji 1.0."
4529
+
4530
+ #: inc/admin/views/tools/database/html-remove-outdated-data.php:16
4531
+ msgid ""
4532
+ "Be careful before using this action! Only use this action in case all "
4533
+ "outdated data has been upgraded."
4534
+ msgstr ""
4535
+ "Uważaj korzystając z tej akcji! Skorzystaj z tego tylko gdy wszystkie "
4536
+ "nieaktualne dane muszą zostać zaktualizowane."
4537
+
4538
+ #: inc/admin/views/tools/database/html-upgrade-database.php:12
4539
+ msgid "Upgrade Database"
4540
+ msgstr "Zaktualizuj bazę danych"
4541
+
4542
+ #: inc/admin/views/tools/database/html-upgrade-database.php:13
4543
+ msgid ""
4544
+ "Force upgrade database to latest version. Please be careful before taking "
4545
+ "this action."
4546
+ msgstr ""
4547
+
4548
+ #: inc/admin/views/updates/html-update-message.php:12
4549
+ msgid ""
4550
+ "<strong>LearnPress update</strong> – We need to update your database to the "
4551
+ "latest version."
4552
+ msgstr ""
4553
+ "<strong>Aktualizacja LearnPress</strong> - potrzebujemy zaktualizować Twoją "
4554
+ "bazę danych do najnowszej wersji."
4555
+
4556
+ #: inc/admin/views/updates/html-upgrade-message-3.0.0.php:14
4557
+ #, php-format
4558
+ msgid "Welcome to LearnPress %s"
4559
+ msgstr ""
4560
+
4561
+ #: inc/admin/views/updates/html-upgrade-message-3.0.0.php:15
4562
+ msgid ""
4563
+ "This is a <strong>BIG UPDATE</strong> and it allows you to do so much more!"
4564
+ msgstr ""
4565
+
4566
+ #: inc/admin/views/updates/html-upgrade-message-3.0.0.php:16
4567
+ msgid ""
4568
+ "If there's any issue, please be sure to backup your site, update your theme, "
4569
+ "contact supporter."
4570
+ msgstr ""
4571
+
4572
+ #: inc/admin/views/updates/html-upgrade-message-3.0.0.php:20
4573
+ msgid "Check what's new"
4574
+ msgstr ""
4575
+
4576
+ #: inc/admin/views/updates/html-upgrade-message-3.0.0.php:22
4577
+ msgid "Get support now"
4578
+ msgstr ""
4579
+
4580
+ #: inc/admin/views/updates/html-upgrade-message-3.0.0.php:24
4581
+ msgid "Got it!"
4582
+ msgstr ""
4583
+
4584
+ #: inc/admin/views/updates/update-screen.php:17
4585
+ msgid "LearnPress &rsaquo; Update Database"
4586
+ msgstr "LearnPress &rsaquo; Zaktualizuj bazę danych"
4587
+
4588
+ #: inc/admin/views/updates/update-screen.php:36
4589
+ msgid "LearnPress Update Database"
4590
+ msgstr "Aktualizacja bazy danych LearnPress"
4591
+
4592
+ #: inc/admin/views/updates/update-screen.php:38
4593
+ msgid "Before updating please ensure your site data is already backed up!"
4594
+ msgstr "Zanim zaktualizujesz, upewnij się, że masz kopię zapasową!"
4595
+
4596
+ #: inc/admin/views/updates/update-screen.php:43
4597
+ msgid "Run Updater"
4598
+ msgstr "Uruchom aktualizację"
4599
+
4600
+ #: inc/admin/views/updates/0.9/step-repair-database.php:1
4601
+ msgid "Update Database"
4602
+ msgstr "Zaktualizuj bazę danych"
4603
+
4604
+ #: inc/admin/views/updates/0.9/step-repair-database.php:4
4605
+ msgid "Update custom post type"
4606
+ msgstr "Zaktualizuj standardowy typ postu"
4607
+
4608
+ #: inc/admin/views/updates/0.9/step-repair-database.php:7
4609
+ #: inc/admin/views/updates/0.9/step-repair-database.php:10
4610
+ msgid "Update post meta"
4611
+ msgstr "Zaktualizuj meta postu"
4612
+
4613
+ #: inc/admin/views/updates/0.9/step-repair-database.php:14
4614
+ msgid "Updating! Please do not close this page until the work is done"
4615
+ msgstr "Aktualizowanie! Proszę nie zamykać tej strony do momentu ukończenia"
4616
+
4617
+ #: inc/admin/views/updates/0.9/step-repair-database.php:18
4618
+ msgid "Rollback"
4619
+ msgstr "Przywrócenie"
4620
+
4621
+ #: inc/admin/views/updates/0.9/step-upgraded.php:1
4622
+ msgid "Upgrade completed successfully!"
4623
+ msgstr "Aktualizacja przeszła poprawnie!"
4624
+
4625
+ #: inc/admin/views/updates/0.9/step-upgraded.php:5
4626
+ msgid "Manage courses"
4627
+ msgstr "Zarządzaj kursami"
4628
+
4629
+ #: inc/admin/views/updates/0.9/step-upgraded.php:8
4630
+ msgid "Create a new course"
4631
+ msgstr "Stwórz nowy kurs"
4632
+
4633
+ #: inc/admin/views/updates/0.9/step-upgraded.php:11
4634
+ msgid "Setting up your LearnPress"
4635
+ msgstr "Ustaw swojego LearnPress"
4636
+
4637
+ #: inc/admin/views/updates/0.9/step-upgraded.php:14
4638
+ msgid "Manage add-ons"
4639
+ msgstr "Zarządzaj dodatkami"
4640
+
4641
+ #: inc/admin/views/updates/0.9/step-welcome.php:1
4642
+ msgid "Welcome to LearnPress!"
4643
+ msgstr "Witamy w LearnPress!"
4644
+
4645
+ #: inc/admin/views/updates/0.9/step-welcome.php:2
4646
+ msgid "Thank you for choosing LearnPress to sell your courses online!"
4647
+ msgstr "Dziękujemy za wybranie LearnPress, aby sprzedawać swoje kursy online!"
4648
+
4649
+ #: inc/admin/views/updates/0.9/step-welcome.php:3
4650
+ #, php-format
4651
+ msgid ""
4652
+ "In version <strong>%s</strong> of LearnPress we have a big update and need "
4653
+ "to upgrade your database to ensure system works properly."
4654
+ msgstr ""
4655
+ "W wersji <strong>%s</strong> Leadnpress wprowadziliśmy bardzo duże "
4656
+ "aktualizacje, stąd musisz zaktualizować swoją bazę danych, aby wszystko "
4657
+ "grało."
4658
+
4659
+ #: inc/admin/views/updates/0.9/step-welcome.php:4
4660
+ msgid ""
4661
+ "We are very careful in upgrading the database but be sure to backup your "
4662
+ "database before upgrading to avoid possible risks."
4663
+ msgstr ""
4664
+ "Jesteśmy bardzo uważni przy aktualizacji bazy, jednak dla pewności zrób jej "
4665
+ "kopię przed rozpoczęciem aktualizacji."
4666
+
4667
+ #: inc/admin/views/updates/0.9/step-welcome.php:5
4668
+ msgid "Click <strong>Yes, upgrade!</strong> button to start."
4669
+ msgstr "Kliknij <strong>Tak, zaktualizuj!</strong> aby zacząć."
4670
+
4671
+ #: inc/admin/views/updates/0.9/step-welcome.php:7
4672
+ msgid "No, back to Admin"
4673
+ msgstr "Nie, wróć do Admina"
4674
+
4675
+ #: inc/admin/views/updates/0.9/step-welcome.php:8
4676
+ msgid "Yes, upgrade!"
4677
+ msgstr "Tak, zaktualizuj!"
4678
+
4679
+ #: inc/admin/views/updates/0.9/update-wizard.php:6
4680
+ #: inc/admin/views/updates/0.9/update-wizard.php:19
4681
+ #, php-format
4682
+ msgid "LearnPress update version %s"
4683
+ msgstr "Aktualizacja LearnPress do wersji %s"
4684
+
4685
+ #: inc/attributes/course.php:137 inc/attributes/course.php:295
4686
+ #: inc/attributes/course.php:308 inc/attributes/course.php:310
4687
+ msgid "Attributes"
4688
+ msgstr "Atrybuty"
4689
+
4690
+ #: inc/attributes/course.php:207
4691
+ msgid "No terms found."
4692
+ msgstr "Nie znaleziono warunków."
4693
+
4694
+ #: inc/attributes/course.php:231
4695
+ #, php-format
4696
+ msgid "Edit &#8220;%s&#8221;"
4697
+ msgstr "Edytuj &#8220;%s&#8221;"
4698
+
4699
+ #: inc/attributes/course.php:238
4700
+ msgid "Clear"
4701
+ msgstr "Wyczyść"
4702
+
4703
+ #: inc/attributes/course.php:253
4704
+ msgid "Terms"
4705
+ msgstr "Warunki"
4706
+
4707
+ #: inc/attributes/course.php:306 inc/attributes/course.php:309
4708
+ msgid "Attribute"
4709
+ msgstr "Atrybuty"
4710
+
4711
+ #: inc/attributes/course.php:311
4712
+ msgid "Add New Attribute"
4713
+ msgstr "Dodaj nowy atrybut"
4714
+
4715
+ #: inc/attributes/course.php:312
4716
+ msgid "All Attributes"
4717
+ msgstr "Wszystkie atrybuty"
4718
+
4719
+ #: inc/attributes/course.php:356
4720
+ #, php-format
4721
+ msgid "Search Course %s"
4722
+ msgstr "Wyszukaj kurs %s"
4723
+
4724
+ #: inc/attributes/course.php:357
4725
+ #, php-format
4726
+ msgid "All Course %s"
4727
+ msgstr "Wszystkie kursy %s"
4728
+
4729
+ #: inc/attributes/course.php:358
4730
+ #, php-format
4731
+ msgid "Parent Course %s"
4732
+ msgstr "Rodzic kursu %s"
4733
+
4734
+ #: inc/attributes/course.php:359
4735
+ #, php-format
4736
+ msgid "Parent Course %s:"
4737
+ msgstr "Rodzic kursu %s:"
4738
+
4739
+ #: inc/attributes/course.php:360
4740
+ #, php-format
4741
+ msgid "Edit Course %s"
4742
+ msgstr "Edytuj kurs %s"
4743
+
4744
+ #: inc/attributes/course.php:361
4745
+ #, php-format
4746
+ msgid "Update Course %s"
4747
+ msgstr "Zaktualizuj kurs %s"
4748
+
4749
+ #: inc/attributes/course.php:362
4750
+ #, php-format
4751
+ msgid "Add New Course %s"
4752
+ msgstr "Dodaj nowy kurs %s"
4753
+
4754
+ #: inc/attributes/course.php:363
4755
+ #, php-format
4756
+ msgid "New Course %s"
4757
+ msgstr "Nowy kurs %s"
4758
+
4759
+ #: inc/attributes/course.php:364
4760
+ #, php-format
4761
+ msgid "No &quot;Course %s&quot; found"
4762
+ msgstr "Brak &quot;Kursu %s&quot; found"
4763
+
4764
+ #: inc/background-process/class-lp-background-query-items.php:83
4765
+ msgid "WP query plugins error!"
4766
+ msgstr "Błąd zapytania wtyczki WP!"
4767
+
4768
+ #: inc/background-process/class-lp-background-query-items.php:86
4769
+ msgid "WP query plugins empty!"
4770
+ msgstr "Puste zapytanie wtyczki WP!"
4771
+
4772
+ #: inc/cart/class-lp-cart.php:119
4773
+ msgid "Get cart should not be called before the wp_loaded action."
4774
+ msgstr "Koszyk nie powinien być wywoływany przed akcją wp_loaded."
4775
+
4776
+ #: inc/cart/class-lp-cart.php:144
4777
+ msgid "Sorry! This course is not purchasable."
4778
+ msgstr "Przepraszamy, ale ten kurs nie jest do kupienia."
4779
+
4780
+ #: inc/cart/class-lp-cart.php:149
4781
+ msgid "Sorry! The number of enrolled students has reached limit"
4782
+ msgstr "Przepraszamy! Liczba kursantów osiągnęła limit"
4783
+
4784
+ #: inc/cart/class-lp-cart.php:281
4785
+ #, php-format
4786
+ msgid ""
4787
+ "%s has been removed from your cart because it can no longer be purchased."
4788
+ msgstr "%s został usunięty z koszyka, ponieważ nie jest więcej kupiony."
4789
+
4790
+ #: inc/course/abstract-course.php:527
4791
+ msgid "You enrolled"
4792
+ msgstr "Dołączyłeś"
4793
+
4794
+ #: inc/course/abstract-course.php:531
4795
+ #, php-format
4796
+ msgctxt "students-html"
4797
+ msgid "You and one student enrolled"
4798
+ msgid_plural ""
4799
+ "You and <span class=\"course-students-number\">%1$s</span> students enrolled"
4800
+ msgstr[0] "Ty i jeden kursant dołączyliście"
4801
+ msgstr[1] ""
4802
+ "Ty i <span class=\"course-students-number\">%1$s</span> kursantów dołączyło"
4803
+ msgstr[2] ""
4804
+ "Ty i <span class=\"course-students-number\">%1$s</span> kursantów dołączyło"
4805
+
4806
+ #: inc/course/abstract-course.php:541
4807
+ #, php-format
4808
+ msgctxt "students-html"
4809
+ msgid "One student enrolled"
4810
+ msgid_plural ""
4811
+ "<span class=\"course-students-number\">%1$s</span> students enrolled"
4812
+ msgstr[0] "Jeden kursant dołączył"
4813
+ msgstr[1] ""
4814
+ "<span class=\"course-students-number\">%1$s</span> kursantów dołączyło"
4815
+ msgstr[2] ""
4816
+ "<span class=\"course-students-number\">%1$s</span> kursantów dołączyło"
4817
+
4818
+ #: inc/course/abstract-course.php:544
4819
+ msgid "No student enrolled"
4820
+ msgstr "Brak kursantów"
4821
+
4822
+ #: inc/course/abstract-course.php:799 inc/course/abstract-course.php:817
4823
+ #: inc/lesson/class-lp-lesson.php:103 inc/quiz/class-lp-quiz.php:516
4824
+ #, php-format
4825
+ msgid "The function %s doesn't exist"
4826
+ msgstr "Funkcja %s nie istnieje"
4827
+
4828
+ #: inc/course/abstract-course.php:1178
4829
+ #, php-format
4830
+ msgid "%d of %d items completed"
4831
+ msgstr "%d z %d elementów ukońćzonych"
4832
+
4833
+ #: inc/course/abstract-course.php:1181 inc/course/abstract-course.php:1183
4834
+ #, php-format
4835
+ msgid "%d%% completed"
4836
+ msgstr "%d%% ukończony"
4837
+
4838
+ #: inc/course/abstract-course.php:1651
4839
+ #, php-format
4840
+ msgid "This course will end within next %s"
4841
+ msgstr "Ten kurs zostanie ukończony w przeciągu następnych %s"
4842
+
4843
+ #: inc/course/abstract-course.php:1758
4844
+ msgctxt "Text of Buy this course with external link"
4845
+ msgid "Buy this course"
4846
+ msgstr ""
4847
+
4848
+ #: inc/course/abstract-course.php:1808
4849
+ msgid "Tags: "
4850
+ msgstr "Tagi: "
4851
+
4852
+ #: inc/course/lp-course-functions.php:169
4853
+ msgctxt "slug"
4854
+ msgid "uncategorized"
4855
+ msgstr "bez-kategorii"
4856
+
4857
+ #: inc/course/lp-course-functions.php:217
4858
+ #, php-format
4859
+ msgid "The course %d does not exists"
4860
+ msgstr "Kurs %d nie istnieje"
4861
+
4862
+ #: inc/course/lp-course-functions.php:830
4863
+ msgid "Permalink only available if the item is already assigned to a course."
4864
+ msgstr "Link jest widoczny wyłącznie, gdy przystąpiłeś do kursu."
4865
+
4866
+ #: inc/course/lp-course-functions.php:1039
4867
+ #, php-format
4868
+ msgid "Welcome back, %s"
4869
+ msgstr "Witamy spowrotem, %s"
4870
+
4871
+ #: inc/curds/class-lp-course-curd.php:27
4872
+ msgid "Course does not exist."
4873
+ msgstr "Kurs nie istnieje."
4874
+
4875
+ #: inc/curds/class-lp-course-curd.php:105
4876
+ #: inc/curds/class-lp-lesson-curd.php:101
4877
+ #: inc/curds/class-lp-question-curd.php:161
4878
+ #: inc/curds/class-lp-quiz-curd.php:146
4879
+ msgid "<p>Op! ID not found</p>"
4880
+ msgstr "<p>Ups! ID nie znalezione </p>"
4881
+
4882
+ #: inc/curds/class-lp-course-curd.php:109
4883
+ msgid "<p>Op! The course does not exist</p>"
4884
+ msgstr "<p>Op! Kurs nie istnieje!</p>"
4885
+
4886
+ #: inc/curds/class-lp-course-curd.php:114
4887
+ msgid "<p>Sorry! You don't have permission to duplicate this course</p>"
4888
+ msgstr "<p Sorry! nie masz dostępu do duplikowanie tego kursu</p>"
4889
+
4890
+ #: inc/curds/class-lp-course-curd.php:120
4891
+ msgid "<p>Sorry! Failed to duplicate course!</p>"
4892
+ msgstr "<p>Przepraszamy! Błąd duplikowania!!</p>"
4893
+
4894
+ #: inc/curds/class-lp-lesson-curd.php:34
4895
+ msgid "New Lesson"
4896
+ msgstr "Nowa lekcja"
4897
+
4898
+ #: inc/curds/class-lp-lesson-curd.php:105
4899
+ msgid "<p>Op! The lesson does not exist</p>"
4900
+ msgstr "<p>Ups ! Lekcja nie istnieje</p>"
4901
+
4902
+ #: inc/curds/class-lp-lesson-curd.php:110
4903
+ msgid "<p>Sorry! You don't have permission to duplicate this lesson</p>"
4904
+ msgstr "<p>Przepraszamy! Nie masz praw do skopiowania tej lekcji</p>"
4905
+
4906
+ #: inc/curds/class-lp-lesson-curd.php:117
4907
+ msgid "<p>Sorry! Failed to duplicate lesson!</p>"
4908
+ msgstr "<p>Przepraszamy! Przy kopiowaniu lekcji wystąpił błąd!</p>"
4909
+
4910
+ #: inc/curds/class-lp-lesson-curd.php:138
4911
+ #, php-format
4912
+ msgid "Invalid lesson with ID \"%d\"."
4913
+ msgstr "Nieprawidłowa lekcja o ID \"%d\"."
4914
+
4915
+ #: inc/curds/class-lp-order-curd.php:430
4916
+ #, php-format
4917
+ msgid "Invalid order with ID \"%d\"."
4918
+ msgstr "Nieprawidłowe zamówienie o ID \"%d\"."
4919
+
4920
+ #: inc/curds/class-lp-order-curd.php:485
4921
+ #: templates/checkout/order-received.php:61
4922
+ msgid "Invalid order."
4923
+ msgstr "Niepoprawne zamówienie."
4924
+
4925
+ #: inc/curds/class-lp-order-curd.php:489
4926
+ msgid "Order is already assigned."
4927
+ msgstr "Zamówienie zostało już przydzielone."
4928
+
4929
+ #: inc/curds/class-lp-order-curd.php:495
4930
+ msgid "User does not exist."
4931
+ msgstr "Użytkownik nie istnieje."
4932
+
4933
+ #: inc/curds/class-lp-question-curd.php:28
4934
+ msgid "Question does not exist."
4935
+ msgstr "Pytanie nie istnieje."
4936
+
4937
+ #: inc/curds/class-lp-question-curd.php:165
4938
+ msgid "<p>Op! The question does not exist</p>"
4939
+ msgstr "<p>Ups! Pytanie nie istnieje</p>"
4940
+
4941
+ #: inc/curds/class-lp-question-curd.php:170
4942
+ msgid "<p>Sorry! You don't have permission to duplicate this question</p>"
4943
+ msgstr "<p Sorry! nie masz dostępu do duplikowanie tego pytania</p>"
4944
+
4945
+ #: inc/curds/class-lp-question-curd.php:180
4946
+ msgid "<p>Sorry! Failed to duplicate question!</p>"
4947
+ msgstr "<p>Przepraszamy! Przy kopiowaniu pytania wystąpił błąd!</p>"
4948
+
4949
+ #: inc/curds/class-lp-question-curd.php:241
4950
+ #, php-format
4951
+ msgid "Invalid question with ID \"%d\"."
4952
+ msgstr "Nieprawidłowe pytanie o ID \"%d\"."
4953
+
4954
+ #: inc/curds/class-lp-quiz-curd.php:29
4955
+ msgid "Quiz does not exist."
4956
+ msgstr "Test nie istnieje."
4957
+
4958
+ #: inc/curds/class-lp-quiz-curd.php:44
4959
+ #, php-format
4960
+ msgid "Invalid quiz with ID \"%d\"."
4961
+ msgstr "Nieprawidłowe test o ID \"%d\"."
4962
+
4963
+ #: inc/curds/class-lp-quiz-curd.php:150
4964
+ msgid "<p>Op! The quiz does not exist</p>"
4965
+ msgstr "<p>Ups! Test nie istnieje</p>"
4966
+
4967
+ #: inc/curds/class-lp-quiz-curd.php:155
4968
+ msgid "<p>Sorry! You have not permission to duplicate this quiz</p>"
4969
+ msgstr "<p Sorry! nie masz dostępu do duplikowanie tego testu</p>"
4970
+
4971
+ #: inc/curds/class-lp-quiz-curd.php:162
4972
+ msgid "<p>Sorry! Failed to duplicate quiz!</p>"
4973
+ msgstr "<p>Przepraszamy! Przy kopiowaniu testu wystąpił błąd!</p>"
4974
+
4975
+ #: inc/curds/class-lp-user-curd.php:1079 inc/curds/class-lp-user-curd.php:1237
4976
+ msgid "course"
4977
+ msgstr "kurs"
4978
+
4979
+ #: inc/curds/class-lp-user-curd.php:1080 inc/curds/class-lp-user-curd.php:1238
4980
+ msgid "courses"
4981
+ msgstr "kursy"
4982
+
4983
+ #: inc/curds/class-lp-user-curd.php:1379
4984
+ msgid "quiz"
4985
+ msgstr "test"
4986
+
4987
+ #: inc/curds/class-lp-user-curd.php:1380
4988
+ msgid "quizzes"
4989
+ msgstr "testy"
4990
+
4991
+ #: inc/curds/class-lp-user-curd.php:1437
4992
+ msgid "Please provide a valid email address."
4993
+ msgstr "Proszę podać poprawny adres email."
4994
+
4995
+ #: inc/curds/class-lp-user-curd.php:1441
4996
+ msgid ""
4997
+ "An account is already registered with your email address. Please log in."
4998
+ msgstr "Konto o tym emailu już istnieje. Zaloguj się."
4999
+
5000
+ #: inc/curds/class-lp-user-curd.php:1447
5001
+ msgid "Please enter a valid account username."
5002
+ msgstr "Proszę podać poprawną nazwę użytkownika."
5003
+
5004
+ #: inc/curds/class-lp-user-curd.php:1451
5005
+ msgid ""
5006
+ "An account is already registered with that username. Please choose another."
5007
+ msgstr "Konto z tą nazwą użytkownika już istnieje. Proszę wybrać inną."
5008
+
5009
+ #: inc/curds/class-lp-user-curd.php:1463
5010
+ msgid "Failed to create user"
5011
+ msgstr "Błąd tworzenia użytkownika"
5012
+
5013
+ #: inc/curds/class-lp-user-item-curd.php:21
5014
+ msgid "Quiz does not exists."
5015
+ msgstr "Test nie istnieje."
5016
+
5017
+ #: inc/curds/class-lp-user-item-curd.php:34
5018
+ msgid "Invalid quiz."
5019
+ msgstr "Nieprawidłowy test."
5020
+
5021
+ #: inc/custom-post-types/abstract.php:473
5022
+ #: inc/custom-post-types/abstract.php:476
5023
+ msgid "updated."
5024
+ msgstr "zaktualizowane."
5025
+
5026
+ #: inc/custom-post-types/abstract.php:474
5027
+ msgid "Custom field updated."
5028
+ msgstr "Niestandardowe pole zaktualizowane."
5029
+
5030
+ #: inc/custom-post-types/abstract.php:475
5031
+ msgid "Custom field deleted."
5032
+ msgstr "Niestandardowe pole usunięte."
5033
+
5034
+ #: inc/custom-post-types/abstract.php:478
5035
+ #, php-format
5036
+ msgid "Lesson restored to revision from %s"
5037
+ msgstr "Lekcja przywrócona do podglądu z %s"
5038
+
5039
+ #: inc/custom-post-types/abstract.php:479
5040
+ msgid "published."
5041
+ msgstr "opublikowane."
5042
+
5043
+ #: inc/custom-post-types/abstract.php:480
5044
+ msgid "saved."
5045
+ msgstr "zapisane."
5046
+
5047
+ #: inc/custom-post-types/abstract.php:481
5048
+ msgid "submitted."
5049
+ msgstr "zatwierdzono."
5050
+
5051
+ #: inc/custom-post-types/abstract.php:483
5052
+ #, php-format
5053
+ msgid "scheduled for: <strong>%1$s</strong>."
5054
+ msgstr "zaplanowane na: <strong>%1$s</strong>."
5055
+
5056
+ #: inc/custom-post-types/abstract.php:485
5057
+ msgid "M j, Y @ G:i"
5058
+ msgstr "M j, Y @ G:i"
5059
+
5060
+ #: inc/custom-post-types/abstract.php:487
5061
+ msgid "draft updated."
5062
+ msgstr "wersja robocza zaktualizowana."
5063
+
5064
+ #: inc/custom-post-types/course.php:72
5065
+ msgctxt "Post Type General Name"
5066
+ msgid "Courses"
5067
+ msgstr "Kursy"
5068
+
5069
+ #: inc/custom-post-types/course.php:73
5070
+ msgctxt "Post Type Singular Name"
5071
+ msgid "Course"
5072
+ msgstr "Kurs"
5073
+
5074
+ #: inc/custom-post-types/course.php:75
5075
+ msgid "Parent Item:"
5076
+ msgstr "Rodzic elementu:"
5077
+
5078
+ #: inc/custom-post-types/course.php:77
5079
+ msgid "View Course"
5080
+ msgstr "Zobacz kurs"
5081
+
5082
+ #: inc/custom-post-types/course.php:78
5083
+ msgid "Add New Course"
5084
+ msgstr "Dodaj nowy kurs"
5085
+
5086
+ #: inc/custom-post-types/course.php:79 inc/custom-post-types/lesson.php:185
5087
+ #: inc/custom-post-types/order.php:849 inc/custom-post-types/question.php:173
5088
+ msgid "Add New"
5089
+ msgstr "Dodaj nowy"
5090
+
5091
+ #: inc/custom-post-types/course.php:80
5092
+ msgid "Edit Course"
5093
+ msgstr "Edytuj kurs"
5094
+
5095
+ #: inc/custom-post-types/course.php:81
5096
+ msgid "Update Course"
5097
+ msgstr "Zaktualizuj kurs"
5098
+
5099
+ #: inc/custom-post-types/course.php:82
5100
+ msgid "Search Courses"
5101
+ msgstr "Wyszukaj kursy"
5102
+
5103
+ #: inc/custom-post-types/course.php:83
5104
+ #, php-format
5105
+ msgid ""
5106
+ "You haven't had any courses yet. Click <a href=\"%s\">Add new</a> to start"
5107
+ msgstr ""
5108
+ "Nie masz jeszcze żadnych kursów. Kliknij <a href=\"%s\">Dodaj nowy</a> aby "
5109
+ "zacząć"
5110
+
5111
+ #: inc/custom-post-types/course.php:84
5112
+ msgid "No course found in Trash"
5113
+ msgstr "Nie znaleziono kursów w śmieciach"
5114
+
5115
+ #: inc/custom-post-types/course.php:124 inc/custom-post-types/course.php:126
5116
+ msgid "Course Categories"
5117
+ msgstr "Kategorie kursu"
5118
+
5119
+ #: inc/custom-post-types/course.php:127 inc/custom-post-types/course.php:128
5120
+ msgid "Category"
5121
+ msgstr "Kategoria"
5122
+
5123
+ #: inc/custom-post-types/course.php:129
5124
+ msgid "Add New Course Category"
5125
+ msgstr "Dodaj nową kategorie kursu"
5126
+
5127
+ #: inc/custom-post-types/course.php:130
5128
+ msgid "All Categories"
5129
+ msgstr "Wszystkie Kategorie"
5130
+
5131
+ #: inc/custom-post-types/course.php:141
5132
+ msgctxt "slug"
5133
+ msgid "course-category"
5134
+ msgstr "etykieta-kategorii"
5135
+
5136
+ #: inc/custom-post-types/course.php:152
5137
+ msgid "Course Tags"
5138
+ msgstr "Etykiety kursów"
5139
+
5140
+ #: inc/custom-post-types/course.php:153 inc/custom-post-types/question.php:146
5141
+ #: inc/custom-post-types/question.php:147 inc/updates/_update-from-0.9.php:1194
5142
+ #: inc/updates/_update-from-0.9.php:1195 inc/updates/_update-from-0.9.php:1196
5143
+ #: inc/updates/_update-from-0.9.php:1217 inc/updates/_update-from-0.9.php:1218
5144
+ msgid "Tag"
5145
+ msgstr "Tag"
5146
+
5147
+ #: inc/custom-post-types/course.php:154
5148
+ msgid "Search Course Tags"
5149
+ msgstr "Wyszukaj tagi kursów"
5150
+
5151
+ #: inc/custom-post-types/course.php:155
5152
+ msgid "Popular Course Tags"
5153
+ msgstr "Popularne etykiety kursów"
5154
+
5155
+ #: inc/custom-post-types/course.php:156
5156
+ msgid "All Course Tags"
5157
+ msgstr "Wszystkie etykiety kursu"
5158
+
5159
+ #: inc/custom-post-types/course.php:159
5160
+ msgid "Edit Course Tag"
5161
+ msgstr "Edytuj tag kursu"
5162
+
5163
+ #: inc/custom-post-types/course.php:160
5164
+ msgid "Update Course Tag"
5165
+ msgstr "Zaktualizuj etykietę kursu"
5166
+
5167
+ #: inc/custom-post-types/course.php:161
5168
+ msgid "Add New Course Tag"
5169
+ msgstr "Dodaj nową etykietę kursu"
5170
+
5171
+ #: inc/custom-post-types/course.php:162
5172
+ msgid "New Course Tag Name"
5173
+ msgstr "Etykieta nowego kursu"
5174
+
5175
+ #: inc/custom-post-types/course.php:163
5176
+ msgid "Separate tags with commas"
5177
+ msgstr "Oddzielaj tagi przecinkiem"
5178
+
5179
+ #: inc/custom-post-types/course.php:164
5180
+ msgid "Add or remove tags"
5181
+ msgstr "Dodaj lub usuń tagi"
5182
+
5183
+ #: inc/custom-post-types/course.php:165
5184
+ msgid "Choose from the most used tags"
5185
+ msgstr "Wybierz z najczęściej używanych tagów"
5186
+
5187
+ #: inc/custom-post-types/course.php:175
5188
+ msgctxt "slug"
5189
+ msgid "course-tag"
5190
+ msgstr "etykieta-kursu"
5191
+
5192
+ #: inc/custom-post-types/course.php:212
5193
+ msgid "Create a new"
5194
+ msgstr "Stwórz nowy"
5195
+
5196
+ #: inc/custom-post-types/course.php:345
5197
+ msgid "Sorry! You can not update a course while it is being viewed!"
5198
+ msgstr "Sorry! Nie możesz załadować kursu, kiedy ten jest przeglądany!"
5199
+
5200
+ #: inc/custom-post-types/course.php:516
5201
+ msgid "Course Settings"
5202
+ msgstr "Ustawienia kursu"
5203
+
5204
+ #: inc/custom-post-types/course.php:538 inc/custom-post-types/lesson.php:312
5205
+ #: inc/custom-post-types/quiz.php:253 inc/custom-post-types/quiz.php:338
5206
+ #: templates/content-quiz/intro.php:28
5207
+ msgid "Duration"
5208
+ msgstr "Czas trwania"
5209
+
5210
+ #: inc/custom-post-types/course.php:541
5211
+ msgid "The duration of the course."
5212
+ msgstr "Czas trwania kursu."
5213
+
5214
+ #: inc/custom-post-types/course.php:545
5215
+ msgid "Maximum Students"
5216
+ msgstr "Max kursantów"
5217
+
5218
+ #: inc/custom-post-types/course.php:548
5219
+ msgid "Maximum number of students who can enroll in this course."
5220
+ msgstr "Maksymalna liczba kursantów, którzy mogą dołączyć do kursu."
5221
+
5222
+ #: inc/custom-post-types/course.php:552
5223
+ msgid "Students Enrolled"
5224
+ msgstr "Uczestnicy"
5225
+
5226
+ #: inc/custom-post-types/course.php:555
5227
+ msgid "How many students have taken this course."
5228
+ msgstr "Ilu kursantów już wzięło udział w kursie."
5229
+
5230
+ #: inc/custom-post-types/course.php:566
5231
+ msgid "Re-take Course"
5232
+ msgstr "Spróbuj ponownie"
5233
+
5234
+ #: inc/custom-post-types/course.php:570
5235
+ msgid ""
5236
+ "How many times the user can re-take this course. Set to 0 to disable re-"
5237
+ "taking"
5238
+ msgstr ""
5239
+ "Ile razy kursant może wziąć udział ponownie w kursie. Wybierz 0, aby wyłączyć"
5240
+
5241
+ #: inc/custom-post-types/course.php:574
5242
+ msgid "Featured"
5243
+ msgstr "Polecany"
5244
+
5245
+ #: inc/custom-post-types/course.php:577
5246
+ msgid "Set course as featured."
5247
+ msgstr "Ustaw kurs jako polecany."
5248
+
5249
+ #: inc/custom-post-types/course.php:581
5250
+ msgid "Block Lessons Content"
5251
+ msgstr "Blokuj treść Lekcji"
5252
+
5253
+ #: inc/custom-post-types/course.php:584
5254
+ msgid "Block lessons content when completed course."
5255
+ msgstr ""
5256
+
5257
+ #: inc/custom-post-types/course.php:588
5258
+ msgid "External Link to buy Course"
5259
+ msgstr "Link zewnętrzny, aby kupić kurs"
5260
+
5261
+ #: inc/custom-post-types/course.php:591
5262
+ msgid "Redirect to this url when you press button buy this course."
5263
+ msgstr "Przekieruj na ten URL kiedy klikniesz na przycisk \"kup ten kurs\"."
5264
+
5265
+ #: inc/custom-post-types/course.php:619
5266
+ msgid "The method to assess the result of a student for a course."
5267
+ msgstr "Metoda oceniania kursantów podczas kursu."
5268
+
5269
+ #: inc/custom-post-types/course.php:622
5270
+ msgid ""
5271
+ "<br /><strong>Note! </strong>No final quiz in course, please add a final quiz"
5272
+ msgstr ""
5273
+ "<br /><strong>Wiadomość! </strong>Brak testu kończącego, proszę dodaj go"
5274
+
5275
+ #: inc/custom-post-types/course.php:639
5276
+ msgid ""
5277
+ "This is conditional \"passing grade\" of Final quiz will apply for result of "
5278
+ "this course. When you change it here, the \"passing grade\" also change with "
5279
+ "new value for the Final quiz."
5280
+ msgstr ""
5281
+ "Warunkiem zaliczenia tego kursu jest złożenie oceny końcowej z testu "
5282
+ "końcowego. Kiedy zmienisz to tutaj, \"ocena pozytywna\" również zmieni się z "
5283
+ "nową wartością do końcowego testu."
5284
+
5285
+ #: inc/custom-post-types/course.php:645
5286
+ msgid ""
5287
+ "<p>Evaluate by number of lessons completed per number of total lessons.</p>"
5288
+ msgstr "<p>Na podstawie liczby lekcji ukończonych do łącznej liczby testów</p>"
5289
+
5290
+ #: inc/custom-post-types/course.php:646
5291
+ msgid ""
5292
+ "E.g: Course has 10 lessons and user completed 5 lessons then the result = "
5293
+ "5/10 = 50.%"
5294
+ msgstr ""
5295
+ "Na przykład kurs ma 10 lekcji, użytkownik ukończył 5, to wynik to = 5/10 = "
5296
+ "50%"
5297
+
5298
+ #: inc/custom-post-types/course.php:647
5299
+ msgid ""
5300
+ "Evaluate by results of final quiz in course. You have to add a quiz into end "
5301
+ "of course."
5302
+ msgstr ""
5303
+ "Na podstawie wyniku testu kończącego kurs. Musisz dodać test na końcu kursu."
5304
+
5305
+ #: inc/custom-post-types/course.php:648
5306
+ msgid ""
5307
+ "Evaluate by achieved points of completed quizzes per total point of all "
5308
+ "quizzes."
5309
+ msgstr ""
5310
+ "Na podstawie średniej ilości punktów z testów ukończonych do łączne liczby "
5311
+ "możliwych punktów z wszystkich testów."
5312
+
5313
+ #: inc/custom-post-types/course.php:649
5314
+ msgid ""
5315
+ "Evaluate by achieved points of quizzes passed per total point of all quizzes."
5316
+ msgstr ""
5317
+ "Na podstawie średniej ilości punktów z testów zdanych do łączne liczby "
5318
+ "możliwych punktów z wszystkich testów."
5319
+
5320
+ #: inc/custom-post-types/course.php:650
5321
+ msgid ""
5322
+ "<p>Evaluate by number of quizzes completed per number of total quizzes.</p>"
5323
+ msgstr ""
5324
+ "<p>Na podstawie liczby ukończonych testów do łącznej liczby testów.</p>"
5325
+
5326
+ #: inc/custom-post-types/course.php:651
5327
+ msgid ""
5328
+ "<p>E.g: Course has 10 quizzes and user completed 5 quizzes then the result = "
5329
+ "5/10 = 50%.</p>"
5330
+ msgstr ""
5331
+ "<p>Na przykład kurs ma 10 testów, użytkownik ukończył 5, to wynik to = 5/10 "
5332
+ "= 50%.</p>"
5333
+
5334
+ #: inc/custom-post-types/course.php:658
5335
+ msgid "Assessment"
5336
+ msgstr "Ocena"
5337
+
5338
+ #: inc/custom-post-types/course.php:664
5339
+ msgid "Course result"
5340
+ msgstr "Wynik kursu"
5341
+
5342
+ #: inc/custom-post-types/course.php:669
5343
+ msgid "Evaluate via lessons"
5344
+ msgstr "Na podstawie lekcji"
5345
+
5346
+ #: inc/custom-post-types/course.php:671
5347
+ msgid "Evaluate via results of the final quiz"
5348
+ msgstr "Na podstawie testu kończącego"
5349
+
5350
+ #: inc/custom-post-types/course.php:674
5351
+ msgid "Evaluate via results of quizzes"
5352
+ msgstr "Na podstawie wyniku testów"
5353
+
5354
+ #: inc/custom-post-types/course.php:676
5355
+ msgid "Evaluate via results of quizzes passed"
5356
+ msgstr "Na podstawie zaliczonych testów"
5357
+
5358
+ #: inc/custom-post-types/course.php:678
5359
+ msgid "Evaluate via quizzes"
5360
+ msgstr "Na podstawie testów"
5361
+
5362
+ #: inc/custom-post-types/course.php:685
5363
+ msgid "Passing condition value"
5364
+ msgstr "Próg zdawalności"
5365
+
5366
+ #: inc/custom-post-types/course.php:690
5367
+ msgid ""
5368
+ "The percentage of quiz result or completed lessons to finish the course."
5369
+ msgstr "Minimalna liczba procent z testu, aby ukończyć pozytywnie kurs."
5370
+
5371
+ #: inc/custom-post-types/course.php:753
5372
+ #, php-format
5373
+ msgid ""
5374
+ "This course requires enrollment and the suggested price is <strong>"
5375
+ "%s</strong>"
5376
+ msgstr "Kurs wymaga rejestracji, a sugerowana cena wynosi <strong>%s</strong>"
5377
+
5378
+ #: inc/custom-post-types/course.php:761
5379
+ msgid "This course is free."
5380
+ msgstr "Ten kurs jest darmowy."
5381
+
5382
+ #: inc/custom-post-types/course.php:768
5383
+ #, php-format
5384
+ msgid "Course price in <strong>%s</strong> currency."
5385
+ msgstr "Cena kursu w <strong>%s</strong>."
5386
+
5387
+ #: inc/custom-post-types/course.php:782 inc/custom-post-types/course.php:1243
5388
+ #: inc/custom-post-types/course.php:1250
5389
+ #: templates/emails/order-items-table.php:59
5390
+ msgid "Price"
5391
+ msgstr "Cena"
5392
+
5393
+ #: inc/custom-post-types/course.php:792
5394
+ msgid "Sale Price"
5395
+ msgstr "Cena sprzedaży"
5396
+
5397
+ #: inc/custom-post-types/course.php:799
5398
+ #, php-format
5399
+ msgid "Course sale price in <strong>%s</strong> currency."
5400
+ msgstr "Cena kursu w<strong>%s</strong>."
5401
+
5402
+ #: inc/custom-post-types/course.php:800
5403
+ msgid "Leave blank to remove sale price."
5404
+ msgstr "Zostaw puste by usunąć cenę sprzedaży."
5405
+
5406
+ #: inc/custom-post-types/course.php:802
5407
+ msgid "Schedule"
5408
+ msgstr "Harmonogram"
5409
+
5410
+ #: inc/custom-post-types/course.php:807
5411
+ msgid "Sale start date"
5412
+ msgstr "Data rozpoczęcia sprzedaży"
5413
+
5414
+ #: inc/custom-post-types/course.php:815
5415
+ msgid "Sale end date"
5416
+ msgstr "Data zakończenia sprzedaży"
5417
+
5418
+ #: inc/custom-post-types/course.php:827
5419
+ msgid "Price set by Admin"
5420
+ msgstr "Cena ustalona przez Administratora"
5421
+
5422
+ #: inc/custom-post-types/course.php:831
5423
+ msgid "Not set"
5424
+ msgstr "Nie wybrano"
5425
+
5426
+ #: inc/custom-post-types/course.php:834
5427
+ msgid "Course Suggestion Price"
5428
+ msgstr "Sugerowana cena kursu"
5429
+
5430
+ #: inc/custom-post-types/course.php:839
5431
+ msgid "The course price you want to suggest for admin to set."
5432
+ msgstr "Sugerowana cena kursu do zatwierdzenia przez admina."
5433
+
5434
+ #: inc/custom-post-types/course.php:850
5435
+ msgid "No require enrollment"
5436
+ msgstr "Nie wymaga dołączenia"
5437
+
5438
+ #: inc/custom-post-types/course.php:853
5439
+ msgid "Require users logged in to study or public to all."
5440
+ msgstr "Czy wymagać od użytkowników rejestracji/zalogowania."
5441
+
5442
+ #: inc/custom-post-types/course.php:893 inc/custom-post-types/course.php:899
5443
+ #: inc/custom-post-types/course.php:1240 inc/custom-post-types/course.php:1247
5444
+ #: inc/custom-post-types/lesson.php:307 inc/custom-post-types/question.php:319
5445
+ #: inc/custom-post-types/quiz.php:335
5446
+ msgid "Author"
5447
+ msgstr "Autor"
5448
+
5449
+ #: inc/custom-post-types/course.php:921
5450
+ msgid "Review Logs"
5451
+ msgstr "Sprawdź opinie"
5452
+
5453
+ #: inc/custom-post-types/course.php:970
5454
+ msgid "Course Video"
5455
+ msgstr "Wideo kursu"
5456
+
5457
+ #: inc/custom-post-types/course.php:975
5458
+ msgid "Video ID"
5459
+ msgstr "ID Wideo"
5460
+
5461
+ #: inc/custom-post-types/course.php:978
5462
+ msgid "The ID of Youtube or Vimeo video"
5463
+ msgstr "ID filmiku na Youtube lub Vimeo"
5464
+
5465
+ #: inc/custom-post-types/course.php:982
5466
+ msgid "Video Type"
5467
+ msgstr "Typ Wideo"
5468
+
5469
+ #: inc/custom-post-types/course.php:985
5470
+ msgid "Chose video type"
5471
+ msgstr "Wybierz typ Wideo"
5472
+
5473
+ #: inc/custom-post-types/course.php:988
5474
+ msgid "Youtube"
5475
+ msgstr "Youtube"
5476
+
5477
+ #: inc/custom-post-types/course.php:989
5478
+ msgid "Vimeo"
5479
+ msgstr "Vimeo"
5480
+
5481
+ #: inc/custom-post-types/course.php:993
5482
+ msgid "Embed width"
5483
+ msgstr "Szerokość osadzenia"
5484
+
5485
+ #: inc/custom-post-types/course.php:996
5486
+ msgid "Set width of embed"
5487
+ msgstr "Wybierz szerokość osadzenia"
5488
+
5489
+ #: inc/custom-post-types/course.php:1000
5490
+ msgid "Embed height"
5491
+ msgstr "Wysokość osadzenia"
5492
+
5493
+ #: inc/custom-post-types/course.php:1003
5494
+ msgid "Set height of embed"
5495
+ msgstr "Wybierz wysokość osadzenia"
5496
+
5497
+ #: inc/custom-post-types/course.php:1125
5498
+ msgid "Course has been approved by Reviewer"
5499
+ msgstr "Kurs został zaakceptowany przez Recenzenta"
5500
+
5501
+ #: inc/custom-post-types/course.php:1130
5502
+ msgid "Course has been rejected by Reviewer"
5503
+ msgstr "Kurs został odrzucony przez Recenzenta"
5504
+
5505
+ #: inc/custom-post-types/course.php:1135
5506
+ #, php-format
5507
+ msgid "Course has been submitted by %s"
5508
+ msgstr "Kurs został złożony przez %s"
5509
+
5510
+ #: inc/custom-post-types/course.php:1140
5511
+ msgid "Course has been updated by Reviewer"
5512
+ msgstr "Kurs został zaktualizowany przez Recenzenta"
5513
+
5514
+ #: inc/custom-post-types/course.php:1241 inc/custom-post-types/course.php:1248
5515
+ msgid "Content"
5516
+ msgstr "Zawartość"
5517
+
5518
+ #: inc/custom-post-types/course.php:1302
5519
+ #, php-format
5520
+ msgid "%d section"
5521
+ msgid_plural "%d sections"
5522
+ msgstr[0] "%d sekcja"
5523
+ msgstr[1] "%d sekcje"
5524
+ msgstr[2] "%d sekcji"
5525
+
5526
+ #: inc/custom-post-types/course.php:1302
5527
+ msgid "0 section"
5528
+ msgstr "0 sekcji"
5529
+
5530
+ #: inc/custom-post-types/course.php:1304
5531
+ #: templates/widgets/featured-courses/default.php:86
5532
+ #: templates/widgets/popular-courses/default.php:81
5533
+ #: templates/widgets/recent-courses/default.php:86
5534
+ #, php-format
5535
+ msgid "%d lesson"
5536
+ msgid_plural "%d lessons"
5537
+ msgstr[0] "Jedna lekcja"
5538
+ msgstr[1] "%d lekcja"
5539
+ msgstr[2] "%d lekcje"
5540
+
5541
+ #: inc/custom-post-types/course.php:1304
5542
+ msgid "0 lesson"
5543
+ msgstr "0 lekcji"
5544
+
5545
+ #: inc/custom-post-types/course.php:1306
5546
+ #, php-format
5547
+ msgid "%d quiz"
5548
+ msgid_plural "%d quizzes"
5549
+ msgstr[0] "%d test"
5550
+ msgstr[1] "%d testy"
5551
+ msgstr[2] "%d testów"
5552
+
5553
+ #: inc/custom-post-types/course.php:1306
5554
+ msgid "0 quiz"
5555
+ msgstr "0 testów"
5556
+
5557
+ #: inc/custom-post-types/course.php:1313
5558
+ msgid "No content"
5559
+ msgstr "Brak treści"
5560
+
5561
+ #: inc/custom-post-types/course.php:1333
5562
+ msgid "No required enroll"
5563
+ msgstr "Nie wymagane dołączenie"
5564
+
5565
+ #: inc/custom-post-types/lesson.php:95 inc/custom-post-types/question.php:64
5566
+ #: inc/custom-post-types/quiz.php:64
5567
+ #, php-format
5568
+ msgid "Unassigned %s"
5569
+ msgstr "Nieprzypisany %s"
5570
+
5571
+ #: inc/custom-post-types/lesson.php:111
5572
+ #, php-format
5573
+ msgid "Preview %s"
5574
+ msgstr "Podgląd %s"
5575
+
5576
+ #: inc/custom-post-types/lesson.php:128
5577
+ #, php-format
5578
+ msgid "No Preview %s"
5579
+ msgstr "Brak podglądu %s"
5580
+
5581
+ #: inc/custom-post-types/lesson.php:179 inc/custom-post-types/lesson.php:180
5582
+ #: inc/custom-post-types/lesson.php:183
5583
+ #: templates/widgets/course-info/default.php:29
5584
+ msgid "Lessons"
5585
+ msgstr "Lekcje"
5586
+
5587
+ #: inc/custom-post-types/lesson.php:182
5588
+ msgid "Add New Lesson"
5589
+ msgstr "Dodaj nową lekcję"
5590
+
5591
+ #: inc/custom-post-types/lesson.php:184
5592
+ msgid "View Lesson"
5593
+ msgstr "Zobacz lekcję"
5594
+
5595
+ #: inc/custom-post-types/lesson.php:186
5596
+ msgid "Edit Lesson"
5597
+ msgstr "Edytuj lekcję"
5598
+
5599
+ #: inc/custom-post-types/lesson.php:187
5600
+ msgid "Update Lesson"
5601
+ msgstr "Zaktualizuj lekcję"
5602
+
5603
+ #: inc/custom-post-types/lesson.php:188
5604
+ msgid "Search Lessons"
5605
+ msgstr "Wyszukaj lekcje"
5606
+
5607
+ #: inc/custom-post-types/lesson.php:189
5608
+ msgid "No lesson found"
5609
+ msgstr "Nie znaleziono lekcji"
5610
+
5611
+ #: inc/custom-post-types/lesson.php:190
5612
+ msgid "No lesson found in Trash"
5613
+ msgstr "Nie znaleziono lekcji w śmieciach"
5614
+
5615
+ #: inc/custom-post-types/lesson.php:224
5616
+ msgid "Lesson Settings"
5617
+ msgstr "Ustawienia lekcji"
5618
+
5619
+ #: inc/custom-post-types/lesson.php:228
5620
+ msgid "Lesson Duration"
5621
+ msgstr "Czas trwania lekcji"
5622
+
5623
+ #: inc/custom-post-types/lesson.php:232
5624
+ msgid "Duration of the lesson. Set 0 to disable."
5625
+ msgstr "Czas trwania lekcji. Wybierz 0, aby wyłączyć."
5626
+
5627
+ #: inc/custom-post-types/lesson.php:236
5628
+ msgid "Preview Lesson"
5629
+ msgstr "Podgląd lekcji"
5630
+
5631
+ #: inc/custom-post-types/lesson.php:239
5632
+ msgid ""
5633
+ "If this is a preview lesson, then student can view this lesson content "
5634
+ "without taking the course."
5635
+ msgstr ""
5636
+ "Jeżeli włączona jest lekcja demonstracyjna, to każdy kursant może zobaczyć "
5637
+ "zawartość lekcji, bez dołączenia do kursu."
5638
+
5639
+ #: inc/custom-post-types/lesson.php:311
5640
+ msgid "Format"
5641
+ msgstr "Format"
5642
+
5643
+ #: inc/custom-post-types/lesson.php:366
5644
+ msgid "Standard"
5645
+ msgstr "Standardowy"
5646
+
5647
+ #: inc/custom-post-types/lesson.php:448
5648
+ msgid "Please enter the title of the lesson"
5649
+ msgstr "Proszę podać tytuł lekcji"
5650
+
5651
+ #: inc/custom-post-types/lesson.php:490 inc/custom-post-types/question.php:513
5652
+ #: inc/custom-post-types/quiz.php:610
5653
+ msgid "Assigned"
5654
+ msgstr "Przydzielony"
5655
+
5656
+ #: inc/custom-post-types/order.php:489
5657
+ msgid "Order number, user name, user email, course name etc..."
5658
+ msgstr "Numer zamówienia, nazwa użytkownika, email, nazwa kursu itd..."
5659
+
5660
+ #: inc/custom-post-types/order.php:575
5661
+ msgid "Processing..."
5662
+ msgstr "Przetwarzanie ..."
5663
+
5664
+ #: inc/custom-post-types/order.php:592 inc/custom-post-types/order.php:595
5665
+ msgid "Apply"
5666
+ msgstr "Włącz"
5667
+
5668
+ #: inc/custom-post-types/order.php:633 inc/custom-post-types/order.php:848
5669
+ msgid "View Order"
5670
+ msgstr "Zobacz zamówienie"
5671
+
5672
+ #: inc/custom-post-types/order.php:641
5673
+ msgid "View child orders"
5674
+ msgstr "Zobacz pod zamówienia"
5675
+
5676
+ #: inc/custom-post-types/order.php:709 inc/custom-post-types/order.php:844
5677
+ #: templates/profile/tabs/orders/list.php:32
5678
+ msgid "Order"
5679
+ msgstr "Zamówienie"
5680
+
5681
+ #: inc/custom-post-types/order.php:710
5682
+ msgid "Student"
5683
+ msgstr "Kursant"
5684
+
5685
+ #: inc/custom-post-types/order.php:762 inc/order/class-lp-order.php:508
5686
+ msgid "(Guest)"
5687
+ msgstr "(Gość)"
5688
+
5689
+ #: inc/custom-post-types/order.php:793
5690
+ msgid "Course does not exist"
5691
+ msgstr "Kurs nie istnieje"
5692
+
5693
+ #: inc/custom-post-types/order.php:807
5694
+ msgid "(No item)"
5695
+ msgstr "(brak elementów)"
5696
+
5697
+ #: inc/custom-post-types/order.php:815
5698
+ #, php-format
5699
+ msgid "Pay via <strong>%s</strong>"
5700
+ msgstr "Zapłacone przez <strong>%s</strong>"
5701
+
5702
+ #: inc/custom-post-types/order.php:845
5703
+ msgid "Add New Order"
5704
+ msgstr "Dodaj nowe zamówienie"
5705
+
5706
+ #: inc/custom-post-types/order.php:846 inc/custom-post-types/order.php:929
5707
+ #: templates/order/order-details.php:23
5708
+ msgid "Order Details"
5709
+ msgstr "Szczegóły zamówienia"
5710
+
5711
+ #: inc/custom-post-types/order.php:850
5712
+ msgid "Update Order"
5713
+ msgstr "Zaktualizuj zamówienie"
5714
+
5715
+ #: inc/custom-post-types/order.php:851
5716
+ msgid "Search Orders"
5717
+ msgstr "Wyszukaj zamówienia"
5718
+
5719
+ #: inc/custom-post-types/order.php:852
5720
+ msgid "No order found"
5721
+ msgstr "Brak zamówień"
5722
+
5723
+ #: inc/custom-post-types/order.php:853
5724
+ msgid "No order found in Trash"
5725
+ msgstr "Brak zamówień w Śmieciach"
5726
+
5727
+ #: inc/custom-post-types/order.php:930
5728
+ msgid "Order Actions"
5729
+ msgstr "Akcje zamówienia"
5730
+
5731
+ #: inc/custom-post-types/question.php:145 inc/updates/_update-from-0.9.php:1216
5732
+ msgid "Question Tag"
5733
+ msgstr "Etykieta pytania"
5734
+
5735
+ #: inc/custom-post-types/question.php:148 inc/updates/_update-from-0.9.php:1197
5736
+ #: inc/updates/_update-from-0.9.php:1219
5737
+ msgid "Add New Tag"
5738
+ msgstr "Dodaj nowy znacznik /tag"
5739
+
5740
+ #: inc/custom-post-types/question.php:149 inc/updates/_update-from-0.9.php:1198
5741
+ #: inc/updates/_update-from-0.9.php:1220
5742
+ msgid "All Tags"
5743
+ msgstr "Wszystkie znaczniki /tagi"
5744
+
5745
+ #: inc/custom-post-types/question.php:167
5746
+ #: inc/custom-post-types/question.php:168
5747
+ msgid "Question Bank"
5748
+ msgstr "Zaktualizuj pytanie"
5749
+
5750
+ #: inc/custom-post-types/question.php:169
5751
+ #: templates/content-quiz/progress.php:43
5752
+ msgid "Question"
5753
+ msgstr "Pytanie"
5754
+
5755
+ #: inc/custom-post-types/question.php:171
5756
+ msgid "View Question"
5757
+ msgstr "Zobacz Pytanie"
5758
+
5759
+ #: inc/custom-post-types/question.php:172
5760
+ msgid "Add New Question"
5761
+ msgstr "Dodaj Nowe Pytanie"
5762
+
5763
+ #: inc/custom-post-types/question.php:174
5764
+ msgid "Edit Question"
5765
+ msgstr "Edytuj Pytanie"
5766
+
5767
+ #: inc/custom-post-types/question.php:175
5768
+ msgid "Update Question"
5769
+ msgstr "Zaktualizuj pytanie"
5770
+
5771
+ #: inc/custom-post-types/question.php:176
5772
+ msgid "Search Questions"
5773
+ msgstr "Wyszukaj pytania"
5774
+
5775
+ #: inc/custom-post-types/question.php:177
5776
+ msgid "No questions found"
5777
+ msgstr "Nie znaleziono pytań"
5778
+
5779
+ #: inc/custom-post-types/question.php:178
5780
+ msgid "No questions found in trash"
5781
+ msgstr "Nie znaleziono pytań w śmieciach"
5782
+
5783
+ #: inc/custom-post-types/quiz.php:93
5784
+ msgid "Add New Quiz"
5785
+ msgstr "Dodaj nowy test"
5786
+
5787
+ #: inc/custom-post-types/quiz.php:94
5788
+ msgid "Edit Quiz"
5789
+ msgstr "Edytuj test"
5790
+
5791
+ #: inc/custom-post-types/quiz.php:96
5792
+ msgid "View Quiz"
5793
+ msgstr "Zobacz test"
5794
 
5795
+ #: inc/custom-post-types/quiz.php:98
5796
+ msgid "Update Quiz"
5797
+ msgstr "Zaktualizuj test"
5798
 
5799
+ #: inc/custom-post-types/quiz.php:99
5800
+ msgid "Search Quizzes"
5801
+ msgstr "Wyszukaj testy"
5802
 
5803
+ #: inc/custom-post-types/quiz.php:100
5804
+ #, php-format
5805
+ msgid ""
5806
+ "You haven't had any quizzes yet. Click <a href=\"%s\">Add new</a> to start"
5807
+ msgstr ""
5808
+ "Nie masz jeszcze żadnych testów. Kliknij <a href=\"%s\">Dodaj nowy</a> aby "
5809
+ "zacząć"
 
 
 
 
 
5810
 
5811
+ #: inc/custom-post-types/quiz.php:101
5812
+ msgid "No quiz found in Trash"
5813
+ msgstr "Nie znaleziono testów w śmieciach"
5814
 
5815
+ #: inc/custom-post-types/quiz.php:174
5816
+ msgid "Option"
5817
+ msgstr "Opcja"
 
 
 
5818
 
5819
+ #: inc/custom-post-types/quiz.php:216
5820
+ msgid "General Settings"
5821
+ msgstr "Ogólne Ustawienia"
 
 
 
5822
 
5823
+ #: inc/custom-post-types/quiz.php:222
5824
+ msgid "Show Questions"
5825
+ msgstr "Pokaż pytania"
 
 
 
5826
 
5827
+ #: inc/custom-post-types/quiz.php:223
5828
+ msgid ""
5829
+ "Show list of questions while doing quiz as ordered numbers (1, 2, 3, etc)."
5830
+ msgstr "Pokaż listę pytań zgodnie z porządkiem w teście (1, 2, 3, itd.)."
 
5831
 
5832
+ #: inc/custom-post-types/quiz.php:229
5833
+ msgid "Review Questions"
5834
+ msgstr "Przejrzyj pytania"
5835
 
5836
+ #: inc/custom-post-types/quiz.php:232
5837
+ msgid "Allow re-viewing questions after completing quiz."
5838
+ msgstr "Umożliw ponowne przeglądnięcie pytań po zakończonym teście."
5839
 
5840
+ #: inc/custom-post-types/quiz.php:236
5841
+ msgid "Show Correct Answer"
5842
+ msgstr "Pokaż poprawne odpowiedzi"
5843
 
5844
+ #: inc/custom-post-types/quiz.php:239
5845
+ msgid "Show correct answer when reviewing questions."
5846
+ msgstr "Pokaż poprawna odpowiedź po zobaczeniu pytania."
5847
 
5848
+ #: inc/custom-post-types/quiz.php:254
5849
+ msgid "Duration of the quiz. Set 0 to disable."
5850
+ msgstr "Czas trwania testu. Wybierz 0, aby wyłączyć."
5851
 
5852
+ #: inc/custom-post-types/quiz.php:262
5853
+ msgid "Passing Grade (<span>%</span>)"
5854
+ msgstr "Wymagany próg (<span>%</span>)"
5855
 
5856
+ #: inc/custom-post-types/quiz.php:263
5857
+ msgid "Requires user reached this point to pass the quiz."
5858
+ msgstr "Wymagana ilość punktów, aby kursant zdał test."
5859
 
5860
+ #: inc/custom-post-types/quiz.php:272
5861
+ msgid "Re-take"
5862
+ msgstr "Weź udział ponownie"
5863
 
5864
+ #: inc/custom-post-types/quiz.php:275
5865
+ msgid ""
5866
+ "How many times the user can re-take this quiz. Set to 0 to disable re-taking"
5867
+ msgstr ""
5868
+ "Ile razu użytkownik może wziąć udział w teście. Wybierz 0, aby wyłączyć"
5869
 
5870
+ #: inc/custom-post-types/quiz.php:280
5871
+ msgid "Archive History"
5872
+ msgstr "Zarchiwizuj historię"
5873
 
5874
+ #: inc/custom-post-types/quiz.php:283
5875
+ msgid "Archive quiz results for each time."
5876
+ msgstr "Zarchiwizuj wyniki testów za każdym razem."
5877
 
5878
+ #: inc/custom-post-types/quiz.php:297
5879
+ msgid "Show Check Answer"
5880
+ msgstr "Pokaż Sprawdź odpowiedź"
5881
 
5882
+ #: inc/custom-post-types/quiz.php:300
5883
+ msgid ""
5884
+ "Show button to check answer while doing quiz ( 0 = Disabled, -1 = Unlimited, "
5885
+ "N = Number of check )."
5886
+ msgstr ""
5887
+ "Pokaż przycisk sprawdzający odpowiedź w trakcie testu (0 = wyłączone, -1 = "
5888
+ "bez limitu, N = Liczba sprawdzeń)."
5889
 
5890
+ #: inc/custom-post-types/quiz.php:306
5891
+ msgid "Show Hint"
5892
+ msgstr "Pokaż wskazówkę"
 
 
5893
 
5894
+ #: inc/custom-post-types/quiz.php:309
5895
+ msgid ""
5896
+ "Show button to hint answer while doing quiz ( 0 = Disabled, -1 = Unlimited, "
5897
+ "N = Number of check )."
5898
+ msgstr ""
5899
+ "Pokaż przycisk dający wskazówkę w trakcie testu (0 = wyłączone, -1 = bez "
5900
+ "limitu, N = Liczba sprawdzeń)."
5901
+
5902
+ #: inc/custom-post-types/quiz.php:388
5903
+ msgid "This quiz has no questions"
5904
+ msgstr "Ten test nie ma pytań"
5905
+
5906
+ #: inc/emails/class-lp-email-become-an-instructor.php:27
5907
+ msgid "Request"
5908
+ msgstr "Wymagane"
5909
+
5910
+ #: inc/emails/class-lp-email-become-an-instructor.php:28
5911
+ #: inc/emails/class-lp-email-instructor-accepted.php:27
5912
+ msgid "Become an instructor email."
5913
+ msgstr "Email Zostań instruktorem."
5914
+
5915
+ #: inc/emails/class-lp-email-become-an-instructor.php:30
5916
+ #: inc/emails/class-lp-email-instructor-accepted.php:29
5917
+ msgid "[{{site_title}}] Request to become an instructor"
5918
+ msgstr "[{{site_title}}] Poproś o zostanie instruktorem"
5919
+
5920
+ #: inc/emails/class-lp-email-become-an-instructor.php:31
5921
+ #: inc/emails/class-lp-email-instructor-accepted.php:30
5922
+ msgid "Become an instructor"
5923
+ msgstr "Zostań nauczycielem"
5924
+
5925
+ #: inc/emails/class-lp-email-cancelled-order-admin.php:27
5926
+ #: inc/emails/class-lp-email-enrolled-course-admin.php:28
5927
+ #: inc/emails/class-lp-email-finished-course-admin.php:28
5928
+ #: inc/emails/class-lp-email-new-order-admin.php:27
5929
+ #: inc/emails/_bk/class-lp-email-finished-course-admin.php:26
5930
+ msgid "Admin"
5931
+ msgstr "Admin"
5932
+
5933
+ #: inc/emails/class-lp-email-cancelled-order-admin.php:28
5934
+ msgid "Send email to admin when order has been cancelled."
5935
+ msgstr "Wyślij emaila do admina, kiedy zamówienie zostanie anulowane."
5936
+
5937
+ #: inc/emails/class-lp-email-cancelled-order-admin.php:30
5938
+ #: inc/emails/class-lp-email-cancelled-order-instructor.php:27
5939
+ msgid "Order placed on {{order_date}} has been cancelled"
5940
+ msgstr "Zamówienie z dnia {{order_date}} zostało anulowane"
5941
+
5942
+ #: inc/emails/class-lp-email-cancelled-order-admin.php:31
5943
+ #: inc/emails/class-lp-email-cancelled-order-instructor.php:28
5944
+ msgid "User order has been cancelled"
5945
+ msgstr "Zamówienie użytkownika zostało anulowane"
5946
+
5947
+ #: inc/emails/class-lp-email-cancelled-order-guest.php:28
5948
+ msgid "Send email to guest when order has been cancelled."
5949
+ msgstr "Wyślij emaila do gościa, gdy zamówienie zostanie anulowane."
5950
+
5951
+ #: inc/emails/class-lp-email-cancelled-order-guest.php:30
5952
+ #: inc/emails/class-lp-email-cancelled-order-user.php:30
5953
+ msgid "Your order on {{order_date}} has been cancelled"
5954
+ msgstr "Twoje zamówienie z dnia {{order_date}} zostało anulowane"
5955
+
5956
+ #: inc/emails/class-lp-email-cancelled-order-guest.php:31
5957
+ #: inc/emails/class-lp-email-cancelled-order-user.php:31
5958
+ msgid "Your order has been cancelled"
5959
+ msgstr "Twoje zamówienie zostało anulowane"
5960
+
5961
+ #: inc/emails/class-lp-email-cancelled-order-instructor.php:25
5962
+ msgid "Send email to course instructor when order has been cancelled"
5963
+ msgstr "Wyślij emaila do instruktora, kiedy zamówienie zostanie anulowane"
5964
+
5965
+ #: inc/emails/class-lp-email-cancelled-order-user.php:27
5966
+ #: inc/emails/class-lp-email-completed-order-user.php:29
5967
+ #: inc/emails/class-lp-email-enrolled-course-user.php:27
5968
+ #: inc/emails/class-lp-email-finished-course-user.php:27
5969
+ #: inc/emails/class-lp-email-new-order-user.php:27
5970
+ #: inc/emails/class-lp-email-processing-order-user.php:26
5971
+ #: inc/emails/_bk/class-lp-email-finished-course-user.php:26
5972
+ msgid "User"
5973
+ msgstr "Użytkownik"
5974
 
5975
+ #: inc/emails/class-lp-email-cancelled-order-user.php:28
5976
+ msgid "Send email to user when order has been cancelled."
5977
+ msgstr "Wyślij emaila do użytkownika, kiedy zamówienie zostanie anulowane."
5978
 
5979
+ #: inc/emails/class-lp-email-completed-order-guest.php:30
5980
+ #: inc/emails/class-lp-email-new-order-guest.php:28
5981
+ msgid "Send email to the user who has bought course as guest."
5982
+ msgstr "Wyślij emaila do użytkownika który kupił kurs jako gość."
5983
 
5984
+ #: inc/emails/class-lp-email-completed-order-guest.php:32
5985
+ #: inc/emails/class-lp-email-completed-order-user.php:32
5986
+ msgid "Your order on {{order_date}} has completed"
5987
+ msgstr "Twoje zamówienie z dnia {{order_date}} zostało ukończone"
5988
 
5989
+ #: inc/emails/class-lp-email-completed-order-guest.php:33
5990
+ #: inc/emails/class-lp-email-completed-order-user.php:33
5991
+ msgid "Your order has completed"
5992
+ msgstr "Twoje zamówienie zostało zakończone"
5993
 
5994
+ #: inc/emails/class-lp-email-completed-order-user.php:30
5995
+ msgid "Send email to the user who has bought course when order is completed."
5996
+ msgstr ""
5997
+ "Wyślij emaila do użytkownika, który kupił kurs kiedy zamówienie zostanie "
5998
+ "ukończone."
5999
+
6000
+ #: inc/emails/class-lp-email-enrolled-course-admin.php:29
6001
+ msgid "Send this email to admin when user has enrolled course."
6002
+ msgstr "Wyślij tego emaila do admina, gdy użytkownik dołączy do kursu."
6003
+
6004
+ #: inc/emails/class-lp-email-enrolled-course-admin.php:30
6005
+ #: inc/emails/class-lp-email-enrolled-course-instructor.php:30
6006
+ msgid "{{user_display_name}} has enrolled course"
6007
+ msgstr "{{user_display_name}} dołączył do kursu"
6008
+
6009
+ #: inc/emails/class-lp-email-enrolled-course-admin.php:31
6010
+ #: inc/emails/class-lp-email-enrolled-course-instructor.php:31
6011
+ msgid "User has enrolled course"
6012
+ msgstr "Użytkownik dołączył do kursu"
6013
+
6014
+ #: inc/emails/class-lp-email-enrolled-course-instructor.php:28
6015
+ msgid "Send this email to instructor when they have enrolled course."
6016
+ msgstr "Wyślij emaila do instruktora, kiedy dołączą do kursu."
6017
+
6018
+ #: inc/emails/class-lp-email-enrolled-course-user.php:28
6019
+ msgid "Send this email to user when they have enrolled course."
6020
+ msgstr "Wyślij emaila do użytkownika, kiedy ten dołączy do kursu."
6021
+
6022
+ #: inc/emails/class-lp-email-enrolled-course-user.php:30
6023
+ msgid "[{{site_title}}] You have enrolled in course"
6024
+ msgstr "[{{site_title}}] Dołączyłeś do kursu"
6025
+
6026
+ #: inc/emails/class-lp-email-enrolled-course-user.php:31
6027
+ msgid "You have enrolled course"
6028
+ msgstr "Dołączyłeś do kursu"
6029
+
6030
+ #: inc/emails/class-lp-email-finished-course-admin.php:29
6031
+ msgid "Send this email to admin when user has finished course."
6032
+ msgstr "Wyślij tego emaila do admina, kiedy użytkownik ukończy kurs."
6033
+
6034
+ #: inc/emails/class-lp-email-finished-course-admin.php:30
6035
+ #: inc/emails/class-lp-email-finished-course-instructor.php:30
6036
+ msgid "{{user_display_name}} has finished course"
6037
+ msgstr "{{user_display_name}} ukończył kurs"
6038
+
6039
+ #: inc/emails/class-lp-email-finished-course-admin.php:31
6040
+ #: inc/emails/class-lp-email-finished-course-instructor.php:31
6041
+ msgid "User has finished course"
6042
+ msgstr "Użytkownik ukończył kurs"
6043
+
6044
+ #: inc/emails/class-lp-email-finished-course-instructor.php:28
6045
+ msgid "Send this email to instructor when they have finished course."
6046
+ msgstr "Wyślij tego emaila do instruktora, kiedy ktoś ukończy kurs."
6047
+
6048
+ #: inc/emails/class-lp-email-finished-course-user.php:28
6049
+ msgid "Send this email to user when they have finished course."
6050
+ msgstr "Wyślij tego emaila do użytkownika, kiedy ukończy kurs."
6051
+
6052
+ #: inc/emails/class-lp-email-finished-course-user.php:30
6053
+ msgid "[{{site_title}}] You have finished course"
6054
+ msgstr "[{{site_title}}] Ukończyłeś kurs"
6055
+
6056
+ #: inc/emails/class-lp-email-finished-course-user.php:31
6057
+ msgid "You have finished course"
6058
+ msgstr "Ukończyłeś kurs"
6059
+
6060
+ #: inc/emails/class-lp-email-instructor-accepted.php:26
6061
+ msgid "Accepted"
6062
+ msgstr "Zaakceptowane"
6063
+
6064
+ #: inc/emails/class-lp-email-new-course.php:29
6065
+ msgid "Email settings when a new course is submitted for review."
6066
+ msgstr "Ustawienia emaila kiedy nowy kurs został dodany do sprawdzenia."
6067
+
6068
+ #: inc/emails/class-lp-email-new-course.php:34
6069
+ msgid ""
6070
+ "[{{site_title}}] New course has been submitted for review ({{course_name}})"
6071
+ msgstr "[{{site_title}}] Nowy kurs dodany do przejrzenia ({{course_name}})"
6072
 
6073
+ #: inc/emails/class-lp-email-new-course.php:137
6074
+ #: inc/emails/class-lp-email.php:988
6075
+ msgid "Recipient(s)"
6076
+ msgstr "Odbiorcy"
6077
 
6078
+ #: inc/emails/class-lp-email-new-course.php:141
6079
+ #: inc/emails/class-lp-email.php:992
6080
+ #, php-format
6081
+ msgid "Email recipient(s) (separated by comma), default: <code>%s</code>."
6082
+ msgstr ""
6083
+ "Adresaci emaili (przedzieleni przecinkami - domyślnie: <code>%s</code>."
6084
+
6085
+ #: inc/emails/class-lp-email-new-course.php:158
6086
+ #: inc/emails/class-lp-email-published-course.php:132
6087
+ #: inc/emails/class-lp-email-rejected-course.php:129
6088
+ #: inc/emails/class-lp-email-updated-course.php:174
6089
+ #: inc/emails/class-lp-email-user-order-changed-status.php:146
6090
+ #: inc/emails/class-lp-email-user-order-completed.php:147
6091
+ #: inc/emails/class-lp-email.php:1009
6092
+ #: inc/emails/_bk/class-lp-email-finished-course-admin.php:141
6093
+ #: inc/emails/_bk/class-lp-email-finished-course-instructor.php:143
6094
+ #: inc/emails/_bk/class-lp-email-finished-course-user.php:143
6095
+ #, php-format
6096
+ msgid "Email subject, default: <code>%s</code>."
6097
+ msgstr "Temat emaila, domyślnie <code>%s</code>."
6098
+
6099
+ #: inc/emails/class-lp-email-new-course.php:171
6100
+ #: inc/emails/class-lp-email-published-course.php:145
6101
+ #: inc/emails/class-lp-email-rejected-course.php:142
6102
+ #: inc/emails/class-lp-email-updated-course.php:187
6103
+ #: inc/emails/class-lp-email-user-order-changed-status.php:159
6104
+ #: inc/emails/class-lp-email-user-order-completed.php:160
6105
+ #: inc/emails/class-lp-email.php:1022
6106
+ #: inc/emails/_bk/class-lp-email-finished-course-admin.php:154
6107
+ #: inc/emails/_bk/class-lp-email-finished-course-instructor.php:156
6108
+ #: inc/emails/_bk/class-lp-email-finished-course-user.php:156
6109
+ msgid "Heading"
6110
+ msgstr "Nagłówek"
6111
+
6112
+ #: inc/emails/class-lp-email-new-course.php:175
6113
+ #: inc/emails/class-lp-email-published-course.php:149
6114
+ #: inc/emails/class-lp-email-rejected-course.php:146
6115
+ #: inc/emails/class-lp-email-updated-course.php:191
6116
+ #: inc/emails/class-lp-email-user-order-changed-status.php:163
6117
+ #: inc/emails/class-lp-email-user-order-completed.php:164
6118
+ #: inc/emails/class-lp-email.php:1026
6119
+ #: inc/emails/_bk/class-lp-email-finished-course-admin.php:158
6120
+ #: inc/emails/_bk/class-lp-email-finished-course-instructor.php:160
6121
+ #: inc/emails/_bk/class-lp-email-finished-course-user.php:160
6122
+ #, php-format
6123
+ msgid "Email heading, default: <code>%s</code>."
6124
+ msgstr "Nagłówek emaila, domyślnie <code>%s</code>."
6125
+
6126
+ #: inc/emails/class-lp-email-new-order-admin.php:28
6127
+ msgid "Send email to admin when new order is placed."
6128
+ msgstr "Wyślij emaila do admina, gdy złożone zostanie nowe zamówienie."
6129
+
6130
+ #: inc/emails/class-lp-email-new-order-admin.php:30
6131
+ #: inc/emails/class-lp-email-new-order-instructor.php:29
6132
+ msgid "New order placed on {{order_date}}"
6133
+ msgstr "Nowe zamówienie z dnia {{order_date}}"
6134
+
6135
+ #: inc/emails/class-lp-email-new-order-admin.php:31
6136
+ #: inc/emails/class-lp-email-new-order-instructor.php:30
6137
+ msgid "New user order"
6138
+ msgstr "Nowe zamówienie użytkownika"
6139
+
6140
+ #: inc/emails/class-lp-email-new-order-guest.php:30
6141
+ #: inc/emails/class-lp-email-new-order-user.php:30
6142
+ #: inc/emails/class-lp-email-processing-order-guest.php:30
6143
+ #: inc/emails/class-lp-email-processing-order-user.php:29
6144
+ msgid "Your order placed on {{order_date}}"
6145
+ msgstr "Twoje zamówienie z dnia {{order_date}}"
6146
+
6147
+ #: inc/emails/class-lp-email-new-order-guest.php:31
6148
+ #: inc/emails/class-lp-email-new-order-user.php:31
6149
+ #: inc/emails/class-lp-email-processing-order-guest.php:31
6150
+ #: inc/emails/class-lp-email-processing-order-user.php:30
6151
+ msgid "Thank you for your order"
6152
+ msgstr "Dziękujemy za zamówienie"
6153
+
6154
+ #: inc/emails/class-lp-email-new-order-instructor.php:27
6155
+ msgid "Send email to course's instructor when user has purchased course."
6156
+ msgstr "Wyślij emaila do instruktora, gdy użytkownik zakupi kurs."
6157
+
6158
+ #: inc/emails/class-lp-email-new-order-user.php:28
6159
+ msgid "Send email to the user who has bought course."
6160
+ msgstr "Wyślij emaila do użytkownika, który zakupił kurs."
6161
+
6162
+ #: inc/emails/class-lp-email-processing-order-guest.php:28
6163
+ msgid ""
6164
+ "Send email to user who has purchased course as a Guest when the order is "
6165
+ "processing."
6166
+ msgstr ""
6167
+ "Wyślij emaila do użytkownika, który zakupił kurs jako gość, kiedy zamówienie "
6168
+ "jest przetwarzane."
6169
 
6170
+ #: inc/emails/class-lp-email-processing-order-user.php:27
6171
+ msgid "Send email to user who has bought course whe the order is processing."
6172
+ msgstr ""
6173
+ "Wyślij emaila do użytkownika, który kupił kurs, kiedy zamówienie jest "
6174
+ "przetwarzane."
6175
 
6176
+ #: inc/emails/class-lp-email-published-course.php:28
6177
+ msgid "Approved course"
6178
+ msgstr "Zaakceptowanie kursu"
6179
 
6180
+ #: inc/emails/class-lp-email-published-course.php:29
6181
+ msgid "Settings for email when a course is approved."
6182
+ msgstr "Ustawienia emaili, gdy kurs został zaakceptowany."
6183
 
6184
+ #: inc/emails/class-lp-email-published-course.php:34
6185
+ msgid "[{{site_title}}] Your course {{course_name}} has been approved"
6186
+ msgstr "[{{site_title}}] Twój kurs {course_name} został zaakceptowany"
6187
 
6188
+ #: inc/emails/class-lp-email-published-course.php:35
6189
+ msgid "Course approved"
6190
+ msgstr "Kurs zaakcetowany"
6191
 
6192
+ #: inc/emails/class-lp-email-rejected-course.php:28
6193
+ #: inc/emails/class-lp-email-rejected-course.php:35
6194
+ msgid "Rejected course"
6195
+ msgstr "Odrzucenie kursu"
6196
 
6197
+ #: inc/emails/class-lp-email-rejected-course.php:29
6198
+ msgid "Settings for email when a course is rejected."
6199
+ msgstr "Ustawienia emaili, gdy kurs został odrzucony."
6200
 
6201
+ #: inc/emails/class-lp-email-rejected-course.php:34
6202
+ msgid "[{{site_title}}] Your course {{course_name}} has been rejected"
6203
+ msgstr "[{{site_title}}] Twój kurs {{course_name}} został odrzucony"
6204
 
6205
+ #: inc/emails/class-lp-email-updated-course.php:32
6206
+ msgid "Updated course"
6207
+ msgstr "Zaktualizuj kurs"
6208
 
6209
+ #: inc/emails/class-lp-email-updated-course.php:33
6210
+ msgid "Send this email to users have purchased when the course is updated."
6211
+ msgstr ""
6212
+ "Wyślij tego email do użytkowników którzy zakupili kurs, kiedy ten zostanie "
6213
+ "zaktualizowany."
6214
+
6215
+ #: inc/emails/class-lp-email-updated-course.php:38
6216
+ msgid "[{{site_title}}] The course ({{course_name}}) has just been updated."
6217
+ msgstr "[{{site_title}}] Kurs ({{course_name}}) został zaktualizowany."
6218
+
6219
+ #: inc/emails/class-lp-email-updated-course.php:39
6220
+ msgid "Update course"
6221
+ msgstr "Aktualizacja kursu"
6222
+
6223
+ #: inc/emails/class-lp-email-user-order-changed-status.php:26
6224
+ msgid "User order changed status"
6225
+ msgstr "Zamiana statusu zamówienia"
6226
+
6227
+ #: inc/emails/class-lp-email-user-order-changed-status.php:27
6228
+ msgid "Send email to user when the order status is changed"
6229
+ msgstr "Wyślij emaila do użytkownika, kiedy zamówienie zmieni status"
6230
+
6231
+ #: inc/emails/class-lp-email-user-order-changed-status.php:32
6232
+ msgid "Your order {{order_date}} status has just been changed"
6233
+ msgstr "Twoje zamówienie {{order_date}} zmieniło swój status"
6234
+
6235
+ #: inc/emails/class-lp-email-user-order-changed-status.php:33
6236
+ msgid "Your order {{order_number}} status has just been changed"
6237
+ msgstr "Twoje zamówienie {{order_number}} zmieniło swój status"
6238
+
6239
+ #: inc/emails/class-lp-email-user-order-completed.php:27
6240
+ msgid "User order completed"
6241
+ msgstr "Ukończenie zamówienie"
6242
+
6243
+ #: inc/emails/class-lp-email-user-order-completed.php:28
6244
+ msgid "Send email to user when the order is completed"
6245
+ msgstr "Wyślij emaila do użytkownika, kiedy zamówienie zostało zakończone"
6246
+
6247
+ #: inc/emails/class-lp-email-user-order-completed.php:33
6248
+ msgid "Your order {{order_date}} is completed"
6249
+ msgstr "Twoje zamówienie {{order_date}} zostało ukończone"
6250
+
6251
+ #: inc/emails/class-lp-email-user-order-completed.php:34
6252
+ msgid "Your order {{order_number}} is completed"
6253
+ msgstr "Twoje zamówienie {{order_number}} zostało ukończone"
6254
+
6255
+ #: inc/emails/_bk/class-lp-email-finished-course-admin.php:27
6256
+ #: inc/emails/_bk/class-lp-email-finished-course-instructor.php:27
6257
+ #: inc/emails/_bk/class-lp-email-finished-course-user.php:27
6258
+ msgid "Send this email to user when a user finished a course."
6259
+ msgstr "Wyślij wiadomość email do użytkownika, kiedy użytkownik ukończy kurs."
6260
+
6261
+ #: inc/emails/_bk/class-lp-email-finished-course-admin.php:30
6262
+ #: inc/emails/_bk/class-lp-email-finished-course-instructor.php:32
6263
+ #: inc/emails/_bk/class-lp-email-finished-course-user.php:32
6264
+ msgid "[{{site_title}}] You have finished this course ({{course_name}})"
6265
+ msgstr "[{{site_title}}] Ukończyłeś ten kurs ({{course_name}})"
6266
+
6267
+ #: inc/emails/_bk/class-lp-email-finished-course-admin.php:31
6268
+ #: inc/emails/_bk/class-lp-email-finished-course-instructor.php:33
6269
+ #: inc/emails/_bk/class-lp-email-finished-course-user.php:33
6270
+ msgid "Finished course"
6271
+ msgstr "Zakończenie kursu"
6272
+
6273
+ #: inc/gateways/class-lp-gateway-abstract.php:244
6274
+ msgid "%s has been deprecated. Please use % instead of."
6275
+ msgstr "% s jest przestarzałe. Proszę użyć % ."
6276
+
6277
+ #: inc/gateways/paypal/class-lp-gateway-paypal.php:92
6278
+ msgid "Make payment via Paypal."
6279
+ msgstr "Zrób płatność przez Paypal."
6280
+
6281
+ #: inc/gateways/paypal/class-lp-gateway-paypal.php:96
6282
+ msgid "Pay with Paypal"
6283
+ msgstr "Zapłać z PayPal"
6284
+
6285
+ #: inc/gateways/paypal/class-lp-gateway-paypal.php:242
6286
+ msgid "Error: order ID and key were not found in \"custom\"."
6287
+ msgstr ""
6288
+ "Błąd: ID zamówienia oraz jego klucz nie zostały znalezione w \"domyślnych\"."
6289
 
6290
+ #: inc/gateways/paypal/class-lp-gateway-paypal.php:250
6291
+ #, php-format
6292
+ msgid "Error: Order Keys do not match %s and %s."
6293
+ msgstr "Błąd: Klucz zamówienia nie pasuje - %s oraz %s."
6294
 
6295
+ #: inc/gateways/paypal/class-lp-gateway-paypal.php:379
6296
+ msgid "IPN payment completed"
6297
+ msgstr "Płatność BPP (Błyskawiczne powiadamianie o płatności) zakończona"
6298
 
6299
+ #: inc/gateways/paypal/paypal-ipn/ipn.php:52
6300
+ msgid "Order on "
6301
+ msgstr "Zamówienie na "
6302
 
6303
+ #: inc/libraries/wp-background-process.php:421
6304
+ #, php-format
6305
+ msgid "Every %d minutes"
6306
+ msgstr "Co %d minut(-y)"
6307
 
6308
+ #: inc/libraries/meta-box/inc/core.php:34
6309
+ #: inc/libraries/meta-box/inc/about/sections/getting-started.php:26
6310
+ msgid "Extensions"
6311
+ msgstr "Dodatki"
6312
 
6313
+ #: inc/libraries/meta-box/inc/field.php:351
6314
+ msgid "+ Add more"
6315
+ msgstr "+ Dodaj więcej"
6316
 
6317
+ #: inc/libraries/meta-box/inc/validation.php:47
6318
+ msgid "Please correct the errors highlighted below and try again."
6319
+ msgstr "Prosze popraw podświetlone błędy i spróbuj ponownie."
6320
 
6321
+ #: inc/libraries/meta-box/inc/about/about.php:50
6322
+ msgid "About"
6323
+ msgstr ""
6324
 
6325
+ #: inc/libraries/meta-box/inc/about/about.php:59
6326
+ #: inc/libraries/meta-box/inc/about/about.php:60
6327
+ msgid "Welcome to Meta Box"
6328
+ msgstr ""
6329
 
6330
+ #: inc/libraries/meta-box/inc/about/sections/getting-started.php:13
6331
+ msgid "Getting Started With Online Generator"
6332
+ msgstr ""
6333
 
6334
+ #: inc/libraries/meta-box/inc/about/sections/getting-started.php:14
6335
+ msgid ""
6336
+ "The fastest way to getting started with Meta Box is use our online generator "
6337
+ "to generate meta boxes with custom fields. It provides a friendly UI for you "
6338
+ "to create meta boxes and custom fields just by drag and drop fields."
6339
+ msgstr ""
6340
 
6341
+ #: inc/libraries/meta-box/inc/about/sections/getting-started.php:16
6342
+ msgid "online generator"
6343
+ msgstr ""
 
6344
 
6345
+ #: inc/libraries/meta-box/inc/about/sections/getting-started.php:18
6346
+ msgid "Go to Online Generator"
6347
+ msgstr ""
 
6348
 
6349
+ #: inc/libraries/meta-box/inc/about/sections/getting-started.php:22
6350
+ msgid "Understand The Basics"
6351
+ msgstr ""
6352
+
6353
+ #: inc/libraries/meta-box/inc/about/sections/getting-started.php:23
6354
+ msgid ""
6355
+ "Meta Box doesn't have any admin page for configuration or settings. Instead "
6356
+ "of that, it provides a very powerful API to speed up the process of creating "
6357
+ "meta boxes and custom fields. It might take you a little time at first, but "
6358
+ "then you'll love the way it work because it helps you do and customize "
6359
+ "almost everything."
6360
+ msgstr ""
6361
 
6362
+ #: inc/libraries/meta-box/inc/about/sections/getting-started.php:24
6363
+ msgid "Learn More"
6364
  msgstr ""
 
 
6365
 
6366
+ #: inc/libraries/meta-box/inc/about/sections/getting-started.php:27
6367
  msgid ""
6368
+ "Wanna see more features that transform your WordPress website into a "
6369
+ "powerful CMS? Check out some extensions below:"
6370
  msgstr ""
 
 
6371
 
6372
+ #: inc/libraries/meta-box/inc/about/sections/getting-started.php:29
6373
+ msgid "Meta Box Group"
6374
+ msgstr ""
6375
 
6376
+ #: inc/libraries/meta-box/inc/about/sections/getting-started.php:30
6377
+ msgid "Meta Box Conditional Logic"
6378
  msgstr ""
 
6379
 
6380
+ #: inc/libraries/meta-box/inc/about/sections/getting-started.php:31
6381
+ msgid "MB Settings Page"
6382
+ msgstr ""
6383
 
6384
+ #: inc/libraries/meta-box/inc/about/sections/getting-started.php:32
6385
+ msgid "MB Term Meta"
6386
+ msgstr ""
 
6387
 
6388
+ #: inc/libraries/meta-box/inc/about/sections/getting-started.php:34
6389
+ msgid "More Extensions"
6390
+ msgstr ""
6391
 
6392
+ #: inc/libraries/meta-box/inc/about/sections/getting-started.php:39
6393
+ msgid "Go to MetaBox.IO &rarr;"
6394
+ msgstr ""
6395
 
6396
+ #: inc/libraries/meta-box/inc/about/sections/tabs.php:11
6397
+ msgid "Getting Started"
6398
+ msgstr ""
6399
 
6400
+ #: inc/libraries/meta-box/inc/about/sections/welcome.php:13
6401
+ #, php-format
6402
+ msgid "Welcome to %1$s %2$s"
6403
+ msgstr ""
6404
 
6405
+ #: inc/libraries/meta-box/inc/about/sections/welcome.php:16
6406
+ msgid ""
6407
+ "This plugin is a lightweight and powerful toolkit that helps you to create "
6408
+ "custom meta boxes and custom fields in WordPress fast and easy. Follow the "
6409
+ "instruction below to get started."
6410
+ msgstr ""
6411
 
6412
+ #: inc/libraries/meta-box/inc/fields/button.php:32
6413
+ msgid "Click me"
6414
+ msgstr "Kliknij mnie"
6415
+
6416
+ #: inc/libraries/meta-box/inc/fields/file-input.php:19
6417
+ msgid "Select File"
6418
+ msgstr "Zaznacz plik"
6419
 
6420
+ #: inc/libraries/meta-box/inc/fields/file.php:21
6421
+ #, php-format
6422
+ msgid "You may only upload maximum %d file"
6423
+ msgstr "Możesz wysłać maksymalnie %d plik"
6424
+
6425
+ #: inc/libraries/meta-box/inc/fields/file.php:23
6426
+ #, php-format
6427
+ msgid "You may only upload maximum %d files"
6428
+ msgstr "Możesz wysłać maksymalnie %d pliki/plików"
6429
 
6430
+ #: inc/libraries/meta-box/inc/fields/file.php:79
6431
+ msgid "Error: Cannot delete file"
6432
+ msgstr "Błąd: Nie można usunąć pliku"
6433
 
6434
+ #: inc/libraries/meta-box/inc/fields/file.php:93
6435
+ msgctxt "file upload"
6436
+ msgid "+ Add new file"
6437
+ msgstr "+ Dodaj nowy plik"
6438
 
6439
+ #: inc/libraries/meta-box/inc/fields/file.php:143
6440
+ msgctxt "file upload"
 
6441
  msgid "Delete"
6442
+ msgstr "Kasuj"
6443
+
6444
+ #: inc/libraries/meta-box/inc/fields/file.php:144
6445
+ msgctxt "file upload"
6446
+ msgid "Edit"
6447
+ msgstr "Edycja"
6448
+
6449
+ #: inc/libraries/meta-box/inc/fields/input-list.php:92
6450
+ msgid "Select All / None"
6451
+ msgstr "Wybierz wszystkie/żadne"
6452
+
6453
+ #: inc/libraries/meta-box/inc/fields/key-value.php:126
6454
+ msgid "Key"
6455
+ msgstr "Klucz"
6456
+
6457
+ #: inc/libraries/meta-box/inc/fields/key-value.php:127
6458
+ msgid "Value"
6459
+ msgstr "Wartość"
6460
+
6461
+ #: inc/libraries/meta-box/inc/fields/map.php:62
6462
+ msgid "Find Address"
6463
+ msgstr "Wyszukaj adres"
6464
+
6465
+ #: inc/libraries/meta-box/inc/fields/media.php:24
6466
+ msgctxt "media"
6467
+ msgid "+ Add Media"
6468
+ msgstr "+ Dodaj Media"
6469
+
6470
+ #: inc/libraries/meta-box/inc/fields/media.php:25
6471
+ msgctxt "media"
6472
+ msgid " file"
6473
+ msgstr " plik"
6474
+
6475
+ #: inc/libraries/meta-box/inc/fields/media.php:26
6476
+ msgctxt "media"
6477
+ msgid " files"
6478
+ msgstr " pliki"
6479
+
6480
+ #: inc/libraries/meta-box/inc/fields/media.php:27
6481
+ msgctxt "media"
6482
+ msgid "Remove"
6483
  msgstr "Usuń"
6484
 
6485
+ #: inc/libraries/meta-box/inc/fields/media.php:28
6486
+ msgctxt "media"
6487
+ msgid "Edit"
6488
+ msgstr "Edycja"
6489
 
6490
+ #: inc/libraries/meta-box/inc/fields/media.php:29
6491
+ msgctxt "media"
6492
+ msgid "View"
6493
+ msgstr "Podgląd"
6494
 
6495
+ #: inc/libraries/meta-box/inc/fields/media.php:30
6496
+ msgctxt "media"
6497
+ msgid "No Title"
6498
+ msgstr "Brak tytułu"
6499
 
6500
+ #: inc/libraries/meta-box/inc/fields/media.php:33
6501
+ msgctxt "media"
6502
+ msgid "Select Files"
6503
+ msgstr "Wybierz pliki"
6504
 
6505
+ #: inc/libraries/meta-box/inc/fields/media.php:34
6506
+ msgctxt "media"
6507
+ msgid "or"
6508
+ msgstr "lub"
6509
 
6510
+ #: inc/libraries/meta-box/inc/fields/media.php:35
6511
+ msgctxt "media"
6512
+ msgid "Drop files here to upload"
6513
+ msgstr "Upuść pliki tutaj aby załadować"
6514
 
6515
+ #: inc/libraries/meta-box/inc/fields/oembed.php:64
6516
+ msgid "Embed HTML not available."
6517
+ msgstr "Osadzenie HTML nie jest możliwe."
6518
 
6519
+ #: inc/libraries/meta-box/inc/fields/post.php:37
6520
+ msgid "Select a post"
6521
+ msgstr "Wybierz post"
 
6522
 
6523
+ #: inc/libraries/meta-box/inc/fields/post.php:42
6524
+ #: inc/libraries/meta-box/inc/fields/taxonomy.php:52
6525
+ #, php-format
6526
+ msgid "Select a %s"
6527
+ msgstr "Wybierz %s"
6528
 
6529
+ #: inc/libraries/meta-box/inc/fields/select-advanced.php:45
6530
+ msgid "Select an item"
6531
+ msgstr "Wybierz element"
6532
 
6533
+ #: inc/libraries/meta-box/inc/fields/select.php:87
6534
+ msgid "None"
6535
+ msgstr "Brak"
6536
 
6537
+ #: inc/libraries/meta-box/inc/fields/taxonomy.php:47
6538
+ msgid "Select a term"
6539
+ msgstr "Wybierz wartość"
6540
 
6541
+ #: inc/libraries/meta-box/inc/fields/thickbox-image.php:55
6542
+ msgctxt "image upload"
6543
+ msgid "Upload Images"
6544
+ msgstr "Wyślij obrazki"
6545
 
6546
+ #: inc/libraries/meta-box/inc/fields/user.php:30
6547
+ msgid "Select an user"
6548
+ msgstr "Wybierz użytkownika"
6549
 
6550
+ #: inc/order/class-lp-order.php:198 inc/order/class-lp-order.php:217
6551
+ #: templates/checkout/order-received.php:25
6552
+ msgid "Thank you. Your order has been received."
6553
+ msgstr "Dziękujemy. Otrzymaliśmy Twoje zamówienie."
6554
 
6555
+ #: inc/order/class-lp-order.php:389
6556
+ msgid "Removed"
6557
+ msgstr "Usunięte"
6558
 
6559
+ #: inc/order/class-lp-order.php:506
6560
+ #, php-format
6561
+ msgid "%s (Guest)"
6562
+ msgstr "%s (Gość)"
6563
 
6564
+ #: inc/order/class-lp-order.php:986
6565
+ #, php-format
6566
+ msgctxt "full name"
6567
+ msgid "%1$s"
6568
+ msgstr "%1$s"
6569
 
6570
+ #: inc/order/class-lp-order.php:1027
6571
+ msgid "No user assigned"
6572
+ msgstr "Żaden użytkownik nie przystąpił"
6573
 
6574
+ #: inc/order/class-lp-order.php:1102
6575
+ msgid "Order on"
6576
+ msgstr "Zamówienie z"
6577
 
6578
+ #: inc/order/lp-order-functions.php:67
6579
+ msgid "Invalid order ID when updating."
6580
+ msgstr "Błędne ID zamówienia podczas aktualizacji."
6581
 
6582
+ #: inc/order/lp-order-functions.php:705
6583
+ msgctxt "Order status"
6584
+ msgid "Pending Payment"
6585
+ msgstr "Oczekuje płatności"
6586
 
6587
+ #: inc/order/lp-order-functions.php:710
6588
+ #, php-format
6589
+ msgid "Pending Payment <span class=\"count\">(%s)</span>"
6590
+ msgid_plural "Pending Payment <span class=\"count\">(%s)</span>"
6591
+ msgstr[0] "Oczekująca płatność <span class=\"count\">(%s)</span>"
6592
+ msgstr[1] "Oczekujące płatności <span class=\"count\">(%s)</span>"
6593
+ msgstr[2] "Oczekujących płatności <span class=\"count\">(%s)</span>"
6594
 
6595
+ #: inc/order/lp-order-functions.php:713
6596
+ msgctxt "Order status"
6597
+ msgid "Processing"
6598
+ msgstr "W toku"
 
6599
 
6600
+ #: inc/order/lp-order-functions.php:718
6601
+ #, php-format
6602
+ msgid "Processing <span class=\"count\">(%s)</span>"
6603
+ msgid_plural "Processing <span class=\"count\">(%s)</span>"
6604
+ msgstr[0] "Przetwarzanie <span class=\"count\">(%s)</span>"
6605
+ msgstr[1] "Przetwarzanie <span class=\"count\">(%s)</span>"
6606
+ msgstr[2] "Przetwarzanie <span class=\"count\">(%s)</span>"
6607
 
6608
+ #: inc/order/lp-order-functions.php:721
6609
+ msgctxt "Order status"
6610
+ msgid "Completed"
6611
+ msgstr "Zakończone"
6612
 
6613
+ #: inc/order/lp-order-functions.php:726
6614
+ #, php-format
6615
+ msgid "Completed <span class=\"count\">(%s)</span>"
6616
+ msgid_plural "Completed <span class=\"count\">(%s)</span>"
6617
+ msgstr[0] "Ukończono <span class=\"count\">(%s)</span>"
6618
+ msgstr[1] "Ukończono <span class=\"count\">(%s)</span>"
6619
+ msgstr[2] "Ukończono <span class=\"count\">(%s)</span>"
6620
 
6621
+ #: inc/order/lp-order-functions.php:729
6622
+ msgctxt "Order status"
6623
+ msgid "Cancelled"
6624
+ msgstr "Anulowane"
6625
 
6626
+ #: inc/order/lp-order-functions.php:734
6627
+ #, php-format
6628
+ msgid "Cancelled <span class=\"count\">(%s)</span>"
6629
+ msgid_plural "Cancelled <span class=\"count\">(%s)</span>"
6630
+ msgstr[0] "Anulowano <span class=\"count\">(%s)</span>"
6631
+ msgstr[1] "Anulowano <span class=\"count\">(%s)</span>"
6632
+ msgstr[2] "Anulowano <span class=\"count\">(%s)</span>"
6633
 
6634
+ #: inc/order/lp-order-functions.php:737
6635
+ msgctxt "Order status"
6636
+ msgid "Failed"
6637
+ msgstr "Niepowodzenie"
6638
 
6639
+ #: inc/order/lp-order-functions.php:742
6640
+ #, php-format
6641
+ msgid "Failed <span class=\"count\">(%s)</span>"
6642
+ msgid_plural "Failed <span class=\"count\">(%s)</span>"
6643
+ msgstr[0] "Nie powiodło się <span class=\"count\">(%s)</span>"
6644
+ msgstr[1] "Nie powiodło się <span class=\"count\">(%s)</span>"
6645
+ msgstr[2] "Nie powiodło się <span class=\"count\">(%s)</span>"
6646
 
6647
+ #: inc/order/lp-order-functions.php:751
6648
+ msgid ""
6649
+ "Order received in case user buy a course but doesn't finalise the order."
6650
+ msgstr ""
6651
+ "Otrzymane zamówienie w przypadku, gdy użytkownik zakupi kurs, ale nie "
6652
+ "sfinalizuje zamówienia."
6653
 
6654
+ #: inc/order/lp-order-functions.php:752
6655
+ msgid "Payment received and the order is awaiting fulfillment."
6656
+ msgstr "Płatność otrzymana, a zamówienie oczekuje na wykonanie."
6657
 
6658
+ #: inc/order/lp-order-functions.php:753
6659
+ msgid "Order fulfilled and complete."
6660
+ msgstr "Zamówienie spełnione i zakończone."
6661
 
6662
+ #: inc/order/lp-order-functions.php:754
6663
+ msgid "The order is cancelled by an admin or the customer."
6664
+ msgstr "Zamówienie zostało anulowane przez admina lub użytkownika."
6665
+
6666
+ #: inc/order/lp-order-functions.php:794
6667
+ #, php-format
6668
+ msgid "Order number <strong>%s</strong> not found"
6669
+ msgstr "Numer zamówienia <strong>%s</strong> - nie znielubiono"
6670
 
6671
+ #: inc/order/lp-order-functions.php:797
6672
+ msgid "Order cancelled by customer"
6673
+ msgstr "Zamówienie anulowane przez klienta"
6674
 
6675
+ #: inc/order/lp-order-functions.php:800
6676
+ #, php-format
6677
+ msgid "Order number <strong>%s</strong> has been cancelled"
6678
+ msgstr "Numer zamówienia <strong>%s</strong> - zostało anulowane"
6679
 
6680
+ #: inc/order/lp-order-functions.php:803
6681
+ #, php-format
6682
+ msgid "Order number <strong>%s</strong> can not be cancelled"
6683
+ msgstr "Numer zamówienia <strong>%s</strong> - nie można anulować"
6684
 
6685
+ #: inc/order/lp-order-functions.php:838
6686
+ #, php-format
6687
+ msgid "You have enrolled in this course. <a href=\"%s\">Order details</a>"
6688
+ msgstr "Dołączyłeś do tego kursu. <a href=\"%s\">Szczegóły zamówienia</a>"
6689
 
6690
+ #: inc/question/class-lp-question-true-or-false.php:51
6691
+ msgid "True"
6692
+ msgstr "Prawda"
6693
 
6694
+ #: inc/question/class-lp-question-true-or-false.php:56
6695
+ msgid "False"
6696
+ msgstr "Fałsz"
6697
 
6698
+ #: inc/question/class-lp-question.php:285
6699
+ msgid "True Or False"
6700
+ msgstr "Prawda/fałsz"
6701
 
6702
+ #: inc/question/class-lp-question.php:286
6703
+ msgid "Multi Choice"
6704
+ msgstr "Wielokrotnego wyboru"
6705
 
6706
+ #: inc/question/class-lp-question.php:287
6707
+ msgid "Single Choice"
6708
+ msgstr "Jednokrotnego wyboru"
6709
 
6710
+ #: inc/question/class-lp-question.php:567
6711
+ msgid "New Option"
6712
+ msgstr "Nowa opcja"
6713
 
6714
+ #: inc/question/class-lp-question.php:585
6715
+ msgid "First option"
6716
+ msgstr "Pierwsza opcja"
 
 
 
 
 
 
 
6717
 
6718
+ #: inc/question/class-lp-question.php:590
6719
+ msgid "Second option"
6720
+ msgstr "Druga opcja"
6721
 
6722
+ #: inc/question/class-lp-question.php:595
6723
+ msgid "Third option"
6724
+ msgstr "Trzecia opcja"
6725
 
6726
+ #: inc/quiz/class-lp-quiz-factory.php:471
6727
+ msgid "Something went wrong!"
6728
+ msgstr "Coś poszło nie tak!"
6729
 
6730
+ #: inc/quiz/class-lp-quiz.php:422 templates/content-quiz/intro.php:25
6731
+ #: templates/content-quiz/progress.php:53
6732
+ msgid "Unlimited"
6733
+ msgstr "Bez limitu"
6734
 
6735
+ #: inc/quiz/class-lp-quiz.php:459
6736
+ msgid "Finish quiz"
6737
+ msgstr "Ukończ quiz"
6738
 
6739
+ #: inc/quiz/class-lp-quiz.php:460
6740
+ msgid "Are you sure you want to finish this quiz?"
6741
+ msgstr "Jesteś pewny, że chcesz ukończyć test?"
6742
 
6743
+ #: inc/quiz/class-lp-quiz.php:463
6744
+ msgid "Retake quiz"
6745
+ msgstr "Weź udział ponownie w teście"
6746
 
6747
+ #: inc/quiz/class-lp-quiz.php:464
6748
+ msgid "Are you sure you want to retake this quiz?"
6749
+ msgstr "Jesteś pewny, że chcesz wziąć udział ponownie w teście?"
6750
 
6751
+ #: inc/quiz/class-lp-quiz.php:467
6752
+ msgid "Time's up!"
6753
+ msgstr "Koniec czasu!"
6754
+
6755
+ #: inc/quiz/class-lp-quiz.php:468
6756
+ msgid "The time is up! Your quiz will automate come to finish"
6757
+ msgstr "Czas się skończył! Test zostaje automatycznie ukończony"
6758
 
6759
+ #: inc/quiz/class-lp-quiz.php:470
6760
+ msgid "Congrats! You have finished this quiz"
6761
+ msgstr "Brawo! Ukończyłeś test"
6762
 
6763
+ #: inc/quiz/class-lp-quiz.php:471
6764
  msgid ""
6765
+ "Congrats! You have re-taken this quiz. Please wait a moment and the page "
6766
+ "will reload"
6767
  msgstr ""
6768
+ "Brawo! Wziąłeś udział ponownie w teście. Odczekaj sekundę i strona się "
6769
+ "przeładuje"
6770
 
6771
+ #: inc/shortcodes/class-lp-shortcode-become-a-teacher.php:39
6772
+ #, php-format
6773
+ msgid "Please %s to send your request!"
6774
+ msgstr "Proszę %s, aby wysłać swoje zlecenie!"
6775
 
6776
+ #: inc/shortcodes/class-lp-shortcode-become-a-teacher.php:39
6777
+ msgctxt "become-teacher-form"
6778
+ msgid "login"
6779
+ msgstr "login"
6780
+
6781
+ #: inc/shortcodes/class-lp-shortcode-become-a-teacher.php:42
6782
+ msgid "Your have already sent the request. Please wait for approvement."
6783
+ msgstr "Już wysłałeś zlecenie. Proszę poczekać na akceptację."
6784
+
6785
+ #: inc/shortcodes/class-lp-shortcode-become-a-teacher.php:44
6786
+ msgid "You are a teacher!"
6787
+ msgstr "Jesteś instruktorem!"
6788
+
6789
+ #: inc/shortcodes/class-lp-shortcode-become-a-teacher.php:103
6790
+ msgid "Please login to fill in this form."
6791
+ msgstr "Proszę się zalogować aby wypełnić formularz."
6792
+
6793
+ #: inc/shortcodes/class-lp-shortcode-become-a-teacher.php:106
6794
+ msgid "You are a teacher now."
6795
+ msgstr "Zostałeś nauczycielem."
6796
+
6797
+ #: inc/shortcodes/class-lp-shortcode-become-a-teacher.php:112
6798
+ msgid "Your role is allowed to create a course."
6799
+ msgstr "Masz uprawnienia, aby stworzyć kurs."
6800
+
6801
+ #: inc/shortcodes/class-lp-shortcode-become-a-teacher.php:122
6802
+ msgid "Fill in your information and send us to become a teacher."
6803
+ msgstr "Wypełni swoje informacje oraz wyślij aby zostać nauczycielem."
6804
+
6805
+ #: inc/shortcodes/class-lp-shortcode-become-a-teacher.php:123
6806
+ #: templates/global/become-teacher-form/button.php:19
6807
+ msgid "Submit"
6808
+ msgstr "Zatwierdź"
6809
+
6810
+ #: inc/shortcodes/class-lp-shortcode-course-curriculum.php:44
6811
+ msgid "Invalid course."
6812
+ msgstr "Niepoprawny kurs."
6813
+
6814
+ #: inc/shortcodes/class-lp-shortcode-login-form.php:39
6815
+ #: inc/shortcodes/class-lp-shortcode-register-form.php:41
6816
+ #, php-format
6817
+ msgid "Your are logged in as %s. <a href=\"%s\">Log out</a>?"
6818
+ msgstr "Jesteś zalogowany jako %s. <a href=\"%s\">Wylogować</a>?"
6819
+
6820
+ #: inc/shortcodes/class-lp-shortcode-login-form.php:61
6821
+ #: inc/shortcodes/class-lp-shortcode-login-form.php:63
6822
+ msgid "Username or email"
6823
+ msgstr "Login lub email"
6824
 
6825
+ #: inc/shortcodes/class-lp-shortcode-register-form.php:86
6826
+ msgid ""
6827
+ "The password should be at least twelve characters long. To make it stronger, "
6828
+ "use upper and lower case letters, numbers, and symbols like ! \" ? $ % ^ & )"
6829
  msgstr ""
6830
+ "Hasło powinno zawierać co najmniej 12 znaków. Aby było silniejsze, użyj "
6831
+ "zarówno małych jak i dużych znaków, numeru i symbolu jak ! \" ? $ % ^ & )"
6832
 
6833
+ #: inc/updates/_update-from-0.9.php:1206
6834
+ msgctxt "Permalink Slug"
6835
+ msgid "lesson-tag"
6836
+ msgstr "etykieta lekcji"
6837
 
6838
+ #: inc/updates/_update-from-0.9.php:1228
6839
+ msgctxt "Permalink Slug"
6840
+ msgid "question-tag"
6841
+ msgstr "pytanie-etykieta"
6842
 
6843
+ #: inc/user/abstract-lp-user.php:360
6844
+ msgid "You cannot start a quiz in preview mode."
6845
+ msgstr "Nie możesz rozpocząć testy w trybie podglądu."
6846
 
6847
+ #: inc/user/abstract-lp-user.php:367
6848
+ msgid "Course does not exist or does not contain the quiz"
6849
+ msgstr "Kurs nie istnieje lub nie zawiera testu"
6850
 
6851
+ #: inc/user/abstract-lp-user.php:372
6852
+ msgid "User has already finished the course of this quiz"
6853
+ msgstr "Użytkownik ukończył już kurs dla tego testu"
6854
 
6855
+ #: inc/user/abstract-lp-user.php:378
6856
+ msgid "User has started or completed quiz"
6857
+ msgstr "Użytkownik już rozpoczął lub zakończył test"
6858
 
6859
+ #: inc/user/abstract-lp-user.php:385
6860
+ msgid "You have to login for starting quiz."
6861
+ msgstr "Musisz się zalogować aby rozpocząć test."
6862
 
6863
+ #: inc/user/abstract-lp-user.php:402
6864
+ msgid "Start quiz failed!"
6865
+ msgstr "Błąd rozpoczęcia testu!"
6866
 
6867
+ #: inc/user/abstract-lp-user.php:439
6868
+ msgid "Course is not exists or does not contain the quiz"
6869
+ msgstr "Kurs nie istnieje lub nie zawiera testu"
6870
 
6871
+ #: inc/user/abstract-lp-user.php:444
6872
+ msgid "User has already finished course of this quiz"
6873
+ msgstr "Użytkownik ukończył już test dla tego kursu"
 
6874
 
6875
+ #: inc/user/abstract-lp-user.php:450
6876
+ msgid "User has completed quiz"
6877
+ msgstr "Użytkownik ukończył test"
6878
 
6879
+ #: inc/user/abstract-lp-user.php:492
6880
+ msgid "Course does not exist or does not contain the quiz."
6881
+ msgstr "Kurs nie istnieje lub nie zawiera testu."
6882
 
6883
+ #: inc/user/abstract-lp-user.php:497
6884
+ msgid "You can not redo a quiz in a finished course."
6885
+ msgstr "Nie możesz zrobić ponownie testu w już ukończonym kursie."
6886
 
6887
+ #: inc/user/abstract-lp-user.php:503
6888
+ #, php-format
6889
+ msgid "%s::%s - User has not completed quiz."
6890
+ msgstr "%s::%s - Użytkownik nie ukończył testu."
6891
 
6892
+ #: inc/user/abstract-lp-user.php:1082
6893
+ msgid "You can not hint question."
6894
+ msgstr "Nie możesz otrzymać podpowiedzi do pytania."
6895
 
6896
+ #: inc/user/abstract-lp-user.php:1549 inc/user/abstract-lp-user.php:1896
6897
+ #: inc/user/abstract-lp-user.php:1908
6898
+ #, php-format
6899
+ msgid "The role %s for user doesn't exist"
6900
+ msgstr "Rola %s dla użytkowników nie istnieje"
6901
 
6902
+ #: inc/user/abstract-lp-user.php:2215
6903
+ msgid "You can not complete a preview lesson."
6904
+ msgstr "Nie możesz rozpocząć testy w trybie podglądu."
6905
 
6906
+ #: inc/user/abstract-lp-user.php:2242
6907
+ msgid "You have already completed this lesson"
6908
+ msgstr "Już ukończyłeś lekcję"
6909
 
6910
+ #: inc/user/abstract-lp-user.php:2612 inc/user/abstract-lp-user.php:2616
6911
+ msgid "Failed to enroll course."
6912
+ msgstr "Błąd przystępowania do kursu."
6913
 
6914
+ #: inc/user/abstract-lp-user.php:2620
6915
+ msgid "Please login to enroll course."
6916
+ msgstr "Proszę się zalogować, aby przystąpić do kursu."
6917
 
6918
+ #: inc/user/class-lp-profile.php:84
6919
+ msgid "Account information updated successful."
6920
+ msgstr "Informacje o koncie zostały zakutalizowane."
6921
 
6922
+ #: inc/user/class-lp-profile.php:85
6923
+ msgid "Account avatar updated successful."
6924
+ msgstr "Avatar konta został zaktualizowany."
6925
 
6926
+ #: inc/user/class-lp-profile.php:86
6927
+ msgid "Password updated successful."
6928
+ msgstr "Hasło zaktualizowane poprawnie."
6929
 
6930
+ #: inc/user/class-lp-profile.php:87
6931
+ msgid "Account publicity updated successful."
6932
+ msgstr "Rozgłos konta został zaktualizowany."
6933
 
6934
+ #: inc/user/class-lp-profile.php:835 inc/user-item/class-lp-user-item.php:352
6935
+ msgid "Not enrolled"
6936
+ msgstr "Nie przystąpiono"
 
 
 
 
6937
 
6938
+ #: inc/user/class-lp-user-factory.php:355
6939
+ msgid "Every 3 Minutes"
6940
+ msgstr "Co 3 minuty"
6941
 
6942
+ #: inc/user/lp-user-functions.php:151
6943
+ msgctxt "User role"
6944
+ msgid "Instructor"
6945
+ msgstr "Nauczyciel"
6946
 
6947
+ #: inc/user/lp-user-functions.php:360
6948
+ msgid "Want to become an instructor?"
6949
+ msgstr "Chcesz być nauczycielem?"
6950
 
6951
+ #: inc/user/lp-user-functions.php:834
6952
+ msgid "Only"
6953
+ msgstr "Tylko"
6954
 
6955
+ #: inc/user/lp-user-functions.php:834
6956
+ msgid "images accepted for upload"
6957
+ msgstr "obrazek zaakceptowano do załądowania"
 
6958
 
6959
+ #: inc/user/lp-user-functions.php:843
6960
+ msgid "Images must be under"
6961
+ msgstr "Zdjęcia muszą być poniżej"
6962
 
6963
+ #: inc/user/lp-user-functions.php:843
6964
+ msgid "MB in size"
6965
+ msgstr "MB w rozmiarze"
6966
 
6967
+ #: inc/user/lp-user-functions.php:851
6968
+ msgid "Please select an image for upload"
6969
+ msgstr "Wybierz zdjęcie, aby załadować"
6970
 
6971
+ #: inc/user/lp-user-functions.php:880
6972
+ msgid "Image is uploaded success"
6973
+ msgstr "Wczytano obrazek"
6974
 
6975
+ #: inc/user/lp-user-functions.php:880
6976
+ msgid "Error in uploading image"
6977
+ msgstr "Błąd przy wczytywaniu zdjęcia"
6978
 
6979
+ #: inc/user/lp-user-functions.php:906 inc/user/lp-user-functions.php:937
6980
+ #: inc/user/lp-user-functions.php:953 inc/user/lp-user-functions.php:960
6981
+ msgid "Thumbnail of image profile not created"
6982
+ msgstr "Brak miniaturki zdjęcia profilowego"
6983
 
6984
+ #: inc/user/lp-user-functions.php:924
6985
+ msgid "Error in cropping user picture profile"
6986
+ msgstr "Błąd przycinania zdjęcia profilowego"
6987
 
6988
+ #: inc/user/lp-user-functions.php:979
6989
+ msgid "Profile picture is changed"
6990
+ msgstr "Zdjęcie profilowe zostało zmienione"
6991
 
6992
+ #: inc/user/lp-user-functions.php:1023 inc/user/lp-user-functions.php:1510
6993
+ msgid "Old password incorrect!"
6994
+ msgstr "Stare hasło niepoprawne!"
6995
 
6996
+ #: inc/user/lp-user-functions.php:1037 inc/user/lp-user-functions.php:1517
6997
+ msgid "Confirmation password incorrect!"
6998
+ msgstr "Potwierdzenie hasła niepoprawne!"
6999
 
7000
+ #: inc/user/lp-user-functions.php:1056
7001
+ msgid "Your changes are saved"
7002
+ msgstr "Twoja zmiana została zapisana"
 
7003
 
7004
+ #: inc/user/lp-user-functions.php:1064
7005
+ msgid "Error in update your profile info"
7006
+ msgstr "Błąd przy wczytywaniu zdjęcia profilowego"
7007
 
7008
+ #: inc/user/lp-user-functions.php:1198
7009
+ msgid "Please login to enroll this course"
7010
+ msgstr "Zaloguj się, aby dołączyć do kursu"
 
7011
 
7012
+ #: inc/user/lp-user-functions.php:1216
7013
+ msgid "You have already finished course"
7014
+ msgstr "Już ukończyłeś ten kurs"
 
7015
 
7016
+ #: inc/user/lp-user-functions.php:1219
7017
+ msgid "You have already enrolled in this course"
7018
+ msgstr "Już dołączyłeś do tego kursu"
7019
 
7020
+ #: inc/user-item/class-lp-user-item-quiz.php:335
7021
+ msgid "Check question has reached limit."
7022
+ msgstr "Osiągnięto limit sprawzdania pytania."
7023
 
7024
+ #: inc/user-item/class-lp-user-item-quiz.php:337
7025
+ msgid "You have already checked this question."
7026
+ msgstr "Już sprawdziłeś te pytanie."
7027
 
7028
+ #: inc/widgets/course-attributes/course-attributes.php:14
7029
+ msgid "Course attributes"
7030
+ msgstr "Atrybuty kursu"
7031
 
7032
+ #: inc/widgets/course-filters/course-filters.php:14
7033
+ msgid "Course filters"
7034
+ msgstr "Filtry kursu"
7035
 
7036
+ #: inc/widgets/course-filters/course-filters.php:17
7037
+ msgid "Filter by"
7038
+ msgstr "Filtruj przez"
7039
 
7040
+ #: inc/widgets/course-filters/course-filters.php:24
7041
+ msgid "Attribute operation"
7042
+ msgstr "Operator atrybutu"
7043
 
7044
+ #: inc/widgets/course-filters/course-filters.php:29
7045
+ #: inc/widgets/course-filters/course-filters.php:39
7046
+ msgid "And"
7047
+ msgstr "I"
7048
+
7049
+ #: inc/widgets/course-filters/course-filters.php:30
7050
+ #: inc/widgets/course-filters/course-filters.php:40
7051
+ msgid "Or"
7052
+ msgstr "Lub"
7053
 
7054
+ #: inc/widgets/course-filters/course-filters.php:34
7055
+ msgid "Value operation"
7056
+ msgstr "Wartość operatora"
7057
 
7058
+ #: inc/widgets/course-filters/course-filters.php:44
7059
+ msgid "Ajax filter"
7060
+ msgstr "Filtr Ajax"
7061
 
7062
+ #: inc/widgets/course-filters/course-filters.php:48
7063
+ msgid "Use ajax to fetch content while filtering"
7064
+ msgstr "Użyj ajax by ustawić treść przy filtrowaniu"
7065
 
7066
+ #: inc/widgets/course-filters/course-filters.php:51
7067
+ msgid "Button filter"
7068
+ msgstr "Przycisk filtru"
7069
 
7070
+ #: inc/widgets/course-filters/course-filters.php:55
7071
+ msgid "If checked, user has to click this button to start filtering"
7072
+ msgstr ""
7073
+ "Jeżeli zaznaczone, użytkownik musi kliknąć w przycisk aby przefiltrować"
7074
+
7075
+ #: inc/widgets/course-filters/tmpl/default.php:83
7076
+ msgid "Filter"
7077
+ msgstr "Filtr"
7078
+
7079
+ #: inc/widgets/course-info/course-info.php:49
7080
+ msgid "Course Info"
7081
+ msgstr "Informacje o kursie"
7082
+
7083
+ #: inc/widgets/course-info/course-info.php:52
7084
+ #: inc/widgets/course-progress/course-progress.php:52
7085
+ #: inc/widgets/featured-courses/featured-courses.php:95
7086
+ #: inc/widgets/popular-courses/popular-courses.php:96
7087
+ #: inc/widgets/recent-courses/recent-courses.php:96
7088
+ msgid "CSS Class"
7089
+ msgstr "Klasa CSS"
7090
+
7091
+ #: inc/widgets/course-progress/course-progress.php:49
7092
+ msgid "Course Progress"
7093
+ msgstr "Postęp kursu"
7094
+
7095
+ #: inc/widgets/featured-courses/featured-courses.php:48
7096
+ msgid "Featured Courses"
7097
+ msgstr "Opis kursu"
7098
 
7099
+ #: inc/widgets/featured-courses/featured-courses.php:51
7100
+ #: inc/widgets/popular-courses/popular-courses.php:52
7101
+ #: inc/widgets/recent-courses/recent-courses.php:52
7102
+ msgid "Show teacher"
7103
+ msgstr "Pokaż nauczyciela"
7104
+
7105
+ #: inc/widgets/featured-courses/featured-courses.php:57
7106
+ #: inc/widgets/popular-courses/popular-courses.php:58
7107
+ #: inc/widgets/recent-courses/recent-courses.php:58
7108
+ msgid "Show lesson"
7109
+ msgstr "Pokaż lekcje"
7110
+
7111
+ #: inc/widgets/featured-courses/featured-courses.php:63
7112
+ #: inc/widgets/popular-courses/popular-courses.php:64
7113
+ #: inc/widgets/recent-courses/recent-courses.php:64
7114
+ msgid "Show Thumbnail"
7115
+ msgstr "Pokaż miniaturkę"
7116
+
7117
+ #: inc/widgets/featured-courses/featured-courses.php:69
7118
+ #: inc/widgets/popular-courses/popular-courses.php:70
7119
+ #: inc/widgets/recent-courses/recent-courses.php:70
7120
+ msgid "Limit"
7121
+ msgstr "Limit"
7122
+
7123
+ #: inc/widgets/featured-courses/featured-courses.php:76
7124
+ #: inc/widgets/popular-courses/popular-courses.php:77
7125
+ #: inc/widgets/recent-courses/recent-courses.php:77
7126
+ msgid "Description Length"
7127
+ msgstr "Długość opisu"
7128
+
7129
+ #: inc/widgets/featured-courses/featured-courses.php:83
7130
+ #: inc/widgets/popular-courses/popular-courses.php:84
7131
+ #: inc/widgets/recent-courses/recent-courses.php:84
7132
+ msgid "Show Enrolled Students"
7133
+ msgstr "Pokaż osoby, które przystąpiły"
7134
+
7135
+ #: inc/widgets/featured-courses/featured-courses.php:89
7136
+ #: inc/widgets/popular-courses/popular-courses.php:90
7137
+ #: inc/widgets/recent-courses/recent-courses.php:90
7138
+ msgid "Show Price"
7139
+ msgstr "Pokaż cenę"
7140
+
7141
+ #: inc/widgets/featured-courses/featured-courses.php:101
7142
+ #: inc/widgets/popular-courses/popular-courses.php:102
7143
+ #: inc/widgets/recent-courses/recent-courses.php:102
7144
+ msgid "Go to Courses"
7145
+ msgstr "Idź do kursu"
7146
+
7147
+ #: inc/widgets/popular-courses/popular-courses.php:49
7148
+ msgid "Popular Courses"
7149
+ msgstr "Popularne kursy"
7150
+
7151
+ #: inc/widgets/recent-courses/recent-courses.php:49
7152
+ msgid "Recent Courses"
7153
+ msgstr "Nowe kursy"
7154
+
7155
+ #: node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py:50
7156
+ msgid ""
7157
+ "\n"
7158
+ msgstr ""
7159
+ "\n"
7160
 
7161
+ #: node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py:83
7162
+ #, python-format
7163
+ msgid " %s=\"%s\""
7164
+ msgstr " %s=\"%s\""
7165
+
7166
+ #: node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py:100
7167
+ #, python-format
7168
+ msgid "</%s>%s"
7169
+ msgstr "</%s>%s"
7170
+
7171
+ #: node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py:102
7172
+ #, python-format
7173
+ msgid "/>%s"
7174
+ msgstr "/>%s"
7175
+
7176
+ #: node_modules/node-gyp/gyp/pylib/gyp/input.py:1832
7177
+ #: node_modules/node-gyp/gyp/pylib/gyp/input.py:1893
7178
+ #, python-format
7179
+ msgid "Cycle: %s"
7180
+ msgstr "Akceptacja: %s"
7181
 
7182
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:358
7183
+ msgid "_MBCS"
7184
+ msgstr "_MBCS"
7185
 
7186
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:423
7187
+ msgid "/safeseh"
7188
+ msgstr "/safeseh"
7189
+
7190
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:473
7191
+ msgid "/FS"
7192
+ msgstr "/FS"
7193
+
7194
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:543
7195
+ #, python-format
7196
+ msgid "/DEF:\"%s\""
7197
+ msgstr "/DEF:\"%s\""
7198
 
7199
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:575
7200
+ msgid "/OUT:"
7201
+ msgstr "/OUT:"
7202
 
7203
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:578
7204
+ msgid "/PDB:"
7205
+ msgstr "/PDB:"
7206
 
7207
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:581
7208
+ msgid "/PGD:"
7209
+ msgstr "/PGD:"
7210
 
7211
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:604
7212
+ #, python-format
7213
+ msgid "/STACK:%s%s"
7214
+ msgstr "/STACK:%s%s"
7215
 
7216
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:643
7217
+ msgid "/DYNAMICBASE"
7218
+ msgstr "/DYNAMICBASE"
7219
 
7220
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:650
7221
+ msgid "/NXCOMPAT"
7222
+ msgstr "/NXCOMPAT"
7223
 
7224
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:692
7225
+ msgid "/MANIFESTUAC:NO"
7226
+ msgstr "/MANIFESTUAC:NO"
 
7227
 
7228
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:740
7229
+ msgid "/ALLOWISOLATION"
7230
+ msgstr "/ALLOWISOLATION"
7231
 
7232
+ #: node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py:785
7233
+ msgid "/I"
7234
+ msgstr "/I"
7235
 
7236
+ #: node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py:72
7237
+ msgid "|"
7238
+ msgstr "|"
7239
+
7240
+ #: node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py:76
7241
+ msgid "||"
7242
+ msgstr "||"
7243
+
7244
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py:276
7245
+ #, python-format
7246
+ msgid "\\U%04x"
7247
+ msgstr "\\U%04x"
7248
+
7249
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py:988
7250
+ msgid ".name"
7251
+ msgstr ".name"
7252
+
7253
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py:999
7254
+ msgid ".path"
7255
+ msgstr ".path"
7256
+
7257
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py:1066
7258
+ msgid "$("
7259
+ msgstr "$("
7260
+
7261
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:478
7262
+ #, python-format
7263
+ msgid "-isysroot %s"
7264
+ msgstr "-isysroot %s"
7265
+
7266
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:481
7267
+ msgid "-Wconstant-conversion"
7268
+ msgstr "-Wconstant-conversion"
7269
+
7270
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:484
7271
+ msgid "-funsigned-char"
7272
+ msgstr "-funsigned-char"
7273
+
7274
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:487
7275
+ msgid "-fasm-blocks"
7276
+ msgstr "-fasm-blocks"
7277
+
7278
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:491
7279
+ msgid "-mdynamic-no-pic"
7280
+ msgstr "-mdynamic-no-pic"
7281
+
7282
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:499
7283
+ msgid "-mpascal-strings"
7284
+ msgstr "-mpascal-strings"
7285
+
7286
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:506
7287
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:510
7288
+ msgid "-gdwarf-2"
7289
+ msgstr "-gdwarf-2"
7290
+
7291
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:515
7292
+ msgid "-fstrict-aliasing"
7293
+ msgstr "-fstrict-aliasing"
7294
+
7295
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:517
7296
+ msgid "-fno-strict-aliasing"
7297
+ msgstr "-fno-strict-aliasing"
7298
+
7299
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:520
7300
+ msgid "-fvisibility=hidden"
7301
+ msgstr "-fvisibility=hidden"
7302
+
7303
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:523
7304
+ msgid "-Werror"
7305
+ msgstr "-Werror"
7306
+
7307
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:526
7308
+ msgid "-Wnewline-eof"
7309
+ msgstr "-Wnewline-eof"
7310
+
7311
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:533
7312
+ msgid "-flto"
7313
+ msgstr "-flto"
7314
+
7315
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:556
7316
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:814
7317
+ msgid "-arch "
7318
+ msgstr "-arch "
7319
+
7320
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:560
7321
+ msgid "-msse3"
7322
+ msgstr "-msse3"
7323
+
7324
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:563
7325
+ msgid "-mssse3"
7326
+ msgstr "-mssse3"
7327
+
7328
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:565
7329
+ msgid "-msse4.1"
7330
+ msgstr "-msse4.1"
7331
+
7332
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:567
7333
+ msgid "-msse4.2"
7334
+ msgstr "-msse4.2"
7335
+
7336
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:578
7337
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:832
7338
+ msgid "-F"
7339
+ msgstr "-F"
7340
+
7341
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:588
7342
+ msgid "-ansi"
7343
+ msgstr "-ansi"
7344
+
7345
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:605
7346
+ #, python-format
7347
+ msgid "-std=%s"
7348
+ msgstr "-std=%s"
7349
+
7350
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:610
7351
+ msgid "-fno-rtti"
7352
+ msgstr "-fno-rtti"
7353
+
7354
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:612
7355
+ msgid "-fno-exceptions"
7356
+ msgstr "-fno-exceptions"
7357
+
7358
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:614
7359
+ msgid "-fvisibility-inlines-hidden"
7360
+ msgstr "-fvisibility-inlines-hidden"
7361
+
7362
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:616
7363
+ msgid "-fno-threadsafe-statics"
7364
+ msgstr "-fno-threadsafe-statics"
7365
+
7366
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:619
7367
+ msgid "-Wno-invalid-offsetof"
7368
+ msgstr "-Wno-invalid-offsetof"
7369
+
7370
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:639
7371
+ msgid "-fobjc-gc"
7372
+ msgstr "-fobjc-gc"
7373
+
7374
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:641
7375
+ msgid "-fobjc-gc-only"
7376
+ msgstr "-fobjc-gc-only"
7377
+
7378
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:645
7379
+ msgid "-fobjc-arc"
7380
+ msgstr "-fobjc-arc"
7381
+
7382
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:650
7383
+ msgid "-Wobjc-missing-property-synthesis"
7384
+ msgstr "-Wobjc-missing-property-synthesis"
7385
+
7386
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:670
7387
+ msgid "-fobjc-call-cxx-cdtors"
7388
+ msgstr "-fobjc-call-cxx-cdtors"
7389
+
7390
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:782
7391
+ msgid "-Wl,-dead_strip"
7392
+ msgstr "-Wl,-dead_strip"
7393
+
7394
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:785
7395
+ msgid "-Wl,-prebind"
7396
+ msgstr "-Wl,-prebind"
7397
+
7398
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:795
7399
+ msgid "-isysroot "
7400
+ msgstr "-isysroot "
7401
+
7402
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:798
7403
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:817
7404
+ msgid "-L"
7405
+ msgstr "-L"
7406
+
7407
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:801
7408
+ msgid "-Wl,-order_file "
7409
+ msgstr "-Wl,-order_file "
7410
+
7411
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:821
7412
+ msgid "-install_name "
7413
+ msgstr "-install_name "
7414
+
7415
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:824
7416
+ msgid "-Wl,-rpath,"
7417
+ msgstr "-Wl,-rpath,"
7418
+
7419
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:840
7420
+ msgid "-lpkstart"
7421
+ msgstr "-lpkstart"
7422
+
7423
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:843
7424
+ msgid "/System/Library/PrivateFrameworks/PlugInKit.framework/PlugInKit"
7425
+ msgstr "/System/Library/PrivateFrameworks/PlugInKit.framework/PlugInKit"
7426
+
7427
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:844
7428
+ msgid "-fapplication-extension"
7429
+ msgstr "-fapplication-extension"
7430
+
7431
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:845
7432
+ msgid "-Xlinker -rpath -Xlinker @executable_path/../../Frameworks"
7433
+ msgstr "-Xlinker -rpath -Xlinker @executable_path/../../Frameworks"
7434
+
7435
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:937
7436
+ #, python-format
7437
+ msgid "echo STRIP\\(%s\\)"
7438
+ msgstr "echo STRIP\\(%s\\)"
7439
+
7440
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:938
7441
+ #, python-format
7442
+ msgid "strip %s %s"
7443
+ msgstr "strip %s %s"
7444
+
7445
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:956
7446
+ #, python-format
7447
+ msgid "echo DSYMUTIL\\(%s\\)"
7448
+ msgstr "echo DSYMUTIL\\(%s\\)"
7449
+
7450
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:957
7451
+ #, python-format
7452
+ msgid "dsymutil %s -o %s"
7453
+ msgstr "dsymutil %s -o %s"
7454
+
7455
+ #: node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py:1594
7456
+ #, python-format
7457
+ msgid "echo POSTBUILD\\(%s\\) %s"
7458
+ msgstr "echo POSTBUILD\\(%s\\) %s"
7459
+
7460
+ #: node_modules/node-gyp/gyp/pylib/gyp/__init__.py:364
7461
+ msgid "USERPROFILE"
7462
+ msgstr "USERPROFILE"
7463
+
7464
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py:663
7465
+ msgid "all"
7466
+ msgstr "wszystkie"
7467
+
7468
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/android.py:450
7469
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/make.py:955
7470
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/make.py:1081
7471
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/make.py:1123
7472
+ #, python-format
7473
+ msgid "$(%s)"
7474
+ msgstr "$(%s)"
7475
+
7476
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py:376
7477
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py:377
7478
+ msgid "${"
7479
+ msgstr "${"
7480
+
7481
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py:223
7482
+ msgid "1"
7483
+ msgstr "1"
7484
+
7485
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/make.py:1252
7486
+ msgid "$(OBJS)"
7487
+ msgstr "$(OBJS)"
7488
+
7489
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/make.py:1471
7490
+ #, python-format
7491
+ msgid "-Wl,-rpath=\\$$ORIGIN/lib.%s/"
7492
+ msgstr "-Wl,-rpath=\\$$ORIGIN/lib.%s/"
7493
+
7494
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/make.py:1472
7495
+ #, python-format
7496
+ msgid "-Wl,-rpath-link=\\$(builddir)/lib.%s/"
7497
+ msgstr "-Wl,-rpath-link=\\$(builddir)/lib.%s/"
7498
+
7499
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/make.py:1500
7500
+ msgid "$(TARGET_POSTBUILDS_$(BUILDTYPE))"
7501
+ msgstr "$(TARGET_POSTBUILDS_$(BUILDTYPE))"
7502
+
7503
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/make.py:1961
7504
+ msgid "BUILDTYPE="
7505
+ msgstr "BUILDTYPE="
7506
+
7507
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py:2946
7508
+ msgid "Label"
7509
+ msgstr "Label"
7510
+
7511
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py:3109
7512
+ #, python-format
7513
+ msgid "%%(%s)"
7514
+ msgstr "%%(%s)"
7515
+
7516
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py:1181
7517
+ #, python-format
7518
+ msgid "-Wl,-rpath=\\$$ORIGIN/%s"
7519
+ msgstr "-Wl,-rpath=\\$$ORIGIN/%s"
7520
+
7521
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py:1182
7522
+ #, python-format
7523
+ msgid "-Wl,-rpath-link=%s"
7524
+ msgstr "-Wl,-rpath-link=%s"
7525
+
7526
+ #: node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py:1415
7527
+ #, python-format
7528
+ msgid "export %s=%s;"
7529
+ msgstr "export %s=%s;"
7530
+
7531
+ #: templates/search-form.php:26
7532
+ msgid "Search course..."
7533
+ msgstr "Wyszukaj kurs..."
7534
+
7535
+ #: templates/checkout/form-logged-in.php:27
7536
+ #, php-format
7537
+ msgid "Logged in as <a href=\"%1$s\">%2$s</a>."
7538
+ msgstr "Zalogowano się jako <a href=\"%1$s\">%2$s</a>."
7539
 
7540
+ #: templates/checkout/form-logged-in.php:30
7541
+ msgid "Log out of this account"
7542
+ msgstr "Wyloguj się z tego konta"
7543
 
7544
+ #: templates/checkout/form-logged-in.php:30
7545
+ msgid "Log out &raquo;"
7546
+ msgstr "Log out &raquo;"
7547
 
7548
+ #: templates/checkout/form-login.php:34
7549
+ msgid "Returning customer"
7550
+ msgstr "Powracający klient"
 
 
7551
 
7552
+ #: templates/checkout/form-login.php:35
7553
+ msgid "I am a returning customer."
7554
+ msgstr "Jestem powracającym kl