» »

javascript - gnezdenje - konkretno na mojem primeru

javascript - gnezdenje - konkretno na mojem primeru

Joze_K ::

Lp,

predelujem eno scripto / pa sem totalen noob v javascriptu

skratka, kako naj dodam še en kriterij za sortiranje

originalno je tako:
var sortType = filterTool.selected == filterTool.genre?'genre:first':(filterTool.selected == filterTool.year?'year:first':'title:last');


rad bi dodal še sortiranje po //rating//

če predelam zgornji zapis tako da besedo genre preimenujem v rating

var sortType = filterTool.selected == filterTool.rating?'rating:first':(filterTool.selected == filterTool.year?'year:first':'title:last');


mi deluje sortiranje po ratingu, ne vem pa kako naj obdelam ta ukaz da bo vsebovalo in rating in genre....

prosim za pomoč in hvala,

Jože

Joze_K ::

var filterTool = {

	name: null,
	year: null,
	genre: null,
	rating: null,
	input: null,
	selected: null,
	reverse: false,

	init: function() {
		$('#filter').css('visibility', 'visible');

		this.name = $('#filter_name');
		this.year = $('#filter_year');
		this.genre = $('#filter_genre');
		this.rating = $('#filter_rating');
		this.input = $('#filter_input');
		this.count = $('#filter_count');

		this.name.click(this.filter);
		this.year.click(this.filter);
		this.genre.click(this.filter);
		this.rating.click(this.filter);
		this.input.keyup(this.filter);

		this.name.click();
	},

	filter: function(e){
		if(e.target != filterTool.input.get(0)){
			if(!filterTool.selected || filterTool.selected.get(0) != e.target){
				if(filterTool.selected) filterTool.selected.removeClass('disabled');
				
				if(e.target == filterTool.name.get(0)) filterTool.selected = filterTool.name;
				else if(e.target == filterTool.year.get(0)) filterTool.selected = filterTool.year;
				else if(e.target == filterTool.genre.get(0)) filterTool.selected = filterTool.genre;
				else if(e.target == filterTool.rating.get(0)) filterTool.selected = filterTool.rating;

				filterTool.selected.addClass('disabled');
			}else {

				filterTool.reverse = !filterTool.reverse && filterTool.selected && e.target == filterTool.selected.get(0);
			}
		} else if(e.keyCode != 13) return;

	var sortType = filterTool.selected == filterTool.genre?'genre:first':(filterTool.selected == filterTool.year?'year:first':'title:last');

//**** tukaj bi NEKAKO VKOMPONIRAL ŠE rating

	var sortType = filterTool.selected == filterTool.rating?'rating:first':(filterTool.selected == filterTool.year?'year:first':'title:last');

//**** 	
		 var fStr = filterTool.input.val();
		 var arr = !fStr?rawXML.find('movie,tvshow'):rawXML.find("movie > title:contains('" + fStr + "'),tvshow > title:contains('" + fStr + "')").parent();

		arr.sort(function(a, b){
					var at = $(a).find(sortType).text();
					var bt = $(b).find(sortType).text();

					if(sortType == 'year:first'){
						if($(a).get(0).tagName == 'tvshow') at = $(a).find('premiered:first').text().substr(0,4);
						else if($(b).get(0).tagName == 'tvshow') bt = $(b).find('premiered:first').text().substr(0,4);

						at = parseInt(at);
						bt = parseInt(bt);
					}
					
					if(at < bt) return filterTool.reverse?1:-1;
					if(at > bt) return filterTool.reverse?-1:1;
					return 0;
				});

		//
		movies = [];
		videoSmallInfo.hide();
		itemSel = null;
		$(itemCont).empty();

		arr.each(function(){ movies.push(new videoItem($(this))); });
		
		if(movies.length > 0) movies[0].select();

		filterTool.count.text(movies.length + ' flm.');

		window_RESIZE(null);
	}
}


hm,... to je cel del, ki me muči

Zgodovina sprememb…

  • spremenil: Joze_K ()

ales85 ::

