feat(deployed): add mod_mx_timeline 4.0.3 (no-source, vetted live)

MX Timeline module (mixwebtemplates); no identifiable source -> deployed files.

Signed-off-by: LÁZÁR Imre <imre@illusion.hu>
Assisted-by: claude-code@claude-opus-4-8
This commit is contained in:
LÁZÁR Imre AI Agent 2026-07-16 11:24:49 +02:00
parent b4347e0a26
commit a5123dc62b
22 changed files with 16211 additions and 0 deletions

View File

@ -0,0 +1,348 @@
#status {
display: none;
}
/* Alert Boxes */
.alert {
margin-bottom: 0px;
max-width: 550px;
background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0.07) 0%, rgba(0, 0, 0, 0.03) 100%);
background-image: -ms-linear-gradient(bottom, rgba(0, 0, 0, 0.07) 0%, rgba(0, 0, 0, 0.03) 100%);
background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, 0.07) 0%, rgba(0, 0, 0, 0.03) 100%);
background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.07) 0%, rgba(0, 0, 0, 0.03) 100%);
background-image: linear-gradient(bottom, rgba(0, 0, 0, 0.07) 0%, rgba(0, 0, 0, 0.03) 100%);
}
.alert-blue label {
font-size: 14px;
}
.alert-blue {
color: #fff;
font-size: 14px;
clear: both;
line-height: 18px;
background-color: #c00;
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
border-radius: 2px;
padding: 10px 15px;
text-shadow: 1px 1px #066da1;
display: block;
position: relative;
width: 100%;
}
.alert-grey {
color: #555555;
font-size: 12px;
clear: both;
line-height: 18px;
background-color: #fefefe;
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
border-radius: 2px;
border: 1px solid #d6d6d6;
margin: 0px;
padding: 5px 10px 2px;
text-shadow: 1px 1px #fff;
display: block;
position: relative;
min-width: 200px;
}
.alert-warning {
color: #555;
font-size: 14px;
clear: both;
line-height: 18px;
background: url("../images/admin/notice.png") no-repeat scroll 5px center #eeeeee;
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
border-radius: 2px;
border: 1px solid #d6d6d6;
padding: 12px 15px 12px 50px;
text-shadow: 1px 1px #fff;
display: block;
position: relative;
max-width: 510px;
}
/* Color Picker */
.moor-box,
.moor-overlayBox,
.moor-slider,
.moor-chooseColor {
border: 1px solid #DDDDDD;
}
/* Template Info */
.templateinfo img {
float: left;
padding: 0 20px;
}
.templateinfo p {
padding: 0 20px;
max-width: 600px;
text-align: left;
font-weight: normal;
}
.templateinfo h4 {
padding: 10px 20px;
font-weight: normal;
letter-spacing: 1.5px;
font-size: 22px;
color: #888888;
text-transform: uppercase;
background: #eeeeee;
border: 1px solid #dddddd;
border-radius: 5px;
}
.form-horizontal .control-label {
min-width: 180px;
}
.form-horizontal .control-label label {
margin-right: 10px;
}
/* Joomla 3.2 */
.row-fluid .span6 {
margin-left: 0;
width: 100%;
}
#myTabTabs.nav.nav-tabs {
background-color: #FFFFFF;
box-shadow: 0 2px 2px 0 rgba(255, 255, 255, 0.5) inset;
border-radius: 8px 8px 0 0;
border: 1px solid #DDDDDD;
border-top-color: #E4E4E4;
padding: 8px;
margin-bottom: 0;
}
#myTabTabs.nav.nav-tabs > li > a {
position: relative;
background: #fafafa;
color: #c00;
display: block;
font-size: 12px;
font-weight: bold;
letter-spacing: 1px;
text-transform: uppercase;
text-decoration: none;
margin: 3px;
z-index: 1;
text-shadow: none;
padding-bottom: 8px;
padding-top: 8px;
opacity: 1;
border: 1px solid rgba(0, 0, 0, 0.1);
border-radius: 6px;
background-clip: padding-box;
box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.5), 1px 1px 0px rgba(255, 255, 255, 0.6);
background-image: linear-gradient(bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.02) 100%);
}
#myTabTabs.nav.nav-tabs > li a:hover {
background-color: #fff;
}
#myTabTabs.nav.nav-tabs > li.active a,
#myTabTabs.nav.nav-tabs > li a:focus {
background-color: #c00;
color: #fff;
border: 1px solid #c00;
-moz-box-shadow: inset 0 0 5px rgba(52, 152, 219, 0.1);
-webkit-box-shadow: inset 0 0 5px rgba(52, 152, 219, 0.1);
box-shadow: inset 0 0 5px rgba(52, 152, 219, 0.1);
}
#myTabTabs.nav-tabs > .active > a,
#myTabTabs .nav-tabs > .active > a:hover,
#myTabTabs .nav-tabs > .active > a:focus,
#myTabTabs .nav-tabs > li > a:hover {
background: #ffffff;
color: #3aa6d5;
outline: none;
-moz-box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.18), 1px 1px 1px rgba(255, 255, 255, 0.5);
-webkit-box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.18), 1px 1px 1px rgba(255, 255, 255, 0.5);
box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.18), 1px 1px 1px rgba(255, 255, 255, 0.5);
border: 1px solid rgba(0, 0, 0, 0.14);
/* stroke */
}
.tab-content {
background: none repeat scroll 0 0 #FAFAFA;
border-left: 1px solid #DDDDDD;
border-right: 1px solid #DDDDDD;
border-bottom: 1px solid #DDDDDD;
padding: 20px;
border-radius: 0px 0px 8px 8px;
}
#system-message-container {
margin-bottom: 10px;
}
/* Opacity Slider */
.opacityvalue {
background-color: #EEEEEE;
border: 1px solid #CCCCCC;
border-radius: 3px;
display: inline-block;
font-size: 13px;
font-weight: normal;
height: 18px;
line-height: 18px;
min-width: 16px;
padding: 1px 5px;
text-align: center;
text-shadow: 0 1px 0 #FFFFFF;
}
input[type="range"] {
margin: 0 5px;
padding: 0;
width: 150px;
}
#jform_params_social_custom_modal .btn-success,
#jform_params_social_custom_modal .btn-danger {
background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0.1) 0%, rgba(0, 0, 0, 0) 100%);
background-image: -ms-linear-gradient(bottom, rgba(0, 0, 0, 0.1) 0%, rgba(0, 0, 0, 0) 100%);
background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, 0.1) 0%, rgba(0, 0, 0, 0) 100%);
background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.1) 0%, rgba(0, 0, 0, 0) 100%);
background-image: linear-gradient(bottom, rgba(0, 0, 0, 0.1) 0%, rgba(0, 0, 0, 0) 100%);
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.2) inset, 0 1px 2px rgba(0, 0, 0, 0.05);
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
border-width: 0px;
padding: 7px 14px 4px;
}
#jform_params_social_custom_modal .btn-success:hover,
#jform_params_social_custom_modal .btn-danger:hover {
background-position: 0 0;
}
#jform_params_social_custom_modal .btn-success {
background-color: #51A351;
}
#jform_params_social_custom_modal .btn-success:hover {
background-color: #408140;
}
#jform_params_social_custom_modal .btn-danger {
background-color: #BD362F;
}
#jform_params_social_custom_modal .btn-danger:hover {
background-color: #942a25;
}
#installer-install .moduleinfo {
padding: 20px;
}
/* Subforms */
.subform-repeatable {
padding-right: 0;
border-top: 1px solid #eaeaea;
}
.subform-repeatable > .btn-toolbar {
display: none;
}
.subform-repeatable .subform-repeatable-group {
position: relative;
max-width: 900px;
padding: 0;
padding-top: 40px;
background-color: #f9f9f9;
margin: 10px;
border: 1px solid #ddd;
}
.subform-repeatable .subform-repeatable-group > .btn-toolbar {
position: absolute;
right: 10px;
top: 2px;
margin-top: 6px !important;
}
.subform-repeatable .subform-repeatable-group .control-group {
margin-bottom: 10px;
}
.subform-repeatable .btn-success,
.subform-repeatable .btn-danger,
.subform-repeatable .btn-primary {
position: static !important;
cursor: pointer;
display: inline-block;
font-size: 13px;
line-height: 18px !important;
margin: 0 0 0 -1px !important;
padding: 4px 12px !important;
border-width: 1px !important;
}
.subform-repeatable .btn-success {
color: #333 !important;
}
.subform-repeatable .btn-success {
border-radius: 3px 0 0 3px !important;
}
.subform-repeatable .btn-danger {
border-radius: 0 !important;
}
.subform-repeatable .btn-primary {
border-radius: 0 3px 3px 0 !important;
}
.subform-repeatable fieldset {
background-color: #f3f3f3;
padding: 10px 20px 10px;
}
.subform-repeatable .btn-group {
border: 0;
background-color: transparent;
}
.subform-repeatable .slideshow-subform .control-group {
margin-bottom: 6px;
margin-top: 5px;
display: inline-block;
}
.subform-repeatable .slideshow-subform .control-label {
display: none !important;
}
.subform-repeatable .slideshow-subform .controls {
margin-left: 0px !important;
padding-bottom: 0 !important;
}
.form-horizontal .control-label {
padding-right: 0 !important;
}
.moduleoverrides-subform input ~ .control-group {
display: inline-block;
text-align: left;
vertical-align: top;
margin-top: 0 !important;
margin-bottom: 5px !important;
}
.moduleoverrides-subform input ~ .control-group .control-label {
display: none;
}
.moduleoverrides-subform input ~ .control-group .controls {
margin-left: 0;
margin-right: 10px;
}
.moduleoverrides-subform input ~ .control-group .input-prepend.input-append input {
max-width: 30px;
}
.moduleoverrides-subform input + .control-group {
display: inline-block;
}
.moduleoverrides-subform input + .control-group .control-label {
display: block;
}
input[value="margin"] + .control-group {
display: block;
height: 0;
width: 100%;
}
input[value="margin"] + .control-group .control-label {
display: none;
}
input[value="margin"] + .control-group + .control-group .control-label {
display: inline-block;
}
#attrib-H3MODULEWIDTHS hr {
margin: 0 0 -10px;
}
/* Subform Lightbox Fix */
#sbox-overlay {
position: fixed !important;
}
#jpelement_list_items_added{
margin-left: 0;
}
#jpelement_list_items_added li{
list-style: none;
margin: 2px 0;
}
#jpelement_list_items_added li span.icon-cancel{
cursor: pointer;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
<html><body bgcolor="#FFFFFF"></body></html>

