updated default config, moved example demos to a separate repository
parent
7c4ec8d876
commit
0c44c92dab
|
@ -42,6 +42,8 @@ Originally made for Junction Stupidhack 2020; Created by [redsPL](https://sakamo
|
|||
|
||||
## Variables that we think are cool!
|
||||
|
||||
![](https://f.sakamoto.pl/d6584c01-1c48-42b9-935b-d9a89af4e071file_101.jpg)
|
||||
|
||||
- $post_data - array, contains data from urlencoded POSTs
|
||||
- $post_multipart - array, contains URIs to uploaded files from multipart/form-data POSTs
|
||||
- $get_data - array, contains data from GETs
|
||||
|
|
|
@ -9,20 +9,23 @@ cfg[autoindex]=true
|
|||
cfg[auth_required]=false
|
||||
cfg[auth_realm]="Laura is cute <3"
|
||||
|
||||
cfg[ssl]=true
|
||||
cfg[ssl]=false
|
||||
cfg[ssl_port]=8443
|
||||
cfg[ssl_cert]=''
|
||||
cfg[ssl_key]=''
|
||||
|
||||
cfg[extension]='shs'
|
||||
cfg[extra_headers]='server: HTTP.sh/0.9'
|
||||
cfg[extra_headers]='server: HTTP.sh/0.91 (devel)'
|
||||
|
||||
cfg[title]='ddd defies development'
|
||||
|
||||
cfg[php_enabled]=true
|
||||
cfg[python_enabled]=true
|
||||
cfg[php_enabled]=false
|
||||
cfg[python_enabled]=false
|
||||
|
||||
# by default, those logs are placed in the main directory - change it to /var/log/_name_ for production
|
||||
cfg[log_http]='log_http'
|
||||
cfg[log_https]='log_https'
|
||||
cfg[log_misc]='log'
|
||||
|
||||
cfg[proxy]=false
|
||||
cfg[proxy_url]='http://example.com/'
|
|
@ -1,8 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
source templates/head.sh
|
||||
|
||||
echo "<form action='listing.shs'>
|
||||
<input type='text' name='q'>
|
||||
<input type='submit' value='Search'>
|
||||
</form>"
|
|
@ -1,68 +0,0 @@
|
|||
#!/bin/bash
|
||||
cat webroot/allegro/listing_top.txt
|
||||
|
||||
query="$(echo "${get_data[q]}" | sed -s "s/ /%20/g;s/+/%20/g")"
|
||||
query_nice=$(echo ${get_data[q]} | sed -s "s/+/ /g;")
|
||||
[[ ${get_data[order]} ]] && order=${get_data[order]} || order='p'
|
||||
|
||||
echo "Searching for '$query_nice'"
|
||||
|
||||
IFS=$'\n'
|
||||
data=$(curl "https://allegro.pl/listing?string=$query&order=$order" | sed -E 's/<\/article>/\n/g' | grep -ohE "allegro.pl/oferta(.*)")
|
||||
|
||||
cost=($(echo "$data" | grep -Eoh "span class=\"[A-Za-z0-9_]{12}\">([0-9]+|[0-9]+ [0-9]+)<span>,<\/span><span class=\"[A-Za-z0-9_]{12}\">[0-9]+" | sed -E 's/span class=\"[A-Za-z0-9_]{12}\">//g;s/<span>//g;s/<\/span><//g'))
|
||||
img=($(echo "${data}" | sed -E 's/\" [a-z]{3,5}\="/\n/g;s/,/\n/g;s/ [0-9]+w//g;s/" \/>//g' | grep -ohE "[a-z0-9].allegroimg.com/s[0-9]+/[a-z0-9]{6}/[a-z0-9]{28}/(.*)"))
|
||||
name=($(echo "${data}" | sed -E 's/<\/a>/\n/g' | grep -ohE 'title="">(.*)' | sed -s 's/title="">//g'))
|
||||
links=($(echo "${data}" | sed -E 's/"(.*)//g'))
|
||||
|
||||
for (( i=0; i<${#img[@]}; i++ )) do
|
||||
#echo "<div><a href='https://${links[$i]}'><img src='https://${img[$i]}'>${cost[$i]}PLN<br><b>${name[$i]}</b></a></div>"
|
||||
|
||||
echo "
|
||||
<!-- ITEM BEGIN -->
|
||||
<tr>
|
||||
<td class='cellPhoto'>
|
||||
<a href='${links[$i]}' class='iImg' title='${name[$i]}'><img src='https://${img[$i]}'></a>
|
||||
</td>
|
||||
|
||||
|
||||
<td class='cellName'>
|
||||
<div>
|
||||
<a href='https://${links[$i]}' class='alleLink iTitle'>
|
||||
<span>${name[$i]}</span>
|
||||
</a>
|
||||
<span class='listingParams'>
|
||||
</span>
|
||||
<span>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
<td class='cellPrice'>
|
||||
<span class='iPriceBN'><span>Kup Teraz!</span> ${cost[$i]} zł</span>
|
||||
</td>
|
||||
|
||||
<td class='cellTrans'>
|
||||
<div>
|
||||
<span class='iPriceBND'>
|
||||
<span>z dostawą:</span>
|
||||
<span class='listingPostagePrice'>??? zł</span>
|
||||
</span>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
<td class='cellOffer'>
|
||||
<span class='iOffer'><span>Popularność:</span> ???</span> </td>
|
||||
|
||||
<td class='cellTime alert'>
|
||||
<span class='iTime'><span>Do końca:</span> <font color='#ff0000'>???</font></span>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- ITEM END -->
|
||||
"
|
||||
|
||||
|
||||
done
|
||||
|
||||
cat webroot/allegro/listing_bottom.txt
|
|
@ -1,820 +0,0 @@
|
|||
|
||||
|
||||
|
||||
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
</div><!--/tabMainBox-->
|
||||
</div><!--/tabContent-->
|
||||
|
||||
<div id="pagerBottom">
|
||||
<div class="td-pager-bottom">
|
||||
|
||||
<strong class="orange large">1</strong>
|
||||
|
||||
<a class="alleLink" href="/web/20120904144913/http://allegro.pl/listing.php/search?p=2&sg=0&string=ibm"><span>2</span></a>
|
||||
|
||||
<a class="alleLink" href="/web/20120904144913/http://allegro.pl/listing.php/search?p=3&sg=0&string=ibm"><span>3</span></a>
|
||||
|
||||
... <a class="alleLink" href="/web/20120904144913/http://allegro.pl/listing.php/search?p=179&sg=0&string=ibm"><span>179</span></a>
|
||||
|
||||
|
||||
<a href="/web/20120904144913/http://allegro.pl/listing.php/search?p=2&sg=0&string=ibm" class="arrRight-bottom" title="Następna"></a>
|
||||
</div>
|
||||
</div>
|
||||
<a id="idPrintGo" href="" class="smaller alleLink noprint"><span>Wersja do druku</span></a>
|
||||
|
||||
<div id="compareItems" class="pl"></div>
|
||||
|
||||
|
||||
<!-- Footer start -->
|
||||
</div> <!-- /pagecontent1 -->
|
||||
|
||||
<div id="footerContentBox" class="newSpecial">
|
||||
<a href="#top" id="toTop"></a>
|
||||
<div class="ohidden">
|
||||
<div id="footerAbout">
|
||||
<h2>O Allegro</h2>
|
||||
<ul>
|
||||
<li><a href="/web/20120904144913/http://allegro.pl/country_pages/1/0/marketing/about.php">O nas</a></li>
|
||||
<li><a href="https://web.archive.org/web/20120904144913/http://kariera.allegro.pl/">Praca w Grupie Allegro</a></li>
|
||||
<li><a href="/web/20120904144913/http://allegro.pl/country_pages/1/0/marketing/allforplanet/">Fundacja All For Planet</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="footerBuy">
|
||||
<h2>Bezpieczne zakupy</h2>
|
||||
<ul>
|
||||
<li><a href="https://web.archive.org/web/20120904144913/http://uslugi.allegro.pl/pok/">Program Ochrony Kupujących</a></li>
|
||||
<li><a href="/web/20120904144913/http://allegro.pl/RightsProtectionCooperationProgram.php">Współpraca w Ochronie Praw</a></li>
|
||||
<li><a href="https://web.archive.org/web/20120904144913/http://uslugi.allegro.pl/sa/">Standard Allegro</a></li>
|
||||
<li><a href="https://web.archive.org/web/20120904144913/http://uslugi.allegro.pl/payu/">PayU</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="footerSell">
|
||||
<h2>Skuteczna Sprzedaż</h2>
|
||||
<ul>
|
||||
<li><a href="/web/20120904144913/http://allegro.pl/InfoPage/SellManager.php">Menedżer Sprzedaży</a></li>
|
||||
<li><a href="/web/20120904144913/http://allegro.pl/country_pages/1/0/produkty-jak.php">Katalog produktów</a></li>
|
||||
<li><a href="/web/20120904144913/http://allegro.pl/show_shop.php">Sklepy Allegro</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="footerMobile">
|
||||
<h2>Mobilne Allegro</h2>
|
||||
<ul>
|
||||
<li><a rel="external" href="https://web.archive.org/web/20120904144913/http://mobilne.allegro.pl/">Aplikacja na Twój telefon</a></li>
|
||||
<li><a href="https://web.archive.org/web/20120904144913/http://m.allegro.pl/">Strona mobilna</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p class="reg">
|
||||
Korzystanie z serwisu oznacza akceptację <a href="/web/20120904144913/http://allegro.pl/country_pages/1/0/user_agreement.php" class="alleLink"><span>regulaminu</span></a>
|
||||
</p>
|
||||
</div><!-- /footerContentBox -->
|
||||
|
||||
<script type="text/javascript" src="https://web.archive.org/web/20120904144913js_/http://static.allegrostatic.pl/site_images/1/0/js/ado.js"></script>
|
||||
|
||||
<script src="https://web.archive.org/web/20120904144913js_/http://static.allegrostatic.pl/js/libs/jquery-1.6.1.min.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script type="text/javascript" charset="utf-8">var $j = jQuery.noConflict();</script>
|
||||
<script src="https://web.archive.org/web/20120904144913js_/http://static.allegrostatic.pl/js/libs/jquery-ui-1.7.2.min.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="https://web.archive.org/web/20120904144913js_/http://static.allegrostatic.pl/js/gtagb4.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="https://web.archive.org/web/20120904144913js_/http://static.allegrostatic.pl/js/libs/jquery.watermark.min.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="https://web.archive.org/web/20120904144913js_/http://static.allegrostatic.pl/js/scripts/jq_plugins-13.min.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="https://web.archive.org/web/20120904144913js_/http://static.allegrostatic.pl/js/scripts/mainjs-5.min.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="https://web.archive.org/web/20120904144913js_/http://static.allegrostatic.pl/js/scripts/showitem-gallery-2.3.min.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="https://web.archive.org/web/20120904144913js_/http://static.allegrostatic.pl/js/scripts/recommended-gallery-1.1.min.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="https://web.archive.org/web/20120904144913js_/http://static.allegrostatic.pl/js/scripts/listing-12.min.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script type="text/javascript">
|
||||
//<![CDATA[
|
||||
|
||||
(function($){
|
||||
$(function(){
|
||||
$('#showMoreCats, #hideMoreCats').click(function(){
|
||||
$('#categoriesList .additional, .slideInBtn, .slideOutBtn').toggle(200);
|
||||
return false;
|
||||
});
|
||||
if ( $('.additional').length ){ $('.slideOutBtn').show(); }
|
||||
});
|
||||
})(jQuery);
|
||||
|
||||
|
||||
(function($){
|
||||
$(function(){
|
||||
$('.priceComparerCeneoLink').click(function(event){
|
||||
baseURI = encodeURIComponent(event.currentTarget.baseURI);
|
||||
targetURI = encodeURIComponent(event.currentTarget.href);
|
||||
$.ajax({
|
||||
url: '/ceneo.php/?url=' + targetURI + '&ref=' + baseURI,
|
||||
dataType: 'json'
|
||||
});
|
||||
});
|
||||
});
|
||||
})(jQuery);
|
||||
|
||||
|
||||
(function ($) {
|
||||
|
||||
/**
|
||||
* Wizard
|
||||
*
|
||||
*/
|
||||
var wizard = function () {
|
||||
|
||||
/**
|
||||
* Protected variables
|
||||
*
|
||||
*/
|
||||
var current = {
|
||||
stepElement: {},
|
||||
stepData: {},
|
||||
optionData: {}
|
||||
},
|
||||
paginElements = {
|
||||
prev: {},
|
||||
steps: {}
|
||||
},
|
||||
prevSteps = [],
|
||||
showedSteps = {},
|
||||
procesingLayer,
|
||||
isOnLayer = false,
|
||||
params = {},
|
||||
hasStorage = (function () {
|
||||
try {
|
||||
localStorage.setItem('wizTest', 'wizTest');
|
||||
localStorage.removeItem('wizTest', 'wizTest');
|
||||
return true;
|
||||
} catch(e) {
|
||||
return false;
|
||||
}
|
||||
})(),
|
||||
optimizerCombination = (typeof utmx !== 'undefined' && typeof utmx('combination') !== 'undefined') ? '&combination=' + utmx('combination') : '';
|
||||
|
||||
|
||||
/**
|
||||
* Init
|
||||
*
|
||||
* @return void
|
||||
* @api publiuc
|
||||
*/
|
||||
var init = function (callback) {
|
||||
var contener = $('#wizardContent');
|
||||
// params = setConfig()
|
||||
|
||||
paginElements.prev = $('#prev-step a');
|
||||
paginElements.steps = $('#stepsPagin li.pag');
|
||||
|
||||
// Ustawienia początkowych danych
|
||||
current.stepElement = contener.children('div'); // Aktulnie wybrany krok (HTML Element)
|
||||
showedSteps[current.stepElement.attr('id')] = true; // ID aktualnie wybranego kroku, zapisujemy w tablicy - cache
|
||||
current.stepData = $(current.stepElement).data('wizard-step'); // Pobieramy dane o aktualnym kroku (nr kroku i sciezke poprzednich krokow)
|
||||
current.optionData = $(current.stepElement).find('li.current').data('wizard-option') || {};
|
||||
|
||||
// Odświeżenie stanów buttonów nawigacji
|
||||
refreshPagin();
|
||||
|
||||
// Zmiana kroku odbywa się po zmienia hasha
|
||||
$(window).bind('hashchange', function () {
|
||||
if (window.location.hash === '') {
|
||||
changeStep('1-1', true);
|
||||
} else if (/#wiz-cur/.test(window.location.hash)) {
|
||||
if (isOnLayer) {
|
||||
if (!$('#wizard').is(':visible')) {
|
||||
showWizardOnLayer.showWizard();
|
||||
}
|
||||
}
|
||||
changeStep(window.location.hash.split('#wiz-cur-')[1], true);
|
||||
} else {
|
||||
procesingLayerOpen();
|
||||
}
|
||||
});
|
||||
|
||||
// Wybór opcji w kroku
|
||||
contener.delegate('a', 'click', function (e) {
|
||||
var $this = $(this);
|
||||
|
||||
// Zaznaczenie wybranego elementu
|
||||
$(current.stepElement).find('ul li').removeClass('current');
|
||||
$this.parent().addClass('current');
|
||||
|
||||
// Pobranie danych wybranej opcji
|
||||
current.optionData = $this.parent().data('wizard-option');
|
||||
|
||||
if (window.location.href === this.href) {
|
||||
wiz.showWizardOnLayer.closeWizard();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (/wizard/.test(this.href)) {
|
||||
procesingLayerOpen();
|
||||
if (hasStorage) {
|
||||
localStorage.setItem('wizLastOpt', current.optionData.eq);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Jeżeli w url'u są kroki wizarda, to odpalamy go i ustawiamy aktualną pozycją
|
||||
if (/#wiz-cur-/.test(window.location.hash)) {
|
||||
var id = 'wizard-step-' + prepareStepId(window.location.hash.split('wiz-cur-')[1]);
|
||||
if (typeof showedSteps[id] !== 'undefined') {
|
||||
return;
|
||||
}
|
||||
|
||||
setTimeout(function () {
|
||||
changeStep(window.location.hash.split('wiz-cur-')[1], true, function () {
|
||||
if (hasStorage) {
|
||||
if (typeof localStorage.wizLastOpt !== 'undefined') {
|
||||
selectCurrentOption(localStorage.wizLastOpt, function () {
|
||||
localStorage.removeItem('wizLastOpt');
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}, 100);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Set config and add config class to the wizard wrapper
|
||||
*
|
||||
* @return params <Object>
|
||||
* @api private
|
||||
*/
|
||||
// var setConfig = function () {
|
||||
// var str = $('#wizard').attr('class'),
|
||||
// opts = {};
|
||||
|
||||
// opts.icons = (/icons/.test(str)) ? true: false;
|
||||
// opts.doubleClick = (/doubleClick/.test(str)) ? true : false;
|
||||
|
||||
// return opts;
|
||||
// };
|
||||
|
||||
|
||||
/**
|
||||
* Refresh pagin - refresh state and href in navigation buttons
|
||||
*
|
||||
* @return void
|
||||
* @api private
|
||||
*/
|
||||
var refreshPagin = function () {
|
||||
// Uaktualnienie buttona prev
|
||||
if (current.stepData.nr > 1) {
|
||||
paginElements.prev.attr('href', '#wiz-cur-' + current.stepData.prevSteps[current.stepData.nr - 2]);
|
||||
paginElements.prev.parent().removeClass('disabled');
|
||||
} else {
|
||||
paginElements.prev.attr('href', '#wiz-prev');
|
||||
paginElements.prev.parent().addClass('disabled');
|
||||
}
|
||||
|
||||
// Uaktualnienie stanu w numerach kroków
|
||||
paginElements.steps.removeClass('current');
|
||||
$(paginElements.steps).eq(current.stepData.nr - 1).addClass('current');
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Change step
|
||||
*
|
||||
* @param stepData <string> - Next step path
|
||||
* @param direction <bool> - Next (true) or prev (false)
|
||||
* @return void
|
||||
* @api private
|
||||
*/
|
||||
var changeStep = function (stepData, direction, callback) {
|
||||
// Pobieranie ID kroku z danych z hrefa
|
||||
var stepId = 'wizard-step-' + prepareStepId(stepData),
|
||||
currentOptionNr;
|
||||
|
||||
// Sprawdzamy czy istnieje krok, jak nie to go tworzymy
|
||||
if (!showedSteps[stepId]) {
|
||||
procesingLayerOpen();
|
||||
createStep(stepData, stepId, function () {
|
||||
changeStep(stepData, direction, callback);
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// Jeżeli się cofamy, to czyścimy wybraną z aktualnego kroku
|
||||
$(current.stepElement).find('ul li').removeClass('current');
|
||||
|
||||
// Ukrywamy poprzedni, wyswietlamy następny krok
|
||||
procesingLayerClose();
|
||||
$(current.stepElement).hide().removeClass('current');
|
||||
current.stepElement = $('#' + stepId).fadeIn(1000);
|
||||
|
||||
currentOptionNr = getCurrentOptNr(stepData);
|
||||
if (currentOptionNr) {
|
||||
selectCurrentOption(currentOptionNr);
|
||||
} else {
|
||||
current.optionData = {};
|
||||
}
|
||||
|
||||
// Aktualizujemy dane kroku
|
||||
current.stepData = current.stepElement.data('wizard-step');
|
||||
|
||||
// Odświeżamy stan elementów nawigacji
|
||||
refreshPagin();
|
||||
|
||||
if (typeof callback !== 'undefined') {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Create step - Create and append step HTML structure
|
||||
*
|
||||
* @param stepData <string> - step string like 1-1-3|2-1
|
||||
* @param stepId <string> - step ID in DOM
|
||||
* @param callback <function> callback
|
||||
* @return void
|
||||
* @api private
|
||||
*/
|
||||
var createStep = function (stepData, stepId, callback) {
|
||||
$.ajax({
|
||||
url: '/Showcat/Index.php/getWizardStep',
|
||||
data: {
|
||||
id: 2,
|
||||
stepString: stepData
|
||||
},
|
||||
dataType: 'JSON',
|
||||
success: function (data) {
|
||||
var options = data.wizard.step.options,
|
||||
frag = document.createDocumentFragment(),
|
||||
stepTitle = document.createElement('h2'),
|
||||
stepHTML = document.createElement('div'),
|
||||
ul = document.createElement('ul'),
|
||||
imgData = (function () {
|
||||
var data = {};
|
||||
data.width = 130,
|
||||
data.height = 100,
|
||||
data.ext = '.png'
|
||||
|
||||
return data;
|
||||
})();
|
||||
|
||||
stepTitle.innerHTML = data.wizard.step.title;
|
||||
stepHTML.id = stepId;
|
||||
$(stepHTML).addClass('step');
|
||||
|
||||
stepHTML.setAttribute('data-wizard-step', '{"nr":"'+ (data.wizard.prevSteps.length + 1) +'","prevSteps":'+ toJsonString(data.wizard.prevSteps) +'}');
|
||||
|
||||
for (var i = 0, optionsLen = options.length; i < optionsLen; i++) {
|
||||
var li = document.createElement('li'),
|
||||
a = document.createElement('a'),
|
||||
img = document.createElement('img'),
|
||||
title = document.createElement('h3'),
|
||||
href = (options[i].query === '') ? '#wiz-cur-' + options[i].nextStep : options[i].query + optimizerCombination + window.location.hash;
|
||||
|
||||
img.src = 'https://web.archive.org/web/20120904144913/http://static.allegrostatic.pl/site_images/1/0' + options[i].thumb + imgData.ext;
|
||||
img.width = imgData.width;
|
||||
img.height = imgData.height;
|
||||
title.appendChild(document.createTextNode(options[i].text));
|
||||
|
||||
|
||||
a.setAttribute('href', href);
|
||||
a.appendChild(img);
|
||||
a.appendChild(title);
|
||||
li.appendChild(a);
|
||||
li.setAttribute('data-wizard-option', '{"nextStep":"'+ options[i].nextStep +'","query":"'+ options[i].query +'","eq":"'+ i +'"}');
|
||||
frag.appendChild(li);
|
||||
}
|
||||
|
||||
stepHTML.appendChild(stepTitle);
|
||||
ul.appendChild(frag);
|
||||
stepHTML.appendChild(ul);
|
||||
document.getElementById('wizardContent').appendChild(stepHTML);
|
||||
showedSteps[stepId] = true;
|
||||
callback();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Show wizard on layer
|
||||
*
|
||||
* @param link <jQuery HTML Element> - target
|
||||
* @return void
|
||||
* @api public
|
||||
*/
|
||||
var showWizardOnLayer = (function () {
|
||||
var wizardHTML,
|
||||
overlayHTML,
|
||||
closeWizard,
|
||||
showWizard,
|
||||
start;
|
||||
|
||||
|
||||
start = function (target) {
|
||||
isOnLayer = true;
|
||||
|
||||
/**
|
||||
* Clone and append wizart into layer
|
||||
*/
|
||||
wizardHTML = (function () {
|
||||
var HTML = $('#wizard').clone(true),
|
||||
closeLink = $('<span class="close">X</span>').bind('click', function () {
|
||||
closeWizard();
|
||||
});
|
||||
|
||||
$('#wizard').remove();
|
||||
|
||||
HTML.css({
|
||||
position: 'fixed',
|
||||
display: 'none',
|
||||
width: 750 + 'px',
|
||||
zIndex: 10000
|
||||
}).fadeIn();
|
||||
|
||||
closeLink.appendTo(HTML);
|
||||
|
||||
HTML.addClass('layer');
|
||||
$('body').append(HTML);
|
||||
|
||||
return HTML;
|
||||
})();
|
||||
|
||||
/**
|
||||
* Create overlay
|
||||
*/
|
||||
overlayHTML = (function (callback) {
|
||||
var HTML = $('<div>').css({
|
||||
width: $(window).width() + 'px',
|
||||
height: $(window).height() + 'px',
|
||||
background: '#000',
|
||||
position: 'fixed',
|
||||
zIndex: 8000,
|
||||
top: 0,
|
||||
left: 0,
|
||||
opacity: 0.8,
|
||||
display: 'none'
|
||||
}).appendTo('body');
|
||||
|
||||
callback();
|
||||
return HTML;
|
||||
})(function () {
|
||||
init();
|
||||
});
|
||||
|
||||
/**
|
||||
* Close wizard on Esc
|
||||
*/
|
||||
$(document).bind('keydown', function (e) {
|
||||
if (e.which === 27) {
|
||||
closeWizard();
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Attach event for open wizard
|
||||
*/
|
||||
$(target).bind('click', function (e) {
|
||||
e.preventDefault();
|
||||
showWizard();
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Close wizard
|
||||
*/
|
||||
closeWizard = function () {
|
||||
overlayHTML.fadeOut();
|
||||
wizardHTML.fadeOut();
|
||||
};
|
||||
|
||||
/**
|
||||
* Show wizard
|
||||
*/
|
||||
showWizard = function () {
|
||||
wizardHTML.css({
|
||||
left: $(window).width() / 2 - 370 + 'px',
|
||||
top: $(window).height() / 2 - (wizardHTML.outerHeight() / 2) + 'px'
|
||||
}).fadeIn();
|
||||
overlayHTML.css({
|
||||
width: $(window).width() + 'px',
|
||||
height: $(window).height() + 'px'
|
||||
}).fadeIn();
|
||||
};
|
||||
|
||||
return {
|
||||
start: start,
|
||||
showWizard: showWizard,
|
||||
closeWizard: closeWizard
|
||||
};
|
||||
})();
|
||||
|
||||
|
||||
/**
|
||||
* Open procesing layer - overlay with spinner
|
||||
*
|
||||
* @return void
|
||||
* @api private
|
||||
*/
|
||||
var procesingLayerOpen = function () {
|
||||
procesingLayer = procesingLayer || (function () {
|
||||
var div = $('<div>');
|
||||
div.addClass('processing').css({
|
||||
width: $('#wizard').outerWidth() + 'px',
|
||||
height: $('#wizard').outerHeight() + 'px'
|
||||
});
|
||||
$('#wizard').append(div);
|
||||
return div;
|
||||
})();
|
||||
|
||||
procesingLayer.show();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Close procesing layer - hide overlay with spinner
|
||||
*
|
||||
* @return void
|
||||
* @api private
|
||||
*/
|
||||
var procesingLayerClose = function () {
|
||||
procesingLayer.hide();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Get current option
|
||||
*
|
||||
* @return <int> || <bool> - current option number, or false if is not selected
|
||||
* @api private
|
||||
*/
|
||||
var getCurrentOptNr = function (step) {
|
||||
var arr = step.split('|'),
|
||||
par = arr[arr.length-1].split('-');
|
||||
|
||||
if (par.length === 3) {
|
||||
return par[2];
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Set current option
|
||||
*
|
||||
* @return void
|
||||
* @api private
|
||||
*/
|
||||
var selectCurrentOption = function (stepNr, callback) {
|
||||
var cur = current.stepElement.find('li').eq(stepNr);
|
||||
|
||||
cur.addClass('current');
|
||||
current.optionData = cur.data('wizard-option');
|
||||
|
||||
if (typeof callback !== 'undefined') {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Prepare Step ID
|
||||
*
|
||||
* @param step <string> step string like 1-1-3|2-1
|
||||
* @return <string> - stepID
|
||||
* @api private
|
||||
*/
|
||||
var prepareStepId = function (step) {
|
||||
var arrSplit = step.split('|'),
|
||||
stepVer = arrSplit[arrSplit.length - 1].split('-');
|
||||
|
||||
return stepVer[0] + '-' + stepVer[1];
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* To JSON String - prepare JSON string in array
|
||||
*
|
||||
* @param data <object> - data object
|
||||
* @return <string> - Array at JSON string
|
||||
* @api private
|
||||
*/
|
||||
var toJsonString = function (data) {
|
||||
var str = '[';
|
||||
for (var i = 0, iLen = data.length; i < iLen; i++) {
|
||||
str += '"' + data[i] + '"';
|
||||
if (i !== iLen - 1) {
|
||||
str += ',';
|
||||
}
|
||||
}
|
||||
str += ']';
|
||||
|
||||
return str;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* API
|
||||
*/
|
||||
return {
|
||||
init: init,
|
||||
showWizardOnLayer: showWizardOnLayer
|
||||
};
|
||||
};
|
||||
|
||||
var wiz = new wizard();
|
||||
if (document.getElementById('show-wizard')) {
|
||||
wiz.showWizardOnLayer.start(document.getElementById('show-wizard'));
|
||||
} else {
|
||||
wiz.init();
|
||||
}
|
||||
})(jQuery);
|
||||
|
||||
|
||||
(function($) {
|
||||
// show a hover tooltip if it's defined
|
||||
$('.itemFS').find('.tipContent').each(function() {
|
||||
var toolTip = $(this).html();
|
||||
$(this).parent().helptip({event:'hover','pos':'r', css:'promoTip', body: toolTip});
|
||||
});
|
||||
})(jQuery);
|
||||
|
||||
var ckWidget = function($) {
|
||||
return {
|
||||
widgets: {},
|
||||
|
||||
prepareRequest: function(el) {
|
||||
var req = 'https://web.archive.org/web/20120904144913/http://widgetcokupic.allegro.pl:9968/storage/ck/';
|
||||
var id;
|
||||
el.each(function() {
|
||||
id = $(this).data('product-id');
|
||||
req += 'widget_' + id + ',pluses_' + id + ',';
|
||||
});
|
||||
req += '?callback=?';
|
||||
return req;
|
||||
},
|
||||
|
||||
prepareData: function(data) {
|
||||
for(var i = 0, iLen = data.length; i < iLen; i++) {
|
||||
this.widgets[data[i].id[0]] = {
|
||||
wg: $.parseJSON(data[i].widget[0]),
|
||||
plus: $.parseJSON(data[i].pluses[0])
|
||||
};
|
||||
}
|
||||
},
|
||||
|
||||
createWidget: function(data, where) {
|
||||
var html = '',
|
||||
rate = parseFloat(data.wg.avgm).toFixed(2),
|
||||
ck_source;
|
||||
|
||||
var setRank = function(ckr) {
|
||||
if (ckr >= 90 ) {
|
||||
return 'first';
|
||||
} else if (ckr >= 80) {
|
||||
return 'second';
|
||||
}
|
||||
return 'third';
|
||||
};
|
||||
|
||||
ck_source = (where === 'listing') ? 'ck_source=1' : 'ck_source=2';
|
||||
|
||||
html += '<div class="ckWidget">';
|
||||
html += '<a class="ckNewRank ' + setRank(data.wg.ckrk) + '" href="' + data.wg.url + '?ck_type=1&' + ck_source + '" target="_blank"></a>';
|
||||
html += '<div class="right">';
|
||||
html += '<em>' + rate + '</em>';
|
||||
html += (where === 'show-item') ?
|
||||
'<p>(według ' + data.wg.opct + ' opinii z Cokupić.pl)</p>' :
|
||||
'<p>(według <a href="' + data.wg.url + '?ck_type=0&' + ck_source + '#productNav" target="_blank">' + data.wg.opct + ' opinii</a> z Cokupić.pl)</p>';
|
||||
html += '</div>';
|
||||
if(where === 'product-page' || where === 'show-item' || where === 'listing') {
|
||||
html += '<p class="plus"><strong>Plusy:</strong> ';
|
||||
for(var i = 0, iLen = data.plus.plus.length; i <= iLen, i < 3; i++) {
|
||||
html += data.plus.plus[i].name + ' (' + data.plus.plus[i].pt + '%), ';
|
||||
}
|
||||
html += '</p>';
|
||||
}
|
||||
html += '</div>';
|
||||
|
||||
return $(html);
|
||||
},
|
||||
|
||||
initList: function(where) {
|
||||
var that = this,
|
||||
paramsIter = 2,
|
||||
rows = $('[data-product-id]');
|
||||
|
||||
$.getJSON(this.prepareRequest(rows), function(data) {
|
||||
if (data.products[0].product != null) {
|
||||
that.prepareData(data.products[0].product);
|
||||
|
||||
rows.each(function() {
|
||||
var id = $(this).data('product-id');
|
||||
if (typeof that.widgets[id] !== 'undefined' && that.widgets[id].wg.ckrk >= 50) {
|
||||
var col = $(this).find('.productListingParams');
|
||||
var paramsWrap = col.find('.params');
|
||||
var widget = that.createWidget(that.widgets[id], where);
|
||||
var params = paramsWrap.find('.paramEntry');
|
||||
|
||||
paramsIter = (where === 'listing') ? 3 : paramsIter;
|
||||
params.slice(paramsIter, params.length).hide();
|
||||
if (where === 'listing') {
|
||||
paramsWrap.after(widget);
|
||||
} else {
|
||||
paramsWrap.before(widget);
|
||||
}
|
||||
widget.slideDown();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
initSingle: function() {
|
||||
var that = this,
|
||||
wrap = $('[data-product-id]');
|
||||
|
||||
$.getJSON(this.prepareRequest(wrap), function(data) {
|
||||
if (data.products[0].product != null) {
|
||||
that.prepareData(data.products[0].product);
|
||||
|
||||
var id = wrap.data('product-id');
|
||||
|
||||
if (typeof that.widgets[id] !== 'undefined' && that.widgets[id].wg.ckrk >= 50) {
|
||||
var widget = that.createWidget(that.widgets[id], 'show-item');
|
||||
wrap.find('.productParams').filter(':first').find('td').filter(':first').prepend(widget);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
var widget = new ckWidget(jQuery);
|
||||
widget.initList('listing');
|
||||
|
||||
|
||||
$j(function(){
|
||||
$j('.seoTxtContainer').click(function(e) {
|
||||
var el = $j(this),
|
||||
curHeight = el.height(),
|
||||
autoHeight = el.css('height', 'auto').height();
|
||||
|
||||
if(el.hasClass('seoBoxExpanded') === false){
|
||||
el.height(curHeight).animate({
|
||||
height: autoHeight
|
||||
}, "slow" );
|
||||
el.addClass('seoBoxExpanded');
|
||||
}else{
|
||||
el.height(autoHeight).animate({
|
||||
height: "240px"
|
||||
}, "slow" );
|
||||
el.removeClass('seoBoxExpanded');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
(function ($) {
|
||||
var fsHelptipContent = '<a href="https://web.archive.org/web/20120904144913/http://uslugi.allegro.pl/wg/" target="_blank">Wysyłka Gratis</a> to co najmniej jedna darmowa opcja dostawy zakupionego przedmiotu. W ten sposób wygodniej dokonasz transakcji. Bez dodatkowych kosztów!',
|
||||
asHelptipContent = '<a href="https://web.archive.org/web/20120904144913/http://uslugi.allegro.pl/sa/" target="_blank">Standard Allegro</a> to gwarancja udanej transakcji. Oznacza najwyższą jakość obsługi klienta. O wyróżnieniu oferty w ten sposób decydują nasze określone kryteria oraz opinie kupujących.';
|
||||
|
||||
if (fsHelptipContent !== '') {
|
||||
$('.itemFS')
|
||||
.addClass('cursorHelp')
|
||||
.helptip({
|
||||
event: 'hover',
|
||||
hoverDelay: 250,
|
||||
pos: 't',
|
||||
closeClick: true,
|
||||
body: fsHelptipContent
|
||||
});
|
||||
}
|
||||
if (asHelptipContent !== '') {
|
||||
$('span.itemAS')
|
||||
.addClass('cursorHelp')
|
||||
.helptip({
|
||||
event: 'hover',
|
||||
hoverDelay: 250,
|
||||
pos: 't',
|
||||
closeClick: true,
|
||||
body: asHelptipContent
|
||||
});
|
||||
$('span.siIcoAS')
|
||||
.addClass('cursorHelp')
|
||||
.helptip({
|
||||
event: 'hover',
|
||||
hoverDelay: 250,
|
||||
pos: 't',
|
||||
closeClick: true,
|
||||
body: asHelptipContent
|
||||
});
|
||||
}
|
||||
})(jQuery);
|
||||
|
||||
$j("a[rel=external]").attr("target","_blank");
|
||||
if(typeof ado!=="object"){ado={};ado.config=ado.preview=ado.placement=ado.master=ado.slave=function(){};}
|
||||
ado.config({mode: "new", xml: false, characterEncoding: true});
|
||||
|
||||
</script> </body>
|
||||
</html>
|
File diff suppressed because it is too large
Load Diff
|
@ -1,34 +0,0 @@
|
|||
#!/bin/bash
|
||||
domainprefix='https://megumin.tech/boards'
|
||||
|
||||
meta[title]='bashchan'
|
||||
meta[css]='style.css'
|
||||
source templates/head.sh
|
||||
|
||||
echo "<body>
|
||||
<div class='center'>
|
||||
<a href='./'><img id='branding' src='/img/branding_chinacat.png'><br>
|
||||
bashchan</a> - a place for all your shitposts
|
||||
</div>
|
||||
"
|
||||
IFS=$'\n'
|
||||
for i in $(ls -t storage/threads); do
|
||||
IFS=':'
|
||||
array=($(cat storage/threads/$i | head -n 1))
|
||||
echo "<a href='thread.shs?id=$i' class='nolinkdecoration'><div class='post'>"
|
||||
if [[ ${array[1]} != '' ]]; then
|
||||
echo "<span class='thread_title'>${array[1]}</span> | "
|
||||
fi
|
||||
echo "<span class='poster'>${array[0]}</span><br><img src='$domainprefix/i/${array[3]}' class='pic'>${array[2]}</div></a><hr>"
|
||||
done
|
||||
|
||||
|
||||
echo "<div class='center'><h2>Submit a new thread</h2>
|
||||
<form enctype='multipart/form-data' action='post.shs' method='post' id='post'>
|
||||
<input type='hidden' name='rel' value='new'>
|
||||
<input type='hidden' name='a' value='broken'>
|
||||
<input type='text' name='title' class='title' placeholder='Title' required><br>
|
||||
<textarea name='msg' class='msg' placeholder='Message'></textarea><br>
|
||||
<input type='file' name='file' class='file' accept='image/*'>
|
||||
<input type='submit' value='Submit' class='submit'>
|
||||
</form></center>"
|
|
@ -1,48 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
title=$(cat ${post_multipart[2]} | sed -s 's/<//g;s/://g' | tr -d '\n\r')
|
||||
msg=$(cat ${post_multipart[3]} | sed -E 's/<//g;s/$/<br>/g;s/://g' | tr -d '\n\r')
|
||||
img=${post_multipart[4]}
|
||||
img_name=$(basename ${post_multipart[4]})
|
||||
rel=$(cat ${post_multipart[0]} | sed -E 's/<//g;s/\r//g')
|
||||
|
||||
if [[ $title == '' && $rel == '' ]]; then
|
||||
echo "Empty title?"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ $(file --mime-type -b $img) == "image/"* ]]; then
|
||||
mv "$img" "$pwd/i/$img_name"
|
||||
img_copied_url="i/$img_name"
|
||||
elif [[ $rel == 'new' ]]; then
|
||||
echo "No image?"
|
||||
return 1
|
||||
elif [[ $msg == '<br>' ]]; then
|
||||
echo "Post something!"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if session_verify ${cookies[sh_session]}; then
|
||||
username=$(session_get_username ${cookies[sh_session]})
|
||||
else
|
||||
username='Anon'
|
||||
fi
|
||||
|
||||
if [[ $rel == *"new"* ]]; then
|
||||
rel=$(($(ls storage/threads/ | wc -l)+1))
|
||||
touch "storage/threads/$rel"
|
||||
fi
|
||||
|
||||
if [[ -f "storage/threads/$rel" ]]; then
|
||||
echo "$username:$title:$msg:$img_name" | sed -E "s/\r//g" >> "storage/threads/$rel"
|
||||
else
|
||||
echo "No such thread!!"
|
||||
return 1
|
||||
fi
|
||||
|
||||
meta[redirect]="thread.shs?id=$rel"
|
||||
|
||||
source templates/head.sh
|
||||
|
||||
echo "Submitted succesfully.<br>
|
||||
<a href='thread.shs?id=$rel'>Click here if you're not redirected</a>"
|
|
@ -1,42 +0,0 @@
|
|||
.center {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
max-width: 100%;
|
||||
display: block;
|
||||
text-align: center;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.file {
|
||||
width: 225px
|
||||
}
|
||||
.msg {
|
||||
width: 325px;
|
||||
height: 125px;
|
||||
}
|
||||
.title {
|
||||
width: 318px;
|
||||
}
|
||||
.submit {
|
||||
width: 95px;
|
||||
}
|
||||
.pic {
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
.thread_title {
|
||||
color: #f44;
|
||||
}
|
||||
|
||||
.poster {
|
||||
color: #4f4;
|
||||
}
|
||||
|
||||
.post {
|
||||
margin: 5px;
|
||||
background-color: #222;
|
||||
}
|
||||
.nolinkdecoration, .nolinkdecoration > div {
|
||||
color: #ccc;
|
||||
text-decoration: none;
|
||||
}
|
|
@ -1,46 +0,0 @@
|
|||
#!/bin/bash
|
||||
domainprefix='https://megumin.tech/boards'
|
||||
|
||||
id=${get_data[id]}
|
||||
if [[ $id == '' ]]; then
|
||||
return 1
|
||||
elif [[ $id == *".."* ]]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
meta[css]='style.css'
|
||||
meta[title]="Thread #$id"
|
||||
source templates/head.sh
|
||||
|
||||
echo "<body>
|
||||
<div class='center'>
|
||||
<a href='./'><img id='branding' src='/img/branding_chinacat.png'><br>
|
||||
bashchan</a> - a place for all your shitposts
|
||||
</div>
|
||||
"
|
||||
|
||||
IFS=$'\n'
|
||||
for i in $(cat storage/threads/$id); do
|
||||
IFS=':'
|
||||
array=($i)
|
||||
echo "<div class='post'>"
|
||||
if [[ ${array[1]} != '' ]]; then
|
||||
echo "<span class='thread_title'>${array[1]}</span> | "
|
||||
fi
|
||||
echo "<span class='poster'>${array[0]}</span><br>"
|
||||
if [[ -a "$pwd/i/${array[3]}" ]]; then
|
||||
echo "<a href='$domainprefix/i/${array[3]}'><img src='$domainprefix/i/${array[3]}' class='pic'></a>"
|
||||
fi
|
||||
echo "${array[2]}</div>"
|
||||
done
|
||||
|
||||
|
||||
echo "<form enctype='multipart/form-data' action='post.shs' method='post' id='post'>
|
||||
<input type='hidden' name='rel' value='$id'>
|
||||
<input type='hidden' name='a' value='broken'>
|
||||
<input type='text' name='title' class='title' placeholder='Title'><br>
|
||||
<textarea name='msg' class='msg' placeholder='Message'></textarea><br>
|
||||
<input type='file' name='file' class='file' accept='image/*'>
|
||||
<input type='submit' value='Submit' class='submit'>
|
||||
</form>
|
||||
"
|
Binary file not shown.
Before Width: | Height: | Size: 7.5 KiB |
Binary file not shown.
Before Width: | Height: | Size: 4.5 KiB |
|
@ -1,65 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
meta[title]='HTTP.sh'
|
||||
meta[author]='Dominika, Laura, Patrycja'
|
||||
meta[description]='HTTP.sh - a quick and dirty webserver, written in Bash'
|
||||
meta[keywords]='bash,http,web,server,http.sh'
|
||||
meta[lang]='en'
|
||||
|
||||
source templates/head.sh
|
||||
|
||||
echo "<body>
|
||||
<style>
|
||||
h1,h2,h3 {
|
||||
color: #fff
|
||||
}
|
||||
.lr {
|
||||
position: absolute;
|
||||
right: 5px;
|
||||
}
|
||||
</style>"
|
||||
if [[ ! ${cookies[sh_session]} ]]; then
|
||||
echo "<div class='lr'><a href='login.shs'>Log in</a> or <a href='register.shs'>Register</a></div>"
|
||||
else
|
||||
echo "<div class='lr'>Logged in as ${cookies[username]}| <a href='logout.shs'>Log out</a></div>"
|
||||
fi
|
||||
echo "<img src='img/branding_pxplus.png'>
|
||||
<h2>HTTP.sh - a quick and dirty webserver, written in Bash</h2>
|
||||
|
||||
<p>
|
||||
Although we've seen several attempts to create a Bash web framework, all of them fell flat one way or another.<br>
|
||||
We've decided to change that. Did we succeed? You be the judge!
|
||||
</p>
|
||||
|
||||
<h3>Download</h3>
|
||||
<p>
|
||||
This web server was tested as much as the time allowed, but we can't say for certain that it's bug free.<br>
|
||||
If you want to check out our (dirty) code, download the current <a href='http://f.sakamoto.pl/httpsh.tar.xz'>tarball</a>.<br><br>
|
||||
We also can't guarantee that HTTP.sh is <a href='https://xkcd.com/641/'>asbestos free</a>, so <b>proceed with caution.</b>
|
||||
</p>
|
||||
|
||||
<h3>Dependencies</h3>
|
||||
<ol>
|
||||
<li>Bash or 100% compatible shell</li>
|
||||
<li><a href='http://nmap.org/ncat'>Ncat</a> - nc/nc.traditional WILL NOT work</li>
|
||||
<li>GNU coreutils (dd, base64 and others)</li>
|
||||
<li>pkill</li>
|
||||
<li>mktemp</li>
|
||||
<li>sha1sum, sha256sum</li>
|
||||
<li>curl (only for a few demos)</li>
|
||||
<li>certbot (only if you'd like to get a SSL cert)
|
||||
</ol>
|
||||
|
||||
<h3>Demos</h3>
|
||||
<ol>
|
||||
<li><a href='boards/'>bashchan</a> (an imageboard)</li>
|
||||
<li><a href='pastebin/'>bashbin</a> (a pastebin)</li>
|
||||
<li><a href='yt/'>bashtube</a> (a YouTube frontend)</li>
|
||||
<li><a href='shortener/'>bashurl</a> (a URL shortener)</li>
|
||||
<li><a href='upload/'>bashupload</a> (a file uploader)</li>
|
||||
<li><a href='allegro/'>bashallgero</a> (a frontend for a Polish auction site)</li>
|
||||
<li><a href='img/'>listing</a> (just a file listing, but it looks mighty cool)</li>
|
||||
</ol>
|
||||
|
||||
<hr>
|
||||
Made by <a href='https://sakamoto.pl/' id='reds'>reds</a>, <a href='https://selfisekai.rocks/' style='color:#d60270;'>selfisekai</a> and <a href='https://ptrcnull.me/' style='color:#ffb9d3'>ptrcnull</a>. IF YOU LOG IN, THIS SITE WILL STORE COOKIES ON YOUR PERSONAL COMPUTING DEVICE"
|
|
@ -1,30 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [[ ${post_data[login]} != '' && ${post_data[password]} != '' ]]; then
|
||||
login ${post_data[login]} ${post_data[password]}
|
||||
status=$?
|
||||
if [[ $status == 0 ]]; then
|
||||
echo ${get_data[r]} > /dev/stderr
|
||||
if [[ ${get_data[r]} == '' ]]; then
|
||||
meta[redirect]='/'
|
||||
else
|
||||
meta[redirect]="$(echo ${get_data[r]} | sed -s 's/<//g;s/___/?/')"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
source templates/head.sh
|
||||
|
||||
if [[ $status == 1 && $reason != '' ]]; then
|
||||
echo $reason
|
||||
fi
|
||||
|
||||
echo "<h1>Log in...</h1>
|
||||
<form method='post'>
|
||||
<label for='login'>Login:</label>
|
||||
<input type='text' name='login'><br>
|
||||
<label for='password'>Password:</label>
|
||||
<input type='password' name='password'><br>
|
||||
<input type='submit' value='Login'>
|
||||
</form>
|
||||
(please make sure that you're connecting over SSL)"
|
|
@ -1,7 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
logout
|
||||
meta[redirect]='/'
|
||||
source templates/head.sh
|
||||
|
||||
echo "Logged out successully. Redirecting.."
|
|
@ -1,56 +0,0 @@
|
|||
#!/bin/bash
|
||||
domainprefix="https://paste.megumin.tech/"
|
||||
|
||||
if [[ ${post_data[paste]} ]]; then
|
||||
filepath=$(mktemp -p $pwd XXX)
|
||||
filename=$(basename $filepath)
|
||||
if [[ ${post_data[public]} == "on" ]]; then
|
||||
echo $filename >> $pwd/list
|
||||
fi
|
||||
if session_verify ${cookies[sh_session]}; then
|
||||
echo "$filename:$(session_get_username ${cookies[sh_session]})" >> storage/pastes
|
||||
fi
|
||||
echo -e $(echo "${post_data[paste]}" | sed -E 's/\+/ /g;s/\%/\\x/g') > $filepath
|
||||
meta[redirect]="$domainprefix$filename"
|
||||
fi
|
||||
|
||||
source templates/head.sh
|
||||
|
||||
echo "<body>
|
||||
|
||||
<form method='post'>
|
||||
<input type='submit' value='Send!'>
|
||||
<input type='checkbox' name='public'>
|
||||
<label for='public'>Public?</label><br>
|
||||
<textarea name='paste' rows='25' cols='80'></textarea>
|
||||
</form>
|
||||
"
|
||||
|
||||
if session_verify ${cookies[sh_session]}; then
|
||||
echo "<h3>Your pastes:</h3>"
|
||||
pastes=$(grep -E "$(session_get_username ${cookies[sh_session]})\$" storage/pastes)
|
||||
if [[ $pastes != '' ]]; then
|
||||
echo "<ol>"
|
||||
for i in $pastes; do
|
||||
IFS=':'
|
||||
array=($i)
|
||||
echo "<li><a href='${array[0]}'>${array[0]}</a></li>"
|
||||
done
|
||||
echo "</ol>"
|
||||
else
|
||||
echo "You currently do not have any pastes."
|
||||
fi
|
||||
else
|
||||
echo "If you log in, we'll be able to show you your paste history here :)"
|
||||
fi
|
||||
|
||||
echo "<h3>Latest public pastes:</h3><ol>"
|
||||
public=$(tac $pwd/list | head -n 10)
|
||||
|
||||
IFS=$'\n'
|
||||
for i in $public; do
|
||||
echo "<li><a href='$domainprefix$i'>$i</a></li>"
|
||||
done
|
||||
unset IFS
|
||||
echo "</li>"
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [[ ${post_data[login]} != '' && ${post_data[password]} != '' ]]; then
|
||||
register ${post_data[login]} ${post_data[password]}
|
||||
status=$?
|
||||
if [[ $status == 0 ]]; then
|
||||
meta[redirect]='/'
|
||||
fi
|
||||
fi
|
||||
|
||||
source templates/head.sh
|
||||
|
||||
if [[ $status == 1 && $reason != '' ]]; then
|
||||
echo $reason
|
||||
fi
|
||||
|
||||
echo "<h1>Register</h1>
|
||||
<form method='post'>
|
||||
<label for='login'>Login:</label>
|
||||
<input type='text' name='login'><br>
|
||||
<label for='password'>Password:</label>
|
||||
<input type='password' name='password'><br>
|
||||
<input type='submit' value='Register'>
|
||||
</form>
|
||||
(please make sure that you're connecting over SSL)"
|
|
@ -1,35 +0,0 @@
|
|||
#!/bin/bash
|
||||
domainprefix="https://url.megumin.tech/"
|
||||
not_found=false
|
||||
|
||||
if [[ ${get_data[u]} ]]; then
|
||||
id=${get_data[u]}
|
||||
if [[ -f storage/shortener/$id ]]; then
|
||||
meta[redirect]=$(cat storage/shortener/$id)
|
||||
else
|
||||
not_found=true
|
||||
fi
|
||||
fi
|
||||
|
||||
meta[title]="url shortener i guess"
|
||||
source templates/head.sh
|
||||
|
||||
if [[ $not_found == "true" ]]; then
|
||||
echo "<h1>ID not found</h1>"
|
||||
else
|
||||
if [[ ${post_data[url]} ]]; then
|
||||
if [[ ! -d storage/shortener ]]; then
|
||||
mkdir storage/shortener
|
||||
fi
|
||||
id=$(dd if=/dev/urandom bs=256 count=1 | sha1sum | cut -c 1-8)
|
||||
link=$(printf $(sed 's/%/\\x/g' <<< ${post_data[url]}))
|
||||
echo -n $link > storage/shortener/$id
|
||||
echo "<p>URL created: <a href='$domainprefix?u=$id'>link</a></p>"
|
||||
else
|
||||
echo '<h1>Revolutionary URL shortener</h1>
|
||||
<form method="POST">
|
||||
<input type="text" name="url" placeholder="URL">
|
||||
<button type="submit">Submit</button>
|
||||
</form>';
|
||||
fi
|
||||
fi
|
|
@ -1,18 +0,0 @@
|
|||
#!/bin/bash
|
||||
source templates/head.sh
|
||||
domainprefix="https://f.megumin.tech/"
|
||||
|
||||
if [[ ${post_multipart} != '' ]]; then
|
||||
for i in ${post_multipart[@]}; do
|
||||
asdf=$(mktemp -p $(dirname ${r[uri]}) XXX)
|
||||
relative=$(realpath --relative-to "$(dirname ${r[uri]})" $asdf)
|
||||
mv "$i" $asdf
|
||||
rm "$i"
|
||||
echo "<a href='$domainprefix$relative'>Your uploaded file</a>"
|
||||
done
|
||||
else
|
||||
echo '<form enctype="multipart/form-data" method="POST">
|
||||
<input name="uploadedfile" type="file" /><br />
|
||||
<input type="submit" value="Upload File" />
|
||||
</form>'
|
||||
fi
|
|
@ -1,19 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
if session_verify ${cookies[sh_session]} && [[ ${get_data[v]} != '' ]]; then
|
||||
title=$(youtube-dl -e "https://youtube.com/watch?v=${get_data[v]}")
|
||||
if [[ $(cat storage/faves | grep -F "$title" | grep "$(echo ${cookies[username]} | sed -E "s/\r//")") == '' ]]; then
|
||||
echo "$(session_get_username ${cookies[sh_session]}):${get_data[v]}:$title" >> storage/faves
|
||||
fi
|
||||
fi
|
||||
|
||||
source templates/head.sh
|
||||
|
||||
echo "<a href='./'><--- back to main</a><br><h1>Your favourites</h1>"
|
||||
|
||||
IFS=$'\n'
|
||||
for i in $(tac storage/faves); do
|
||||
IFS=':'
|
||||
array=($i)
|
||||
echo "<div><a href='watch.shs?v=${array[1]}'><img src='https://i.ytimg.com/vi/${array[1]}/mqdefault.jpg'><br><b>${array[@]:2:999}</b></a><br></div>";
|
||||
done
|
|
@ -1,16 +0,0 @@
|
|||
#!/bin/bash
|
||||
source templates/head.sh
|
||||
|
||||
echo "<form action='${r[url]}/search.shs'>
|
||||
<input name='q' type='text'>
|
||||
<input type='submit' value='Search'>
|
||||
</form>
|
||||
|
||||
<h1>All user's favourites</h1>"
|
||||
|
||||
IFS=$'\n'
|
||||
for i in $(tac storage/faves); do
|
||||
IFS=':'
|
||||
array=($i)
|
||||
echo "<div><a href='watch.shs?v=${array[1]}'><img src='https://i.ytimg.com/vi/${array[1]}/mqdefault.jpg'><br><b>${array[@]:2:999}</b></a><br>Favourited by ${array[0]}</div>";
|
||||
done
|
|
@ -1,34 +0,0 @@
|
|||
#!/bin/bash
|
||||
meta[title]="youtube but not really"
|
||||
source templates/head.sh
|
||||
|
||||
# GOOD LUCK FIXING IT WHEN GOOGLE BREAKS IT LOL
|
||||
|
||||
echo "<form action='${r[url]}/search.shs'>
|
||||
<input name='q' type='text'>
|
||||
<input type='submit' value='Search'>
|
||||
</form>
|
||||
"
|
||||
|
||||
if [[ ${get_data[q]} ]]; then
|
||||
query=${get_data[q]}
|
||||
query_nice=$(echo ${get_data[q]} | sed -s 's/+/ /g')
|
||||
|
||||
echo "<p>Searching for '$query_nice'</p>"
|
||||
data=''
|
||||
while [[ $data == '' ]]; do
|
||||
data=$(curl -s "https://www.youtube.com/results?search_query=$query&hl=en&hs=en")
|
||||
done
|
||||
|
||||
|
||||
IFS=$'\n'
|
||||
id=($(echo $data | sed -E 's/<\/a>/\n/g' | grep -ohE 'watch\?v\=[-A-Za-z0-9_]{11}" (.*) rel\="spf-prefetch"' | sed -E 's/watch\?v\=//g;s/" class="yt-uix-tile-link(.*)//g'))
|
||||
title=($(echo $data | sed -E 's/<\/a>/\n/g' | grep -ohE 'watch\?v\=[-A-Za-z0-9_]{11}" (.*) rel\="spf-prefetch"' | sed -E 's/watch\?v\=[-A-Za-z0-9_]{11}" class\="yt-uix-tile-link(.*)title\="/ /g;s/" rel\="spf-prefetch"//g'))
|
||||
unset IFS
|
||||
|
||||
for (( i=0; i<${#id[@]}; i++ )); do
|
||||
echo "<a href='/yt/watch.shs?v=${id[$i]}'><img src='https://i.ytimg.com/vi/${id[$i]}/mqdefault.jpg'><br>${title[$i]}</a><br>"
|
||||
done
|
||||
else
|
||||
echo "search for something will 'ya?"
|
||||
fi
|
|
@ -1,10 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
if session_verify ${cookies[sh_session]} && [[ ${get_data[v]} != '' ]]; then
|
||||
name=$(session_get_username ${cookies[sh_session]})
|
||||
vid=$(echo -n ${get_data[v]} | sed -E 's/\r//g')
|
||||
sed -i "/^$name:$vid/d" storage/faves
|
||||
fi
|
||||
meta[redirect]='fav.shs'
|
||||
|
||||
source templates/head.sh
|
|
@ -1,59 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# fetching recommended disabled for speed
|
||||
|
||||
#for i in $(curl https://www.youtube.com/watch?v=${get_data[v]} | grep -ohE "watch\?v\=[A-zaz0-9]{11}" | uniq | cut -c 9-19); do
|
||||
# echo "<div><img src='http://i.ytimg.com/vi/$i/hqdefault.jpg'><br><audio src='$(youtube-dl -g -f 251 $i)' controls></audio></div>";
|
||||
#done
|
||||
|
||||
if [[ ${get_data[v]} ]]; then
|
||||
video=$(youtube-dl -J "http://youtube.com/watch?v=${get_data[v]}")
|
||||
if [[ $video == '' ]]; then
|
||||
video=$(youtube-dl -J "http://youtube.com/watch?v=${get_data[v]}")
|
||||
if [[ $video == '' ]]; then
|
||||
return
|
||||
fi
|
||||
fi
|
||||
#echo "http://youtube.com/watch?v=${get_data[v]}" > /dev/stderr
|
||||
title=$(echo $video | jq -r '.title')
|
||||
meta[title]=$title
|
||||
source templates/head.sh
|
||||
IFS=$'\n'
|
||||
urls=($(echo $video | jq -r '.formats[] | select(.format_id == "22" or .format_id == "18").url'))
|
||||
unset IFS
|
||||
if [[ ${urls[1]} != '' ]]; then
|
||||
url=${urls[1]}
|
||||
else
|
||||
url=${urls[0]}
|
||||
fi
|
||||
echo "<form action='search.shs'>
|
||||
<input name='q' type='text'>
|
||||
<input type='submit' value='Search'>
|
||||
</form>
|
||||
<div><br><video src='$url' controls></video>
|
||||
<h2>$title</h2>
|
||||
<div>
|
||||
<div>
|
||||
Uploaded by <b><a href='$(echo $video | jq -r '.uploader_url')'>$(echo $video | jq -r '.uploader')</a></b> on <b>$(date -d "$(echo $video | jq -r '.upload_date')" "+%d %B %Y")</b>
|
||||
</div>
|
||||
<div>
|
||||
<b>$(echo $video | jq -r '.view_count')</b> views<br>
|
||||
<b>$(echo $video | jq -r '.like_count')</b> likes, <b>$(echo $video | jq -r '.dislike_count')</b> dislikes.<br>"
|
||||
if [[ ${cookies[sh_session]} ]]; then
|
||||
if [[ $(cat storage/faves | grep $(echo -n ${cookies[username]} | sed -E 's/\r//g') | grep ${get_data[v]}) == '' ]]; then
|
||||
echo "<a href='fav.shs?v=$(echo ${get_data[v]} | sed -s 's/<//g;')' target='_blank'>Add to favourites</a><br>"
|
||||
else
|
||||
echo "<a href='unfav.shs?v=$(echo ${get_data[v]} | sed -s 's/<//g;')' target='_blank'>Remove from favourites</a><br>"
|
||||
fi
|
||||
else
|
||||
echo "<b><a href='/login.shs?r=$(echo ${r[url]} | sed -s 's/?/___/')'>Log in</a> to add this video to your favourites!</b><br>"
|
||||
fi
|
||||
echo "<br><br>
|
||||
</div>
|
||||
</div>
|
||||
<span><i>Description</i>:<br>$(echo $video | jq -r '.description' | sed -E 's/$/<br>/g')</span>
|
||||
</div>";
|
||||
else
|
||||
source templates/head.sh
|
||||
echo "pls add ?v param i'm still WiP"
|
||||
fi
|
Loading…
Reference in New Issue