Skip to content

Instantly share code, notes, and snippets.

@yitsushi
Last active August 29, 2015 13:57
Show Gist options
  • Save yitsushi/9508818 to your computer and use it in GitHub Desktop.
Save yitsushi/9508818 to your computer and use it in GitHub Desktop.
app.controllers.Link = function ($scope, $http) {
// Ebben vannak a linkek, amikről tudunk.
$scope.links = [];
// Hozzáadunk egy függvényt a scope-hoz, ami
// akkor fog meghívódni, amikor megnyomjuk az
// add gombot.
$scope.addLink = function addLink () {
// Azonnal el is indítunk egy POST kérést
// a szerver felé. A szerver egy link nevű
// paramétert vár a kérés törtzsében, ezt
// meg is adjuk neki. Ha kész, akkor meghívódik
// a callback.
$http.post('/link', { link: $scope.newLink }).success(function(data, status) {
// Ha a válasz státuszkódja nem 200, akkor
// baj van. Erről szólni illik a felhasználónak
// még ha nem is ilyen barbár alert ablakkal.
if (status != 200) {
alert("Valami hiba történt!");
return false;
}
// Ha van error kulcs a kapott adatban
// és az igaz, akkor adjuk vissza
// a felhasználónak a hozzá tartozó
// hibaüzenetet.
if (data.hasOwnProperty('error') && data.error == true) {
alert(data.message);
return false;
}
// Írjuk felül a kapott adatot, legalábbis
// a short tulajdonságát, mert az ugye
// nem tartalmazza csak a rövid kódot,
// míg mi linket szeretnénk kirakni.
data.short = App.utils.url.get("/" + data.short);
// Adjuk hozzá a tömbünk elejéhez.
$scope.links.unshift(data);
});
// Ürítsük ki a beviteli mezőnket, hogy
// új linket lehessen felvinni.
$scope.newLink = "";
return null;
};
};
// JavaScript tömörítők esetén nem tudja az Angular.js,
// hogy mik a paraméterek így meg kell neki mondani.
// Ha nem tömöríted, akkor is érdemes megadni, mert
// később kényelmetlen mindenhova felvinni, ha mégis
// szeretnéd tömöríteni.
app.controllers.Link.$inject = ['$scope', '$http'];
app.controllers.Link = function ($scope) {
$scope.links = [];
$scope.addLink = function addLink () {
$scope.links.unshift({
short: App.utils.url.get("/a4d56g"),
long: $scope.newLink,
clicks: 0,
created_at: new Date()
});
$scope.newLink = "";
return null;
};
};
app.controllers.Link.$inject = ['$scope'];
module.exports.index = function(req, res) {
res.json({ "wtf": true });
};
var Link = function(long_url) {
// Így néz ki egy link.
// Ezt a struktúrát használtunk az első részben is.
this.short = "";
this.long = long_url;
this.clicks = 0;
this.created_at = new Date();
// Legeneráltatjuk a rövid azonosítót
this.generateShort();
};
Link.prototype.generateShort = function() {
// A range nevű hosszú string lesz az alapja a generálásnak.
// Ezen karakterek fordulhatnak elő benne.
var range = "qwertyuiopasdfghjklzxcvbnm1234567890",
// elmentjuk a hosszát is ennek, hogy ne kelljen a ciklusban
// minden körben megnézni újra.
rangeLength = range.length;
// Jelenleg egy hét karakteres azonosító jó lesz.
for (var i=0; i < 7; i++) {
// Minden körben elmentünk a range stringből egy véletlenszerű karaktert.
// Elég primitív generálás, de majd később okosítunk rajta, hogy
// ne kelljen sok kört futni az egyedisége miatt.
this.short += range.charAt(Math.floor(Math.random() * rangeLength));
}
return true;
};
module.exports.addLink = function(req, res) {
// Kiszedjük a POST (azaz body) részből a linket
// Ha nincs, akkor `link` vagy 0 karakter hosszú,
// akkorvisszatérünk hibával.
if (typeof req.body.link == "undefined" || req.body.link.length < 1) {
return res.json({"error": true, "message": "empty url"});
}
// Ha van link, akkor csinálunk egy új Link példányt,
// ami majd lerendezi nekünk a megfelelő átalakításokat
var link = new Link(req.body.link);
// aztán vissza is tudunk vele térni.
return res.json(link);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment