<?php /** * Activity stream view. * * @since 2.0.0 */ ?> <div class="wu-styling"> <div id="activity-stream-content"> <div v-if="loading" class="wu-text-center wu-bg-gray-100 wu-rounded wu-uppercase wu-font-semibold wu-text-xs wu-text-gray-700 wu-p-4"> <span class="wu-blinking-animation"><?php _e('Loading...', 'wp-ultimo'); ?></span> </div> <div v-if='!queried.count && !loading' v-cloak class='wu-feed-loading wu-mb-6'> <?php _e('No more items to display', 'wp-ultimo'); ?> </div> <div v-if="!loading" class="wu-widget-inset"> <ul class="wu-m-0 wu-p-0 wu-divide-gray-200" v-cloak> <li class="wu-m-0" :class="index > 0 ? 'wu-border-solid wu-border-0 wu-border-t wu-border-gray-300' : ''" v-for="(event, index) in queried.events" > <a :href="'<?php echo wu_network_admin_url('wp-ultimo-view-event', ['id' => '']); ?>=' + event.id" class="wu-block hover:wu-bg-gray-50"> <div class="wu-px-4 wu-py-4 wu-flex wu-items-center"> <div class="wu-min-w-0 wu-flex-1 sm:wu-flex sm:wu-items-center"> <div class="wu-mt-4 wu-flex-shrink-0 sm:wu-mt-0 sm:wu-mr-4"> <div class="wu-flex wu-relative"> <img v-if="event.author.avatar" class="wu-inline-block wu-h-7 wu-w-7 wu-rounded-full wu-ring-2 wu-ring-white" :src="event.author.avatar" :alt="event.author.display_name" > <div v-if="!event.author.avatar" class="wu-flex wu-h-7 wu-w-7 wu-rounded-full wu-ring-2 wu-ring-white wu-bg-gray-300 wu-items-center wu-justify-center"> <span class="dashicons-wu-tools wu-text-gray-700 wu-text-xl"></span> </div> <span role="tooltip" :aria-label="event.initiator.charAt(0).toUpperCase() + event.initiator.slice(1) + ' - ' + event.severity_label" class="wu-absolute wu-rounded-full wu--mb-2 wu--mr-2 wu-flex wu-items-center wu-justify-center wu-font-mono wu-bottom-0 wu-right-0 wu-font-bold wu-h-3 wu-w-3 wu-uppercase wu-text-2xs wu-p-1 wu-border-solid wu-border-2 wu-border-white" :class="event.severity_classes" > {{ event.severity_label[0] }} </span> </div> </div> <div> <div class="wu-flex wu-font-medium wu-text-gray-700 wu-truncate"> <p class="wu-m-0 wu-p-0 wu-capitalize">{{ event.object_type }}</p> <p class="wu-p-0 wu-m-0 wu-ml-1 wu-font-normal wu-text-gray-600"> <?php printf(__('with %s', 'wp-ultimo'), '{{ event.slug }}'); ?> </p> </div> <div class="wu-mt-1"> <div class="wu-text-sm wu-text-gray-600"> <!-- Heroicon name: calendar --> <p class="wu-p-0 wu-m-0"> <span v-html="event.message"></span> <span class="wu-text-gray-700 wu-ml-2"><span class="dashicons-wu-clock wu-mr-1 wu-align-middle"></span>{{ $moment(event.date_created, "YYYYMMDD").fromNow() }}</span> <span v-if="event.author.display_name" class="wu-text-gray-700"><?php printf(__('by %s', 'wp-ultimo'), '{{ event.author.display_name }}'); ?></span> </p> </div> </div> </div> </div> <div class="wu-ml-auto wu-flex-shrink-0"> <svg class="wu-h-5 wu-w-5 wu-text-gray-600" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true"> <path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" /> </svg> </div> </div> </a> </li> </ul> <div v-cloak class="wu-p-4 wu-bg-gray-100 wu-border-solid wu-border-0 wu-border-t wu-border-gray-300"> <ul v-if='!loading' class='wu-feed-pagination wu-m-0 wu-flex wu-justify-between'> <li class="wu-w-1/3 wu-m-0"> <a href="#" class="wu-block" v-on:click.prevent="refresh"> <?php _e('Refresh', 'wp-ultimo'); ?> </a> </li> <li v-if="page > 1" class="wu-w-1/3 wu-text-center wu-m-0"> <a href="#" v-on:click.prevent="navigatePrev" class="wu-block"> ← <?php _e('Previous Page', 'wp-ultimo'); ?> </a> </li> <li v-if="hasMore() && !loading" class="wu-w-1/3 wu-text-right wu-m-0"> <a href="#" v-on:click.prevent="navigateNext" class="wu-block"> <?php _e('Next Page', 'wp-ultimo'); ?> → </a> </li> </ul> </div> </div> </div> </div> <script type="application/javascript"> document.addEventListener('DOMContentLoaded', function() { Object.defineProperty(Vue.prototype, '$moment', { value: wu_moment }); var wuActivityStream = new Vue({ el: '#activity-stream-content', data: { count: 0, loading: true, page: 1, queried: [], error: false, errorMessage: "", }, mounted: function() { this.pullQuery(); }, watch: { queried: function(value) {}, }, methods: { hasMore: function() { return this.queried.count > (this.page * 5) }, refresh: function() { this.loading = true; this.pullQuery(); }, navigatePrev: function() { this.page = this.page <= 1 ? 1 : this.page - 1; this.loading = true; this.pullQuery(); }, navigateNext: function() { this.page = this.page + 1; this.loading = true; this.pullQuery(); }, pullQuery: function() { var that = this; jQuery.ajax({ url: ajaxurl, data: { _ajax_nonce: '<?php echo esc_js(wp_create_nonce('wu_activity_stream')); ?>', action: 'wu_fetch_activity', page: this.page, }, success: function(data) { that.loading = false; Vue.set(wuActivityStream, 'loading', false); if (data.success) { Vue.set(wuActivityStream, 'queried', data.data); } // end if; }, }) }, get_color_event: function(type) {}, } }); }); </script>