JavaScript examples

Download the form with examples of JavaScript used below.

1. Calculate the sum from the list

Script used here: onAnswered on list question and onLoad on form (to number fn)

/*
- Add a list question with at least one freetext field. give it the key "cl_value"
- Add a freetext field outside of the list, give it the key "cl_total"
- Add code below to onLoad on the form:

customData.fn = {};
customData.fn.toNumber = function(val) {
var result = 0;
if (val) {
result = val.replace(/,/g, '.');
result = result.replace(/[^\d.-]/g, '');
result = parseFloat(result);
}
return result;
};


- Add code below to onAnswered on the list question

*/

var rows = node.getAnswer();
var totalAmount = 0;
for (var i = 0, toI = rows.length; i < toI; i++) {
var row = rows[i];
for (var qi = 0, toQI = row.length; qi < toQI; qi++) {
var question = row[qi];
if (question.getKey() == 'cl_value') {
totalAmount += customData.fn.toNumber(question.getAnswer());
}
}
}
survey.getQuestionsByKey('cl_total')[0].setAnswer(totalAmount)

2. Calculate the sum from the list

Script used here: onAnswered on Amount, Price and Sum free text questions

/*
- Add 4 free text fields and give them the keys, "cs_workedtimeAmount", "cs_workedtimePrice", "cs_workedtimeSum" and "cs_total"
- Add code below to onAnswered on the "cs_workedtimeSum" question


var getNumbers = function(str) {
    if (!str) return 0;
    return parseFloat((str + '')
        .replace(/,/g, '.')
        .replace(/[^\d.-]/g, '')) || 0;
}


var sumFields = [
    'cs_workedtimeSum',
    'cs_traveltimeSum'
];

var sum = 0;


for (var i = 0; i < sumFields.length; i++) {
    var q = survey.getQuestionsByKey(sumFields[i])[0];
    if (q.getModel().ParentSection().Visible()) {
        sum += getNumbers(q.getAnswer());
    }
}

survey.getQuestionsByKey('cs_total')[0].setAnswer(sum);


- Add code below to onAnswered on the "cs_workedtimeAmount" question
- Add code below to on onAnswered on the "cs_workedtimePrice" question but replace "getQuestionsByKey(cs_workedtimePrice)[0]" with "getQuestionsByKey(cs_workedtimeAmount)[0]"
*/


var cs_workedtimeAmount = 'cs_workedtimeAmount';
var cs_workedtimePrice = 'cs_workedtimePrice';
var cs_workedtimeSum = 'cs_workedtimeSum';

var getNumbers = function(str) {
    if (!str) return '';
    return parseFloat(str
        .replace(/,/g, '.')
        .replace(/[^\d.-]/g, '')) || 0;
}

var value = '';
var a = getNumbers(node.getAnswer());
if (a) {
    var multiply = getNumbers(survey.getQuestionsByKey(cs_workedtimePrice)[0].getAnswer());
    value = multiply * a;
}

survey.getQuestionsByKey(cs_workedtimeSum)[0].setAnswer(value);

3. Custom placeholder text

Script used here: onLoad on page CSS: Custom Placeholder CSS

/*
-Add a freetext field with the CSS class "custom_placeholder"
-Add follwing CSS to form CSS:

.custom_placeholder input::placeholder {color: #888; }

-Add code below to onLoad on the page where the question is located

*/

$('.custom_placeholder input').attr("placeholder", "Type here to search");

4. Copy text to target

Script used here: onLoad on form and onAnswered on a question

/*
- Add a key to the original field (org number in this example)
- Add the same key to the target field with "_target" as a prefix, e.g. orgnumber_target
- Add this function to onAnswered on the original field:
Sweet.Survey.CopyAnswerToTargets(node, survey);
*/

Sweet.Survey.CopyAnswerToTargets = function (question, survey) {
    var sourceKey = question.getKey();
    var sourceAnswer = question.getAnswer();
    if (typeof sourceAnswer == 'object') {
    sourceAnswer = sourceAnswer.getText();
    }
    if (sourceKey == null || sourceKey == '')
    return;
    var targetKey = sourceKey + '_target';
    var targetQuestions = survey.getQuestionsByKey(targetKey, false);
    $.each(targetQuestions, function (i, q) {
    q.setAnswer(sourceAnswer);
    });
    }

5. Merge two text fields into one

Script used here: onAnswered on a question

/*
- Add three free text questions

- Add class “input-field" to the fields that should be merged

- Add key "output-field" to the field that should show the merged texts

- Add the script below to onAnswered on both the input fields

*/

