i'm trying to create a graph in d3.js after taking data from views.py in Django:
<div class="col-md-4 col-sm-4 col-xs-12">
<div class="x_panel tile fixed_height_320 overflow_hidden">
<div class="x_title">
<h2>Power</h2>
<ul class="nav navbar-right panel_toolbox">
<li><a class="collapse-link"><i class="fa fa-chevron-up"></i></a>
</li>
<li class="dropdown">
<i class="fa fa-wrench"></i>
<ul class="dropdown-menu" role="menu">
<li>Settings 1
</li>
<li>Settings 2
</li>
</ul>
</li>
<li><a class="close-link"><i class="fa fa-close"></i></a>
</li>
</ul>
<div class="clearfix"></div>
</div>
<div class="x_content">
<table class="" style="width:100%">
<tr>
<td id="area1" role="button">
<script>
$('#area1').ready(function(){
$.ajax({
type:'GET',
url:'/',
contentType: "application/json; charset=utf-8",
dataType: 'json',
success : function(data)
{
var width = 250,
height = 250,
twoPi = 2 * Math.PI;
var arc1 = d3.svg.arc()
.innerRadius(100)
.outerRadius(120)
.startAngle(0);
var svg1 = d3.select("#area1").append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");
var meter1 = svg1.append("g")
.attr("class", "season-progress");
var background = meter1.append("path")
.datum({endAngle: twoPi})
.style("fill", "#ffb74d")
.attr("d", arc1);
var foreground = meter1.append("path")
.datum({endAngle:0})
.style("fill", "#e65100")
.attr("class", "foreground")
.attr("d", arc1);
foreground.transition()
.duration(1000)
.ease("linear")
.attrTween("d", function(d) {
var interpolate = d3.interpolate(d.endAngle, twoPi * data['ITPOWER'] / data['AVAILABLEPOWER']);
return function(t) {
d.endAngle = interpolate(t);
return arc1(d);
}
});
var text = meter1.append("text")
.attr("text-anchor", "middle")
.attr("dy", "1.5em")
.attr("font-size", "18")
.style('fill','#4B515D')
.text('PuE');
var line2 = meter1.append("text")
.attr("text-anchor", "middle")
.attr("dy", ".10em")
.attr("font-size", "30")
.style('fill','#4B515D')
.text(Math.round(data["PuE"]*100)/100);
}
});
});
</script>
</td>
<td>
<table class="tile_info">
<tr>
<td>
<p> </p>
</td>
<td></td>
</tr>
<tr>
<td>
<p style="color:#e65100;">Used </p>
</td>
<td >{{ power.ITPOWER }}kWh</td>
</tr>
<tr>
<td>
<p style="color:#ffb74d;">Available </p>
</td>
<td>{{ power.AVAILABLEPOWER }}kWh</td>
</tr>
<tr>
<td>
<p style="color:#4B515D;">Usage </p>
</td>
<td>15%</td>
</tr>
<tr>
<td>
<p> </p>
</td>
<td></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</div>
</div>
I'm getting this :
my complete web page
but when I try the same thing with just the graph on the html page, I get what I wanted:
the transition is getting executed here,but not in the first case
Please explain why I'm able to see the transition when the graph is the only element on the html page and not otherwise.
I was using a bootstrap template available online.This template was using Jquery for other elements on the web page.These were messing my d3.js graph. I deleted those elements as I did not need them.
Related
I'm processing the incoming data with Ajax as follows. But I can't make it compatible with dataTable. I've read the Datatable Ajax documentation. But I was never successful. How do I pull the following data into the dataTable? I want to make these codes compatible for Data Table.
You can see multiple parse operations in my code. Please do not warn about it. Net Core, I can only process the JSON file in this way. The only thing I want from you is to show this data that I have processed successfully in the datatable.
<div class="card" id="view-maincategorylist">
<div class="card-body">
<div class="table-responsive">
<table id="datatablex" class="table table-striped table-bordered" style="width:100%">
<thead>
<tr>
<th class="text-center">Fotoğraf</th>
<th class="text-center">Ana Kategori Adı</th>
<th class="text-center">Seçenekler</th>
<th class="text-center">İşlemler</th>
</tr>
</thead>
<tbody id="table-maincategories">
</tbody>
</table>
</div>
</div>
</div>
<script>
function GetMainCategoryList() {
$.ajax({
url: "/Admin/BusinessCategories/MainCategories/",
contentType: "application/json",
dataType: "json",
type: "Get",
success: function (data) {
var item = jQuery.parseJSON(data);
$("#table-maincategories").empty();
$.each(JSON.parse("[" + item + "]"), (index, value) => {
for (let element of value) {
$("#table-maincategories").append(`<tr class="text-center">
<td><img src="${element.Image}" style="height:80px;" /></td>
<td>${element.Name}</td>
<td>
<div class="form-check">
<a href="/Admin/BusinessCategories/MainShowMenu/${element.Id}" onclick="location.href=this.href;">
<input class="form-check-input" type="checkbox" id="flex_${element.Id}">
</a>
<label class="form-check-label" for="flex_${element.Id}">Menüde Göster</label>
</div>
</td>
<td>
<a onclick="ShowEditMainCategory(${element.Id})" class="btn btn-primary"><i class="bx bx-edit"></i> Düzenle</a>
<a onclick="DeleteMainCategory(${element.Id});" data-name="${element.Name}" id="del_${element.Id}" class="btn btn-danger delete-button"><i class="bx bx-trash"></i> Sil</a>
</td> </tr>`);
var checkbox = document.getElementById('flex_' + element.Id);
if (element.ShowMenu == true) {
checkbox.checked = true;
}
else {
checkbox.checked = false;
}
}
});
$('#datatable').DataTable();
ViewShowHide(1);
},
error: function () {
Swal.fire('Veriler Okunamadı!', '', 'error')
}
})
}
</script>
Problem Images:
image 1
image 2
image 3
JSON Data Output:
https://easyupload.io/1bsb75
Hi I am trying to set up a table with parent and child data which can be sorted by using the jquery sortable library, I am able to get the position and the respective ids of the data but unable to send the to the controller using jquery
HTML Part:
<tbody class="sort">
#foreach($menus as $menu)
<tr id = "{{ $menu->id }}" class="parent">
<td>{{$menu->name}}</td>
<td>{{ $menu->link }}</td>
#if($menu->sub == 1)
<td>Active</td>
#else
<td>In-Active</td>
#endif
<td class="text-right" >
<i class="fe-edit-2" ></i>
<button data-toggle="tooltip" data-placement="top" data-id="{{$menu->id}}" title="" data-original-title="Delete" class="delete btn btn-danger ml-1 " type="submit"><i class="fas fa-trash-alt"></i></button>
</td>
#if(count(App\Menu::where('parent_id',$menu->id)->orderBy('position','asc')->get())>0)
#foreach(App\Menu::where('parent_id',$menu->id)->orderBy('position','asc')->get() as $child)
<tr id="{{ $child->id }}">
<td>~{{$child->name}}</td>
<td>{{ $child->link }}</td>
<td></td>
<td class="text-right" >
<i class="fe-edit-2" ></i>
<button data-toggle="tooltip" data-placement="top" data-id="{{$child->id}}" title="" data-original-title="Delete" class="delete btn btn-danger ml-1 " type="submit"><i class="fas fa-trash-alt"></i></button>
</td>
</tr>
#endforeach
#endif
</tr>
#endforeach
</tbody>
Jquery part:
$(document).ready(function(){
$('.sort').sortable({
stop:function(event, ui){
var parameter = new Array();
var position = new Array();
$('.sort>tr').each(function(){
parameter.push($(this).attr("id"));
});
$(this).children().each(function(index) {
position.push(index + 1);
});
$.ajax({
url:"{{ route('menu.savePosition') }}",
method:"POST",
data:{"id":parameter,"position":position},
success:function(response){
console.log(response);
},
error:function(xhr,response){
console.log(xhr.status);
}
});
},
}).disableSelection();
});
Controller Part:
public function SavePosition(Request $req){
$position = ($req->all());
return $req->all();
// foreach($file as $pos){
// $id = $pos[1];
// $position = $pos[0];
// $menu = Menu::findOrFail($id);
// $menu->position = $position;
// $menu->save();
// }
}
After all this the console looks like the following :
please help me out fixing the issue
any help would be highly appreciated
Thanks in advance
Consider the following example.
$(function() {
$(".sort").sortable({
items: "> tbody > tr",
stop: function(event, ui) {
var parameter = $(this).sortable("toArray");
var position = [];
$.each(parameter, function(index, value) {
position.push(index + 1);
});
console.log(parameter, position);
$.ajax({
url: "{{ route('menu.savePosition') }}",
method: "POST",
data: {
"id": parameter,
"position": position
},
success: function(response) {
console.log(response);
},
error: function(xhr, status, error) {
console.log(status, error);
}
});
}
});
});
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap#5.0.1/dist/css/bootstrap.min.css" integrity="undefined" crossorigin="anonymous">
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div class="container">
<table class="sort" width="340">
<thead>
<tr>
<th>Name</th>
<th>Link</th>
<th>Status</th>
<td></td>
</tr>
</thead>
<tbody>
<tr id="item-1">
<td>Item 1</td>
<td>Link 1</td>
<td>Active</td>
<td class="text-right">
<i class="fe-edit-2" ></i>
<button data-toggle="tooltip" data-placement="top" data-id="item-1" title="" data-original-title="Delete" class="delete btn btn-danger ml-1 " type="submit"><i class="fas fa-trash-alt"></i></button>
</td>
</tr>
<tr id="item-2">
<td>Item 2</td>
<td>Link 2</td>
<td>Active</td>
<td class="text-right">
<i class="fe-edit-2" ></i>
<button data-toggle="tooltip" data-placement="top" data-id="item-2" title="" data-original-title="Delete" class="delete btn btn-danger ml-1 " type="submit"><i class="fas fa-trash-alt"></i></button>
</td>
</tr>
<tr id="item-3">
<td>Item 3</td>
<td>Link 3</td>
<td>Active</td>
<td class="text-right">
<i class="fe-edit-2" ></i>
<button data-toggle="tooltip" data-placement="top" data-id="item-3" title="" data-original-title="Delete" class="delete btn btn-danger ml-1 " type="submit"><i class="fas fa-trash-alt"></i></button>
</td>
</tr>
<tr id="item-4">
<td>Item 4</td>
<td>Link 4</td>
<td>Active</td>
<td class="text-right">
<i class="fe-edit-2" ></i>
<button data-toggle="tooltip" data-placement="top" data-id="item-4" title="" data-original-title="Delete" class="delete btn btn-danger ml-1 " type="submit"><i class="fas fa-trash-alt"></i></button>
</td>
</tr>
<tr id="item-5">
<td>Item 5</td>
<td>Link 5</td>
<td>Active</td>
<td class="text-right">
<i class="fe-edit-2" ></i>
<button data-toggle="tooltip" data-placement="top" data-id="item-5" title="" data-original-title="Delete" class="delete btn btn-danger ml-1 " type="submit"><i class="fas fa-trash-alt"></i></button>
</td>
</tr>
</tbody>
</table>
</div>
It's not clear why you are sending the position as the Array of items will already be in the order of the items. I did include it just in case you do need it for something else.
It's easier to use the toArray method: https://api.jqueryui.com/sortable/#method-toArray You will also want to properly define the items so that Sortable knows what the items should be.
Try this way.
$('#element').sortable({
axis: 'y',
update: function (event, ui) {
var data = $(this).sortable('serialize');
// POST to server using $.post or $.ajax
$.ajax({
data: data,
type: 'POST',
url: '/your/url/here'
});
}
});
I am updating my cart quantity using ajax. After successfully updating of the cart, when I load the cart and body of the current page the toggle menu of the my cart button does not work the first time. But when I update second time after loading the cart and body the toggle menu works.
My current code:
'remove': function(product_id, flag) {
// alert(product_id);
// alert(flag);
$.ajax({
url: 'includes/addToCart.php',
type: 'post',
data: 'product_id=' + product_id + '&flag='+flag,
dataType: 'json',
beforeSend: function() {
$('#cart > button').button('loading');
},
complete: function() {
$('#cart > button').button('reset');
},
success: function(json) {
// Need to set timeout otherwise it wont update the total
setTimeout(function () {
$('#cart > button').html('<span class="lg">My Cart</span><span><i class="fa fa-shopping-basket"></i> ('+json['total']+') items</span>');
}, 100);
setTimeout(function () {
// if(json['key'] == "blank")
$('#cart > ul').load('includes/loadcart.php');
}, 100);
setTimeout(function () {
$('body').load('cart.php');
}, 100);
},
});
In the console I am getting this error when it executes:
Synchronous XMLHttpRequest on the main thread is deprecated because of
its detrimental effects to the end user’s experience.
I have used the async: true, and async: false
same problem persists
here is my html code where the value displayed
<div class="btn-group btn-block" id="cart">
<button class="btn btn-viewcart dropdown-toggle" data-loading-text="Loading..." data-toggle="dropdown" type="button" aria-expanded="false" id="cart_total"><span class="lg">My Cart</span><span><i class="fa fa-shopping-basket"></i> (<?=$_SESSION['totalitem']?>) items</span></button>
<ul class="dropdown-menu pull-right" ><li>
<table id="cart_item" class="table table-striped">
<tbody>
<?php
if(empty($_SESSION['cart'])){
?>
<tr>
<td align="center" style="font-weight: bold; font-size: 14px;" colspan="5">Your Cart Is empty</td>
</tr>
<?php
}
else{
$subtotal = 0;
foreach($_SESSION['cart'] as $key=>$value){
$subtotal = $subtotal + ($_SESSION['cart'][$key]['price']*$_SESSION['cart'][$key]['qty']);
?>
<tr>
<td class="text-center"> <img class="img-thumbnail" title="iPhone" alt="iPhone" src="../photo/<?=$_SESSION['cart'][$key]['img']?>" width="57px" height="57px">
</td>
<td class="text-left"><?=$_SESSION['cart'][$key]['name']?>
</td>
<td class="text-right">x <?=$_SESSION['cart'][$key]['qty']?></td>
<td class="text-right">$<?=$_SESSION['cart'][$key]['price']*$_SESSION['cart'][$key]['qty']?></td>
<td class="text-center"><button class="btn btn-danger btn-xs" title="Remove" onclick="cart.remove('<?=$_SESSION['cart'][$key]['id']?>','delete');" type="button"><i class="fa fa-times"></i></button></td>
</tr>
<?php
}
}
$vat= $subtotal * (20/100);
$total = $subtotal + $vat;
?>
</tbody></table>
</li><li>
<?php
if(!empty($_SESSION['cart']))
{
?>
<div>
<table class="table table-bordered">
<tbody><tr>
<td class="text-right"><strong>Sub-Total</strong></td>
<td class="text-right">$<?=$subtotal?></td>
</tr>
<tr>
<td class="text-right"><strong>Eco Tax (-2.00)</strong></td>
<td class="text-right">$2.00</td>
</tr>
<tr>
<td class="text-right"><strong>VAT (20%)</strong></td>
<td class="text-right">$<?=$vat?></td>
</tr>
<tr>
<td class="text-right"><strong>Total</strong></td>
<td class="text-right">$<?=$total?></td>
</tr>
</tbody></table>
<p class="text-right"><strong><i class="fa fa-shopping-cart"></i> View Cart</strong> <strong><i class="fa fa-share"></i> Checkout</strong></p>
</div>
<?php
}
?>
</li></ul>
</div>
I have tried to implement a progress bar in my application. When I used a numeric text box the progress bar is not progressing forward. How to make it progress using a numeric text box. Thanks.
<form name="ContactInforForm" action="ContactInformation.html" onsubmit="return ValidateRequiredFields()" method="post">
<div>
<table class="forms" style="padding-left:9em">
<tr>
<td>
<h4>Profile Completeness: <span id="completed">20%</span></h4>
</td>
<td>
<div id="profileCompleteness"></div>
</td>
</tr>
<tr>
<td>
Employee Name:
</td>
<td>
<input type="text" name="FName" id="txtFname" />
</td>
</tr>
<tr>
<td>
Employee Id:
</td>
<td>
<input type="text" name="EmpID" id="txtEmpID" />
</td>
</tr>
<tr>
<td>
Age:
</td>
<td>
<input type="text" name="Age" id="txtAge" />
</td>
</tr>
<tr>
<td>
Contact Phone:
</td>
<td>
<input type="text" name="PrimaryPhone" id="txtPriPhone" />
</td>
<td><span id="PPhoneValidationMsg" style="color:red; font-size:smaller; font-weight:bold; "></span></td>
</tr>
<tr>
<td>
<button style="width:75px;" type="button" id="btnNext" onclick="ValidateRequiredFields();">Submit</button>
</td>
</tr>
</table>
</div>
</form>
<!--Make all the controls into kendo -->
<script>
$(document).ready(function() {
$("#txtFname").kendoMaskedTextBox({
});
$('#txtEmpID').kendoNumericTextBox({
});
$('#txtAge').kendoNumericTextBox({
});
$('#txtDob').kendoDatePicker({
});
$('#txtDesig').kendoMaskedTextBox({});
$('#txtAdd1').kendoMaskedTextBox({
});
$('#txtAdd2').kendoMaskedTextBox({
});
$('#drpStates').kendoDropDownList({
});
$('#drpCountry').kendoDropDownList({
});
$("#txtPriPhone").kendoMaskedTextBox({
mask: "(000)000-0000"
});
$("#btnNext").kendoButton();
var pb = $("#profileCompleteness").kendoProgressBar({
type: "chunk",
chunkCount: 10,
min: 0,
max: 10,
value: 2
}).data("kendoProgressBar");
$(".forms input").change(function() {
var completeness = 2;
$(".forms input").each(function() {
if (this.value != "") {
completeness++;
}
});
pb.value(completeness);
$("#completed").text((completeness * 10) + "%");
});
});
</script>
When I changed the kendo numeric text box to masked text box the code seems to work fine. But for my requirement I require numeric textbox.
The default value of a numeric textbox may not be "". Try something like this:
$(".forms input").change(function () {
var completeness = 2;
$(".forms input").each(function () {
if (this.hasClass("k-numerictextbox") && this.value != "0" && this.value != "") {
completeness++;
} else if (this.value != "") {
completeness++;
}
});
pb.value(completeness);
$("#completed").text((completeness * 10) + "%");
});
Would be pretty easy to set a break point and see what an empty numeric textbox looks like.
I'm using knockout-kendo and here is my code:
markup:
<body>
<div id="mursi"
data-bind="kendoGrid:{ dataSource:{data:selectedAsset().RealEstateAssetBlockParcel ,pageSize:3} ,data:selectedAsset().RealEstateAssetBlockParcel, pageable: true,pageSize:5,sortable:true,scrollable:false,selectable:true,columns:[{title:'parcel'},{title:'plot'},{title:'subplot'},{ width:60},{ width:60}] ,rowTemplate: 'rowParcelTmpl', altRowTemplate: 'altParcelTmpl', useKOTemplates: true }"></div>
<button data-bind="replaceSelectedAsset">click me</button>
<script id="rowParcelTmpl" type="text/html">
<tr>
<td>
<div data-bind="text:Block"></div>
</td>
<td>
<div data-bind="text:Plot"></div>
</td>
<td>
<div data-bind="text:SubPlot"></div>
</td>
<td>
<button class="k-button"><span class="update-button"></span></button>
</td>
<td>
<button class="k-button"><span class="remove-button"></span></button>
</td>
</tr>
</script>
<script id="altParcelTmpl" type="text/html">
<tr class="k-alt">
<td>
<div data-bind="text:Block"></div>
</td>
<td>
<div data-bind="text:Plot"></div>
</td>
<td>
<div data-bind="text:SubPlot"></div>
</td>
<td>
<button class="k-button"><span class="update-button"></span></button>
</td>
><span class="remove-button"></span></button></td>
</tr>
</script>
</body>
here is my JS:
var selectedAsset = ko.observable();
//viewmodels
var assetViewModel = function () {
this.RealEstateAssetBlockParcel = ko.observableArray([]);
};
var asset = new assetViewModel();
asset.RealEstateAssetBlockParcel.push({Block: 1, Plot: 2, SubPlot: 3, Id: 0});
selectedAsset(asset);
var replaceSelectedAsset = function () {
selectedAsset(asset);
};
ko.applyBindings();
everything is allright until you press the "click me" button, which suppose to select another asset and display its parcels grid,
Instead i got following error:"Uncaught TypeError: Cannot call method 'find' of undefined "
(which originated in kendo.web.all)
http://jsbin.com/oboxig/3/edit
Help will be appreciated
Thanks
What I see in you JSBin is an error in the data-bind of the button.
Could you try:
function replaceSelectedAsset () {
selectedAsset(asset);
};
and define the button as:
<button onclick="replaceSelectedAsset()">click me</button>