From e1e6b653051119212c4c951096204160f3514f83 Mon Sep 17 00:00:00 2001 From: bie Date: Thu, 29 Jun 2017 15:52:34 +0200 Subject: LAUNCH LAUNCH...launch? --- blueprints/anmeldelse.lua | 89 +++++++++++++++++++++++++++ blueprints/artikkel.lua | 67 +++++++++++++++++++++ date.js | 14 +++++ lupin/anmeldelse.lua | 22 ------- lupin/artikkel.lua | 18 ------ sortable.js | 2 + tears.cgi | 150 ++++++++++++++++++++++++++++++---------------- tears.css | 42 +++++++++++-- tears.js | 128 ++++++++++++++++++++++++++------------- 9 files changed, 395 insertions(+), 137 deletions(-) create mode 100644 blueprints/anmeldelse.lua create mode 100644 blueprints/artikkel.lua create mode 100644 date.js delete mode 100644 lupin/anmeldelse.lua delete mode 100644 lupin/artikkel.lua create mode 100644 sortable.js diff --git a/blueprints/anmeldelse.lua b/blueprints/anmeldelse.lua new file mode 100644 index 0000000..6c449a0 --- /dev/null +++ b/blueprints/anmeldelse.lua @@ -0,0 +1,89 @@ +local artikkel = blueprint("anmeldelse") + +local TERMS = { + ['regissør'] = 'Regissør', + manus = 'Manus', + medvirkende = 'Medvirkende', + sjanger = 'Sjanger', + norgespremiere = 'Norgespremiere', + aldersgrense = 'Aldersgrense' + +} +-- 'medvirkende', +-- 'sjanger', +-- 'norgespremiere', +-- 'aldersgrense' + +function artikkel.env(data) + data.image = os.getenv("POST_image") + data.published = os.getenv("POST_published") + data.lead = os.getenv("POST_lead") +end + +function artikkel.html(body, data) + if data.mode == "title" then + html.h2(data.title) + return + end + + if data.mode == "short" then + html.p{} + html.print(body or "") + return + end + + html.print("

") + html.img{src = data.image} + + html.h2(data.title) + + html.print("

") + if data.portrait then + html.print("", data.portrait) + end + html.print("%s for %s", data.author, data.group) + + html.print("

") + html.print("") + + html.print("
") + html.print("

" .. data.lead .. "") + html.marxup(body) + html.print("

") + + html.print("
") +end + +function artikkel.form(body, data) + html.p{} + html.label{text="Overskrift:"} + html.text{name='title', value=data.title, size=32} + html.p{} + html.label{text="Bilde:"} + html.orz{name = "image", value = data.image} + + html.p{} + html.label{text="Inline-bilde:"} + html.orz{inline = true} + + html.print("

") + html.textarea{name='lead', value=data.lead, rows=3} + + html.p{} + html.textarea{name='text', value=body} + + html.p{} + html.infobox{values=data.info, terms=TERMS} + + html.hidden{name='type', value='anmeldelse'} +end + +return artikkel + diff --git a/blueprints/artikkel.lua b/blueprints/artikkel.lua new file mode 100644 index 0000000..a4c6de7 --- /dev/null +++ b/blueprints/artikkel.lua @@ -0,0 +1,67 @@ +local artikkel = blueprint("default") + +function artikkel.env(data) + data.image = os.getenv("POST_image") + data.published = os.getenv("POST_published") + data.lead = os.getenv("POST_lead") +end + +function artikkel.html(body, data) + if data.mode == "title" then + html.h2(data.title) + return + end + + if data.mode == "short" then + html.p() + html.print(body) + return + end + + html.print("

") + html.img{src = data.image} + + html.h2(data.title) + + html.print("

") + if data.portrait then + html.print("", data.portrait) + end + html.print("") + html.print("%s", data.author, data.author) + html.print(" for ") + html.print("%s", data.group, data.group) + html.print("") + + html.print("

") + html.print("") + + html.print("
") + html.print("

" .. data.lead .. "") + html.marxup(body or "") + html.print("

") + + html.print("
") +end + +function artikkel.form(body, data) + html.p{} + html.label{text="Overskrift:"} + html.text{name='title', value=data.title, size=32} + html.p{} + html.label{text="Bilde:"} + html.orz{name = "image", value = data.image} + html.p{} + html.orz{inline = true} + html.print("

") + html.textarea{name='lead', value=data.lead, rows=3} + html.p{} + html.textarea{name='text', value=body} +end + +return artikkel + diff --git a/date.js b/date.js new file mode 100644 index 0000000..b97300f --- /dev/null +++ b/date.js @@ -0,0 +1,14 @@ +// moment.js +// // version : 1.7.2 +// // author : Tim Wood +// // license : MIT +// // momentjs.com +(function(a){function E(a,b,c,d){var e=c.lang();return e[a].call?e[a](c,d):e[a][b]}function F(a,b){return function(c){return K(a.call(this,c),b)}}function G(a){return function(b){var c=a.call(this,b);return c+this.lang().ordinal(c)}}function H(a,b,c){this._d=a,this._isUTC=!!b,this._a=a._a||null,this._lang=c||!1}function I(a){var b=this._data={},c=a.years||a.y||0,d=a.months||a.M||0,e=a.weeks||a.w||0,f=a.days||a.d||0,g=a.hours||a.h||0,h=a.minutes||a.m||0,i=a.seconds||a.s||0,j=a.milliseconds||a.ms||0;this._milliseconds=j+i*1e3+h*6e4+g*36e5,this._days=f+e*7,this._months=d+c*12,b.milliseconds=j%1e3,i+=J(j/1e3),b.seconds=i%60,h+=J(i/60),b.minutes=h%60,g+=J(h/60),b.hours=g%24,f+=J(g/24),f+=e*7,b.days=f%30,d+=J(f/30),b.months=d%12,c+=J(d/12),b.years=c,this._lang=!1}function J(a){return a<0?Math.ceil(a):Math.floor(a)}function K(a,b){var c=a+"";while(c.length70?1900:2e3);break;case"YYYY":c[0]=~~Math.abs(b);break;case"a":case"A":d.isPm=(b+"").toLowerCase()==="pm";break;case"H":case"HH":case"h":case"hh":c[3]=~~b;break;case"m":case"mm":c[4]=~~b;break;case"s":case"ss":c[5]=~~b;break;case"S":case"SS":case"SSS":c[6]=~~(("0."+b)*1e3);break;case"Z":case"ZZ":d.isUTC=!0,e=(b+"").match(x),e&&e[1]&&(d.tzh=~~e[1]),e&&e[2]&&(d.tzm=~~e[2]),e&&e[0]==="+"&&(d.tzh=-d.tzh,d.tzm=-d.tzm)}b==null&&(c[8]=!1)}function W(a,b){var c=[0,0,1,0,0,0,0],d={tzh:0,tzm:0},e=b.match(k),f,g;for(f=0;f0,j[4]=c,Z.apply({},j)}function _(a,c){b.fn[a]=function(a){var b=this._isUTC?"UTC":"";return a!=null?(this._d["set"+b+c](a),this):this._d["get"+b+c]()}}function ab(a){b.duration.fn[a]=function(){return this._data[a]}}function bb(a,c){b.duration.fn["as"+a]=function(){return+this/c}}var b,c="1.7.2",d=Math.round,e,f={},g="en",h=typeof module!="undefined"&&module.exports,i="months|monthsShort|weekdays|weekdaysShort|weekdaysMin|longDateFormat|calendar|relativeTime|ordinal|meridiem".split("|"),j=/^\/?Date\((\-?\d+)/i,k=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|YYYY|YY|a|A|hh?|HH?|mm?|ss?|SS?S?|zz?|ZZ?|.)/g,l=/(\[[^\[]*\])|(\\)?(LT|LL?L?L?)/g,m=/([0-9a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+)/gi,n=/\d\d?/,o=/\d{1,3}/,p=/\d{3}/,q=/\d{1,4}/,r=/[0-9a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+/i,s=/Z|[\+\-]\d\d:?\d\d/i,t=/T/i,u=/^\s*\d{4}-\d\d-\d\d(T(\d\d(:\d\d(:\d\d(\.\d\d?\d?)?)?)?)?([\+\-]\d\d:?\d\d)?)?/,v="YYYY-MM-DDTHH:mm:ssZ",w=[["HH:mm:ss.S",/T\d\d:\d\d:\d\d\.\d{1,3}/],["HH:mm:ss",/T\d\d:\d\d:\d\d/],["HH:mm",/T\d\d:\d\d/],["HH",/T\d\d/]],x=/([\+\-]|\d\d)/gi,y="Month|Date|Hours|Minutes|Seconds|Milliseconds".split("|"),z={Milliseconds:1,Seconds:1e3,Minutes:6e4,Hours:36e5,Days:864e5,Months:2592e6,Years:31536e6},A={},B="DDD w M D d".split(" "),C="M D H h m s w".split(" "),D={M:function(){return this.month()+1},MMM:function(a){return E("monthsShort",this.month(),this,a)},MMMM:function(a){return E("months",this.month(),this,a)},D:function(){return this.date()},DDD:function(){var a=new Date(this.year(),this.month(),this.date()),b=new Date(this.year(),0,1);return~~((a-b)/864e5+1.5)},d:function(){return this.day()},dd:function(a){return E("weekdaysMin",this.day(),this,a)},ddd:function(a){return E("weekdaysShort",this.day(),this,a)},dddd:function(a){return E("weekdays",this.day(),this,a)},w:function(){var a=new Date(this.year(),this.month(),this.date()-this.day()+5),b=new Date(a.getFullYear(),0,4);return~~((a-b)/864e5/7+1.5)},YY:function(){return K(this.year()%100,2)},YYYY:function(){return K(this.year(),4)},a:function(){return this.lang().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.lang().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return~~(this.milliseconds()/100)},SS:function(){return K(~~(this.milliseconds()/10),2)},SSS:function(){return K(this.milliseconds(),3)},Z:function(){var a=-this.zone(),b="+";return a<0&&(a=-a,b="-"),b+K(~~(a/60),2)+":"+K(~~a%60,2)},ZZ:function(){var a=-this.zone(),b="+";return a<0&&(a=-a,b="-"),b+K(~~(10*a/6),4)}};while(B.length)e=B.pop(),D[e+"o"]=G(D[e]);while(C.length)e=C.pop(),D[e+e]=F(D[e],2);D.DDDD=F(D.DDD,3),b=function(c,d){if(c===null||c==="")return null;var e,f;return b.isMoment(c)?new H(new Date(+c._d),c._isUTC,c._lang):(d?M(d)?e=X(c,d):e=W(c,d):(f=j.exec(c),e=c===a?new Date:f?new Date(+f[1]):c instanceof Date?c:M(c)?O(c):typeof c=="string"?Y(c):new Date(c)),new H(e))},b.utc=function(a,c){return M(a)?new H(O(a,!0),!0):(typeof a=="string"&&!s.exec(a)&&(a+=" +0000",c&&(c+=" Z")),b(a,c).utc())},b.unix=function(a){return b(a*1e3)},b.duration=function(a,c){var d=b.isDuration(a),e=typeof a=="number",f=d?a._data:e?{}:a,g;return e&&(c?f[c]=a:f.milliseconds=a),g=new I(f),d&&(g._lang=a._lang),g},b.humanizeDuration=function(a,c,d){return b.duration(a,c===!0?null:c).humanize(c===!0?!0:d)},b.version=c,b.defaultFormat=v,b.lang=function(a,c){var d;if(!a)return g;(c||!f[a])&&P(a,c);if(f[a]){for(d=0;d11?c?"pm":"PM":c?"am":"AM"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinal:function(a){var b=a%10;return~~(a%100/10)===1?"th":b===1?"st":b===2?"nd":b===3?"rd":"th"}}),b.fn=H.prototype={clone:function(){return b(this)},valueOf:function(){return+this._d},unix:function(){return Math.floor(+this._d/1e3)},toString:function(){return this._d.toString()},toDate:function(){return this._d},toArray:function(){var a=this;return[a.year(),a.month(),a.date(),a.hours(),a.minutes(),a.seconds(),a.milliseconds(),!!this._isUTC]},isValid:function(){return this._a?this._a[8]!=null?!!this._a[8]:!N(this._a,(this._a[7]?b.utc(this._a):b(this._a)).toArray()):!isNaN(this._d.getTime())},utc:function(){return this._isUTC=!0,this},local:function(){return this._isUTC=!1,this},format:function(a){return T(this,a?a:b.defaultFormat)},add:function(a,c){var d=c?b.duration(+c,a):b.duration(a);return L(this,d,1),this},subtract:function(a,c){var d=c?b.duration(+c,a):b.duration(a);return L(this,d,-1),this},diff:function(a,c,e){var f=this._isUTC?b(a).utc():b(a).local(),g=(this.zone()-f.zone())*6e4,h=this._d-f._d-g,i=this.year()-f.year(),j=this.month()-f.month(),k=this.date()-f.date(),l;return c==="months"?l=i*12+j+k/30:c==="years"?l=i+(j+k/30)/12:l=c==="seconds"?h/1e3:c==="minutes"?h/6e4:c==="hours"?h/36e5:c==="days"?h/864e5:c==="weeks"?h/6048e5:h,e?l:d(l)},from:function(a,c){return b.duration(this.diff(a)).lang(this._lang).humanize(!c)},fromNow:function(a){return this.from(b(),a)},calendar:function(){var a=this.diff(b().sod(),"days",!0),c=this.lang().calendar,d=c.sameElse,e=a<-6?d:a<-1?c.lastWeek:a<0?c.lastDay:a<1?c.sameDay:a<2?c.nextDay:a<7?c.nextWeek:d;return this.format(typeof e=="function"?e.apply(this):e)},isLeapYear:function(){var a=this.year();return a%4===0&&a%100!==0||a%400===0},isDST:function(){return this.zone()=7)t-=7;return n?e.i18n.weekdaysShort[t]:e.i18n.weekdays[t]},w=function(e,t,n,r,i){if(i)return'';var s=[];return r&&s.push("is-disabled"),n&&s.push("is-today"),t&&s.push("is-selected"),'"+""},E=function(e,t){return""+(t?e.reverse():e).join("")+""},S=function(e){return""+e.join("")+""},x=function(e){var t,n=[];for(t=0;t<7;t++)n.push(''+b(e,t,!0)+"");return""+(e.isRTL?n.reverse():n).join("")+""},T=function(e){var t,n,r,i=e._o,s=e._m,o=e._y,u=o===i.minYear,a=o===i.maxYear,f='

',l=!0,c=!0;for(r=[],t=0;t<12;t++)r.push('");f+='
'+i.i18n.months[s]+'
",h(i.yearRange)?(t=i.yearRange[0],n=i.yearRange[1]+1):(t=o-i.yearRange,n=1+o+i.yearRange);for(r=[];t=i.minYear&&r.push('");return f+='
'+o+'
",u&&(s===0||i.minMonth>=s)&&(l=!1),a&&(s===11||i.maxMonth<=s)&&(c=!1),f+='',f+='',f+="
"},N=function(e,t){return''+x(e)+S(t)+"
"};e.Pikaday=function(n){var u=this,a=u.config(n);u._onMouseDown=function(t){if(!u._v)return;t=t||e.event;var n=t.target||t.srcElement;if(!n)return;if(!f(n,"is-disabled")){if(f(n,"pika-button")&&!f(n,"is-empty")){u.setDate(new Date(u._y,u._m,parseInt(n.innerHTML,10))),a.bound&&s(function(){u.hide()},100);return}f(n,"pika-prev")?u.prevMonth():f(n,"pika-next")&&u.nextMonth()}if(!f(n,"pika-select")){if(!t.preventDefault)return t.returnValue=!1;t.preventDefault()}else u._c=!0},u._onChange=function(t){t=t||e.event;var n=t.target||t.srcElement;if(!n)return;f(n,"pika-select-month")?u.gotoMonth(n.value):f(n,"pika-select-year")&&u.gotoYear(n.value)},u._onInputChange=function(t){if(r)u.setDate(e.moment(a.field.value,a.format).toDate());else{var n=new Date(Date.parse(a.field.value));u.setDate(p(n)?n:null)}u._v||u.show()},u._onInputFocus=function(e){u.show()},u._onInputClick=function(e){u.show()},u._onInputBlur=function(e){u._c||(u._b=s(function(){u.hide()},50)),u._c=!1},u._onClick=function(t){t=t||e.event;var n=t.target||t.srcElement,r=n;if(!n)return;!i&&f(n,"pika-select")&&(n.onchange||(n.setAttribute("onchange","return;"),o(n,"change",u._onChange)));do if(f(r,"pika-single"))return;while(r=r.parentNode);u._v&&n!==a.field&&u.hide()},u.el=t.createElement("div"),u.el.className="pika-single"+(a.isRTL?" is-rtl":""),o(u.el,"mousedown",u._onMouseDown,!0),o(u.el,"change",u._onChange),a.field&&(a.bound?t.body.appendChild(u.el):a.field.parentNode.insertBefore(u.el,a.field.nextSibling),o(a.field,"change",u._onInputChange),a.defaultDate||(r&&a.field.value?a.defaultDate=e.moment(a.field.value,a.format).toDate():a.defaultDate=new Date(Date.parse(a.field.value)),a.setDefaultDate=!0));var l=a.defaultDate;p(l)?a.setDefaultDate?u.setDate(l):u.gotoDate(l):u.gotoDate(new Date),a.bound?(this.hide(),u.el.className+=" is-bound",o(a.field,"click",u._onInputClick),o(a.field,"focus",u._onInputFocus),o(a.field,"blur",u._onInputBlur)):this.show()},e.Pikaday.prototype={config:function(e){this._o||(this._o=g({},y,!0));var t=g(this._o,e,!0);t.isRTL=!!t.isRTL,t.field=t.field&&t.field.nodeName?t.field:null,t.bound=!!(t.bound!==n?t.field&&t.bound:t.field);var r=parseInt(t.numberOfMonths,10)||1;t.numberOfMonths=r>4?4:r,p(t.minDate)||(t.minDate=!1),p(t.maxDate)||(t.maxDate=!1),t.minDate&&t.maxDate&&t.maxDate100&&(t.yearRange=100);return t},toString:function(t){return p(this._d)?r?e.moment(this._d).format(t||this._o.format):this._d.toDateString():""},getMoment:function(){return r?e.moment(this._d):null},getDate:function(){return p(this._d)?new Date(this._d.getTime()):null},setDate:function(e){if(!e)return this._d=null,this.draw();typeof e=="string"&&(e=new Date(Date.parse(e)));if(!p(e))return;var t=this._o.minDate,n=this._o.maxDate;p(t)&&en&&(e=n),this._d=new Date(e.getTime()),this._d.setHours(0,0,0,0),this.gotoDate(this._d),this._o.field&&(this._o.field.value=this.toString()),typeof this._o.onSelect=="function"&&this._o.onSelect.call(this,this.getDate())},gotoDate:function(e){if(!p(e))return;this._y=e.getFullYear(),this._m=e.getMonth(),this.draw()},gotoToday:function(){this.gotoDate(new Date)},gotoMonth:function(e){isNaN(e=parseInt(e,10))||(this._m=e<0?0:e>11?11:e,this.draw())},nextMonth:function(){++this._m>11&&(this._m=0,this._y++),this.draw()},prevMonth:function(){--this._m<0&&(this._m=11,this._y--),this.draw()},gotoYear:function(e){isNaN(e)||(this._y=parseInt(e,10),this.draw())},draw:function(e){if(!this._v&&!e)return;var t=this._o,n=t.minYear,r=t.maxYear,i=t.minMonth,o=t.maxMonth;this._y<=n&&(this._y=n,!isNaN(i)&&this._m=r&&(this._y=r,!isNaN(o)&&this._m>o&&(this._m=o)),this.el.innerHTML=T(this)+this.render(this._y,this._m);if(t.bound){var u=t.field,a=u.offsetLeft,f=u.offsetTop+u.offsetHeight;while(u=u.offsetParent)a+=u.offsetLeft,f+=u.offsetTop;this.el.style.cssText="position:absolute;left:"+a+"px;top:"+f+"px;",s(function(){t.field.focus()},1)}},render:function(e,t){var n=this._o,r=new Date,i=v(e,t),s=(new Date(e,t,1)).getDay(),o=[],u=[];r.setHours(0,0,0,0),n.firstDay>0&&(s-=n.firstDay,s<0&&(s+=7));var a=i+s,f=a;while(f>7)f-=7;a+=7-f;for(var l=0,c=0;ln.maxDate,g=p(this._d)?m(h,this._d):!1,y=m(h,r),b=l=i+s;u.push(w(1+(l-s),g,y,d,b)),++c===7&&(o.push(E(u,n.isRTL)),u=[],c=0)}return N(n,o)},isVisible:function(){return this._v},show:function(){this._v||(this._o.bound&&o(t,"click",this._onClick),c(this.el,"is-hidden"),this._v=!0,this.draw(),typeof this._o.onOpen=="function"&&this._o.onOpen.call(this))},hide:function(){var e=this._v;e!==!1&&(this._o.bound&&u(t,"click",this._onClick),this.el.style.cssText="",l(this.el,"is-hidden"),this._v=!1,e!==n&&typeof this._o.onClose=="function"&&this._o.onClose.call(this))},destroy:function(){this.hide(),u(this.el,"mousedown",this._onMouseDown,!0),u(this.el,"change",this._onChange),this._o.field&&(u(this._o.field,"change",this._onInputChange),this._o.bound&&(u(this._o.field,"click",this._onInputClick),u(this._o.field,"focus",this._onInputFocus),u(this._o.field,"blur",this._onInputBlur))),this.el.parentNode&&this.el.parentNode.removeChild(this.el)}}})(window,window.document); + + diff --git a/lupin/anmeldelse.lua b/lupin/anmeldelse.lua deleted file mode 100644 index 37a441b..0000000 --- a/lupin/anmeldelse.lua +++ /dev/null @@ -1,22 +0,0 @@ -local artikkel = blueprint("anmeldelse") - -function artikkel.env(data) - data.terningkast = os.getenv("POST_terningkast") or "" - data.publisert = os.getenv("POST_publisert") or "" -end - -function artikkel.form(body, data) - html.p() - html.label("Overskrift:") - html.text('title', data.title, 32) - html.p() - html.label("Terningkast:") - html.p(data.terningkast) - html.select('terningkast', { 1, 2, 3, 4, 5, 6 }, data.terningkast or 1) - html.p() - html.textarea('tekst', body) - html.hidden('type', 'anmeldelse') -end - -return artikkel - diff --git a/lupin/artikkel.lua b/lupin/artikkel.lua deleted file mode 100644 index 3ad2f4d..0000000 --- a/lupin/artikkel.lua +++ /dev/null @@ -1,18 +0,0 @@ -local artikkel = blueprint("default") - -function artikkel.env(data) - data.bilde = os.getenv("POST_bilde") - data.publisert = os.getenv("POST_publisert") -end - -function artikkel.form(body, data) - html.p() - html.label("Overskrift:") - html.text('title', data.title, 32) - html.orz('bilde', data.bilde or '') - html.p() - html.textarea('tekst', body) -end - -return artikkel - diff --git a/sortable.js b/sortable.js new file mode 100644 index 0000000..573538f --- /dev/null +++ b/sortable.js @@ -0,0 +1,2 @@ +/*! Sortable 1.6.0 - MIT | git://github.com/rubaxa/Sortable.git */ +!function(a){"use strict";"function"==typeof define&&define.amd?define(a):"undefined"!=typeof module&&"undefined"!=typeof module.exports?module.exports=a():window.Sortable=a()}(function(){"use strict";function a(a,b){if(!a||!a.nodeType||1!==a.nodeType)throw"Sortable: `el` must be HTMLElement, and not "+{}.toString.call(a);this.el=a,this.options=b=t({},b),a[T]=this;var c={group:Math.random(),sort:!0,disabled:!1,store:null,handle:null,scroll:!0,scrollSensitivity:30,scrollSpeed:10,draggable:/[uo]l/i.test(a.nodeName)?"li":">*",ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,setData:function(a,b){a.setData("Text",b.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0}};for(var d in c)!(d in b)&&(b[d]=c[d]);ga(b);for(var e in this)"_"===e.charAt(0)&&"function"==typeof this[e]&&(this[e]=this[e].bind(this));this.nativeDraggable=!b.forceFallback&&$,f(a,"mousedown",this._onTapStart),f(a,"touchstart",this._onTapStart),f(a,"pointerdown",this._onTapStart),this.nativeDraggable&&(f(a,"dragover",this),f(a,"dragenter",this)),ea.push(this._onDragOver),b.store&&this.sort(b.store.get(this))}function b(a,b){"clone"!==a.lastPullMode&&(b=!0),z&&z.state!==b&&(i(z,"display",b?"none":""),b||z.state&&(a.options.group.revertClone?(A.insertBefore(z,B),a._animate(w,z)):A.insertBefore(z,w)),z.state=b)}function c(a,b,c){if(a){c=c||V;do if(">*"===b&&a.parentNode===c||r(a,b))return a;while(a=d(a))}return null}function d(a){var b=a.host;return b&&b.nodeType?b:a.parentNode}function e(a){a.dataTransfer&&(a.dataTransfer.dropEffect="move"),a.preventDefault()}function f(a,b,c){a.addEventListener(b,c,Z)}function g(a,b,c){a.removeEventListener(b,c,Z)}function h(a,b,c){if(a)if(a.classList)a.classList[c?"add":"remove"](b);else{var d=(" "+a.className+" ").replace(R," ").replace(" "+b+" "," ");a.className=(d+(c?" "+b:"")).replace(R," ")}}function i(a,b,c){var d=a&&a.style;if(d){if(void 0===c)return V.defaultView&&V.defaultView.getComputedStyle?c=V.defaultView.getComputedStyle(a,""):a.currentStyle&&(c=a.currentStyle),void 0===b?c:c[b];b in d||(b="-webkit-"+b),d[b]=c+("string"==typeof c?"":"px")}}function j(a,b,c){if(a){var d=a.getElementsByTagName(b),e=0,f=d.length;if(c)for(;e5||b.clientX-(d.left+d.width)>5}function p(a){for(var b=a.tagName+a.className+a.src+a.href+a.textContent,c=b.length,d=0;c--;)d+=b.charCodeAt(c);return d.toString(36)}function q(a,b){var c=0;if(!a||!a.parentNode)return-1;for(;a&&(a=a.previousElementSibling);)"TEMPLATE"===a.nodeName.toUpperCase()||">*"!==b&&!r(a,b)||c++;return c}function r(a,b){if(a){b=b.split(".");var c=b.shift().toUpperCase(),d=new RegExp("\\s("+b.join("|")+")(?=\\s)","g");return!(""!==c&&a.nodeName.toUpperCase()!=c||b.length&&((" "+a.className+" ").match(d)||[]).length!=b.length)}return!1}function s(a,b){var c,d;return function(){void 0===c&&(c=arguments,d=this,setTimeout(function(){1===c.length?a.call(d,c[0]):a.apply(d,c),c=void 0},b))}}function t(a,b){if(a&&b)for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function u(a){return X?X(a).clone(!0)[0]:Y&&Y.dom?Y.dom(a).cloneNode(!0):a.cloneNode(!0)}function v(a){for(var b=a.getElementsByTagName("input"),c=b.length;c--;){var d=b[c];d.checked&&da.push(d)}}if("undefined"==typeof window||!window.document)return function(){throw new Error("Sortable.js requires a window with a document")};var w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q={},R=/\s+/g,S=/left|right|inline/,T="Sortable"+(new Date).getTime(),U=window,V=U.document,W=U.parseInt,X=U.jQuery||U.Zepto,Y=U.Polymer,Z=!1,$=!!("draggable"in V.createElement("div")),_=function(a){return!navigator.userAgent.match(/Trident.*rv[ :]?11\./)&&(a=V.createElement("x"),a.style.cssText="pointer-events:auto","auto"===a.style.pointerEvents)}(),aa=!1,ba=Math.abs,ca=Math.min,da=[],ea=[],fa=s(function(a,b,c){if(c&&b.scroll){var d,e,f,g,h,i,j=c[T],k=b.scrollSensitivity,l=b.scrollSpeed,m=a.clientX,n=a.clientY,o=window.innerWidth,p=window.innerHeight;if(E!==c&&(D=b.scroll,E=c,F=b.scrollFn,D===!0)){D=c;do if(D.offsetWidth-1:e==a)}}var c={},d=a.group;d&&"object"==typeof d||(d={name:d}),c.name=d.name,c.checkPull=b(d.pull,!0),c.checkPut=b(d.put),c.revertClone=d.revertClone,a.group=c};a.prototype={constructor:a,_onTapStart:function(a){var b,d=this,e=this.el,f=this.options,g=f.preventOnFilter,h=a.type,i=a.touches&&a.touches[0],j=(i||a).target,l=a.target.shadowRoot&&a.path[0]||j,m=f.filter;if(v(e),!w&&!("mousedown"===h&&0!==a.button||f.disabled)&&(j=c(j,f.draggable,e),j&&C!==j)){if(b=q(j,f.draggable),"function"==typeof m){if(m.call(this,a,j,this))return k(d,l,"filter",j,e,b),void(g&&a.preventDefault())}else if(m&&(m=m.split(",").some(function(a){if(a=c(l,a.trim(),e))return k(d,a,"filter",j,e,b),!0})))return void(g&&a.preventDefault());f.handle&&!c(l,f.handle,e)||this._prepareDragStart(a,i,j,b)}},_prepareDragStart:function(a,b,c,d){var e,g=this,i=g.el,l=g.options,n=i.ownerDocument;c&&!w&&c.parentNode===i&&(N=a,A=i,w=c,x=w.parentNode,B=w.nextSibling,C=c,L=l.group,J=d,this._lastX=(b||a).clientX,this._lastY=(b||a).clientY,w.style["will-change"]="transform",e=function(){g._disableDelayedDrag(),w.draggable=g.nativeDraggable,h(w,l.chosenClass,!0),g._triggerDragStart(a,b),k(g,A,"choose",w,A,J)},l.ignore.split(",").forEach(function(a){j(w,a.trim(),m)}),f(n,"mouseup",g._onDrop),f(n,"touchend",g._onDrop),f(n,"touchcancel",g._onDrop),f(n,"pointercancel",g._onDrop),f(n,"selectstart",g),l.delay?(f(n,"mouseup",g._disableDelayedDrag),f(n,"touchend",g._disableDelayedDrag),f(n,"touchcancel",g._disableDelayedDrag),f(n,"mousemove",g._disableDelayedDrag),f(n,"touchmove",g._disableDelayedDrag),f(n,"pointermove",g._disableDelayedDrag),g._dragStartTimer=setTimeout(e,l.delay)):e())},_disableDelayedDrag:function(){var a=this.el.ownerDocument;clearTimeout(this._dragStartTimer),g(a,"mouseup",this._disableDelayedDrag),g(a,"touchend",this._disableDelayedDrag),g(a,"touchcancel",this._disableDelayedDrag),g(a,"mousemove",this._disableDelayedDrag),g(a,"touchmove",this._disableDelayedDrag),g(a,"pointermove",this._disableDelayedDrag)},_triggerDragStart:function(a,b){b=b||("touch"==a.pointerType?a:null),b?(N={target:w,clientX:b.clientX,clientY:b.clientY},this._onDragStart(N,"touch")):this.nativeDraggable?(f(w,"dragend",this),f(A,"dragstart",this._onDragStart)):this._onDragStart(N,!0);try{V.selection?setTimeout(function(){V.selection.empty()}):window.getSelection().removeAllRanges()}catch(a){}},_dragStarted:function(){if(A&&w){var b=this.options;h(w,b.ghostClass,!0),h(w,b.dragClass,!1),a.active=this,k(this,A,"start",w,A,J)}else this._nulling()},_emulateDragOver:function(){if(O){if(this._lastX===O.clientX&&this._lastY===O.clientY)return;this._lastX=O.clientX,this._lastY=O.clientY,_||i(y,"display","none");var a=V.elementFromPoint(O.clientX,O.clientY),b=a,c=ea.length;if(b)do{if(b[T]){for(;c--;)ea[c]({clientX:O.clientX,clientY:O.clientY,target:a,rootEl:b});break}a=b}while(b=b.parentNode);_||i(y,"display","")}},_onTouchMove:function(b){if(N){var c=this.options,d=c.fallbackTolerance,e=c.fallbackOffset,f=b.touches?b.touches[0]:b,g=f.clientX-N.clientX+e.x,h=f.clientY-N.clientY+e.y,j=b.touches?"translate3d("+g+"px,"+h+"px,0)":"translate("+g+"px,"+h+"px)";if(!a.active){if(d&&ca(ba(f.clientX-this._lastX),ba(f.clientY-this._lastY))w.offsetWidth,D=e.offsetHeight>w.offsetHeight,E=(v?(d.clientX-g.left)/t:(d.clientY-g.top)/u)>.5,F=e.nextElementSibling,J=!1;if(v){var K=w.offsetTop,N=e.offsetTop;J=K===N?e.previousElementSibling===w&&!C||E&&C:e.previousElementSibling===w||w.previousElementSibling===e?(d.clientY-g.top)/u>.5:N>K}else r||(J=F!==w&&!D||E&&D);var O=l(A,j,w,f,e,g,d,J);O!==!1&&(1!==O&&O!==-1||(J=1===O),aa=!0,setTimeout(n,30),b(p,q),w.contains(j)||(J&&!F?j.appendChild(w):e.parentNode.insertBefore(w,J?F:e)),x=w.parentNode,this._animate(f,w),this._animate(g,e))}}},_animate:function(a,b){var c=this.options.animation;if(c){var d=b.getBoundingClientRect();1===a.nodeType&&(a=a.getBoundingClientRect()),i(b,"transition","none"),i(b,"transform","translate3d("+(a.left-d.left)+"px,"+(a.top-d.top)+"px,0)"),b.offsetWidth,i(b,"transition","all "+c+"ms"),i(b,"transform","translate3d(0,0,0)"),clearTimeout(b.animated),b.animated=setTimeout(function(){i(b,"transition",""),i(b,"transform",""),b.animated=!1},c)}},_offUpEvents:function(){var a=this.el.ownerDocument;g(V,"touchmove",this._onTouchMove),g(V,"pointermove",this._onTouchMove),g(a,"mouseup",this._onDrop),g(a,"touchend",this._onDrop),g(a,"pointerup",this._onDrop),g(a,"touchcancel",this._onDrop),g(a,"pointercancel",this._onDrop),g(a,"selectstart",this)},_onDrop:function(b){var c=this.el,d=this.options;clearInterval(this._loopId),clearInterval(Q.pid),clearTimeout(this._dragStartTimer),g(V,"mousemove",this._onTouchMove),this.nativeDraggable&&(g(V,"drop",this),g(c,"dragstart",this._onDragStart)),this._offUpEvents(),b&&(P&&(b.preventDefault(),!d.dropBubble&&b.stopPropagation()),y&&y.parentNode&&y.parentNode.removeChild(y),A!==x&&"clone"===a.active.lastPullMode||z&&z.parentNode&&z.parentNode.removeChild(z),w&&(this.nativeDraggable&&g(w,"dragend",this),m(w),w.style["will-change"]="",h(w,this.options.ghostClass,!1),h(w,this.options.chosenClass,!1),k(this,A,"unchoose",w,A,J),A!==x?(K=q(w,d.draggable),K>=0&&(k(null,x,"add",w,A,J,K),k(this,A,"remove",w,A,J,K),k(null,x,"sort",w,A,J,K),k(this,A,"sort",w,A,J,K))):w.nextSibling!==B&&(K=q(w,d.draggable),K>=0&&(k(this,A,"update",w,A,J,K),k(this,A,"sort",w,A,J,K))),a.active&&(null!=K&&K!==-1||(K=J),k(this,A,"end",w,A,J,K),this.save()))),this._nulling()},_nulling:function(){A=w=x=y=B=z=C=D=E=N=O=P=K=G=H=M=L=a.active=null,da.forEach(function(a){a.checked=!0}),da.length=0},handleEvent:function(a){switch(a.type){case"drop":case"dragend":this._onDrop(a);break;case"dragover":case"dragenter":w&&(this._onDragOver(a),e(a));break;case"selectstart":a.preventDefault()}},toArray:function(){for(var a,b=[],d=this.el.children,e=0,f=d.length,g=this.options;e/dev/null + #/opt/bin/birk -c radionova "$1" } byline() { @@ -23,7 +22,7 @@ byline() { } info() { - stat -c '%n: %U %G %a %Y' $1 + stat -c '%n: %U %G %A %Y' $1 } link() { @@ -31,7 +30,9 @@ link() { local clean="/${raw%/}" local rawt="$BASE/$2" local cleant="/${rawt%/}" - [ $cleant = $clean ] && echo "$1" || echo "$1" + local target="" + [ -n "$3" ] && target=" target='$3'" + [ $cleant = $clean ] && echo "$1" || echo "$1" } qlink() { @@ -40,9 +41,11 @@ qlink() { } redirect() { - echo -e "Content-Type: text/html; charset=utf-8" - echo -e "Location: https://$HOST$1\n" + echo -ne "Location: $SCHEME$HOST$1\r\n" + echo -ne "Status: 302\r\n" + echo -ne "Content-Type: text/html; charset=utf-8\r\n\r\n" echo "٩(͡๏̯͡๏)۶>" + exit } stikkordsøk() { @@ -63,33 +66,33 @@ kalender() { if [ -z "$y" ]; then for directory in $(cut -d / -f $((n + 2)) | sort | uniq); do year=$(basename $directory) - qlink "$year" "$action/$path" "dato=$year" "stikkord=$GET_stikkord" + qlink "$year" "$action/$args" "dato=$year" "stikkord=$GET_stikkord" done elif [ -z "$m" ]; then echo "" - qlink "$y" "$action/$path" "stikkord=$GET_stikkord" + qlink "$y" "$action/$args" "stikkord=$GET_stikkord" echo "
" for directory in $(cut -d / -f $((n + 3)) | sort | uniq); do month=$(basename $directory) - qlink "$month" "$action/$path" "dato=$y-$month" "stikkord=$GET_stikkord" + qlink "$month" "$action/$args" "dato=$y-$month" "stikkord=$GET_stikkord" done elif [ -z "$d" ]; then echo "" - qlink "$y" "$action/$path" "stikkord=$GET_stikkord" + qlink "$y" "$action/$args" "stikkord=$GET_stikkord" echo "/" - qlink "$m" "$action/$path" "dato=$y" "stikkord=$GET_stikkord" + qlink "$m" "$action/$args" "dato=$y" "stikkord=$GET_stikkord" echo "
" for directory in $(cut -d / -f $((n + 4)) | sort | uniq); do day=$(basename $directory) - qlink "$day" "$action/$path" "dato=$y-$m-$day" "stikkord=$GET_stikkord" + qlink "$day" "$action/$args" "dato=$y-$m-$day" "stikkord=$GET_stikkord" done else echo "" - qlink "$y" "$action/$path" "stikkord=$GET_stikkord" + qlink "$y" "$action/$args" "stikkord=$GET_stikkord" echo "/" - qlink "$m" "$action/$path" "dato=$y" "stikkord=$GET_stikkord" + qlink "$m" "$action/$args" "dato=$y" "stikkord=$GET_stikkord" echo "/" - qlink "$d" "$action/$path" "dato=$y-$m" "stikkord=$GET_stikkord" + qlink "$d" "$action/$args" "dato=$y-$m" "stikkord=$GET_stikkord" echo "
" fi } @@ -99,6 +102,8 @@ meny() { echo "" echo "tears" echo "" + echo "" + echo "" echo "" echo "
" link "
$(figlet -f threepoint tears)
" "" @@ -119,14 +124,21 @@ meny() { liste() { n=$((${GET_n:-0} + 7)) - $finder -printf '%h\t%TT\t%f\n' | sort -r | head -$n | tail -7 | while read - do - d=$(cut -f 1 <<<"$REPLY") - f=$(cut -f 3 <<<"$REPLY") - kort $d/$f - done - echo "

