Skip to content

Commit

Permalink
Merge pull request #10 from albertjan/fix/kwargs
Browse files Browse the repository at this point in the history
Fix/kwargs
  • Loading branch information
eah13 authored Oct 11, 2018
2 parents ae32e23 + babeaf2 commit de4a83f
Show file tree
Hide file tree
Showing 3 changed files with 139 additions and 28 deletions.
77 changes: 63 additions & 14 deletions __init__.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,51 @@
var $builtinmodule = function(name) {
function fill(arr, val) {
if (Array.prototype.fill) {
return Array.prototype.fill.bind(arr)(val, arguments[2], arguments[3]);
}

// Steps 1-2.
if (arr == null) {
throw new TypeError('arr is null or not defined');
}

var O = Object(arr);

// Steps 3-5.
var len = O.length >>> 0;

// Steps 6-7.
var start = arguments[2];
var relativeStart = start >> 0;

// Step 8.
var k = relativeStart < 0 ?
Math.max(len + relativeStart, 0) :
Math.min(relativeStart, len);

// Steps 9-10.
var end = arguments[3];
var relativeEnd = end === undefined ?
len : end >> 0;

// Step 11.
var final = relativeEnd < 0 ?
Math.max(len + relativeEnd, 0) :
Math.min(relativeEnd, len);

// Step 12.
while (k < final) {
O[k] = value;
k++;
}

// Step 13.
return O;
}


var mod = {};

var COLORS = [
[255, 89, 149], [182, 227, 84], [254, 237, 108], [140, 237, 255],
[158, 111, 254], [137, 156, 161], [248, 248, 242], [191, 70, 70],
Expand Down Expand Up @@ -131,33 +176,37 @@ var $builtinmodule = function(name) {
return '';
}

function some(val) {
return val && val !== Sk.builtin.none.none$;
}

function kwfunc(impl, kwargs) {
if (kwargs && kwargs.length) {
impl.co_kwargs = true;
impl.co_varnames = ['__self__'].concat(kwargs);
impl.$defaults = fill(new Array(kwargs.length), Sk.builtin.none.none$);
}
return new Sk.builtin.func(impl);
}

function createChartType(type, renderer) {
mod[type] = Sk.misceval.buildClass(mod, function($gbl, $loc) {
$loc.__init__ = kwfunc(
function(trash, self, title, width, height, range, include_x_axis, x_title, y_title, title_font_size, fill, stroke, x_labels) {
function(self, title, width, height, range, include_x_axis, x_title, y_title, title_font_size, fill, stroke, x_labels) {
var options = {};
if (title) options.title = title.v;
if (width) options.width = width.v;
if (height) options.height = height.v;
if (range) options.range = {
if (some(title)) options.title = title.v;
if (some(width)) options.width = width.v;
if (some(height)) options.height = height.v;
if (some(range)) options.range = {
min: range.v[0].v,
max: range.v[1].v
};
if (include_x_axis) options.include_x_axis = include_x_axis.v;
if (x_title) options.x_title = x_title.v;
if (y_title) options.y_title = y_title.v;
if (title_font_size) options.title_font_size = title_font_size.v;
if (fill) options.fill = fill.v;
if (stroke) options.stroke = stroke.v;
if (x_labels) options.x_labels = x_labels.v;
if (some(include_x_axis)) options.include_x_axis = include_x_axis.v;
if (some(x_title)) options.x_title = x_title.v;
if (some(y_title)) options.y_title = y_title.v;
if (some(title_font_size)) options.title_font_size = title_font_size.v;
if (some(fill)) options.fill = fill.v;
if (some(stroke)) options.stroke = stroke.v;
if (some(x_labels)) options.x_labels = x_labels.v;

self.instance = new Chart(options);
}, KWARGS
Expand Down
2 changes: 1 addition & 1 deletion bower.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "pygal.js",
"version": "0.0.0",
"version": "0.2.0",
"homepage": "https://github.com/trinketapp/pygal.js",
"authors": [
"Benjamin Wheeler <[email protected]>"
Expand Down
88 changes: 75 additions & 13 deletions demo.html
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<html>
<head>
<script src="http://www.skulpt.org/static/skulpt.min.js" type="text/javascript"></script>
<script src="http://www.skulpt.org/static/skulpt-stdlib.js" type="text/javascript"></script>
<script src="bower_components/skulpt/skulpt.js" type="text/javascript"></script>
<script src="bower_components/skulpt/skulpt-stdlib.js" type="text/javascript"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>

</head>
Expand All @@ -16,10 +16,70 @@
mypre.innerHTML = mypre.innerHTML + text;
}
function builtinRead(x) {
if (Sk.builtinFiles === undefined || Sk.builtinFiles["files"][x] === undefined)
throw "File not found: '" + x + "'";
return Sk.builtinFiles["files"][x];
}
if (Sk.builtinFiles !== undefined && Sk.builtinFiles["files"][x] !== undefined) {
return Sk.builtinFiles["files"][x];
}

if (Sk.externalLibraries[x]) {
var externalLibraryInfo = Sk.externalLibraries[x];
return Sk.misceval.promiseToSuspension(
new Promise(function(resolve, reject) {
// get the main skulpt extenstion
var request = new XMLHttpRequest();
request.open("GET", externalLibraryInfo.path);
request.onload = function() {
if (request.status === 200) {
resolve(request.responseText);
} else {
reject("File not found: '" + x + "'");
}
};

request.onerror = function() {
reject("File not found: '" + x + "'");
}

request.send();
}).then(function (code) {
if (!code) {
throw new Sk.builtin.ImportError("Failed to load remote module '" + name + "'");
}

var promise;

function mapUrlToPromise(path) {
return new Promise(function(resolve, reject) {
scriptElement = document.createElement("script");
scriptElement.type = "text/javascript";
scriptElement.src = path;
scriptElement.async = true
scriptElement.onload = function() {
resolve(true);
}

document.body.appendChild(scriptElement);
});
}

if (externalLibraryInfo.loadDepsSynchronously) {
promise = (externalLibraryInfo.dependencies || []).reduce((p, url) => {
return p.then(() => mapUrlToPromise(url));
}, Promise.resolve()); // initial
} else {
promise = Promise.all((externalLibraryInfo.dependencies || []).map(mapUrlToPromise));
}

return promise.then(function() {
return code;
}).catch(function() {
throw new Sk.builtin.ImportError("Failed to load dependencies required for " + name);
});
})
);
}

throw "File not found '" + x + "'";
}

// Here's everything you need to run a python program in skulpt
// grab the code from your textarea
Expand All @@ -43,12 +103,14 @@
});
}
Sk.externalLibraries = {
pygal : {
path : '__init__.js',
dependencies : [
'https://cdnjs.cloudflare.com/ajax/libs/highcharts/6.0.2/highcharts.js',
'https://cdnjs.cloudflare.com/ajax/libs/highcharts/6.0.2/js/highcharts-more.js'
]}
'./pygal/__init__.js' : {
path : '__init__.js',
dependencies : [
'https://cdnjs.cloudflare.com/ajax/libs/highcharts/6.0.2/highcharts.js',
'https://cdnjs.cloudflare.com/ajax/libs/highcharts/6.0.2/js/highcharts-more.js'
],
loadDepsSynchronously: true
}
};
Sk.domOutput = function(html) {
console.log(html);//-->here get the div tag with no content
Expand Down Expand Up @@ -94,4 +156,4 @@ <h3>Try This</h3>

</body>

</html>
</html>

0 comments on commit de4a83f

Please sign in to comment.