PageSourceSearch

https://casadecultura.cat/View/ModulesVue/Web/Filters/Filters.js?1790440876

js casadecultura.cat collected 2026-09-26 16:41:27 UTC 9,402 bytes, 244 lines download raw bytes

1
2
3Vue.component('filters-div', {
4    props: {},          
5    data: function() {
6        return { 
7            FiltresOberts: false,
8            TagsDisponibles: [  ['1','Artística'], 
9                                ['2','Curs'], 
10                                ['3','Familiar'], 
11                                ['4','Científica'], 
12                                ['5','Exposició'], 
13                                ['6','Humanitats'], 
14                                ['7','Música'], 
15                                ['8','Conferència'], 
16                                ['11','Tecnològica']                                
17                            ],
18            MesText: '',
19            MesNumero: 0,
20            AnyText: '',
21            AnyNumero: 0,
22            QuantsDiesMes: 0,
23            DiesMes: [], 
24            DiesMesFiles: [],
25            TextCerca: ''
26        }
27    },    
28    created: function() {
29        this.carregaMes();
30    },
31    computed: {
32
33    },
34    watch: {},
35    methods: {
36        carregaMes: function(M = '', Y = '') {
37            let D = new Date();            
38            let Mes = (M.length == 0) ? D.getMonth() : M;
39            let Any = (Y.length == 0) ? D.getFullYear() : Y;
40            
41            this.MesNumero = Mes;
42            this.MesText = this.Mesos(this.MesNumero);
43            this.AnyNumero = Any;
44            this.AnyText = this.AnyNumero.toString();
45            this.QuantsDiesMes = this.QuantsDiesTeElMes(this.AnyNumero, this.MesNumero);
46            this.DiesMes = [];
47            this.DiesMesFiles = [];
48        
49            let Fila = 0;
50            for (let i = 1; i < this.QuantsDiesMes + 1; i++) {
51              let DiaSetmana = new Date(this.AnyNumero, this.MesNumero, i).getDay();
52              let DiaText = this.DiaSetmana(DiaSetmana);
53              let Classe = [];
54              Classe.push('filtres_cal-dia');
55              if (DiaSetmana == 6 || DiaSetmana == 0) Classe.push('filtres_cal-dia-festa');
56              else Classe.push('filtres_cal-dia-normal');
57              let D = { DiaText: DiaText, DiaNumero: i, C: Classe };
58              this.DiesMes.push(D);
59        
60              // Carrego l'array de Dies per files pel calendari
61              if (i == 1) {
62                let DiesASumar = DiaSetmana == 0 ? 7 : DiaSetmana;
63                for (let i = DiesASumar; i > 1; i--) {
64                  if (!this.DiesMesFiles[Fila]) this.DiesMesFiles[Fila] = [];
65                  this.DiesMesFiles[Fila].push({ DiaText: '', DiaNumero: '', C: Classe });
66                }
67              }
68        
69              if (!this.DiesMesFiles[Fila]) this.DiesMesFiles[Fila] = [];
70              this.DiesMesFiles[Fila].push(D);
71              if (DiaSetmana == 0) Fila++;
72            }                        
73        },
74        
75        QuantsDiesTeElMes(any, mes) {
76            return new Date(any, mes + 1, 0).getDate();
77        },
78
79        DiaSetmana(DiaSetmana) {
80            switch (DiaSetmana) {
81            case 0:
82                return 'Dg';
83                break;
84            case 1:
85                return 'Dl';
86                break;
87            case 2:
88                return 'Dt';
89                break;
90            case 3:
91                return 'Dc';
92                break;
93            case 4:
94                return 'Dj';
95                break;
96            case 5:
97                return 'Dv';
98                break;
99            case 6:
100                return 'Ds';
101                break;
102            }
103        },
104
105        Mesos(Mes) {
106            switch (Mes) {
107            case 0:
108                return 'Gener';
109            case 1:
110                return 'Febrer';
111            case 2:
112                return 'Març';
113            case 3:
114                return 'Abril';
115            case 4:
116                return 'Maig';
117            case 5:
118                return 'Juny';
119            case 6:
120                return 'Juliol';
121            case 7:
122                return 'Agost';
123            case 8:
124                return 'Setembre';
125            case 9:
126                return 'Octubre';
127            case 10:
128                return 'Novembre';
129            case 11:
130                return 'Desembre';
131            }
132        },
133        GoMes: function( Menys = false ) {
134            let M = this.MesNumero;
135            let Y = this.AnyNumero;
136            if (Menys && M == 0) {
137              Y--;
138              M = 11;
139            } else if (!Menys && M == 11) {
140              Y++;
141              M = 0;
142            } else if (Menys) {
143              M--;
144            } else {
145              M++;
146            }
147            
148            this.carregaMes(M, Y);
149        },
150        cercaText: function() {                                
151            window.location.href = "/activitats/text/" + encodeURIComponent(this.TextCerca);
152        },
153        executaFiltre: function($eventTipus) {                    
154            const T = this.TagsDisponibles.find( X => X[0] == $eventTipus.target.value );
155            window.location.href= this.getLinkTipus( T );        
156        },
157        getLinkTipus: function(Tipus = '', Dia = '') {                                                
158            if(typeof Tipus == 'object') {
159                return '/activitats/tipus/' + Tipus[0] + '/' + normalize(Tipus[1]);
160            } else if(typeof Dia == 'number') {
161                return '/activitats/data/' + this.AnyNumero + '-' + (this.MesNumero + 1) + '-' + Dia ;
162            }            
163        }
164    },
165    template: `        
166<section>
167    <div class="filtres_requadre_filtres">
168        <div class="filtres_titol_filtres" @click="FiltresOberts = !FiltresOberts">Filtres</div>
169        <div class="filtres_requadre_tots_filtres" v-if="FiltresOberts">
170            <div class="filtres_requadre_calendari">
171                <div class="filtres_cal-mesos-fletxa"> 
172                    <a  @click="GoMes(true)" > &lt; </a>
173                </div>
174                <div class="filtres_requadre-taula-calendari">
175                    <div class="filtres_control-mesos">{{ MesText }} {{ AnyText }}</div>
176                    
177                    <table class="filtres_taula-calendari">
178                        <tr>
179                            <td class="filtres_cal-dia-title">Dl</td>
180                            <td class="filtres_cal-dia-title">Dt</td>
181                            <td class="filtres_cal-dia-title">Dc</td>
182                            <td class="filtres_cal-dia-title">Dj</td>
183                            <td class="filtres_cal-dia-title">Dv</td>
184                            <td class="filtres_cal-dia-title">Ds</td>
185                            <td class="filtres_cal-dia-title">Dg</td>
186                        </tr>
187                        <tr v-for="Row of DiesMesFiles">
188                            <td v-for="D of Row" :class="D.C" @click="executaFiltre('DATA_INICIAL', D.DiaNumero)">
189                                {{ D.DiaNumero }}
190                            </td>
191                        </tr>
192                    </table>                
193                </div>
194
195                <div class="filtres_cal-mesos-fletxa" @click="GoMes(false)">
196                    <a  @click="GoMes(false)" > &gt; </a>
197                </div>
198            </div>
199            <div class="filtres_AltresFiltresBlock form-group">
200                <select id="TagsSelect" class="filtres_form-control" @change="executaFiltre($event)">
201                    <option :value="0">-- ESCULL UN TIPUS D'ACTIVITAT --</option>
202                    <option v-for="T of TagsDisponibles" :value="T[0]">{{ T[1] }}</option>
203                </select>
204
205                <div class="filtres_input_search">                    
206                    <input type="text" id="input_cerca" role="textbox" v-model="TextCerca" class="filtres_form-control_input_text" placeholder="Escriu un text per buscar..." aria-label="Escriu el text a buscar" />
207                    <button @click="cercaText()">Cerca!</button>
208                </div>
209            </div>
210        </div>
211    </div>
212  
213    
214    <nav class="filtres_calendari">
215        <div class="filtres_control-mesos">
216            <a class="filtres_cal-mesos-fletxa" @click="GoMes(true)">
217                <span> < </span>
218            </a>
219            <div class="filtres_cal-mesos">{{ MesText }}<br />{{ AnyText }}</div>
220            <a class="filtres_cal-mesos-fletxa" @click="GoMes(false)">
221                <span> > </span>
222            </a>
223        </div>
224        <div class="filtres_control-dies">
225            <a :class="D.C" v-for="D of DiesMes" :href="getLinkTipus('', D.DiaNumero)">
226                <div class="filtres_cal-dia-text">{{ D.DiaText }}</div>
227                <div class="filtres_cal-dia-numero">{{ D.DiaNumero }}</div>
228            </a>
229        </div>
230    </nav>
231  
232    <div class="filtres_box-mes-filtres">
233        <div class="filtres_mes-filtres">Més filtres</div>
234        <div class="filtres_mes-filtres-resta">
235            <a class="filtres_mes-filtres-resta-element" v-for="T of TagsDisponibles" :href="getLinkTipus(T)">
236                {{ T[1] }}
237            </a>            
238            <input type="text" v-model="TextCerca" id="InputTextCerca" placeholder="Cerca..." aria-label="Cerca alguna cosa" />
239            <button class="btn btn-xs" id="InputTextBoto" @click="cercaText()">Cerca!</button>                                  
240        </div>      
241    </div>
242</section>
243                `
244});

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