PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.3.9.1
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.3.9.1
4.4.8 4.4.7 4.4.6 4.4.5 4.4.4 4.4.3 4.4.2 4.4.1 4.4.0 4.3.9.1 4.3.9 4.3.8 4.3.7 4.1.6.9 4.1.6.9.1 4.1.6.9.2 4.1.6.9.3 4.1.6.9.4 4.1.7 4.1.7.1 4.1.7.2 4.1.7.3 4.1.7.3.1 4.1.7.3.2 4.2.0 All 139 releases
learnpress / inc / admin / views / course / modal-choose-items.php

modal-choose-items.php in LearnPress – WordPress LMS Plugin for Create and Sell Online Courses 4.3.9.1, at inc/admin/views/course/modal-choose-items.php

263 lines 6.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Template choose items.
4 *
5 * @since 3.0.0
6 */
7
8 learn_press_admin_view( 'course/added-items-preview' );
9 learn_press_admin_view( 'course/pagination' );
10 ?>
11
12 <script type="text/x-template" id="tmpl-lp-course-choose-item">
13 <li class="section-item" :class="[item.type, item.added ? 'added' : 'addable']" @click="add">
14 <input type="checkbox" :checked="item.added === true">
15 <span class="title">{{item.title}} <strong>(#{{item.id}})</strong></span>
16 </li>
17 </script>
18
19 <script type="text/javascript">
20 window.$Vue = window.$Vue || Vue;
21
22 jQuery( function( $ ) {
23 ( function( $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 })(LP_Curriculum_Store);
46 });
47 </script>
48
49 <script type="text/x-template" id="tmpl-lp-course-choose-items">
50 <div id="lp-modal-choose-items" :class="{show:show, loading: loading}">
51 <div class="lp-choose-items" :class="{'show-preview': showPreview}">
52 <div class="header">
53 <div class="preview-title">
54 <span><?php esc_html_e( 'Selected items', 'learnpress' ); ?> ({{addedItems.length}})</span>
55 </div>
56
57 <ul class="tabs">
58 <template v-for="(type, key) in types">
59 <li :data-type="key" :class="['tab', key === tab ? 'active': 'inactive']" @click.prevent="changeTab(key)">
60 <a href="#" @click.prevent="">{{type}}</a>
61 </li>
62 </template>
63 </ul>
64
65 <a class="close" @click="close">
66 <span class="dashicons dashicons-no-alt" title="<?php esc_attr_e( 'Close', 'learnpress' ); ?>"></span>
67 </a>
68 </div>
69 <div class="main">
70 <form class="search" @submit.prevent="">
71 <input type="text" class="modal-search-input" placeholder="<?php esc_attr_e( 'Type here to search for an item', 'learnpress' ); ?>" title="search" @input="onChangeQuery" v-model="query">
72 </form>
73
74 <ul class="list-items">
75 <template v-if="!items.length">
76 <div><?php esc_html_e( 'No item found.', 'learnpress' ); ?></div>
77 </template>
78
79 <template v-for="item in items">
80 <lp-course-choose-item @add="addItem" @remove="removeItem" :added="item.added" :item="item"></lp-course-choose-item>
81 </template>
82 </ul>
83
84 <lp-pagination :total="totalPage" @update="changePage"></lp-pagination>
85 <lp-added-items-preview :show="showPreview"></lp-added-items-preview>
86 </div>
87
88 <div class="footer">
89 <div class="cart">
90 <button type="button" class="button button-primary checkout"
91 @click="checkout" :disabled="!addedItems.length || adding">
92 <span v-if="!adding"><?php esc_html_e( 'Add', 'learnpress' ); ?></span>
93 <span v-if="adding"><?php esc_html_e( 'Adding', 'learnpress' ); ?></span>
94 </button>
95
96 <button type="button" class="button button-secondary edit-selected"
97 :disabled="adding || (!addedItems.length && !showPreview)"
98 @click.prevent="showPreview = !showPreview">
99 {{textButtonEdit}}
100 </button>
101 </div>
102 </div>
103 </div>
104 </div>
105 </script>
106
107 <script type="text/javascript">
108 window.$Vue = window.$Vue || Vue;
109
110 jQuery( function( $ ) {
111 ( function( $store ) {
112 $Vue.component( 'lp-curriculum-choose-items', {
113 template: '#tmpl-lp-course-choose-items',
114 data: function() {
115 return {
116 query: '',
117 page: 1,
118 tab: 'lp_lesson',
119 delayTimeout: null,
120 showPreview: false,
121 adding: false
122 };
123 },
124 mounted: function() {
125 },
126 created: function() {
127 var vm = this;
128
129 $store.subscribe( function( mutation ) {
130 if ( ! mutation || mutation.type !== 'ci/TOGGLE' ) {
131 return;
132 }
133
134 if ( vm.show ) {
135 vm.init();
136
137 $( 'body' ).addClass( 'lp-modal-choose-items-open' );
138 } else {
139 $( 'body' ).removeClass( 'lp-modal-choose-items-open' );
140 }
141 });
142 },
143 computed: {
144 status: function() {
145 return $store.getters['ci/status'];
146 },
147 loading: function() {
148 return this.status === 'loading';
149 },
150 textButtonEdit: function() {
151 if ( this.showPreview ) {
152 return $store.getters['i18n/all'].back;
153 }
154
155 return $store.getters['i18n/all'].selected_items + ' (' + this.addedItems.length + ')';
156 },
157 addedItems: function() {
158 return $store.getters['ci/addedItems'];
159 },
160 pagination: function() {
161 return $store.getters['ci/pagination'];
162 },
163 totalPage: function() {
164 if ( this.pagination ) {
165 return parseInt(this.pagination.total) || 1;
166 }
167 },
168 items: function() {
169 return $store.getters['ci/items'];
170 },
171 show: function() {
172 var isShow = $store.getters['ci/isOpen'];
173
174 if ( isShow ) {
175 this.focusInput();
176 }
177
178 return isShow;
179 },
180 types: function() {
181 return $store.getters['ci/types'];
182 },
183 firstType: function() {
184 for ( var type in $store.getters['ci/types'] ) {
185 return type;
186 }
187
188 return false;
189 }
190 },
191 methods: {
192 init: function() {
193 this.query = '';
194 this.page = 1;
195 this.tab = this.firstType;
196 this.showPreview = false;
197 this.adding = false;
198 this.makeSearch();
199 },
200 focusInput: function() {
201 var $input = $( this.$el ).find( '.main .search input[type="text"]' ).focus();
202 setTimeout( function () {
203 $input.focus();
204 }, 300 );
205 },
206 checkout: function() {
207 this.adding = true;
208 $store.dispatch( 'ci/addItemsToSection' );
209 },
210 changePage: function( page ) {
211 if ( page === this.page ) {
212 return;
213 }
214
215 this.page = page;
216 this.makeSearch();
217 },
218 addItem: function( item ) {
219 $store.dispatch( 'ci/addItem', item );
220 },
221 removeItem: function( item ) {
222 $store.dispatch( 'ci/removeItem', item );
223 },
224 close: function() {
225 $store.dispatch( 'ci/toggle' );
226 },
227 changeTab: function( key ) {
228 if ( key === this.tab ) {
229 return;
230 }
231
232 this.tab = key;
233 this.page = 1;
234 this.makeSearch();
235 this.focusInput();
236 },
237 onChangeQuery: function() {
238 var vm = this;
239
240 if ( this.delayTimeout ) {
241 clearTimeout( this.delayTimeout );
242 }
243
244 this.delayTimeout = setTimeout( function() {
245 vm.page = 1;
246 vm.makeSearch();
247 }, 500 );
248 },
249
250 makeSearch: function() {
251 $store.dispatch( 'ci/searchItems', {
252 query: this.query,
253 page: this.page,
254 type: this.tab
255 });
256 }
257 }
258 });
259
260 })( LP_Curriculum_Store );
261 });
262 </script>
263