" - qlink "eldre artikler…" "$action/$path" "dato=$GET_dato" "n=$n" + finder="$finder -printf %h\t%TT\t%f\n" + ok=1 + $finder | sort -r | head -$n | tail -7 | while read path; do + # while read path; do + d=$(cut -f 1 <<<"$path") + f=$(cut -f 3 <<<"$path") + ok=1 + [ "$f" ] && kort "$d/$f" + done # <<< $(eval $finder | sort -r | head -$n | tail -7) + if [ -z "$ok" ]; then + echo "

Ingen artikler" + else + echo "


" + qlink "eldre artikler…" "$action/$args" "dato=$GET_dato" "n=$n" + fi } stikkord() { @@ -143,7 +155,8 @@ stikk() { find -L stikkord -samefile "$1" -delete for ord in $2; do local path="stikkord/$ord/${1#artikler/}" - mkdir -p "$(dirname $path)" + umask 000 + mkdir -p -m 777 "$(dirname $path)" ln -s "../../../../../$1" "$path" done } @@ -151,29 +164,40 @@ stikk() { skjema() { [ ! -f "$1" ] && echo "

finner ikke $1:

$(xxd <<<$1)
" && exit [ ! -w "$1" ] && echo "

du har ikke skrivetilgang" && exit - echo "

" - lupin -f <$1 + echo "" + lupin -f $1 echo "

" echo "" - echo "

" + echo "

" + echo "" + echo "" + echo "" + [ -r "$1" ] && link "Vis" $(/opt/bin/pencode / <<<"vis/$1") preview echo "

" - echo "

$(info $1)" + #echo "

$(info $1)" } vis() { [ ! -f "$1" ] && echo "

finner ikke $1:

$(xxd <<<$1)
" && exit [ ! -r "$1" ] && echo "

du har ikke lesetilgang" && exit - lupin -h <$1 + echo "

" + lupin $1 | /opt/bin/embed + echo "
" } lagre() { - path=$(date +%Y/%m/%d -d $POST_publisert) + path=$(tr '-' '/' <<< $POST_publisert) slug=$(sed -e 's|[ /]|-|g' -e 's|[?:]||g' <<<$POST_title) [ -z "$slug" ] && error "Ugyldig overskrift" [ -f "artikler/$path/$slug.txt" ] && error "Artikkelen finnes allerede" - mkdir -m 777 -p "artikler/$path" - [ -z "$POST_privat" ] && umask 0002 - lupin -l -e >"artikler/$path/$slug.txt" + umask 0000 + mkdir -p "artikler/$path" + lupin -p -e - >"artikler/$path/$slug.txt" + if [ -z "$POST_privat" ]; then + chmod 660 "artikler/$path/$slug.txt" + else + chmod 640 "artikler/$path/$slug.txt" + fi chgrp $POST_gruppe "artikler/$path/$slug.txt" irc "$(whoami) skriver ny artikkel: $POST_title" redirect "$BASE/rediger/artikler/$path/$slug.txt" @@ -182,34 +206,48 @@ lagre() { oppdater() { [ ! -f "$1" ] && error "finner ikke $1" [ ! -w "$1" ] && error "ikke skrivetilgang til $1" + + if [[ -n "$POST_delete" ]]; then + rm "$1" + redirect "$BASE" + fi + [ -z "$POST_title" ] && error "ingen overskrift" [ -z "$POST_stikkord" ] && error "ingen stikkord" + stikk "$1" "$POST_stikkord" - lupin -l -e >$1 + lupin -p -e - >$1 irc "$(whoami) redigerte $POST_title" - redirect "$BASE/rediger/$path" + [ -n "$POST_publish" ] && chmod o+r "$1" + pushd /home/bie/maker >/dev/null; ./maker; popd >/dev/null + redirect "$BASE/rediger/$1" } kort() { IFS=/. read -r type y m d hhmm slug ext <<< "$1" - lupin -t -h <$1 + lupin -t $1 echo "

$(byline $1), $y/$m/$d" - [ -r "$1" ] && echo "·" && link "vis" $(pencode / <<<"vis/$1") - [ -w "$1" ] && echo "·" && link "rediger" $(pencode / <<<"rediger/$1") - lupin -s -h <$1 + [ -r "$1" ] && echo "·" && link "vis" $(/opt/bin/pencode / <<<"vis/$1") + [ -w "$1" ] && echo "·" && link "rediger" $(/opt/bin/pencode / <<<"rediger/$1") + lupin -s $1 +} + +velkommen() { + echo "

I've seen things you people wouldn't believe. Attack ships on fire off the shoulder of Orion. I watched C-beams glitter in the dark near the Tannhäuser Gate. All those moments will be lost in time, like tears in rain.

Time to die.

" } forbered() { - echo "
" + echo "

skriv en artikkel…

" + echo "" echo "

" echo "" echo "

" echo "" echo "

" echo "" echo "for" @@ -229,26 +267,32 @@ umask 0022 groups=$(groups | tr " " "\n" | sort) available=$(comm -12 - <(ls redaksjoner | sort) <<<"$groups") -action=$(basename $SCRIPT_FILENAME) +#action=${PATH_INFO#$BASE/} +action=${PATH_INFO#/} +if [[ "$action" =~ "/" ]]; then + args=${action#*/} + action=${action%%/*} +fi if [[ "$action" == rediger && $path == stikkord/* ]]; then redirect "$BASE/rediger/artikler/${path#stikkord/*/}" fi mappe="artikler" [ -n "$GET_stikkord" ] && mappe="stikkord/$GET_stikkord" kilde="$mappe/$(sed 's|-|/|g' <<<$GET_dato)" -finder="find -L $kilde -type f" -[ "$action" = gruppe ] && finder="$finder -group $path" +finder="find -L $kilde -type f -not -name '*~'" +[ "$action" = gruppe ] && finder="$finder -group $args" [ "$action" = ditt ] && finder="$finder -user $REMOTE_USER" -[ "$REQUEST_METHOD" = GET ] && $finder | meny +[ "$REQUEST_METHOD" = GET ] && eval $finder | meny case $action in + "") velkommen;; index.html|ditt|gruppe) liste;; skriv) forbered;; - rediger) skjema $path;; - vis) vis $path;; + rediger) skjema $args;; + vis) vis $args;; lagre) lagre;; - oppdater) oppdater $path;; - teatime) irc "$(whoami) <3 teatime"; echo "


";; - spökvåningen) echo "

";; + oppdater) oppdater $args;; + teatime) irc "$(whoami) <3 teatime"; echo "


";; + spökvåningen) echo "

";; todo) echo "

$(cat TODO)
";; esac %> diff --git a/tears.css b/tears.css index 68bf86c..87f6c2c 100644 --- a/tears.css +++ b/tears.css @@ -1,9 +1,9 @@ body { font: 16px/1.4 sans-serif; } html, body { background: #eee; color: #000; } -body { left: 240px; position: relative; max-width: 900px; margin-top: 6em; } +body { margin: 6em 1em 1em 240px; position: relative; max-width: 100%; margin-top: 6em; } form, select, textarea, input { font: inherit; } -textarea { width: 100%; } +textarea { width: 100%; max-width: 42em; } div#meny { position: fixed; left: 0; top: 0; width: 180px; height: 100%; } div#meny { border-right: 1px dotted Tomato; padding: 0 1em; } div#meny { background: #fff; overflow: auto; } @@ -15,12 +15,46 @@ p.x a { text-align: right; } pre { font-weight: bold; } a { text-decoration: none; color: DarkOrange; } a:hover, a:visited { color: Tomato; } -img { border: 1px solid #000; } +img { border: 1px solid #000; max-width: 100%; } pre { position: relative; } -img.orz { width: 50px; height: 50px; display: block; } +img.orz { max-width: 160px; display: inline-block; vertical-align: middle;} label { width: 8em; float: left; margin: 0.25em 0; } +blockquote { font-style: italic; position: relative; } + +img.teatime { max-width: 100%; } + +article { font: 18px/1.2 "Open Sans", sans-serif; } + +article { flex: 0 0 100%; width: 960px; max-width: 100%; } +article p { margin: 0; } +article h2 { margin-top: 0; font-size: 4em; } +article a { color: black; text-decoration: none; } +article img { width: 100%; } +article video { width: 100%; } + +article h2 { margin-bottom: 0; } +article .content { display: flex; align-content: stretch; justify-content: space-between; align-items: flex-start; } +.byline { margin: 0 0 2em 0; font-style: italic; } +.byline a { font-weight: bold; } +article .content .body { margin: 0 2em; } +.body p { margin-bottom: 1em; } + +article .content .body { flex: 1 1 auto; } + +article aside { max-width: 160px; font-size: 12px; flex: 1 0 160px; } +article aside dt { font-weight: bold; margin-top: 0.5em; } +article aside dd { margin-left: 1em; } + +article img.headshot { border-radius: 50%; width: 160px; } +article img.headshot.mini { display: none; } + +.error { border: 1px solid red; } + +.infobox { margin: 0; padding: 0; } +.infobox li { margin: 8px 0; list-style: none; } +.infobox select { margin-right: 8px; } /*! * Pikaday diff --git a/tears.js b/tears.js index 9f459e4..401dbc0 100644 --- a/tears.js +++ b/tears.js @@ -1,19 +1,20 @@ -// moment.js -// // version : 1.7.2 -// // author : Tim Wood -// // license : MIT -// // momentjs.com -(function(a){function E(a,b,c,d){var e=c.lang();return e[a].call?e[a](c,d):e[a][b]}function F(a,b){return function(c){return K(a.call(this,c),b)}}function G(a){return function(b){var c=a.call(this,b);return c+this.lang().ordinal(c)}}function H(a,b,c){this._d=a,this._isUTC=!!b,this._a=a._a||null,this._lang=c||!1}function I(a){var b=this._data={},c=a.years||a.y||0,d=a.months||a.M||0,e=a.weeks||a.w||0,f=a.days||a.d||0,g=a.hours||a.h||0,h=a.minutes||a.m||0,i=a.seconds||a.s||0,j=a.milliseconds||a.ms||0;this._milliseconds=j+i*1e3+h*6e4+g*36e5,this._days=f+e*7,this._months=d+c*12,b.milliseconds=j%1e3,i+=J(j/1e3),b.seconds=i%60,h+=J(i/60),b.minutes=h%60,g+=J(h/60),b.hours=g%24,f+=J(g/24),f+=e*7,b.days=f%30,d+=J(f/30),b.months=d%12,c+=J(d/12),b.years=c,this._lang=!1}function J(a){return a<0?Math.ceil(a):Math.floor(a)}function K(a,b){var c=a+"";while(c.length70?1900:2e3);break;case"YYYY":c[0]=~~Math.abs(b);break;case"a":case"A":d.isPm=(b+"").toLowerCase()==="pm";break;case"H":case"HH":case"h":case"hh":c[3]=~~b;break;case"m":case"mm":c[4]=~~b;break;case"s":case"ss":c[5]=~~b;break;case"S":case"SS":case"SSS":c[6]=~~(("0."+b)*1e3);break;case"Z":case"ZZ":d.isUTC=!0,e=(b+"").match(x),e&&e[1]&&(d.tzh=~~e[1]),e&&e[2]&&(d.tzm=~~e[2]),e&&e[0]==="+"&&(d.tzh=-d.tzh,d.tzm=-d.tzm)}b==null&&(c[8]=!1)}function W(a,b){var c=[0,0,1,0,0,0,0],d={tzh:0,tzm:0},e=b.match(k),f,g;for(f=0;f0,j[4]=c,Z.apply({},j)}function _(a,c){b.fn[a]=function(a){var b=this._isUTC?"UTC":"";return a!=null?(this._d["set"+b+c](a),this):this._d["get"+b+c]()}}function ab(a){b.duration.fn[a]=function(){return this._data[a]}}function bb(a,c){b.duration.fn["as"+a]=function(){return+this/c}}var b,c="1.7.2",d=Math.round,e,f={},g="en",h=typeof module!="undefined"&&module.exports,i="months|monthsShort|weekdays|weekdaysShort|weekdaysMin|longDateFormat|calendar|relativeTime|ordinal|meridiem".split("|"),j=/^\/?Date\((\-?\d+)/i,k=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|YYYY|YY|a|A|hh?|HH?|mm?|ss?|SS?S?|zz?|ZZ?|.)/g,l=/(\[[^\[]*\])|(\\)?(LT|LL?L?L?)/g,m=/([0-9a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+)/gi,n=/\d\d?/,o=/\d{1,3}/,p=/\d{3}/,q=/\d{1,4}/,r=/[0-9a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+/i,s=/Z|[\+\-]\d\d:?\d\d/i,t=/T/i,u=/^\s*\d{4}-\d\d-\d\d(T(\d\d(:\d\d(:\d\d(\.\d\d?\d?)?)?)?)?([\+\-]\d\d:?\d\d)?)?/,v="YYYY-MM-DDTHH:mm:ssZ",w=[["HH:mm:ss.S",/T\d\d:\d\d:\d\d\.\d{1,3}/],["HH:mm:ss",/T\d\d:\d\d:\d\d/],["HH:mm",/T\d\d:\d\d/],["HH",/T\d\d/]],x=/([\+\-]|\d\d)/gi,y="Month|Date|Hours|Minutes|Seconds|Milliseconds".split("|"),z={Milliseconds:1,Seconds:1e3,Minutes:6e4,Hours:36e5,Days:864e5,Months:2592e6,Years:31536e6},A={},B="DDD w M D d".split(" "),C="M D H h m s w".split(" "),D={M:function(){return this.month()+1},MMM:function(a){return E("monthsShort",this.month(),this,a)},MMMM:function(a){return E("months",this.month(),this,a)},D:function(){return this.date()},DDD:function(){var a=new Date(this.year(),this.month(),this.date()),b=new Date(this.year(),0,1);return~~((a-b)/864e5+1.5)},d:function(){return this.day()},dd:function(a){return E("weekdaysMin",this.day(),this,a)},ddd:function(a){return E("weekdaysShort",this.day(),this,a)},dddd:function(a){return E("weekdays",this.day(),this,a)},w:function(){var a=new Date(this.year(),this.month(),this.date()-this.day()+5),b=new Date(a.getFullYear(),0,4);return~~((a-b)/864e5/7+1.5)},YY:function(){return K(this.year()%100,2)},YYYY:function(){return K(this.year(),4)},a:function(){return this.lang().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.lang().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return~~(this.milliseconds()/100)},SS:function(){return K(~~(this.milliseconds()/10),2)},SSS:function(){return K(this.milliseconds(),3)},Z:function(){var a=-this.zone(),b="+";return a<0&&(a=-a,b="-"),b+K(~~(a/60),2)+":"+K(~~a%60,2)},ZZ:function(){var a=-this.zone(),b="+";return a<0&&(a=-a,b="-"),b+K(~~(10*a/6),4)}};while(B.length)e=B.pop(),D[e+"o"]=G(D[e]);while(C.length)e=C.pop(),D[e+e]=F(D[e],2);D.DDDD=F(D.DDD,3),b=function(c,d){if(c===null||c==="")return null;var e,f;return b.isMoment(c)?new H(new Date(+c._d),c._isUTC,c._lang):(d?M(d)?e=X(c,d):e=W(c,d):(f=j.exec(c),e=c===a?new Date:f?new Date(+f[1]):c instanceof Date?c:M(c)?O(c):typeof c=="string"?Y(c):new Date(c)),new H(e))},b.utc=function(a,c){return M(a)?new H(O(a,!0),!0):(typeof a=="string"&&!s.exec(a)&&(a+=" +0000",c&&(c+=" Z")),b(a,c).utc())},b.unix=function(a){return b(a*1e3)},b.duration=function(a,c){var d=b.isDuration(a),e=typeof a=="number",f=d?a._data:e?{}:a,g;return e&&(c?f[c]=a:f.milliseconds=a),g=new I(f),d&&(g._lang=a._lang),g},b.humanizeDuration=function(a,c,d){return b.duration(a,c===!0?null:c).humanize(c===!0?!0:d)},b.version=c,b.defaultFormat=v,b.lang=function(a,c){var d;if(!a)return g;(c||!f[a])&&P(a,c);if(f[a]){for(d=0;d11?c?"pm":"PM":c?"am":"AM"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinal:function(a){var b=a%10;return~~(a%100/10)===1?"th":b===1?"st":b===2?"nd":b===3?"rd":"th"}}),b.fn=H.prototype={clone:function(){return b(this)},valueOf:function(){return+this._d},unix:function(){return Math.floor(+this._d/1e3)},toString:function(){return this._d.toString()},toDate:function(){return this._d},toArray:function(){var a=this;return[a.year(),a.month(),a.date(),a.hours(),a.minutes(),a.seconds(),a.milliseconds(),!!this._isUTC]},isValid:function(){return this._a?this._a[8]!=null?!!this._a[8]:!N(this._a,(this._a[7]?b.utc(this._a):b(this._a)).toArray()):!isNaN(this._d.getTime())},utc:function(){return this._isUTC=!0,this},local:function(){return this._isUTC=!1,this},format:function(a){return T(this,a?a:b.defaultFormat)},add:function(a,c){var d=c?b.duration(+c,a):b.duration(a);return L(this,d,1),this},subtract:function(a,c){var d=c?b.duration(+c,a):b.duration(a);return L(this,d,-1),this},diff:function(a,c,e){var f=this._isUTC?b(a).utc():b(a).local(),g=(this.zone()-f.zone())*6e4,h=this._d-f._d-g,i=this.year()-f.year(),j=this.month()-f.month(),k=this.date()-f.date(),l;return c==="months"?l=i*12+j+k/30:c==="years"?l=i+(j+k/30)/12:l=c==="seconds"?h/1e3:c==="minutes"?h/6e4:c==="hours"?h/36e5:c==="days"?h/864e5:c==="weeks"?h/6048e5:h,e?l:d(l)},from:function(a,c){return b.duration(this.diff(a)).lang(this._lang).humanize(!c)},fromNow:function(a){return this.from(b(),a)},calendar:function(){var a=this.diff(b().sod(),"days",!0),c=this.lang().calendar,d=c.sameElse,e=a<-6?d:a<-1?c.lastWeek:a<0?c.lastDay:a<1?c.sameDay:a<2?c.nextDay:a<7?c.nextWeek:d;return this.format(typeof e=="function"?e.apply(this):e)},isLeapYear:function(){var a=this.year();return a%4===0&&a%100!==0||a%400===0},isDST:function(){return this.zone()=7)t-=7;return n?e.i18n.weekdaysShort[t]:e.i18n.weekdays[t]},w=function(e,t,n,r,i){if(i)return'';var s=[];return r&&s.push("is-disabled"),n&&s.push("is-today"),t&&s.push("is-selected"),'"+""},E=function(e,t){return""+(t?e.reverse():e).join("")+""},S=function(e){return""+e.join("")+""},x=function(e){var t,n=[];for(t=0;t<7;t++)n.push(''+b(e,t,!0)+"");return""+(e.isRTL?n.reverse():n).join("")+""},T=function(e){var t,n,r,i=e._o,s=e._m,o=e._y,u=o===i.minYear,a=o===i.maxYear,f='
',l=!0,c=!0;for(r=[],t=0;t<12;t++)r.push('");f+='
'+i.i18n.months[s]+'
",h(i.yearRange)?(t=i.yearRange[0],n=i.yearRange[1]+1):(t=o-i.yearRange,n=1+o+i.yearRange);for(r=[];t=i.minYear&&r.push('");return f+='
'+o+'
",u&&(s===0||i.minMonth>=s)&&(l=!1),a&&(s===11||i.maxMonth<=s)&&(c=!1),f+='',f+='',f+="
"},N=function(e,t){return''+x(e)+S(t)+"
"};e.Pikaday=function(n){var u=this,a=u.config(n);u._onMouseDown=function(t){if(!u._v)return;t=t||e.event;var n=t.target||t.srcElement;if(!n)return;if(!f(n,"is-disabled")){if(f(n,"pika-button")&&!f(n,"is-empty")){u.setDate(new Date(u._y,u._m,parseInt(n.innerHTML,10))),a.bound&&s(function(){u.hide()},100);return}f(n,"pika-prev")?u.prevMonth():f(n,"pika-next")&&u.nextMonth()}if(!f(n,"pika-select")){if(!t.preventDefault)return t.returnValue=!1;t.preventDefault()}else u._c=!0},u._onChange=function(t){t=t||e.event;var n=t.target||t.srcElement;if(!n)return;f(n,"pika-select-month")?u.gotoMonth(n.value):f(n,"pika-select-year")&&u.gotoYear(n.value)},u._onInputChange=function(t){if(r)u.setDate(e.moment(a.field.value,a.format).toDate());else{var n=new Date(Date.parse(a.field.value));u.setDate(p(n)?n:null)}u._v||u.show()},u._onInputFocus=function(e){u.show()},u._onInputClick=function(e){u.show()},u._onInputBlur=function(e){u._c||(u._b=s(function(){u.hide()},50)),u._c=!1},u._onClick=function(t){t=t||e.event;var n=t.target||t.srcElement,r=n;if(!n)return;!i&&f(n,"pika-select")&&(n.onchange||(n.setAttribute("onchange","return;"),o(n,"change",u._onChange)));do if(f(r,"pika-single"))return;while(r=r.parentNode);u._v&&n!==a.field&&u.hide()},u.el=t.createElement("div"),u.el.className="pika-single"+(a.isRTL?" is-rtl":""),o(u.el,"mousedown",u._onMouseDown,!0),o(u.el,"change",u._onChange),a.field&&(a.bound?t.body.appendChild(u.el):a.field.parentNode.insertBefore(u.el,a.field.nextSibling),o(a.field,"change",u._onInputChange),a.defaultDate||(r&&a.field.value?a.defaultDate=e.moment(a.field.value,a.format).toDate():a.defaultDate=new Date(Date.parse(a.field.value)),a.setDefaultDate=!0));var l=a.defaultDate;p(l)?a.setDefaultDate?u.setDate(l):u.gotoDate(l):u.gotoDate(new Date),a.bound?(this.hide(),u.el.className+=" is-bound",o(a.field,"click",u._onInputClick),o(a.field,"focus",u._onInputFocus),o(a.field,"blur",u._onInputBlur)):this.show()},e.Pikaday.prototype={config:function(e){this._o||(this._o=g({},y,!0));var t=g(this._o,e,!0);t.isRTL=!!t.isRTL,t.field=t.field&&t.field.nodeName?t.field:null,t.bound=!!(t.bound!==n?t.field&&t.bound:t.field);var r=parseInt(t.numberOfMonths,10)||1;t.numberOfMonths=r>4?4:r,p(t.minDate)||(t.minDate=!1),p(t.maxDate)||(t.maxDate=!1),t.minDate&&t.maxDate&&t.maxDate100&&(t.yearRange=100);return t},toString:function(t){return p(this._d)?r?e.moment(this._d).format(t||this._o.format):this._d.toDateString():""},getMoment:function(){return r?e.moment(this._d):null},getDate:function(){return p(this._d)?new Date(this._d.getTime()):null},setDate:function(e){if(!e)return this._d=null,this.draw();typeof e=="string"&&(e=new Date(Date.parse(e)));if(!p(e))return;var t=this._o.minDate,n=this._o.maxDate;p(t)&&en&&(e=n),this._d=new Date(e.getTime()),this._d.setHours(0,0,0,0),this.gotoDate(this._d),this._o.field&&(this._o.field.value=this.toString()),typeof this._o.onSelect=="function"&&this._o.onSelect.call(this,this.getDate())},gotoDate:function(e){if(!p(e))return;this._y=e.getFullYear(),this._m=e.getMonth(),this.draw()},gotoToday:function(){this.gotoDate(new Date)},gotoMonth:function(e){isNaN(e=parseInt(e,10))||(this._m=e<0?0:e>11?11:e,this.draw())},nextMonth:function(){++this._m>11&&(this._m=0,this._y++),this.draw()},prevMonth:function(){--this._m<0&&(this._m=11,this._y--),this.draw()},gotoYear:function(e){isNaN(e)||(this._y=parseInt(e,10),this.draw())},draw:function(e){if(!this._v&&!e)return;var t=this._o,n=t.minYear,r=t.maxYear,i=t.minMonth,o=t.maxMonth;this._y<=n&&(this._y=n,!isNaN(i)&&this._m=r&&(this._y=r,!isNaN(o)&&this._m>o&&(this._m=o)),this.el.innerHTML=T(this)+this.render(this._y,this._m);if(t.bound){var u=t.field,a=u.offsetLeft,f=u.offsetTop+u.offsetHeight;while(u=u.offsetParent)a+=u.offsetLeft,f+=u.offsetTop;this.el.style.cssText="position:absolute;left:"+a+"px;top:"+f+"px;",s(function(){t.field.focus()},1)}},render:function(e,t){var n=this._o,r=new Date,i=v(e,t),s=(new Date(e,t,1)).getDay(),o=[],u=[];r.setHours(0,0,0,0),n.firstDay>0&&(s-=n.firstDay,s<0&&(s+=7));var a=i+s,f=a;while(f>7)f-=7;a+=7-f;for(var l=0,c=0;ln.maxDate,g=p(this._d)?m(h,this._d):!1,y=m(h,r),b=l=i+s;u.push(w(1+(l-s),g,y,d,b)),++c===7&&(o.push(E(u,n.isRTL)),u=[],c=0)}return N(n,o)},isVisible:function(){return this._v},show:function(){this._v||(this._o.bound&&o(t,"click",this._onClick),c(this.el,"is-hidden"),this._v=!0,this.draw(),typeof this._o.onOpen=="function"&&this._o.onOpen.call(this))},hide:function(){var e=this._v;e!==!1&&(this._o.bound&&u(t,"click",this._onClick),this.el.style.cssText="",l(this.el,"is-hidden"),this._v=!1,e!==n&&typeof this._o.onClose=="function"&&this._o.onClose.call(this))},destroy:function(){this.hide(),u(this.el,"mousedown",this._onMouseDown,!0),u(this.el,"change",this._onChange),this._o.field&&(u(this._o.field,"change",this._onInputChange),this._o.bound&&(u(this._o.field,"click",this._onInputClick),u(this._o.field,"focus",this._onInputFocus),u(this._o.field,"blur",this._onInputBlur))),this.el.parentNode&&this.el.parentNode.removeChild(this.el)}}})(window,window.document); - /* tears.js */ var tears = {} +function additem(e) { + var item = e.target.parentNode.cloneNode(true); + e.target.parentNode.className = ""; + e.target.textContent = "x"; + e.target.onclick = function(e) { + e.target.parentNode.remove(); + return false; + } + item.getElementsByTagName('input')[0].value = ""; + item.getElementsByTagName('a')[0].onclick = additem; + e.target.parentNode.parentNode.appendChild(item); + return false; +} + function pick(src) { if(tears.input) { var name = tears.input.getAttribute("data-name"); @@ -24,9 +25,8 @@ function pick(src) { } } - function insert(text) { - var t = document.getElementsByName('tekst')[0]; + var t = document.getElementsByName('text')[0]; if(!t) return; if(t.selectionStart || t.selectionStart == '0') { var pos = t.selectionStart; @@ -39,7 +39,7 @@ function insert(text) { } function wrap(prefix, postfix) { - var t = document.getElementsByName('tekst')[0]; + var t = document.getElementsByName('text')[0]; if(!t) return; if(t.selectionStart || t.selectionStart == '0') { var pos = t.selectionStart; @@ -54,7 +54,7 @@ function wrap(prefix, postfix) { } function prepend(text) { - var t = document.getElementsByName('tekst')[0]; + var t = document.getElementsByName('text')[0]; if(!t) return; if(t.selectionStart || t.selectionStart == '0') { var pos = t.selectionStart; @@ -121,11 +121,29 @@ function button(node, html, fun) { a.innerHTML = html; a.href = "#"; a.onclick = fun; + node.parentNode.insertBefore(document.createTextNode(" "), node.nextSibling); node.parentNode.insertBefore(a, node.nextSibling); } -function orz(src) { - insert("\n{" + src.replace(".t.jpg", "") + "}\n"); +function orz(src, receiver) { + // insert("\n{" + src.replace(".t.jpg", "") + "}\n"); + console.log(receiver); + console.log(src); + if(!receiver) { + console.log(src); + insert("\n{" + src + "}\n"); + return; + } + var e = document.getElementsByName(receiver); + if(e && e[0]) { + e[0].value = src; + } + var imgs = document.getElementsByClassName('orz'); + for(var i = 0; i < imgs.length; i++) { + if(imgs[i].getAttribute('data-name') == receiver) { + imgs[i].src = src; + } + } } document.addEventListener("DOMContentLoaded", function(e) { @@ -133,16 +151,6 @@ document.addEventListener("DOMContentLoaded", function(e) { if(field) { new Pikaday({ field: field, format: 'YYYY-MM-DD' }); } -/* - var els = document.getElementsByClassName('orz'); - for(var i=0; i < els.length; i++) { - els[i].onclick = function(e) { - tears.input = e.target; - window.open(e.target.getAttribute('data-uri')); - return false; - } - } -*/ var title = document.getElementsByTagName('h1')[0]; var headers = document.getElementsByTagName("h2"); @@ -158,20 +166,60 @@ document.addEventListener("DOMContentLoaded", function(e) { title.parentNode.insertBefore(menu, title.nextSibling); } -// var orz = document.getElementById('orz'); - var orz = document.getElementsByClassName('orz')[0]; - if(orz) { - orz.onclick = function(e) { + var orz = document.getElementsByClassName('orz'); + for(var i = 0; i < orz.length; i++) { + orz[i].onclick = function(e) { + window.receiver = e.target.getAttribute('data-name') window.open("/orz"); return false; } - button(orz, "> sitat", marxup_quote); - button(orz, "* liste", marxup_list); - button(orz, "[lenke]", marxup_link); - button(orz, "_kursiv_", marxup_italics); - button(orz, "*fet*", marxup_bold); - button(orz, "liten", marxup_small); - button(orz, "= overskrift", marxup_header); + } + + var lol = document.getElementById('lol'); + if(lol) { + console.log(orz); + button(orz[orz.length - 1], "> sitat", marxup_quote); + button(orz[orz.length - 1], "* liste", marxup_list); + button(orz[orz.length - 1], "[lenke]", marxup_link); + button(orz[orz.length - 1], "_kursiv_", marxup_italics); + button(orz[orz.length - 1], "*fet*", marxup_bold); + button(orz[orz.length - 1], "liten", marxup_small); + button(orz[orz.length - 1], "= overskrift", marxup_header); + } + + var form = document.getElementById('update-article'); + if(form) { + form.onsubmit = function(e) { + var stikkord = document.getElementsByName('stikkord'); + if(stikkord && stikkord[0] && !stikkord[0].value) { + stikkord[0].className = "error"; + return false; + } + } + } + + var infoboxes = document.getElementsByClassName("infobox"); + for(var i = 0; i < infoboxes.length; i++) { + Sortable.create(infoboxes[i]); + var items = infoboxes[i].getElementsByTagName('li'); + for(var j = 0; j < items.length; j++) { + if(items[j].className == "last") { + var add = document.createElement("a"); + add.textContent = "+"; + add.href = "#"; + add.onclick = additem; + items[j].appendChild(add); + } else { + var del = document.createElement("a"); + del.textContent = "x"; + del.href = "#"; + del.onclick = function(e) { + e.target.parentNode.remove(); + return false; + } + items[j].appendChild(del); + } + } } }); -- cgit v1.0