PageSourceSearch

https://businessdisabilityforum.org.uk/wp-content/plugins/cbxwpboo…/js/cbxwpbookmark-public.js?ver=2.0.8

js businessdisabilityforum.org.uk collected 2026-10-02 02:39:42 UTC 83,777 bytes, 1,825 lines download raw bytes

1(function ($) {
2    'use strict';
3
4    function cbxwpbookmark_copyStringToClipboard(str) {
5        // Create new element
6        var el   = document.createElement('textarea');
7        // Set value (string to be copied)
8        el.value = str;
9        // Set non-editable to avoid focus and move outside of view
10        el.setAttribute('readonly', '');
11        el.style = {position: 'absolute', left: '-9999px'};
12        document.body.appendChild(el);
13        // Select text inside element
14        el.select();
15        // Copy text to clipboard
16        document.execCommand('copy');
17        // Remove temporary element
18        document.body.removeChild(el);
19    }
20
21    function cbxwpbookmark_stripslashes(str) {
22        // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
23        // +   improved by: Ates Goral (http://magnetiq.com)
24        // +      fixed by: Mick@el
25        // +   improved by: marrtins
26        // +   bugfixed by: Onno Marsman
27        // +   improved by: rezna
28        // +   input by: Rick Waldron
29        // +   reimplemented by: Brett Zamir (http://brett-zamir.me)
30        // +   input by: Brant Messenger (http://www.brantmessenger.com/)
31        // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
32        // *     example 1: stripslashes('Kevin\'s code');
33        // *     returns 1: "Kevin's code"
34        // *     example 2: stripslashes('Kevin\\\'s code');
35        // *     returns 2: "Kevin\'s code"
36        return (str + '').replace(/\\(.?)/g, function (s, n1) {
37            switch (n1) {
38                case '\\':
39                    return '\\';
40                case '0':
41                    return '\u0000';
42                case '':
43                    return '';
44                default:
45                    return n1;
46            }
47        });
48    }
49
50    $(document).ready(function () {
51
52        var ajaxurl     = cbxwpbookmark.ajaxurl;
53        var awn_options = {
54            labels: {
55                tip: cbxwpbookmark.awn_options.tip,
56                info: cbxwpbookmark.awn_options.info,
57                success: cbxwpbookmark.awn_options.success,
58                warning: cbxwpbookmark.awn_options.warning,
59                alert: cbxwpbookmark.awn_options.alert,
60                async: cbxwpbookmark.awn_options.async,
61                confirm: cbxwpbookmark.awn_options.confirm,
62                confirmOk: cbxwpbookmark.awn_options.confirmOk,
63                confirmCancel: cbxwpbookmark.awn_options.confirmCancel
64            }
65        };
66
67        //on click on +add  it will open the boomark panel
68        $(document.body).on('click', '.cbxwpbkmarktrig', function (event) {
69            event.stopPropagation();
70            event.preventDefault();
71
72            //var $this            = $(this);
73            var $bookmark_btn = $(this);
74            //var $bookmark_panel = $bookmark_btn.next('.cbxwpbkmarklistwrap');
75
76            //console.log(cbxComputePosition);
77
78
79            //console.log(computePosition);
80
81            //window.FloatingUIDOM.computePosition($bookmark_btn[0], $bookmark_panel[0]).then(({x, y}) => {
82            /*cbxComputePosition($bookmark_btn[0], $bookmark_panel[0]).then(({x, y}) => {
83                console.log(x);
84                console.log(y);
85
86                Object.assign($bookmark_panel[0].style, {
87                    left: x+'px',
88                    top: y+'px'
89                });
90            });*/
91
92            //var test = reposition($bookmark_btn[0], $bookmark_panel[0]);
93
94            var $logged_in = Number($bookmark_btn.data('loggedin')); //user logged in or not
95
96            //if guest return with warning
97            if ($logged_in === 0) {
98
99                CBXWPBookmarkEvents_do_action('cbxwpbookmark_trigger_gust', $bookmark_btn, $bookmark_panel);
100
101                var $bookmark_guest_panel = $bookmark_btn.next('.cbxwpbkmarkguestwrap');
102                /*cbxReposition($bookmark_btn[0], $bookmark_guest_panel[0],{
103                    position: 'bottom-middle'
104                    //container: $bookmark_panel[0].getBoundingClientRect()
105                });*/
106
107                /* window.computePosition($bookmark_btn[0], $bookmark_guest_panel[0], {
108                     placement: 'bottom',
109                     strategy: 'fixed', //fixed | absolute
110                     middleware: [window.autoPlacement()],
111                 }).then(({x, y}) => {
112                     Object.assign($bookmark_guest_panel[0].style, {
113                         left: x+'px',
114                         top: y+'px'
115                     });
116                 });*/
117
118                $($bookmark_guest_panel).toggle('fast', function () {
119
120                });
121
122                //$bookmark_guest_panel.show();
123                //$bookmark_guest_panel.toggle();
124
125                return;
126            }
127
128            var $bookmark_panel = $bookmark_btn.next('.cbxwpbkmarklistwrap');
129
130            CBXWPBookmarkEvents_do_action('cbxwpbookmark_trigger_user', $bookmark_btn, $bookmark_panel);
131
132            var $object_id   = $bookmark_btn.data('object_id'); //post id
133            var $object_type = $bookmark_btn.data('type'); //post type
134
135            //user category or global category mode
136            if (cbxwpbookmark.bookmark_mode !== 'no_cat') {
137                //if mode is user_cat or global_cat
138
139                CBXWPBookmarkEvents_do_action('cbxwpbookmark_trigger_cats_pre', $bookmark_btn, $bookmark_panel);
140
141                var $cat_add_form  = $bookmark_panel.find('.cbxwpbkmark_cat_add_form');
142                var $cat_edit_form = $bookmark_panel.find('.cbxwpbkmark_cat_edit_form');
143                var $cat_book_list = $bookmark_panel.find('.cbxwpbkmark_cat_book_list');
144                var $cat_edit_list = $bookmark_panel.find('.cbxwpbkmark_cat_edit_list');
145                var $toolbar       = $bookmark_panel.find('.cbxwpbkmark-toolbar');
146
147                $bookmark_panel.find('.cbxlbjs-searchbar').val('');
148                $bookmark_panel.find('.cbxwpbkmark-field-cat').val('').removeClass('error');
149                $bookmark_panel.find('.cbxwpbkmark-form-note').hide().text('').removeClass('cbxwpbkmark-form-note-success');
150
151                $cat_add_form.hide();
152                $cat_edit_form.hide();
153                $cat_edit_list.hide();
154                //$toolbar.find('.cbxwpbkmark-toolbar-listcat').hide();
155                $toolbar.find('.cbxwpbkmark-toolbar-listcat').addClass('cbxwpbkmark-hide');
156
157                $cat_book_list.show();
158                //$toolbar.find('.cbxwpbkmark-toolbar-newcat').show();
159                $toolbar.find('.cbxwpbkmark-toolbar-newcat').removeClass('cbxwpbkmark-hide');
160                $bookmark_btn.find('.cbxwpbkmarktrig_label').text(cbxwpbookmark.add_to_head_default);
161
162                /* cbxReposition($bookmark_btn[0], $bookmark_panel[0],{
163                     position: 'bottom-middle'
164                     //container: $bookmark_panel[0].getBoundingClientRect()
165                 });*/
166
167                /* window.computePosition($bookmark_btn[0], $bookmark_panel[0], {
168                     placement: 'bottom',
169                     strategy: 'absolute', //fixed | absolute
170                     middleware: [window.autoPlacement()],
171                 }).then(({x, y}) => {
172                     Object.assign($bookmark_panel[0].style, {
173                         left: x+'px',
174                         top: y+'px'
175                     });
176                 });*/
177
178                $($bookmark_panel).toggle('fast', function () {
179                    //if current user can not create category
180                    if (Number(cbxwpbookmark.user_can_create_cat) === 0) {
181                        $cat_add_form.remove();
182                        $toolbar.find('.cbxwpbkmark-toolbar-newcat').remove();
183                    }
184
185                    //show the ajax icon
186                    $bookmark_panel.find('.cbxwpbkmarkloading').show();
187                    //send ajax request to popular the categories as fresh
188
189                    var data = {
190                        'action': 'cbx_find_category',
191                        'security': cbxwpbookmark.nonce,
192                        'object_id': $object_id,
193                        'object_type': $object_type
194                        //'cbxbookmark_lang': cbxwpbookmark.cbxbookmark_lang
195                    };
196
197                    $.post(ajaxurl, data, function (response) {
198                        response = $.parseJSON(response);
199
200                        if (response && response.code === 1) {
201                            //categories found
202                            $bookmark_panel.find('.cbxwpbkmarkloading').hide();
203
204                            var cats             = $.parseJSON(response.cats);
205                            var $bookmark_count  = Number(response.bookmark_count);
206                            var $bookmark_byuser = Number(response.bookmark_byuser);
207
208                            if ($bookmark_byuser > 0) {
209                                $bookmark_btn.addClass('cbxwpbkmarktrig-marked');
210                            } else {
211                                $bookmark_btn.removeClass('cbxwpbkmarktrig-marked');
212                            }
213
214                            //update bookmark count
215                            $bookmark_btn.find('.cbxwpbkmarktrig-count').html($bookmark_count);
216
217                            var $cat_options_add  = '';
218                            var $cat_options_edit = '';
219
220                            cbxwpbookmark.user_current_cat_count = cats.length;
221                            cbxwpbookmark.user_current_cats      = cats;
222
223                            $.each(cats, function (key, val) {
224                                $cat_options_add += '<li class="cbxlbjs-item" data-privacy="' + cats[key].privacy + '" data-incat="' + cats[key].incat + '"  data-value="' + cats[key].id + '"><span title="' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '" class="cbxlbjs-item-name">' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '</span></li>';
225                                $cat_options_edit += '<li class="cbxlbjs-item" data-privacy="' + cats[key].privacy + '" data-incat="' + cats[key].incat + '"  data-value="' + cats[key].id + '"><span title="' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '" class="cbxlbjs-item-name">' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '</span></li>';
226                            });
227
228                            $cat_book_list.find('.cbxwpbkmarklist').html($cat_options_add);
229                            $cat_edit_list.find('.cbxwpbkmarklist').html($cat_options_edit);
230
231                            if ((cbxwpbookmark.max_cat_limit > 0) && (cbxwpbookmark.user_current_cat_count >= cbxwpbookmark.max_cat_limit)) {
232                                //$bookmark_panel.find('.cbxwpbkmark-toolbar-newcat').hide();
233                                $bookmark_panel.find('.cbxwpbkmark-toolbar-newcat').addClass('cbxwpbkmark-hide');
234                            }
235
236                            CBXWPBookmarkEvents_do_action('cbxwpbookmark_trigger_cats_loaded', $bookmark_btn, $bookmark_panel, cats);
237
238                        } else {
239                            //failed to get category for this user
240
241                            $bookmark_panel.find('.cbxwpbkmarkloading').hide();
242                            $cat_book_list.show();
243
244                            //if no category found show message and put option to create one
245                            $bookmark_panel.find('.cbxwpbkmarklist').hide();
246                            if ($bookmark_panel.find('.cbxwpbkmark-lbjs').find('.cbxwpbkmarklist-nocatfound').length === 0) {
247                                if (cbxwpbookmark.bookmark_mode === 'user_cat') {
248                                    $bookmark_panel.find('.cbxwpbkmark-lbjs').append('<p class="cbxwpbkmarklist-nocatfound"><span data-clicked="0" class="cbxwpbkmarklist-nocatfoundtrig">' + response.msg + '</span></p>');
249                                } else if (cbxwpbookmark.bookmark_mode === 'global_cat') {
250                                    $bookmark_panel.find('.cbxwpbkmark-lbjs').append('<p class="cbxwpbkmarklist-nocatfound">' + response.msg + '</p>');
251                                }
252
253                            }
254
255                        }
256
257                    });
258                });
259            }
260            else {
261                CBXWPBookmarkEvents_do_action('cbxwpbookmark_trigger_nocats_pre', $bookmark_btn, $bookmark_panel);
262
263                //no category or single click mode
264                var $busy = Number($bookmark_btn.data('busy'));
265                if ($busy === 1) return;
266
267
268                $bookmark_btn.data('busy', 1);
269                //$bookmark_btn.addClass('cbxwpbkmarktrig-busy');
270                $bookmark_btn.addClass('running');
271
272                var $bookmark_label   = $bookmark_btn.data('bookmark-label');
273                var $bookmarked_label = $bookmark_btn.data('bookmarked-label');
274                var $show_count       = Number($bookmark_btn.data('show-count'));
275                var $display_label    = Number($bookmark_btn.data('display-label'));
276
277                CBXWPBookmarkEvents_do_action('cbxwpbookmark_trigger_nocats_bk_click', $bookmark_btn, $bookmark_panel, $object_id, $object_type, 0);//last param category id
278
279                var bookmarkData = {
280                    'action': 'cbx_add_bookmark',
281                    'security': cbxwpbookmark.nonce,
282                    'cat_id': 0,
283                    'object_id': $object_id,
284                    'object_type': $object_type
285                    //'cbxbookmark_lang': cbxwpbookmark.cbxbookmark_lang
286                };
287
288                $.post(ajaxurl, bookmarkData, function (response) {
289                    response = $.parseJSON(response);
290
291                    var $bookmark_count  = Number(response.bookmark_count);
292                    var $bookmark_byuser = Number(response.bookmark_byuser);
293
294                    $bookmark_btn.data('busy', 0);
295                    //$bookmark_btn.removeClass('cbxwpbkmarktrig-busy');
296                    $bookmark_btn.removeClass('running');
297
298                    var $show_count_html = '';
299                    if ($show_count) {
300                        $show_count_html = '(<i class="cbxwpbkmarktrig-count">' + $bookmark_count + '</i>)';
301                    }
302
303                    var $bookmark_label_html = '';
304
305                    var $display_label_style = '';
306                    if ($display_label === 0) {
307                        $display_label_style = ' style="display:none;" ';
308                    }
309
310                    if ($bookmark_byuser > 0) {
311                        $bookmark_label_html = '<span class="cbxwpbkmarktrig-icon"></span><span class="ld ld-ring ld-spin"></span><span ' + $display_label_style + ' class="cbxwpbkmarktrig-label">' + $bookmarked_label + $show_count_html + '</span>';
312
313                        $bookmark_btn.addClass('cbxwpbkmarktrig-marked');
314                        //$bookmark_btn.html($bookmark_label_html+$show_count_html);
315                        $bookmark_btn.html($bookmark_label_html);
316                    } else {
317                        $bookmark_label_html = '<span class="cbxwpbkmarktrig-icon"></span><span class="ld ld-ring ld-spin"></span><span ' + $display_label_style + ' class="cbxwpbkmarktrig-label">' + $bookmark_label + $show_count_html + '</span>';
318
319                        $bookmark_btn.removeClass('cbxwpbkmarktrig-marked');
320                        //$bookmark_btn.html($bookmark_label_html+$show_count_html);
321                        $bookmark_btn.html($bookmark_label_html);
322                    }
323
324                    CBXWPBookmarkEvents_do_action('cbxwpbookmark_trigger_nocats_bk_response', response, $bookmark_btn, $bookmark_panel, $object_id, $object_type, 0); //last param is cat id
325
326                    /*$bookmark_btn.find('.cbxwpbkmarktrig-count').html($bookmark_count);
327
328                    if ($bookmark_byuser > 0) {
329                      $bookmark_btn.addClass('cbxwpbkmarktrig-marked');
330                    } else {
331                      $bookmark_btn.removeClass('cbxwpbkmarktrig-marked');
332                    }*/
333
334                    //show modal alert if there defined
335                    if (response.alert_msg) {
336                        new AWN(awn_options).warning(response.alert_msg);
337                    }
338                });//end response
339
340
341            }//end no cat mode
342
343        });//end: on click on +add  it will open the boomark panel
344
345        //on click add category(show category form panel)
346        $(document.body).on('click', '.cbxwpbkmark-toolbar-newcat', function (event) {
347            event.preventDefault();
348
349            var $this = $(this);
350
351            var $bookmark_panel = $this.closest('.cbxwpbkmarklistwrap');
352            var $cat_add_form   = $bookmark_panel.find('.cbxwpbkmark_cat_add_form');
353            var $cat_book_list  = $bookmark_panel.find('.cbxwpbkmark_cat_book_list');
354            var $cat_edit_form  = $bookmark_panel.find('.cbxwpbkmark_cat_edit_form');
355            var $cat_edit_list  = $bookmark_panel.find('.cbxwpbkmark_cat_edit_list');
356            var $toolbar        = $bookmark_panel.find('.cbxwpbkmark-toolbar');
357
358            if ((cbxwpbookmark.max_cat_limit > 0) && (cbxwpbookmark.user_current_cat_count >= cbxwpbookmark.max_cat_limit)) {
359                //$this.hide();
360                $this.addClass('cbxwpbkmark-hide');
361                alert(cbxwpbookmark.max_cat_limit_error);
362                return;
363            } else {
364                //hide new button, show list button
365                //$toolbar.find('.cbxwpbkmark-toolbar-listcat').show();
366                $toolbar.find('.cbxwpbkmark-toolbar-listcat').removeClass('cbxwpbkmark-hide');
367                //$this.hide();
368                $this.addClass('cbxwpbkmark-hide');
369
370                $cat_book_list.hide(); //hide default category list panel
371                $cat_edit_list.hide(); //hide bookmark manage categories
372                $cat_add_form.show(); //show category create form wrapper
373                $cat_edit_form.hide(); //hide category edit
374
375                $cat_add_form.find('.cbxwpbkmark-form-note').val('').hide();
376                $cat_add_form.find('.cbxwpbkmark-field-cat').val('');
377                $cat_add_form.find('.cbxwpbkmark-field-catid').val('0');
378
379                //$cat_add_form.find('.cbxwpbkmark-field-privacy').val(1);
380                $cat_add_form.find('.cbxwpbkmark-field-privacy').val(cbxwpbookmark.category_default_status);
381
382                $cat_add_form.find('.cbxwpbkmark-field-cat').focus();
383                $bookmark_panel.find('.cbxwpbkmarktrig_label').text(cbxwpbookmark.add_to_head_cat_create);
384            }
385        });//end: on click add category(show category form panel)
386
387        //on click manage categories
388        $(document.body).on('click', '.cbxwpbkmark-toolbar-editcat', function (event) {
389            event.preventDefault();
390
391            var $this        = $(this);
392            var $object_id   = $this.data('object_id'); //post id
393            var $object_type = $this.data('type'); //post type
394
395            var $bookmark_panel = $this.closest('.cbxwpbkmarklistwrap');
396            var $cat_add_form   = $bookmark_panel.find('.cbxwpbkmark_cat_add_form');
397            var $cat_book_list  = $bookmark_panel.find('.cbxwpbkmark_cat_book_list');
398            var $cat_edit_form  = $bookmark_panel.find('.cbxwpbkmark_cat_edit_form');
399            var $cat_edit_list  = $bookmark_panel.find('.cbxwpbkmark_cat_edit_list');
400            var $toolbar        = $bookmark_panel.find('.cbxwpbkmark-toolbar');
401
402            $cat_add_form.hide();
403            $cat_edit_form.hide();
404            $cat_book_list.hide();
405            $cat_edit_list.show();
406            //$this.hide();
407
408            //$toolbar.find('.cbxwpbkmark-toolbar-newcat').hide();
409            $toolbar.find('.cbxwpbkmark-toolbar-newcat').addClass('cbxwpbkmark-hide');
410            //$toolbar.find('.cbxwpbkmark-toolbar-listcat').show();
411            $toolbar.find('.cbxwpbkmark-toolbar-listcat').removeClass('cbxwpbkmark-hide');
412
413            $cat_edit_list.find('.cbxlbjs-searchbar').val('');
414            $bookmark_panel.find('.cbxwpbkmarkloading').show();
415
416            var data = {
417                'action': 'cbx_find_category',
418                'security': cbxwpbookmark.nonce,
419                'object_id': $object_id,
420                'object_type': $object_type,
421                // 'cbxbookmark_lang': cbxwpbookmark.cbxbookmark_lang
422            };
423
424            $.post(ajaxurl, data, function (response) {
425                response = $.parseJSON(response);
426
427                if (response && response.code === 1) {
428                    //categories found
429                    $bookmark_panel.find('.cbxwpbkmarkloading').hide();
430
431                    var cats = $.parseJSON(response.cats);
432
433                    var $cat_options_add  = '';
434                    var $cat_options_edit = '';
435
436                    cbxwpbookmark.user_current_cat_count = cats.length;
437                    cbxwpbookmark.user_current_cats      = cats;
438
439                    $.each(cats, function (key, val) {
440                        $cat_options_add += '<li class="cbxlbjs-item" data-catname="' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '" data-privacy="' + cats[key].privacy + '" data-incat="' + cats[key].incat + '"  data-value="' + cats[key].id + '"><span title="' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '" class="cbxlbjs-item-name">' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '</span></li>';
441
442                        $cat_options_edit += '<li class="cbxlbjs-item" data-catname="' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '" data-privacy="' + cats[key].privacy + '" data-incat="' + cats[key].incat + '"  data-value="' + cats[key].id + '"><span title="' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '" class="cbxlbjs-item-name">' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '</span></li>';
443
444                    });
445
446                    $cat_book_list.find('.cbxwpbkmarklist').html($cat_options_add);
447                    $cat_edit_list.find('.cbxwpbkmarklist').html($cat_options_edit);
448
449                    $bookmark_panel.find('.cbxwpbkmarktrig_label').text(cbxwpbookmark.add_to_head_cat_list);
450
451                } else {
452                    //failed to get category for this user
453
454                    $bookmark_panel.find('.cbxwpbkmarkloading').hide();
455
456                    //$cat_book_list.hide();
457                    //$cat_edit_list.show();
458
459                    //if no category found show message and put option to create one
460                    $cat_edit_list.find('.cbxwpbkmarklist').hide();
461                    if ($cat_edit_list.find('.cbxwpbkmarklist-nocatfound').length === 0) {
462                        if (cbxwpbookmark.bookmark_mode === 'user_cat') {
463                            $cat_edit_list.find('.cbxwpbkmark-lbjs').append('<p class="cbxwpbkmarklist-nocatfound"><span data-clicked="0" class="cbxwpbkmarklist-nocatfoundtrig">' + response.msg + '</span></p>');
464                        } else if (cbxwpbookmark.bookmark_mode === 'global_cat') {
465                            $cat_edit_list.find('.cbxwpbkmark-lbjs').append('<p class="cbxwpbkmarklist-nocatfound">' + response.msg + '</p>');
466                        }
467                    }
468
469                }
470
471            });
472        });//end: on click manage categories
473
474        //on click list categories
475        $(document.body).on('click', '.cbxwpbkmark-toolbar-listcat', function (event) {
476            event.preventDefault();
477
478            var $this        = $(this);
479            var $object_id   = $this.data('object_id'); //post id
480            var $object_type = $this.data('type'); //post type
481
482            var $bookmark_panel = $this.closest('.cbxwpbkmarklistwrap');
483            var $cat_add_form   = $bookmark_panel.find('.cbxwpbkmark_cat_add_form');
484            var $cat_book_list  = $bookmark_panel.find('.cbxwpbkmark_cat_book_list');
485            var $cat_edit_form  = $bookmark_panel.find('.cbxwpbkmark_cat_edit_form');
486            var $cat_edit_list  = $bookmark_panel.find('.cbxwpbkmark_cat_edit_list');
487            var $toolbar        = $bookmark_panel.find('.cbxwpbkmark-toolbar');
488
489            $cat_add_form.hide();
490            $cat_edit_form.hide();
491            $cat_book_list.show();
492            $cat_edit_list.hide();
493
494            //$toolbar.find('.cbxwpbkmark-toolbar-newcat').show();
495            $toolbar.find('.cbxwpbkmark-toolbar-newcat').removeClass('cbxwpbkmark-hide');
496            //$toolbar.find('.cbxwpbkmark-toolbar-listcat').hide();
497            $toolbar.find('.cbxwpbkmark-toolbar-listcat').addClass('cbxwpbkmark-hide');
498
499            $cat_book_list.find('.cbxlbjs-searchbar').val('');
500            $bookmark_panel.find('.cbxwpbkmarkloading').show();
501
502            var data = {
503                'action': 'cbx_find_category',
504                'security': cbxwpbookmark.nonce,
505                'object_id': $object_id,
506                'object_type': $object_type,
507                //'cbxbookmark_lang': cbxwpbookmark.cbxbookmark_lang
508            };
509
510            $.post(ajaxurl, data, function (response) {
511                response = $.parseJSON(response);
512
513                if (response && response.code === 1) {
514                    //categories found
515                    $bookmark_panel.find('.cbxwpbkmarkloading').hide();
516
517                    var cats = $.parseJSON(response.cats);
518
519                    var $cat_options_add  = '';
520                    var $cat_options_edit = '';
521
522                    cbxwpbookmark.user_current_cat_count = cats.length;
523                    cbxwpbookmark.user_current_cats      = cats;
524
525                    $.each(cats, function (key, val) {
526                        $cat_options_add += '<li class="cbxlbjs-item" data-catname="' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '" data-privacy="' + cats[key].privacy + '" data-incat="' + cats[key].incat + '"  data-value="' + cats[key].id + '"><span title="' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '" class="cbxlbjs-item-name">' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '</span></li>';
527
528                        $cat_options_edit += '<li class="cbxlbjs-item" data-catname="' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '" data-privacy="' + cats[key].privacy + '" data-incat="' + cats[key].incat + '"  data-value="' + cats[key].id + '"><span title="' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '" class="cbxlbjs-item-name">' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '</span></li>';
529
530                    });
531
532                    $cat_book_list.find('.cbxwpbkmarklist').html($cat_options_add);
533                    $cat_edit_list.find('.cbxwpbkmarklist').html($cat_options_edit);
534
535                    $bookmark_panel.find('.cbxwpbkmarktrig_label').text(cbxwpbookmark.add_to_head_default);
536
537                } else {
538                    //failed to get category for this user
539
540                    $bookmark_panel.find('.cbxwpbkmarkloading').hide();
541
542                    //$cat_book_list.hide();
543                    //$cat_edit_list.show();
544
545                    //if no category found show message and put option to create one
546                    $cat_book_list.find('.cbxwpbkmarklist').hide();
547                    if ($cat_book_list.find('.cbxwpbkmarklist-nocatfound').length === 0) {
548                        if (cbxwpbookmark.bookmark_mode === 'user_cat') {
549                            $cat_book_list.find('.cbxwpbkmark-lbjs').append('<p class="cbxwpbkmarklist-nocatfound"><span data-clicked="0" class="cbxwpbkmarklist-nocatfoundtrig">' + response.msg + '</span></p>');
550                        } else if (cbxwpbookmark.bookmark_mode === 'global_cat') {
551                            $cat_book_list.find('.cbxwpbkmark-lbjs').append('<p class="cbxwpbkmarklist-nocatfound">' + response.msg + '</p>');
552                        }
553                    }
554
555                }
556
557            });
558        });//end: on click list categories
559
560        //on enter on category field on create mode
561        $(document.body).on('keypress', '.cbxwpbkmark-field-cat-add', function (event) {
562            //event.preventDefault();
563            if (event.which === 13) {
564                //$('form#login').submit();
565                var $this           = $(this);
566                var $bookmark_panel = $this.closest('.cbxwpbkmarklistwrap');
567
568                $bookmark_panel.find('.cbxwpbkmark-field-create-submit').trigger('click');
569
570                return false;    //<---- Add this line
571            }
572        });
573        //end on enter on category field on create mode
574
575        //on click new category button
576        $(document.body).on('click', '.cbxwpbkmark-field-create-submit', function (event) {
577            event.preventDefault();
578
579            var $this = $(this);
580            var $busy = Number($this.data('busy'));
581            if ($busy === 1) return;
582
583            var $bookmark_panel = $this.closest('.cbxwpbkmarklistwrap');
584            var $cat_add_form   = $bookmark_panel.find('.cbxwpbkmark_cat_add_form');
585            var $cat_edit_form  = $bookmark_panel.find('.cbxwpbkmark_cat_edit_form');
586            var $cat_book_list  = $bookmark_panel.find('.cbxwpbkmark_cat_book_list');
587            var $cat_edit_list  = $bookmark_panel.find('.cbxwpbkmark_cat_edit_list');
588            var $toolbar        = $bookmark_panel.find('.cbxwpbkmark-toolbar');
589
590            if ((cbxwpbookmark.max_cat_limit > 0) && (cbxwpbookmark.user_current_cat_count >= cbxwpbookmark.max_cat_limit)) {
591                $cat_add_form.hide();
592
593                //alert(cbxwpbookmark.max_cat_limit_error);
594                new AWN(awn_options).warning(cbxwpbookmark.max_cat_limit_error);
595
596                return;
597            }
598
599            var $object_id     = $bookmark_panel.data('object_id');
600            var $object_type   = $bookmark_panel.data('type');
601            var $cat_field     = $cat_add_form.find('.cbxwpbkmark-field-cat');
602            var $privacy_field = $cat_add_form.find('.cbxwpbkmark-field-privacy');
603            var $catid_field   = $cat_add_form.find('.cbxwpbkmark-field-catid');
604
605            var $cat_name = $cat_field.val();
606            var $privacy  = Number($privacy_field.val());
607            var $cat_id   = Number($catid_field.val());
608
609            $cat_field.removeClass('error');
610            $cat_add_form.find('.cbxwpbkmark-form-note').hide().removeClass('cbxwpbkmark-form-note-success').text('');
611
612            //check if the input text field is empty or not
613            //if the text input for category name validate then send ajax request
614
615            if ($cat_name !== '') {
616
617                var $ajax_action = ($cat_id > 0) ? 'cbx_edit_bookmark_category' : 'cbx_add_bookmark_category';
618                $bookmark_panel.find('.cbxwpbkmarkloading').show();
619
620                //send ajax request
621                v
621ar data = {
622                    'action': $ajax_action,
623                    'security': cbxwpbookmark.nonce,
624                    'cat_name': $cat_name,
625                    'privacy': $privacy,
626                    'cat_id': $cat_id,
627                    'object_id': $object_id,
628                    'object_type': $object_type,
629                    //'cbxbookmark_lang': cbxwpbookmark.cbxbookmark_lang
630                };
631
632                $this.data('busy', 1);
633                $this.addClass('running');
634
635                // We can also pass the url value separately from ajaxurl for front end AJAX implementations
636                $.post(ajaxurl, data, function (response) {
637                    response = $.parseJSON(response);
638
639                    if (response.code === 1) {
640
641                        //category created
642                        //$cat_name.val('');
643
644                        $bookmark_panel.find('.cbxwpbkmarktrig_label').text(cbxwpbookmark.add_to_head_cat_edit);
645
646                        $catid_field.val(response.cat_id);
647
648                        var cats                             = $.parseJSON(response.cats);
649                        cbxwpbookmark.user_current_cat_count = cats.length;
650                        cbxwpbookmark.user_current_cats      = cats;
651
652                        var $cat_options_add  = '';
653                        var $cat_options_edit = '';
654
655                        $.each(cats, function (key, val) {
656                            $cat_options_add += '<li class="cbxlbjs-item" data-privacy="' + cats[key].privacy + '" data-incat="' + cats[key].incat + '"  data-value="' + cats[key].id + '"><span title="' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '" class="cbxlbjs-item-name">' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '</span></li>';
657
658                            $cat_options_edit += '<li class="cbxlbjs-item" data-privacy="' + cats[key].privacy + '" data-incat="' + cats[key].incat + '"  data-value="' + cats[key].id + '"><span title="' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '" class="cbxlbjs-item-name">' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '</span></li>';
659                        });
660
661                        $bookmark_panel.find('.cbxwpbkmarklist').show();
662                        $bookmark_panel.find('.cbxwpbkmarkloading').hide();
663                        $bookmark_panel.find('.cbxwpbkmarklist-nocatfound').remove();
664
665                        $cat_book_list.find('.cbxwpbkmarklist').html($cat_options_add);
666                        $cat_edit_list.find('.cbxwpbkmarklist').html($cat_options_edit);
667
668                        //show success message
669                        $cat_add_form.find('.cbxwpbkmark-form-note').show().addClass('cbxwpbkmark-form-note-success').text(response.msg);
670
671                        //check if max user cat limit crossed
672                        if ((cbxwpbookmark.max_cat_limit > 0) && (cbxwpbookmark.user_current_cat_count >= cbxwpbookmark.max_cat_limit)) {
673                            //then hide the category create panel
674                            $cat_add_form.hide();
675                            $this.hide();
676                            $bookmark_panel.find('.cbxwpbkmarktrig_label').text(cbxwpbookmark.add_to_head_max_cat);
677
678                        }
679
680                    } else {
681                        //failed or duplicate
682                        $bookmark_panel.find('.cbxwpbkmarkloading').hide('slow');
683                        $cat_add_form.find('.cbxwpbkmark-form-note').show().text(response.msg);
684                        $cat_field.addClass('error');
685                    }//end failed
686
687                    $this.data('busy', 0);
688                    $this.removeClass('running');
689                });
690
691            } else {
692                $cat_field.addClass('error');
693                $cat_add_form.find('.cbxwpbkmark-form-note').show().text(cbxwpbookmark.category_name_empty);
694            }
695
696        });//end: on click new category button
697
698        //on enter on category field on edit mode
699        $(document.body).on('keypress', '.cbxwpbkmark-field-cat-edit', function (event) {
700            //event.preventDefault();
701            if (event.which === 13) {
702                //$('form#login').submit();
703                var $this           = $(this);
704                var $bookmark_panel = $this.closest('.cbxwpbkmarklistwrap');
705
706                $bookmark_panel.find('.cbxwpbkmark-field-update-submit').trigger('click');
707
708                return false;    //<---- Add this line
709            }
710        });
711        //end on enter on category field on create mode
712
713        //on click Edit category button
714        $(document.body).on('click', '.cbxwpbkmark-field-update-submit', function (event) {
715            event.preventDefault();
716
717            var $this = $(this);
718            var $busy = Number($this.data('busy'));
719            if ($busy === 1) return;
720
721            var $bookmark_panel = $this.closest('.cbxwpbkmarklistwrap');
722            var $cat_add_form   = $bookmark_panel.find('.cbxwpbkmark_cat_add_form');
723            var $cat_edit_form  = $bookmark_panel.find('.cbxwpbkmark_cat_edit_form');
724            var $cat_book_list  = $bookmark_panel.find('.cbxwpbkmark_cat_book_list');
725            var $cat_edit_list  = $bookmark_panel.find('.cbxwpbkmark_cat_edit_list');
726            var $toolbar        = $bookmark_panel.find('.cbxwpbkmark-toolbar');
727
728            var $object_id     = Number($bookmark_panel.data('object_id'));
729            var $object_type   = $bookmark_panel.data('type');
730            var $cat_field     = $cat_edit_form.find('.cbxwpbkmark-field-cat');
731            var $privacy_field = $cat_edit_form.find('.cbxwpbkmark-field-privacy');
732            var $catid_field   = $cat_edit_form.find('.cbxwpbkmark-field-catid');
733
734            var $cat_name = $cat_field.val();
735            var $privacy  = Number($privacy_field.val());
736            var $cat_id   = Number($catid_field.val());
737
738            $cat_field.removeClass('error');
739            $cat_edit_form.find('.cbxwpbkmark-form-note').hide().removeClass('cbxwpbkmark-form-note-success').text('');
740
741            //check if the input text field is empty or not
742            //if the text input for category name validate then send ajax request
743
744            if ($cat_name !== '') {
745
746                //$bookmark_panel.find('.cbxwpbkmarkloading').show();
747
748                //send ajax request
749                var data = {
750                    'action': 'cbx_edit_bookmark_category',
751                    'security': cbxwpbookmark.nonce,
752                    'cat_name': $cat_name,
753                    'privacy': $privacy,
754                    'cat_id': $cat_id,
755                    'object_id': $object_id,
756                    'object_type': $object_type,
757                    //'cbxbookmark_lang': cbxwpbookmark.cbxbookmark_lang
758                };
759
760                $this.data('busy', 1);
761                $this.addClass('running');
762
763                // We can also pass the url value separately from aja
763xurl for front end AJAX implementations
764                $.post(ajaxurl, data, function (response) {
765                    response = $.parseJSON(response);
766
767                    if (response.code === 1) {
768                        var cats                             = $.parseJSON(response.cats);
769                        cbxwpbookmark.user_current_cat_count = cats.length;
770                        cbxwpbookmark.user_current_cats      = cats;
771
772                        var $cat_options_add  = '';
773                        var $cat_options_edit = '';
774
775                        $.each(cats, function (key, val) {
776                            $cat_options_add += '<li class="cbxlbjs-item" data-catname="' + cats[key].cat_name + '" data-privacy="' + cats[key].privacy + '" data-incat="' + cats[key].incat + '"  data-value="' + cats[key].id + '"><span title="' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '" class="cbxlbjs-item-name">' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '</span></li>';
777
778                            $cat_options_edit += '<li class="cbxlbjs-item" data-catname="' + cats[key].cat_name + '" data-privacy="' + cats[key].privacy + '" data-incat="' + cats[key].incat + '"  data-value="' + cats[key].id + '"><span title="' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '" class="cbxlbjs-item-name">' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '</span></li>';
779                        });
780
781                        $bookmark_panel.find('.cbxwpbkmarklist').show();
782                        //$bookmark_panel.find('.cbxwpbkmarkloading').hide();
783                        $bookmark_panel.find('.cbxwpbkmarklist-nocatfound').remove();
784
785                        $cat_book_list.find('.cbxwpbkmarklist').html($cat_options_add);
786                        $cat_edit_list.find('.cbxwpbkmarklist').html($cat_options_edit);
787
788                        //show success message
789                        $cat_edit_form.find('.cbxwpbkmark-form-note').show().addClass('cbxwpbkmark-form-note-success').text(response.msg);
790                    } else {
791                        //failed or duplicate
792                        //$bookmark_panel.find('.cbxwpbkmarkloading').hide('slow');
793                        $cat_edit_form.find('.cbxwpbkmark-form-note').show().text(response.msg);
794                        $cat_field.addClass('error');
795                    }//end failed
796
797                    $this.data('busy', 0);
798                    $this.removeClass('running');
799                });
800
801            } else {
802                $cat_field.addClass('error');
803                $cat_edit_form.find('.cbxwpbkmark-form-note').show().text(cbxwpbookmark.category_name_empty);
804            }
805
806        });//end: on click Edit category button
807
808
809        //on click close add new category panel
810        $(document.body).on('click', '.cbxwpbkmark-field-create-close', function (event) {
811            event.preventDefault();
812
813            var $this           = $(this);
814            //var $parent = $this.closest('.cbxwpbkmark-toolbar');
815            var $bookmark_panel = $this.closest('.cbxwpbkmarklistwrap');
816            var $cat_add_form   = $bookmark_panel.find('.cbxwpbkmark_cat_add_form');
817            var $cat_edit_form  = $bookmark_panel.find('.cbxwpbkmark_cat_edit_form');
818            var $cat_book_list  = $bookmark_panel.find('.cbxwpbkmark_cat_book_list');
819            var $cat_edit_list  = $bookmark_panel.find('.cbxwpbkmark_cat_edit_list');
820            var $toolbar        = $bookmark_panel.find('.cbxwpbkmark-toolbar');
821
822            //cbxwpbkmark-field-wrap
823            $cat_add_form.hide();
824            $cat_edit_form.hide();
825            $cat_book_list.show();
826            $cat_edit_list.hide();
827
828            //$toolbar.find('.cbxwpbkmark-toolbar-newcat').hide();
829            $toolbar.find('.cbxwpbkmark-toolbar-newcat').addClass('cbxwpbkmark-hide');
830            //$toolbar.find('.cbxwpbkmark-toolbar-listcat').hide();
831            $toolbar.find('.cbxwpbkmark-toolbar-listcat').addClass('cbxwpbkmark-hide');
832
833            $bookmark_panel.find('.cbxwpbkmarktrig_label').text(cbxwpbookmark.add_to_head_default);
834
835            //check if max user cat limit crossed
836            if ((cbxwpbookmark.max_cat_limit > 0) && (cbxwpbookmark.user_current_cat_count >= cbxwpbookmark.max_cat_limit)) {
837                //then hide the category create panel
838                //$toolbar.find('.cbxwpbkmark-toolbar-newcat').hide();
839                $toolbar.find('.cbxwpbkmark-toolbar-newcat').addClass('cbxwpbkmark-hide');
840            } else {
841                //$toolbar.find('.cbxwpbkmark-toolbar-newcat').show();
842                $toolbar.find('.cbxwpbkmark-toolbar-newcat').removeClass('cbxwpbkmark-hide');
843            }
844
845        });//end: on click close add new category panel
846
847        //on click close edit category panel
848        $(document.body).on('click', '.cbxwpbkmark-field-update-close', function (event) {
849            event.preventDefault();
850
851            var $this           = $(this);
852            var $bookmark_panel = $this.closest('.cbxwpbkmarklistwrap');
853            var $cat_add_form   = $bookmark_panel.find('.cbxwpbkmark_cat_add_form');
854            var $cat_edit_form  = $bookmark_panel.find('.cbxwpbkmark_cat_edit_form');
855            var $cat_book_list  = $bookmark_panel.find('.cbxwpbkmark_cat_book_list');
856            var $cat_edit_list  = $bookmark_panel.find('.cbxwpbkmark_cat_edit_list');
857            var $toolbar        = $bookmark_panel.find('.cbxwpbkmark-toolbar');
858
859            //$bookmark_panel.find('.cbxwpbkmark_cat_book_list').hide();
860
861            $cat_edit_form.hide();
862            $cat_edit_list.show();
863
864            $bookmark_panel.find('.cbxwpbkmarktrig_label').text(cbxwpbookmark.add_to_head_cat_edit);
865
866        });//end: on click close edit category panel
867
868        //on click delete category button
869        $(document.body).on('click', '.cbxwpbkmark-field-delete-submit', function (event) {
870            event.preventDefault();
871
872
873            var $this           = $(this);
874            var $bookmark_panel = $this.closest('.cbxwpbkmarklistwrap');
875            var $cat_add_form   = $bookmark_panel.find('.cbxwpbkmark_cat_add_form');
876            var $cat_edit_form  = $bookmark_panel.find('.cbxwpbkmark_cat_edit_form');
877            var $cat_book_list  = $bookmark_panel.find('.cbxwpbkmark_cat_book_list');
878            var $cat_edit_list  = $bookmark_panel.find('.cbxwpbkmark_cat_edit_list');
879            var $toolbar        = $bookmark_panel.find('.cbxwpbkmark-toolbar');
880
881            var $cat_name    = $cat_edit_form.find('.cbxwpbkmark-field-cat');
882            var $cat         = $cat_edit_form.find('.cbxwpbkmark-field-catid');
883            var $object_id   = Number($bookmark_panel.data('object_id'));
884            var $object_type = $bookmark_panel.data('type');
885
886            var $cat_id = $cat.val();
887
888            var data = {
889                'action': 'cbx_delete_bookmark_category',
890                'security': cbxwpbookmark.nonce,
891                'id': $cat_id,
892                'object_type': $object_type,
893                'object_id': $object_id
894                //'cbxbookmark_lang': cbxwpbookmark.cbxbookmark_lang
895            };
896
897            if ($cat_id > 0) {
898                var notifier = new AWN(awn_options);
899
900                var onCancel = () => {
901
902                };
903
904                var onOk = () => {
905                    $bookmark_panel.find('.cbxwpbkmarkloading').show();
906                    $this.attr('disabled', true);
907
908                    $.post(ajaxurl, data, function (response) {
909
910                        $bookmark_panel.find('.cbxwpbkmarkloading').hide();
911                        response = $.parseJSON(response);
912
913                        var message = '';
914                        if (response.msg === 1) {
915
916                            //reset the edit fields
917                            $cat_name.val(''); //reset category name field
918                            $cat.val(''); //reset hidden category id field
919
920                            var cats                             = $.parseJSON(response.cats);
921                            cbxwpbookmark.user_current_cat_count = cats.length;
922                            cbxwpbookmark.user_current_cats      = cats;
923
924                            var $cat_options_add  = '';
925                            var $cat_options_edit = '';
926
927                            $.each(cats, function (key, val) {
928                                $cat_options_add += '<li class="cbxlbjs-item" data-catname="' + cats[key].cat_name + '" data-privacy="' + cats[key].privacy + '" data-incat="' + cats[key].incat + '"  data-value="' + cats[key].id + '"><span title="' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '" class="cbxlbjs-item-name">' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '</span></li>';
929
930                                $cat_options_edit += '<li class="cbxlbjs-item" data-catname="' + cats[key].cat_name + '" data-privacy="' + cats[key].privacy + '" data-incat="' + cats[key].incat + '"  data-value="' + cats[key].id + '"><span title="' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '" class="cbxlbjs-item-name">' + cbxwpbookmark_stripslashes(cats[key].cat_name) + '</span></li>';
931                            });
932
933                            $bookmark_panel.find('.cbxwpbkmarklist-nocatfound').remove();
934
935                            //update category list for add view and edit view
936                            $cat_book_list.find('.cbxwpbkmarklist').html($cat_options_add);
937                            $cat_edit_list.find('.cbxwpbkmarklist').html($cat_options_edit);
938
939                            //hide the category edit panel
940                            $cat_edit_form.hide();
941                            $cat_edit_list.show();
942
943                            // success Message
944                            message = cbxwpbookmark.category_delete_success;
945                            $cat_edit_form.find('.cbxwpbkmark-form-note').hide().addClass('cbxwpbkmark-form-note-success').text('');
946                            $bookmark_panel.find('.cbxwpbkmarktrig_label').text(message);
947                        } else {
948                            message = cbxwpbookmark.category_delete_error;
949                            $cat_edit_form.find('.cbxwpbkmark-form-note').show().text(message);
950                        }
951
952                        $this.attr('disabled', false);
953                    });
954                };
955
956                notifier.confirm(
957                    cbxwpbookmark.are_you_sure_delete_desc,
958                    onOk,
959                    onCancel,
960                    {
961                        labels: {
962                            confirm: cbxwpbookmark.are_you_sure_global
963                        }
964                    }
965                );
966
967            }
968        });//end: on click delete category button
969
970        //adding click event on the list - bookmark list
971        $(document.body).on('click', '.cbxwpbkmark_cat_book_list .cbxlbjs-item', function (e) {
972
973            var $item           = $(this);
974            var $bookmark_panel = $item.closest('.cbxwpbkmarklistwrap');
975            var $cat_add_form   = $bookmark_panel.find('.cbxwpbkmark_cat_add_form');
976            var $cat_edit_form  = $bookmark_panel.find('.cbxwpbkmark_cat_edit_form');
977            var $cat_book_list  = $bookmark_panel.find('.cbxwpbkmark_cat_book_list');
978            var $cat_edit_list  = $bookmark_panel.find('.cbxwpbkmark_cat_edit_list');
979            var $toolbar        = $bookmark_panel.find('.cbxwpbkmark-toolbar');
980
981            $bookmark_panel.find('.cbxwpbkmarkloading').show();
982
983            var $bookmark_panel_parent = $bookmark_panel.closest('.cbxwpbkmarkwrap');
984            var $bookmark_btn          = $bookmark_panel_parent.find('.cbxwpbkmarktrig');
985
986            var $object_id   = $bookmark_panel.data('object_id');
987            var $object_type = $bookmark_panel.data('type'); //object type
988
989            var $cat_id = $item.attr('data-value');
990
991            var $bookmark_label   = $bookmark_btn.data('bookmark-label');
992            var $bookmarked_label = $bookmark_btn.data('bookmarked-label');
993            var $show_count       = Number($bookmark_btn.data('show-count'));
994            var $display_label    = Number($bookmark_btn.data('display-label'));
995
996
997            CBXWPBookmarkEvents_do_action('cbxwpbookmark_trigger_cats_bk_click', $bookmark_btn, $bookmark_panel, $object_id, $object_type, $cat_id);//last param category id
998
999            //now send ajax request to save this post id and category as bookmark for this user
1000            //post id already in variable $object_id
1001
1002            var bookmarkData = {
1003                'action': 'cbx_add_bookmark',
1004                'security': cbxwpbookmark.nonce,
1005                'cat_id': $cat_id,
1006                'object_id': $object_id,
1007                'object_type': $object_type,
1008                //'cbxbookmark_lang': cbxwpbookmark.cbxbookmark_lang
1009            };
1010
1011            $.post(ajaxurl, bookmarkData, function (response) {
1012
1013                response             = $.parseJSON(response);
1014                var $bookmark_count  = Number(response.bookmark_count);
1015                var $bookmark_byuser = Number(response.bookmark_byuser);
1016
1017
1018                if (response && response.code === 1) {
1019                    $item.attr('data-incat', response.operation);
1020
1021                    $bookmark_panel.find('.cbxwpbkmarkloading').hide();
1022                    $bookmark_panel.find('.cbxwpbkmarktrig_label').text(response.msg);
1023
1024                    var $show_count_html = '';
1025                    if ($show_count) {
1026                        $show_count_html = '(<i class="cbxwpbkmarktrig-count">' + $bookmark_count + '</i>)';
1027                    }
1028
1029                    var $display_label_style = '';
1030                    if ($display_label === 0) {
1031                        $display_label_style = ' style="display:none;" ';
1032                    }
1033
1034                    if ($bookmark_byuser > 0) {
1035                        var $bookmark_label_html = '<span class="cbxwpbkmarktrig-icon"></span><span ' + $display_label_style + ' class="cbxwpbkmarktrig-label">' + $bookmarked_label + $show_count_html + '</span>';
1036
1037                        $bookmark_btn.addClass('cbxwpbkmarktrig-marked');
1038                        //$bookmark_btn.html($bookmark_label_html+$show_count_html);
1039                        $bookmark_btn.html($bookmark_label_html);
1040                    } else {
1041                        var $bookmark_label_html = '<span class="cbxwpbkmarktrig-icon"></span><span ' + $display_label_style + ' class="cbxwpbkmarktrig-label">' + $bookmark_label + $show_count_html + '</span>';
1042
1043                        $bookmark_btn.removeClass('cbxwpbkmarktrig-marked');
1044                        //$bookmark_btn.html($bookmark_label_html+$show_count_html);
1045                        $bookmark_btn.html($bookmark_label_html);
1046                    }
1047
1048                    CBXWPBookmarkEvents_do_action('cbxwpbookmark_trigger_cats_bk_response', response, $bookmark_btn, $bookmark_panel, $object_id, $object_type, $cat_id);
1049
1050                } else {
1051                    $bookmark_panel.find('.cbxwpbkmarktrig_label').text(response.msg);
1052                    $bookmark_panel.find('.cbxwpbkmarkloading').hide();
1053                }
1054
1055                //show modal alert if there defined
1056                if (response.alert_msg) {
1057                    new AWN(awn_options).warning(response.alert_msg);
1058                }
1059            });//end response
1060
1061        });//end: adding click event on the list - bookmark list
1062
1063        //adding click event on the list - bookmark  edit list
1064        $(document.body).on('click', '.cbxwpbkmark_cat_edit_list .cbxlbjs-item', function (e) {
1065            var $this           = $(this);
1066            var $bookmark_panel = $(this).closest('.cbxwpbkmarklistwrap');
1067            var $cat_add_form   = $bookmark_panel.find('.cbxwpbkmark_cat_add_form');
1068            var $cat_edit_form  = $bookmark_panel.find('.cbxwpbkmark_cat_edit_form');
1069            var $cat_book_list  = $bookmark_panel.find('.cbxwpbkmark_cat_book_list');
1070            var $cat_edit_list  = $bookmark_panel.find('.cbxwpbkmark_cat_edit_list');
1071            var $toolbar        = $bookmark_panel.find('.cbxwpbkmark-toolbar');
1072
1073            var $object_id   = $bookmark_panel.data('object_id');
1074            var $object_type = $bookmark_panel.data('type'); //object type
1075
1076            var $cat_id      = Number($this.attr('data-value'));
1077            var $cat_privacy = Number($this.attr('data-privacy'));
1078            var $cat_name    = $this.attr('data-catname');
1079
1080            $cat_edit_list.hide();
1081            $cat_edit_form.show();
1082
1083            $cat_edit_form.find('.cbxwpbkmark-field-cat').val($cat_name).focus();
1084            $cat_edit_form.find('.cbxwpbkmark-field-catid').val($cat_id);
1085            $cat_edit_form.find('.cbxwpbkmark-field-privacy_' + $object_id).val($cat_privacy);
1086
1087            $bookmark_panel.find('.cbxwpbkmarktrig_label').text(cbxwpbookmark.add_to_head_cat_edit);
1088        });//end: adding click event on the list - bookmark  edit list
1089
1090        //on click on nocategory found
1091        $(document.body).on('click', '.cbxwpbkmarklist-nocatfoundtrig', function (event) {
1092            event.preventDefault();
1093
1094            var $this           = $(this);
1095            var $bookmark_panel = $this.closest('.cbxwpbkmarklistwrap');
1096            $bookmark_panel.find('.cbxwpbkmark-toolbar-newcat').trigger('click');
1097        });//end: on click on nocategory found
1098
1099        //on click on close icon disable the bookmark popup
1100        $(document.body).on('click', '.cbxwpbkmarktrig_close', function (event) {
1101            var $this           = $(this);
1102            var $bookmark_panel = $this.closest('.cbxwpbkmarklistwrap');
1103
1104            $bookmark_panel.fadeOut();
1105
1106            //CBXWPBookmarkEvents_do_action('cbxwpbookmark_pop_closed', $this, $bookmark_panel);
1107        });//end: on click on close icon disable the bookmark popup
1108
1109        //on click on close icon disable the bookmark popup for guest view
1110        $(document.body).on('click', '.cbxwpbkmarkguesttrig_close', function (event) {
1111            event.stopPropagation();
1112            event.preventDefault();
1113
1114            var $this           = $(this);
1115            var $bookmark_panel = $this.closest('.cbxwpbkmarkguestwrap');
1116            $bookmark_panel.fadeOut();
1117
1118            //CBXWPBookmarkEvents_do_action('cbxwpbookmark_pop_guest_closed', $this, $bookmark_panel);
1119        });//end: on click on close icon disable the bookmark popup for guest view
1120
1121        //on click on any where of body except the bookmark popup close the bookmark popup
1122        $('body').on('mouseup', function (e) {
1123            var $bookmark_panel = $('.cbxwpbkmarklistwrap');
1124            if ((e.target.id !== 'cbxwpbkmarklistwrap-' + $bookmark_panel.data('object_id')) && !$bookmark_panel.has(e.target).length) {
1125                $bookmark_panel.fadeOut();
1126            }
1127
1128            var $bookmark_guest_panel = $('.cbxwpbkmarkguestwrap');
1129            if ((e.target.id !== 'cbxwpbkmarkguestwrap-' + $bookmark_guest_panel.data('object_id')) && !$bookmark_guest_panel.has(e.target).length) {
1130                $bookmark_guest_panel.fadeOut();
1131            }
1132        });//end: on click on any where of body except the bookmark popup close the bookmark popup
1133
1134        //category search using fuzzy logic
1135        $(document.body).on('keyup', '.cbxlbjs-searchbar', function (event) {
1136            var $this = $(this);
1137            var val   = $this.val();
1138
1139            var catlistholder = $this.closest('.cbxlbjs-searchbar-wrapper').next('.cbxwpbkmarklist');
1140
1141            if (this.value.length > 0) {
1142                catlistholder.find('li').hide().filter(function () {
1143                    return $(this).text().toLowerCase().indexOf(val.toLowerCase()) !== -1;
1144                }).show();
1145            } else {
1146                catlistholder.find('li').show();
1147            }
1148
1149        });
1150
1151        //we don't need this as after changing css class name the above code works for both book list and edit list
1152        /*$(document.body).on('keyup', '.cbxlbjs-searchbar-manage', function (event) {
1153          var $this = $(this);
1154          var val   = $this.val();
1155
1156          var catlistholder = $this.closest('.cbxlbjs-searchbar-wrapper-manage').next('.cbxwpbkmarklist-manage');
1157
1158          if (this.value.length > 0) {
1159            catlistholder.find('li').hide().filter(function () {
1160              return $(this).text().toLowerCase().indexOf(val.toLowerCase()) !== -1;
1161            }).show();
1162          }
1163          else {
1164            catlistholder.find('li').show();
1165          }
1166
1167        });*/
1168
1169        /* User Front Admin */
1170
1171        //my category delete button action
1172        $('.cbxbookmark-category-list').on('click', '.cbxbookmark-delete-btn', function (event) {
1173            event.preventDefault();
1174
1175            var $this         = $(this);
1176            var $this_item    = $this.closest('li');
1177            var $this_wrapper = $this_item.closest('ul');
1178            var $id           = $this.data('id');
1179            //var $object_id 		= Number($this.data('object_id'));
1180            //var $object_type 	= $this.data('object_type');
1181
1182            var data = {
1183                'action': 'cbx_delete_bookmark_category',
1184                'security': cbxwpbookmark.nonce,
1185                'id': Number($id)
1186                //'cbxbookmark_lang': cbxwpbookmark.cbxbookmark_lang
1187            };
1188            // We can also pass the url value separately from aja
1188xurl for front end AJAX implementations
1189
1190            if (Number($id) > 0) {
1191                var notifier = new AWN(awn_options);
1192                var onCancel = () => {
1193
1194                };
1195
1196                var onOk = () => {
1197                    $this.attr('disabled', true);
1198                    //$this.addClass('cbxbookmark-delete-btn-busy');
1199                    $this.addClass('running');
1200
1201                    $.post(ajaxurl, data, function (response) {
1202
1203                        response = $.parseJSON(response);
1204
1205                        if (response.msg === 1) {
1206                            // success Message
1207                            var message = cbxwpbookmark.category_delete_success;
1208                            // Remove the li tag if the category deleted
1209                            $this_item.remove();
1210                            new AWN(awn_options).success(message);
1211
1212                            if ($this_wrapper.find('li').length === 0) {
1213                                $this_wrapper.append('<li class="cbxbookmark-category-list-item-notfound">' + cbxwpbookmark.no_cats_found + '</li>');
1214                            }
1215
1216
1217                        } else {
1218                            var message = cbxwpbookmark.category_delete_error;
1219                            new AWN(awn_options).warning(message);
1220
1221                            $this.attr('disabled', false);
1222                            //$this.removeClass('cbxbookmark-delete-btn-busy');
1223                            $this.removeClass('running');
1224                        }
1225                    });
1226                };
1227
1228                notifier.confirm(
1229                    cbxwpbookmark.are_you_sure_delete_desc,
1230                    onOk,
1231                    onCancel,
1232                    {
1233                        labels: {
1234                            confirm: cbxwpbookmark.are_you_sure_global
1235                        }
1236                    }
1237                );
1238
1239
1240            }
1241        });
1242
1243        //my category update event
1244
1245
1246        //on enter on category field on add mode
1247        $(document.body).on('keypress', '.cbxbmedit-catname-add', function (event) {
1248            //event.preventDefault();
1249            if (event.which === 13) {
1250                //$('form#login').submit();
1251                var $this   = $(this);
1252                var $parent = $this.closest('#cbxbookmark-category-list-create-wrap');
1253
1254                $parent.find('.cbxbookmark-cat-save').trigger('click');
1255
1256                return false;
1257            }
1258        });
1259        //end on enter on category field on add mode
1260
1261        //on enter on category field on edit mode
1262        $(document.body).on('keypress', '.cbxbmedit-catname-edit', function (event) {
1263            //event.preventDefault();
1264            if (event.which === 13) {
1265                //$('form#login').submit();
1266                var $this   = $(this);
1267                var $parent = $this.closest('li.cbxbookmark-category-list-item');
1268
1269                $parent.find('.cbxbookmark-cat-save').trigger('click');
1270
1271                return false;
1272            }
1273        });
1274        //end on enter on category field on edit mode
1275
1276        //category save button action
1277        $('.cbxbookmark-category-list').on('click', '.cbxbookmark-cat-save', function (event) {
1278            event.preventDefault();
1279
1280            var $this = $(this);
1281            var $busy = Number($this.data('busy'));
1282            if ($busy == 1) return;
1283
1284            var $parent = $this.closest('li.cbxbookmark-category-list-item');
1285
1286            var $ucatid = $parent.data('id'); //get this value from the parent data attribute
1287
1288            //get new value
1289            var $ucatname = $parent.find('.cbxbmedit-catname').val();
1290            var $uprivacy = $parent.find('.cbxbmedit-privacy').val();
1291
1292            var updatedata = {
1293                'action': 'cbx_update_bookmark_category',
1294                'security': cbxwpbookmark.nonce,
1295                'id': $ucatid,
1296                'catname': $ucatname,
1297                'privacy': $uprivacy,
1298                //'cbxbookmark_lang': cbxwpbookmark.cbxbookmark_lang
1299            };
1300
1301            $this.data('busy', 1);
1302            $this.addClass('running');
1303
1304            // We can also pass the url value separately from aja
1304xurl for front end AJAX implementations
1305            $.post(ajaxurl, updatedata, function (response) {
1306
1307                response = $.parseJSON(response);
1308
1309                if (response.flag === 1) {
1310                    $parent.find('.cbxbookmark-mycat-editbox').hide();
1311                    $parent.data('privacy', response.privacy);
1312                    $parent.data('name', response.catname);
1313                    $parent.find('.cbxlbjs-item-widget').html(response.catname);
1314                } else if (response.flag === 0) {
1315                    $parent.closest('.cbxbookmark-category-list').prev('.cbxbookmark-errormsg').html(response.msg);
1316                }
1317
1318                $this.data('busy', 0);
1319                $this.removeClass('running');
1320            });
1321
1322        });
1323
1324        //my category edit button action
1325        //edit button action and it opens the edit panel for the clicked item
1326        $('.cbxbookmark-category-list').on('click', '.cbxbookmark-edit-btn', function (event) {
1327            event.preventDefault();
1328
1329            var $this = $(this);
1330
1331            //var $parent = $(this).closest('.cbxbookmark-mycat-item');
1332            var $parent = $this.closest('.cbxbookmark-category-list-item');
1333
1334            var $catid   = $parent.data('id');
1335            var $catname = $parent.data('name');
1336            var $privacy = $parent.data('privacy');
1337
1338            var $editpanel = $parent.find('.cbxbookmark-mycat-editbox');
1339            if ($editpanel.length === 0) {
1340                var $template = $.parseJSON(cbxwpbookmark.cat_template);
1341
1342                /* Repalcing Input Values */
1343                $template = $template.replace(/##catname##/g, $catname);
1344                $parent.append($template);
1345
1346                if ($privacy === 0) {
1347                    $parent.find('.cbxbmedit-privacy option:eq(1)').prop('selected', true);
1348                    $parent.find('.cbxbmedit-privacy option:eq(0)').prop('selected', false);
1349                }
1350
1351                if ($privacy === 1) {
1352                    $parent.find('.cbxbmedit-privacy option:eq(0)').prop('selected', true);
1353                    $parent.find('.cbxbmedit-privacy option:eq(1)').prop('selected', false);
1354                }
1355            } else {
1356                $editpanel.show();
1357                $parent.find('.cbxbmedit-catname').val($catname);
1358                //$parent.find('.cbxbmedit-privacy').val($privacy);
1359
1360                if ($privacy === 0) {
1361                    $parent.find('.cbxbmedit-privacy option:eq(1)').prop('selected', true);
1362                    $parent.find('.cbxbmedit-privacy option:eq(0)').prop('selected', false);
1363                }
1364
1365                if ($privacy === 1) {
1366                    $parent.find('.cbxbmedit-privacy option:eq(0)').prop('selected', true);
1367                    $parent.find('.cbxbmedit-privacy option:eq(1)').prop('selected', false);
1368                }
1369            }
1370
1371        });
1372
1373        //close action for edit panel for each single item
1374        $('.cbxbookmark-category-list').on('click', '.cbxbookmark-cat-close', function (e) {
1375            e.preventDefault();
1376
1377            $(this).closest('.cbxbookmark-mycat-editbox').css('display', 'none');
1378        });
1379
1380        /**
1381         * Delete a bookmark in list mode
1382         */
1383        $('.cbxwpbookmark-mylist').on('click', '.cbxbookmark-post-delete', function (event) {
1384            event.preventDefault();
1385
1386            var $postdelete = $(this);
1387            var $wrapper    = $postdelete.closest('div.cbxwpbookmark-mylist-wrap');
1388
1389            var $object_id   = $postdelete.data('object_id');
1390            var $bookmark_id = $postdelete.data('bookmark_id');
1391            var $busy        = parseInt($postdelete.data('busy'));
1392
1393            var data = {
1394                'action': 'cbx_delete_bookmark_post',
1395                'security': cbxwpbookmark.nonce,
1396                'object_id': $object_id,
1397                'bookmark_id': $bookmark_id
1398                //'cbxbookmark_lang': cbxwpbookmark.cbxbookmark_lang
1399            };
1400            // We can also pass the url value separately from ajaxurl for front end AJAX implementations
1401
1402            if ($busy === 0) {
1403                var notifier = new AWN(awn_options);
1404
1405                var onCancel = () => {
1406
1407                };
1408
1409                var onOk = () => {
1410
1411                    //$wrapper.find('.cbxbookmark-alert').remove();
1412                    $postdelete.data('busy', 1);
1413                    //$postdelete.addClass('cbxbookmark-delete-btn-busy');
1414                    $postdelete.addClass('running');
1415
1416                    $.post(ajaxurl, data, function (response) {
1417                        response = $.parseJSON(response);
1418
1419                        if (response.msg === 0) {
1420                            // Remove the li tag if the bookmark is deleted
1421                            $postdelete.closest('li').remove();
1422
1423                            new AWN(awn_options).success(cbxwpbookmark.bookmark_removed);
1424
1425                            if ($wrapper.find('ul.cbxwpbookmark-mylist li').length === 0) {
1426                                $wrapper.find('ul.cbxwpbookmark-mylist').append('<li class="cbxwpbookmark-mylist-item cbxwpbookmark-mylist-item-notfound">' + cbxwpbookmark.bookmark_removed_empty + '</li>');
1427                            }
1428                        } else if (response.msg === 1) {
1429                            new AWN(awn_options).warning(cbxwpbookmark.bookmark_removed_failed);
1430
1431                            //$this.removeClass('cbxbookmark-delete-btn-busy');
1432                            $this.removeClass('running');
1433                        }
1434                    });
1435                };
1436
1437                notifier.confirm(
1438                    cbxwpbookmark.are_you_sure_delete_desc,
1439                    onOk,
1440                    onCancel,
1441                    {
1442                        labels: {
1443                            confirm: cbxwpbookmark.are_you_sure_global
1444                        }
1445                    }
1446                );
1447            }
1448
1449
1450        });
1451
1452        //implementing the bookmark load more feature
1453        $('.cbxwpbookmark-mylist-wrap').on('click', '.cbxbookmark-more', function (e) {
1454            e.preventDefault();
1455            var _this = $(this);
1456            var $busy = Number(_this.data('busy'));
1457            if ($busy === 1) return;
1458
1459            var $wrapper = _this.closest('div.cbxwpbookmark-mylist-wrap');
1460
1461            //$wrapper.find('.cbxwpbm_ajax_icon').show();
1462
1463            var limit  = _this.data('limit');
1464            var offset = _this.data('offset');
1465            var catid  = _this.data('catid');
1466            var type   = _this.data('type');
1467
1468            var order   = _this.data('order');
1469            var orderby = _this.data('orderby');
1470            var userid  = _this.data('userid');
1471
1472            var totalpage   = _this.data('totalpage');
1473            var currpage    = _this.data('currpage');
1474            var allowdelete = _this.data('allowdelete');
1475
1476            if (currpage + 1 >= totalpage) {
1477                _this.hide();
1478            } else {
1479                _this.show();
1480            }
1481
1482            var addcat = {
1483                'action': 'cbx_bookmark_loadmore',
1484                'security': cbxwpbookmark.nonce,
1485                'limit': limit,
1486                'offset': offset,
1487                'catid': catid,
1488                'type': type,
1489                'order': order,
1490                'orderby': orderby,
1491                'userid': userid,
1492                'allowdelete': allowdelete,
1493                //'cbxbookmark_lang': cbxwpbookmark.cbxbookmark_lang
1494            };
1495
1496            _this.data('busy', 1);
1497            _this.addClass('running');
1498
1499            $.post(ajaxurl, addcat, function (response) {
1500                response = $.parseJSON(response);
1501
1502                if (response.code) {
1503                    _this.data('offset', limit + offset);
1504                    _this.data('currpage', currpage + 1);
1505
1506                    $wrapper.find('ul.cbxwpbookmark-mylist').append(response.data);
1507                    //$wrapper.find('.cbxwpbm_ajax_icon').hide();
1508
1509                } else {
1510                    //var $error_html = $('<div class="cbxbookmark-alert cbxbookmark-alert-error">' + cbxwpbookmark.error_msg + response.code + '</div>');
1511                    //$wrapper.find('ul.cbxwpbookmark-mylist').append($error_html);
1512
1513                    new AWN(awn_options).warning(cbxwpbookmark.error_msg + response.code);
1514                }
1515
1516                _this.data('busy', 0);
1517                _this.removeClass('running');
1518            });
1519
1520        });
1521
1522        //bookmarks list items as sublist
1523        $('.cbxbookmark-category-list-item-expand').on('click', '.cbxlbjs-item-widget', function (e) {
1524            e.preventDefault();
1525
1526            var $this      = $(this);
1527            var $parent    = $this.closest('.cbxbookmark-category-list-item-expand');
1528            var $cat_id    = Number($parent.data('id'));
1529            var $cat_total = Number($parent.data('total'));
1530            var $processed = Number($parent.data('processed'));
1531            var $privacy   = Number($parent.data('privacy'));
1532            var $userid    = Number($parent.data('userid'));
1533            var $totalpage = Number($parent.data('totalpage'));
1534            var $page      = Number($parent.data('page'));
1535
1536            if ($totalpage > 0) {
1537                if ($processed === 0) {
1538                    $this.data('busy', 1);
1539                    $this.next('ul').remove();
1540
1541                    var data = {
1542                        'action': 'cbx_load_bookmarks_sublist',
1543                        'security': cbxwpbookmark.nonce,
1544                        'cat_id': $cat_id,
1545                        'cat_total': $cat_total,
1546                        'privacy': $privacy,
1547                        'userid': $userid,
1548                        'totalpage': $totalpage,
1549                        'page': $page,
1550                        //'cbxbookmark_lang': cbxwpbookmark.cbxbookmark_lang
1551                    };
1552
1553                    $.post(ajaxurl, data, function (response) {
1554                        $this.data('busy', 0);
1555                        response = $.parseJSON(response);
1556
1557                        if (Number(response.code)) {
1558                            $parent.data('processed', 1);
1559                            var output    = $.parseJSON(response.output);
1560                            var show_more = Number(response.show_more);
1561
1562                            if (show_more) {
1563                                $page++;
1564                            }
1565
1566                            var show_more_html = (show_more) ? '<a data-busy="0" href="#" data-page="' + $page + '" data-totalpage="' + $totalpage + '" data-userid="' + $userid + '" data-privacy="' + $privacy + '" data-cat_total="' + $cat_total + '" data-cat_id="' + $cat_id + '" class="cbxbookmark-category-list-item-sublist-a-more">' + cbxwpbookmark.load_more + '</a>' : '';
1567
1568                            if ($this.next('ul').length === 0) {
1569                                $parent.append('<ul class="cbxbookmark-category-list-item-sublist">' + output + '</ul>' + show_more_html);
1570                            } else {
1571                                $this.next('ul').append(output);
1572                            }
1573                        } else {
1574                            $parent.data('processed', 1);
1575                        }
1576                    });
1577                }
1578            } else {
1579                if ($processed === 0) {
1580                    $parent.data('processed', 1);
1581                    $parent.append('<ul class="cbxbookmark-category-list-item-sublist cbxbookmark-category-list-item-sublist-notfound"><li>' + cbxwpbookmark.bookmark_not_found + '</li></ul>');
1582                }
1583            }
1584        });
1585
1586        //implementing the bookmark load more feature for category sub list
1587        $(document.body).on('click', '.cbxbookmark-category-list-item-sublist-a-more', function (e) {
1588            e.preventDefault();
1589
1590            var $this = $(this);
1591
1592
1593            var $cat_id    = Number($this.data('cat_id'));
1594            var $cat_total = Number($this.data('cat_total'));
1595            var $privacy   = Number($this.data('privacy'));
1596            var $userid    = Number($this.data('userid'));
1597            var $totalpage = Number($this.data('totalpage'));
1598            var $page      = Number($this.data('page')); //current page
1599            var $busy      = Number($this.data('busy'));
1600            var $parent    = $this.prev('.cbxbookmark-category-list-item-sublist');
1601
1602            if ($busy === 0) {
1603                $this.data('busy', 1);
1604                if ($page === $totalpage) {
1605                    $this.remove();
1606                }
1607
1608                var data = {
1609                    'action': 'cbx_load_bookmarks_sublist',
1610                    'security': cbxwpbookmark.nonce,
1611                    'cat_id': $cat_id,
1612                    'cat_total': $cat_total,
1613                    'privacy': $privacy,
1614                    'userid': $userid,
1615                    'totalpage': $totalpage,
1616                    'page': $page,
1617                    //'cbxbookmark_lang': cbxwpbookmark.cbxbookmark_lang
1618                };
1619
1620                $.post(ajaxurl, data, function (response) {
1621
1622                    response = $.parseJSON(response);
1623
1624                    if (Number(response.code)) {
1625                        $parent.data('processed', 1);
1626                        var output    = $.parseJSON(response.output);
1627                        var show_more = Number(response.show_more);
1628
1629                        if (show_more) {
1630                            $page++;
1631                            $this.data('page', $page);
1632
1633                            $this.data('busy', 0);
1634                        }
1635
1636                        $parent.append(output);
1637                    }
1638                });//end ajax
1639            }//end busy
1640        });
1641
1642
1643        $('#cbxbookmark-category-list-create-wrap').on('click', '.cbxbookmark-category-list-create', function (e) {
1644            e.preventDefault();
1645
1646            var $this   = $(this);
1647            var $parent = $this.closest('#cbxbookmark-category-list-create-wrap');
1648            var $form   = $parent.find('.cbxbookmark-category-list-create-form');
1649
1650            $form.toggle();
1651        });
1652
1653        //on click new category button
1654        $('#cbxbookmark-category-list-create-wrap').on('click', '.cbxbookmark-cat-close', function (event) {
1655            event.preventDefault();
1656
1657            var $this         = $(this);
1658            var $parent       = $this.closest('#cbxbookmark-category-list-create-wrap');
1659            var $cat_add_form = $parent.find('.cbxbookmark-category-list-create-form');
1660            $cat_add_form.toggle();
1661        });
1662
1663        //on click new category button from category list
1664        $('#cbxbookmark-category-list-create-wrap').on('click', '.cbxbookmark-cat-save', function (event) {
1665            event.preventDefault();
1666
1667            var $this = $(this);
1668            var $busy = Number($this.data('busy'));
1669            if ($busy == 1) return;
1670
1671
1672            var $parent        = $this.closest('#cbxbookmark-category-list-create-wrap');
1673            var $cat_add_form  = $parent.find('.cbxbookmark-category-list-create-form');
1674            var $category_list = $parent.next('.cbxbookmark-category-list');
1675
1676            var $cat_field     = $cat_add_form.find('.cbxbmedit-catname');
1677            var $privacy_field = $cat_add_form.find('.cbxbmedit-privacy');
1678            //var $catid_field   = $cat_add_form.find('.cbxwpbkmark-field-catid');
1679
1680            var $cat_name = $cat_field.val();
1681            var $privacy  = Number($privacy_field.val());
1682
1683            if ($cat_name !== '') {
1684                $cat_field.removeClass('cbxbmedit-catname-error');
1685
1686                var data = {
1687                    'action': 'cbx_add_bookmark_category_std',
1688                    'security': cbxwpbookmark.nonce,
1689                    'cat_name': $cat_name,
1690                    'privacy': $privacy
1691                    //'cbxbookmark_lang': cbxwpbookmark.cbxbookmark_lang
1692                };
1693
1694                $this.data('busy', 1);
1695                $this.addClass('running');
1696
1697                $.post(ajaxurl, data, function (response) {
1698                    response = $.parseJSON(response);
1699
1700                    $this.data('busy', 0);
1701                    $this.removeClass('running');
1702
1703                    if (response.code === 1) {
1704                        $cat_field.val('');
1705                        $cat_field.removeClass('cbxbmedit-catname-error');
1706
1707                        $category_list.prepend(response.list_html);
1708                        new AWN(awn_options).success(response.msg);
1709
1710
1711                        $category_list.find('.cbxbookmark-category-list-item-notfound').remove();
1712
1713                    } else {
1714                        $cat_field.addClass('cbxbmedit-catname-error');
1715                        new AWN(awn_options).warning(response.msg);
1716                    }
1717
1718                });
1719
1720
1721            } else {
1722                $cat_field.addClass('cbxbmedit-catname-error');
1723            }
1724        });
1725
1726        //delete all bookmarks of a user by user
1727        $('.cbxwpbookmark_deleteall').on('click', function (e) {
1728            e.preventDefault();
1729
1730            var $this = $(this);
1731            var $parent = $this.closest('.cbxwpbookmark-title');
1732            var $busy = Number($this.data('busy'));
1733
1734
1735            if ($busy === 1) return;
1736
1737
1738            var notifier = new AWN(awn_options);
1739
1740            var onCancel = () => {
1741
1742            };
1743
1744            var onOk = () => {
1745
1746                $this.data('busy', 1);
1747                $this.prop('disabled', true);
1748                $this.addClass('running');
1749
1750                var data = {
1751                    'action': 'cbxwpbkmark_delete_all_bookmarks_by_user',
1752                    'security': cbxwpbookmark.nonce,
1753                    //'cbxbookmark_lang': cbxwpbookmark.cbxbookmark_lang
1754                };
1755
1756                $.post(ajaxurl, data, function (response) {
1757                        $this.data('busy', 0);
1758                        $this.prop('disabled', false);
1759                        $this.removeClass('running');
1760
1761                        if (response && response.code === 1) {
1762                            new AWN(awn_options).success(response.msg);
1763
1764                            $parent.next('.cbxwpbookmark-list-generic').remove();
1765                            $parent.next('.cbxbookmark_cards_wrapper_postgrid').remove();
1766                        } else {
1767                            $this.data('busy', 0);
1768                            $this.prop('disabled', false);
1769                            $this.removeClass('cbxwpbookmark_deleteall_busy');
1770                        }
1771                    }
1772                );
1773            };
1774
1775            notifier.confirm(
1776                cbxwpbookmark.are_you_sure_delete_desc,
1777                onOk,
1778                onCancel,
1779                {
1780                    labels: {
1781                        confirm: cbxwpbookmark.are_you_sure_global
1782                    }
1783                }
1784            );
1785
1786
1787        });
1788
1789        $('.cbxwpbookmark_share').on('click', function (e) {
1790            e.preventDefault();
1791
1792            var $this = $(this);
1793
1794            var $share_url    = $this.attr('href');
1795            var shareurl_html = cbxwpbookmark.shareurl_html;
1796            shareurl_html     = shareurl_html.replace(/##share_url##/g, $share_url);
1797            shareurl_html     = shareurl_html.replace(/##share_url##/g, $share_url);
1798
1799            new AWN().modal(
1800                shareurl_html,
1801                'awn-popup-body-cbxbookmark-shareurl',
1802                awn_options
1803            )
1804        });
1805
1806        var cbxbookmark_sharecopy_timeoutId;
1807
1808        $(document.body).on('click', '.shareurl_copy_btn', function (e) {
1809            e.preventDefault();
1810
1811            var $this = $(this);
1812            var $url  = $this.data('url');
1813            $this.prop('disabled', true);
1814
1815            cbxwpbookmark_copyStringToClipboard($url);
1816            $this.text(cbxwpbookmark.shareurl_trans.copied);
1817
1818            clearTimeout(cbxbookmark_sharecopy_timeoutId);
1819            cbxbookmark_sharecopy_timeoutId = setTimeout(function () {
1820                $this.text(cbxwpbookmark.shareurl_trans.copy);
1821                $this.prop('disabled', false);
1822            }, 1000);
1823        });
1824    });//end dom ready
1825})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.