dmFyIGxhbmdEaXIgPSAibGFuZ3MiDQp2YXIgZGVmYXVsdExhbmd1YWdlIHN0cmluZw0KdmFyIGxhbmdzIG1hcFtzdHJpbmddaTE4bi5UcmFuc2xhdGVGdW5jDQoNCmZ1bmMgSW5pdCgpIHsNCglpZiBsYW5ncyA9PSBuaWwgew0KCQlsYW5ncyA9IG1ha2UobWFwW3N0cmluZ11pMThuLlRyYW5zbGF0ZUZ1bmMpDQoJfQ0KDQoJZGlyTGlzdCwgXyA6PSBpb3V0aWwuUmVhZERpcihmbXQuU3ByaW50ZigiJXMlcyIsIGVudi5HZXRQYXRoKCksIGxhbmdEaXIpKQ0KCWRlZmF1bHRMYW5ndWFnZSA9IGNvbmZpZy5HZXREZWZhdWx0TGFuZ3VhZ2UoKQ0KCWhhc0RlZmF1bHRMYW5ndWFnZSA6PSBmYWxzZQ0KDQoJZm9yIF8sIGRpciA6PSByYW5nZSBkaXJMaXN0IHsNCgkJbGFuZyA6PSBkaXIuTmFtZSgpDQoJCWZpbGVzLCBfIDo9IGlvdXRpbC5SZWFkRGlyKGZtdC5TcHJpbnRmKCIlcyVzLyVzIiwgZW52LkdldFBhdGgoKSwgbGFuZ0RpciwgbGFuZykpDQoNCgkJaWYgbGFuZyA9PSBkZWZhdWx0TGFuZ3VhZ2Ugew0KCQkJaGFzRGVmYXVsdExhbmd1YWdlID0gdHJ1ZQ0KCQl9DQoNCgkJZm9yIF8sIGZpbGUgOj0gcmFuZ2UgZmlsZXMgew0KCQkJZmlsZU5hbWUgOj0gZmlsZS5OYW1lKCkNCgkJCWVyciA6PSBpMThuLkxvYWRUcmFuc2xhdGlvbkZpbGUoZm10LlNwcmludGYoIiVzJXMvJXMvJXMiLCBlbnYuR2V0UGF0aCgpLCBsYW5nRGlyLCBsYW5nLCBmaWxlTmFtZSkpDQoNCgkJCWlmIGVyciAhPSBuaWwgew0KCQkJCXBhbmljKGZtdC5TcHJpbnRmKCJFcnJvciBsb2FkaW5nIGxhbmd1YWdlIGZpbGUgLT4gJXMvJXM6ICVzIiwgbGFuZywgZmlsZU5hbWUsIGVycikpDQoJCQl9DQoNCgkJCWxvZy5JbmZvLlByaW50bG4oIkxvYWRlZCB0cmFuc2xhdGlvbiBmaWxlIiwgIi0+IiwgZmlsZU5hbWUpDQoJCX0NCg0KCQl2YXIgZXJyIGVycm9yDQoJCWxhbmdzW2xhbmddLCBlcnIgPSBpMThuLlRmdW5jKGxhbmcpDQoNCgkJaWYgZXJyICE9IG5pbCB7DQoJCQlwYW5pYyhmbXQuU3ByaW50ZigiRXJyb3IgcGFyc2luZyBsYW5ndWFnZSAtPiAlczogJXMiLCBsYW5nLCBlcnIpKQ0KCQl9DQoNCgkJbG9nLkluZm8uUHJpbnRsbigiRmluaXNoZWQgbG9hZGluZyBsYW5ndWFnZSIsICItPiIsIGxhbmcpDQoJfQ0KDQoJaWYgIWhhc0RlZmF1bHRMYW5ndWFnZSB7DQoJCXBhbmljKGZtdC5TcHJpbnRmKCJUaGVyZSBpcyBubyB0cmFuc2xhdGlvbiBmb3IgJXMiLCBkZWZhdWx0TGFuZ3VhZ2UpKQ0KCX0NCn0NCg0KZnVuYyBHZXRVc2VyTGFuZ3VhZ2UociAqaHR0cC5SZXF1ZXN0KSBzdHJpbmcgew0KCXJldCA6PSBjb25maWcuR2V0RGVmYXVsdExhbmd1YWdlKCkNCgl1c2VyTGFuZ3MsIF8sIF8gOj0gbGFuZ3VhZ2UuUGFyc2VBY2NlcHRMYW5ndWFnZShyLkhlYWRlci5HZXQoIkFjY2VwdC1MYW5ndWFnZSIpKQ0KDQoJZm9yIF8sIHVzZXJMYW5nIDo9IHJhbmdlIHVzZXJMYW5ncyB7DQoJCXVzZXJMYW5nU3RyIDo9IHN0cmluZ3MuUmVwbGFjZSh1c2VyTGFuZy5TdHJpbmcoKSwgIi0iLCAiXyIsIC0xKQ0KCQl1c2VyTGFuZ1NwbGl0dGVkIDo9IHN0cmluZ3MuU3BsaXQodXNlckxhbmdTdHIsICJfIikNCg0KCQlpZiBMYW5nRXhpc3RzKHVzZXJMYW5nU3RyKSB7DQoJCQlyZXQgPSB1c2VyTGFuZ1N0cg0KCQkJYnJlYWsNCgkJfSBlbHNlIGlmIGxlbih1c2VyTGFuZ1NwbGl0dGVkKSA+IDEgew0KCQkJaWYgTGFuZ0V4aXN0cyh1c2VyTGFuZ1NwbGl0dGVkWzBdKSB7DQoJCQkJcmV0ID0gdXNlckxhbmdTcGxpdHRlZFswXQ0KCQkJCWJyZWFrDQoJCQl9DQoJCX0NCgl9DQoJcmV0dXJuIHJldA0KfQ0KDQpmdW5jIExhbmdFeGlzdHMobGFuZyBzdHJpbmcpIGJvb2wgew0KCV8sIG9rIDo9IGxhbmdzW2xhbmddDQoJcmV0dXJuIG9rDQp9DQoNCmZ1bmMgR2V0QWxsKCkgW11zdHJpbmcgew0KCXZhciByZXQgW11zdHJpbmcNCglmb3IgbGFuZyA6PSByYW5nZSBsYW5ncyB7DQoJCXJldCA9IGFwcGVuZChyZXQsIGxhbmcpDQoJfQ0KCXJldHVybiByZXQNCn0NCg0KZnVuYyBHZXQobGFuZyBzdHJpbmcsIGtleSBzdHJpbmcpIHN0cmluZyB7DQoJcmV0dXJuIEdldFBsdXJhbChsYW5nLCBrZXksIDEpDQp9DQoNCmZ1bmMgR2V0UGx1cmFsKGxhbmcgc3RyaW5nLCBrZXkgc3RyaW5nLCBhbW91bnQgaW50KSBzdHJpbmcgew0KCXJldCA6PSBrZXkNCg0KCWlmIExhbmdFeGlzdHMobGFuZykgew0KCQlyZXQgPSBsYW5nc1tsYW5nXShrZXksIGFtb3VudCkNCg0KCQlpZiByZXQgPT0ga2V5ICYmIGxhbmcgIT0gZGVmYXVsdExhbmd1YWdlIHsNCgkJCXJldCA9IEdldChkZWZhdWx0TGFuZ3VhZ2UsIGtleSkNCgkJfQ0KCX0NCglyZXR1cm4gcmV0DQp9
Hello, I'm
Philipp König
a software developer based in Furtwangen, Germany.
I created two Google Chrome extensions to improve the user experience and provide some new features to the browser.
I always disliked the way of managing bookmarks in Google Chrome, especially when dealing with many entries and directories.
To face this problem, I created a browser extension, which displays the bookmarks as nested list in togglable sidebar.
Currently over 150000 people are using my extensions.
Read moreI uploaded some of my projects to Github. Feel free to check them out and contribute by sending feedback, suggestions, or report issues.
Show profile