363 lines
8.5 KiB
PHP
363 lines
8.5 KiB
PHP
<?php
|
|
/**
|
|
* Name: Calculator App
|
|
* Description: Simple Calculator Application
|
|
* Version: 1.0
|
|
* Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
|
|
*/
|
|
|
|
use Friendica\App;
|
|
use Friendica\Core\Hook;
|
|
use Friendica\DI;
|
|
|
|
function calc_install() {
|
|
Hook::register('app_menu', 'addon/calc/calc.php', 'calc_app_menu');
|
|
}
|
|
|
|
function calc_app_menu(array &$b)
|
|
{
|
|
$b['app_menu'][] = '<div class="app-title"><a href="calc">Calculator</a></div>';
|
|
}
|
|
|
|
/**
|
|
* This is a statement rather than an actual function definition. The simple
|
|
* existence of this method is checked to figure out if the addon offers a
|
|
* module.
|
|
*/
|
|
function calc_module() {}
|
|
|
|
function calc_init()
|
|
{
|
|
$x = <<< EOT
|
|
|
|
<script language="JavaScript">
|
|
/**************************************
|
|
* www.FemaleNerd.com *
|
|
**************************************/
|
|
|
|
// Declare global variables
|
|
var displayText = ""
|
|
var num1
|
|
var num2
|
|
var operatorType
|
|
|
|
// Write to display
|
|
function addDisplay(n){
|
|
id = document.getElementById("display");
|
|
id.value = ""
|
|
displayText += n
|
|
id.value = displayText
|
|
}
|
|
|
|
// Addition
|
|
function addNumbers() {
|
|
if (displayText == "") {
|
|
displayText = result
|
|
}
|
|
num1 = parseFloat(displayText)
|
|
operatorType = "add"
|
|
displayText = ""
|
|
}
|
|
|
|
// Subtraction
|
|
function subtractNumbers() {
|
|
if (displayText == "") {
|
|
displayText = result
|
|
}
|
|
num1 = parseFloat(displayText)
|
|
operatorType = "subtract"
|
|
displayText = ""
|
|
}
|
|
|
|
// Multiplication
|
|
function multiplyNumbers() {
|
|
if (displayText == "") {
|
|
displayText = result
|
|
}
|
|
num1 = parseFloat(displayText)
|
|
operatorType = "multiply"
|
|
displayText = ""
|
|
}
|
|
|
|
// Division
|
|
function divideNumbers() {
|
|
if (displayText == "") {
|
|
displayText = result
|
|
}
|
|
num1 = parseFloat(displayText)
|
|
operatorType = "divide"
|
|
displayText = ""
|
|
}
|
|
|
|
// Sine
|
|
function sin() {
|
|
id = document.getElementById("display");
|
|
if (displayText == "") {
|
|
num1 = result
|
|
}
|
|
else {
|
|
num1 = parseFloat(displayText)
|
|
}
|
|
if (num1 != "") {
|
|
result = Math.sin(num1)
|
|
id.value = result
|
|
displayText = ""
|
|
}
|
|
else {
|
|
alert("Please write the number first")
|
|
}
|
|
}
|
|
|
|
// Cosine
|
|
function cos() {
|
|
id = document.getElementById("display");
|
|
if (displayText == "") {
|
|
num1 = result
|
|
}
|
|
else {
|
|
num1 = parseFloat(displayText)
|
|
}
|
|
if (num1 != "") {
|
|
result = Math.cos(num1)
|
|
id.value = result
|
|
displayText = ""
|
|
}
|
|
else {
|
|
alert("Please write the number first")
|
|
}
|
|
}
|
|
|
|
// ArcSine
|
|
function arcSin() {
|
|
id = document.getElementById("display");
|
|
if (displayText == "") {
|
|
num1 = result
|
|
}
|
|
else {
|
|
num1 = parseFloat(displayText)
|
|
}
|
|
if (num1 != "") {
|
|
result = Math.asin(num1)
|
|
id.value = result
|
|
displayText = ""
|
|
}
|
|
else {
|
|
alert("Please write the number first")
|
|
}
|
|
}
|
|
|
|
// ArcCosine
|
|
function arcCos() {
|
|
id = document.getElementById("display");
|
|
if (displayText == "") {
|
|
num1 = result
|
|
}
|
|
else {
|
|
num1 = parseFloat(displayText)
|
|
}
|
|
if (num1 != "") {
|
|
result = Math.acos(num1)
|
|
id.value = result
|
|
displayText = ""
|
|
}
|
|
else {
|
|
alert("Please write the number first")
|
|
}
|
|
}
|
|
|
|
// Square root
|
|
function sqrt() {
|
|
id = document.getElementById("display");
|
|
if (displayText == "") {
|
|
num1 = result
|
|
}
|
|
else {
|
|
num1 = parseFloat(displayText)
|
|
}
|
|
if (num1 != "") {
|
|
result = Math.sqrt(num1)
|
|
id.value = result
|
|
displayText = ""
|
|
}
|
|
else {
|
|
alert("Please write the number first")
|
|
}
|
|
}
|
|
|
|
// Square number (number to the power of two)
|
|
function square() {
|
|
id = document.getElementById("display");
|
|
if (displayText == "") {
|
|
num1 = result
|
|
}
|
|
else {
|
|
num1 = parseFloat(displayText)
|
|
}
|
|
if (num1 != "") {
|
|
result = num1 * num1
|
|
id.value = result
|
|
displayText = ""
|
|
}
|
|
else {
|
|
alert("Please write the number first")
|
|
}
|
|
}
|
|
|
|
// Convert degrees to radians
|
|
function degToRad() {
|
|
id = document.getElementById("display");
|
|
if (displayText == "") {
|
|
num1 = result
|
|
}
|
|
else {
|
|
num1 = parseFloat(displayText)
|
|
}
|
|
if (num1 != "") {
|
|
result = num1 * Math.PI / 180
|
|
id.value = result
|
|
displayText = ""
|
|
}
|
|
else {
|
|
alert("Please write the number first")
|
|
}
|
|
}
|
|
|
|
// Convert radians to degrees
|
|
function radToDeg() {
|
|
id = document.getElementById("display");
|
|
if (displayText == "") {
|
|
num1 = result
|
|
}
|
|
else {
|
|
num1 = parseFloat(displayText)
|
|
}
|
|
if (num1 != "") {
|
|
result = num1 * 180 / Math.PI
|
|
id.value = result
|
|
displayText = ""
|
|
}
|
|
else {
|
|
alert("Please write the number first")
|
|
}
|
|
}
|
|
|
|
// Calculations
|
|
function calculate() {
|
|
id = document.getElementById("display");
|
|
|
|
if (displayText != "") {
|
|
num2 = parseFloat(displayText)
|
|
// Calc: Addition
|
|
if (operatorType == "add") {
|
|
result = num1 + num2
|
|
id.value = result
|
|
}
|
|
// Calc: Subtraction
|
|
if (operatorType == "subtract") {
|
|
result = num1 - num2
|
|
id.value = result
|
|
}
|
|
// Calc: Multiplication
|
|
if (operatorType == "multiply") {
|
|
result = num1 * num2
|
|
id.value = result
|
|
}
|
|
// Calc: Division
|
|
if (operatorType == "divide") {
|
|
result = num1 / num2
|
|
id.value = result
|
|
}
|
|
displayText = ""
|
|
}
|
|
else {
|
|
id.value = "Oops! Error!"
|
|
}
|
|
}
|
|
|
|
// Clear the display
|
|
function clearDisplay() {
|
|
id = document.getElementById("display");
|
|
|
|
displayText = ""
|
|
id.value = ""
|
|
}
|
|
</script>
|
|
|
|
EOT;
|
|
DI::page()['htmlhead'] .= $x;
|
|
}
|
|
|
|
function calc_content($app) {
|
|
|
|
$o = '';
|
|
|
|
$o .= <<< EOT
|
|
|
|
<h3>Calculator</h3>
|
|
<br /><br />
|
|
<table>
|
|
<tbody><tr><td>
|
|
<table bgcolor="#af9999" border="1">
|
|
<tbody><tr><td>
|
|
<table border="1" cellpadding="2" cellspacing="2">
|
|
<form name="calc">
|
|
<!--
|
|
<TR><TD VALIGN=top colspan=6 ALIGN="center"> <H2>Calculator</H2> </TD>
|
|
-->
|
|
<tbody><tr>
|
|
<td colspan="5"><input size="22" id="display" name="display" type="text"></td>
|
|
</tr><tr align="left" valign="middle">
|
|
<td><input name="one" value=" 1 " onclick="addDisplay(1)" type="button"></td>
|
|
<td><input name="two" value=" 2 " onclick="addDisplay(2)" type="button"></td>
|
|
<td><input name="three" value=" 3 " onclick="addDisplay(3)" type="button"></td>
|
|
<td><input name="plus" value=" + " onclick="addNumbers()" type="button"></td>
|
|
</tr><tr align="left" valign="middle">
|
|
<td><input name="four" value=" 4 " onclick="addDisplay(4)" type="button"></td>
|
|
<td><input name="five" value=" 5 " onclick="addDisplay(5)" type="button"></td>
|
|
<td><input name="six" value=" 6 " onclick="addDisplay(6)" type="button"></td>
|
|
<td><input name="minus" value=" - " onclick="subtractNumbers()" type="button"></td>
|
|
</tr><tr align="left" valign="middle">
|
|
<td><input name="seven" value=" 7 " onclick="addDisplay(7)" type="button"></td>
|
|
<td><input name="eight" value=" 8 " onclick="addDisplay(8)" type="button"></td>
|
|
<td><input name="nine" value=" 9 " onclick="addDisplay(9)" type="button"></td>
|
|
<td><input name="multiplication" value=" * " onclick="multiplyNumbers()" type="button"></td>
|
|
</tr><tr align="left" valign="middle">
|
|
<td><input name="zero" value=" 0 " onclick="addDisplay(0)" type="button"></td>
|
|
<td><input name="pi" value=" Pi " onclick="addDisplay(Math.PI)" type="button"> </td>
|
|
<td><input name="dot" value=" . " onclick='addDisplay(".")' type="button"></td>
|
|
<td><input name="division" value=" / " onclick="divideNumbers()" type="button"></td>
|
|
</tr><tr align="left" valign="middle">
|
|
<td><input name="sqareroot" value="sqrt" onclick="sqrt()" type="button"></td>
|
|
<td><input name="squarex" value=" x^2" onclick="square()" type="button"></td>
|
|
<td><input name="deg-rad" value="d2r " onclick="degToRad()" type="button"></td>
|
|
<td><input name="rad-deg" value="r2d " onclick="radToDeg()" type="button"></td>
|
|
</tr><tr align="left" valign="middle">
|
|
<td><input name="sine" value=" sin " onclick="sin()" type="button"></td>
|
|
<td><input name="arcsine" value="asin" onclick="arcSin()" type="button"></td>
|
|
<td><input name="cosine" value="cos" onclick="cos()" type="button"></td>
|
|
<td><input name="arccosine" value="acs" onclick="arcCos()" type="button"></td>
|
|
|
|
</tr><tr align="left" valign="middle">
|
|
<td colspan="2"><input name="clear" value=" Clear " onclick="clearDisplay()" type="button"></td>
|
|
<td colspan="3"><input name="enter" value=" = " onclick="calculate()" type="button"></td>
|
|
|
|
</tr></tbody></table>
|
|
</form>
|
|
|
|
<!--
|
|
<TD VALIGN=top>
|
|
<B>NOTE:</B> All sine and cosine calculations are
|
|
<br>done in radians. Remember to convert first
|
|
<br>if using degrees.
|
|
</TD>
|
|
-->
|
|
|
|
</td></tr></tbody></table>
|
|
|
|
|
|
</td></tr></tbody></table>
|
|
|
|
EOT;
|
|
return $o;
|
|
}
|