sortType lahko uporabiš kot polje in notri shraniš več vrednosti, nato pa preverjaš kateri filter se pojavi v tem polju.

Joze_K ::

ales85 je izjavil:

sortType lahko uporabiš kot polje in notri shraniš več vrednosti, nato pa preverjaš kateri filter se pojavi v tem polju.


Hja,...
ampak del mojega nagovora je bil - totalni "noob" sem v JS
kako to izvesti....

(mah če ne bo drugače bom ven vrgel sortiranje po GENRE in dal notri po RATING - gre namreč za prikaz XML baze, ki je narejena kot Backup NAS sistema, v browserju - in je uporabno če lahko sortiraš npr. po IMDB ocenah, precej bolj kot po vrsti)
še lepše pa bi bilo če bi bile obe opcije...

kot kaže je JAVASCRIPT precej nepoznano področje... :|

geca ::

Spodnji špeh conditional statementov ...

var sortType = filterTool.selected == filterTool.genre?'genre:first':(filterTool.selected == filterTool.year?'year:first':'title:last');


... zapiši kot ...

	var sortType = 'title:last'; // Privzeto po naslovu.
	
	// Grdo. :( Bomo lepšali, če deluje. ;)
	if (filterTool.selected === filterTool.rating) {
		sortType = 'rating:first';
	} else if (filterTool.selected === filterTool.year) {
		sortType = 'year:first';
	} else if (filterTool.selected === filterTool.genre) {
		sortType = 'genre:first';
	}


... in javi, če špila.

Zgodovina sprememb…

  • spremenil: geca ()

Joze_K ::

HVALA, HVALA, HVALA, HVALA, HVALA, HVALA, HVALA, HVALA, HVALA, HVALA, HVALA, HVALA, HVALA, HVALA, HVALA, ....

It's ALIVE

Kapo dol,...
ima JS majstora....
(porka mater, zdaj še meni enostavno izgleda, ko vidim tvojo kodo....):P

HVALA, :)


geca je izjavil:

Spodnji špeh conditional statementov ...

var sortType = filterTool.selected == filterTool.genre?'genre:first':(filterTool.selected == filterTool.year?'year:first':'title:last');


... zapiši kot ...


var sortType = 'title:last'; // Privzeto po naslovu.

// Grdo. :( Bomo lepšali, če deluje. ;)
if (filterTool.selected === filterTool.rating) {
sortType = 'rating:first';
} else if (filterTool.selected === filterTool.year) {
sortType = 'year:first';
} else if (filterTool.selected === filterTool.genre) {
sortType = 'genre:first';
}


... in javi, če špila.

Joze_K ::

@geca

še mogoče kako tole naredim?
		K1 = xDoc.find('width:not(:empty)').each(function(){ if(arr.indexOf($(this).text()) < 0) arr.push($(this).text()); });
		K2 = xDoc.find('height:not(:empty)').each(function(){ if(arr.indexOf($(this).text()) < 0) arr.push($(this).text()); });
		K3 = xDoc.find('codec:not(:empty)').each(function(){ if(arr.indexOf($(this).text()) < 0) arr.push($(this).text()); });

		Kvaliteta = K1 + " x " + K2 + " / " + K3
		arr = [];
		??? dvC.find('.sub:eq(11) span').text(arr.join(Kvaliteta));


originalno posamezno spremenljivko vpiše v arr = [] tako:

                arr = [];
		xDoc.find('dateadded:not(:empty)').each(function(){ if(arr.indexOf($(this).text()) < 0) arr.push($(this).text()); });
		dvC.find('.sub:eq(10) span').text(arr.join(', '));


torej rad bi sestavljen NIZ imel - vpisan v Kvaliteta

npr. kvaliteta videa: 1980 x 1024 / h264
to so podatki XML spremeljivk width, height, codec

četudi se codec pojavlja dvakrat - enkrat kot video - codec in enkrat kot audio - codec

geca ::

Ni problema. :) Poskusi tako:

Kvaliteta = K1 + " x " + K2 + " / " + K3; // Npr. 1980 x 1024 / h264
dvC.find('.sub:eq(11) span').text(Kvaliteta);

