Diff
checker
Text
Text
Bilder
Dokumente
Excel
Ordner
Legal
Enterprise
Desktop-App
Preise
Einloggen
Diffchecker Desktop herunterladen
Texte vergleichen
Finde den Unterschied zwischen zwei Textdateien
Werkzeuge
Verlauf
Live-Editor
Gleiches ausblenden
Zeilenumbruch aus
Ansicht
Zweispaltig
Einspaltig
Vergleichsgenauigkeit
Intelligent
Wort
Zeichen
Syntaxhervorhebung
Syntax auswählen
Ignorieren
Text umwandeln
Zur ersten Änderung
Eingabe bearbeiten
Diffchecker Desktop
Der sicherste Weg, Diffchecker zu nutzen. Hol dir die Desktop-App: Deine Diffs verlassen nie deinen Computer!
Desktop holen
Untitled diff
Erstellt
vor 9 Jahren
Diff läuft nie ab
Löschen
Exportieren
Teilen
Erklären
124 Entfernungen
Zeilen
Gesamt
Entfernt
Zeichen
Gesamt
Entfernt
Um diese Funktion weiterhin zu nutzen, aktualisiere auf
Diff
checker
Pro
Preise anzeigen
142 Zeilen
Kopieren
78 Hinzufügungen
Zeilen
Gesamt
Hinzugefügt
Zeichen
Gesamt
Hinzugefügt
Um diese Funktion weiterhin zu nutzen, aktualisiere auf
Diff
checker
Pro
Preise anzeigen
91 Zeilen
Kopieren
Kopieren
Kopiert
Kopieren
Kopiert
const {
div, li, img, h, h2, p, a,
makeDOMDriver
} = CycleDOM;
const {
run } = Cycle;
const {
makeDOMDriver
, h
} = CycleDOM;
const { makeHTTPDriver } = CycleHTTPDriver;
const xs = xstream.default;
Kopieren
Kopiert
Kopieren
Kopiert
function intent(DOMSource) {
const getRandomItem = arr => arr[Math.floor(Math.random() * arr.length)];
// Create streams for the intents that will be observed
const refreshClickStream$ = DOMSource.select('.refresh').events('click');
const close1ClickStream$ = DOMSource.select('.close1').events('click');
const close2ClickStream$ = DOMSource.select('.close2').events('click');
const close3ClickStream$ = DOMSource.select('.close3').events('click');
// Return all the streams ready to be subscribed
return {refreshClickStream$, close1ClickStream$, close2ClickStream$, close3ClickStream$};
}
Kopieren
Kopiert
Kopieren
Kopiert
function
createSuggestionStream(refreshClickStream, responseStream, closeClickStream
) {
function
intent(DOM, HTTP
) {
return
closeClickStream.startWith('startup
click')
return
{
.
combineLatest(responseStream,
fetchBeers: HTTP.select('fetchBeers').flatten(),
function(click, listBeers) {
fetchBeer: HTTP.select('fetchBeer').flatten(),
return
listBeers[Math.floor(Math.random()*listBeers.length)];
refresh: DOM.select('.refresh').events('click'),
}
refreshOne: DOM.select('.close').events('
click')
)
.
map(e => {
.merge(
e.preventDefault();
refreshClickStream.map(function(){
return
e.target.dataset.beerNumber;
return null;
})
})
Kopieren
Kopiert
Kopieren
Kopiert
)
};
.startWith(null);
}
// Update UI elements every time somethign is streamed
function renderSuggestion(suggestedBeer, selector) {
var suggestionEl = document.querySelector(selector);
if (suggestedBeer != null) {
suggestionEl.style.visibility = 'visible';
var usernameEl = suggestionEl.querySelector('.username');
usernameEl.textContent = suggestedBeer.name;
var imgEl = suggestionEl.querySelector('img');
imgEl.src = suggestedBeer.image_url;
var descriptionEl = suggestionEl.querySelector('.description');
descriptionEl.textContent = suggestedBeer.description;
}
}
}
Kopieren
Kopiert
Kopieren
Kopiert
// Subscribe the observers to API results
function model(
actions
) {
function model(
refreshClickStream$, close1ClickStream$, close2ClickStream$, close3ClickStream$
) {
const allBeers$ = actions.fetchBeers
var requestStream = refreshClickStream$.startWith('startup click')
.map(res => res.body)
.map(function() {
.map(beers => [ getRandomItem(beers), getRandomItem(beers), getRandomItem(beers) ])
return 'https://api.punkapi.com/v2/beers';
.startWith([]);
});
const singleBeer$ = actions.fetchBeer
.map(res => [ getRandomItem(res.body), res.request.beerNumber ])
var responseStream = requestStream
.startWith([]);
.flatMap(function(requestUrl) {
return xs.combine(allBeers$, singleBeer$)
return Rx.Observable.fromPromise($.getJSON(requestUrl));
.map(([ allBeers, [ beer, beerNumber ] ]) => {
if (beer) allBeers[beerNumber - 1] = beer;
return allBeers;
});
});
Kopieren
Kopiert
Kopieren
Kopiert
var suggestion1Stream = createSuggestionStream(refreshClickStream$, responseStream, close1ClickStream$);
var suggestion2Stream = createSuggestionStream(refreshClickStream$, responseStream, close2ClickStream$);
var suggestion3Stream = createSuggestionStream(refreshClickStream$, responseStream, close3ClickStream$);
suggestion1Stream.subscribe(function(suggestedBeer) {
renderSuggestion(suggestedBeer, '.suggestion1');
});
suggestion2Stream.subscribe(function(suggestedBeer) {
renderSuggestion(suggestedBeer, '.suggestion2');
});
suggestion3Stream.subscribe(function(suggestedBeer) {
renderSuggestion(suggestedBeer, '.suggestion3');
});
return responseStream.merge(suggestion1Stream)
.merge(suggestion2Stream)
.merge(suggestion3Stream);
}
}
Kopieren
Kopiert
Kopieren
Kopiert
// Render the view
function view(state$) {
function view(state$) {
Kopieren
Kopiert
Kopieren
Kopiert
return state$.map(
state
=>
return state$.map(
([beer1, beer2, beer3])
=>
h('div', [
div
(
[
h('
div
.header',
[
div('.info', [
h('h2', 'Brewdog\'s beer'),
p('Developed by Anderson Leite using RxJS and Cycle.js'),
h('a.refresh', { attrs: { href: '#' } } , 'refresh')
p('See the 3 part blog post'
)
]),
h('div.containerx', [
h('div.left.box', [
h('li.suggestion1', [
renderBeer(beer1, 1)
]
)
]),
]),
Kopieren
Kopiert
Kopieren
Kopiert
div
('.header
', [
h('
div
.middle.box
', [
h
2('Brewdog\'s
beer
'),
h
('li.suggestion2', [
a('.refresh', {href: '#'}, 'refresh'
)
renderBeer(
beer
2, 2)
]
)
]),
]),
Kopieren
Kopiert
Kopieren
Kopiert
div('.containerx', [
h('div
.right
.box', [
h('li.suggestion3', [
div('.left .box', [
renderBeer(beer3, 3)
h('li.suggestion1', [
div('.beer', [
img()
]),
p('.username', 'loading...'),
p('.description', 'loading...'),
a('.close .close1', {href: '#'}, 'show me other')
])
]),
div('.middle .box', [
h('li.suggestion2', [
div('.beer', [
img()
]),
p('.username', 'loading...'),
p('.description', 'loading...'),
a('.close .close2', {href: '#'}, 'show me other')
])
]),
div('
.right
.box', [
h('li.suggestion3', [
div('.beer', [
img()
]),
p('.username', 'loading...'),
p('.description', 'loading...'),
a('.close .close3', {href: '#'}, 'show me other')
])
])
])
Kopieren
Kopiert
Kopieren
Kopiert
])
])
])
])
Kopieren
Kopiert
Kopieren
Kopiert
)
]));
}
function renderBeer(beer, beerNumber) {
return h('div', [
h('div.beer', [
h('img', { attrs: beer ? { src: beer.image_url } : null })
]),
h('p.username', beer ? beer.name : 'loading...'),
h('p.description', beer ? beer.description : 'loading...'),
h('a.close', { attrs: { 'data-beer-number': beerNumber, href: '#' } }, 'show me other')
]);
}
}
function main(sources) {
function main(sources) {
Kopieren
Kopiert
Kopieren
Kopiert
const
{refreshClickStream$, close1ClickStream$, close2ClickStream$, close3ClickStream$}
= intent(sources.DOM
);
const
actions
= intent(sources.DOM
, sources.HTTP
);
const
state$ = model(refreshClickStream$, close1ClickStream$, close2ClickStream$, close3ClickStream$);
const
beersRequest$ = actions.refresh
const
vtree
$ =
view(Rx.Observable.of('')
);
.startWith()
.mapTo({ url: 'https://api.punkapi.com/v2/beers', category: 'fetchBeers' });
const beerRequest$ = actions.refreshOne
.map(beerNumber => ({ url: 'https://api.punkapi.com/v2/beers', category: 'fetchBeer', beerNumber }));
const
request
$ =
xs.merge(beersRequest$, beerRequest$
);
return {
return {
Kopieren
Kopiert
Kopieren
Kopiert
DOM:
vtree
$
DOM:
view(model(actions)),
HTTP: request
$
};
};
}
}
Kopieren
Kopiert
Kopieren
Kopiert
const drivers =
{
run(main,
{
DOM: makeDOMDriver('#app')
DOM: makeDOMDriver('#app')
,
};
HTTP: makeHTTPDriver()
}
);
Cycle.run(main, drivers
);
Gespeicherte Diffs
Originaltext
Datei öffnen
const {div, li, img, h, h2, p, a, makeDOMDriver} = CycleDOM; function intent(DOMSource) { // Create streams for the intents that will be observed const refreshClickStream$ = DOMSource.select('.refresh').events('click'); const close1ClickStream$ = DOMSource.select('.close1').events('click'); const close2ClickStream$ = DOMSource.select('.close2').events('click'); const close3ClickStream$ = DOMSource.select('.close3').events('click'); // Return all the streams ready to be subscribed return {refreshClickStream$, close1ClickStream$, close2ClickStream$, close3ClickStream$}; } function createSuggestionStream(refreshClickStream, responseStream, closeClickStream) { return closeClickStream.startWith('startup click') .combineLatest(responseStream, function(click, listBeers) { return listBeers[Math.floor(Math.random()*listBeers.length)]; } ) .merge( refreshClickStream.map(function(){ return null; }) ) .startWith(null); } // Update UI elements every time somethign is streamed function renderSuggestion(suggestedBeer, selector) { var suggestionEl = document.querySelector(selector); if (suggestedBeer != null) { suggestionEl.style.visibility = 'visible'; var usernameEl = suggestionEl.querySelector('.username'); usernameEl.textContent = suggestedBeer.name; var imgEl = suggestionEl.querySelector('img'); imgEl.src = suggestedBeer.image_url; var descriptionEl = suggestionEl.querySelector('.description'); descriptionEl.textContent = suggestedBeer.description; } } // Subscribe the observers to API results function model(refreshClickStream$, close1ClickStream$, close2ClickStream$, close3ClickStream$) { var requestStream = refreshClickStream$.startWith('startup click') .map(function() { return 'https://api.punkapi.com/v2/beers'; }); var responseStream = requestStream .flatMap(function(requestUrl) { return Rx.Observable.fromPromise($.getJSON(requestUrl)); }); var suggestion1Stream = createSuggestionStream(refreshClickStream$, responseStream, close1ClickStream$); var suggestion2Stream = createSuggestionStream(refreshClickStream$, responseStream, close2ClickStream$); var suggestion3Stream = createSuggestionStream(refreshClickStream$, responseStream, close3ClickStream$); suggestion1Stream.subscribe(function(suggestedBeer) { renderSuggestion(suggestedBeer, '.suggestion1'); }); suggestion2Stream.subscribe(function(suggestedBeer) { renderSuggestion(suggestedBeer, '.suggestion2'); }); suggestion3Stream.subscribe(function(suggestedBeer) { renderSuggestion(suggestedBeer, '.suggestion3'); }); return responseStream.merge(suggestion1Stream) .merge(suggestion2Stream) .merge(suggestion3Stream); } // Render the view function view(state$) { return state$.map(state => div([ div('.info', [ p('Developed by Anderson Leite using RxJS and Cycle.js'), p('See the 3 part blog post') ]), div('.header', [ h2('Brewdog\'s beer'), a('.refresh', {href: '#'}, 'refresh') ]), div('.containerx', [ div('.left .box', [ h('li.suggestion1', [ div('.beer', [ img() ]), p('.username', 'loading...'), p('.description', 'loading...'), a('.close .close1', {href: '#'}, 'show me other') ]) ]), div('.middle .box', [ h('li.suggestion2', [ div('.beer', [ img() ]), p('.username', 'loading...'), p('.description', 'loading...'), a('.close .close2', {href: '#'}, 'show me other') ]) ]), div('.right .box', [ h('li.suggestion3', [ div('.beer', [ img() ]), p('.username', 'loading...'), p('.description', 'loading...'), a('.close .close3', {href: '#'}, 'show me other') ]) ]) ]) ]) ) } function main(sources) { const {refreshClickStream$, close1ClickStream$, close2ClickStream$, close3ClickStream$} = intent(sources.DOM); const state$ = model(refreshClickStream$, close1ClickStream$, close2ClickStream$, close3ClickStream$); const vtree$ = view(Rx.Observable.of('')); return { DOM: vtree$ }; } const drivers = { DOM: makeDOMDriver('#app') }; Cycle.run(main, drivers);
Bearbeitung
Datei öffnen
const { run } = Cycle; const { makeDOMDriver, h } = CycleDOM; const { makeHTTPDriver } = CycleHTTPDriver; const xs = xstream.default; const getRandomItem = arr => arr[Math.floor(Math.random() * arr.length)]; function intent(DOM, HTTP) { return { fetchBeers: HTTP.select('fetchBeers').flatten(), fetchBeer: HTTP.select('fetchBeer').flatten(), refresh: DOM.select('.refresh').events('click'), refreshOne: DOM.select('.close').events('click') .map(e => { e.preventDefault(); return e.target.dataset.beerNumber; }) }; } function model(actions) { const allBeers$ = actions.fetchBeers .map(res => res.body) .map(beers => [ getRandomItem(beers), getRandomItem(beers), getRandomItem(beers) ]) .startWith([]); const singleBeer$ = actions.fetchBeer .map(res => [ getRandomItem(res.body), res.request.beerNumber ]) .startWith([]); return xs.combine(allBeers$, singleBeer$) .map(([ allBeers, [ beer, beerNumber ] ]) => { if (beer) allBeers[beerNumber - 1] = beer; return allBeers; }); } function view(state$) { return state$.map(([beer1, beer2, beer3]) => h('div', [ h('div.header', [ h('h2', 'Brewdog\'s beer'), h('a.refresh', { attrs: { href: '#' } } , 'refresh') ]), h('div.containerx', [ h('div.left.box', [ h('li.suggestion1', [ renderBeer(beer1, 1) ]) ]), h('div.middle.box', [ h('li.suggestion2', [ renderBeer(beer2, 2) ]) ]), h('div.right.box', [ h('li.suggestion3', [ renderBeer(beer3, 3) ]) ]) ]) ])); } function renderBeer(beer, beerNumber) { return h('div', [ h('div.beer', [ h('img', { attrs: beer ? { src: beer.image_url } : null }) ]), h('p.username', beer ? beer.name : 'loading...'), h('p.description', beer ? beer.description : 'loading...'), h('a.close', { attrs: { 'data-beer-number': beerNumber, href: '#' } }, 'show me other') ]); } function main(sources) { const actions = intent(sources.DOM, sources.HTTP); const beersRequest$ = actions.refresh .startWith() .mapTo({ url: 'https://api.punkapi.com/v2/beers', category: 'fetchBeers' }); const beerRequest$ = actions.refreshOne .map(beerNumber => ({ url: 'https://api.punkapi.com/v2/beers', category: 'fetchBeer', beerNumber })); const request$ = xs.merge(beersRequest$, beerRequest$); return { DOM: view(model(actions)), HTTP: request$ }; } run(main, { DOM: makeDOMDriver('#app'), HTTP: makeHTTPDriver() });
Unterschied finden