DmitrMakeev commited on
Commit
fd7d580
·
verified ·
1 Parent(s): ee070ce

Update pages.html

Browse files
Files changed (1) hide show
  1. pages.html +132 -105
pages.html CHANGED
@@ -789,117 +789,78 @@ editor.Blocks.add('video-player-settings-block', {
789
 
790
 
791
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
792
 
 
 
 
 
 
793
 
 
 
 
794
 
795
- editor.BlockManager.add('custom-countdown', {
796
- label: 'Custom Countdown',
797
- content: `
798
- <style>
799
- .countdown {
800
- text-align: center;
801
- }
802
- .countdown-block {
803
- display: inline-block;
804
- margin: 0 10px;
805
- padding: 10px;
806
- }
807
- .countdown-digit {
808
- font-size: 5rem;
809
- }
810
- .countdown-endtext {
811
- font-size: 5rem;
812
- }
813
- .countdown-cont {
814
- display: inline-block;
815
- }
816
- </style>
817
-
818
- <div id="ivtk" class="countdown">
819
- <span data-js="countdown" class="countdown-cont">
820
- <div class="countdown-block">
821
- <div data-js="countdown-day" class="countdown-digit">00</div>
822
- <div class="countdown-label">days</div>
823
- </div>
824
- <div class="countdown-block">
825
- <div data-js="countdown-hour" class="countdown-digit">00</div>
826
- <div class="countdown-label">hours</div>
827
- </div>
828
- <div class="countdown-block">
829
- <div data-js="countdown-minute" class="countdown-digit">00</div>
830
- <div class="countdown-label">minutes</div>
831
- </div>
832
- <div class="countdown-block">
833
- <div data-js="countdown-second" class="countdown-digit">00</div>
834
- <div class="countdown-label">seconds</div>
835
- </div>
836
- </span>
837
- <span data-js="countdown-endtext" class="countdown-endtext"></span>
838
- </div>
839
- `,
840
- attributes: {
841
- class: 'fa fa-clock-o'
842
- }
843
- });
844
-
845
- // Добавляем компонент custom-countdown
846
- editor.Components.addType('custom-countdown', {
847
- model: {
848
- defaults: {
849
- traits: [
850
- {
851
- type: 'text', // Заменен тип 'date' на 'text'
852
- name: 'startfrom',
853
- label: 'End Date (YYYY-MM-DD)',
854
- placeholder: 'YYYY-MM-DD', // Добавлено пояснение
855
- changeProp: true
856
- },
857
- {
858
- type: 'text',
859
- name: 'blockId',
860
- label: 'Block ID to Hide',
861
- changeProp: true
862
  }
863
- ],
864
- script: function() {
865
- const startfrom = this.get('startfrom');
866
- const blockId = this.get('blockId');
867
- const o = this.view.el;
868
- const a = new Date(startfrom).getTime();
869
- const c = o.querySelector('[data-js=countdown]');
870
- const d = o.querySelector('[data-js=countdown-endtext]');
871
- const s = o.querySelector('[data-js=countdown-day]');
872
- const l = o.querySelector('[data-js=countdown-hour]');
873
- const i = o.querySelector('[data-js=countdown-minute]');
874
- const r = o.querySelector('[data-js=countdown-second]');
875
- const u = o.__gjsCountdownInterval;
876
- u && clearInterval(u);
877
- const p = window.__gjsCountdownIntervals || [], v = [];
878
- p.forEach(n => n.isConnected || (clearInterval(n.__gjsCountdownInterval), v.push(n))), p.indexOf(o) < 0 && p.push(o), window.__gjsCountdownIntervals = p.filter(n => v.indexOf(n) < 0);
879
- const y = (n, t, e, o) => {
880
- s.innerHTML = `${n < 10 ? '0' + n : n}`, l.innerHTML = `${t < 10 ? '0' + t : t}`, i.innerHTML = `${e < 10 ? '0' + e : e}`, r.innerHTML = `${o < 10 ? '0' + o : o}`;
881
- };
882
- const f = () => {
883
- const n = (new Date).getTime(), t = a - n, s = Math.floor(t / 864e5), l = Math.floor(t % 864e5 / 36e5), i = Math.floor(t % 36e5 / 6e4), r = Math.floor(t % 6e4 / 1e3);
884
- y(s, l, i, r), t < 0 && (clearInterval(o.__gjsCountdownInterval), d.innerHTML = 'EXPIRED', c.style.display = 'none', d.style.display = '', blockId && (document.getElementById(blockId).style.display = 'none'));
885
- };
886
- a ? (o.__gjsCountdownInterval = setInterval(f, 1e3), d.style.display = 'none', c.style.display = '', f()) : y(0, 0, 0, 0);
887
- }
888
- }
889
- }
890
- });
891
 
892
- // Добавляем блок custom-countdown в редактор
893
- editor.BlockManager.add('custom-countdown', {
894
- label: 'Custom Countdown',
895
- content: {
896
- type: 'custom-countdown',
897
- startfrom: '',
898
- blockId: ''
899
  },
900
- attributes: {
901
- class: 'fa fa-clock-o'
902
- }
903
  });
904
 
905
 
@@ -931,7 +892,73 @@ editor.CssComposer.addRules(`
931
  }
932
  `);
933
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
934
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
935
 
936
 
937
  </script>
 
789
 
790
 
791
 
792
+ editor.Components.addType(id, {
793
+ model: {
794
+ defaults: {
795
+ startfrom: options.startTime,
796
+ classes: [pfx],
797
+ endText: options.endText,
798
+ blockId: '', // Добавьте поле для ID блока
799
+ droppable: false,
800
+ script: coundownScript,
801
+ 'script-props': ['startfrom', 'endText', 'blockId'], // Добавьте blockId в скрипт-пропсы
802
+ traits: [{
803
+ label: 'Start',
804
+ name: 'startfrom',
805
+ changeProp: true,
806
+ type: options.dateInputType,
807
+ },{
808
+ label: 'End text',
809
+ name: 'endText',
810
+ changeProp: true,
811
+ },{
812
+ label: 'Block ID to Hide',
813
+ name: 'blockId',
814
+ changeProp: true,
815
+ }],
816
+ // @ts-ignore
817
+ components: `
818
+ <span data-js="countdown" class="${pfx}-cont">
819
+ <div class="${pfx}-block">
820
+ <div data-js="countdown-day" class="${pfx}-digit"></div>
821
+ <div class="${pfx}-label">${options.labelDays}</div>
822
+ </div>
823
+ <div class="${pfx}-block">
824
+ <div data-js="countdown-hour" class="${pfx}-digit"></div>
825
+ <div class="${pfx}-label">${options.labelHours}</div>
826
+ </div>
827
+ <div class="${pfx}-block">
828
+ <div data-js="countdown-minute" class="${pfx}-digit"></div>
829
+ <div class="${pfx}-label">${options.labelMinutes}</div>
830
+ </div>
831
+ <div class="${pfx}-block">
832
+ <div data-js="countdown-second" class="${pfx}-digit"></div>
833
+ <div class="${pfx}-label">${options.labelSeconds}</div>
834
+ </div>
835
+ </span>
836
+ <span data-js="countdown-endtext" class="${pfx}-endtext"></span>
837
+ `,
838
+ styles: (style || `
839
+ .${pfx} {
840
+ text-align: center;
841
+ }
842
 
843
+ .${pfx}-block {
844
+ display: inline-block;
845
+ margin: 0 10px;
846
+ padding: 10px;
847
+ }
848
 
849
+ .${pfx}-digit {
850
+ font-size: 5rem;
851
+ }
852
 
853
+ .${pfx}-endtext {
854
+ font-size: 5rem;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
855
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
856
 
857
+ .${pfx}-cont {
858
+ display: inline-block;
859
+ }
860
+ `) + (options.styleAdditional),
861
+ ...props,
862
+ },
 
863
  },
 
 
 
864
  });
865
 
866
 
 
892
  }
893
  `);
894
 
895
+ const coundownScript = function(props: Record<string, any>) {
896
+ const startfrom: string = props.startfrom;
897
+ const endTxt: string = props.endText;
898
+ const blockId: string = props.blockId; // Получите ID блока для скрытия
899
+ // @ts-ignore
900
+ const el: TElement = this;
901
+ const countDownDate = new Date(startfrom).getTime();
902
+ const countdownEl = el.querySelector('[data-js=countdown]') as HTMLElement;
903
+ const endTextEl = el.querySelector('[data-js=countdown-endtext]') as HTMLElement;
904
+ const dayEl = el.querySelector('[data-js=countdown-day]')!;
905
+ const hourEl = el.querySelector('[data-js=countdown-hour]')!;
906
+ const minuteEl = el.querySelector('[data-js=countdown-minute]')!;
907
+ const secondEl = el.querySelector('[data-js=countdown-second]')!;
908
+ const oldInterval = el.__gjsCountdownInterval;
909
+ oldInterval && clearInterval(oldInterval);
910
+
911
+ const connected: TElement[] = window.__gjsCountdownIntervals || [];
912
+ const toClean: TElement[] = [];
913
+ connected.forEach((item: TElement) => {
914
+ if (!item.isConnected) {
915
+ clearInterval(item.__gjsCountdownInterval);
916
+ toClean.push(item);
917
+ }
918
+ });
919
+ connected.indexOf(el) < 0 && connected.push(el);
920
+ window.__gjsCountdownIntervals = connected.filter(item => toClean.indexOf(item) < 0);
921
+
922
+ const setTimer = function (days: number, hours: number, minutes: number, seconds: number) {
923
+ dayEl.innerHTML = `${days < 10 ? '0' + days : days}`;
924
+ hourEl.innerHTML = `${hours < 10 ? '0' + hours : hours}`;
925
+ minuteEl.innerHTML = `${minutes < 10 ? '0' + minutes : minutes}`;
926
+ secondEl.innerHTML = `${seconds < 10 ? '0' + seconds : seconds}`;
927
+ }
928
 
929
+ const moveTimer = function() {
930
+ const now = new Date().getTime();
931
+ const distance = countDownDate - now;
932
+ const days = Math.floor(distance / 86400000);
933
+ const hours = Math.floor((distance % 86400000) / 3600000);
934
+ const minutes = Math.floor((distance % 3600000) / 60000);
935
+ const seconds = Math.floor((distance % 60000) / 1000);
936
+
937
+ setTimer(days, hours, minutes, seconds);
938
+
939
+ if (distance < 0) {
940
+ clearInterval(el.__gjsCountdownInterval);
941
+ endTextEl.innerHTML = endTxt;
942
+ countdownEl.style.display = 'none';
943
+ endTextEl.style.display = '';
944
+ if (blockId) {
945
+ const blockToHide = document.getElementById(blockId);
946
+ if (blockToHide) {
947
+ blockToHide.style.display = 'none';
948
+ }
949
+ }
950
+ }
951
+ };
952
+
953
+ if (countDownDate) {
954
+ el.__gjsCountdownInterval = setInterval(moveTimer, 1000);
955
+ endTextEl.style.display = 'none';
956
+ countdownEl.style.display = '';
957
+ moveTimer();
958
+ } else {
959
+ setTimer(0, 0, 0, 0);
960
+ }
961
+ };
962
 
963
 
964
  </script>