Last active
September 9, 2023 04:13
-
-
Save jojosati/37de010d3ad03eeee319f1aea2c55667 to your computer and use it in GitHub Desktop.
Test $now - Thai/Eng date expression translator
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!doctype html> | |
<html> | |
<head> | |
<meta charset="utf-8"> | |
<meta http-equiv="X-UA-Compatible" content="IE=edge"> | |
<meta name="viewport" content="width=device-width, initial-scale=1"> | |
<title>$now expression</title> | |
<meta name="description" content="ทดสอบชุดคำสั่งเกี่ยวกับวันที่ และช่วงเวลา"> | |
<meta property="og:description" content="ทดสอบชุดคำสั่งเกี่ยวกับวันที่ และช่วงเวลา"> | |
<meta property="og:title" content="$now expression"> | |
<meta property="og:image" content="data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAABILAAASCwAAEAAAABAAAAAhISEAMDAwAD8/PwBNTU0AXFxcAHp6egCXl5cApqamAMTExADT09MA8PDwAP///wAAAAAAAAAAAAAAAAAAAAAAzMzMzMzMzMzMu7u8u7u7zMywB7y5AEvMzLAHu7MAS8zMsAe7YABLzMywB7oQAEvMzLAHtQAgS8zMsAeABkBLzMywByArQEvMzLACAItAS8zMsAAFu0BLzMywABq7QEvMzLAAe7tAS8zMsAS7y0BLzMy7u7zLu7vMzMzMzMzMzMz//wAAwQMAAMEDAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwIMAAMGDAAD//wAA"> | |
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"> | |
<link href="data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAABILAAASCwAAEAAAABAAAAAhISEAMDAwAD8/PwBNTU0AXFxcAHp6egCXl5cApqamAMTExADT09MA8PDwAP///wAAAAAAAAAAAAAAAAAAAAAAzMzMzMzMzMzMu7u8u7u7zMywB7y5AEvMzLAHu7MAS8zMsAe7YABLzMywB7oQAEvMzLAHtQAgS8zMsAeABkBLzMywByArQEvMzLACAItAS8zMsAAFu0BLzMywABq7QEvMzLAAe7tAS8zMsAS7y0BLzMy7u7zLu7vMzMzMzMzMzMz//wAAwQMAAMEDAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwIMAAMGDAAD//wAA" rel="icon" type="image/x-icon"> | |
</head> | |
<body ng-app> | |
<div class="container" ng-controller="nowCtrl"> | |
<h2><img style="height:40px" src="data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAABILAAASCwAAEAAAABAAAAAhISEAMDAwAD8/PwBNTU0AXFxcAHp6egCXl5cApqamAMTExADT09MA8PDwAP///wAAAAAAAAAAAAAAAAAAAAAAzMzMzMzMzMzMu7u8u7u7zMywB7y5AEvMzLAHu7MAS8zMsAe7YABLzMywB7oQAEvMzLAHtQAgS8zMsAeABkBLzMywByArQEvMzLACAItAS8zMsAAFu0BLzMywABq7QEvMzLAAe7tAS8zMsAS7y0BLzMy7u7zLu7vMzMzMzMzMzMz//wAAwQMAAMEDAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwIMAAMGDAAD//wAA"> | |
$now expression</h2> | |
<div ng-show="expr.indexOf('$') >= 0"> | |
<span ng-repeat="kw in keywords()"> | |
<button class="btn btn-sm btn-default" ng-click="append(kw)"> | |
{{ kw }} | |
</button> | |
</span> | |
</div> | |
<div class="row"> | |
<div class="col-xs-12 col-md-10"> | |
<div class="form-group has-feedback"> | |
<label>expression</label> | |
<input class="form-control" type="text" ng-model="expr"/> | |
<span class="glyphicon glyphicon-remove form-control-feedback" ng-click="expr=''"></span> | |
</div> | |
<pre ng-hide="!translated || translated == expr"> => {{ translated }}</pre> | |
<pre class="bg-warning">{{ evaluate(translated) }}</pre> | |
<div class="well"> | |
<h4>keywords summary</h4> | |
<div class="row form-group"> | |
<div class="col-md-2" ng-repeat="kw in 'At:,$at(Date?),$today(),$yesterday(),$tomorrow()'.split(',')"> | |
<span ng-class="$index && 'text-info'">{{ kw }}</span> | |
</div> | |
</div> | |
<div class="row form-group"> | |
<div class="col-md-2" ng-repeat="kw in 'method:,.period(interval?)'.split(',')"> | |
<span ng-class="$index && 'text-info '">{{ kw }}</span> | |
</div> | |
</div> | |
<div class="row form-group"> | |
<div class="col-md-2" ng-repeat="kw in 'Period:,$this(interval?),$last(interval?),$next(interval?),$since(at?),$until(at?)'.split(',')"> | |
<span ng-class="$index && 'text-warning '">{{ kw }}</span> | |
</div> | |
</div> | |
<div class="row form-group"> | |
<div class="col-md-2" ng-repeat="kw in 'method:,.from(at?),.till(at?),.begin(),.end()'.split(',')"> | |
<span ng-class="$index && 'text-warning'">{{ kw }}</span> | |
</div> | |
</div> | |
<div class="row form-group"> | |
<div class="col-md-2" ng-repeat="kw in 'interval:,day,week,month,quarter,year'.split(',')"> | |
<span ng-class="$index && 'text-danger'">{{ kw }}</span> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js"></script> | |
<script src="now.js"></script> | |
<script> | |
function nowCtrl($scope) { | |
$scope.keywords = function () { | |
if (!$scope.expr || $scope.expr.match(/\(\s*$/)) { | |
return ['$today()', '$yesterday()', '$tomorrow()', '$at( 31, 8, 2010 )', | |
'$this', '$next', '$last', '$since( ', '$until( ', ' )'] | |
} | |
if ($scope.expr.match(/(begin|end)\(\)$/)) { | |
return ['.period', ' )'] | |
} | |
if ($scope.expr.match(/(\$(since|until|this|next|last)|\.period)\(.*\)$/)) | |
return ['.begin()', '.end()', '.from( ', '.till( ', ' )'] | |
if ($scope.expr.match(/\)$/)) { | |
return ['.period', ' )'] | |
} | |
if ($scope.expr.match(/(\$(this|next|last)|\.period)$/)) { | |
return ['( year )', '(quarter)', '( month )', '( week )', '( day )' ] | |
} | |
return ['( ' ] | |
} | |
$scope.expr = "$today()" | |
$scope.append = function(kw) { | |
$scope.expr += kw | |
} | |
$scope.$watch('expr', function (nval){ | |
$scope.translated = $now.translator.executer('th')(nval) | |
}) | |
$scope.evaluate = function (expr) { | |
if (expr) { | |
try { | |
var answer = $now(expr) | |
if (angular.isFunction(answer)) | |
answer = 'method ' | |
return ' => ' + answer.toString() | |
} | |
catch (e) { return '** ' + e.message } | |
} | |
return expr | |
} | |
} | |
</script> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment