diff --git a/app/assets/javascripts/calendar_widget.js b/app/assets/javascripts/calendar_widget.js index b79fcd9..99c2c0c 100644 --- a/app/assets/javascripts/calendar_widget.js +++ b/app/assets/javascripts/calendar_widget.js @@ -78,18 +78,24 @@ } $(window).resize(function(){ var window_w = $(window).width() - $('div.calendar-events').each(function(){ - if ($(this).width()>=728 && window_w>=768){ - if ($(this).css('width')!='50%'){ + $('.widget-calendar-1 div.calendar-events').each(function(){ + var this_w = $(this).parents('.widget-calendar-1').width() + if (this_w>=728 && window_w>=768){ + if (!$(this).hasClass('width-50')){ + $(this).removeClass('width-100') + $(this).addClass('width-50') $(this).css('width','50%') $(this).parents('div[data-module="calendar"]').find('div').eq(0).css('width','50%') } }else{ - if ($(this).css('width')=='50%'){ + if (!$(this).hasClass('width-100')){ + $(this).addClass('width-100') + $(this).removeClass('width-50') $(this).css('width','100%') $(this).parents('div[data-module="calendar"]').find('div').eq(0).css('width','100%') } } + }) }) var show_event = function(date,ele){ @@ -374,7 +380,7 @@ }) var clicked_color = dom.find('.w-calendar-event').css('background-color') if (clicked_color){ - clicked_color = lighten_color(rgb2hex(clicked_color),-35) + clicked_color = lighten_color(rgb2hex(clicked_color),-45) if (clicked_color!='#000000'){ dom.find('table').append($('')) } @@ -391,7 +397,7 @@ div_tag.prepend(widge_title) dom.html(div_tag); monthDom.find("i.loading").removeClass("hide"); - fetchInterval = setTimeout(fetchEvents,300); + fetchInterval = setTimeout(fetchEvents,0); dom.find('div').eq(0).after(eventHTML) } diff --git a/app/assets/javascripts/calendar_widget2.js b/app/assets/javascripts/calendar_widget2.js index eb65861..b7ae060 100644 --- a/app/assets/javascripts/calendar_widget2.js +++ b/app/assets/javascripts/calendar_widget2.js @@ -18,9 +18,17 @@ last_inserted_date = 1, monthDom = $("
"), eventHTML = dom.find('div.calendar-events')[0], + event_template = dom.find('div.calendar-events .event').prop('outerHTML'), prevMonthFunc, nextMonthFunc, - toggle_data; + toggle_data, + hover_step=10, + hover_step_max=10, + hover_max_height=19.2, + toggling=false, + switching=false, + tp1, + tp2; monthDom.html(template); var format_time = function(date){ var hours = date.getHours(), @@ -40,6 +48,21 @@ return "#000000"; } } + function hexToRGB(hex, alpha) { + if (hex){ + var r = parseInt(hex.slice(1, 3), 16), + g = parseInt(hex.slice(3, 5), 16), + b = parseInt(hex.slice(5, 7), 16); + + if (alpha) { + return "rgba(" + r + ", " + g + ", " + b + ", " + alpha + ")"; + } else { + return "rgb(" + r + ", " + g + ", " + b + ")"; + } + }else{ + return '' + } + } function lighten_color(my_hex,percent){ if (my_hex[0] == '#'){ my_hex = my_hex.slice(1) @@ -78,92 +101,214 @@ } $(window).resize(function(){ var window_w = $(window).width() - $('div.calendar-events').each(function(){ - if ($(this).width()>=728 && window_w>=768){ - if ($(this).css('width')!='50%'){ + $('.widget-calendar-2 div.calendar-events').each(function(){ + var this_w = $(this).parents('.widget-calendar-2').width() + if (this_w>=728 && window_w>=768){ + if (!$(this).hasClass('width-50')){ + $(this).removeClass('width-100') + $(this).addClass('width-50') $(this).css('width','50%') $(this).parents('div[data-module="calendar"]').find('div').eq(0).css('width','50%') } }else{ - if ($(this).css('width')=='50%'){ + if (!$(this).hasClass('width-100')){ + $(this).addClass('width-100') + $(this).removeClass('width-50') $(this).css('width','100%') $(this).parents('div[data-module="calendar"]').find('div').eq(0).css('width','100%') } } + }) }) var show_event = function(date,ele){ - var date_split = date.split('-') var event_div = $(ele).parents('div[data-module="calendar"]').find('div.calendar-events') - event_div.find('.event-header').text(parseInt(date_split[2])+'/'+(parseInt(date_split[1])+1)+'/'+parseInt(date_split[0])) - event_div.find('.event-container').remove() $(ele).parents('.w-calendar').find('td.shown').removeClass('shown') $(ele).addClass('shown') - $.each(events[date],function(k,v){ - var tp - if (v.url_linked==''){ - var time_string = '' - if(v.allDay) { - var end_time - var start_time = formate_datetime(v.start)[0] - if(v.end) - end_time = formate_datetime(v.end)[0] - else - end_time = start_time - time_string = (start_time==end_time ? "

" + start_time + "

" : " " + start_time + " " + end_time + "") + function set_event(date,active_flag){ + var date_split = date.split('-') + var event_temp = $(event_template) + var read_more_text = $('html').attr('lang')=='zh_tw' ? '查看詳情' : 'Read more' + event_temp.find('.event-header .date .month').text(month_names[parseInt(date_split[1])]) + event_temp.find('.event-header .date .day').text(parseInt(date_split[0])) + + $.each(events[date],function(k,v){ + var tp + if (v.url_linked==''){ + var time_string = '' + if(v.allDay) { + var end_time + var start_time = formate_datetime(v.start)[0] + if(v.end) + end_time = formate_datetime(v.end)[0] + else + end_time = start_time + time_string = (start_time==end_time ? "

" + start_time + "

" : " " + start_time + " " + end_time + "") + }else{ + var st = formate_datetime(v.start), + et = formate_datetime(v.end), + start_time = st[0], + end_time = et[0], + same = (start_time==end_time), + etime = et[1], + stime = st[1] + time_string = (same ? "

" + start_time + "

" + stime + " " + etime : "

" + start_time + "" + stime + "

" + end_time + "" + etime + "

"); + } + var modal_tp = ('') + tp = $('
'+modal_tp+'
') }else{ - var st = formate_datetime(v.start), - et = formate_datetime(v.end), - start_time = st[0], - end_time = et[0], - same = (start_time==end_time), - etime = et[1], - stime = st[1] - time_string = (same ? "

" + start_time + "

" + stime + " " + etime : "

" + start_time + "" + stime + "

" + end_time + "" + etime + "

"); + tp = $('
').attr('href',v.url_linked) } - var modal_tp = ('') - tp = $('
'+modal_tp+'
') - }else{ - tp = $('
').attr('href',v.url_linked) - } - var sd = formate_datetime(v.start), - ed = formate_datetime(v.end), - duration = ''; - if(v.allDay){ - if (sd[0]!=ed[0]){ - duration = sd[0]+'>'+ed[0] +'
' + var sd = formate_datetime(v.start), + ed = formate_datetime(v.end), + duration = ''; + if(v.allDay){ + if (sd[0]!=ed[0]){ + duration = sd[0]+'>'+ed[0] +'
' + } + }else if (sd[0]==ed[0]){ + duration = sd[1]+'>'+ed[1] +'
' + }else{ + duration = sd[0]+' '+sd[1]+'>'+ed[0]+' '+ed[1] +'
' } - }else if (sd[0]==ed[0]){ - duration = sd[1]+'>'+ed[1] +'
' - }else{ - duration = sd[0]+' '+sd[1]+'>'+ed[0]+' '+ed[1] +'
' + tp.css('color',hexToRGB(v.color,0.45)) + tp.find('.event-content').html(v.note || read_more_text) + tp.find('.title_temp').html(v.title) + tp.find('.duration_temp').html(duration) + if (k==0){ + tp.addClass('active') + event_temp.find('.event-header .event-inner-title').html(v.title) + event_temp.find('.event-header .duration').html(duration) + } + event_temp.find('.event-containers').append(tp) + }) + if (active_flag){ + event_temp.addClass('active') } - tp.find('.event-info').html(duration+v.title+"
"+v.note+"
") - tp.find('.event-bullet-event').css('background',v.color) - event_div.find('.event-containers').append(tp) + if (events[date].length>1){ + var switch_button_wraper = $("
" + +"" + +"
") + switch_button_wraper.find('button').click(function(){ + if (!switching){ + var showing_event = $(this).parents('.event-wraper').find('.event-container-one.active') + var next_event + showing_event.css('position','') + showing_event.css('right','0') + showing_event.removeClass('active') + if ($(this).attr('for')=='prev'){ + next_event = showing_event.prev('.event-container-one') + if (next_event.length==0){ + next_event = $(this).parents('.event-wraper').find('.event-container-one').eq(-1) + } + next_event.addClass('active') + next_event.css('right','100%') + switching = true + next_event.animate({'right': '0%'},function(){ + $(this).css('right','') + if ($(this).find('.event-content').height()>$(this).height()){ + $(this).css('position','relative') + } + }) + showing_event.animate({'right': '-100%'},function(){ + switching = false + }) + }else{ + next_event = showing_event.next('.event-container-one') + if (next_event.length==0){ + next_event = $(this).parents('.event-wraper').find('.event-container-one').eq(0) + } + next_event.addClass('active') + next_event.css('right','-100%') + switching = true + next_event.animate({'right': '0%'},function(){ + $(this).css('right','') + if ($(this).find('.event-content').height()>$(this).height()){ + $(this).css('position','relative') + } + }) + showing_event.animate({'right': '100%'},function(){ + switching = false + }) + } + $(this).parents('.event').eq(0).find('.event-header .event-inner-title').html(next_event.find('.title_temp').html()) + $(this).parents('.event').eq(0).find('.event-header .duration').html(next_event.find('.duration_temp').html()) + } + }) + event_temp.find('.event-wraper').eq(0).append(switch_button_wraper) + } + event_div.append(event_temp) + } + event_div.html('') + set_event(date,true) + var all_event_in_table = $(ele).parents('table').eq(0).find('td.w-calendar-event') + var ele_index = all_event_in_table.index(ele) + var next_ele = all_event_in_table.eq(ele_index+1) + if (next_ele.length){ + set_event(next_ele.data('date-node'),false) + } + event_div.find('.has-dialog').click(function(){ + var tmp=$(this).find('.dialog_event').clone().dialog({dialogClass: 'calendar-dialog'}); + $('.ui-dialog button').blur(); }) - + function event_hover(){ + if (!$(this).hasClass('active')){ + tp1 = $(this).parents('.calendar-events').eq(0).find('.event.active .event-containers') + tp2 = $(this).find('.event-containers') + if (!toggling){ + tp2.css('height','0') + tp2.css('min-height','0') + hover_step = hover_step_max + }else{ + hover_step = hover_step_max - hover_step + } + $(this).addClass('active') + function toggle_height(){ + tp1.css('height',(hover_step*hover_max_height/hover_step_max)+'em') + tp2.css('height',(hover_max_height-hover_step*hover_max_height/20)+'em') + hover_step = hover_step-1; + if (hover_step>=0){ + setTimeout(toggle_height,50) + }else{ + tp1.css('min-height','') + tp2.css('min-height','') + tp1.css('height','') + tp2.css('height','') + toggling = false + } + } + if (!toggling){ + setTimeout(toggle_height,50) + } + tp1.css('height',tp1.height()) + tp1.css('min-height','0') + tp1.parents('.event').removeClass('active') + toggling = true + } + } + event_div.find('.event').hover(event_hover) + event_div.find('.event').click(event_hover) $(ele).parents('div[data-module="calendar"]').css('display','flex') if ($(ele).parents('div[data-module="calendar"]').width()>=728 && $(window).width()>=768){ event_div.css('width','50%') + event_div.addClass('width-50') + event_div.removeClass('width-100') $(ele).parents('div[data-module="calendar"]').find('div').eq(0).css('width','50%') }else{ event_div.css('width','100%') + event_div.addClass('width-100') + event_div.removeClass('width-50') $(ele).parents('div[data-module="calendar"]').find('div').eq(0).css('width','100%') } event_div.show() - $('.close_box').off('click') - $('.close_box').on('click',function(){ - hide_event(this) - }) } var hide_event = function(ele){ $(ele).parents('.w-calendar').find('td.shown').removeClass('shown') @@ -172,7 +317,7 @@ $(ele).parents('div[data-module="calendar"]').find('div').eq(0).css('width','') event_div.hide() //$(ele).parents('div[data-module="calendar"]').find('td.w-calendar-toggle').removeClass('w-calendar-toggle') - event_div.find('.event-container').remove() + event_div.find('.event-container-one').remove() } var renderMonth = function(){ var num_of_rows = getNumberOfRows(), @@ -374,7 +519,7 @@ }) var clicked_color = dom.find('.w-calendar-event').css('background-color') if (clicked_color){ - clicked_color = lighten_color(rgb2hex(clicked_color),-35) + clicked_color = lighten_color(rgb2hex(clicked_color),-45) if (clicked_color!='#000000'){ dom.find('table').append($('')) } diff --git a/app/assets/stylesheets/calendar_widget2.css b/app/assets/stylesheets/calendar_widget2.css index 8d76e6a..5de081f 100644 --- a/app/assets/stylesheets/calendar_widget2.css +++ b/app/assets/stylesheets/calendar_widget2.css @@ -1,18 +1,6 @@ -a.event-container{ +a.event-container-one{ color: inherit; } -.event-container { - display: flex; - flex-wrap: wrap; - width: 100%; - border-radius: 10px; - margin-bottom: 1em; - transition: all .3s ease; - cursor: pointer; - padding: 0.5em; - min-height: 3em; - position: relative; -} .close_box{ font-weight: bold; position: relative; @@ -33,38 +21,6 @@ a.event-container{ height: 2em; border-radius: 1em; } -.event-container:hover { - background-color: #fff; - box-shadow: 0 0.1em 0.7em -0.25em rgba(0, 0, 0, 0.65); -} -.event-container > .event-icon { - position: absolute; - display: flex; - justify-content: center; - width: 15%; - height: 100%; - z-index: 5; -} -.event-container > .event-icon::before { - content: ''; - position: absolute; - top: 1em; - left: 50%; - width: 0.1em; - height: calc(100% + 1.5em); - background-color: #eaeaea; - z-index: -1; -} -.event-container:first-child > .event-icon::before { - top: 1.5em; - position: absolute; -} -.event-container:last-child > .event-icon::before { - height: 0; -} -.event-container:only-child > .event-icon::before { - background-color: unset; -} .event-header{ width: 100%; text-align: center; @@ -142,4 +98,125 @@ a.event-container{ } .widget-calendar-2 table td.w-calendar-other-month { color: #999797; +} +.widget-calendar-2 .event-header{ + display: flex; + background: #dadada; + cursor: default; +} +.widget-calendar-2 .event-header .date{ + width: 30%; +} +.widget-calendar-2 .event.active .event-header .day{ + color: #bf1f1f; +} +.widget-calendar-2 .event.active .event-header .date{ + color: #202427; +} +.widget-calendar-2 .event .event-header .day{ + font-size: 1.4em; +} +.widget-calendar-2 .event .event-header .month{ + font-size: 0.7em; +} +.widget-calendar-2 .event .event-header .date{ + color: #a08a70; +} +.widget-calendar-2 .event-title{ + width: 70%; + display: inline-flex; + flex-direction: column; + justify-content: space-between; +} +.widget-calendar-2 .event-title .duration{ + font-size: 0.7em; + text-align: left; + color: #a0a1a1; +} +.widget-calendar-2 .duration_temp,.widget-calendar-2 .title_temp{ + display: none; +} +.widget-calendar-2 .event-inner-title{ + line-height: 2em; + text-align: left; +} +.widget-calendar-2 .event-containers{ + height: 0; + min-height: unset; + display: flex; + justify-content: center; + align-items: center; + position: relative; + overflow: hidden; + margin: 0 10%; +} +.widget-calendar-2 .event-container-one { + position: absolute; + align-items: center; + justify-content: center; + display: flex; + width: calc(100% - 0.7em);; + height: calc(100% - 0.7em); + flex-wrap: wrap; + border-radius: 10px; + margin-bottom: 1em; + cursor: pointer; + padding: 0; + margin: 0; + color: rgba(50, 50, 50, 0.45); +} +.widget-calendar-2 .event-container-one:hover { + background-color: #fff; + box-shadow: 0 0.1em 0.7em 0em; +} +.widget-calendar-2 .event-container-one .event-content{ + color: #000000; +} +button.switch_button { + margin: 10%; + width: 2.5em; + height: 2.5em; + border-radius: 1.25em; + border: 0; + background: #96231a; + color: white; + outline: 0; +} +.widget-calendar-2 .switch_button:hover { + background: #c07b76; +} +.widget-calendar-2 .switch_button_wraper{ + position: absolute; + right: 0%; + margin-right: 2%; + width: 3em; + margin-bottom: 2%; + bottom: 0; + display: flex; + flex-direction: column; +} +.widget-calendar-2 .event-wraper{ + position: relative; + overflow: hidden; +} +.widget-calendar-2 .event-container-one:not(.active) { + right: -100%; +} +.widget-calendar-2 .event.active .event-containers{ + min-height: 19.2em; + height: auto; +} +.widget-calendar-2 .calendar-events.width-100 .switch_button_wraper{ + width: 100%; + height: 100%; + margin: 0; + flex-direction: row; + justify-content: space-between; + align-items: center; +} +.widget-calendar-2 .calendar-events.width-100 .switch_button{ + margin: 2%; +} +.widget-calendar-2 .calendar-events.width-100 .event-containers{ + z-index: 3; } \ No newline at end of file diff --git a/modules/calendar/_calendar_widget2.html.erb b/modules/calendar/_calendar_widget2.html.erb index 3d63517..9cbabb0 100644 --- a/modules/calendar/_calendar_widget2.html.erb +++ b/modules/calendar/_calendar_widget2.html.erb @@ -34,10 +34,22 @@