| Server IP : 54.36.91.62 / Your IP : 216.73.217.117 Web Server : Apache System : Linux webm013.cluster127.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 User : coopiak ( 151928) PHP Version : 8.3.23 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/coopiak/amisdesseniors-fr/nice2/media/jlexreview/assets/ |
Upload File : |
function JLexReviewFp($, config, langs, ratingData)
{
var _this = this;
this.config = config || {};
this.libs = function()
{
!function(a){var b,c,d,e,f,g,h,i,j,k={setNakedBarDelta:function(a,b){if("stickToSides"===a)j={toEndWidth:b,toBeginLeft:0,toBeginWidth:b};else{if("middle"!==a)throw new Error("unknown position of setNakedBarDelta: "+a);j={toEndWidth:b/2,toBeginLeft:b/2,toBeginWidth:b/2}}},getSliderValuesAtPositionPx:function(a,b){var c,d,e=this,f=e.data("pixel_to_value_mapping");if("undefined"!=typeof f)c=f(a),d=f(b);else{var g=k.getSliderWidthPx.call(e)-e.data("left_grip_width");c=k.inverse_rangemap_0_to_n.call(e,a,g),d=k.inverse_rangemap_0_to_n.call(e,b,g)}return[c,d]},validateAndMoveGripsToPx:function(a,b){var c=this,d=k.getSliderWidthPx.call(c)-c.data("left_grip_width");if(d>=b&&a>=0&&d>=a&&(!c.data("has_right_grip")||b>=a)){var e=c.data("cur_min"),f=c.data("cur_max");k.set_position_from_px.call(c,a,b),k.refresh_grips_style.call(c),k.notify_changed_implicit.call(c,"drag_move",e,f)}return c},updateAriaAttributes:function(){var a=this,b=a.data("settings"),c=a.find(b.left_grip_selector);if(a.data("has_right_grip")){var d=a.find(b.right_grip_selector);c.attr("aria-valuemin",a.data("range_min")).attr("aria-valuenow",l.get_current_min_value.call(a)).attr("aria-valuemax",l.get_current_max_value.call(a)),d.attr("aria-valuemin",l.get_current_min_value.call(a)).attr("aria-valuenow",l.get_current_max_value.call(a)).attr("aria-valuemax",a.data("range_max"))}else c.attr("aria-valuemin",a.data("range_min")).attr("aria-valuenow",l.get_current_min_value.call(a)).attr("aria-valuemax",a.data("range_max"));return a},getSliderWidthPx:function(){var a=this;return Math.round(a.width())},getGripPositionPx:function(a){return parseInt(a.css("left").replace("px",""),10)},getLeftGripPositionPx:function(){var a=this,b=a.data("settings"),c=a.find(b.left_grip_selector);return k.getGripPositionPx.call(a,c)},getRightGripPositionPx:function(){var a=this,b=a.data("settings");if(a.data("has_right_grip"))return k.getGripPositionPx.call(a,a.find(b.right_grip_selector));var c=k.getSliderWidthPx.call(a)-a.data("left_grip_width");return k.rangemap_0_to_n.call(a,a.data("cur_max"),c)},getLeftGripWidth:function(){var a=this,b=a.data("settings"),c=a.find(b.left_grip_selector);return Math.round(c.outerWidth())},getRightGripWidth:function(){var a=this,b=a.data("settings"),c=a.find(b.right_grip_selector);return Math.round(c.outerWidth())},binarySearchValueToPxCompareFunc:function(b,c,d){return b===c[d]?0:b<c[d]&&0===d?0:c[d-1]<=b&&b<c[d]?0:b>c[d]?1:b<=c[d-1]?-1:void a.error("cannot compare s: "+b+" with a["+d+"]. a is: "+c.join(","))},binarySearch:function(a,b,c,d){for(var e,f,g=0,h=a.length-1;h>=g;){e=(g+h)/2|0,f=c(a,e);var i=d(b,a,e);if(i>0)g=e+1;else{if(!(0>i))return e;h=e-1}}return-1},haveLimits:function(){var a=this,b=a.data("lower-limit"),c=a.data("upper-limit"),d=!1;return"undefined"!=typeof b&&"undefined"!=typeof c&&(d=!0),d},refresh_grips_style:function(){var a=this,b=a.data("settings");if("undefined"!=typeof b.highlight){var c=a.data("highlightedRangeMin");if("undefined"!=typeof c){var d=a.find(b.left_grip_selector),e=a.find(b.right_grip_selector),f=a.data("highlightedRangeMax"),g=a.data("cur_min"),h=a.data("cur_max"),i=b.highlight.grip_class;c>g||g>f?d.removeClass(i):d.addClass(i),c>h||h>f?e.removeClass(i):e.addClass(i)}}},set_position_from_val:function(a,b){var c=this,d=c.data("range_min"),e=c.data("range_max");d>a&&(a=d),a>e&&(a=e),c.data("has_right_grip")?(b>e&&(b=e),d>b&&(b=d)):b=c.data("cur_max");var f=l.value_to_px.call(c,a),g=l.value_to_px.call(c,b);return k.set_handles_at_px.call(c,f,g),c.data("cur_min",a),c.data("has_right_grip")&&c.data("cur_max",b),c},set_position_from_px:function(a,b){var c=this;k.set_handles_at_px.call(c,a,b);var d=k.getSliderValuesAtPositionPx.call(c,a,b),e=d[0],f=d[1];return c.data("cur_min",e),c.data("has_right_grip")&&c.data("cur_max",f),c},set_handles_at_px:function(a,b){var c=this,d=c.data("settings"),e=d.left_grip_selector,f=d.right_grip_selector,g=d.value_bar_selector,h=c.data("left_grip_width");return c.find(e).css("left",a+"px"),c.find(f).css("left",b+"px"),c.data("has_right_grip")?c.find(g).css("left",a+"px").css("width",b-a+h+"px"):(j||k.populateNakedBarDeltas.call(c,a,b,h),b>a?c.find(g).css("left",a+"px").css("width",b-a+j.toEndWidth+"px"):c.find(g).css("left",b+j.toBeginLeft+"px").css("width",a-b+j.toBeginWidth+"px")),c},drag_start_func_touch:function(a,b,c,e,f){var g=this,h=a.originalEvent,i=h.touches[0],j=i.pageY,l=i.pageX,m=Math.abs(g.offset().top-j),n=g.offset().left,o=n-l,p=l-(n+g.width());m>b.touch_tolerance_value_bar_y||o>b.touch_tolerance_value_bar_x||p>b.touch_tolerance_value_bar_x||(h.preventDefault(),d=i.pageX,k.drag_start_func.call(g,i,b,c,e,f))},drag_start_func:function(d,f,g,h,i){var j=this;if(j.find(f.left_grip_selector+","+f.value_bar_selector+","+f.right_grip_selector).removeClass(f.animating_css_class),l.is_enabled.call(j)){var m=a(d.target),n=!1;if("object"==typeof f.highlight&&(n=m.is(f.highlight.panel_selector)),i!==!1||m.is(f.left_grip_selector)||m.is(f.right_grip_selector)||m.is(f.value_bar_selector)||n||m.is(j)){b=j;var o,p,q,r,s,t,u=k.getGripPositionPx.call(j,g),v=k.getSliderWidthPx.call(j)-j.data("left_grip_width"),w=g.offset().left,x=k.getRightGripPositionPx.call(j);p=Math.round(d.pageX)-j.data("left_grip_width")/2,q=Math.abs(w-p),s=p-w,j.data("has_right_grip")?(o=h.offset().left,r=Math.abs(o-p),t=p-o):(r=2*q,t=2*s),f.user_drag_start_callback.call(j,d),q===r?w>p?(u+=s,e=!0):(x+=t,e=!1):r>q?(u+=s,e=!0):(x+=t,e=!1),j.data("has_right_grip")?x>v&&(x=v):u>v&&(u=v),0>u&&(u=0),c=!0;var y=j.data("cur_min"),z=j.data("cur_max");k.set_position_from_px.call(j,u,x),k.refresh_grips_style.call(j),k.notify_changed_implicit.call(j,"drag_start",y,z),"[object Touch]"!==Object.prototype.toString.apply(d)&&d.preventDefault()}}},drag_move_func_touch:function(a){if(c===!0){var b=a.originalEvent;b.preventDefault();var d=b.touches[0];k.drag_move_func(d)}},drag_move_func:function(a){if(c){var f=b,g=f.data("settings"),h=k.getSliderWidthPx.call(f)-f.data("left_grip_width"),i=k.getLeftGripPositionPx.call(f),j=k.getRightGripPositionPx.call(f),l=Math.round(a.pageX),m=l-d,n=f.data("left_grip_width")/2,o=f.offset().left+f.data("left_grip_width")-n,p=o+h;g.crossable_handles===!1&&f.data("has_right_grip")&&(e?p=o+j:o+=i);var q=0,r=0;o>l&&(q=1,r=0),l>p&&(r=1,q=0),g.crossable_handles===!0&&f.data("has_right_grip")&&(e?h>=j&&i+m>j&&(e=!1,i=j):i>=0&&i>j+m&&(e=!0,j=i));var s=i,t=j;(m>0&&!q||0>m&&!r)&&(e?s+=m:t+=m),k.validateAndMoveGripsToPx.call(f,s,t),d=l,"[object Touch]"!==Object.prototype.toString.apply(a)&&a.preventDefault()}},drag_end_func_touch:function(a){var b=a.originalEvent;b.preventDefault();var c=b.touches[0];k.drag_end_func(c)},drag_end_func:function(){var a=b;if("undefined"!=typeof a){c=!1,d=void 0,k.notify_mouse_up_implicit.call(a,e),b=void 0;var f=a.data("settings");a.find(f.left_grip_selector+","+f.value_bar_selector+","+f.right_grip_selector).addClass(f.animating_css_class)}},get_rounding_for_value:function(a){var b=this,c=b.data("rounding"),d=b.data("rounding_ranges");if("object"==typeof d){var e=k.binarySearch.call(b,d,a,function(a,b){return a[b].range},function(a,b,c){return a<b[c].range?c>0?a>=b[c-1].range?0:-1:0:1});if(c=1,e>-1)c=parseInt(d[e].value,10);else{var f=d.length-1;a>=d[f].range&&(c=d[f].value)}}return c},notify_mouse_up_implicit:function(a){var b=this,c=l.get_current_min_value.call(b),d=l.get_current_max_value.call(b),e=!1;(b.data("beforestart_min")!==c||b.data("beforestart_max")!==d)&&(e=!0,b.data("beforestart_min",c),b.data("beforestart_max",d));var f=b.data("settings");return f.user_mouseup_callback.call(b,l.get_current_min_value.call(b),l.get_current_max_value.call(b),a,e),b},notify_changed_implicit:function(a,b,c){var d=this,e=!1;("init"===a||"refresh"===a)&&(e=!0);var f=l.get_current_min_value.call(d),g=l.get_current_max_value.call(d);return e||(b=l.round_value_according_to_rounding.call(d,b),c=l.round_value_according_to_rounding.call(d,c)),(e||f!==b||g!==c)&&(k.notify_changed_explicit.call(d,a,b,c,f,g),e=1),e},notify_changed_explicit:function(a,b,c,d,e){var f=this,g=f.data("settings");return f.data("aria_enabled")&&k.updateAriaAttributes.call(f),g.value_changed_callback.call(f,a,d,e,b,c),f},validate_params:function(b){var c=this,d=c.data("range_min"),e=c.data("range_max"),f=c.data("cur_min"),g=c.data("lower-limit"),h=c.data("upper-limit"),i=k.haveLimits.call(c);"undefined"==typeof d&&a.error("the data-range_min attribute was not defined"),"undefined"==typeof e&&a.error("the data-range_max attribute was not defined"),"undefined"==typeof f&&a.error("the data-cur_min attribute must be defined"),d>e&&a.error("Invalid input parameter. must be min < max"),i&&g>h&&a.error("Invalid data-lower-limit or data-upper-limit"),0===c.find(b.left_grip_selector).length&&a.error("Cannot find element pointed by left_grip_selector: "+b.left_grip_selector),"undefined"!=typeof b.right_grip_selector&&0===c.find(b.right_grip_selector).length&&a.error("Cannot find element pointed by right_grip_selector: "+b.right_grip_selector),"undefined"!=typeof b.value_bar_selector&&0===c.find(b.value_bar_selector).length&&a.error("Cannot find element pointed by value_bar_selector"+b.value_bar_selector)},rangemap_0_to_n:function(a,b){var c=this,d=c.data("range_min"),e=c.data("range_max");return d>=a?0:a>=e?b:Math.floor((b*a-b*d)/(e-d))},inverse_rangemap_0_to_n:function(a,b){var c=this,d=c.data("range_min"),e=c.data("range_max");if(0>=a)return d;if(a>=b)return e;var f=(e-d)*a/b;return f+d}},l={teardown:function(){var b=this;return b.removeData(),a(document).unbind("mousemove.nstSlider").unbind("mouseup.nstSlider"),b.parent().unbind("mousedown.nstSlider").unbind("touchstart.nstSlider").unbind("touchmove.nstSlider").unbind("touchend.nstSlider"),b.unbind("keydown.nstSlider").unbind("keyup.nstSlider"),b},init:function(b){var c=a.extend({animating_css_class:"nst-animating",touch_tolerance_value_bar_y:30,touch_tolerance_value_bar_x:15,left_grip_selector:".nst-slider-grip-left",right_grip_selector:void 0,highlight:void 0,rounding:void 0,value_bar_selector:void 0,crossable_handles:!0,value_changed_callback:function(){},user_mouseup_callback:function(){},user_drag_start_callback:function(){}},b),d=a(document);return d.unbind("mouseup.nstSlider"),d.unbind("mousemove.nstSlider"),d.bind("mousemove.nstSlider",k.drag_move_func),d.bind("mouseup.nstSlider",k.drag_end_func),this.each(function(){var b=a(this),d=b.parent();b.data("enabled",!0);var j=b.data("range_min"),m=b.data("range_max"),n=b.data("cur_min"),o=b.data("cur_max");"undefined"==typeof o&&(o=n),""===j&&(j=0),""===m&&(m=0),""===n&&(n=0),""===o&&(o=0),b.data("range_min",j),b.data("range_max",m),b.data("cur_min",n),b.data("cur_max",o),k.validate_params.call(b,c),b.data("settings",c),"undefined"!=typeof c.rounding?l.set_rounding.call(b,c.rounding):"undefined"!=typeof b.data("rounding")?l.set_rounding.call(b,b.data("rounding")):l.set_rounding.call(b,1);var p=b.find(c.left_grip_selector)[0],q=a(p),r=a(b.find(c.right_grip_selector)[0]);"undefined"==typeof q.attr("tabindex")&&q.attr("tabindex",0);var s=!1;b.find(c.right_grip_selector).length>0&&(s=!0,"undefined"==typeof r.attr("tabindex")&&r.attr("tabindex",0)),b.data("has_right_grip",s),b.data("aria_enabled")===!0&&(q.attr("role","slider").attr("aria-disabled","false"),s&&r.attr("role","slider").attr("aria-disabled","false")),b.bind("keyup.nstSlider",function(a){if(b.data("enabled")){switch(a.which){case 37:case 38:case 39:case 40:if(f===h){var c,d,j,m=k.getSliderWidthPx.call(b);if(0>g-i){for(d=i;m>=d;d++)if(c=l.round_value_according_to_rounding.call(b,k.getSliderValuesAtPositionPx.call(b,d,d)[1]),c!==h){j=d;break}}else for(d=i;d>=0;d--)if(c=l.round_value_according_to_rounding.call(b,k.getSliderValuesAtPositionPx.call(b,d,d)[1]),c!==h){j=d;break}e?k.validateAndMoveGripsToPx.call(b,j,k.getRightGripPositionPx.call(b)):k.validateAndMoveGripsToPx.call(b,k.getLeftGripPositionPx.call(b),j),k.notify_mouse_up_implicit.call(b,e)}}f=void 0,g=void 0,h=void 0,i=void 0}}),b.bind("keydown.nstSlider",function(a){if(b.data("enabled")){var c=function(a,c){var d=k.getLeftGripPositionPx.call(b),j=k.getRightGripPositionPx.call(b);switch("undefined"==typeof f&&(g=e?d:j,f=e?l.get_current_min_value.call(b):l.get_current_max_value.call(b)),c.which){case 37:case 40:e?d--:j--,c.preventDefault();break;case 38:case 39:e?d++:j++,c.preventDefault()}i=e?d:j,k.validateAndMoveGripsToPx.call(b,d,j),h=e?l.get_current_min_value.call(b):l.get_current_max_value.call(b)};s&&b.find(":focus").is(r)?(e=!1,c.call(b,r,a)):(e=!0,c.call(b,q,a))}});var t=k.getLeftGripWidth.call(b),u=s?k.getRightGripWidth.call(b):t;if(b.data("left_grip_width",t),b.data("right_grip_width",u),b.data("value_bar_selector",c.value_bar_selector),!s){var v=o===m||o===j;k.setNakedBarDelta.call(b,v?"stickToSides":"middle",t)}j===m||n===o?l.set_range.call(b,j,m):k.set_position_from_val.call(b,b.data("cur_min"),b.data("cur_max")),k.notify_changed_implicit.call(b,"init"),b.data("beforestart_min",l.get_current_min_value.call(b)),b.data("beforestart_max",l.get_current_max_value.call(b)),b.bind("mousedown.nstSlider",function(a){k.drag_start_func.call(b,a,c,q,r,!1)}),d.bind("touchstart.nstSlider",function(a){k.drag_start_func_touch.call(b,a,c,q,r,!0)}),d.bind("touchend.nstSlider",function(a){k.drag_end_func_touch.call(b,a)}),d.bind("touchmove.nstSlider",function(a){k.drag_move_func_touch.call(b,a)});var w=b.data("histogram");"undefined"!=typeof w&&l.set_step_histogram.call(b,w)})},get_range_min:function(){var a=this;return a.data("range_min")},get_range_max:function(){var a=this;return a.data("range_max")},get_current_min_value:function(){var b,c=a(this),d=l.get_range_min.call(c),e=l.get_range_max.call(c),f=c.data("cur_min");if(b=d>=f?d:l.round_value_according_to_rounding.call(c,f),k.haveLimits.call(c)){if(d>=b)return c.data("lower-limit");if(b>=e)return c.data("upper-limit")}else{if(d>=b)return d;if(b>=e)return e}return b},get_current_max_value:function(){var b,c=a(this),d=l.get_range_min.call(c),e=l.get_range_max.call(c),f=c.data("cur_max");if(b=f>=e?e:l.round_value_according_to_rounding.call(c,f),k.haveLimits.call(c)){if(b>=e)return c.data("upper-limit");if(d>=b)return c.data("lower-limit")}else{if(b>=e)return e;if(d>=b)return d}return b},is_handle_to_left_extreme:function(){var a=this;return k.haveLimits.call(a)?a.data("lower-limit")===l.get_current_min_value.call(a):l.get_range_min.call(a)===l.get_current_min_value.call(a)},is_handle_to_right_extreme:function(){var a=this;return k.haveLimits.call(a)?a.data("upper-limit")===l.get_current_max_value.call(a):l.get_range_max.call(a)===l.get_current_max_value.call(a)},refresh:function(){var a=this,b=a.data("last_step_histogram");"undefined"!=typeof b&&l.set_step_histogram.call(a,b),k.set_position_from_val.call(a,l.get_current_min_value.call(a),l.get_current_max_value.call(a));var c=a.data("highlightedRangeMin");if("number"==typeof c){var d=a.data("highlightedRangeMax");l.highlight_range.call(a,c,d)}return k.notify_changed_implicit.call(a,"refresh"),a},disable:function(){var a=this,b=a.data("settings");return a.data("enabled",!1).find(b.left_grip_selector).attr("aria-disabled","true").end().find(b.right_grip_selector).attr("aria-disabled","true"),a},enable:function(){var a=this,b=a.data("settings");return a.data("enabled",!0).find(b.left_grip_selector).attr("aria-disabled","false").end().find(b.right_grip_selector).attr("aria-disabled","false"),a},is_enabled:function(){var a=this;return a.data("enabled")},set_position:function(a,b){var c=this,d=c.data("cur_min"),e=c.data("cur_max");a>b?k.set_position_from_val.call(c,b,a):k.set_position_from_val.call(c,a,b),k.refresh_grips_style.call(c),k.notify_changed_implicit.call(c,"set_position",d,e),c.data("beforestart_min",a),c.data("beforestart_max",b)},set_step_histogram:function(b){var c=this;c.data("last_step_histogram",b),"undefined"==typeof b&&(a.error("got an undefined histogram in set_step_histogram"),k.unset_step_histogram.call(c));var d=k.getSliderWidthPx.call(c)-c.data("left_grip_width"),e=b.length;if(!(0>=d)){var f,g=0;for(f=0;e>f;f++)g+=b[f];if(0===g)return l.unset_step_histogram.call(c),c;var h=parseFloat(g)/d;for(f=0;e>f;f++)b[f]=b[f]/h;var i=[b[0]];for(f=1;e>f;f++){var j=i[f-1]+b[f];i.push(j)}i.push(d);for(var m=[c.data("range_min")],n=0,o=m[0],p=0;d>=n;){var q=parseInt(i.shift(),10),r=k.inverse_rangemap_0_to_n.call(c,p+1,e+1);p++;var s=q-n,t=r-o;for(f=n;q>f;f++){var u=o+t*(f-n+1)/s;m.push(u),n++,o=u}if(n===d)break}m[m.length-1]=c.data("range_max");var v=function(a){return m[parseInt(a,10)]},w=function(a){var b=k.binarySearch.call(c,m,a,function(a,b){return a[b]},k.binarySearchValueToPxCompareFunc);return m[b]===a?b:Math.abs(m[b-1]-a)<Math.abs(m[b]-a)?b-1:b};return c.data("pixel_to_value_mapping",v),c.data("value_to_pixel_mapping",w),c}},unset_step_histogram:function(){var a=this;return a.removeData("pixel_to_value_mapping"),a.removeData("value_to_pixel_mapping"),a.removeData("last_step_histogram"),a},set_range:function(a,b){var c=this,d=l.get_current_min_value.call(c),e=l.get_current_max_value.call(c);return c.data("range_min",a),c.data("range_max",b),k.set_position_from_val.call(c,d,e),k.notify_changed_implicit.call(c,"set_range",d,e),c},highlight_range:function(b,c){var d=this,e=d.data("settings");"undefined"==typeof e.highlight&&a.error('you cannot call highlight_range if you haven\' specified the "highlight" parameter in construction!'),b||(b=0),c||(c=0);var f=l.value_to_px.call(d,b),g=l.value_to_px.call(d,c),h=g-f+d.data("left_grip_width"),i=d.find(e.highlight.panel_selector);return i.css("left",f+"px"),i.css("width",h+"px"),d.data("highlightedRangeMin",b),d.data("highlightedRangeMax",c),k.refresh_grips_style.call(d),d},set_rounding:function(b){var c=this;"string"==typeof b&&b.indexOf("{")>-1&&(b=a.parseJSON(b)),c.data("rounding",b);var d=[];if("object"==typeof b){var e;for(e in b)if(b.hasOwnProperty(e)){var f=b[e];d.push({range:f,value:e})}d.sort(function(a,b){return a.range-b.range}),c.data("rounding_ranges",d)}else c.removeData("rounding_ranges");return c},get_rounding:function(){var a=this;return a.data("rounding")},round_value_according_to_rounding:function(b){var c=this,d=k.get_rounding_for_value.call(c,b);if(d>0){var e=b/d,f=parseInt(e,10),g=e-f;g>.5&&f++;var h=f*d;return h}return a.error("rounding must be > 0, got "+d+" instead"),b},value_to_px:function(a){var b=this,c=b.data("value_to_pixel_mapping");if("undefined"!=typeof c)return c(a);var d=k.getSliderWidthPx.call(b)-b.data("left_grip_width");return k.rangemap_0_to_n.call(b,a,d)}},m="nstSlider";a.fn[m]=function(b){if(l[b]){if(this.data("initialized")===!0)return l[b].apply(this,Array.prototype.slice.call(arguments,1));throw new Error("method "+b+" called on an uninitialized instance of "+m)}return"object"!=typeof b&&b?void a.error("Cannot call method "+b):(this.data("initialized",!0),l.init.apply(this,arguments))}}(jQuery);
};
this.lang = {
data : {},
load : function (langs)
{
_this.lang.data = langs;
},
get : function ()
{
if (! arguments.length) return '';
if ( _this.lang.data.hasOwnProperty(arguments[0]) )
{
if (arguments.length==1)
{
return _this.lang.data[ arguments[0] ];
} else {
var str = _this.lang.data[ arguments[0] ];
for (var i = 1; i <= arguments.length; i++) {
str = str.replace(/(\%s)/, arguments[i]);
}
return str;
}
}
return arguments[0];
}
};
// load language
if(typeof langs!='undefined') _this.lang.load(langs);
this.helper = {
url : function(params){
params['t'] = new Date().getTime();
return _this.config.request
+ (_this.config.request.indexOf('?')==-1?'?':'&')
+ $.param (params);
},
redirect : function(url){
var url = decodeURIComponent(url);
window.location.href = url;
},
report : function(_el, type){
let id = _el.attr('data-id')*1,
r = {id:id, type:type};
if(_el.hasClass('loading')) return false;
if(_el.hasClass('active'))
{
// remove
let dig = new _this.dialog({
caption : _this.lang.get("report"),
content : _this.lang.get("ignore_report"),
submitLabel : _this.lang.get("ignore"),
submitfn : function(dig)
{
dig.el.find('.jreview-dg-content').empty().append('<span>'+_this.lang.get("please_wait")+'</span>');
_el.addClass('loading');
dig.overlay();
$.post(_this.helper.url({view:'others', task:'report_ignore'}), r, function(d){
_el.removeClass('loading');
dig.unOverlay();
if(d.status==200)
{
_el.removeClass('active');
dig.off();
} else {
dig.el.find('.jreview-dg-content').empty().append(d.error);
dig.el.find('.jreview-dg-submit').remove();
}
}, 'json');
}
});
} else {
// post
let c='<div class="jreview-report-box">';
c+='<label>'+_this.lang.get('report_reason')+'</label><textarea></textarea>';
if(_this.config.member==0)
{
// guest, request name & email
c+='<label>'+_this.lang.get('your_name')+'</label>';
c+='<input type="text" name="guest_name" value="'+_this.helper.cache.name+'" />';
if(_this.config.report_email)
{
c+='<label>'+_this.lang.get('your_email')+'</label>';
c+='<input type="email" name="guest_email" value="'+_this.helper.cache.email+'" />';
}
}
c+='</div>';
let dig = new _this.dialog({
caption : _this.lang.get("report"),
content : c,
submitLabel : _this.lang.get("report"),
submitfn : function(dig)
{
var msg = dig.el.find('textarea').val();
if(/^\s*$/.test(msg))
{
dig.setError(_this.lang.get('report_empty'));
dig.el.find('textarea').focus();
return;
}
if(_this.config.member==0)
{
r.name = dig.el.find('input[name="guest_name"]').val();
if(/^\s*$/.test(r.name))
{
dig.el.find ('input[name="guest_name"]').focus();
return;
}
if(_this.config.report_email)
{
r.email = dig.el.find('input[name="guest_email"]').val();
if(/^\s*$/.test(r.email))
{
dig.el.find ('input[name="guest_email"]').focus();
return;
}
}
// set
_this.helper.cache.set(r.name, r.email);
}
dig.el.find('.jreview-dg-content').find ('.jreview-report-box').hide();
dig.el.find('.jreview-dg-content').append('<span class="_loading">'+_this.lang.get('please_wait')+'</span>');
r.msg = msg;
_el.addClass('loading');
dig.overlay();
$.post(_this.helper.url({view:'others',task:'report_add'}), r, function(d){
dig.unOverlay();
_el.removeClass('loading');
if(d.status==200)
{
_el.addClass('active');
dig.el.find('.jreview-dg-content').empty().append( '<span>'+_this.lang.get('thanks_report')+'</span>' );
dig.el.find ('.jreview-dg-submit').remove();
window.setTimeout(function(){
dig.off();
}, 3000);
} else {
dig.el.find('.jreview-dg-content').find('.jreview-report-box').show();
dig.el.find('.jreview-dg-content').find('._loading').remove();
dig.setError(d.error);
}
}, 'json');
}
});
}
},
login : function(msg, callback)
{
if(_this.config.login.type=='page'||_this.config.login.type=='url')
{
window.location.href=_this.config.login.url;
return;
}
var loginHtml = '<div class="">';
loginHtml+= '<label>'+_this.lang.get('username')+'</label>';
loginHtml+= '<input type="text" data-name="username" />';
loginHtml+= '</div>';
loginHtml+= '<div class="">';
loginHtml+= '<label>'+_this.lang.get('password')+'</label>';
loginHtml+= '<input type="password" data-name="password" />';
loginHtml+= '</div>';
// social login
if(_this.config.login.hasOwnProperty('socialid'))
{
loginHtml+= '<div class="_socialogin_method" style="font-size:1.2em">'+_this.lang.get("use_social_id")+'</div>';
if (_this.config.login.socialid.fb==1)
{
loginHtml+= '<button type="button" class="_socialBtn" data-action="fb" style="background:#3b5998"><i class="fa fa-facebook" aria-hidden="true"></i> Facebook</button>';
}
if (_this.config.login.socialid.gg==1)
{
loginHtml+= '<button type="button" class="_socialBtn" data-action="gg" style="background:#d95032"><i class="fa fa-google" aria-hidden="true"></i> Google</button>';
}
if (_this.config.login.socialid.tw==1)
{
loginHtml+= '<button type="button" class="_socialBtn" data-action="tw" style="background:#3a92c8"><i class="fa fa-twitter" aria-hidden="true"></i> Twitter</button>';
}
if (_this.config.login.socialid.vk==1)
{
loginHtml+= '<button type="button" class="_socialBtn" data-action="vk" style="background:#5181b9"><i class="fa fa-vk" aria-hidden="true"></i> VKontakte</button>';
}
}
loginHtml+='<ul class="list-unstyled">';
loginHtml+='<li><a href="'+_this.config.login.reset+'" target="_blank">'+_this.lang.get('login_reset')+'</a></li>';
if(_this.config.login.hasOwnProperty('join'))
{
loginHtml+='<li><a href="'+_this.config.login.join+'" target="_blank">'+_this.lang.get('register')+'</a></li>';
}
loginHtml+='</ul>';
var loginDialog = new _this.dialog({
caption: _this.lang.get('login_dialog'),
content : loginHtml,
loadfn: function(dialog)
{
dialog.el.find('input:eq(0)').focus();
dialog.el.find('._socialBtn').click(function(){
var type = $(this).attr('data-action'),
url = '',
name = '';
switch (type)
{
case 'fb':
url = _this.helper.url({
view: 'profile',
task: 'oauth',
type:'fb',
popup:1
});
name = "jlex_popup_fb";
break;
case 'gg':
url = _this.helper.url({
view: 'profile',
task: 'oauth',
type:'google',
popup:1
});
name = "jlex_popup_google";
break;
case 'tw':
url = _this.helper.url({
view: 'profile',
task: 'oauth',
type:'twitter',
popup:1
});
name = "jlex_popup_twitter";
break;
case 'vk':
url = _this.helper.url({
view: 'profile',
task: 'oauth',
type:'vk',
popup:1
});
name = "jlex_popup_vk";
break;
}
window.open (url, name, "width=500, height=350");
});
},
submitLabel: _this.lang.get('login'),
submitfn: function(dialog)
{
var _nameEl = dialog.el.find('[data-name=username]'),
_pwEl = dialog.el.find('[data-name=password]'),
data = {};
if (/^\s*$/.test(_nameEl.val()))
{
_nameEl.focus();
return false;
}
if (/^\s*$/.test(_pwEl.val()))
{
_pwEl.focus();
return false;
}
data.username = _nameEl.val();
data.password = _pwEl.val();
dialog.overlay();
$.post(_this.helper.url({view:'profile', task:'login'}), data, function(d){
dialog.unOverlay();
if (d.status==200)
{
if(typeof callback=='function')
{
callback();
} else {
window.location.reload();
}
dialog.off();
} else {
dialog.setError(d.error);
}
}, 'json');
}
});
if (msg!=null && /^\s*$/.test(msg))
{
loginDialog.setError(msg);
}
},
logout: function(){
$.post(_this.helper.url({view:'profile', task:'logout'}), function(d){
window.location.reload();
}, 'json');
},
cookie : {
set : function(cname, cvalue, exdays)
{
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires="+ d.toUTCString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
},
get : function(cname)
{
var name = cname + "=";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(';');
for(var i = 0; i <ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return null;
},
earse : function(cname)
{
document.cookie = cname + "=0; expires=Thu, 18 Dec 2013 12:00:00 UTC";
}
},
listenEvent : function(name,data){
if (typeof CustomEvent == 'undefined') return false;
data = data||{};
var evt = new CustomEvent(name, {detail:data});
window.dispatchEvent(evt);
},
cache : {
name : "",
email : "",
set : function(name, email)
{
_this.helper.cookie.set('jr_guest_name',name,30);
_this.helper.cookie.set('jr_guest_email',email,30);
},
load: function()
{
var guest_name = _this.helper.cookie.get('jr_guest_name'),
guest_email = _this.helper.cookie.get('jr_guest_email');
_this.helper.cache.name = guest_name!=null?guest_name:'';
_this.helper.cache.email = guest_email!=null?guest_email:'';
}
},
overlay: function(isOn){
isOn=typeof isOn=="undefined"?true:isOn;
if(isOn && !$('.jreview-overlay .loading').length)
{
$('.jreview-overlay').remove();
$('body')
.addClass('disableScroll')
.append('<div class="jreview-overlay center"><div class="loading"><i class="fa fa-circle-notch fa-circle-o-notch fa-spin"></i></div></div>');
}
if(!isOn)
{
$('.jreview-overlay').remove();
$('body').removeClass('disableScroll');
}
},
filters: {}
};
this.emoji = {
pos: null,
input: null,
init: function(){
if(typeof EmojiPanel=="undefined") return;
$('body').append('<div id="jr-emoji-box"><div id="jr-emoji"></div><button id="jr-emoji-btn"><img src="'+_this.config.base+'/media/jlexreview/assets/emoji/simple.png"></button></div>');
ej = new EmojiPanel({
container: '#jr-emoji',
trigger: '.jr-uk',
json_url: _this.config.base+'/media/jlexreview/assets/emoji/emojis.json',
pack_url: _this.config.base+'/media/jlexreview/assets/emoji/twemoji.svg'
});
ej.addListener('select', function(emoji){
if(_this.emoji.input==null) return;
//_this.emoji.input.focus();
var field = _this.emoji.input[0];
//IE support
if(document.selection){
document.selection.createRange().text = emoji.char;
} else if(field.selectionStart || field.selectionStart=='0') {
var startPos = field.selectionStart,
endPos = field.selectionEnd;
field.value = field.value.substring(0, startPos)
+ emoji.char
+ field.value.substring(endPos, field.value.length);
field.focus();
field.setSelectionRange(startPos+emoji.char.length, startPos+emoji.char.length);
} else {
field.value+=emoji.char;
}
});
$('#jr-emoji-btn').click(function(){
$('#jr-emoji').toggleClass('active');
});
},
build: function($el){
if(_this.emoji.input!=null && _this.emoji.input.is($el))
{
return;
}
var $d=$('#jr-emoji-btn');
_this.emoji.input=$el;
if(_this.emoji.pos!=null)
clearInterval(_this.emoji.pos);
$('#jr-emoji').removeClass('active');
_this.emoji.pos=setInterval(function(){
if(!$el.is(':visible')){
$d.hide();
$('#jr-emoji').removeClass('active');
return;
}
var bTop=$el.offset().top+$el.outerHeight(false)+5,
bLeft=$el.offset().left+$el.outerWidth(false)-$d.outerWidth(false);
$d.show();
$('#jr-emoji-box').css({top:bTop+'px', left:bLeft+'px'});
}, 10);
}
};
this.dialog = function (options)
{
var _dialog = this,
settings =
{
caption : _this.lang.get("dialog"),
submitLabel : _this.lang.get("submit"),
cancelLabel : _this.lang.get("cancel"),
content : '',
loadfn : null,
submitfn : null,
cancelfn : null
};
if (typeof options=='object') $.extend (settings, options);
_dialog.init = function ()
{
var html = '<div class="jreview-overlay">';
html+= '<div class="jreview-dialog">';
html+= '<div class="jreview-dg-caption">'+settings.caption+'</div>';
html+= '<div class="jreview-dg-error"></div>';
html+= '<div class="jreview-dg-content">'+settings.content+'</div>';
html+= '<div class="jreview-dg-footer">';
if (settings.submitLabel!==false)
{
html+= '<button class="jreview-dg-submit">'+settings.submitLabel+'</button>';
}
html+= '<button class="jreview-dg-cancel">'+settings.cancelLabel+'</button>';
html+= '</div>';
html+= '</div>';
html+= '</div>';
_dialog.el = $(html);
_dialog.el.appendTo ('body');
// events
if (typeof settings.loadfn=='function')
settings.loadfn (_dialog);
_dialog.el.on ('click', '.jreview-dg-submit', function() {
if (typeof settings.submitfn=='function')
settings.submitfn (_dialog);
});
_dialog.el.on ('click', '.jreview-dg-cancel', function() {
if (typeof settings.cancelfn=='function')
{
var rn = settings.cancelfn (_dialog);
if (rn!==false)
{
_dialog.off ();
}
} else {
_dialog.off ();
}
});
var resizeEvent = function ()
{
if (! $('.jreview-dialog').length)
{
return false;
}
var widthOfScreen = $(window).width (),
heightOfScreen = $(window).width ();
if (widthOfScreen <= 650)
{
_dialog.el.find ('.jreview-dialog')
.removeClass ('wide touch')
.removeAttr ('style')
.addClass ('touch');
$('html,body').addClass ('disableScroll');
} else {
_dialog.el.find ('.jreview-dialog')
.removeClass ('wide touch')
.removeAttr ('style')
.addClass ('wide');
var widthOfdialog = widthOfScreen > 650 ? 600 : (widthOfScreen-40),
left = (widthOfScreen - widthOfdialog) / 2,
maxHeight = heightOfScreen - 50 - 30; // 30 is top possition.
_dialog.el.find ('.jreview-dialog').css ({
width: widthOfdialog + 'px',
left : left + 'px',
'max-height' : maxHeight + 'px'
});
$('html,body').removeClass ('disableScroll');
}
}
resizeEvent ();
$(window).resize (function(){
resizeEvent ();
});
};
_dialog.off = function ()
{
_dialog.el.off ();
_dialog.el.fadeOut ('fast', function (){
$(this).remove ();
$('html,body').removeClass ('disableScroll');
});
};
_dialog.setError = function (msg)
{
_dialog.el.find ('.jreview-dg-error')
.addClass('active').html (msg);
};
_dialog.clearError = function ()
{
_dialog.el.find ('.jreview-dg-error')
.removeClass('active').html ('');
};
_dialog.overlay = function ()
{
if (!_dialog.el.find('.jreview-dg-overlay').length)
{
_dialog.el.find('.jreview-dg-content').append ('<div class="jreview-dg-overlay"></div>');
_dialog.el.find('button').attr ('disabled', 'disabled');
}
};
_dialog.unOverlay = function ()
{
_dialog.el.find('.jreview-dg-overlay').remove ();
_dialog.el.find('button').removeAttr ('disabled');
};
_dialog.init();
};
this.formErrors = function(errors)
{
_this.helper.overlay(false);
if(!errors.length) return;
var _el = $("#jreview-form ._errorMsg:eq(0)");
_el.html(errors.join('<br/>')).addClass('active');
$("html,body").animate({scrollTop:_el.offset().top-20}, 500);
// plugin events
_this.helper.listenEvent('jreview.rating.error',{$:$, jreview:_this});
};
this.formEvents = function(dept)
{
var _form = $("#jreview-form");
if(typeof dept!='undefined' && dept==true)
{
$('.jlexreview').on("click", "._user_login", function(e){
_this.helper.login();
});
}
/* basic events */
_form.find(".checkbox input[type=checkbox]").change(function(){
var _el = $(this).parent('label');
if ($(this).is(":checked"))
{
_el.addClass("checked");
} else {
_el.removeClass("checked");
}
});
_form.find(".checkbox input[type=checkbox]").trigger("change");
// extra css for special rating flag
if (_this.config.hasOwnProperty('rtext') && typeof _this.config.rtext=="object")
{
// extra css for special rating flag
var _css = [];
$.each(_this.config.rtext, function(k,v){
var _prefix = 'mod_'+v.min.toString()+v.max.toString();
_css.push('#jreview-form ._ratingFlag[data-id="'+_prefix+'"]{background:#'+v.color+'}');
_css.push('#jreview-form ._ratingFlag[data-id="'+_prefix+'"]:before{border-color:transparent #'+v.color+' transparent transparent}');
});
$('head').append('<style>'+_css.join('\n')+'</style>');
}
// term
var termContent = null;
_form.find('._get_term').click(function(e){
e.preventDefault();
new _this.dialog({
caption : _this.lang.get("tos"),
content : _this.lang.get("loading"),
loadfn : function(dialog)
{
if (termContent!=null)
{
dialog.el.find('.jreview-dg-content').empty().append(termContent);
} else {
$.get(_this.helper.url({view:"others", task:"term"}), function(d){
termContent = d.data;
dialog.el.find('.jreview-dg-content').empty().append(d.data);
}, "json");
}
},
submitLabel:false,
cancelLabel:"Ok"
});
});
// create star/slider rating
var create_rating = function(_el)
{
var def = _el.attr("data-default")*1,
half = _el.attr("data-half")*1==1?true:false,
style = _el.attr("data-style"),
max = _el.attr("data-max"),
require = _el.attr("data-require")*1==1?true:false,
val = _el.attr("value"),
_ratingFlag = function($p, value, max)
{
if(_this.config.hasOwnProperty('rtext') && typeof _this.config.rtext=="object")
{
var _percent = parseInt(value*100/max);
$.each(_this.config.rtext, function(k,v){
if (_percent>=v.min && _percent<=v.max)
{
var _prefix = 'mod_'+v.min.toString()+v.max.toString();
$p.find("._ratingFlag").attr('data-id', _prefix);
$p.find("._ratingFlag").text(v.title);
return false;
}
});
} else {
//$p.find("._ratingFlag").text(isNaN(value)?0:value);
$p.find("._ratingFlag").hide();
}
};
if (style=="slider")
{
var _slider = '<div><div class="nstSlider" data-range_min="1" data-range_max="'+max+'" data-cur_min="'+(val<=0?def:val)+'">';
_slider+= '<div class="leftGrip"></div>';
_slider+= '</div>';
_slider+= '<div class="ratingPoint"><span><span class="_point">'+(val<=0?def:val)+'</span>/'+max+'</span>';
_slider+= '<span class="_ratingFlag"></span>';
_slider+= '</div>';
if (!require)
{
_slider+= '<div class="_overlay"></div>';
_slider+= '<a class="skip_rating">'+_this.lang.get('skip')+'</a>';
}
_slider+= '</div>';
_slider = $(_slider);
_slider.insertBefore(_el);
_slider.find('.nstSlider').nstSlider({
"left_grip_selector": ".leftGrip",
"value_changed_callback": function(cause, leftValue, rightValue) {
_slider.find('._point').text(leftValue);
_el.val(leftValue);
_ratingFlag(_slider, leftValue, max);
}
});
_slider.find('.skip_rating').click(function(){
_slider.toggleClass('disabled');
if ($(this).hasClass('active'))
{
// get old value
var oldval = typeof _el.attr('data-old')=='undefined' ? def : _el.attr('data-old');
_el.val(oldval);
} else {
// set value is 0
_el.attr('data-old', _el.val());
_el.val("-1");
}
$(this).toggleClass('active');
});
if (val=="-1")
{
_slider.find('.skip_rating').trigger("click");
}
} else {
var _elName = _el.attr('name'),
_starRating = '<div class="_starRating">',
_val = val<=0?def:val,
keysafe = _elName.replace(/\[|\]/g,'_');
if (!require)
{
_starRating+= '<div class="_overlay"></div>';
_starRating+= '<a class="skip_rating" style="float:right">'+_this.lang.get('skip')+'</a>';
}
_starRating+= '<span class="_ratingFlag"></span>';
for (i=max;i>=1;i--)
{
_starRating+= '<input type="radio" id="jrating'+i.toString()+keysafe+'" name="'+_elName+'" value="'+i+'.0" /><label for="jrating'+i.toString()+keysafe+'" class="fa" data-value="'+i+'"></label>';
if (half)
{
_starRating+= '<input type="radio" id="jrating'+(i-1).toString()+'_5'+keysafe+'" name="'+_elName+'" value="'+(i-0.5)+'" /><label for="jrating'+(i-1).toString()+'_5'+keysafe+'" class="half fa" data-value="'+(i-0.5)+'"></label>';
}
}
_starRating+= '</div>';
_starRating = $(_starRating);
_starRating.find('label').mouseenter(function(){
_ratingFlag(_starRating, $(this).attr('data-value')*1, max);
});
_starRating.mouseleave(function() {
_ratingFlag(_starRating, _starRating.find('input:checked').val()*1, max);
});
_val = parseFloat(_val).toFixed(1);
_starRating.find('input[value="'+_val+'"]').prop("checked", true);
_ratingFlag(_starRating, _val, max);
_starRating.find('.skip_rating').click(function(){
_starRating.toggleClass('disabled');
if ($(this).hasClass('active'))
{
// get old value
_starRating.find('input[type="radio"]').removeAttr("disabled");
_starRating.find('input[type="hidden"]').remove();
} else {
// set value is -1
_starRating.find('input[type="radio"]').attr("disabled", "disabled");
_starRating.append('<input type="hidden" name="'+_elName+'" value="-1" />');
}
$(this).toggleClass('active');
});
if (val=="-1")
{
_starRating.find('.skip_rating').trigger("click");
}
_el.replaceWith(_starRating);
}
};
if (_form.is(":visible"))
{
_form.find("._ratingStar").each(function(){
create_rating( $(this) );
});
} else {
var _wait = window.setInterval(function(){
if (_form.is(":visible"))
{
window.clearInterval(_wait);
_form.find("._ratingStar").each(function(){
create_rating( $(this) );
});
}
},100);
}
// files/attachment
var urlObject = window.webkitURL || window.URL,
htmlMedia = function(info, status) {
var _el = $("#jreview-media-layout").clone().removeAttr("id"),
_formatSize = function(size)
{
if (size>1000*1000*1000)
{
size = (size/(1000*1000*1000)).toFixed(2) + ' Gb';
} else if (size>1000*1000) {
size = (size/(1000*1000)).toFixed(2) + ' Mb';
} else {
size = (size/1000).toFixed(2) + ' Kb';
}
return size;
};
_el.addClass('state-'+status); /*state-uploading*/
_el.find('span[data-name=name]').text(info.name);
if (info.desc && !/^\s*$/.test(info.desc))
{
_el.find('span[data-name=desc]').text(info.desc);
}
_el.find('input[data-name=name]').val(info.name)
_el.find('textarea[data-name=desc]').val(info.desc);
_el.find('span[data-name=size]').text(_formatSize(info.size));
_el.find('span[data-name=type]').text(info.type);
if (info.hasOwnProperty('id'))
{
_el.find('._media_id').val(info.id);
}
if (info.preview!=null && info.preview!="")
{
_el.find('[data-name=preview]').append('<img src="'+info.preview+'" />');
} else {
_el.find('[data-name=preview]').append(_this.lang.get("no_preview"));
}
// events
_el.find('._remove').click(function(){
_el.fadeOut(function(){
_el.remove();
})
});
_el.find('._edit').click(function(){
var id = _el.find('._media_id').val();
_el.removeClass('state-complete')
.addClass('state-edit');
$.get(_this.helper.url ({view:'media', task:'load_item', id:id}), function(r){
if (r.status==400)
{
alert(r.error);
} else {
_el.find('input[data-name=name]').val(r.data.name);
_el.find('textarea[data-name=desc]').val(r.data.description);
}
}, "json");
});
_el.find('._save').click(function(){
var data = {
name : _el.find('input[data-name=name]').val(),
description : _el.find('textarea[data-name=desc]').val(),
id : _el.find('._media_id').val()
};
if (/^\s*$/.test(data.name))
{
_el.find('input[data-name=name]').focus();
return false;
}
_el.find('input,textarea').attr('disabled','disabled');
$.post(_this.helper.url ({view:'media', task:'update'}), data, function(r){
_el.find('input,textarea').removeAttr('disabled','disabled');
if (r.status==400)
{
alert(r.error);
} else {
_el.find('span[data-name=name]').text(data.name);
_el.find('span[data-name=desc]').html(data.description.replace(/(?:\r\n|\r|\n)/g, '<br/>'));
_el.removeClass('state-edit')
.addClass('state-complete');
}
}, "json");
});
_el.find('._ignore').click(function(){
_el.removeClass('state-edit')
.addClass('state-complete');
});
return _el;
};
_form.find("._attachEvent").click(function (){
var _elMedias = [],
html = '';
html+= '<div class="re-alert re-info" style="font-size:1.1em">';
html+= '<ul class="jreview-list-unstyled">';
html+= '<li>'+_this.lang.get("file_type_allow")+': '+_this.config.attachment.exts+'</li>';
html+= '<li>'+_this.lang.get("max_file_size")+': '+_this.config.attachment.size+' Mb</li>';
html+= '<li>'+_this.lang.get("max_file_upload")+': '+_this.config.attachment.max+'</li>';
html+= '<ul>';
html+= '</div>';
html+= '<div style="text-align:center;margin-bottom:7px">';
html+= '<button type="button" class="_selectFile">'+_this.lang.get("select_your_file")+'</button>';
html+= '</div>';
var dialogUploader = new _this.dialog (
{
caption : _this.lang.get("attachment"),
content : html,
submitLabel : _this.lang.get("add"),
cancelfn : function (dialog)
{
},
loadfn : function (dialog)
{
var _elFile = $('<input type="file" multiple="multiple" />');
_elFile.change(function(evt){
if (evt.target.files.length<1) return false;
$.each (evt.target.files, function(k, file) {
if ( typeof FormData=='undefined')
{
// not support HTML 5
alert ("This feature couldn't run in your browser. Please update your browser to latest version.");
}
var data = new FormData(),
_elMedia = htmlMedia ({
name : file.name,
desc : '',
size : file.size,
type : file.type,
preview : $.inArray(file.type, ["image/gif", "image/jpeg", "image/png"])>-1 ? urlObject.createObjectURL(file) : null
}, 'uploading');
_elMedia.appendTo( dialog.el.find('.jreview-dg-content') );
data.append('file', file);
window.setTimeout (function(){
var _elIndex = 0,
xhr = $.ajax({
url: _this.helper.url ({view:'media', task:'upload'}),
data: data,
processData: false,
contentType: false,
dataType: 'json',
xhr: function() {
var xhrobj = $.ajaxSettings.xhr();
if (xhrobj.upload) {
//obj.addClass('loading');
xhrobj.upload.addEventListener('progress', function(event) {
var percent = 0;
var position = event.loaded || event.position;
var total = event.total;
if (event.lengthComputable) {
percent = Math.ceil(position / total * 100);
}
//Set progress
_elMedia.find('._media_bar ._filled').css('width',percent+'%');
_elMedia.find('._percent span').text(percent);
}, false);
}
return xhrobj;
},
type: 'POST',
success: function(d){
//obj.removeClass('loading');
if (d.status==200) {
_elMedia.removeClass('state-uploading').addClass ('state-complete');
_elMedia.find ('._media_id').val (d.id);
_elMedias.push(_elMedia);
_elIndex = _elMedias.length-1;
_elMedia.find('._remove').click(function(){
_elMedias.splice(_elIndex,1);
});
} else {
_elMedia.removeClass('state-uploading').addClass ('state-error');
_elMedia.find ('._errorMsg').text (d.error);
}
},
error: function(xhr, ajaxOptions, thrownError){
_elMedia.removeClass('state-uploading').addClass ('state-error');
_elMedia.find ('._errorMsg').text ("JSON couldn't load.");
}
});
_elMedia.on ('click','._cancel', function(){
if (typeof xhr!='undefined') xhr.abort();
_elMedia.fadeOut (function(){
$(this).remove ();
});
});
}, k*500);
});
});
dialog.el.find('button._selectFile').click(function(){
_elFile.trigger("click");
});
window.setInterval(function(){
if (dialog.el.find('.state-complete').length<1 || dialog.el.find('.state-uploading').length>0)
{
dialog.el.find('.jreview-dg-submit').attr('disabled', 'disabled');
} else {
dialog.el.find('.jreview-dg-submit').removeAttr('disabled');
}
},500);
},
submitfn: function(dialog)
{
if (!_elMedias.length)
{
return null;
}
var numberMedia = _elMedias.length + _form.find(".jreview-media-success .jreview-media-item").length;
if (numberMedia > _this.config.attachment.max*1)
{
dialog.setError(_this.lang.get("max_file_upload_desc", _this.config.attachment.max));
return false;
}
$.each(_elMedias, function(k,_el){
_el.appendTo( _form.find(".jreview-media-success") );
});
dialog.off();
}
});
});
// file/attachment of existing review
if (typeof ratingData!="undefined" && ratingData.hasOwnProperty("media"))
{
$.each(ratingData.media, function(k,v){
v.desc = v.description;
var _el = htmlMedia(v, "complete");
_el.appendTo( _form.find(".jreview-media-success") );
});
}
// map location
_this.mapData =
{
lat: null,
lng: null,
address : null,
name : null,
icon : ""
};
var mapDataTmp = null,
locLabelOg = _form.find("._attachLoc").text(),
createMap = function()
{
if (!_this.config.location)
{
alert('You must enter Google Map API to run this featured');
return;
}
var dialogMap = new _this.dialog (
{
caption : _this.lang.get("embed_location"),
content : '<div class="mapContent">'+_this.lang.get("please_wait")+'</div>',
submitLabel : _this.lang.get("add"),
submitfn : function (dialog)
{
if (mapDataTmp!=null)
{
_this.mapData = mapDataTmp;
_form.find("._attachLoc").text(_this.mapData.name);
}
dialog.off ();
},
loadfn : function (dialog)
{
if (mapDataTmp==null)
{
mapDataTmp = _this.mapData;
}
window.setTimeout (function()
{
var map = new google.maps.Map(dialog.el.find(".mapContent")[0],
{
center: {lat: -33.8688, lng: 151.2195},
zoom: 13
}),
html = '<div class="pac-box"><input type="text" class="pac-input" /></div>';
html+= '<div class="infowindow-content">';
html+= '<img src="" width="16" height="16" class="_icon">';
html+= '<span class="_name" class="title"></span><br>';
html+= '<span class="_address"></span></div>';
dialog.el.find('.jreview-dg-content').prepend(html);
var input = dialog.el.find('input.pac-input'),
pac_box = dialog.el.find('.pac-box')[0];
map.controls[google.maps.ControlPosition.TOP_RIGHT].push(pac_box);
var autocomplete = new google.maps.places.Autocomplete(input[0]);
autocomplete.bindTo('bounds', map);
var infowindow = new google.maps.InfoWindow(),
infowindowContent = dialog.el.find('.infowindow-content');
infowindow.setContent(infowindowContent[0]);
var marker = new google.maps.Marker({
map: map,
anchorPoint: new google.maps.Point(0, -29)
});
// Bind map if have values
if (_this.mapData.lng!=null)
{
var marker_loc = new google.maps.LatLng(_this.mapData.lat, _this.mapData.lng);
marker.setPosition(marker_loc);
marker.setVisible(true);
input.val (_this.mapData.name);
infowindowContent.find('._name').text(_this.mapData.name);
infowindowContent.find('._address').text(_this.mapData.address);
infowindowContent.find('._icon').attr("src", _this.mapData.icon);
infowindow.open(map, marker);
}
autocomplete.addListener('place_changed', function() {
infowindow.close();
marker.setVisible(false);
var place = autocomplete.getPlace();
if (!place.geometry)
{
window.alert(_this.lang.get("map_not_found") + ": '" + place.name + "'");
return;
}
// If the place has a geometry, then present it on a map.
if (place.geometry.viewport)
{
map.fitBounds(place.geometry.viewport);
} else {
map.setCenter(place.geometry.location);
map.setZoom(17); // Why 17? Because it looks good.
}
marker.setPosition(place.geometry.location);
marker.setVisible(true);
var address = '';
if (place.address_components)
{
address = [
(place.address_components[0] && place.address_components[0].short_name || ''),
(place.address_components[1] && place.address_components[1].short_name || ''),
(place.address_components[2] && place.address_components[2].short_name || '')
].join(' ');
}
infowindowContent.find('._icon').attr("src", place.icon);
infowindowContent.find('._name').text(place.name);
infowindowContent.find('._address').text(address);
infowindow.open(map, marker);
mapDataTmp.lat = marker.getPosition().lat();
mapDataTmp.lng = marker.getPosition().lng();
mapDataTmp.name = place.name;
mapDataTmp.address = address;
mapDataTmp.icon = place.icon;
});
}, 300);
// create empty button
if (_this.mapData.lat!=null)
{
var _emptyBtn = $('<button type="button">'+_this.lang.get("empty")+'</button>');
_emptyBtn.click(function(){
_this.mapData = {
lat : null,
lng : null,
address : "",
name : ""
};
_form.find("._attachLoc").text(locLabelOg);
_emptyBtn.remove();
dialog.off();
});
_emptyBtn.prependTo( dialog.el.find(".jreview-dg-caption") );
}
}
});
};
_form.find("._attachLoc").click(function (){
createMap();
});
// map of existing review
if (typeof ratingData!="undefined" && ratingData.hasOwnProperty("map") && ratingData.map.hasOwnProperty("map_name") && !/^\s*$/.test(ratingData.map.map_name))
{
_form.find("._attachLoc").text( ratingData.map.map_name );
_this.mapData =
{
lat: ratingData.map.map_lat,
lng: ratingData.map.map_lng,
address : ratingData.map.map_address,
name : ratingData.map.map_name,
icon : ratingData.map.map_icon
};
}
// check voting feature
(function(){
var requirelen = _form.find('.jreview-fields').find('.field-required').filter('[data-type=text],[data-type=textarea],[data-type=editor]').length;
if (requirelen>0 || _form.find('#jform_title.required').length>0) return;
var _el = $('<span class="jreview-voting"><i class="i-jreview-star"></i> '+_this.lang.get("quick")+'</span>');
_el.click(function(){
if (_el.hasClass('active'))
{
_el.removeClass('active');
_form.find('.jreview-fields').find('textarea,input[type=text]').each(function(){
$(this).removeAttr('disabled');
var _p = $(this).parents('.control-group');
_p.removeAttr('style');
_p.find('.controls').removeAttr('style');
});
_form.find('#jform_title').removeAttr('disabled');
_form.find('#jform_title').parents('.control-group').removeAttr('style');
} else {
_el.addClass('active');
_form.find('.jreview-fields').find('textarea,input[type=text]').each(function(){
$(this).attr('disabled','disabled');
var _p = $(this).parents('.control-group');
if (_p.find('.control-label._hasRating').length>0)
{
_p.find('.controls').hide();
} else {
_p.hide();
}
});
// subject
_form.find('#jform_title').attr('disabled','disabled');
_form.find('#jform_title').parents('.control-group').hide();
}
});
_el.prependTo(_form);
})();
// submit
var passX = false;
_form.submit(function(){
var _form = $(this);
// bind map data
if (_this.mapData.lat!=null)
{
$("#jform_params_map_address").val(_this.mapData.address);
$("#jform_params_map_name").val(_this.mapData.name);
$("#jform_params_map_lat").val(_this.mapData.lat);
$("#jform_params_map_lng").val(_this.mapData.lng);
$("#jform_params_map_icon").val(_this.mapData.icon);
} else {
$("jreview-form .map_hidden input").val("");
}
if (passX)
{
passX = false;
return true;
}
_this.helper.overlay();
return true;
});
};
this.reviewsEvents = function()
{
var _o = this,
cookieLife = 1;
this.sort = 'best',
this.box = $('#jlexreview-e'+_this.config.id);
this.events = function()
{
// filter
_o.box.find('#jreview-summary input._filter_input').change(function(){
var _filter = {};
_o.box.find('#jreview-summary input._filter_input:checked').each(function(){
var _name = $(this).attr("data-name");
if (/^[1-9][0-9]*$/.test(_name) || _name=="star")
{
if (!_filter.hasOwnProperty(_name))
{
_filter[_name] = [$(this).val()];
} else {
_filter[_name].push( $(this).val() );
}
} else {
_filter[_name] = $(this).val();
}
});
_this.helper.filters=_filter;
//_this.helper.cookie.set('jreview_filter', JSON.stringify(_filter), cookieLife);
_o.getReviews(1);
});
// filter data
var filterCid = [];
_o.box.find('#jreview-summary input._filter_input').each(function(){
if ($(this).attr("data-name")!="star")
{
filterCid.push({
"name" : $(this).attr("data-name"),
"value": $(this).val()
});
}
});
if(filterCid.length)
{
$.post(_this.helper.url({view:'others',task:'filter_data'}), {id:_this.config.id, cid:JSON.stringify(filterCid)}, function(d){
if (d.length)
{
$.each(d, function(k,v){
var _el = _o.box.find('#jreview-summary label._filter_label[for=_field_'+v.name+'_'+v.value+']');
if (_el.length && v.count>0)
{
_el.append(' <span class="_filterCount">('+v.count+')</span>');
}
});
}
}, 'json');
}
// sort
_o.box.find('._sort').click(function(e){
e.preventDefault();
var _el = $(this),
_sortby = _el.attr("data-col"),
_label = _el.attr("data-label");
if (_el.hasClass('active'))
{
return;
}
_o.box.find('._sort.active').removeClass('active');
if (typeof _el.attr("data-dir")!= "undefined")
{
_sortby+= ' '+_el.attr("data-dir");
_el.attr("data-dir", (_el.attr("data-dir")=='desc'?'asc':'desc'));
}
_el.addClass('active');
if($.inArray(_sortby,['best','popular','desc','asc','modified'])==-1)
_this.helper.cookie.set('jreview_sort', _sortby, cookieLife);
_this.config.sort = _sortby;
_o.getReviews(1);
_o.box.find('.jreview-sort .jreview-dropdown-toggle span').text(_label);
if (_o.box.find('.jreview-sort').hasClass('active'))
{
_o.box.find('.jreview-sort').removeClass('active');
}
});
// search
var qi_old='';
_o.box.find('#jreview-sf').submit(function(e){
e.preventDefault();
var qi=$(this).find('input[type=text]');
//_filter = _this.helper.cookie.get('jreview_filter');
if(/^\s*$/.test(qi.val()) && /^\s*$/.test(qi_old))
{
qi.focus();
return;
}
// assign new value
qi_old = qi.val();
_this.helper.filters.q=qi.val();
/*
if(_filter!=null)
{
_filter = $.parseJSON(_filter);
_filter['q'] = qi.val();
} else {
_filter={q:qi.val()}
}
_this.helper.cookie.set('jreview_filter', JSON.stringify(_filter), cookieLife);
*/
_o.getReviews(1);
});
// language
_o.box.on('click','.jreview-langs a._dx',function(e){
e.preventDefault();
var _el = $(this);
if (_el.hasClass('active'))
{
return;
}
_this.helper.filters.lang=_el.attr("data-lang");
/*
var _filter = _this.helper.cookie.get('jreview_filter');
if (_filter!=null)
{
_filter = $.parseJSON(_filter);
_filter['lang'] = _el.attr("data-lang");
} else {
_filter = {lang:_el.attr("data-lang")}
}
_this.helper.cookie.set('jreview_filter', JSON.stringify(_filter), cookieLife);
*/
_o.getReviews(1);
_o.box.find('.jreview-langs a.active').removeClass('active');
_el.addClass('active');
_o.box.find('.jreview-langs .jreview-dropdown-toggle').text( _el.text() );
_o.box.find('.jreview-langs').removeClass('active');
});
_o.box.on("click", "._user_login", function(e){
_this.helper.login();
});
_o.box.on("click", "._user_logout", function(e){
e.preventDefault();
$(this).text(_this.lang.get("please_wait"));
_this.helper.logout();
});
// alert
var alertCache = null;
alertCheck = function(){
if (_this.config.hasOwnProperty('embed')) return;
$.get(_this.helper.url({view:'profile', task:'notification', unread:1}), function(d){
if (d.total>0)
{
_o.box.find('._count_alert').text(d.total).show();
}
}, 'json');
};
if (_this.config.member==1)
{
alertCheck();
window.setInterval(function(){
alertCheck();
}, 900000);
}
_o.box.find('._user_alert').click(function(){
_o.box.find('._count_alert').hide();
new _this.dialog({
caption : _this.lang.get("notification"),
content : '',
submitLabel: _this.lang.get("mark_all_read"),
submitfn : function(dialog)
{
dialog.overlay();
$.post(_this.helper.url({view:'profile',task:'read'}), {all:1}, function(d){
alertCache = null;
dialog.off();
}, 'json');
},
loadfn : function(dialog)
{
var bind_html = function(d)
{
if (d.total==0)
{
// no alert
dialog.el.find('.jreview-dg-content').empty().append(_this.lang.get("empty_notification"));
return;
}
var html = '',
unread = [];
$.each(d.alerts, function(k,v){
html+= '<a class="alert-item '+(v.unread==1?'_unread':'')+'" href="'+ v.url +'">';
html+= '<span class="_caption">'+v.caption+'</span>';
html+= '<span class="_date">'+v.date_format+'</span>';
html+= '</a>';
if (v.unread==1)
{
unread.push(v.id);
}
});
dialog.el.find('.jreview-dg-content').append(html);
dialog.el.find('._load_more').remove();
if (d.offset*1+d.limit*1<d.total*1)
{
dialog.el.find('.jreview-dg-content').append('<a class="_load_more">'+_this.lang.get("load_more")+'</a>');
dialog.el.find('._load_more').click(function(){
load_alerts( d.offset*1+d.limit*1 );
});
}
if (unread.length>0)
{
$.post(_this.helper.url({view:'profile',task:'read'}), {cid:unread}, function(d){
}, 'json');
alertCache = null;
}
},
load_alerts = function(offset)
{
var request = {view:'profile', task:'notification'},
offset = typeof offset=="number" && offset>0 ? offset:0;
if (offset>0)
{
request['offset'] = offset;
}
$.get(_this.helper.url(request), function(d){
if (offset==0)
{
alertCache = d;
}
bind_html(d);
}, 'json');
};
if (alertCache!=null)
{
bind_html(alertCache);
} else {
load_alerts();
}
}
});
});
// profile
if (_this.config.profile_page==1)
{
_o.box.on('click', '.jreview-pop', function(e){
e.preventDefault();
var uid = $(this).attr('data-uid'),
url = _this.helper.url({view:'profile',id:uid,tmpl:'component'});
if (uid<1) return;
var _profileDialog = new _this.dialog({
caption: _this.lang.get("activities"),
content: '<iframe id="jreview-profile" src="'+url+'"></iframe>',
submitLabel: false
});
});
}
// embed
_o.box.on('click', '.jreview-embed', function(e){
e.preventDefault();
var _key = $(this).attr('data-key'),
_html = '';
_key = _key.split(',');
_html+= '<p style="text-align:center">'+_this.lang.get('embed_guide')+'<br>';
_html+= '<input type="text" id="embed-code" value="" style="display:inline; margin-right:0" onclick="this.focus();this.select()" readonly></p>';
_html+= '<iframe src="about:blank" id="embed-preview" style="border: 2px solid #d1d1d1; margin: 0 auto 20px auto; display: block; width: 100%; max-width: 300px; border-radius: 5px; height: 200px;"></iframe>';
_html+= '<ul class="jreview-list-inline" style="text-align:center">';
_html+= '<li><label><input type="checkbox" data-name="list">'+_this.lang.get('reviews')+'</label></li>';
_html+= '<li><label><input type="checkbox" data-name="sd">'+_this.lang.get('summary')+'</label></li>';
_html+= '<li><label>'+_this.lang.get('width')+' <input type="number" data-name="w" value="250"></label></li>';
_html+= '<li><label>'+_this.lang.get('height')+' <input type="number" data-name="h" value="300"></label></li>';
_html+= '</ul>';
var _embedDialog = new _this.dialog({
caption: _this.lang.get("embed"),
content: _html,
loadfn: function(dialog)
{
var _createUrlEmbed = function(params, w, h){
w = w || 250; if (w<50) w=250;
h = h || 300; if (h<50) h=300;
var f = _this.helper.url(params);
f = window.location.origin + f;
var fenc = '<iframe width="'+w+'" height="'+h+'" src="'+f+'" frameborder="0"></iframe>';
dialog.el.find('#embed-code').val(fenc);
dialog.el.find('#embed-preview').attr('src', f);
};
_createUrlEmbed({view:'embed',obj:_key[0],id:_key[1]});
dialog.el.find('.jreview-dg-content').addClass('embed');
dialog.el.find('input[data-name]').on('click keyup', function(){
var _params = {
view:'embed',
obj:_key[0],
id:_key[1]
};
dialog.el.find('input[type=checkbox]:checked').each(function(){
_params[$(this).attr('data-name')]=1;
});
_createUrlEmbed(_params, dialog.el.find('[data-name=w]').val(), dialog.el.find('[data-name=h]').val());
});
},
submitLabel: false
});
});
// summary - rating flag text
if (_this.config.hasOwnProperty('rtext') && typeof _this.config.rtext == "object" && _o.box.find('.rating-text-label').length)
{
_o.box.find('.rating-text-label').each(function(){
var _el = $(this),
_percent = parseFloat(_el.attr('data-percent'));
$.each(_this.config.rtext, function(k,v){
if (_percent<=parseFloat(v.max) && _percent>=parseFloat(v.min) )
{
_el.text(v.title);
}
});
});
}
// summary - large star
_o.box.find('#jreview-summary .sum-star').each(function(){
var _el = $(this),
_elrating = _el.attr('data-rating')*1,
_elmax = _el.attr('data-max'),
_h='';
for(var i=0; i<_elmax; i++)
{
var _fill = _elrating<i?0:(_elrating-1>=i?100:parseInt((_elrating-i)*100));
_h+='<span class="_star"><span class="fill" style="width:'+_fill+'%"></span><span class="star-sprite"></span></span>';
}
_el.empty().append(_h);
});
var __cronblock = function()
{
var _els = _o.box.find('.reviewBlock').not('.marked');
if(!_els.length) return;
_els.each(function(){
var _el = $(this),
_rating=0;
_max=5;
// star rating
_el.find('.star-rating').each(function(){
var _elc = $(this),
_elmax = _elc.attr('data-max')*1;
_elrating = _elc.attr('data-rating')*1;
if(_elc.hasClass('jovv')){
_rating=_elrating;
_max=_elmax;
if(_elrating==0){
_el.find('.re-rank').remove();
}
}
if(_elrating==0)
{
_elc.remove();
} else {
for(var i=1; i<=_elmax; i++)
{
var hk='<div class="_star';
if (_elrating>=i)
{
hk+= ' fullStar';
} else if (_elrating+0.5==i) {
hk+= ' halfStar';
}
hk+= '"><span class="_star_inner"></span>';
hk+= '<span class="star-sprite"></span>';
hk+= '</div>';
_elc.append(hk);
}
}
});
// rating text
if (_this.config.hasOwnProperty('rtext') && typeof _this.config.rtext=="object")
{
var _percent = parseInt(_rating*100/_max);
$.each(_this.config.rtext, function(k,v){
if(_percent<=v.max && _percent>=v.min)
{
_el.find('.re-rank').css('background', '#'+v.color);
_el.find('.re-rank').text(v.title);
return false;
}
});
_el.find('.re-color').each(function(){
var _elc = $(this),
_elp = _elc.attr('data-percent')*1;
$.each(_this.config.rtext, function(k,v){
if(_elp<=v.max && _elp>=v.min)
{
_el.find('.re-color')
.css('background', '#'+v.color)
.attr('title', v.title);
return false;
}
});
});
}
// render photo box
_el.find('.jreview-images').lightGallery({
selector:'a'
});
// collapse review if too long
if(_this.config.review_collapse==1 && _this.config.hasOwnProperty('collapse_height'))
{
if (_el.find('.re-body').height()>_this.config.collapse_height)
{
_el.addClass('_collapse');
_el.find('._collapse_btn').click(function(){
_el.removeClass('_collapse');
});
}
}
// should hide label when form has only one field
if(_el.find('.re-control-group').length===1) _el.find('.re-control-label').hide();
});
_els.addClass('marked');
};
__cronblock();
window.setInterval(function(){ __cronblock(); }, 500);
};
this.pagination = function(page, total)
{
var _el = _o.box.find('#jreview-pagination'),
_create = function(pageNumber)
{
var _itemPage = 0;
_item = null;
url = _this.config.url+(_this.config.url.indexOf('?')==-1?'?':'&')+'jpage=';
if (pageNumber==0)
{
if (page==1)
{
//_item = $('<li><a>Previous</a></li>');
} else {
_itemPage = page-1;
_item = $('<li><a href="'+url+(page-1)+'">'+_this.lang.get("previous")+'</a></li>');
}
} else if (pageNumber==-1) {
if (page==total)
{
//_item = $('<li><a>Next</a></li>');
} else {
_item = $('<li><a href="'+url+(page+1)+'">'+_this.lang.get("next")+'</a></li>');
_itemPage = page+1;
}
} else {
_item = $( '<li><a href="'+url+pageNumber+'" class="'+(pageNumber==page?'active':'')+'">'+pageNumber+'</a></li>');
_itemPage = pageNumber;
}
if (_item==null) return;
_item.on("click", "a", function(e){
e.preventDefault();
if (_itemPage==0 || $(this).hasClass("active") || $(this).hasClass("loading"))
{
return;
}
_o.getReviews(_itemPage);
history.pushState({etype:'review',page:_itemPage}, null, $(this).attr("href"));
});
return _item;
};
if (typeof total=='undefined')
{
total = _el.find('input').attr('data-total')*1;
}
if (typeof page=='undefined')
{
page = _el.find('input').attr('data-current')*1;
}
// reset
_el.find('.jreview-pagination').remove();
if (total<2)
{
return;
}
var html = $('<ul class="jreview-pagination"></ul>');
if (total<=5)
{
for (i=1;i<=total;i++)
{
html.append( _create(i) );
}
} else {
html.append( _create(0) );
html.append( _create(1) );
if (page-2 > 1)
{
html.append('<li>...</li>');
}
if (page<4)
{
html.append( _create(2) );
html.append( _create(3) );
html.append( _create(4) );
} else if (page>total-3) {
html.append( _create(total-3) );
html.append( _create(total-2) );
html.append( _create(total-1) );
} else {
html.append( _create(page-1) );
html.append( _create(page) );
html.append( _create(page+1) );
}
if (page+2 < total)
{
html.append('<li>...</li>');
}
// end page
html.append( _create(total) );
html.append( _create(-1) );
}
_el.prepend( html );
};
this.getReviews = function(page)
{
var response = {
"entry_id" : _this.config.id,
"jpage" : page,
"t" : _this.config.time
};
if(_this.config.hasOwnProperty('sort')) response.sort = _this.config.sort;
_this.config.page=page;
// filter
if(!$.isEmptyObject(_this.helper.filters))
{
response.filters=JSON.stringify(_this.helper.filters);
}
// create overlay
_o.box.find("#jreview-listing")
.append('<div class="_load_review_state"></div>');
// move to top
$('html,body').animate({scrollTop: _o.box.find("#jreview-listing").offset().top - 50}, '500');
$.post(_this.helper.url({view:"reviews", task:"more"}), response , function(d){
_o.box.find("#jreview-listing").empty().append(d.data); // reset reviews
_o.pagination(d.pagination.page, d.pagination.total); // create pagination again
_o.box.find('[data-dest="jreview-main"] ._tab_count').text(d.pagination.total_rating);
// lang filter
if (_this.config.langfilter==1 && d.langTags!=null)
{
var html = '';
$.each(d.langTags, function(k,v){
html+= '<li><a class="_dx" data-lang="'+k+'">'+v.text+' ('+v.count+')'+'</a></li>';
});
_o.box.find('.jreview-langs .jreview-dropdown-menu').empty().append(html);
}
// active review form
_o.box.find('[data-dest="jreview-main"]').trigger('click');
}, "json");
};
this.photos = function(el)
{
// limit, all, lightbox
var $grid = null,
pConfig = {
limit: el.attr('data-limit'),
all: el.attr('data-all'),
lightbox: el.attr('data-lightbox')
},
pOptions = {
selector:'a',
download:false,
counter:false
},
getPhotos = function(offset)
{
offset = typeof offset=="undefined" ? 0 : offset;
$.get(_this.helper.url({view:'others', task:'photos'}), {id:_this.config.id, offset:offset, limit:pConfig.limit}, function(d){
if (typeof d.photos=='object' && d.photos.length>0)
{
$.each(d.photos, function(k,v){
var url = _this.config.url + (_this.config.url.indexOf('?')==-1?'?':'&') + 'review_id=' + v.review_id,
html = '',
desc = '';
if (!/^\s*$/.test(v.title))
{
desc+= '<h4><a href="'+url+'">'+v.title+'</a></h4>';
}
desc+= '<p><b>'+v.name+'</b> ';
if (!/^\s*$/.test(v.description) && v.description!=null)
{
desc+= v.description;
}
desc+= '</p>';
// encode
desc = desc.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
html+= '<div class="photoItem">';
if(pConfig.lightbox=='1') html+= '<a href="'+v.full+'" data-sub-html="'+desc+'">';
html+= '<span class="_img" style="background-image:url('+v.thumb+')"></span>';
if(pConfig.lightbox=='1') html+= '</a>';
html+= '</div>';
$grid.append( html );
});
if(offset>0 && pConfig.lightbox=='1') $grid.data('lightGallery').destroy(true);
if(pConfig.lightbox=='1') $grid.lightGallery(pOptions);
} else {
if(offset==0)
{
el.remove();
return;
}
}
// pagination
if(pConfig.all=='1')
{
var _page = '<a>('+(d.page.offset+d.page.limit)+'/'+d.page.total+') '+_this.lang.get("load_more")+'</a>';
_page = $(_page);
_page.click(function(){
getPhotos(d.page.offset+d.page.limit);
});
el.find('._pagination').remove();
if(d.page.offset+d.page.limit<d.page.total)
{
el.append('<div class="_pagination"></div>');
el.find('._pagination').append(_page);
}
} else {
if(d.page.offset+d.page.limit<d.page.total)
{
el.find('.photoItem').last().append('<div class="_imgall">'+_this.lang.get("show_all_photos", d.page.total)+'<div>');
}
}
}, "json");
};
// replace
el.after('<div class="jphoto"></div>');
el=el.next('.jphoto');
el.prev().remove();
el.append('<div class="_items"></div>');
$grid = el.find('._items');
getPhotos(0);
};
this.init = function()
{
_o.events();
window.setInterval(function(){
if(!_o.box.find('.jreviewPtConfig').length) return;
_o.box.find('.jreviewPtConfig').each(function(){
_o.photos($(this));
});
},500);
/*
var _filter = _this.helper.cookie.get('jreview_filter');
if (_filter!=null)
{
_filter = $.parseJSON( _filter );
$.each(_filter, function(k,v){
if (k=="star")
{
$.each(v, function(k1,v1){
_o.box.find('input[data-name="star"][value='+v1+']').prop("checked", true);
});
} else if (k=="q") {
_o.box.find('#jreview-sf input').val( v );
if (!/^\s*$/.test(v))
{
_o.box.find('.jreview-findbox').removeClass('hidden');
}
} else if (k=="lang") {
var _el = _o.box.find('.jreview-langs a._dx[data-lang="'+v+'"]');
_o.box.find('.jreview-langs a._dx.active').removeClass('active');
_el.addClass('active');
_o.box.find('.jreview-langs .jreview-dropdown-toggle').text( _el.text() );
} else if (/^[1-9][0-9]*$/.test(k)) {
$.each(v, function(k1,v1){
_o.box.find('input[data-name="'+k+'"][value='+v1+']').prop("checked", true);
});
}
});
}
*/
var _sortby = _this.helper.cookie.get('jreview_sort');
if (_sortby!=null && $.inArray(_sortby,['best','popular','desc','asc','modified'])==-1)
{
var res = _sortby.match(/^([1-9][0-9]*)\s(asc|desc)$/i);
_o.box.find('._sort.active').removeClass('active');
if (res!=null)
{
var _el = _o.box.find('._sort[data-col='+res[1]+'][data-dir='+res[2]+']');
_el.attr('data-dir', res[2]=='desc'?'asc':'desc');
_el.addClass('active');
} else {
var _el = _o.box.find('._sort[data-col='+_sortby+']');
_el.addClass('active');
}
_o.box.find('.jreview-sort .jreview-dropdown-toggle span').text(_el.attr('data-label'));
}
_o.pagination();
var first_page = _this.config.page;
_o.pagination();
window.onpopstate = function(e){
var p=first_page;
if(e.state && e.state.etype=='review'){
p=e.state.page;
}
if(p==_this.config.page) return;
_o.getReviews(p);
};
}
};
this.reviewEvents = function()
{
// map
$("#jreview-listing").on("click", ".jreview-cmd-map", function(){
var _el = $(this),
dialogMap = new _this.dialog (
{
caption : _el.attr("data-name"),
content : '<div class="mapContent">'+_this.lang.get("please_wait")+'</div>',
submitLabel : false,
loadfn : function (dialog)
{
window.setTimeout (function()
{
var map = new google.maps.Map(dialog.el.find(".mapContent")[0],
{
center: {lat: -33.8688, lng: 151.2195},
zoom: 13
}),
html = '<div class="infowindow-content">';
html+= '<img src="" width="16" height="16" class="_icon">';
html+= '<span class="_name" class="title"></span><br>';
html+= '<span class="_address"></span></div>';
dialog.el.find('.jreview-dg-content').prepend(html);
var infowindow = new google.maps.InfoWindow(),
infowindowContent = dialog.el.find('.infowindow-content');
infowindow.setContent(infowindowContent[0]);
var marker = new google.maps.Marker({
map: map,
anchorPoint: new google.maps.Point(0, -29)
});
var marker_loc = new google.maps.LatLng(_el.attr("data-lat"), _el.attr("data-lng"));
marker.setPosition(marker_loc);
marker.setVisible(true);
infowindowContent.find('._name').text(_el.attr("data-name"));
infowindowContent.find('._address').text(_el.attr("data-address"));
infowindowContent.find('._icon').attr("src", decodeURIComponent(_el.attr("data-image")));
infowindow.open(map, marker);
}, 300);
}
});
});
// helpful vote
$("#jreview-listing").on("click", ".re-help-up, .re-help-down", function(){
var _el = $(this),
rid = _el.attr("data-id"),
vote = _el.hasClass("re-help-up") ? 1 : 0,
_parent = _el.parents('.re-helpful');
if (_el.hasClass("active"))
{
vote = -1;
}
_el.parent().children().attr("disabled","disabled");
$.post(_this.helper.url({view:"others", task:"vote"}), {id:rid, val:vote, type:1}, function(d){
_el.parent().children().removeAttr("disabled","disabled");
if (d.status==400)
{
alert(d.error);
return;
}
switch (d.r.id)
{
case -1:
_el.removeClass("active");
break;
case 1:
case 0:
_el.addClass("active");
if (vote==1)
{
_el.parent().find(".re-help-down").removeClass("active");
} else {
_el.parent().find(".re-help-up").removeClass("active");
}
break;
default:
return;
}
if (d.r.data!=null)
{
_parent.find('.re-help-match').text( d.r.data.count_help );
_parent.find('.re-help-count').text( d.r.data.count_help*1+d.r.data.count_unhelp*1 );
}
}, "json");
});
// report
$("#jreview-listing").on("click", ".jreview-report", function(e){
e.preventDefault ();
_this.helper.report( $(this), 1 );
});
// sharing
$("#jreview-listing").on("click", ".jreview-share", function(){
var _el = $(this),
id = _el.attr ('data-id'),
caption = $("#review-"+id+" .re-title").text();
caption = $.trim(caption);
var url = _this.config.url + (_this.config.url.indexOf('?')==-1?'?':'&') + 'review_id=' + id;
var content = '<input type="text" readonly value="'+url+'" style="margin: 10px auto;background: #fff;" />',
shareTools = [];
if (_this.config.sharefb==1)
{
shareTools.push ('<li><a class="jreview-share-fb jreview-share-item" data-type="fb"><i class="fa fa-facebook" aria-hidden="true"></i></a></li>');
}
if (_this.config.sharetw==1)
{
shareTools.push ('<li><a class="jreview-share-tw jreview-share-item" data-type="tw"><i class="fa fa-twitter" aria-hidden="true"></i></a></li>');
}
if (_this.config.sharegg==1)
{
shareTools.push ('<li><a class="jreview-share-gg jreview-share-item" data-type="gg"><i class="fa fa-google" aria-hidden="true"></i></a></li>');
}
if (shareTools.length)
{
content+= '<ul class="jreview-inline" style="text-align:center">';
content+= shareTools.join ('');
content+= '</ul>';
}
new _this.dialog ({
caption : _this.lang.get("permalink"),
submitLabel : false,
content : content,
loadfn : function (dialog)
{
dialog.el.find ('input[type="text"]').click (function(){
dialog.el.find ('input[type="text"]').select();
});
dialog.el.find ('input[type="text"]').focus().select();
dialog.el.on ('click', '.jreview-share-item', function(){
var t = $(this).attr('data-type'),
url2share = null;
switch (t) {
case 'fb':
if (typeof FB!='undefined') {
var fbOptions = {
method: 'feed',
link: url
};
if (!/^\s*$/.test(caption))
{
fbOptions['caption'] = caption;
}
FB.ui(fbOptions, function(response){});
return;
}
url2share = 'https://www.facebook.com/sharer.php?s=100&p[url]'+encodeURIComponent(url)+(!/^\s*$/.test(caption)?'&p[message]='+encodeURIComponent(caption):'');
break;
case 'tw':
url2share = 'https://twitter.com/intent/tweet?tw_p=tweetbutton'+(!/^\s*$/.test(caption)?'&text='+encodeURIComponent(caption):'')+'&url='+encodeURIComponent(url);
break;
case 'gg':
url2share = 'https://plus.google.com/share?url='+encodeURIComponent(url);
break;
}
if (url2share!=null)
{
window.open(url2share, 'jreview_sharer', 'top=200,left=200,toolbar=0,status=0,width=600,height=450');
}
});
}
});
});
// comment
$("#jreview-listing").on("click", ".jreview-cm-load", function(){
var _el = $(this),
id = _el.attr("data-id");
if (_el.hasClass("disabled"))
{
return;
}
_el.addClass("disabled");
$.post(_this.helper.url({view:"comments", task:"more"}), {rid:id, tl:_this.config.time, wrap:1}, function(d){
if (!d.data)
{
return;
}
$('#review-'+id).find('.re-content').append('<div class="re-comments">'+d.data+'</div>');
}, "json");
});
// state
$("#jreview-listing").on("click", ".jreview-state", function(){
var _el = $(this),
id = _el.attr("data-id");
if (_el.hasClass("disabled"))
{
return;
}
_el.addClass("disabled");
$.post(_this.helper.url({view:"review", task:"state"}), {id:id}, function(d){
_el.removeClass("disabled");
if (d.status==400)
{
alert( d.error);
} else {
if (d.data==1)
{
$("#review-" + id + " .jreview-state-msg").addClass("hidden");
} else {
$("#review-" + id + " .jreview-state-msg").removeClass("hidden");
}
}
}, "json");
});
// featured
$("#jreview-listing").on("click", ".jreview-hl", function(){
var _el = $(this),
id = _el.attr("data-id");
if (_el.hasClass("disabled"))
{
return;
}
_el.addClass("disabled");
$.post(_this.helper.url({view:"review", task:"featured"}), {id:id}, function(d){
_el.removeClass("disabled");
if (d.status==400)
{
alert( d.error);
} else {
if (d.data==1)
{
$("#review-" + id).addClass("_featured");
} else {
$("#review-" + id).removeClass("_featured");
}
}
}, "json");
});
// remove
$("#jreview-listing").on("click", ".jreview-remove", function(){
var _el = $(this),
id = _el.attr("data-id");
new _this.dialog({
caption: _this.lang.get("confirm"),
content: _this.lang.get("confirm_del_review"),
submitLabel: _this.lang.get("delete"),
submitfn: function(dialog)
{
dialog.overlay();
$.post(_this.helper.url({view:"review", task:"remove"}), {id:id}, function(d){
if (d.status==400)
{
dialog.unOverlay();
dialog.setError(d.error);
dialog.el.find(".jreview-dg-submit").remove();
} else {
dialog.off();
$("#review-"+id).fadeOut(function(){
$(this).remove();
})
}
}, "json");
}
});
});
// download file
$("#jreview-listing").on("click", "._item_attach", function(e){
e.preventDefault();
var _el = $(this),
id = _el.attr("data-id"),
downloadfn = function()
{
var url = _this.helper.url({view:"media", task:"download", id:id, tmpl:"component"});
window.location.href = url;
};
if (_el.hasClass("disabled"))
{
return false;
}
_el.addClass("disabled");
$.get( _this.helper.url({view:"media", task:"checker"}), {id:id}, function(d){
_el.removeClass("disabled");
if (d.status==200)
{
// ok - download now
downloadfn();
} else if (d.status==302) {
// guest - show login form
_this.helper.login(_this.lang.get("download_login_require"));
} else {
// error
alert( d.error );
}
}, "json");
});
};
this.commentEvents = function()
{
$("#jreview-listing")
.on("click", ".jreview-cm-add, .jreview-cm-reply", function(){
var _el = $(this),
id = _el.attr("data-id"),
repid = typeof _el.attr("data-repid") == "undefined" ? 0 : _el.attr("data-repid"),
pid = typeof _el.attr("data-pid") == "undefined" ? 0 : _el.attr("data-pid"),
_dest = repid>0 ? $("#comment-"+repid+" .reply-form:eq(0)") : $("#review-"+id+" .jreview-cm-form-box");
if(_el.hasClass("processing")) return;
if(_el.hasClass("active"))
{
_el.removeClass("active");
_dest.empty();
return;
}
_el.addClass("active");
var formCm = $("#jreview-cm-form-layout").clone().removeAttr("id")
.attr("class", "jreview-cm-form").removeAttr("style");
formCm.appendTo( _dest );
formCm.find("textarea").focus();
// assign data
formCm.find('input[name=reply_id]').val(repid);
formCm.find('input[name=review_id]').val(id);
if(_this.config.member==0)
{
formCm.find('input[name=author_name]').val(_this.helper.cache.name);
formCm.find('input[name=author_email]').val(_this.helper.cache.email);
}
// events
var cmExtendData = [];
formCm.find('._cancel').click(function(){
_el.removeClass("active");
_dest.empty();
});
formCm.submit(function(e){
e.preventDefault();
var cmMsg = formCm.find('textarea[name=comment]').val(),
postCm = function()
{
var formfn = {
countEvent : 0,
passEvent : 0,
el : formCm.find('form'),
data : []
},
submitCm = function(callback)
{
if (formfn.countEvent!=formfn.passEvent)
{
return false;
}
var formData = formCm.find('form').serializeArray();
postData = [];
$.each(formData, function(k,v){
postData.push({
name:'jform['+v.name+']',
value:v.value
});
});
$.each(cmExtendData, function(k,v){
postData.push({
name:'jform['+v.name+']',
value:v.value
});
});
postData = $.merge(formfn.data, postData);
$.post(_this.helper.url({view:"comments",task:"save"}), postData, function(d){
if (typeof callback=="function")
{
callback(d);
}
if (d.status==200)
{
_loadCm(id, pid, repid);
formCm.remove();
} else {
alert(d.error);
}
}, "json");
};
_this.helper.listenEvent('jreview.cm.submit',{$:$, jreview:_this, form:formfn, submitfn:submitCm});
if (formfn.countEvent==0)
{
submitCm();
}
};
if(/^\s*$/.test(cmMsg))
{
formCm.find("textarea").focus();
return false;
}
if(_this.config.member==0)
{
_this.helper.cache.set(formCm.find('input[name=author_name]').val(), formCm.find('input[name=author_email]').val());
}
postCm();
});
})
.on("click", ".jreview-cmVoteUp, .jreview-cmVoteDown", function(){
// like/dislike
var _el = $(this),
id = _el.attr("data-id"),
vote = _el.hasClass("jreview-cmVoteUp") ? 1 : 0,
_parent = _el.parents(".jreview-cmVote");
if(_el.hasClass("disabled")) return;
if(_el.hasClass("active")) vote=-1;
_parent.find( "a" ).addClass("disabled");
$.post(_this.helper.url({view:"others", task:"vote"}), {id:id, val:vote, type:0}, function(d){
_parent.find( "a" ).removeClass("disabled");
if (d.status==400)
{
alert(d.error);
return;
}
switch (d.r.id)
{
case -1:
_el.removeClass("active");
break;
case 1:
case 0:
_el.addClass("active");
if (vote==1)
{
_parent.find( ".jreview-cmVoteDown" ).removeClass("active");
} else {
_parent.find( ".jreview-cmVoteUp" ).removeClass("active");
}
break;
default:
return;
}
if(d.r.data!=null)
{
var $elU=_parent.find('.jreview-cmVoteUp').next('._count'),
$elD=_parent.find('.jreview-cmVoteDown').next('._count');
$elU.text(d.r.data.count_help);
if(d.r.data.count_help>0){
$elU.removeClass('jreview-hidden');
} else {
$elU.addClass('jreview-hidden');
}
$elD.text(d.r.data.count_unhelp);
if(d.r.data.count_unhelp>0){
$elD.removeClass('jreview-hidden');
} else {
$elD.addClass('jreview-hidden');
}
}
}, "json");
})
.on("click", ".jreview-cm-edit", function(){
var id = $(this).attr("data-id")*1,
dialogCm = new _this.dialog({
caption : _this.lang.get("edit_comment"),
content : _this.lang.get("please_wait"),
submitLabel : "Update",
loadfn : function (dialog)
{
$.post(_this.helper.url({view:"comments", task:"edit"}), {id:id}, function(d)
{
if (d.status==400)
{
dialog.setError( d.error );
dialog.el.find(".jreview-dg-submit").remove();
return;
}
var html = '<textarea>'+d.data.comment+'</textarea>';
dialog.el.find(".jreview-dg-content").empty().append(html);
}, "json");
},
submitfn : function(dialog)
{
var _elComment = dialog.el.find("textarea"),
_dataCm = [
{
name : 'comment',
value: _elComment.val()
},
{
name : 'id',
value : id
}
];
if (/^\s*$/.test(_elComment.val()))
{
_elComment.focus();
return;
}
dialog.overlay();
$.post(_this.helper.url({view:"comments", task:"update"}), _dataCm, function(d){
dialog.unOverlay();
if (d.status==400)
{
dialog.setError( d.error );
} else {
$('#comment-'+id).find('._comment').empty().append(d.data);
dialog.off();
}
}, "json");
}
});
})
.on("click", ".jreview-cm-delete", function(){
var _el = $(this),
id = _el.attr("data-id");
if (_el.hasClass("disabled"))
{
return;
}
$.post(_this.helper.url({view:"comments", task:"remove"}), {id:id}, function(d){
_el.removeClass("disabled");
if (d.status==400)
{
alert( d.error );
} else {
$("#comment-"+id).fadeOut('fast', function(){
$(this).remove();
});
}
}, "json");
})
.on("click", ".jreview-cm-state", function(){
var _el = $(this),
id = _el.attr("data-id");
if (_el.hasClass("disabled"))
{
return;
}
$.post(_this.helper.url({view:"comments", task:"state"}), {id:id}, function(d){
_el.removeClass("disabled");
if (d.status==400)
{
alert( d.error );
} else {
var _cmEl = $("#comment-"+id);
if (d.publish==1)
{
_cmEl.find("._state:eq(0)").addClass("hidden");
} else {
_cmEl.find("._state:eq(0)").removeClass("hidden");
}
}
}, "json");
})
.on("click", ".jreview-cm-report", function(e){
e.preventDefault ();
_this.helper.report( $(this), 0 );
})
.on("click", ".jreview-cmUrl", function(e){
e.preventDefault ();
var id = $(this).attr("data-id");
content = '<input type="text" value="' + ( _this.config.url + (_this.config.url.indexOf('?')==-1?'?':'&') + 'review_id=' + id ) + '" style="margin: 10px auto;background: #fff;" />';
new _this.dialog({
caption : "Permalink",
content : content,
submitLabel : false,
loadfn : function(dialog)
{
dialog.el.find("input").click(function(){
$(this).select();
});
dialog.el.find("input").focus().select();
}
})
});
// load comment
var _cm_map = {},
_loadCm = function(rid, pid, reply_id)
{
var key = rid + '_' + pid,
request = {
rid : rid,
pid : pid,
to : 0
},
_parent = $('.jreview-cmlist[data-id="'+rid+','+pid+'"]'),
reply_id = typeof reply_id=='undefined' ? 0 : reply_id;
if (!_cm_map.hasOwnProperty(key))
{
_cm_map[key] = _this.config.time;
}
request.to = _cm_map[key];
if (_parent.length)
{
request.wrap = 0;
} else {
request.wrap = 1;
}
$.post(_this.helper.url({view:"comments", task:"more"}), request, function(d){
if (d.data==null)
{
return;
}
// update time
_cm_map[key] = d.time;
if (_parent.length)
{
if (pid>0 && reply_id>0)
{
_parent.find('#comment-'+reply_id).after( d.data );
} else {
_parent.prepend(d.data);
}
} else {
if (pid==0)
{
$('#review-'+rid).find('.re-content').append('<div class="re-comments">'+d.data+'</div>');
} else {
$('#comment-'+pid).find('.cm-content').after('<div class="_child">'+d.data+'</div>');
}
}
}, "json");
};
// create comment pagination
var _cm_page = function(_el)
{
var _info = {
rid : _el.attr("data-id")*1,
pid : _el.attr("data-pid")*1,
total : _el.attr("data-total")*1,
limit : _el.attr("data-limit")*1,
offset : _el.attr("data-offset")*1,
offset_top : 0,
offset_bottom : 0,
loaded : 0
},
_parent = $('.jreview-cmlist[data-id="'+_info.rid+','+_info.pid+'"]');
_el.addClass("loaded");
_info.loaded = _parent.children().length;
_info.offset_bottom = _info.loaded + _info.offset;
_info.offset_top = _info.offset - _info.limit;
// top
if (_info.offset>0)
{
var _el_pageTop = $('<a>'+_this.lang.get("load_previous_comments")+'</a>');
_el_pageTop.insertBefore( _parent );
_el_pageTop.click(function(){
$.post(_this.helper.url({view:"comments", task:"more"}),
{
rid : _info.rid,
pid : _info.pid,
offset : _info.offset_top,
tl : _this.config.time
}, function(d){
_info.loaded += d.count;
_parent.prepend(d.data);
if (_info.offset_top<=0)
{
_el_pageTop.remove();
}
_info.offset_top -= d.count;
}, "json");
});
}
// bottom
if (_info.offset_bottom < _info.total)
{
var _el_pageBottom = $('<a class="_more_cm_loader">'+_this.lang.get("load_more_comment")+'</a>');
_el_pageBottom.insertAfter( _parent );
_el_pageBottom.click(function(){
if ($(this).hasClass('disabled'))
{
return;
}
$(this).addClass('disabled');
$.post(_this.helper.url({view:"comments", task:"more"}),
{
rid : _info.rid,
pid : _info.pid,
offset : _info.offset_bottom,
tl : _this.config.time
}, function(d){
_el_pageBottom.removeClass('disabled');
_info.loaded += d.count;
_info.offset_bottom += d.count;
_parent.append(d.data);
if (_info.offset_bottom >= _info.total)
{
_el_pageBottom.remove();
}
}, "json");
});
}
};
window.setInterval(function(){
$("._cm_pagination").not(".loaded").each(function(){
_cm_page( $(this) );
});
}, 500);
};
this.events = function()
{
_this.helper.cache.load();
// dropdown
$(document).on("click", ".jreview-dropdown-toggle", function(){
let e=$(this),
p=e.parent();
if(p.hasClass("active"))
{
p.removeClass("active");
return;
}
$(".jreview_dropdown.active").not(p).removeClass("active");
p.addClass("active");
})
.on(".jreview-dropdown-menu li", "click", function(){
let e=$(this),
p=e.parents(".jreview_dropdown");
p.removeClass("active");
})
.on("click", function(e){
if(!$(e.target).is(".jreview_dropdown.active") && $(e.target).parents(".jreview_dropdown.active").length==0)
{
$(".jreview_dropdown.active").removeClass("active");
}
});
// subscribe button
$("#jreview-subscribe").click(function(){
var _el = $(this),
_allow = _el.attr("data-open"),
_id = _el.attr("data-id"),
_dialog = null,
_action = function(data, callback)
{
$.post(_this.helper.url({view:'profile',task:'subscribe'}), data, function(d){
if (typeof callback=='function')
{
callback(d);
}
}, "json");
};
if (_el.hasClass("disabled")) return;
if (_el.hasClass("active"))
{
// unsubscribe
new _this.dialog({
caption: _this.lang.get("message"),
content: _this.lang.get("unsubscribe_notice"),
submitLabel: 'Ok',
submitfn: function(dialog)
{
dialog.overlay();
$.post(_this.helper.url({view:'profile', task:'unsubscribe'}), {type:1, id:_id}, function(d){
dialog.unOverlay();
if (d.status==200)
{
_el.removeClass('active');
dialog.off();
} else {
dialog.setError(d.error);
}
}, 'json');
}
});
return;
}
if (_this.config.member==0)
{
if (_allow==1)
{
// show guest form
var _html = '<div class="">';
_html+= '<label>'+_this.lang.get("your_name")+'</label>';
_html+= '<input type="text" data-name="name" value="'+_this.helper.cache.name+'" />';
_html+= '<label>'+_this.lang.get("your_email")+'</label>';
_html+= '<input type="email" data-name="email" value="'+_this.helper.cache.email+'" />';
_html+= '</div>';
_dialog = new _this.dialog({
caption : _this.lang.get("subscribe_form"),
content : _html,
loadfn : function(dialog)
{
dialog.el.find('input:eq(0)').focus();
},
submitfn : function(dialog)
{
var _nameEl = dialog.el.find('[data-name=name]'),
_emailEl = dialog.el.find('[data-name=email]');
if (/^\s*$/.test(_nameEl.val()))
{
_nameEl.focus();
return false;
}
if (/^\s*$/.test(_emailEl.val()))
{
_emailEl.focus();
return false;
}
dialog.overlay();
_this.helper.cache.set(_nameEl.val(), _emailEl.val());
_action({type:1, id:_id, name:_nameEl.val(), email:_emailEl.val()}, function(d){
dialog.unOverlay();
if (d.status==200)
{
dialog.off();
_el.addClass('active');
} else {
dialog.setError(d.error);
}
});
}
});
} else {
// login form
_this.helper.login();
}
} else {
if (_allow==1)
{
_el.addClass("disabled");
_action({type:1, id:_id}, function(d){
_el.removeClass("disabled");
if (d.status==200)
{
_el.addClass('active');
} else {
alert(d.error);
}
});
} else {
// this feature invalid
alert(_this.lang.get("feature_invalid"));
_el.addClass("disabled");
}
}
});
// review form
_this.formEvents();
// highlight review, comment
if (_this.config.hasOwnProperty('hl') && /^([1-9][0-9]*)(\,([1-9][0-9]*))?$/.test(_this.config.hl))
{
var hls = _this.config.hl.match(/^([1-9][0-9]*)(\,([1-9][0-9]*))?$/),
_el = null;
if (typeof hls[3] != "undefined")
{
// comment
_el = $("#comment-"+hls[3]);
} else {
// review
_el = $("#review-"+hls[1]);
}
window.setTimeout(function(){
_el.addClass("_hlight");
$("html, body").animate({ scrollTop: _el.offset().top }, 500);
},1000);
}
};
this.init = function()
{
_this.libs();
_this.events();
var reviews = new _this.reviewsEvents();
reviews.init();
_this.reviewEvents();
_this.commentEvents();
var hl = function(hash)
{
switch(hash)
{
case '#add-review':
case '#post-review':
$('#post-review').removeClass('hidden');
$('html,body').animate({scrollTop:$('#post-review').offset().top}, 500);
break;
case '#reviews':
$('html,body').animate({scrollTop:$('#reviews').offset().top}, 500);
break;
}
};
$(document).on('click', '.jreview-begin', function(){
hl('#reviews');
})
.on('click', '._write', function(e){
e.preventDefault();
if($('#post-review').length)
{
$('#post-review').removeClass('hidden');
$('html,body').animate({scrollTop:$('#post-review').offset().top}, 500);
}
});
// emoji
if(_this.config.emoji!='0')
{
_this.emoji.init();
$('.jlexreview').on('focus', '.input-emoji', function(){
_this.emoji.build($(this));
});
if(typeof twemoji!='undefined')
{
$(document).ajaxComplete(function(){
twemoji.parse($('.jlexreview')[0]);
});
twemoji.parse($('.jlexreview')[0]);
}
}
if(_this.config.hasOwnProperty('events'))
{
try {
eval(_this.config.events);
} catch(err) {
console.log(err.message);
}
}
hl(location.hash);
$(window).on('hashchange',function(){
hl(location.hash);
});
};
this.embed = function(els, title, url)
{
_this.config.embed = 1;
$(els).remove();
if ($('._filter_tools').length && !$('.jreview-controllers').length)
{
$('#jreview-summary input._filter_input').off();
$('#jreview-summary input._filter_input').parent('.toggle').remove();
$('#jreview-summary input._filter_input').remove();
}
$('.jlexreview').prepend('<h1 class="embed-title"><a href="'+url+'" target="_blank">'+title+'</a></h1>');
var url = '<a href="'+url+'#reviews" target="_blank" class="embed-link">'+_this.lang.get('post_your_review')+'</a>';
if ($('#jreview-summary').length)
{
$('#jreview-summary').after(url);
} else {
$('.jlexreview').prepend(url);
}
};
}