updated default config, moved example demos to a separate repository

merge-requests/2/head
Dominika 2020-07-27 00:01:35 +02:00
parent 7c4ec8d876
commit 0c44c92dab
26 changed files with 9 additions and 2765 deletions

View File

@ -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

View File

@ -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/'

View File

@ -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>"

View File

@ -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

View File

@ -1,820 +0,0 @@
</tbody>
</table>
</div>
</div><!--/tabMainBox-->
</div><!--/tabContent-->
<div id="pagerBottom">
<div class="td-pager-bottom">
&nbsp;<strong class="orange large">1</strong>&nbsp;
<a class="alleLink" href="/web/20120904144913/http://allegro.pl/listing.php/search?p=2&amp;sg=0&amp;string=ibm"><span>2</span></a>
<a class="alleLink" href="/web/20120904144913/http://allegro.pl/listing.php/search?p=3&amp;sg=0&amp;string=ibm"><span>3</span></a>
... <a class="alleLink" href="/web/20120904144913/http://allegro.pl/listing.php/search?p=179&amp;sg=0&amp;string=ibm"><span>179</span></a>
<a href="/web/20120904144913/http://allegro.pl/listing.php/search?p=2&amp;sg=0&amp;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&amp;' + 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&amp;' + 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

View File

@ -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>"

View File

@ -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>"

View File

@ -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;
}

View File

@ -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

View File

@ -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"

View File

@ -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)"

View File

@ -1,7 +0,0 @@
#!/bin/bash
logout
meta[redirect]='/'
source templates/head.sh
echo "Logged out successully. Redirecting.."

View File

@ -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>"

View File

View File

@ -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)"

View File

@ -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

View File

@ -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

View File

@ -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='./'>&lt;--- 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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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