Joze_K ::

napiše mi tole kot rezultat:

Kvaliteta: [object Object] x [object Object] / [object Object]

geca ::

Kaj pa tole?
arr = [];

K1 = xDoc.find('width:not(:empty)').each(function(){ if(arr.indexOf($(this).text()) < 0) arr.push($(this).text()); });
K2 = xDoc.find('height:not(:empty)').each(function(){ if(arr.indexOf($(this).text()) < 0) arr.push($(this).text()); });
K3 = xDoc.find('codec:not(:empty)').each(function(){ if(arr.indexOf($(this).text()) < 0) arr.push($(this).text()); });

Kvaliteta = arr[0] + " x " + arr[1] + " / " + arr[2];
dvC.find('.sub:eq(11) span').text(Kvaliteta);

Zgodovina sprememb…

  • spremenil: geca ()

Joze_K ::

ok, zdaj sva že blizu....

tole dobim:

Kvaliteta: 656 x 352 / div3 - rad pa bi še audio info tole / mp3
Kvaliteta: 1920 x 1040 / avc1 / aac

da na koncu še audio codec napiše, zanimivo bi bilo, da bi izpisal oba tako kot sem zgoraj odebeljeno napisal...

struktura XML pa je tale // ni isto za tista dva primera zgoraj - kako naj mu povem da naj zdaj še audio codec išče...
oz. po logiki verjetno išče sedaj naslednjo besedo codec - bom poskusil dodati
   
	streamdetails-video-codec/h264/
        streamdetails-audio-codec/ac3


@geca hvala ti...

Zgodovina sprememb…

  • spremenil: Joze_K ()

Joze_K ::

jap deluje tako kot sem si mislil, kar še enkrat dodam naj bere codec in bere naslednjega v strukturi

tole je rezultat:
Kvaliteta: 640 x 352 / video: xvid / audio: mp3

tole pa koda:
K4 = xDoc.find('codec:not(:empty)').each(function(){ if(arr.indexOf($(this).text()) < 0) arr.push($(this).text()); });
Kvaliteta = arr[0] + " x " + arr[1] + " / video: " + arr[2]  + " / audio: " + arr[3];


če bom pri svojih modifikacijah še kje "zbremzal" se slišiva,....
zaenkrat pa @geca hvala ti...

Joze_K ::

nova ideja, nov izziv...

ko so bili filmi dodani v KODI / XBMC so potegnili Info z interneta TheMoviedb.org - med drugim tudi oceno...
link pa je podan na IMDB / kjer so ocene rahlo različne....

a je mogoče z javascriptom potegniti tudi oceno z IMDBja...moti me namreč, da so TheMoviedb.org ocene precej nižje od IMDB, dodatno pa se ocena seveda spreminja, ko več ljudi glasuje

sem gledal in je koda na strani taka:
<div class="ratingValue">
<strong title="7,0 based on 24.736 votes"><span itemprop="ratingValue">7,0</span></strong><span class="grey">/</span><span class="grey" itemprop="bestRating">10</span>                
</div>


link do strani na kateri je koda, pa že imam podatek v XML-u
npr:
Video ID: tt3168230

amacar ::

Zaradi corsa z javascriptom ne bo slo.

Joze_K ::

amacar je izjavil:

Zaradi corsa z javascriptom ne bo slo.


ok, sorry - kaj je "corsa"?

kr?en ::

geca ::

CORS lahko zaobideš tako, da zahtevo na IMDB izvedeš na strani strežnika (PHP oz. karkoli že predstavlja tvoj backend).


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Kontakt obrazec

Oddelek: Izdelava spletišč
61932 (1777) betmen
»

[Java]Problem z vektorjem

Oddelek: Programiranje
91262 (1131) KernelPanic
»

[android] vstavljanje slike

Oddelek: Programiranje
71141 (1038) messi
»

python -slovar

Oddelek: Programiranje
222985 (1964) Valex86
»

Jquery scrollable menu keyboard navigacija

Oddelek: Izdelava spletišč
5660 (547) Binji

Več podobnih tem