# jk_neighbour v0.6 # Adds a few useful features to txp:link_to_next/prev # Jeff Khonsary # http://jeffkhonsary.com # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YToxMDp7czo3OiJ2ZXJzaW9uIjtzOjM6IjAuNiI7czo2OiJhdXRob3IiO3M6MTM6IkplZmYg S2hvbnNhcnkiO3M6MTA6ImF1dGhvcl91cmkiO3M6MjM6Imh0dHA6Ly9qZWZma2hvbnNhcnku Y29tIjtzOjExOiJkZXNjcmlwdGlvbiI7czo1MToiQWRkcyBhIGZldyB1c2VmdWwgZmVhdHVy ZXMgdG8gdHhwOmxpbmtfdG9fbmV4dC9wcmV2IjtzOjQ6InR5cGUiO2k6MDtzOjQ6Im5hbWUi O3M6MTI6ImprX25laWdoYm91ciI7czo0OiJoZWxwIjtzOjg0MjoiCjxoMT5qa19uZWlnaGJv dXI8L2gxPgoKPHA+VGhpcyBwbHVnaW4gd29ya3MganVzdCBsaWtlIDxzdHJvbmc+dHhwOmxp bmtfdG9fbmV4dDwvc3Ryb25nPiBhbmQgPHN0cm9uZz50eHA6bGlua190b19wcmV2PC9zdHJv bmc+IHdpdGggdGhlIGFkZGVkIGFiaWxpdHkgdG8gcmVzdHJpY3QgYnkgY2F0ZWdvcnksIGFu ZCBzb3J0IGJ5IHRpdGxlIG9yIG90aGVyIHZhbHVlPC9wPgoKPHA+RnVuY3Rpb25zIGFyZSBh cyBmb2xsb3dzOjwvcD4KCjxici8+PGJyIC8+Cgo8aDI+amtfbGlua190b19wcmV2ICZhbXA7 IGprX2xpbmtfdG9fbmV4dDwvaDI+Cgo8cD5UaGVzZSB0YWdzIHdvcmsgZXhhY3RseSB0aGUg c2FtZSBhcyBsaW5rX3RvX3ByZXYgYW5kIGxpbmtfdG9fbmV4dCwgd2l0aCBmb3VyIGFkZGVk IGF0dHJpYnV0ZXM6IDxzdHJvbmc+Y2F0PC9zdHJvbmc+LCB1c2VkIHRvIHJlc3RyaWN0IHJl c3VsdHMgdG8gYSBhcnRpY2xlcyB3aXRoIGEgc3BlY2lmaWMgY2F0ZWdvcnkxIChjYXQ9ImN1 cnJlbnQiIHJlc3RyaWN0cyByZXN1bHRzIHRvIHRoZSBjdXJyZW50IGNhdGVnb3J5KSwgPHN0 cm9uZz5zb3J0Ynk8L3N0cm9uZz4sIHdoaWNoIGNhbiBiZSAicG9zdGVkIiBvciBhbiBhbHRl cm5hdGUgdmFsdWUgc3VjaCBhcyAidGl0bGUiLCA8c3Ryb25nPnNob3dmdXJ0dXJlPC9zdHJv bmc+LCB3aGljaCBpZiBzZXQgdG8gIjEiLCB3aWxsIHJldHVybiBhcnRpY2xlcyB3aXRoIHBv c3RlZCBkYXRlcyBpbiAgdGhlIGZ1dHVyZSAoZGVmYXVsdHMgdG8gIjAiKSwgYW5kIDxzdHJv bmc+YXR0czwvc3Ryb25nPiwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYWRkIGF0dHJpYnV0ZXMg dG8gdGhlIGxpbmsuPC9wPgoiO3M6NDoiY29kZSI7czo0NTIwOiIKCWZ1bmN0aW9uIGprX2xp bmtfdG9fbmV4dCgkYXR0cywgJHRoaW5nKQoJewoJCWdsb2JhbCAkaWQsICRuZXh0X2lkLCAk bmV4dF90aXRsZSwgJHRoaXNhcnRpY2xlLCAkczsKCgkJZXh0cmFjdChsQXR0cyhhcnJheSgK CQkJJ3Nob3dhbHdheXMnID0+IDAsCgkJCSdjYXQnID0+IE5VTEwsCgkJCSdzb3J0YnknID0+ ICd0aXRsZScsCgkJCSdzaG93ZnV0dXJlJyA9PiAwLAoJCQknYXR0cycgPT4gJycKCQkpLCAk YXR0cykpOwoKCQlpZiAoIWVtcHR5KCR0aGlzYXJ0aWNsZSkgJiYgJGNhdCA9PSAnY3VycmVu dCcpIHsKCQkgICRjYXQgPSAkdGhpc2FydGljbGVbJ2NhdGVnb3J5MSddOwoJCX0KCgkJZXh0 cmFjdChqa19nZXROZXh0UHJldigKCQkJJHNvcnRieSwKCQkJJGNhdCwKCQkJQCR0aGlzYXJ0 aWNsZVsndGhpc2lkJ10sCgkJCUAkdGhpc2FydGljbGVbJHNvcnRieV0sCgkJCUAkcywKCQkJ JHNob3dmdXR1cmUKCQkpKTsKCgkJaWYgKCRuZXh0X2lkKQoJCXsKCQkJJHVybCA9IHBlcm1s aW5rdXJsX2lkKCRuZXh0X2lkKTsKCgkJCWlmICgkdGhpbmcpCgkJCXsKCQkJCSR0aGluZyA9 IHBhcnNlKCR0aGluZyk7CgoJCQkJcmV0dXJuICc8YSByZWw9Im5leHQiIGhyZWY9IicuJHVy bC4nIicuCgkJCQkJKCRuZXh0X3RpdGxlICE9ICR0aGluZyA/ICcgdGl0bGU9IicuJG5leHRf dGl0bGUuJyInIDogJycpLgoJCQkJCSRhdHRzLic+Jy4kdGhpbmcuJzwvYT4nOwoJCQl9CgoJ CQlyZXR1cm4gJHVybDsKCQl9CgoJCXJldHVybiAoJHNob3dhbHdheXMpID8gcGFyc2UoJHRo aW5nKSA6ICcnOwoJfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBsaW5rIHRvIG5leHQgYXJ0aWNsZSwgaWYg aXQgZXhpc3RzCgoJZnVuY3Rpb24gamtfbGlua190b19wcmV2KCRhdHRzLCAkdGhpbmcpCgl7 CgkJZ2xvYmFsICRpZCwgJHByZXZfaWQsICRwcmV2X3RpdGxlLCAkdGhpc2FydGljbGUsICRz OwoKCQlleHRyYWN0KGxBdHRzKGFycmF5KAoJCQknc2hvd2Fsd2F5cycgPT4gMCwKCQkJJ2Nh dCcgPT4gTlVMTCwKCQkJJ3NvcnRieScgPT4gJ3RpdGxlJywKCQkJJ3Nob3dmdXR1cmUnID0+ IDAsCgkJCSdhdHRzJyA9PiAnJwoJCSksICRhdHRzKSk7CgoJCWlmICghZW1wdHkoJHRoaXNh cnRpY2xlKSAmJiAkY2F0ID09ICdjdXJyZW50JykgewoJCSAgJGNhdCA9ICR0aGlzYXJ0aWNs ZVsnY2F0ZWdvcnkxJ107CgkJfQoKCQlleHRyYWN0KGprX2dldE5leHRQcmV2KAoJCQkkc29y dGJ5LAoJCQkkY2F0LAoJCQlAJHRoaXNhcnRpY2xlWyd0aGlzaWQnXSwKCQkJQCR0aGlzYXJ0 aWNsZVskc29ydGJ5XSwKCQkJQCRzLAoJCQkkc2hvd2Z1dHVyZQoJCSkpOwoKCQlpZiAoJHBy ZXZfaWQpCgkJewoJCQkkdXJsID0gcGVybWxpbmt1cmxfaWQoJHByZXZfaWQpOwoKCQkJaWYg KCR0aGluZykKCQkJewoJCQkJJHRoaW5nID0gcGFyc2UoJHRoaW5nKTsKCgkJCQlyZXR1cm4g JzxhIHJlbD0icHJldiIgaHJlZj0iJy4kdXJsLiciJy4KCQkJCQkoJHByZXZfdGl0bGUgIT0g JHRoaW5nID8gJyB0aXRsZT0iJy4kcHJldl90aXRsZS4nIicgOiAnJykuCgkJCQkJJGF0dHMu Jz4nLiR0aGluZy4nPC9hPic7CgkJCX0KCgkJCXJldHVybiAkdXJsOwoJCX0KCgkJcmV0dXJu ICgkc2hvd2Fsd2F5cykgPyBwYXJzZSgkdGhpbmcpIDogJyc7Cgl9CgoKCWZ1bmN0aW9uIGpr X2dldG5laWdoYm91cigkc29ydGJ5LCAkY2F0LCAkc29ydF92YWx1ZSwgJHMsICR0eXBlLCAk c2hvd2Z1dHVyZSkgewoJCSR0eXBlID0gKCR0eXBlID09ICc+JykgPyAnPicgOiAnPCc7CgkJ JHBvc3RlZCA9ICghJHNob3dmdXR1cmUpID8gJ2FuZCBQb3N0ZWQgPCBub3coKScgOiAnJzsK CiAgICBmb3IgKCRpPTA7ICRpIDwgY291bnQoJHNvcnRieSk7ICRpKyspIHsKICAgICAgJHNv cnRieVskaV0gPSAkc29ydGJ5WyRpXS4iICR0eXBlICciLmRvU2xhc2goJHNvcnRfdmFsdWVb JGldKS4iJyI7CiAgICB9CgogICAgJHNvcnRieSA9IGltcGxvZGUoJyBBTkQgJywgJHNvcnRi eSk7CgoJCWlmICgkc29ydGJ5ID09ICdwb3N0ZWQnKSB7CgkJICAkc29ydF92YWx1ZSA9IHN0 cmZ0aW1lKCclWS0lbS0lZCAlSDolTTolUycsICRzb3J0X3ZhbHVlKTsKCQkgICRwb3N0ZWQg PSAnJzsKCQl9CgoJCWlmICghaXNfbnVsbCgkY2F0KSkgJGNhdCA9ICIgYW5kIGNhdGVnb3J5 MSA9ICckY2F0JyI7CgoJCSRxID0gYXJyYXkoCgkJCSJzZWxlY3QgSUQsIFRpdGxlLCB1cmxf dGl0bGUsIHVuaXhfdGltZXN0YW1wKFBvc3RlZCkgYXMgdXBvc3RlZAoJCQlmcm9tICIuUEZY LiJ0ZXh0cGF0dGVybiB3aGVyZSAkc29ydGJ5IiwKCQkJKCRzIT0nJyAmJiAkcyE9J2RlZmF1 bHQnKSA/ICJhbmQgU2VjdGlvbiA9ICciLmRvU2xhc2goJHMpLiInIiA6IGZpbHRlckZyb250 UGFnZSgpLAoJCQkkY2F0LAoJCQkiYW5kIFN0YXR1cz00ICRwb3N0ZWQgb3JkZXIgYnkgJHNv cnRieSIsCgkgICAgKCR0eXBlPT0nPCcpID8gJ2Rlc2MnIDogJ2FzYycsCgkgICAgJ2xpbWl0 IDEnCgkJKTsKCgkJJG91dCA9IGdldFJvdyhqb2luKCcgJywkcSkpOwoJCXJldHVybiAoaXNf YXJyYXkoJG91dCkpID8gJG91dCA6ICcnOwoJfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJZnVuY3Rpb24gamtf Z2V0TmV4dFByZXYoJHNvcnRieSwgJGNhdCwgJGlkLCAkc29ydF92YWx1ZSwgJHMsICRzaG93 ZnV0dXJlKQoJewoJICBnbG9iYWwgJHRoaXNhcnRpY2xlOwoKCQkvLyBJZiBuZXh0L3ByZXYg dGFncyBhcmUgcGxhY2VkIGJlZm9yZSBhbiBhcnRpY2xlIHRhZyBvbiBhIGxpc3QgcGFnZSwg d2UKCQkvLyBoYXZlIHRvIGd1ZXNzIHdoYXQgdGhlIGN1cnJlbnQgYXJ0aWNsZSBpcwoJCWlm ICghJGlkKSB7CgkJICAkcG9zdGVkID0gKCEkc2hvd2Z1dHVyZSkgPyAnYW5kIFBvc3RlZCA8 IG5vdygpJyA6ICcnOwoJCQkkY3VycmVudCA9IHNhZmVfcm93KCcqJywgJ3RleHRwYXR0ZXJu JywKCQkJCScxPTEgJy4KCQkJCSgoJHMhPScnICYmICRzIT0nZGVmYXVsdCcpID8gImFuZCBT ZWN0aW9uID0gJyIuZG9TbGFzaCgkcykuIiciIDogZmlsdGVyRnJvbnRQYWdlKCkpLgoJCQkJ J2FuZCBTdGF0dXM9NCAnLiRwb3N0ZWQuJyBvcmRlciBieSBQb3N0ZWQgZGVzYyBsaW1pdCAx Jyk7CgkJCWlmICgkY3VycmVudCkgewoJCQkJJGlkID0gJGN1cnJlbnRbJ0lEJ107CgkJCX0K CQl9CgoJCWlmICgkaWQpIHsKCQkgICRzb3J0YnkgPSBleHBsb2RlKCcsJywgJHNvcnRieSk7 CiAgICAgIGZvciAoJGk9MDsgJGkgPCBjb3VudCgkc29ydGJ5KTsgJGkrKykgewogICAgICAg ICRzb3J0X3ZhbHVlWyRpXSA9ICRjdXJyZW50WyRzb3J0YnlbJGldXTsKICAgICAgICBpZiAo c3RycG9zKCRzb3J0YnlbJGldLCAndXN0b20nKSkgewogICAgCSAgICAkY3VzdG9tX2ZpZWxk cyA9IGdldEN1c3RvbUZpZWxkcygpOwogICAgCSAgICAkY3VzdG9tX2ZpZWxkID0gaW50dmFs KHN0cl9yZXBsYWNlKCdjdXN0b21fJywgJycsICRzb3J0YnlbJGldKSk7CiAgICAJICAgICRj dXN0b21fZmllbGQgPSAkY3VzdG9tX2ZpZWxkc1skY3VzdG9tX2ZpZWxkXTsKICAgIAkgICAg JHNvcnRfdmFsdWVbJGldID0gJHRoaXNhcnRpY2xlWyRjdXN0b21fZmllbGRdOwogICAgCSAg fQogICAgICB9CgkgICAgaWYgKCRjYXQgPT0gJ2N1cnJlbnQnKSB7CiAgICAJCSRjYXQgPSAk Y3VycmVudFsnY2F0ZWdvcnkxJ107CgkJICB9CgkJICBlbHNlICRjYXQgPSAkY2F0OwoJICB9 CgoJICBlbHNlIHsKICAgICAgcmV0dXJuICcnOwogICAgfQoKCSAgLy8gcmVwbGFjZSAnY3Vz dG9tX2ZpZWxkJyB3aXRoIGZpZWxkIG5hbWUKCgoJCSR0aGVuZXh0ICAgICAgICAgICAgPSBq a19nZXRuZWlnaGJvdXIoJHNvcnRieSwgJGNhdCwgJHNvcnRfdmFsdWUsICRzLCAnPicsICRz aG93ZnV0dXJlKTsKCQkkb3V0WyduZXh0X2lkJ10gICAgID0gKCR0aGVuZXh0KSA/ICR0aGVu ZXh0WydJRCddIDogJyc7CgkJJG91dFsnbmV4dF90aXRsZSddICA9ICgkdGhlbmV4dCkgPyAk dGhlbmV4dFsnVGl0bGUnXSA6ICcnOwoJCSRvdXRbJ25leHRfdXRpdGxlJ10gPSAoJHRoZW5l eHQpID8gJHRoZW5leHRbJ3VybF90aXRsZSddIDogJyc7CgkJJG91dFsnbmV4dF9wb3N0ZWQn XSA9ICgkdGhlbmV4dCkgPyAkdGhlbmV4dFsndXBvc3RlZCddIDogJyc7CgoJCSR0aGVwcmV2 ICAgICAgICAgICAgPSBqa19nZXRuZWlnaGJvdXIoJHNvcnRieSwgJGNhdCwgJHNvcnRfdmFs dWUsICRzLCAnPCcsICRzaG93ZnV0dXJlKTsKCQkkb3V0WydwcmV2X2lkJ10gICAgID0gKCR0 aGVwcmV2KSA/ICR0aGVwcmV2WydJRCddIDogJyc7CgkJJG91dFsncHJldl90aXRsZSddICA9 ICgkdGhlcHJldikgPyAkdGhlcHJldlsnVGl0bGUnXSA6ICcnOwoJCSRvdXRbJ3ByZXZfdXRp dGxlJ10gPSAoJHRoZXByZXYpID8gJHRoZXByZXZbJ3VybF90aXRsZSddIDogJyc7CgkJJG91 dFsncHJldl9wb3N0ZWQnXSA9ICgkdGhlcHJldikgPyAkdGhlcHJldlsndXBvc3RlZCddIDog Jyc7CgoJCXJldHVybiAkb3V0OwoJfSI7czozOiJtZDUiO3M6MzI6ImU3MGM5MzVmMmM2ZjY5 YWM2NjBlMjBjMDhlOTRhNTIzIjtzOjg6ImNvbXByZXNzIjtiOjA7fQ==