View File

@ -0,0 +1,137 @@
.timeline {
border-left:3px solid #c00;
border-bottom-right-radius:2px;
border-top-right-radius:2px;
position:relative;
padding:0 30px;
margin-left:280px
}
.timeline .item {
position:relative;
margin-bottom:45px
}
.timeline .item:last-child {
margin-bottom:0
}
.timeline .item:before {
content:"";
position:absolute;
left:-43px;
top:0;
display:inline-block;
width:17px;
height:17px;
-webkit-border-radius:50%;
-moz-border-radius:50%;
-ms-border-radius:50%;
-o-border-radius:50%;
border-radius:50%;
-moz-background-clip:padding;
-webkit-background-clip:padding-box;
background-clip:padding-box;
background:#fff;
border:3px solid #c00
}
.timeline .item:after {
content:"";
position:absolute;
left:-37px;
top:6px;
display:inline-block;
width:10px;
height:10px;
-webkit-border-radius:50%;
-moz-border-radius:50%;
-ms-border-radius:50%;
-o-border-radius:50%;
border-radius:50%;
-moz-background-clip:padding;
-webkit-background-clip:padding-box;
background-clip:padding-box;
background-color:#c00;
z-index:10
}
.timeline .work-place {
position:relative
}
.timeline .location {
position:absolute;
right:0;
top:5px;
color:#8a8a8a
}
.timeline .place {
margin-top:0;
margin-bottom:5px;
font-size:24px;
font-weight:300;
margin-left: 50px;
}
.timeline .job-meta {
position:absolute;
left:-280px;
top:0
}
.timeline .job-meta .title {
font-size:18px;
color:#c00;
max-width:220px
}
.timeline .job-meta .time {
color:#8a8a8a
}
.timeline .job-desc {
color:#666
}
.timeline .item-social-icons {
left: 0px !important;
top: -7px !important;
background: #c00 !important;
}
.timeline .btn-box{
position: relative;
padding: 6px 0;
}
.timeline .btn-box a{
padding: 8px 20px;
font-size: 14px;
background-color: #c00;
color: #ffffff;
border-top:2px solid transparent;
border-bottom:2px solid transparent;
border-radius: 5px;
}
.timeline .note-image{
float: left;
margin-right: 15px;
margin-bottom: 15px;
max-width: 250px;
height: auto;
}
@media (max-width: 767px) {
.timeline {
margin-left:0;
padding-right:0
}
.timeline .item {
margin-bottom:45px !important
}
.timeline .location {
position:relative; }
.timeline .place {
margin-bottom:5px
}
.timeline .job-meta {
position:static;
margin-bottom:15px
}
.timeline .job-meta .title {
max-width:none
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 434 KiB

View File

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>
<json>
<![CDATA[
{
"fontFamily": "lg",
"majorVersion": 1,
"minorVersion": 0,
"fontURL": "https://github.com/sachinchoolur/lightGallery",
"copyright": "sachin",
"license": "MLT",
"licenseURL": "http://opensource.org/licenses/MIT",
"version": "Version 1.0",
"fontId": "lg",
"psName": "lg",
"subFamily": "Regular",
"fullName": "lg",
"description": "Font generated by IcoMoon."
}
]]>
</json>
</metadata>
<defs>
<font id="lg" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64"/>
<missing-glyph horiz-adv-x="1024"/>
<glyph unicode=" " horiz-adv-x="512" d=""/>
<glyph unicode="" glyph-name="pause_circle_outline" data-tags="pause_circle_outline" d="M554 256.667v340h86v-340h-86zM512 84.667q140 0 241 101t101 241-101 241-241 101-241-101-101-241 101-241 241-101zM512 852.667q176 0 301-125t125-301-125-301-301-125-301 125-125 301 125 301 301 125zM384 256.667v340h86v-340h-86z"/>
<glyph unicode="" glyph-name="play_circle_outline" data-tags="play_circle_outline" d="M512 84.667q140 0 241 101t101 241-101 241-241 101-241-101-101-241 101-241 241-101zM512 852.667q176 0 301-125t125-301-125-301-301-125-301 125-125 301 125 301 301 125zM426 234.667v384l256-192z"/>
<glyph unicode="" glyph-name="stack-2" data-tags="stack-2" d="M384 853.334h426.667q53 0 90.5-37.5t37.5-90.5v-426.667q0-53-37.5-90.5t-90.5-37.5h-426.667q-53 0-90.5 37.5t-37.5 90.5v426.667q0 53 37.5 90.5t90.5 37.5zM170.667 675.334v-547.333q0-17.667 12.5-30.167t30.167-12.5h547.333q-13.333-37.667-46.333-61.5t-74.333-23.833h-426.667q-53 0-90.5 37.5t-37.5 90.5v426.667q0 41.333 23.833 74.333t61.5 46.333zM810.667 768h-426.667q-17.667 0-30.167-12.5t-12.5-30.167v-426.667q0-17.667 12.5-30.167t30.167-12.5h426.667q17.667 0 30.167 12.5t12.5 30.167v426.667q0 17.667-12.5 30.167t-30.167 12.5z"/>
<glyph unicode="" glyph-name="clear" data-tags="clear" d="M810 664.667l-238-238 238-238-60-60-238 238-238-238-60 60 238 238-238 238 60 60 238-238 238 238z"/>
<glyph unicode="" glyph-name="arrow-left" data-tags="arrow-left" d="M426.667 768q17.667 0 30.167-12.5t12.5-30.167q0-18-12.667-30.333l-225.667-225.667h665q17.667 0 30.167-12.5t12.5-30.167-12.5-30.167-30.167-12.5h-665l225.667-225.667q12.667-12.333 12.667-30.333 0-17.667-12.5-30.167t-30.167-12.5q-18 0-30.333 12.333l-298.667 298.667q-12.333 13-12.333 30.333t12.333 30.333l298.667 298.667q12.667 12.333 30.333 12.333z"/>
<glyph unicode="" glyph-name="arrow-right" data-tags="arrow-right" d="M597.333 768q18 0 30.333-12.333l298.667-298.667q12.333-12.333 12.333-30.333t-12.333-30.333l-298.667-298.667q-12.333-12.333-30.333-12.333-18.333 0-30.5 12.167t-12.167 30.5q0 18 12.333 30.333l226 225.667h-665q-17.667 0-30.167 12.5t-12.5 30.167 12.5 30.167 30.167 12.5h665l-226 225.667q-12.333 12.333-12.333 30.333 0 18.333 12.167 30.5t30.5 12.167z"/>
<glyph unicode="" glyph-name="vertical_align_bottom" data-tags="vertical_align_bottom" d="M170 128.667h684v-86h-684v86zM682 384.667l-170-172-170 172h128v426h84v-426h128z"/>
<glyph unicode="" glyph-name="apps" data-tags="apps" d="M682 84.667v172h172v-172h-172zM682 340.667v172h172v-172h-172zM426 596.667v172h172v-172h-172zM682 768.667h172v-172h-172v172zM426 340.667v172h172v-172h-172zM170 340.667v172h172v-172h-172zM170 84.667v172h172v-172h-172zM426 84.667v172h172v-172h-172zM170 596.667v172h172v-172h-172z"/>
<glyph unicode="" glyph-name="fullscreen" data-tags="fullscreen" d="M598 724.667h212v-212h-84v128h-128v84zM726 212.667v128h84v-212h-212v84h128zM214 512.667v212h212v-84h-128v-128h-84zM298 340.667v-128h128v-84h-212v212h84z"/>
<glyph unicode="" glyph-name="fullscreen_exit" data-tags="fullscreen_exit" d="M682 596.667h128v-84h-212v212h84v-128zM598 128.667v212h212v-84h-128v-128h-84zM342 596.667v128h84v-212h-212v84h128zM214 256.667v84h212v-212h-84v128h-128z"/>
<glyph unicode="" glyph-name="zoom_in" data-tags="zoom_in" d="M512 512.667h-86v-86h-42v86h-86v42h86v86h42v-86h86v-42zM406 340.667q80 0 136 56t56 136-56 136-136 56-136-56-56-136 56-136 136-56zM662 340.667l212-212-64-64-212 212v34l-12 12q-76-66-180-66-116 0-197 80t-81 196 81 197 197 81 196-81 80-197q0-104-66-180l12-12h34z"/>
<glyph unicode="" glyph-name="zoom_out" data-tags="zoom_out" d="M298 554.667h214v-42h-214v42zM406 340.667q80 0 136 56t56 136-56 136-136 56-136-56-56-136 56-136 136-56zM662 340.667l212-212-64-64-212 212v34l-12 12q-76-66-180-66-116 0-197 80t-81 196 81 197 197 81 196-81 80-197q0-104-66-180l12-12h34z"/>
<glyph unicode="" glyph-name="share" data-tags="share" d="M768 252.667c68 0 124-56 124-124s-56-126-124-126-124 58-124 126c0 10 0 20 2 28l-302 176c-24-22-54-34-88-34-70 0-128 58-128 128s58 128 128 128c34 0 64-12 88-34l300 174c-2 10-4 20-4 30 0 70 58 128 128 128s128-58 128-128-58-128-128-128c-34 0-64 14-88 36l-300-176c2-10 4-20 4-30s-2-20-4-30l304-176c22 20 52 32 84 32z"/>
<glyph unicode="" glyph-name="facebook-with-circle" data-tags="facebook-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM628.429 612.659h-73.882c-8.755 0-18.483-11.52-18.483-26.829v-53.35h92.416l-13.978-76.083h-78.438v-228.403h-87.194v228.403h-79.104v76.083h79.104v44.749c0 64.205 44.544 116.378 105.677 116.378h73.882v-80.947z"/>
<glyph unicode="" glyph-name="google-with-circle" data-tags="google+-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM483.686 249.805c-30.874-15.002-64.102-16.589-76.954-16.589-2.458 0-3.84 0-3.84 0s-1.178 0-2.765 0c-20.070 0-119.962 4.608-119.962 95.59 0 89.395 108.8 96.41 142.131 96.41h0.87c-19.251 25.702-15.258 51.61-15.258 51.61-1.69-0.102-4.147-0.205-7.168-0.205-12.544 0-36.762 1.997-57.549 15.411-25.498 16.384-38.4 44.288-38.4 82.893 0 109.107 119.142 113.51 120.32 113.613h118.989v-2.611c0-13.312-23.91-15.923-40.192-18.125-5.53-0.819-16.64-1.894-19.763-3.482 30.157-16.128 35.021-41.421 35.021-79.104 0-42.906-16.794-65.587-34.611-81.51-11.059-9.882-19.712-17.613-19.712-28.006 0-10.189 11.878-20.582 25.702-32.717 22.579-19.917 53.555-47.002 53.555-92.723 0-47.258-20.326-81.050-60.416-100.454zM742.4 460.8h-76.8v-76.8h-51.2v76.8h-76.8v51.2h76.8v76.8h51.2v-76.8h76.8v-51.2zM421.018 401.92c-2.662 0-5.325-0.102-8.038-0.307-22.733-1.69-43.725-10.189-58.88-24.013-15.053-13.619-22.733-30.822-21.658-48.179 2.304-36.403 41.37-57.702 88.832-54.323 46.694 3.379 77.824 30.31 75.571 66.714-2.15 34.202-31.898 60.109-75.827 60.109zM465.766 599.808c-12.39 43.52-32.358 56.422-63.386 56.422-3.328 0-6.707-0.512-9.933-1.382-13.466-3.84-24.166-15.053-30.106-31.744-6.093-16.896-6.451-34.509-1.229-54.579 9.472-35.891 34.97-61.901 60.672-61.901 3.379 0 6.758 0.41 9.933 1.382 28.109 7.885 45.722 50.79 34.048 91.802z"/>
<glyph unicode="" glyph-name="pinterest-with-circle" data-tags="pinterest-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM545.638 344.32c-31.539 2.406-44.749 18.022-69.427 32.973-13.568-71.219-30.157-139.52-79.309-175.206-15.206 107.725 22.221 188.518 39.629 274.381-29.645 49.92 3.533 150.323 66.099 125.645 76.954-30.515-66.662-185.6 29.747-205.005 100.659-20.173 141.773 174.694 79.36 237.978-90.214 91.494-262.502 2.099-241.306-128.87 5.12-32 38.246-41.728 13.21-85.914-57.702 12.8-74.957 58.317-72.704 118.989 3.533 99.328 89.242 168.909 175.155 178.483 108.698 12.083 210.688-39.885 224.819-142.182 15.821-115.405-49.101-240.282-165.274-231.27z"/>
<glyph unicode="" glyph-name="twitter-with-circle" data-tags="twitter-with-circle" d="M512 952.32c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM711.936 549.683c0.205-4.198 0.256-8.397 0.256-12.493 0-128-97.331-275.507-275.405-275.507-54.682 0-105.574 15.974-148.378 43.52 7.526-0.922 15.258-1.28 23.091-1.28 45.363 0 87.091 15.411 120.218 41.421-42.342 0.819-78.080 28.774-90.419 67.174 5.888-1.075 11.93-1.69 18.176-1.69 8.806 0 17.408 1.178 25.498 3.379-44.288 8.909-77.67 48.026-77.67 94.925v1.178c13.056-7.219 28.006-11.622 43.878-12.134-26.010 17.408-43.059 47.002-43.059 80.64 0 17.715 4.762 34.406 13.107 48.691 47.77-58.573 119.040-97.075 199.526-101.222-1.69 7.117-2.509 14.49-2.509 22.118 0 53.402 43.315 96.819 96.819 96.819 27.802 0 52.992-11.776 70.656-30.618 22.067 4.403 42.752 12.39 61.44 23.501-7.219-22.579-22.528-41.574-42.547-53.606 19.61 2.406 38.246 7.578 55.603 15.309-12.954-19.405-29.389-36.506-48.282-50.125z"/>
</font></defs></svg>

After

Width:  |  Height:  |  Size: 8.6 KiB

View File

@ -0,0 +1 @@
<html><body bgcolor="#FFFFFF"></body></html>

View File

@ -0,0 +1,877 @@
<?php
/**
* @title Timeline
* @version 4.0.1
* @copyright Copyright (C) 2020 mixwebtemplates.com, All rights reserved.
* @license GNU General Public License version 3 or later.
* @author url http://www.mixwebtemplates.com/
* @developers mixwebtemplates.com
*/
defined('_JEXEC') or die;
jimport('joomla.filesystem.folder');
if(!defined('DS')) define('DS', DIRECTORY_SEPARATOR);
$com_path = JPATH_SITE.'/components/com_content/';
if (!class_exists('ContentRouter') || !class_exists('ContentHelperRoute'))
{
require_once $com_path.'router.php';
require_once $com_path.'helpers/route.php';
}
JModelLegacy::addIncludePath($com_path . '/models', 'ContentModel');
/**
* Helper for mod_articles_category
*
* @package Joomla.Site
* @subpackage mod_articles_category
*/
abstract class TimeLineHelper
{
// Temporary getTagTreeArray function until bug in Joomla has been fixed
public static function getTagTreeArray($id, &$tagTreeArray = array())
{
// Get a level row instance.
JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_tags/tables'); // This path is missing in Joomla core file. It must be fixed in next version 3.3.7
$table = JTable::getInstance('Tag', 'TagsTable');
if ($table->isLeaf($id))
{
$tagTreeArray[] = $id;
return $tagTreeArray;
}
$tagTree = $table->getTree($id);
// Attempt to load the tree
if ($tagTree)
{
foreach ($tagTree as $tag)
{
$tagTreeArray[] = $tag->id;
}
return $tagTreeArray;
}
}
public static function getList(&$params)
{
// Get an instance of the generic articles model
$articles = JModelLegacy::getInstance('Articles', 'ContentModel', array('ignore_request' => true));
// Set application parameters in model
$app = JFactory::getApplication();
$appParams = $app->getParams();
$articles->setState('params', $appParams);
// Set the filters based on the module params
$articles->setState('list.start', 0);
$articles->setState('list.limit', (int) $params->get('count', 0));
$articles->setState('filter.published', 1);
// Access filter
$access = !JComponentHelper::getParams('com_content')->get('show_noauth');
$authorised = JAccess::getAuthorisedViewLevels(JFactory::getUser()->get('id'));
$articles->setState('filter.access', $access);
// Prep for Normal or Dynamic Modes
$mode = $params->get('mode', 'normal');
switch ($mode)
{
case 'dynamic':
$option = $app->input->get('option');
$view = $app->input->get('view');
if ($option === 'com_content')
{
switch($view)
{
case 'category':
$catids = array($app->input->getInt('id'));
break;
case 'categories':
$catids = array($app->input->getInt('id'));
break;
case 'article':
if ($params->get('show_on_article_page', 1))
{
$article_id = $app->input->getInt('id');
$catid = $app->input->getInt('catid');
if (!$catid)
{
// Get an instance of the generic article model
$article = JModelLegacy::getInstance('Article', 'ContentModel', array('ignore_request' => true));
$article->setState('params', $appParams);
$article->setState('filter.published', 1);
$article->setState('article.id', (int) $article_id);
$item = $article->getItem();
$catids = array($item->catid);
}
else
{
$catids = array($catid);
}
}
else {
// Return right away if show_on_article_page option is off
return;
}
break;
case 'featured':
default:
// Return right away if not on the category or article views
return;
}
}
else {
// Return right away if not on a com_content page
return;
}
break;
case 'normal':
default:
$catids = $params->get('catid');
$articles->setState('filter.category_id.include', (bool) $params->get('category_filtering_type', 1));
$tagIds = $params->get('tag_id');
break;
}
// Category filter
if ($catids)
{
if ($params->get('show_child_category_articles', 0) && (int) $params->get('levels', 0) > 0)
{
// Get an instance of the generic categories model
$categories = JModelLegacy::getInstance('Categories', 'ContentModel', array('ignore_request' => true));
$categories->setState('params', $appParams);
$levels = $params->get('levels', 1) ? $params->get('levels', 1) : 9999;
$categories->setState('filter.get_children', $levels);
$categories->setState('filter.published', 1);
$categories->setState('filter.access', $access);
$additional_catids = array();
foreach ($catids as $catid)
{
$categories->setState('filter.parentId', $catid);
$recursive = true;
$items = $categories->getItems($recursive);
if ($items)
{
foreach ($items as $category)
{
$condition = (($category->level - $categories->getParent()->level) <= $levels);
if ($condition)
{
$additional_catids[] = $category->id;
}
}
}
}
$catids = array_unique(array_merge($catids, $additional_catids));
}
$articles->setState('filter.category_id', $catids);
}
// Tag filter
if ($tagIds)
{
$includeTagChildren = $params->get('tag_include_children');
if ($includeTagChildren)
{
$tagTreeArray = array();
foreach ($tagIds as $tag)
{
self::getTagTreeArray($tag, $tagTreeArray);
}
$tagIds = array_unique(array_merge($tagIds, $tagTreeArray));
}
$tagIds = implode(',', $tagIds);
$articles->setState('filter.tag_id', $tagIds);
$articles->setState('filter.tag_id.include', (bool) $params->get('tag_filtering_type'));
}
// Ordering
$articles->setState('list.ordering', $params->get('article_ordering', 'a.ordering'));
$articles->setState('list.direction', $params->get('article_ordering_direction', 'ASC'));
// New Parameters
$articles->setState('filter.featured', $params->get('show_front', 'show'));
$articles->setState('filter.author_id', $params->get('created_by', ""));
$articles->setState('filter.author_id.include', $params->get('author_filtering_type', 1));
$articles->setState('filter.author_alias', $params->get('created_by_alias', ""));
$articles->setState('filter.author_alias.include', $params->get('author_alias_filtering_type', 1));
$excluded_articles = $params->get('excluded_articles', '');
if ($excluded_articles)
{
$excluded_articles = explode("\r\n", $excluded_articles);
$articles->setState('filter.article_id', $excluded_articles);
$articles->setState('filter.article_id.include', false); // Exclude
}
$date_filtering = $params->get('date_filtering', 'off');
if ($date_filtering !== 'off')
{
$articles->setState('filter.date_filtering', $date_filtering);
$articles->setState('filter.date_field', $params->get('date_field', 'a.created'));
$articles->setState('filter.start_date_range', $params->get('start_date_range', '1000-01-01 00:00:00'));
$articles->setState('filter.end_date_range', $params->get('end_date_range', '9999-12-31 23:59:59'));
$articles->setState('filter.relative_date', $params->get('relative_date', 30));
}
// Filter by language
$articles->setState('filter.language', $app->getLanguageFilter());
// Get the current user for authorisation checks
$user = JFactory::getUser();
// Create a new query object.
$db = JFactory::getDbo();
$query = $db->getQuery(true);
// Select the required fields from the table.
$query->select(
$articles->getState(
'list.select',
'a.id, a.title, a.alias, a.introtext, a.fulltext, ' .
'a.checked_out, a.checked_out_time, ' .
'a.catid, a.created, a.created_by, a.created_by_alias, ' .
// Use created if modified is 0
'CASE WHEN a.modified = ' . $db->quote($db->getNullDate()) . ' THEN a.created ELSE a.modified END as modified, ' .
'a.modified_by, uam.name as modified_by_name,' .
// Use created if publish_up is 0
'CASE WHEN a.publish_up = ' . $db->quote($db->getNullDate()) . ' THEN a.created ELSE a.publish_up END as publish_up,' .
'a.publish_down, a.images, a.urls, a.attribs, a.metadata, a.metakey, a.metadesc, a.access, ' .
'a.hits, a.xreference, a.featured,' . ' ' . $query->length('a.fulltext') . ' AS readmore'
)
);
// Process an Archived Article layout
if ($articles->getState('filter.published') == 2)
{
// If badcats is not null, this means that the article is inside an archived category
// In this case, the state is set to 2 to indicate Archived (even if the article state is Published)
$query->select($articles->getState('list.select', 'CASE WHEN badcats.id is null THEN a.state ELSE 2 END AS state'));
}
else
{
/*
Process non-archived layout
If badcats is not null, this means that the article is inside an unpublished category
In this case, the state is set to 0 to indicate Unpublished (even if the article state is Published)
*/
$query->select($articles->getState('list.select', 'CASE WHEN badcats.id is not null THEN 0 ELSE a.state END AS state'));
}
$query->from('#__content AS a');
/*// Join over the frontpage articles.
if ($articles->context != 'com_content.featured')
{
$query->join('LEFT', '#__content_frontpage AS fp ON fp.content_id = a.id');
}*/
// Join over the categories.
$query->select('c.title AS category_title, c.path AS category_route, c.access AS category_access, c.alias AS category_alias')
->join('LEFT', '#__categories AS c ON c.id = a.catid');
// Join over the users for the author and modified_by names.
$query->select("CASE WHEN a.created_by_alias > ' ' THEN a.created_by_alias ELSE ua.name END AS author")
->select("ua.email AS author_email")
->join('LEFT', '#__users AS ua ON ua.id = a.created_by')
->join('LEFT', '#__users AS uam ON uam.id = a.modified_by');
// Join over the categories to get parent category titles
$query->select('parent.title as parent_title, parent.id as parent_id, parent.path as parent_route, parent.alias as parent_alias')
->join('LEFT', '#__categories as parent ON parent.id = c.parent_id');
// Join on voting table
$query->select('ROUND(v.rating_sum / v.rating_count, 0) AS rating, v.rating_count as rating_count')
->join('LEFT', '#__content_rating AS v ON a.id = v.content_id');
// Join to check for category published state in parent categories up the tree
$query->select('c.published, CASE WHEN badcats.id is null THEN c.published ELSE 0 END AS parents_published');
$subquery = 'SELECT cat.id as id FROM #__categories AS cat JOIN #__categories AS parent ';
$subquery .= 'ON cat.lft BETWEEN parent.lft AND parent.rgt ';
$subquery .= 'WHERE parent.extension = ' . $db->quote('com_content');
if ($articles->getState('filter.published') == 2)
{
// Find any up-path categories that are archived
// If any up-path categories are archived, include all children in archived layout
$subquery .= ' AND parent.published = 2 GROUP BY cat.id ';
// Set effective state to archived if up-path category is archived
$publishedWhere = 'CASE WHEN badcats.id is null THEN a.state ELSE 2 END';
}
else
{
// Find any up-path categories that are not published
// If all categories are published, badcats.id will be null, and we just use the article state
$subquery .= ' AND parent.published != 1 GROUP BY cat.id ';
// Select state to unpublished if up-path category is unpublished
$publishedWhere = 'CASE WHEN badcats.id is null THEN a.state ELSE 0 END';
}
$query->join('LEFT OUTER', '(' . $subquery . ') AS badcats ON badcats.id = c.id');
// Filter by access level.
if ($access = $articles->getState('filter.access'))
{
$groups = implode(',', $user->getAuthorisedViewLevels());
$query->where('a.access IN (' . $groups . ')')
->where('c.access IN (' . $groups . ')');
}
// Filter by published state
$published = $articles->getState('filter.published');
if (is_numeric($published))
{
// Use article state if badcats.id is null, otherwise, force 0 for unpublished
$query->where($publishedWhere . ' = ' . (int) $published);
}
elseif (is_array($published))
{
JArrayHelper::toInteger($published);
$published = implode(',', $published);
// Use article state if badcats.id is null, otherwise, force 0 for unpublished
$query->where($publishedWhere . ' IN (' . $published . ')');
}
// Filter by featured state
$featured = $articles->getState('filter.featured');
switch ($featured)
{
case 'hide':
$query->where('a.featured = 0');
break;
case 'only':
$query->where('a.featured = 1');
break;
case 'show':
default:
// Normally we do not discriminate
// between featured/unfeatured items.
break;
}
// Filter by a single or group of articles.
$articleId = $articles->getState('filter.article_id');
if (is_numeric($articleId))
{
$type = $articles->getState('filter.article_id.include', true) ? '= ' : '<> ';
$query->where('a.id ' . $type . (int) $articleId);
}
elseif (is_array($articleId))
{
JArrayHelper::toInteger($articleId);
$articleId = implode(',', $articleId);
$type = $articles->getState('filter.article_id.include', true) ? 'IN' : 'NOT IN';
$query->where('a.id ' . $type . ' (' . $articleId . ')');
}
// Filter by tags
if ($tagIds)
{
$tagtype = $articles->getState('filter.tag_id.include', true) ? 'IN' : 'NOT IN';
$tagMatch = $params->get('tag_match');
$includeChildren = $params->get('tag_include_children');
$tagIdsCount = count(explode(',', $tagIds));
$query->join('INNER', '#__contentitem_tag_map AS m ON m.content_item_id = a.id');
$query->where('m.tag_id ' . $tagtype . ' (' . $tagIds . ')');
if ($params->get('tag_filtering_type') && !$includeChildren && !$tagMatch)
{
$query->group('a.id HAVING COUNT(a.id) = '.$tagIdsCount);
}
else if ($params->get('tag_filtering_type') && $includeChildren)
{
$query->group('a.id');
}
else //if (!$params->get('tag_filtering_type'))
{
$query->group('a.id');
}
}
// Filter by a single or group of categories
$categoryId = $articles->getState('filter.category_id');
if (is_numeric($categoryId))
{
$type = $this->getState('filter.category_id.include', true) ? '= ' : '<> ';
// Add subcategory check
$includeSubcategories = $this->getState('filter.subcategories', false);
$categoryEquals = 'a.catid ' . $type . (int) $categoryId;
if ($includeSubcategories)
{
$levels = (int) $articles->getState('filter.max_category_levels', '1');
// Create a subquery for the subcategory list
$subQuery = $db->getQuery(true)
->select('sub.id')
->from('#__categories as sub')
->join('INNER', '#__categories as this ON sub.lft > this.lft AND sub.rgt < this.rgt')
->where('this.id = ' . (int) $categoryId);
if ($levels >= 0)
{
$subQuery->where('sub.level <= this.level + ' . $levels);
}
// Add the subquery to the main query
$query->where('(' . $categoryEquals . ' OR a.catid IN (' . $subQuery->__toString() . '))');
}
else
{
$query->where($categoryEquals);
}
}
elseif (is_array($categoryId) && (count($categoryId) > 0))
{
JArrayHelper::toInteger($categoryId);
$categoryId = implode(',', $categoryId);
if (!empty($categoryId))
{
$type = $articles->getState('filter.category_id.include', true) ? 'IN' : 'NOT IN';
$query->where('a.catid ' . $type . ' (' . $categoryId . ')');
}
}
// Filter by author
$authorId = $articles->getState('filter.author_id');
$authorWhere = '';
if (is_numeric($authorId))
{
$type = $articles->getState('filter.author_id.include', true) ? '= ' : '<> ';
$authorWhere = 'a.created_by ' . $type . (int) $authorId;
}
elseif (is_array($authorId))
{
JArrayHelper::toInteger($authorId);
$authorId = implode(',', $authorId);
if ($authorId)
{
$type = $articles->getState('filter.author_id.include', true) ? 'IN' : 'NOT IN';
$authorWhere = 'a.created_by ' . $type . ' (' . $authorId . ')';
}
}
// Filter by author alias
$authorAlias = $articles->getState('filter.author_alias');
$authorAliasWhere = '';
if (is_string($authorAlias) && $authorAlias)
{
$type = $articles->getState('filter.author_alias.include', true) ? '= ' : '<> ';
$authorAliasWhere = 'a.created_by_alias ' . $type . $db->quote($authorAlias);
}
elseif (is_array($authorAlias))
{
$first = current($authorAlias);
if (!empty($first))
{
JArrayHelper::toString($authorAlias);
foreach ($authorAlias as $key => $alias)
{
$authorAlias[$key] = $db->quote($alias);
}
$authorAlias = implode(',', $authorAlias);
if ($authorAlias)
{
$type = $articles->getState('filter.author_alias.include', true) ? 'IN' : 'NOT IN';
$authorAliasWhere = 'a.created_by_alias ' . $type . ' (' . $authorAlias .
')';
}
}
}
if (!empty($authorWhere) && !empty($authorAliasWhere))
{
$query->where('(' . $authorWhere . ' OR ' . $authorAliasWhere . ')');
}
elseif (empty($authorWhere) && empty($authorAliasWhere))
{
// If both are empty we don't want to add to the query
}
else
{
// One of these is empty, the other is not so we just add both
$query->where($authorWhere . $authorAliasWhere);
}
// Define null and now dates
$nullDate = $db->quote($db->getNullDate());
$nowDate = $db->quote(JFactory::getDate()->toSql());
// Filter by start and end dates.
if ((!$user->authorise('core.edit.state', 'com_content')) && (!$user->authorise('core.edit', 'com_content')))
{
$query ->where('(a.publish_up = '.$nullDate.' OR a.publish_up <= '.$nowDate.')')
->where('(a.publish_down = '.$nullDate.' OR a.publish_down >= '.$nowDate.')');
}
// Filter by Date Range or Relative Date
$dateFiltering = $articles->getState('filter.date_filtering', 'off');
$dateField = $articles->getState('filter.date_field', 'a.created');
switch ($dateFiltering)
{
case 'range':
$startDateRange = $db->quote($articles->getState('filter.start_date_range', $nullDate));
$endDateRange = $db->quote($articles->getState('filter.end_date_range', $nullDate));
$query->where(
'(' . $dateField . ' >= ' . $startDateRange . ' AND ' . $dateField .
' <= ' . $endDateRange . ')'
);
break;
case 'relative':
$relativeDate = (int) $articles->getState('filter.relative_date', 0);
$query->where(
$dateField . ' >= DATE_SUB(' . $nowDate . ', INTERVAL ' .
$relativeDate . ' DAY)'
);
break;
case 'off':
default:
break;
}
// Process the filter for list views with user-entered filters
$articleparams = $articles->getState('params');
if ((is_object($articleparams)) && ($articleparams->get('filter_field') != 'hide') && ($filter = $articles->getState('list.filter')))
{
// Clean filter variable
$filter = JString::strtolower($filter);
$hitsFilter = (int) $filter;
$filter = $db->quote('%' . $db->escape($filter, true) . '%', false);
switch ($articleparams->get('filter_field'))
{
case 'author':
$query->where(
'LOWER( CASE WHEN a.created_by_alias > ' . $db->quote(' ') .
' THEN a.created_by_alias ELSE ua.name END ) LIKE ' . $filter . ' '
);
break;
case 'hits':
$query->where('a.hits >= ' . $hitsFilter . ' ');
break;
case 'title':
default:
// Default to 'title' if parameter is not valid
$query->where('LOWER( a.title ) LIKE ' . $filter);
break;
}
}
// Filter by language
if ($articles->getState('filter.language'))
{
$query->where('a.language in (' . $db->quote(JFactory::getLanguage()->getTag()) . ',' . $db->quote('*') . ')');
}
// Add the list ordering clause.
$query->order($articles->getState('list.ordering', 'a.ordering') . ' ' . $articles->getState('list.direction', 'ASC'));
$db->setQuery($query, $articles->setState('list.start'), $articles->setState('list.limit'));
// Load the results as a list of stdClass objects (see later for more options on retrieving data).
$items = $db->loadObjectList();
// Display options
$show_date = $params->get('show_date', 0);
$show_date_field = $params->get('show_date_field', 'created');
$show_date_format = $params->get('show_date_format', 'Y-m-d H:i:s');
$show_category = $params->get('show_category', 0);
$show_hits = $params->get('show_hits', 0);
$show_author = $params->get('show_author', 0);
$show_introtext = $params->get('show_introtext', 0);
$introtext_limit = $params->get('introtext_limit', 15);
$title_limit = $params->get('title_limit', 15);
// Find current Article ID if on an article page
$option = $app->input->get('option');
$view = $app->input->get('view');
if ($option === 'com_content' && $view === 'article')
{
$active_article_id = $app->input->getInt('id');
}
else
{
$active_article_id = 0;
}
// Prepare data for display using display options
foreach ($items as &$item)
{
// General image
$item->mainimage = false;
$images = json_decode($item->images, true);
if ($params->get('image_type')=='introtext' && $images['image_intro'])
{
$item->mainimage = JURI::root().''.$images['image_intro'];
}
else if ($params->get('image_type')=='fulltext' && $images['image_fulltext'])
{
$item->mainimage = JURI::root().''.$images['image_fulltext'];
}
else if ($params->get('image_type')=='inline')
{
$introtext_temp = strip_tags($item->introtext, '<img>');
preg_match('/<img[^>]+>/i', $introtext_temp, $new_image);
$src = false;
if ($new_image) {
$doc = new DOMDocument();
$doc->loadHTML($new_image[0]);
$xpath = new DOMXPath($doc);
$src = $xpath->evaluate("string(//img/@src)");
}
if ($src) {
$item->mainimage = JURI::root().''.$src;
} else {
if ($images['image_intro'])
{
$item->mainimage = JURI::root().''.$images['image_intro'];
}
}
}
// Image fallback
if (!$item->mainimage && $params->get('fallback_image'))
{
$item->mainimage = JURI::root().''.$params->get('fallback_image');
}
$item->slug = $item->id.':'.$item->alias;
$item->catslug = $item->catid ? $item->catid .':'.$item->category_alias : $item->catid;
if ($access || in_array($item->access, $authorised))
{
// We know that user has the privilege to view the article
$item->link = JRoute::_(ContentHelperRoute::getArticleRoute($item->slug, $item->catslug));
}
else
{
$app = JFactory::getApplication();
$menu = $app->getMenu();
$menuitems = $menu->getItems('link', 'index.php?option=com_users&view=login');
if (isset($menuitems[0]))
{
$Itemid = $menuitems[0]->id;
}
elseif ($app->input->getInt('Itemid') > 0)
{
// Use Itemid from requesting page only if there is no existing menu
$Itemid = $app->input->getInt('Itemid');
}
$item->link = JRoute::_('index.php?option=com_users&view=login&Itemid='.$Itemid);
}
// Used for styling the active article
$item->active = $item->id == $active_article_id ? 'active' : '';
$item->displayDate = '';
$item->displayDate = JHTML::_('date', $item->$show_date_field, $show_date_format);
if ($item->catid)
{
$item->displayCategoryLink = JRoute::_(ContentHelperRoute::getCategoryRoute($item->catid));
$item->displayCategoryTitle = $show_category ? '<a href="'.$item->displayCategoryLink.'">'.$item->category_title.'</a>' : '';
}
else {
$item->displayCategoryTitle = $show_category ? $item->category_title : '';
}
$item->displayHits = $show_hits ? $item->hits : '';
$item->displayAuthorName = $show_author ? $item->author : '';
// Introtext
$item->displayIntrotext = $item->introtext;
// Allow plugins in introtext
if (!$params->get( 'allowplugins', 0))
{
$item->displayIntrotext = preg_replace('/\{.*\}/', '', $item->displayIntrotext);
$item->displayIntrotext = preg_replace('/\[.*\]/', '', $item->displayIntrotext);
}
else
{
// Plugin events
JPluginHelper::importPlugin('content');
$item->displayIntrotext = JHtml::_('content.prepare', $item->displayIntrotext);
}
// Strip tags
if ($params->get( 'strip_tags', 1))
{
$item->displayIntrotext = self::wordLimit($item->displayIntrotext, $introtext_limit);
}
// Tags
$item_tags = new JHelperTags;
$item->itemTags = $item_tags->getItemTags('com_content.article', $item->id);
$item->title = self::wordLimit($item->title, $title_limit);
}
return $items;
}
public static function _cleanIntrotext($introtext)
{
$introtext = str_replace('<p>', ' ', $introtext);
$introtext = str_replace('</p>', ' ', $introtext);
$introtext = strip_tags($introtext, '<a><em><strong>');
$introtext = trim($introtext);
return $introtext;
}
public static function getFilters($items, $params)
{
// Start output
$output = '';
// Category Filters
if ($params->get('category_filters'))
{
// Create cat filters
$cat_array = array();
foreach($items as $key=>$item)
{
array_push($cat_array, $item->category_title);
}
$cat_array = array_unique($cat_array);
asort($cat_array);
$cat_array = array_values($cat_array);
// Inline filters
if ($params->get('filter_labels'))
{
$output .= '<span>'.JText::_('MOD_MX_TIME_LINE_CATEGORY').'</span>';
}
$output .= '<a class="active" href="#" data-filter="*">'.JText::_('MOD_MX_TIME_LINE_SHOW_ALL').'</a>';
foreach ($cat_array as $category)
{
$cat_name_fixed = self::cleanName($category);
$category = htmlspecialchars($category);
$output .= '<a href="#" data-filter=".cat-'.$cat_name_fixed.'">'.$category.'</a>';
}
}
// Tag Filters
if ($params->get('tag_filters'))
{
// Create tag filters
$tag_array = array();
foreach($items as $key=>$item)
{
if (isset($item->itemTags))
{
foreach($item->itemTags as $key=>$itemTag)
{
array_push($tag_array, $itemTag->title);
}
}
}
$tag_array = array_unique($tag_array);
asort($tag_array);
$tag_array = array_values($tag_array);
// Inline filters
if ($params->get('filter_labels'))
{
$output .= '<span>'.JText::_('MOD_MX_TIME_LINE_TAG').'</span>';
}
$output .= '<a class="active" href="#" data-filter="*">'.JText::_('MOD_MX_TIME_LINE_SHOW_ALL').'</a>';
foreach ($tag_array as $tagName)
{
$tag_name_fixed = self::cleanName($tagName);
$tag = htmlspecialchars($tagName);
$output .= '<a href="#" data-filter=".tag-'.$tag_name_fixed.'">'.$tag.'</a>';
}
}
return $output;
}
public static function cleanName($name)
{
$name_fixed = preg_replace('/(?=\P{Nd})\P{L}/u', '-', $name);
$name_fixed = preg_replace('/[\s-]{2,}/u', '-', $name_fixed);
$name_fixed = htmlspecialchars($name_fixed);
$name_fixed = trim($name_fixed, "-");
return $name_fixed;
}
public static function wordLimit($str, $limit = 100, $end_char = '&#8230;')
{
if (JString::trim($str) == '')
return $str;
// always strip tags for text
$str = strip_tags($str);
$find = array("/\r|\n/u", "/\t/u", "/\s\s+/u");
$replace = array(" ", " ", " ");
$str = preg_replace($find, $replace, $str);
preg_match('/\s*(?:\S*\s*){'.(int)$limit.'}/u', $str, $matches);
if (JString::strlen($matches[0]) == JString::strlen($str))
$end_char = '';
return JString::rtrim($matches[0]).$end_char;
}
}

View File

@ -0,0 +1 @@
<html><body bgcolor="#FFFFFF"></body></html>

View File

@ -0,0 +1,29 @@
<?php
/**
* @title Timeline
* @version 4.0.1
* @copyright Copyright (C) 2020 mixwebtemplates.com, All rights reserved.
* @license GNU General Public License version 3 or later.
* @author url http://www.mixwebtemplates.com/
* @developers mixwebtemplates.com
*/
// no direct access
defined('_JEXEC') or die('Restricted access');
if(!defined('DS')){
define('DS',DIRECTORY_SEPARATOR);
}
// Get Helper function
require_once dirname(__FILE__).'/helper.php';
// Add stylesheets
$document = JFactory::getDocument();
$items = TimeLineHelper::getList($params);
$filters = TimeLineHelper::getFilters($items, $params);
require JModuleHelper::getLayoutPath('mod_mx_timeline', $params->get('get_style', 'style6'));

View File

@ -0,0 +1,545 @@
<?xml version="1.0" encoding="utf-8"?>
<extension type="module" client="site" version="1.7.0" method="upgrade">
<name>Timeline</name>
<author>mixwebtemplates</author>
<creationDate>Jan 27, 2020</creationDate>
<copyright>Copyright (C) http://www.mixwebtemplates.com. All rights reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license>
<authorEmail>support@mixwebtemplates.com</authorEmail>
<authorUrl>www.mixwebtemplates.com</authorUrl>
<version>4.0.3</version>
<description>
<![CDATA[<link href="../modules/mod_mx_timeline/assets/css/admin.css" rel="stylesheet" type="text/css" media="all" />
<h1>Timeline free version</h1>
<div style="margin:0 0 0 10px; font-size:15px;">Timeline free version from <a href="http://www.mixwebtemplates.com" target="_blank">mixwebtemplates.com</a>. In Free version is available only style 6. If you interested in other styles please visit <a href="https://www.mixwebtemplates.com/joomla-extensions/item/261-timeline-joomla-module" target="_blank">timeline module page</a></div>
<h3>Userful links</h3>
<ul><li><a target='_blank' href='https://www.mixwebtemplates.com/joomla-templates'>Joomla templates</a></li>
<li><a target='_blank' href='https://www.mixwebtemplates.com/contact'>Report bug</a></li></ul></p>
<div class="footer_review">
Like this extensions? <a href="https://extensions.joomla.org/extension/news-display/articles-display/mx-timeline/" target="_blank">Leave a review on JED</a>
<a class="stars" href="https://extensions.joomla.org/extension/news-display/articles-display/mx-timeline/" target="_blank">
<span class="icon-star"></span><span class="icon-star"></span><span class="icon-star"></span><span class="icon-star"></span><span class="icon-star"></span>
</a>
</div>
]]></description>
<files>
<filename module="mod_mx_timeline">mod_mx_timeline.php</filename>
<filename>helper.php</filename>
<filename>index.html</filename>
<folder>assets</folder>
<folder>tmpl</folder>
</files>
<languages>
<language tag="en-GB">en-GB.mod_mx_timeline.ini</language>
<language tag="en-GB">en-GB.mod_mx_timeline.sys.ini</language>
</languages>
<updateservers>
<server type="extension" priority="1" name="Timeline"><![CDATA[https://www.mixwebtemplates.com/updates/mod_mx_timeline_free.xml]]></server>
</updateservers>
<config>
<fields name="params">
<fieldset name="basic">
<field name="get_style" type="list" default="style6" label="Style" description="Select a style" >
<option value="default" disabled="true">Default (pro)</option>
<option value="style1" disabled="true">Style 1 (pro)</option>
<option value="style2" disabled="true">Style 2 (pro)</option>
<option value="style3" disabled="true">Style 3 (pro)</option>
<option value="style4" disabled="true">Style 4 (pro)</option>
<option value="style5" disabled="true">Style 5 (pro)</option>
<option value="style6">Style 6</option>
<option value="style5" disabled="true">Style 7 (pro)</option>
</field>
<field name="bgm_color" type="color" format="rgba" default="" label="Custom Color" description="Custom color" />
<field
name="moduleclass_sfx"
type="textarea"
rows="3"
label="MOD_MX_TIME_LINE_CLASS_SUFFIX_LABEL"
description="MOD_MX_TIME_LINE_CLASS_SUFFIX_DESC"
/>
<field
name="auto_module_id"
type="radio"
class="btn-group"
default="1"
label="MOD_MX_TIME_LINE_AUTO_MODULE_ID_LABEL"
description="MOD_MX_TIME_LINE_AUTO_MODULE_ID_DESC">
<option value="0">JNo</option>
<option value="1">JYes</option>
</field>
<field
name="custom_module_id"
type="text"
default=""
label="MOD_MX_TIME_LINE_CUSTOM_MODULE_ID_LABEL"
description="MOD_MX_TIME_LINE_CUSTOM_MODULE_ID_DESC"
/>
</fieldset>
<fieldset name="DataSource" label="MOD_MX_TIME_LINE_DATA_SOURCE">
<field
name="count"
type="text"
default="5"
label="MOD_MX_TIME_LINE_FIELD_COUNT_LABEL"
description="MOD_MX_TIME_LINE_FIELD_COUNT_DESC"
/>
<field
name="image_type"
type="radio"
class="btn-group"
default="introtext"
label="MOD_MX_TIME_LINE_IMAGE_TYPE_LABEL"
description="MOD_MX_TIME_LINE_IMAGE_TYPE_DESC"
>
<option value="introtext">Intro Image</option>
<option value="fulltext">Fulltext Image</option>
<option value="inline">Inline Image</option>
</field>
<field name="filteringspacer6" type="spacer" hr="true" />
<field
name="category_filtering_type"
type="radio"
class="btn-group"
default="1"
label="MOD_MX_TIME_LINE_FIELD_CATFILTERINGTYPE_LABEL"
description="MOD_MX_TIME_LINE_FIELD_CATFILTERINGTYPE_DESC"
>
<option value="1">MOD_MX_TIME_LINE_CATEGORY_OPTION_INCLUSIVE_VALUE</option>
<option value="0">MOD_MX_TIME_LINE_CATEGORY_OPTION_EXCLUSIVE_VALUE</option>
</field>
<field
name="catid"
type="category"
extension="com_content"
multiple="true" size="5"
label="JCATEGORY"
description="MOD_MX_TIME_LINE_FIELD_CATEGORY_DESC"
>
<option value="">JOPTION_ALL_CATEGORIES</option>
</field>
<field name="show_child_category_articles"
type="radio"
class="btn-group"
default="0"
label="MOD_MX_TIME_LINE_FIELD_SHOWCHILDCATEGORYARTICLES_LABEL"
description="MOD_MX_TIME_LINE_FIELD_SHOWCHILDCATEGORYARTICLES_DESC"
>
<option value="1">MOD_MX_TIME_LINE_CATEGORY_OPTION_INCLUDE_VALUE</option>
<option value="0">MOD_MX_TIME_LINE_CATEGORY_OPTION_EXCLUDE_VALUE</option>
</field>
<field
name="levels"
type="text"
default="1"
label="MOD_MX_TIME_LINE_FIELD_CATDEPTH_LABEL"
description="MOD_MX_TIME_LINE_FIELD_CATDEPTH_DESC"
/>
<field name="filteringspacer_tags" type="spacer" hr="true" />
<field
name="tag_filtering_type"
type="radio"
default="1"
class="btn-group"
label="MOD_MX_TIME_LINE_FIELD_TAG_FILTERING_TYPE_LABEL"
description="MOD_MX_TIME_LINE_FIELD_TAG_FILTERING_TYPE_DESC"
>
<option value="1">MOD_MX_TIME_LINE_CATEGORY_OPTION_INCLUSIVE_VALUE</option>
<option value="0">MOD_MX_TIME_LINE_CATEGORY_OPTION_EXCLUSIVE_VALUE</option>
</field>
<field
name="tag_id"
type="tag"
label="MOD_MX_TIME_LINE_FIELD_TAG_LABEL"
description="MOD_MX_TIME_LINE_FIELD_TAG_DESC"
custom="deny"
multiple="true"
/>
<field
name="tag_include_children"
type="radio"
class="btn-group"
label="MOD_MX_TIME_LINE_FIELD_TAG_INCLUDE_CHILDREN_LABEL"
description="MOD_MX_TIME_LINE_FIELD_TAG_INCLUDE_CHILDREN_DESC"
default="1"
>
<option value="1">MOD_MX_TIME_LINE_CATEGORY_OPTION_INCLUDE_VALUE</option>
<option value="0">MOD_MX_TIME_LINE_CATEGORY_OPTION_EXCLUDE_VALUE</option>
</field>
<field
name="tag_match"
type="radio"
class="btn-group"
label="MOD_MX_TIME_LINE_FIELD_TAG_MATCH_LABEL"
description="MOD_MX_TIME_LINE_FIELD_TAG_MATCH_DESC"
default="1"
>
<option value="1">MOD_MX_TIME_LINE_TAG_MATCH_ANY</option>
<option value="0">MOD_MX_TIME_LINE_TAG_MATCH_ALL</option>
</field>
<field name="filteringspacer2" type="spacer" hr="true" />
<field
name="author_filtering_type"
type="radio"
class="btn-group"
default="1"
label="MOD_MX_TIME_LINE_FIELD_AUTHORFILTERING_LABEL"
description="MOD_MX_TIME_LINE_FIELD_AUTHORFILTERING_DESC"
>
<option value="1">MOD_MX_TIME_LINE_CATEGORY_OPTION_INCLUSIVE_VALUE</option>
<option value="0">MOD_MX_TIME_LINE_CATEGORY_OPTION_EXCLUSIVE_VALUE</option>
</field>
<field
name="created_by"
type="sql"
multiple="true"
size="5"
label="MOD_MX_TIME_LINE_FIELD_AUTHOR_LABEL"
description="MOD_MX_TIME_LINE_FIELD_AUTHOR_DESC"
query="select id, name, username from #__users where id IN (select distinct(created_by) from #__content) order by name ASC"
key_field="id"
value_field="name"
>
<option value="">JOPTION_SELECT_AUTHORS</option>
</field>
<field name="filteringspacer3" type="spacer" hr="true" />
<field
name="author_alias_filtering_type"
type="radio"
class="btn-group"
default="1"
label="MOD_MX_TIME_LINE_FIELD_AUTHORALIASFILTERING_LABEL"
description="MOD_MX_TIME_LINE_FIELD_AUTHORALIASFILTERING_DESC"
>
<option value="1">MOD_MX_TIME_LINE_CATEGORY_OPTION_INCLUSIVE_VALUE</option>
<option value="0">MOD_MX_TIME_LINE_CATEGORY_OPTION_EXCLUSIVE_VALUE</option>
</field>
<field
name="created_by_alias"
type="sql"
multiple="true"
size="5"
label="MOD_MX_TIME_LINE_FIELD_AUTHORALIAS_LABEL"
description="MOD_MX_TIME_LINE_FIELD_AUTHORALIAS_DESC"
query="select distinct(created_by_alias) from #__content where created_by_alias != '' order by created_by_alias ASC"
key_field="created_by_alias"
value_field="created_by_alias"
>
<option value="">JOPTION_SELECT_AUTHOR_ALIASES</option>
</field>
<field name="filteringspacer4" type="spacer" hr="true" />
<field
name="show_front"
type="radio"
class="btn-group"
default="show"
label="MOD_MX_TIME_LINE_FIELD_SHOWFEATURED_LABEL"
description="MOD_MX_TIME_LINE_FIELD_SHOWFEATURED_DESC"
>
<option value="show">JSHOW</option>
<option value="hide">JHIDE</option>
<option value="only">MOD_MX_TIME_LINE_CATEGORY_OPTION_ONLYFEATURED_VALUE</option>
</field>
<field name="filteringspacer7" type="spacer" hr="true" />
<field
name="date_filtering"
type="radio"
class="btn-group"
default="off"
label="MOD_MX_TIME_LINE_FIELD_DATEFILTERING_LABEL"
description="MOD_MX_TIME_LINE_FIELD_DATEFILTERING_DESC"
>
<option value="off">MOD_MX_TIME_LINE_CATEGORY_OPTION_OFF_VALUE</option>
<option value="range">MOD_MX_TIME_LINE_CATEGORY_OPTION_DATERANGE_VALUE</option>
<option value="relative">MOD_MX_TIME_LINE_CATEGORY_OPTION_RELATIVEDAY_VALUE</option>
</field>
<field
name="date_field"
type="radio"
class="btn-group"
default="a.created"
label="MOD_MX_TIME_LINE_FIELD_DATERANGEFIELD_LABEL"
description="MOD_MX_TIME_LINE_FIELD_DATERANGEFIELD_DESC"
>
<option value="a.created">MOD_MX_TIME_LINE_CATEGORY_OPTION_CREATED_VALUE</option>
<option value="a.modified">MOD_MX_TIME_LINE_CATEGORY_OPTION_MODIFIED_VALUE</option>
<option value="a.publish_up">MOD_MX_TIME_LINE_CATEGORY_OPTION_STARTPUBLISHING_VALUE</option>
</field>
<field
name="start_date_range"
type="calendar"
format="%Y-%m-%d %H:%M:%S"
label="MOD_MX_TIME_LINE_FIELD_STARTDATE_LABEL"
description="MOD_MX_TIME_LINE_FIELD_STARTDATE_DESC"
size="22"
filter="user_utc"
/>
<field
name="end_date_range"
type="calendar"
format="%Y-%m-%d %H:%M:%S"
label="MOD_MX_TIME_LINE_FIELD_ENDDATE_LABEL"
description="MOD_MX_TIME_LINE_FIELD_ENDDATE_DESC"
size="22"
filter="user_utc"
/>
<field
name="relative_date"
type="text"
default="30"
label="MOD_MX_TIME_LINE_FIELD_RELATIVEDATE_LABEL"
description="MOD_MX_TIME_LINE_FIELD_RELATIVEDATE_DESC"
/>
<field
name="show_date_field"
type="radio"
class="btn-group"
default="created"
label="MOD_MX_TIME_LINE_FIELD_DATEFIELD_LABEL"
description="MOD_MX_TIME_LINE_FIELD_DATEFIELD_DESC"
>
<option value="created">MOD_MX_TIME_LINE_CATEGORY_OPTION_CREATED_VALUE</option>
<option value="modified">MOD_MX_TIME_LINE_CATEGORY_OPTION_MODIFIED_VALUE</option>
<option value="publish_up">MOD_MX_TIME_LINE_CATEGORY_OPTION_STARTPUBLISHING_VALUE</option>
</field>
<field
name="show_date_format"
type="text"
default="Y-m-d H:i:s"
label="MOD_MX_TIME_LINE_FIELD_DATEFIELDFORMAT_LABEL"
description="MOD_MX_TIME_LINE_FIELD_DATEFIELDFORMAT_DESC"
/>
<field name="filteringspacer8" type="spacer" hr="true" />
<field
name="excluded_articles"
type="textarea"
cols="10"
rows="3"
label="MOD_MX_TIME_LINE_FIELD_EXCLUDEDARTICLES_LABEL"
description="MOD_MX_TIME_LINE_FIELD_EXCLUDEDARTICLES_DESC"
/>
<field name="filteringspacer5" type="spacer" hr="true" />
<field
name="article_ordering"
type="list"
default="a.title"
label="MOD_MX_TIME_LINE_FIELD_ARTICLEORDERING_LABEL"
description="MOD_MX_TIME_LINE_FIELD_ARTICLEORDERING_DESC"
>
<option value="a.ordering">MOD_MX_TIME_LINE_CATEGORY_OPTION_ORDERING_VALUE</option>
<option value="fp.ordering">MOD_MX_TIME_LINE_CATEGORY_OPTION_ORDERINGFEATURED_VALUE</option>
<option value="a.hits">MOD_MX_TIME_LINE_CATEGORY_OPTION_HITS_VALUE</option>
<option value="a.title">JGLOBAL_TITLE</option>
<option value="a.id">MOD_MX_TIME_LINE_CATEGORY_OPTION_ID_VALUE</option>
<option value="a.alias">JFIELD_ALIAS_LABEL</option>
<option value="a.created">MOD_MX_TIME_LINE_CATEGORY_OPTION_CREATED_VALUE</option>
<option value="modified">MOD_MX_TIME_LINE_CATEGORY_OPTION_MODIFIED_VALUE</option>
<option value="publish_up">MOD_MX_TIME_LINE_CATEGORY_OPTION_STARTPUBLISHING_VALUE</option>
<option value="a.publish_down">MOD_MX_TIME_LINE_CATEGORY_OPTION_FINISHPUBLISHING_VALUE</option>
</field>
<field
name="article_ordering_direction"
type="radio"
class="btn-group"
default="ASC"
label="MOD_MX_TIME_LINE_FIELD_ARTICLEORDERINGDIR_LABEL"
description="MOD_MX_TIME_LINE_FIELD_ARTICLEORDERINGDIR_DESC"
>
<option value="DESC">MOD_MX_TIME_LINE_CATEGORY_OPTION_DESCENDING_VALUE</option>
<option value="ASC">MOD_MX_TIME_LINE_CATEGORY_OPTION_ASCENDING_VALUE</option>
</field>
</fieldset>
<fieldset name="TIME_LINE_CONFIG_SETTINGS">
<field name="image_spacer" type="spacer" hr="true" />
<field
name="slider_title"
type="radio"
class="btn-group"
default="1"
label="MOD_MX_TIME_LINE_TITLE_LABEL"
description="MOD_MX_TIME_LINE_TITLE_DESC"
>
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<field
name="title_limit"
type="text"
default="15"
label="MOD_MX_TIME_LINE_TITLE_LIMIT_LABEL"
description="MOD_MX_TIME_LINE_TITLE_LIMIT_DESC"
/>
<field
name="slider_introtext"
type="radio"
class="btn-group"
default="1"
label="MOD_MX_TIME_LINE_INTROTEXT_LABEL"
description="MOD_MX_TIME_LINE_INTROTEXT_DESC"
>
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<field
name="introtext_limit"
type="text"
default="15"
label="MOD_MX_TIME_LINE_INTROTEXT_LIMIT_LABEL"
description="MOD_MX_TIME_LINE_INTROTEXT_LIMIT_DESC"
/>
<field
name="strip_tags"
type="radio"
class="btn-group"
default="1"
label="MOD_MX_TIME_LINE_STRIP_HTML_LABEL"
description="MOD_MX_TIME_LINE_STRIP_HTML_DESC">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<field
name="allowplugins"
type="radio"
class="btn-group"
default="1"
label="MOD_MX_TIME_LINE_ALLOW_PLUGINS_LABEL"
description="MOD_MX_TIME_LINE_ALLOW_PLUGINS_DESC">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<field
name="slider_read"
type="radio"
class="btn-group"
default="0"
label="Show read more"
description="Show read more"
>
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<field
name="slider_date"
type="radio"
class="btn-group"
default="0"
label="MOD_MX_TIME_LINE_DATE_LABEL"
description="MOD_MX_TIME_LINE_DATE_DESC"
>
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<field
name="slider_category"
type="radio"
class="btn-group"
default="0"
label="MOD_MX_TIME_LINE_CATEGORY_LABEL"
description="MOD_MX_TIME_LINE_CATEGORY_DESC"
>
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<field
name="slider_author"
type="radio"
class="btn-group"
default="0"
label="MOD_MX_TIME_LINE_AUTHOR_LABEL"
description="MOD_MX_TIME_LINE_AUTHOR_DESC"
>
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
</fieldset>
<fieldset name="advanced">
<field
name="enable_cache"
type="radio"
class="btn-group"
default="0"
label="MOD_MX_TIME_LINE_CACHING_LABEL"
description="MOD_MX_TIME_LINE_CACHING_DESC"
>
<option value="1">Use global</option>
<option value="0">No caching</option>
</field>
<field
name="cache_time"
type="text"
default="30"
label="MOD_MX_TIME_LINE_CACHE_TIME_LABEL"
description="MOD_MX_TIME_LINE_CACHE_TIME_DESC"
/>
</fieldset>
</fields>
</config>
</extension>

View File

@ -0,0 +1 @@
<html><body bgcolor="#FFFFFF"></body></html>

View File

@ -0,0 +1,75 @@
<?php
/**
* @title Timeline
* @version 4.0.1
* @copyright Copyright (C) 2019 mixwebtemplates.com, All rights reserved.
* @license GNU General Public License version 3 or later.
* @author url http://www.mixwebtemplates.com/
* @developers mixwebtemplates.com
*/
// no direct access
defined('_JEXEC') or die('Restricted access');
$cacheFolder = JURI::base(true).'/cache/';
$modID = $module->id;
$modPath = JURI::base(true).'/modules/mod_mx_timeline/';
$document = JFactory::getDocument();
$moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx'));
$jqueryload = $params->get('jqueryload');
$customone = $params->get('customone');
$hgstyle = $params->get('hgstyle');
$customstyle = $params->get('customstyle');
$bgm_color = $params->get('bgm_color');
$sliderid = $params->get('sliderid');
$borderradius = $params->get('borderradius');
// Define parameters
$module_id = $module->id;
if ($params->get('auto_module_id')) {
$sliderid = 'olk2sl'.$module->id;
} else {
$sliderid = $params->get('custom_module_id');
}
$document->addStyleSheet($modPath.'assets/css/font-awesome.css');
$document->addStyleSheet($modPath.'assets/css/style6.css');
if($bgm_color) $document->addStyleDeclaration('#tmln' . $sliderid . ' .timeline .item:after, #tmln' . $sliderid . ' .timeline .item-social-icons, #tmln' . $sliderid . ' .timeline .btn-box a{ background-color: ' . $bgm_color . ' !important;}#tmln' . $sliderid . ' .timeline .job-meta .title { color: ' . $bgm_color . ' !important;}#tmln' . $sliderid . ' .timeline .item::before, #tmln' . $sliderid . ' .timeline {border-color: ' . $bgm_color . ';} ');
$modpath = JURI::root(true).'/modules/' . $module->module;
?>
<div id="tmln<?php echo $sliderid ?>">
<div class="timeline">
<?php if (count($items)) { ?>
<?php foreach($items as $item) { ?>
<div class="item">
<div class="work-place">
<?php if($params->get('slider_title')) { ?><div class="place"><a href="<?php echo $item->link; ?>"><?php echo $item->title; ?></a></div><?php } ?>
<?php if($params->get('slider_author')) { ?><div class="location"> <?php echo JText::_('MOD_MX_TIME_LINE_BY'); ?> <?php echo $item->author; ?></div><?php } ?>
</div>
<div class="job-meta">
<?php if($params->get('slider_category')) { ?><div class="title"><?php echo JText::_('MOD_MX_TIME_LINE_IN'); ?> <a href="<?php echo $item->displayCategoryLink; ?>"><?php echo $item->category_title; ?></a></div> <?php } ?>
<?php if ($params->get('slider_date')) { ?><div class="time"><?php echo $item->displayDate; ?></div><?php } ?>
</div><!--//job-meta-->
<div class="job-desc">
<?php if($item->mainimage != '') : ?>
<div class="note-image">
<img src="<?php echo $item->mainimage ?>" alt="<?php echo $item->title?>" />
</div>
<?php endif; ?>
<?php if($params->get('slider_introtext')) { ?><p class="note-desc"><?php echo $item->displayIntrotext; ?></p><?php } ?>
<?php if($params->get('slider_read')) { ?>
<div class="btn-box">
<a href="<?php echo $item->link; ?>" class="theme-btn"><?php echo JText::_('MOD_MX_TIME_LINE_READ_MORE'); ?></a>
</div>
<?php } ?> </div><!--//job-desc-->
</div>
<div class="clearfix"></div>
<?php } ?>
<?php } ?>
</div>
</div>
<?php if($params->get('item_shares')== 1): ?>
<script src="<?php echo $modPath ?>assets/js/social.js" type="text/javascript"></script>
<?php endif; ?>