$('.input-field input').on('input',function() {

    var allvals = $('.input-field input').map(function() {

    return this.value;

    }).get().join(' ');

    survey.getQuestionsByKey('output-field')[0].setAnswer(allvals);

    });

6. Generate QR code

Script used here: onLoad on form

/*
The code below adds a QR code to the form

- Add an information question with a div that has the ID "qrcode" Example:
<div id="qrcode"></div>

- Add the code below

*/

Sweet.Survey.qr = function () {

    var QRCode;!function(){function a(a){this.mode=c.MODE_8BIT_BYTE,this.data=a,this.parsedData=[];for(var b=[],d=0,e=this.data.length;e>d;d++){var f=this.data.charCodeAt(d);f>65536?(b[0]=240|(1835008&f)>>>18,b[1]=128|(258048&f)>>>12,b[2]=128|(4032&f)>>>6,b[3]=128|63&f):f>2048?(b[0]=224|(61440&f)>>>12,b[1]=128|(4032&f)>>>6,b[2]=128|63&f):f>128?(b[0]=192|(1984&f)>>>6,b[1]=128|63&f):b[0]=f,this.parsedData=this.parsedData.concat(b)}this.parsedData.length!=this.data.length&&(this.parsedData.unshift(191),this.parsedData.unshift(187),this.parsedData.unshift(239))}function b(a,b){this.typeNumber=a,this.errorCorrectLevel=b,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}function i(a,b){if(void 0==a.length)throw new Error(a.length+"/"+b);for(var c=0;c<a.length&&0==a[c];)c++;this.num=new Array(a.length-c+b);for(var d=0;d<a.length-c;d++)this.num[d]=a[d+c]}function j(a,b){this.totalCount=a,this.dataCount=b}function k(){this.buffer=[],this.length=0}function m(){return"undefined"!=typeof CanvasRenderingContext2D}function n(){var a=!1,b=navigator.userAgent;return/android/i.test(b)&&(a=!0,aMat=b.toString().match(/android ([0-9]\.[0-9])/i),aMat&&aMat[1]&&(a=parseFloat(aMat[1]))),a}function r(a,b){for(var c=1,e=s(a),f=0,g=l.length;g>=f;f++){var h=0;switch(b){case d.L:h=l[f][0];break;case d.M:h=l[f][1];break;case d.Q:h=l[f][2];break;case d.H:h=l[f][3]}if(h>=e)break;c++}if(c>l.length)throw new Error("Too long data");return c}function s(a){var b=encodeURI(a).toString().replace(/\%[0-9a-fA-F]{2}/g,"a");return b.length+(b.length!=a?3:0)}a.prototype={getLength:function(){return this.parsedData.length},write:function(a){for(var b=0,c=this.parsedData.length;c>b;b++)a.put(this.parsedData[b],8)}},b.prototype={addData:function(b){var c=new a(b);this.dataList.push(c),this.dataCache=null},isDark:function(a,b){if(0>a||this.moduleCount<=a||0>b||this.moduleCount<=b)throw new Error(a+","+b);return this.modules[a][b]},getModuleCount:function(){return this.moduleCount},make:function(){this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17,this.modules=new Array(this.moduleCount);for(var d=0;d<this.moduleCount;d++){this.modules[d]=new Array(this.moduleCount);for(var e=0;e<this.moduleCount;e++)this.modules[d][e]=null}this.setupPositionProbePattern(0,0),this.setupPositionProbePattern(this.moduleCount-7,0),this.setupPositionProbePattern(0,this.moduleCount-7),this.setupPositionAdjustPattern(),this.setupTimingPattern(),this.setupTypeInfo(a,c),this.typeNumber>=7&&this.setupTypeNumber(a),null==this.dataCache&&(this.dataCache=b.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,b){for(var c=-1;7>=c;c++)if(!(-1>=a+c||this.moduleCount<=a+c))for(var d=-1;7>=d;d++)-1>=b+d||this.moduleCount<=b+d||(this.modules[a+c][b+d]=c>=0&&6>=c&&(0==d||6==d)||d>=0&&6>=d&&(0==c||6==c)||c>=2&&4>=c&&d>=2&&4>=d?!0:!1)},getBestMaskPattern:function(){for(var a=0,b=0,c=0;8>c;c++){this.makeImpl(!0,c);var d=f.getLostPoint(this);(0==c||a>d)&&(a=d,b=c)}return b},createMovieClip:function(a,b,c){var d=a.createEmptyMovieClip(b,c),e=1;this.make();for(var f=0;f<this.modules.length;f++)for(var g=f*e,h=0;h<this.modules[f].length;h++){var i=h*e,j=this.modules[f][h];j&&(d.beginFill(0,100),d.moveTo(i,g),d.lineTo(i+e,g),d.lineTo(i+e,g+e),d.lineTo(i,g+e),d.endFill())}return d},setupTimingPattern:function(){for(var a=8;a<this.moduleCount-8;a++)null==this.modules[a][6]&&(this.modules[a][6]=0==a%2);for(var b=8;b<this.moduleCount-8;b++)null==this.modules[6][b]&&(this.modules[6][b]=0==b%2)},setupPositionAdjustPattern:function(){for(var a=f.getPatternPosition(this.typeNumber),b=0;b<a.length;b++)for(var c=0;c<a.length;c++){var d=a[b],e=a[c];if(null==this.modules[d][e])for(var g=-2;2>=g;g++)for(var h=-2;2>=h;h++)this.modules[d+g][e+h]=-2==g||2==g||-2==h||2==h||0==g&&0==h?!0:!1}},setupTypeNumber:function(a){for(var b=f.getBCHTypeNumber(this.typeNumber),c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[Math.floor(c/3)][c%3+this.moduleCount-8-3]=d}for(var c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[c%3+this.moduleCount-8-3][Math.floor(c/3)]=d}},setupTypeInfo:function(a,b){for(var c=this.errorCorrectLevel<<3|b,d=f.getBCHTypeInfo(c),e=0;15>e;e++){var g=!a&&1==(1&d>>e);6>e?this.modules[e][8]=g:8>e?this.modules[e+1][8]=g:this.modules[this.moduleCount-15+e][8]=g}for(var e=0;15>e;e++){var g=!a&&1==(1&d>>e);8>e?this.modules[8][this.moduleCount-e-1]=g:9>e?this.modules[8][15-e-1+1]=g:this.modules[8][15-e-1]=g}this.modules[this.moduleCount-8][8]=!a},mapData:function(a,b){for(var c=-1,d=this.moduleCount-1,e=7,g=0,h=this.moduleCount-1;h>0;h-=2)for(6==h&&h--;;){for(var i=0;2>i;i++)if(null==this.modules[d][h-i]){var j=!1;g<a.length&&(j=1==(1&a[g]>>>e));var k=f.getMask(b,d,h-i);k&&(j=!j),this.modules[d][h-i]=j,e--,-1==e&&(g++,e=7)}if(d+=c,0>d||this.moduleCount<=d){d-=c,c=-c;break}}}},b.PAD0=236,b.PAD1=17,b.createData=function(a,c,d){for(var e=j.getRSBlocks(a,c),g=new k,h=0;h<d.length;h++){var i=d[h];g.put(i.mode,4),g.put(i.getLength(),f.getLengthInBits(i.mode,a)),i.write(g)}for(var l=0,h=0;h<e.length;h++)l+=e[h].dataCount;if(g.getLengthInBits()>8*l)throw new Error("code length overflow. ("+g.getLengthInBits()+">"+8*l+")");for(g.getLengthInBits()+4<=8*l&&g.put(0,4);0!=g.getLengthInBits()%8;)g.putBit(!1);for(;;){if(g.getLengthInBits()>=8*l)break;if(g.put(b.PAD0,8),g.getLengthInBits()>=8*l)break;g.put(b.PAD1,8)}return b.createBytes(g,e)},b.createBytes=function(a,b){for(var c=0,d=0,e=0,g=new Array(b.length),h=new Array(b.length),j=0;j<b.length;j++){var k=b[j].dataCount,l=b[j].totalCount-k;d=Math.max(d,k),e=Math.max(e,l),g[j]=new Array(k);for(var m=0;m<g[j].length;m++)g[j][m]=255&a.buffer[m+c];c+=k;var n=f.getErrorCorrectPolynomial(l),o=new i(g[j],n.getLength()-1),p=o.mod(n);h[j]=new Array(n.getLength()-1);for(var m=0;m<h[j].length;m++){var q=m+p.getLength()-h[j].length;h[j][m]=q>=0?p.get(q):0}}for(var r=0,m=0;m<b.length;m++)r+=b[m].totalCount;for(var s=new Array(r),t=0,m=0;d>m;m++)for(var j=0;j<b.length;j++)m<g[j].length&&(s[t++]=g[j][m]);for(var m=0;e>m;m++)for(var j=0;j<b.length;j++)m<h[j].length&&(s[t++]=h[j][m]);return s};for(var c={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8},d={L:1,M:0,Q:3,H:2},e={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},f={PATTERN_POSITION_TABLE:[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:1335,G18:7973,G15_MASK:21522,getBCHTypeInfo:function(a){for(var b=a<<10;f.getBCHDigit(b)-f.getBCHDigit(f.G15)>=0;)b^=f.G15<<f.getBCHDigit(b)-f.getBCHDigit(f.G15);return(a<<10|b)^f.G15_MASK},getBCHTypeNumber:function(a){for(var b=a<<12;f.getBCHDigit(b)-f.getBCHDigit(f.G18)>=0;)b^=f.G18<<f.getBCHDigit(b)-f.getBCHDigit(f.G18);return a<<12|b},getBCHDigit:function(a){for(var b=0;0!=a;)b++,a>>>=1;return b},getPatternPosition:function(a){return f.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,b,c){switch(a){case e.PATTERN000:return 0==(b+c)%2;case e.PATTERN001:return 0==b%2;case e.PATTERN010:return 0==c%3;case e.PATTERN011:return 0==(b+c)%3;case e.PATTERN100:return 0==(Math.floor(b/2)+Math.floor(c/3))%2;case e.PATTERN101:return 0==b*c%2+b*c%3;case e.PATTERN110:return 0==(b*c%2+b*c%3)%2;case e.PATTERN111:return 0==(b*c%3+(b+c)%2)%2;default:throw new Error("bad maskPattern:"+a)}},getErrorCorrectPolynomial:function(a){for(var b=new i([1],0),c=0;a>c;c++)b=b.multiply(new i([1,g.gexp(c)],0));return b},getLengthInBits:function(a,b){if(b>=1&&10>b)switch(a){case c.MODE_NUMBER:return 10;case c.MODE_ALPHA_NUM:return 9;case c.MODE_8BIT_BYTE:return 8;case c.MODE_KANJI:return 8;default:throw new Error("mode:"+a)}else if(27>b)switch(a){case c.MODE_NUMBER:return 12;case c.MODE_ALPHA_NUM:return 11;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 10;default:throw new Error("mode:"+a)}else{if(!(41>b))throw new Error("type:"+b);switch(a){case c.MODE_NUMBER:return 14;case c.MODE_ALPHA_NUM:return 13;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 12;default:throw new Error("mode:"+a)}}},getLostPoint:function(a){for(var b=a.getModuleCount(),c=0,d=0;b>d;d++)for(var e=0;b>e;e++){for(var f=0,g=a.isDark(d,e),h=-1;1>=h;h++)if(!(0>d+h||d+h>=b))for(var i=-1;1>=i;i++)0>e+i||e+i>=b||(0!=h||0!=i)&&g==a.isDark(d+h,e+i)&&f++;f>5&&(c+=3+f-5)}for(var d=0;b-1>d;d++)for(var e=0;b-1>e;e++){var j=0;a.isDark(d,e)&&j++,a.isDark(d+1,e)&&j++,a.isDark(d,e+1)&&j++,a.isDark(d+1,e+1)&&j++,(0==j||4==j)&&(c+=3)}for(var d=0;b>d;d++)for(var e=0;b-6>e;e++)a.isDark(d,e)&&!a.isDark(d,e+1)&&a.isDark(d,e+2)&&a.isDark(d,e+3)&&a.isDark(d,e+4)&&!a.isDark(d,e+5)&&a.isDark(d,e+6)&&(c+=40);for(var e=0;b>e;e++)for(var d=0;b-6>d;d++)a.isDark(d,e)&&!a.isDark(d+1,e)&&a.isDark(d+2,e)&&a.isDark(d+3,e)&&a.isDark(d+4,e)&&!a.isDark(d+5,e)&&a.isDark(d+6,e)&&(c+=40);for(var k=0,e=0;b>e;e++)for(var d=0;b>d;d++)a.isDark(d,e)&&k++;var l=Math.abs(100*k/b/b-50)/5;return c+=10*l}},g={glog:function(a){if(1>a)throw new Error("glog("+a+")");return g.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;a>=256;)a-=255;return g.EXP_TABLE[a]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},h=0;8>h;h++)g.EXP_TABLE[h]=1<<h;for(var h=8;256>h;h++)g.EXP_TABLE[h]=g.EXP_TABLE[h-4]^g.EXP_TABLE[h-5]^g.EXP_TABLE[h-6]^g.EXP_TABLE[h-8];for(var h=0;255>h;h++)g.LOG_TABLE[g.EXP_TABLE[h]]=h;i.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var b=new Array(this.getLength()+a.getLength()-1),c=0;c<this.getLength();c++)for(var d=0;d<a.getLength();d++)b[c+d]^=g.gexp(g.glog(this.get(c))+g.glog(a.get(d)));return new i(b,0)},mod:function(a){if(this.getLength()-a.getLength()<0)return this;for(var b=g.glog(this.get(0))-g.glog(a.get(0)),c=new Array(this.getLength()),d=0;d<this.getLength();d++)c[d]=this.get(d);for(var d=0;d<a.getLength();d++)c[d]^=g.gexp(g.glog(a.get(d))+b);return new i(c,0).mod(a)}},j.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],j.getRSBlocks=function(a,b){var c=j.getRsBlockTable(a,b);if(void 0==c)throw new Error("bad rs block @ typeNumber:"+a+"/errorCorrectLevel:"+b);for(var d=c.length/3,e=[],f=0;d>f;f++)for(var g=c[3*f+0],h=c[3*f+1],i=c[3*f+2],k=0;g>k;k++)e.push(new j(h,i));return e},j.getRsBlockTable=function(a,b){switch(b){case d.L:return j.RS_BLOCK_TABLE[4*(a-1)+0];case d.M:return j.RS_BLOCK_TABLE[4*(a-1)+1];case d.Q:return j.RS_BLOCK_TABLE[4*(a-1)+2];case d.H:return j.RS_BLOCK_TABLE[4*(a-1)+3];default:return void 0}},k.prototype={get:function(a){var b=Math.floor(a/8);return 1==(1&this.buffer[b]>>>7-a%8)},put:function(a,b){for(var c=0;b>c;c++)this.putBit(1==(1&a>>>b-c-1))},getLengthInBits:function(){return this.length},putBit:function(a){var b=Math.floor(this.length/8);this.buffer.length<=b&&this.buffer.push(0),a&&(this.buffer[b]|=128>>>this.length%8),this.length++}};var l=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]],o=function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){function g(a,b){var c=document.createElementNS("http://www.w3.org/2000/svg",a);for(var d in b)b.hasOwnProperty(d)&&c.setAttribute(d,b[d]);return c}var b=this._htOption,c=this._el,d=a.getModuleCount();Math.floor(b.width/d),Math.floor(b.height/d),this.clear();var h=g("svg",{viewBox:"0 0 "+String(d)+" "+String(d),width:"100%",height:"100%",fill:b.colorLight});h.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),c.appendChild(h),h.appendChild(g("rect",{fill:b.colorDark,width:"1",height:"1",id:"template"}));for(var i=0;d>i;i++)for(var j=0;d>j;j++)if(a.isDark(i,j)){var k=g("use",{x:String(i),y:String(j)});k.setAttributeNS("http://www.w3.org/1999/xlink","href","#template"),h.appendChild(k)}},a.prototype.clear=function(){for(;this._el.hasChildNodes();)this._el.removeChild(this._el.lastChild)},a}(),p="svg"===document.documentElement.tagName.toLowerCase(),q=p?o:m()?function(){function a(){this._elImage.src=this._elCanvas.toDataURL("image/png"),this._elImage.style.display="block",this._elCanvas.style.display="none"}function d(a,b){var c=this;if(c._fFail=b,c._fSuccess=a,null===c._bSupportDataURI){var d=document.createElement("img"),e=function(){c._bSupportDataURI=!1,c._fFail&&_fFail.call(c)},f=function(){c._bSupportDataURI=!0,c._fSuccess&&c._fSuccess.call(c)};return d.onabort=e,d.onerror=e,d.onload=f,d.src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==",void 0}c._bSupportDataURI===!0&&c._fSuccess?c._fSuccess.call(c):c._bSupportDataURI===!1&&c._fFail&&c._fFail.call(c)}if(this._android&&this._android<=2.1){var b=1/window.devicePixelRatio,c=CanvasRenderingContext2D.prototype.drawImage;CanvasRenderingContext2D.prototype.drawImage=function(a,d,e,f,g,h,i,j){if("nodeName"in a&&/img/i.test(a.nodeName))for(var l=arguments.length-1;l>=1;l--)arguments[l]=arguments[l]*b;else"undefined"==typeof j&&(arguments[1]*=b,arguments[2]*=b,arguments[3]*=b,arguments[4]*=b);c.apply(this,arguments)}}var e=function(a,b){this._bIsPainted=!1,this._android=n(),this._htOption=b,this._elCanvas=document.createElement("canvas"),this._elCanvas.width=b.width,this._elCanvas.height=b.height,a.appendChild(this._elCanvas),this._el=a,this._oContext=this._elCanvas.getContext("2d"),this._bIsPainted=!1,this._elImage=document.createElement("img"),this._elImage.style.display="none",this._el.appendChild(this._elImage),this._bSupportDataURI=null};return e.prototype.draw=function(a){var b=this._elImage,c=this._oContext,d=this._htOption,e=a.getModuleCount(),f=d.width/e,g=d.height/e,h=Math.round(f),i=Math.round(g);b.style.display="none",this.clear();for(var j=0;e>j;j++)for(var k=0;e>k;k++){var l=a.isDark(j,k),m=k*f,n=j*g;c.strokeStyle=l?d.colorDark:d.colorLight,c.lineWidth=1,c.fillStyle=l?d.colorDark:d.colorLight,c.fillRect(m,n,f,g),c.strokeRect(Math.floor(m)+.5,Math.floor(n)+.5,h,i),c.strokeRect(Math.ceil(m)-.5,Math.ceil(n)-.5,h,i)}this._bIsPainted=!0},e.prototype.makeImage=function(){this._bIsPainted&&d.call(this,a)},e.prototype.isPainted=function(){return this._bIsPainted},e.prototype.clear=function(){this._oContext.clearRect(0,0,this._elCanvas.width,this._elCanvas.height),this._bIsPainted=!1},e.prototype.round=function(a){return a?Math.floor(1e3*a)/1e3:a},e}():function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){for(var b=this._htOption,c=this._el,d=a.getModuleCount(),e=Math.floor(b.width/d),f=Math.floor(b.height/d),g=['<table style="border:0;border-collapse:collapse;">'],h=0;d>h;h++){g.push("<tr>");for(var i=0;d>i;i++)g.push('<td style="border:0;border-collapse:collapse;padding:0;margin:0;width:'+e+"px;height:"+f+"px;background-color:"+(a.isDark(h,i)?b.colorDark:b.colorLight)+';"></td>');g.push("</tr>")}g.push("</table>"),c.innerHTML=g.join("");var j=c.childNodes[0],k=(b.width-j.offsetWidth)/2,l=(b.height-j.offsetHeight)/2;k>0&&l>0&&(j.style.margin=l+"px "+k+"px")},a.prototype.clear=function(){this._el.innerHTML=""},a}();QRCode=function(a,b){if(this._htOption={width:256,height:256,typeNumber:4,colorDark:"#000000",colorLight:"#ffffff",correctLevel:d.H},"string"==typeof b&&(b={text:b}),b)for(var c in b)this._htOption[c]=b[c];"string"==typeof a&&(a=document.getElementById(a)),this._android=n(),this._el=a,this._oQRCode=null,this._oDrawing=new q(this._el,this._htOption),this._htOption.text&&this.makeCode(this._htOption.text)},QRCode.prototype.makeCode=function(a){this._oQRCode=new b(r(a,this._htOption.correctLevel),this._htOption.correctLevel),this._oQRCode.addData(a),this._oQRCode.make(),this._el.title=a,this._oDrawing.draw(this._oQRCode),this.makeImage()},QRCode.prototype.makeImage=function(){"function"==typeof this._oDrawing.makeImage&&(!this._android||this._android>=3)&&this._oDrawing.makeImage()},QRCode.prototype.clear=function(){this._oDrawing.clear()},QRCode.CorrectLevel=d}();


    var qrcode = new QRCode("qrcode");
    var currenthtml = window.location.href;


    qrcode.makeCode(currenthtml);
    }

    Sweet.Survey.qr();

7. Set default answer on freetext

Script used here: onLoad on page

/*--- VER 1 - Set answer if question is empty ---*/


/*Get the question by key*/

var a = survey.getQuestionsByKey('da_defaultAnswer')[0];


/*Check if the question is answeted or not by key*/

var b = a.isAnswered();


/*Set the default answer below*/

var defaultAnswer = "sweet";


/*If the question is empty, set the default answer */

if (b == false) {
a.setAnswer(defaultAnswer);
}



/*--- VER 2 - Set answer always --- */


/*Get the question by key*/
var a2 = survey.getQuestionsByKey('da_defaultAnswer2')[0];


/*Set the default answer below*/
var defaultAnswerA2 = "Systems";


/*Set the default answer */

a2.setAnswer(defaultAnswerA2);

8. Download the calendar file

Script used here: onAnswered on a question

/*

- Add a calendar field with CSS class “start”



- Add a single answer question with the key “timeOptions” and call it Time Slots



- Add three answers and give them the keys: “firstOption”, “secondOption” and “thirdOption”



- Add multiple answers questions with a template button and one answer called “Download ICS file” and paste the script below into onAnswered on this question

*/

function download(filename, fileBody) {

    var element = document.createElement('a');

    element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(fileBody));

    element.setAttribute('download', filename);



    element.style.display = 'none';

    document.body.appendChild(element);



    element.click();



    document.body.removeChild(element);

}

/**

* Returns a date/time in ICS format

* @params {Object} dateTime - A date object you want to get the ICS format for.

* @returns {string} String with the date in ICS format

*/

function convertToICSDate(dateTime) {

    const year = dateTime.getFullYear().toString();

    const month = (dateTime.getMonth() + 1) < 10 ? "0" + (dateTime.getMonth() + 1).toString() : (dateTime.getMonth() + 1).toString();

    const day = dateTime.getDate() < 10 ? "0" + dateTime.getDate().toString() : dateTime.getDate().toString();

    const hours = dateTime.getHours() < 10 ? "0" + dateTime.getHours().toString() : dateTime.getHours().toString();

    const minutes = dateTime.getMinutes() < 10 ? "0" +dateTime.getMinutes().toString() : dateTime.getMinutes().toString();



    return year + month + day + "T" + hours + minutes + "00";

}

/**

* Creates and downloads an ICS file

* @params {string} timeZone - In the format America/New_York

* @params {object} startTime - Vaild JS Date object in the event timezone

* @params {object} endTime - Vaild JS Date object in the event timezone

* @params {string} title

* @params {string} description

* @params {string} venueName

* @params {string} address

* @params {string} city

* @params {string} state

*/

function createDownloadICSFile(timezone, startTime, endTime, title, description) {

const icsBody = 'BEGIN:VCALENDAR\n' +

'VERSION:2.0\n' +

'PRODID:Calendar\n' +

'CALSCALE:GREGORIAN\n' +

'METHOD:PUBLISH\n' +

'BEGIN:VTIMEZONE\n' +

'TZID:' + timezone + '\n' +

'END:VTIMEZONE\n' +

'BEGIN:VEVENT\n' +

'SUMMARY:' + title + '\n' +

'UID:@Default\n' +

'SEQUENCE:0\n' +

'STATUS:CONFIRMED\n' +

'TRANSP:TRANSPARENT\n' +

'DTSTART;TZID=' + timezone + ':' + convertToICSDate(startTime) + '\n' +

'DTEND;TZID=' + timezone + ':' + convertToICSDate(endTime)+ '\n' +

'DTSTAMP:'+ convertToICSDate(new Date()) + '\n' +



'DESCRIPTION:' + description + '\n' +

'END:VEVENT\n' +

'END:VCALENDAR\n';



download(title + '.ics', icsBody);

}



    var startDateTime = " 08:00"; //Here you set default start time

    var endDateTime = " 12:00"; //Here you set defualt end time



/*Below, you set the different time options, you can change the start and end time and add more options.

If you add more options, remember to add answers to the Time Slot question and give them keys (fourthOption... and so on)

*/



    var pre = survey.getQuestionsByKey("timeOptions")[0].getAnswer().getKey();



    if (pre == "firstOption") {

            var startDateTime = " 08:00";

            var endDateTime = " 12:00";

        }

    if (pre == "secondOption") {

            var startDateTime = " 12:00";

            var endDateTime = " 17:00";

        }

    if (pre == "thirdOption") {

            var startDateTime = " 17:00";

            var endDateTime = " 20:00";



    }



    var startDate = document.querySelector(".start input").value;

    var combinedDateStart = startDate + startDateTime;



    var endDate = document.querySelector(".start input").value;

    var combinedDateEnd = endDate + endDateTime;

createDownloadICSFile(

    'Sweden/Stockholm', //Here you set the time zone

    new Date(combinedDateStart),

    new Date(combinedDateEnd),

    'Intresseanmälan', //Here, you set the subject of the calendar meeting

    'Kontaktbar denna tid' //Here, you set the description of the calendar meeting



);

9. Copy answer from input to text mass

Script used here: onAnswered on a question, onLoad on page, onLoad on form

/*
- Add a free text question with the key "houseNr"
- Add an information question with a <span> tag that has the Id "houseNr".

Example:
The house nr is <span id="houseNr"></span> and belongs to...

The value from the free text will be added inside the <span> tags

- Go to the page where the free text question is placed and add the code below to onLoad on that page:

//The code below makes sure that the input value is copied to the text mass every time the user leaves and comes back to this page
if(survey.getQuestionsByKey("houseNr")[0].isAnswered()) {
    $('#houseNr').html(survey.getQuestionsByKey("houseNr")[0].getAnswer());
}

- Go to Settings > Events and add the code below to onLoad:

//The code below makes sure that the input is copied to the text mass when the PDF is generated

//observer and get the target element
var observer = new MutationObserver(fnHandler),
        elTarget = document.querySelector(".Survey"),
        objConfig = {
            childList: false,
            subtree : false,
            attributes: true,
            characterData : false
        };

//observing
observer.observe(elTarget, objConfig);

function fnHandler () {

if(survey.getQuestionsByKey("houseNr")[0].isAnswered()) {
    $('#houseNr').html(survey.getQuestionsByKey("houseNr")[0].getAnswer());
}
}


- Paste the code below onAnswered on the free text question

*/
$('#houseNr').text(survey.getQuestionsByKey("houseNr")[0].getAnswer());

10. Floating labels

Script used here: onLoad on page CSS: Floating label CSS

/*
-Add a free text field with the CSS class "floatingLabel"
-Add the following CSS to form CSS:

.Survey:not(.Print) .floatingLabel input[type="text"], .Survey .floatingLabel input[type="password"], .Survey .floatingLabel input[type="email"], .Survey .floatingLabel select, .Survey .floatingLabel textarea {
    max-width: 100%;
    padding: 5px;
    border: solid 0px #d9d9d9 !important;
    border-bottom: solid 1px #d9d9d9 !important;

}
.Survey:not(.Print) .floatingLabel input[type="text"]:focus, .Survey .floatingLabel input[type="password"]:focus, .Survey .floatingLabel input[type="email"]:focus, .Survey .floatingLabel textarea:focus, .Survey .floatingLabel select:focus {
    border-color: #cacaca;
    border-bottom: 1px solid #3F9BDA !important;
    outline: none;
}
.Survey .floatingLabel .Question .Answers {
    padding: 7px 7px 0 0px;
}
.Survey:not(.Print) .floatingLabel .qtTextRow .Header {
position: absolute;
display: block;
z-index: 9999;
font-weight: normal;
margin: 5px 0px 0px;
cursor: text;
color: #989898;
transform-origin: 0 100%;
transform: translate3d(0, 8px, 0) scale(1);
transition: all 0.2s ease-in-out;
}
.Survey:not(.Print) .floatingLabel .qtTextRow .Header .Name {
    font-weight: 400;
    height: 24px;
    display: block;
}
.Survey:not(.Print) .floatingLabel .qtTextRow .Header.lbl-focused {
color: red!important;
transform: translate3d(0, -14px, 0) scale(.75);
}

- Add code below to onLoad on the page where the floating label field is located

*/


$(document).ready( function () {
    $('.qtTextRow input').each( function () {
        $this = $(this);
        if ( this.value != '' ) $this.addClass('input-focused').closest('.Question').find('.qtTextRow .Header').addClass('lbl-focused');;
    });
});


//input focus/click/touch
$('body').on('click focus', '.qtTextRow input', function() {
$(this).closest('.Question').find('.qtTextRow .Header').addClass('lbl-focused');
});

//input blur
$('body').on('blur', '.qtTextRow input', function() {
if (!$(this).val())
    $(this).closest('.Question').find('.qtTextRow .Header').removeClass('lbl-focused');
});

//label click/touch
$('body').on('click', '.qtTextRow .Header', function() {
$(this).addClass('lbl-focused').closest('.Question').find('.qtTextRow input').focus();
});

11. Approved dates

Script used here: onLoad on page

/*

- Add a calendar question and give it the class “approved-date”

- Copy and paste the code below to onLoad on the same page as the calendar question

- The current code will let the user only pick dates back in time

- If you change the “0” to, e.g. +5, it will let the user pick a date that is max 5 days ahead of the current date

- If you change the “0” to, e.g. -5, it will let the user pick a date that is max 5 days back from the current date

- You can also change the “maxDate” to “minDate” to get the opposite effect

*/
$(".approved-date .hasDatepicker").datepicker("option", "minDate", -5);