1
0
mirror of https://github.com/fspc/Yellow-Bike-Database.git synced 2025-04-04 09:33:24 -04:00

Compare commits

..

No commits in common. "devel" and "v1.0" have entirely different histories.
devel ... v1.0

744 changed files with 858 additions and 229040 deletions

15
.gitignore vendored
View File

@ -1,15 +0,0 @@
*~
*swp
csv/*
js/chosen
js/nouislider
CBDB/
php-console/
examples/cert.pem
Connections/local_configurations.php
js/PickMeUp-2.8.0/
json/shop.php
sql/populate-private.sql
stats/dhhr.php
temp/
test.php

View File

@ -1,6 +1,4 @@
<?php
// DO NOT EDIT - USE Connections/local_configurations instead
# FileName="Connection_php_mysql.htm"
# Type="MYSQL"
# HTTP="true"
@ -8,8 +6,5 @@ $hostname_YBDB = "enter_hostname";
$database_YBDB = "enter_schema";
$username_YBDB = "enter_username";
$password_YBDB = "enter_password";
if(file_exists( realpath($_SERVER["DOCUMENT_ROOT"]) . "/Connections/local_configurations.php")) {
require_once('local_configurations.php');
}
$YBDB = mysql_pconnect($hostname_YBDB, $username_YBDB, $password_YBDB) or trigger_error(mysql_error(),E_USER_ERROR);
$YBDB = mysql_pconnect($hostname_YBDB, $username_YBDB, $password_YBDB) or trigger_error(mysql_error(),E_USER_ERROR);
?>

View File

@ -1,10 +1,7 @@
<?php
require_once('YBDB.php');
require_once('YBDB.php');
// DO NOT EDIT - USE Connections/local_configurations.php instead with definitions between
// <?php (no space between ? and >) ? >
/*
Choose your timezone from http://php.net/manual/en/timezones.php
@ -18,139 +15,31 @@ require_once('YBDB.php');
Hawaii no DST ..... Pacific/Honolulu
*/
if( !defined( 'TIMEZONE' ) ) define("TIMEZONE", "America/New_York");
define("TIMEZONE", "America/New_York");
/***
DHCP
****/
// The public IP address of the device which has opened a shop determines the ownership of that shop.
// In that way, more than one shop can run without conflicting with each other from different locations.
// However, in some cases the IP changes frequently due to DHCP during a 24hr shop.
// Definitions:
// default (use full IP address assigned)
// or
// Enter the numbers that defines a Class (A|B|C) Network, eg. 73.79;
// 73.79 would match a Class B network with an IP range of 73.79.*.*
// For additional info, read https://www.webopedia.com/DidYouKnow/Internet/IPaddressing.asp
if( !defined( 'IP' ) ) define("IP", "default");
/*********
MEMBERSHIP
**********/
// Define when a volunteer becomes a member based hours and days for the calendar year vs a paid membership
// This can also be used as a metric.
/*
At Positive Spin
Actual memberships begin on the day they are purchased
Memberships - $60/year
Memberships include unlimited access to an available work stand during open shop hours and a 10% discount on new parts.
*/
// Needs to volunteer at least this amount of defined hours before being considered a member
// Note: used only as a metric for reports
if( !defined( 'MEMBERSHIP_HOURS' ) ) define("MEMBERSHIP_HOURS",8);
// Needs to volunteer at least this amount of defined hours before being considered a member
define("MEMBERSHIP_HOURS",8);
// Needs to volunteer at least this number of days before being considered a member
// Note: used only as a metric for reports
if( !defined( 'MEMBERSHIP_DAYS' ) ) define("MEMBERSHIP_DAYS",2);
define("MEMBERSHIP_DAYS",2);
// Define how long a patron remains a member if they purchase a membership.
if( !defined( 'PURCHASED_MEMBERSHIP_DAYS' ) ) define("PURCHASED_MEMBERSHIP_DAYS",365);
// Define discount for paid members (applies when volunteer benefits do not)
if( !defined( 'MEMBERSHIP_DISCOUNT' ) ) define("MEMBERSHIP_DISCOUNT",10); // PERCENTAGE
/*********
STAND TIME
**********/
// Determines the hourly cost for Stand Time (transaction_type_id)
if( !defined( 'STAND_TIME_HOURLY_RATE' ) ) define("STAND_TIME_HOURLY_RATE",10); // IN DOLLARS
// Define how much time over 1hr is allowed before charging for the next hour.
if( !defined( 'STAND_TIME_GRACE_PERIOD' ) ) define("STAND_TIME_GRACE_PERIOD",15); // IN MINUTES 1 - 59
// Define how many free days of stand time are allotted after purchase of a bike
if( !defined( 'FREE_STAND_TIME_PERIOD' ) ) define("FREE_STAND_TIME_PERIOD",30); // IN DAYS
/********************************
SWEAT EQUITY / VOLUNTEER BENEFITS
*********************************/
// For example:
// The settings below are specific to Positive Spin Policies
// Calendar Year = January 1 .. December 31 (366 for leap years)
/*
These hours can only be used to purchase used parts, bicycles and stand time.
Volunteers may only purchase one bike with volunteer hours per calendar year.
If you would like to spend more than $100 in volunteer hours during a calendar year,
75% of every dollar spent over $100 must be paid for with cash/credit card/check/etc
for volunteers who have volunteered fewer than 100 hours. For volunteers who have
donated more than 100 hours of their time in the past 365 days, this match can be reduced to 50%.
(Sweat Equity / Volunteer Benefits can't be combined with Membership Benefits.)
*/
if( !defined( 'SWEAT_EQUITY_LIMIT' ) ) define("SWEAT_EQUITY_LIMIT",100); // IN DOLLARS
if( !defined( 'MAX_BIKE_EARNED' ) ) define("MAX_BIKE_EARNED",1); // AMOUNT OF BIKES
if( !defined( 'VOLUNTEER_HOUR_VALUE' ) ) define("VOLUNTEER_HOUR_VALUE",8); // IN DOLLARS
if( !defined( 'VOLUNTEER_DISCOUNT' ) ) define("VOLUNTEER_DISCOUNT",25); // PERCENTAGE
if( !defined( 'SPECIAL_VOLUNTEER_HOURS_QUALIFICATION' ) ) define("SPECIAL_VOLUNTEER_HOURS_QUALIFICATION",100); // IN HOURS
if( !defined( 'SPECIAL_VOLUNTEER_DISCOUNT' ) ) define("SPECIAL_VOLUNTEER_DISCOUNT",50); // PERCENTAGE
// Customized sweat equity limit per contact_id
// e.g. for sweat equity limit of $200 for contact_id 500: array(500 => 200)
$custom_sweat_equity_limit = array();
// Determine if stand time behaviour will be based on the SWEAT_EQUITY_LIMIT with discounts applied,
// or 1 to 1 (1hr of volunteering === 1hr of free stand time) regardless of the SWEAT_EQUITY_LIMIT
define("REDEEM_ONE_TO_ONE", true);
// Map transaction_type_id for transaction to benefits;
// Bicycles and Stand Time are special transaction types for volunteers, but they should still be mapped if benefits are desired.
$transactions_with_volunteer_benefits = array( "Bicycles" => true,
"Stand Time" => true,
"Used Parts" => true
);
// Volunteer benefits take priority over membership benefits if patron qualifies for both
$transactions_with_membership_benefits = array( "Stand Time" => true,
"Used Parts" => true,
"New Parts" => true,
"Helmets" => true,
"Cargo Related" => true,
"Car Racks" => true
);
/*********
BANNED IDS
**********/
// Ban those pesky individuals who continually refuse to follow policies and safer space agreements by contact_id
$banned_individuals = array();
/************
PROBATION IDS
************/
// Put individuals under probation by contact_id. Probation could be used for a variety of scenarios,
// an individual who may potentially become banned, or who has been deemed as worthy of coming out of a ban,
// or someone who IOU's volunteer time for a bike they earned (generally, people should not be allowed to do
// this in the first place), etc.
$probation_individuals = array();
/*******
CONTACTS
********/
// Allow waiver (recommended) in Add/Edit Contacts; 1 = yes, 0 = no
// Waiver text may be modified in Connections/waiver.txt
if( !defined( 'WAIVER' ) ) define("WAIVER", 1);
if( !defined( 'WAIVER_LABEL' ) ) define("WAIVER_LABEL","Waiver of Liability and Safer Spaces Agreement:");
define("WAIVER", 1);
// Allow email_list option in Add/Edit Contacts; 1 = yes, 0 = no
if( !defined( 'EMAIL_LIST' ) ) define("EMAIL_LIST", 1);
define("EMAIL_LIST", 1);
// Define a url for an email connector that will connect to an email list.
// The url can be a server:port, program, etc.
@ -159,20 +48,20 @@ if( !defined( 'EMAIL_LIST' ) ) define("EMAIL_LIST", 1);
// The purpose of email connectors is to provide autonomy in the choice
// of email services and programs. E.g. mailman, googlegroups
// See ./examples for an example mailman connector
if( !defined( 'EMAIL_LIST_CONNECTOR' ) ) define("EMAIL_LIST_CONNECTOR","https://wvcompletestreets.org:9987");
define("EMAIL_LIST_CONNECTOR","https://wvcompletestreets.org:9987");
// Define the password that is unique to the connector.
if( !defined( 'EMAIL_LIST_CONNECTOR_PASSWORD' ) ) define("EMAIL_LIST_CONNECTOR_PASSWORD","bikebike");
define("EMAIL_LIST_CONNECTOR_PASSWORD","bikebike");
// If a self-signed ssl certificate that is associated with the email connector is being provided,
// designate an absolute path, if not, change to false.
if( !defined( 'SSL_CERTIFICATE' ) ) define("SSL_CERTIFICATE", "/var/www/html/examples/cert.pem");
define("SSL_CERTIFICATE", "/var/www/html/examples/cert.pem");
//// "Volunteer Interest" form ////
if( !defined( 'VOLUNTEER_INTEREST_FORM' ) ) define("VOLUNTEER_INTEREST_FORM", true);
define("VOLUNTEER_INTEREST_FORM", true);
// Form name
if( !defined( 'VOLUNTEER_INTEREST_FORM_NAME' ) ) define("VOLUNTEER_INTEREST_FORM_NAME","Volunteer Interests");
define("VOLUNTEER_INTEREST_FORM_NAME","Volunteer Interests");
// NOTE: Introductory text can be modified in Connections/volunteer_interest_form_introduction.txt
@ -194,7 +83,7 @@ $volunteer_interests = array(
);
// Provide a comment box - true of false
if( !defined( 'VOLUNTEER_INTEREST_COMMENTS' ) ) define("VOLUNTEER_INTEREST_COMMENTS", true);
define("VOLUNTEER_INTEREST_COMMENTS", true);
// NOTE: The 2 variables ($volunteer_interest_changename & $volunteer_interests_deletename)
// below allow you to change or delete an interest.
@ -227,40 +116,37 @@ TRANSACTIONS
************/
// User defined constants - read sql/populate.sql for an explanation
if( !defined( 'STORAGE_PERIOD' ) ) define("STORAGE_PERIOD", 14);
if( !defined( 'ACCOUNTING_GROUP' ) ) define("ACCOUNTING_GROUP", "Sales");
if( !defined( 'DEFAULT_TRANSACTION_TYPE' ) ) define("DEFAULT_TRANSACTION_TYPE", "Sale - Used Parts");
define("STORAGE_PERIOD", 14);
define("ACCOUNTING_GROUP", "Sales");
define("DEFAULT_TRANSACTION_TYPE", "Sale - Used Parts");
// shop_user_role
if( !defined( 'DEFAULT_SHOP_USER' ) ) define("DEFAULT_SHOP_USER", "Stand Time");
define("DEFAULT_SHOP_USER", "Personal");
/* Change Fund - A specific amount of money for the purpose of making change.
The amount on hand should remain the same at all times;
therefore a change funds does not require replenishment.
*/
if( !defined( 'CHANGE_FUND' ) ) define("CHANGE_FUND", 20);
define("CHANGE_FUND", 20);
// How many hours should the shop be open from the time a person logins? Hours display in pulldown in shop_log.php
// No overtime for volunteers. :)
// shop will be current shop for the 24hr day yyyy-mm-dd (currently no check for hrs, only date)
if( !defined( 'SHOP_HOURS_LENGTH' ) ) define("SHOP_HOURS_LENGTH", 10);
define("SHOP_HOURS_LENGTH", 10);
// What minute interval should be displayed for list_time()? In other words, the time_in and time_out pulldown lists.
// choose an interval that is divisible by 60 minutes, 1, 5, 15, 30 etc.
if( !defined( 'LIST_MINUTE_INTERVAL' ) ) define("LIST_MINUTE_INTERVAL", 1);
/* If you elect to keep records for non-shop hours, decide which shop should be used for that purpose.
The first shop created, 1, makes sense. A link will show in start_shop.php.
If you do not want this functionality at all, choose 0.
*/
if( !defined( 'NONSHOP' ) ) define("NONSHOP", 0);
define("NONSHOP", 0);
// How many transactions do you want shown by default
if( !defined( 'NUMBER_OF_TRANSACTIONS' ) ) define("NUMBER_OF_TRANSACTIONS", 11);
define("NUMBER_OF_TRANSACTIONS", 11);
// Define csv directory (see directions below for creating it)
if( !defined( 'CSV_DIRECTORY' ) ) define("CSV_DIRECTORY","csv");
define("CSV_DIRECTORY","csv");
// Make a directory to store csv accounting files. Currently used for GnuCash format.
// Assuming the root of the website, and directory is called csv, and a Debian-based distribution:
@ -270,7 +156,7 @@ if( !defined( 'CSV_DIRECTORY' ) ) define("CSV_DIRECTORY","csv");
// Define array mapping for Accounts. Usually Asset Accounts since Income is generally the main type of transaction.
// Currently there are four types of accounts with checking and credit being supported (working): checking, credit, account_receivable, donation
// Currently four types of accounts are supported: checking, credit, account_receivable, donation
// checking/credit = transaction has been 1) paid and is 2) cash & check [checking] or a credit card [credit] and 3) deposited
// note: checking type may include $0 transactions, e.g. earn-a-bike
// account_receivable = there is an 1). account receivable invoice and it has been 2) paid and 3) deposited
@ -294,79 +180,24 @@ $gnucash_accounts = array( "Assets:Current Assets:Checking Account" => "checking
// Note: Remote shops function independently via their IP identification.
//
// Normally, you will want this set at 0.
if( !defined( 'SHOW_SHOP_ID' ) ) define('SHOW_SHOP_ID',0);
/*************
ETHERPAD LITE
**************/
// Allow comments/feedback/notes to be added per individual_history_log in reports,
// and globally in shop_log. An etherpad host has to be defined for this to work.
// See wiki for instructions on how to setup an etherpad docker instance or just go to
// https://github.com/fspc/etherpad-and-draw-node-alpine
//
// prefix allows you to set a prefix to the name of the autogenerated padId:
// etherpad = prefix + "pad_contact_id_" + contact_id;
// etherpad_global = prefix_ + "global_pad"
// See https://github.com/ether/etherpad-lite-jquery-plugin for information about other configurations.
$etherpad = array(
"host" => "",
"userName" => "PositiveSpin",
"noColors" => true,
"height" => "75%",
"plugins" => array()
);
$etherpad_global = array(
"host" => "",
"userName" => "PositiveSpin",
"noColors" => true,
"height" => "100%",
"plugins" => array()
);
// END OF USER DEFINED CONFIGURATIONS
if(file_exists( realpath($_SERVER["DOCUMENT_ROOT"]) . "/Connections/local_configurations.php")) {
require('local_configurations.php');
}
define('SHOW_SHOP_ID',0);
// other constants
if( !defined( 'PAGE_START_SHOP' ) ) define("PAGE_START_SHOP", "/start_shop.php");
if( !defined( 'PAGE_SHOP_LOG' ) ) define("PAGE_SHOP_LOG", "/shop_log.php");
if( !defined( 'PAGE_EDIT_CONTACT' ) ) define("PAGE_EDIT_CONTACT", "/contact_add_edit.php");
if( !defined( 'PAGE_SELECT_CONTACT' ) ) define("PAGE_SELECT_CONTACT", "/contact_add_edit_select.php");
if( !defined( 'PAGE_SHOP_LOG_DELETE_VISIT' ) ) define("PAGE_SHOP_LOG_DELETE_VISIT", "/shop_log_delete_shopvisitid.php");
if( !defined( 'INDIVIDUAL_HOURS_LOG' ) ) define("INDIVIDUAL_HOURS_LOG", "/individual_hours_log.php");
if( !defined( 'INDIVIDUAL_HISTORY_LOG' ) ) define("INDIVIDUAL_HISTORY_LOG", "/individual_history_log.php");
if( !defined( 'PAGE_SALE_LOG' ) ) define("PAGE_SALE_LOG", "/transaction_log.php");
if( !defined( 'PAGE_EDIT_LOCATION' ) ) define("PAGE_EDIT_LOCATION", "/location_add_edit.php");
if( !defined( 'PAGE_SELECT_LOCATION' ) ) define("PAGE_SELECT_LOCATION", "/location_add_edit_select.php");
define("PAGE_START_SHOP", "/start_shop.php");
define("PAGE_SHOP_LOG", "/shop_log.php");
define("PAGE_EDIT_CONTACT", "/contact_add_edit.php");
define("PAGE_SELECT_CONTACT", "/contact_add_edit_select.php");
define("PAGE_SHOP_LOG_DELETE_VISIT", "/shop_log_delete_shopvisitid.php");
define("INDIVIDUAL_HOURS_LOG", "/individual_hours_log.php");
define("INDIVIDUAL_HISTORY_LOG", "/individual_history_log.php");
define("PAGE_SALE_LOG", "/transaction_log.php");
define("PAGE_EDIT_LOCATION", "/location_add_edit.php");
define("PAGE_SELECT_LOCATION", "/location_add_edit_select.php");
// Highlight search results in transaction_log
function highlightKeywords($text, $keyword) {
$wordsAry = explode(" ", $keyword);
$wordsCount = count($wordsAry);
// Using REGEXP, this removes regex from search
$find = array('/[\*\.\$\^\?\+\[\]\|\(\)\,\{\}\:\\\]/');
$replace = array('');
for($i=0;$i<$wordsCount;$i++) {
$wordsAry[$i] = preg_replace($find, $replace, $wordsAry[$i]);
$highlighted_text = "<span style='color:black; background:#ffeb3bc7; box-shadow:2px 0 #ffeb3bc7, -2px 0 0 #ffeb3bc7; padding: 0px 0;'>$wordsAry[$i]</span>";
$text = str_ireplace($wordsAry[$i], $highlighted_text, $text);
//$text = str_replace($wordsAry[$i], $highlighted_text, $text);
}
return $text;
}
//This is a general function to generate the contents of a list box based on a MySQL query. All necessary parameters for the query are passed
function generate_list($querySQL,$list_value,$list_text, $form_name, $default_value, $color)
function generate_list($querySQL,$list_value,$list_text, $form_name, $default_value)
{
global $database_YBDB, $YBDB;
mysql_select_db($database_YBDB, $YBDB);
@ -387,8 +218,7 @@ function generate_list($querySQL,$list_value,$list_text, $form_name, $default_va
if( $default_value == $row_recordset[$list_value]){
$default_delimiter = 'selected="selected"';
} else { $default_delimiter = '';}
echo '<option style="color:' . $color . ';" value="' . $row_recordset[$list_value] . '" ' . $default_delimiter . '>' .
$row_recordset[$list_text] . '</option>';
echo '<option value="' . $row_recordset[$list_value] . '"' . $default_delimiter .'>' . $row_recordset[$list_text] . '</option>\n';
} while ($row_recordset = mysql_fetch_assoc($recordset));
$rows = mysql_num_rows($recordset);
if($rows > 0) {
@ -402,7 +232,7 @@ function generate_list($querySQL,$list_value,$list_text, $form_name, $default_va
}
function list_CurrentShopUsers($form_name = "none", $default_value = "", $max_name_length = 20 ){
function list_CurrentShopUsers($form_name = "none", $default_value = "", $max_name_length = 20){
$current_shop = current_shop_by_ip();
$querySQL = "SELECT DISTINCT full_name, shop_hours.contact_id ,hidden FROM shop_hours
LEFT JOIN (SELECT LEFT(CONCAT(last_name, ', ', first_name, ' ',middle_initial),$max_name_length)
@ -418,7 +248,7 @@ function list_CurrentShopUsers($form_name = "none", $default_value = "", $max_na
// Drop down list queries - functions below could be made into one function if query, $list_value and $list_text parameters were passed
// Function provides specific MySQL parameters to the function that generates the list box code
function list_contacts($form_name = "none", $default_value = "", $max_name_length = 30 ){
function list_contacts($form_name = "none", $default_value = "", $max_name_length = 20){
$querySQL = "SELECT LEFT(CONCAT(last_name, ', ', first_name, ' ',middle_initial),$max_name_length) AS full_name, contact_id, hidden FROM contacts WHERE (first_name <> '' OR last_name <> '') AND hidden <> 1 ORDER BY last_name, first_name, middle_initial";
$list_value = "contact_id";
$list_text = "full_name";
@ -426,7 +256,7 @@ function list_contacts($form_name = "none", $default_value = "", $max_name_lengt
}
function list_coordinators($form_name = "none", $default_value = "", $max_name_length = 20 ){
function list_coordinators($form_name = "none", $default_value = "", $max_name_length = 20){
$querySQL = "SELECT LEFT(CONCAT(last_name, ', ', first_name, ' ',middle_initial),40) AS full_name, contacts.contact_id, hidden, shop_user_role FROM contacts
LEFT JOIN (SELECT contact_id, shop_user_role, sales FROM shop_hours
LEFT JOIN shop_user_roles ON shop_user_roles.shop_user_role_id = shop_hours.shop_user_role
@ -439,7 +269,7 @@ ORDER BY last_name, first_name, middle_initial;";
generate_list($querySQL,$list_value,$list_text,$form_name, $default_value);
}
function list_current_coordinators($form_name = "none", $default_value = "", $max_name_length = 20 ){
function list_current_coordinators($form_name = "none", $default_value = "", $max_name_length = 20){
$current_shop = current_shop_by_ip();
$querySQL = "SELECT LEFT(CONCAT(last_name, ', ', first_name, ' ',middle_initial),40) AS full_name, contacts.contact_id, hidden, shop_user_role FROM contacts
LEFT JOIN (SELECT contact_id, shop_user_role, sales FROM shop_hours LEFT JOIN shop_user_roles ON shop_user_roles.shop_user_role_id = shop_hours.shop_user_role WHERE shop_user_roles.sales = 1 AND shop_id = $current_shop GROUP BY contact_id) as shop_hours ON shop_hours.contact_id=contacts.contact_id
@ -493,7 +323,7 @@ function list_shop_locations($form_name = "none", $default_value = ""){
// Function provides specific MySQL parameters to the function that generates the list box code
function list_transaction_types($form_name = "none", $default_value = ""){
$querySQL = "SELECT transaction_type_id FROM transaction_types WHERE active = 1 ORDER BY rank + 0;";
$querySQL = "SELECT transaction_type_id FROM transaction_types ORDER BY rank + 0;";
$list_value = "transaction_type_id";
$list_text = "transaction_type_id";
generate_list($querySQL,$list_value,$list_text,$form_name, $default_value);
@ -506,19 +336,7 @@ function list_donation_types($form_name = "none", $default_value = ""){
generate_list($querySQL,$list_value,$list_text,$form_name, $default_value);
}
// now combined with list_CurrentShopUsers
function list_donation_locations($form_name = "none", $default_value = "", $max_name_length = 20 ){
$current_shop = current_shop_by_ip();
$querySQL = "SELECT DISTINCT full_name, shop_hours.contact_id ,hidden FROM shop_hours
LEFT JOIN (SELECT LEFT(CONCAT(last_name, ', ', first_name, ' ',middle_initial),$max_name_length)
AS full_name, contact_id, hidden FROM contacts) as contacts ON shop_hours.contact_id=contacts.contact_id
WHERE shop_hours.shop_id = $current_shop
ORDER BY full_name;";
$list_value = "contact_id";
$list_text = "full_name";
$color = "blue";
generate_list($querySQL,$list_value,$list_text,$form_name, $default_value, $color);
function list_donation_locations($form_name = "none", $default_value = "", $max_name_length = 20){
$querySQL = "SELECT LEFT(CONCAT(last_name, ', ', first_name, ' ',middle_initial),$max_name_length) AS full_name,
location_name, contact_id FROM contacts WHERE location_type IS NULL ORDER BY location_name";
$list_value = "contact_id";
@ -550,28 +368,6 @@ function currency_format($value, $places = 2){
echo "$ ";
if(is_null($value)) echo number_format(0,$places);
else echo number_format($value,$places);
}
// function to set time zone in mysql.
// Time zones must be setup in mysql for this to work: mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
set_time_zone();
function set_time_zone() {
global $database_YBDB, $YBDB;
mysql_select_db($database_YBDB, $YBDB);
$query = "SET time_zone='" . TIMEZONE . "';";
$Recordset1 = mysql_query($query, $YBDB);
$error = "<p>YBDB relies heavily on accurate time calculations.</p>" .
"<p>Make sure you have installed time zone support for mysql or mariadb as explained " .
'<a href="https://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html">here</a>.<br> ' .
"In GNU/Linux you run the mysql_tzinfo_to_sql program from the commandline:</p>" .
"<code>mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql.</code>";
if(!$Recordset1) {
echo mysql_error() . "\n" . $error;
}
}
//function to convert server time to local time. To be used by all other current date / time requests.
@ -666,54 +462,13 @@ function list_15min($start_time, $start_offset_min, $form_name, $hours, $display
echo "</select>";
}
// replacement for the hardwired list_min15()
// $start_time = time_in
// $start_offset_min = 0
// $form_name = time_out
// $hours = 0
// $display_elapsed_hours = 1
// $default_value = $row_Recordset1['time_out']
function list_min($start_time, $start_offset_min, $form_name, $hours, $display_elapsed_hours, $default_value, $min=15){
list($date, $time) = split('[ ]', $start_time);
list($Y, $m, $d) = split('[-]', $date);
list($H, $i, $s) = split('[:]', $time);
//$min_inc is used to round round to nearest 15min
$min_inc = $min - intval($i) % $min;
$start_time = mktime($H, $i, 0, $m,$d,$Y) + $min_inc * 60 + $start_offset_min*60 ;
//$start_time_am = date("H:i a", mktime($H, $i, $s, 1,1,2000));
echo "<select name=\"$form_name\">";
if($default_value <> "none" && $default_value <> "0000-00-00 00:00:00"){
//if a default value is requested it is displayed at the top of the list
echo '<option value="' . $default_value . '">' . date_to_time($default_value) . '</option>';
}
if (current_date() == $date) {
// if current date does not match shop date current date will no be an option
echo '<option value="current_time">Current Time</option>';
echo '<option value="current_time">--------------------</option>';
}
for ($j = 0; $j <= $hours* (60 / $min); $j++) {
$list_time = $start_time + $j*$min*60;
if ($display_elapsed_hours == 1) {
$elapsed_hours = " &nbsp;&nbsp;[" . date("G:i",mktime(0, 0, 0, 1,1,2000) + ($j+1)*$min*60). " hrs]";
} else {
$elapsed_hours = "";
}
$list_time_return = date("Y-m-d H:i:s", $list_time);
$list_time_display = date("g:i a", $list_time). $elapsed_hours;
echo "<option value=\"". $list_time_return ."\">" . $list_time_display . "</option>";
}
echo "</select>";
}
function list_time($time_list_start, $time, $form_name = "none", $start_offset_min = 0 , $display_elapsed_hours = 0, $default_value = "none", $hours_listed = 8, $et = ""){
if($time == "0000-00-00 00:00:00" || $default_value <> "none"){
//create drop down
//echo list_15min("0000-00-00 01:20:00", 4, "frm_time_out" );
echo list_min($time_list_start,$start_offset_min, $form_name, $hours_listed, $display_elapsed_hours, $default_value, LIST_MINUTE_INTERVAL);
echo list_15min($time_list_start,$start_offset_min, $form_name, $hours_listed, $display_elapsed_hours, $default_value );
} else {
//list time out
echo date_to_time($time) . "&nbsp;&nbsp;[{$et} hrs]";
@ -723,7 +478,7 @@ function list_time($time_list_start, $time, $form_name = "none", $start_offset_m
function sign_out($time_out, $first_name){
if($time_out == "0000-00-00 00:00:00"){
echo '<input type="submit" name="submit" class="sign_out" value="Sign Out: ' . $first_name . '" />';
echo '<input type="submit" name="submit" value="Sign Out: ' . $first_name . '" />';
}
}
@ -766,13 +521,6 @@ function dateandtimein($date, $time){
// Drop-Down lists
function list_contacts_select_contact($form_name = "contact_id", $default_value = "")
{
echo "<select name={$form_name} class='yb_standard'>\n";
echo "<option value='everyone'>Everyone</option>\n";
list_contacts("none",$default_value);
echo "</select>\n";
}
function list_contacts_edit_add($form_name = "contact_id", $default_value = "")
{
@ -835,7 +583,7 @@ function list_contacts_YBP_project($form_name = "contact_id", $default_value = "
echo "<option value='no_selection'>--------------</option>";
list_donation_locations("none",$default_value);
echo "</select>\n";
}
}
function list_donation_locations_edit_add($form_name = "contact_id", $default_value = "")
{
@ -884,27 +632,17 @@ function max_shop_id(){
return $row_Recordset1['shop_id'];
}
// Is there currently a shop?
// curl https://ipinfo.io/ip
// Is there currently a shop?
function current_shop_by_ip(){
global $database_YBDB, $YBDB;
$IP = $_SERVER['REMOTE_ADDR'];
$current_date = current_date();
mysql_select_db($database_YBDB, $YBDB);
if( IP == "default") {
$query_Recordset1 = "SELECT shop_id FROM shops WHERE ip_address = '{$IP}' AND date REGEXP '^{$current_date} ' ORDER BY shop_id DESC;";
$Recordset1 = mysql_query($query_Recordset1, $YBDB) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
} else {
$ip = IP;
$query_Recordset1 = "SELECT shop_id FROM shops WHERE ip_address REGEXP '^{$ip}' AND date REGEXP '^{$current_date} ' ORDER BY shop_id DESC;";
$Recordset1 = mysql_query($query_Recordset1, $YBDB) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
}
mysql_select_db($database_YBDB, $YBDB);
$query_Recordset1 = "SELECT shop_id FROM shops WHERE ip_address = '{$IP}' AND date = '{$current_date}' ORDER BY shop_id DESC;";
$Recordset1 = mysql_query($query_Recordset1, $YBDB) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
return $row_Recordset1['shop_id'];
}

View File

@ -1,9 +1,7 @@
<h2>Waiver of Liability</h2>
<p>I, and my heirs, in consideration of my participation with Positive Spin
I, and my heirs, in consideration of my participation with Positive Spin
Incorporated hereby release Positive Spin Incorporated, its officers, directors
and agents, and any other people officially connected with this organization,
from any and all liability for damage to or loss of personal property, sickness,
or injury from whatever source, legal entanglements, imprisonment, death, or
from any and all liability for damage to or loss of personal property, sickness, or injury from whatever source, legal entanglements, imprisonment, death, or
loss of money, which might occur while participating in said
event/activity/class. Specifically, I release Positive Spin Incorporated from
any liability or responsibility for my personal well-being, condition of tools
@ -17,17 +15,3 @@ participation in this program is strictly voluntary and I freely chose to
participate. I understand Positive Spin Incorporated does not provide medical
coverage for me. I verify that I will be responsible for any medical costs I
incur as a result of my participation.
</p>
<h2>Positive Spin's Safer Space Agreement</h2>
<p>As visitors or volunteers at Positive Spin, we agree to maintain a safer space.
A safer space is an inclusive environment in which everyone can feel welcome,
where no one is shown favoritism, and everyone can feel safe from oppressive,
discriminatory and hateful behavior and language. This includes, but is not limited to,
physical and verbal abuse, sexual harassment, or discrimination based on race, culture,
age, sex, gender identity, sexual orientation, religion, political beliefs, physical characteristics, disabilities, social or economic background.
</p>
<p>If you feel anyone is not abiding by this agreement, please tell a volunteer or
constructively confront the individual yourself. If behavior that violates this agreement persists,
it can potentially lead to being banned from Positive Spin.
</p>

674
LICENSE
View File

@ -1,674 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

View File

@ -1,14 +1,7 @@
# Yellow-Bike-Database
#Yellow-Bike-Database
Yellow Bike Database (YBDB) is a specialized software for Community Bike Shops (CBS). It is one of the most, if not the most mature solutions currently available for CBSes. Originally, developed for the Austin Yellow Bike Project, this software fork has taken on a life of its own, borrowing on the simplicity of the original software but adding many enhancements to lessen the learning curve, and bring it into the 21st century!
**Development Branch of Yellow Bike Project Hours and Transaction Database**
In 2014, Positive Spin of Morgantown, WV in the USA was looking for a way to replace the messy, ineffective, and highly error-prone paper based record system used by the shop. Docker images were created to
[test out and explore](https://bike.bikelover.org) what few projects could be found at the time. YBDB stood out, not because of its appearance, but because of how closely its approach mirrored the paper based recording system used by Positive Spin.
The basic objective here since Yellow Bike Project does not host their own version control repository, at least until recently (on December 29, 2014 a repository was [setup](https://github.com/nwilkes2/CommunityBikeShopDB)), is to keep Main pristine, and do development work here, on the assumption that they may want to commit new changes. This branch is being used by [YBDB](https://github.com/fspc/ybdb), the BikeBike Docker image.
It was a successful choice, and continues to improve! You can read more about the FLOSS process at [bikecollectives.org in this presentation](https://www.bikecollectives.org/wiki/images/1/1e/2017-SE-BikeBike-Libre-slides.pdf).
There is a demo at [https://ybdb.bikelover.org](https://ybdb.bikelover.org). Try it out!
Docker Development is at [https://github.com/fspc/ybdb](https://github.com/fspc/ybdb).
Check out the [Wiki](https://github.com/fspc/Yellow-Bike-Database/wiki)!
There is a demo at [http://ybdb.wvcompletestreets.org](http://ybdb.wvcompletestreets.org). Try it out!

View File

@ -10,7 +10,6 @@ $handler->start();*/
$waiver = WAIVER;
$waiver_label = WAIVER_LABEL;
$email_list = EMAIL_LIST;
$volunteer_interest_form = VOLUNTEER_INTEREST_FORM;
$volunteer_interest_form_name = VOLUNTEER_INTEREST_FORM_NAME;
@ -103,12 +102,11 @@ if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$query = 'SELECT MAX(contact_id) as contact_id FROM contacts;';
$sql = mysql_query($query, $YBDB) or die(mysql_error());
$result = mysql_fetch_assoc($sql);
$submitted_contact_id = $result['contact_id'] + 1;
$current_date_time = GetSQLValueString('current_time', "date");
$submitted_contact_id = $result['contact_id'] + 1;
// Insert new contact information into a new record
$updateSQL = 'INSERT INTO contacts (contact_id, first_name, middle_initial, last_name, email,' .
' phone, address1, address2, city, state, DOB, receive_newsletter, waiver, pass, zip, date_created)' .
' phone, address1, address2, city, state, DOB, receive_newsletter, waiver, pass, zip)' .
' VALUES (' .
$submitted_contact_id . ', ' .
'"' . $_POST['first_name'] . '", ' .
@ -124,8 +122,7 @@ if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
'"' . $_POST['email_list'] . '", ' .
1 . ', ' .
'ENCODE("' . $_POST['password'] . '",' . '"yblcatx"), ' .
'"' . $_POST['zip'] . '", ' .
$current_date_time . ');';
'"' . $_POST['zip'] . '");';
} else {
// Update existing contact record
@ -273,8 +270,7 @@ $totalRows_Recordset1 = mysql_num_rows($Recordset1);
<td><label class="contacts">Name:</label></td>
<td><input id="first_name" type="text" name="first_name" value="<?php echo $row_Recordset1['first_name']; ?>" size="32">
<span id="first_name_error"></span>
<input id="middle_initial" name="middle_initial" type="text" value="<?php echo $row_Recordset1['middle_initial']; ?>" size="1" maxlength="1">
<span id="middle_initial_error"></span>
<input name="middle_initial" type="text" value="<?php echo $row_Recordset1['middle_initial']; ?>" size="1" maxlength="1">
<input id="last_name" type="text" name="last_name" value="<?php echo $row_Recordset1['last_name']; ?>" size="32">
<span id="last_name_error"></span>
</td>
@ -333,14 +329,14 @@ $totalRows_Recordset1 = mysql_num_rows($Recordset1);
</tr>
<?php if($waiver) { ?>
<tr>
<td><label class="contacts"><?php echo $waiver_label; ?></label></td>
<td><label class="contacts">Waiver of Liability:</label></td>
<td> <div id="waiver">
<p>
<?php include("Connections/waiver.txt"); ?>
<br />
</p>
</div><input id="waiver_checkbox" name="waiver_checkbox" type="checkbox"> I agree <span id="waiver_error"></span>
<input type="submit" id="waiver_button" value="Show Complete Text" \>
<input type="submit" id="waiver_button" value="Show Waiver" \>
</td>
</tr>

View File

@ -96,5 +96,3 @@ if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
</tr>
</table>
<?php include("include_footer.html"); ?>

View File

@ -41,8 +41,7 @@
font-weight: bold;
}
.yb_heading3red {
//color: #FF0000;
color: blue;
color: #FF0000;
background-color: #FFFFFF;
font-weight: bold;
}
@ -79,20 +78,4 @@
.yb_standardred {
color: #FF0000;
background-color: #FFFFFF;
}
.footer {
text-align: center;
margin: 20px 0 5px;
font-size: 85%;
color: #999;
}
.footer-line a {
text-decoration: none;
color: #cc3334;
}
.footer-line a:hover {
text-decoration: underline;
}

View File

@ -1,86 +0,0 @@
/**
* @package PickMeUp - jQuery datepicker plugin
* @author Nazar Mokrynskyi <nazar@mokrynskyi.com>
* @author Stefan Petre <www.eyecon.ro>
* @copyright Copyright (c) 2013-2015, Nazar Mokrynskyi
* @copyright Copyright (c) 2008-2009, Stefan Petre
* @license MIT License, see license.txt
*/
.pickmeup {
background: #000;
border-radius: 0.4em;
-moz-box-sizing: content-box;
box-sizing: content-box;
display: none;
position: absolute; }
.pickmeup * {
-moz-box-sizing: border-box;
box-sizing: border-box; }
.pickmeup .pmu-instance {
display: inline-block;
height: 13.8em;
padding: .5em;
text-align: center;
width: 15em; }
.pickmeup .pmu-instance .pmu-button {
color: #eee;
cursor: pointer;
outline: none;
text-decoration: none; }
.pickmeup .pmu-instance .pmu-today {
background: #17384d;
color: #88c5eb; }
.pickmeup .pmu-instance .pmu-button:hover {
background: "transparent";
color: #88c5eb; }
.pickmeup .pmu-instance .pmu-not-in-month {
color: #666; }
.pickmeup .pmu-instance .pmu-disabled,
.pickmeup .pmu-instance .pmu-disabled:hover {
color: #333;
cursor: default; }
.pickmeup .pmu-instance .pmu-selected {
background: #136a9f;
color: #eee; }
.pickmeup .pmu-instance .pmu-not-in-month.pmu-selected {
background: #17384d; }
.pickmeup .pmu-instance nav {
color: #eee;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
line-height: 2em; }
.pickmeup .pmu-instance nav *:first-child :hover {
color: #88c5eb; }
.pickmeup .pmu-instance nav .pmu-prev,
.pickmeup .pmu-instance nav .pmu-next {
display: none;
height: 2em;
width: 1em; }
.pickmeup .pmu-instance nav .pmu-month {
width: 14em; }
.pickmeup .pmu-instance .pmu-years *,
.pickmeup .pmu-instance .pmu-months * {
display: inline-block;
line-height: 3.6em;
width: 3.5em; }
.pickmeup .pmu-instance .pmu-day-of-week {
color: #999;
cursor: default; }
.pickmeup .pmu-instance .pmu-day-of-week *,
.pickmeup .pmu-instance .pmu-days * {
display: inline-block;
line-height: 1.5em;
width: 2em; }
.pickmeup .pmu-instance .pmu-day-of-week * {
line-height: 1.8em; }
.pickmeup .pmu-instance:first-child .pmu-prev,
.pickmeup .pmu-instance:last-child .pmu-next {
display: block; }
.pickmeup .pmu-instance:first-child .pmu-month,
.pickmeup .pmu-instance:last-child .pmu-month {
width: 13em; }
.pickmeup .pmu-instance:first-child:last-child .pmu-month {
width: 12em; }
.pickmeup:not(.pmu-view-days) .pmu-days, .pickmeup:not(.pmu-view-days) .pmu-day-of-week, .pickmeup:not(.pmu-view-months) .pmu-months, .pickmeup:not(.pmu-view-years) .pmu-years {
display: none; }

View File

@ -1,69 +0,0 @@
.stats td {
padding: 0px 10px 0px 10px;
}
#status_totals, #community_service_hours, #shops, #members, #dhhr_hours{
height: 36px;
width: 98px;
font-size: x-large;
color:green;
}
.stats-clear:after,.stats-clear:before,.stats-bar {
content:"";
display:table;
clear:both;
}
.nextprev a {
font-size:17px;
border:1px solid #cccccc;
}
.nextprev a:link,.nextprev a:visited {
background-color:#ffffff;
color:#000000;
}
.nextprev a.stats-right {
background-color:#4CAF50;
color:#ffffff;
border-color:#4CAF50
}
.stats-btn,.stats-button {
border:none;
display:inline-block;
outline:0;
padding:8px 16px;
vertical-align:middle;
overflow:hidden;
text-decoration:none;
color:inherit;
background-color:inherit;
text-align:center;
cursor:pointer;
white-space:nowrap
}
.stats-btn:hover {
box-shadow:0 8px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19);
}
.stats-btn,.stats-button {
-webkit-touch-callout:none;
-webkit-user-select:none;
-khtml-user-select:none;
-moz-user-select:none;
-ms-user-select:none;
user-select:none;
}
.stats-disabled,.stats-btn:disabled,.stats-button:disabled {
cursor:not-allowed;opacity:0.3;
}
.stats-disabled *,:disabled *{
pointer-events:none;
}
.stats-btn.stats-disabled:hover,.stats-btn:disabled:hover {
box-shadow:none;
}
/*
.stats-left{float:left!important}
.stats-right{float:right!important}
*/

View File

@ -1,574 +0,0 @@
/* Tabulator v3.3.1 (c) Oliver Folkerd */
.tabulator {
position: relative;
background-color: #fff;
overflow: hidden;
font-size: 14px;
text-align: left;
width: 100%;
max-width: 100%;
margin-bottom: 20px;
-ms-transform: translatez(0);
transform: translatez(0);
}
.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableHolder .tabulator-table {
min-width: 100%;
}
.tabulator.tabulator-block-select {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.tabulator .tabulator-header {
position: relative;
box-sizing: border-box;
width: 100%;
border-bottom: 2px solid #ddd;
background-color: #fff;
font-weight: bold;
white-space: nowrap;
overflow: hidden;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
}
.tabulator .tabulator-header .tabulator-col {
display: inline-block;
position: relative;
box-sizing: border-box;
background-color: #fff;
text-align: left;
vertical-align: bottom;
overflow: hidden;
}
.tabulator .tabulator-header .tabulator-col.tabulator-moving {
position: absolute;
border: 1px solid #ddd;
background: #e6e6e6;
pointer-events: none;
}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content {
position: relative;
padding: 8px;
}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {
box-sizing: border-box;
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
vertical-align: bottom;
}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {
box-sizing: border-box;
width: 100%;
border: 1px solid #999;
padding: 1px;
background: #fff;
}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {
display: inline-block;
position: absolute;
top: 14px;
right: 8px;
width: 0;
height: 0;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 6px solid #bbb;
}
.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {
position: relative;
display: -ms-flexbox;
display: flex;
border-top: 1px solid #ddd;
overflow: hidden;
}
.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child {
margin-right: -1px;
}
.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev {
display: none;
}
.tabulator .tabulator-header .tabulator-col.ui-sortable-helper {
position: absolute;
background-color: #e6e6e6 !important;
border: 1px solid #ddd;
}
.tabulator .tabulator-header .tabulator-col .tabulator-header-filter {
position: relative;
box-sizing: border-box;
margin-top: 2px;
width: 100%;
text-align: center;
}
.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {
height: auto !important;
}
.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {
margin-top: 3px;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {
padding-right: 25px;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover {
cursor: pointer;
background-color: #e6e6e6;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-arrow {
border-top: none;
border-bottom: 6px solid #bbb;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-arrow {
border-top: none;
border-bottom: 6px solid #666;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-arrow {
border-top: 6px solid #666;
border-bottom: none;
}
.tabulator .tabulator-header .tabulator-frozen {
display: inline-block;
position: absolute;
z-index: 10;
}
.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {
border-right: 2px solid #ddd;
}
.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {
border-left: 2px solid #ddd;
}
.tabulator .tabulator-header .tabulator-calcs-holder {
box-sizing: border-box;
width: 100%;
background: white !important;
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
overflow: hidden;
}
.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {
background: white !important;
}
.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
display: none;
}
.tabulator .tabulator-tableHolder {
position: relative;
width: 100%;
white-space: nowrap;
overflow: auto;
-webkit-overflow-scrolling: touch;
}
.tabulator .tabulator-tableHolder:focus {
outline: none;
}
.tabulator .tabulator-tableHolder .tabulator-placeholder {
position: absolute;
box-sizing: border-box;
display: -ms-flexbox;
display: flex;
-ms-flex-align: center;
align-items: center;
top: 0;
left: 0;
height: 100%;
width: 100%;
}
.tabulator .tabulator-tableHolder .tabulator-placeholder span {
display: inline-block;
margin: 0 auto;
padding: 10px;
color: #000;
font-weight: bold;
font-size: 20px;
}
.tabulator .tabulator-tableHolder .tabulator-table {
position: relative;
display: inline-block;
background-color: #fff;
white-space: nowrap;
overflow: visible;
}
.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs {
font-weight: bold;
background: #ececec !important;
}
.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {
border-bottom: 2px solid #ddd;
}
.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {
border-top: 2px solid #ddd;
}
.tabulator .tabulator-row {
position: relative;
box-sizing: border-box;
min-height: 30px;
background-color: #fff;
border-bottom: 1px solid #ddd;
}
.tabulator .tabulator-row.tabulator-selectable:hover {
background-color: #f5f5f5 !important;
cursor: pointer;
}
.tabulator .tabulator-row.tabulator-selected {
background-color: #9ABCEA;
}
.tabulator .tabulator-row.tabulator-selected:hover {
background-color: #769BCC;
cursor: pointer;
}
.tabulator .tabulator-row.tabulator-moving {
position: absolute;
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
pointer-events: none !important;
z-index: 15;
}
.tabulator .tabulator-row .tabulator-frozen {
display: inline-block;
position: absolute;
background-color: inherit;
z-index: 10;
}
.tabulator .tabulator-row .tabulator-frozen.tabulator-frozen-left {
border-right: 2px solid #ddd;
}
.tabulator .tabulator-row .tabulator-frozen.tabulator-frozen-right {
border-left: 2px solid #ddd;
}
.tabulator .tabulator-row .tabulator-cell {
display: inline-block;
position: relative;
box-sizing: border-box;
padding: 8px;
vertical-align: middle;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.tabulator .tabulator-row .tabulator-cell:last-of-type {
border-right: none;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-editing {
border: 1px solid #1D68CD;
padding: 0;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator .tabulator-row .tabulator-cell.tabulator-editing select {
border: 1px;
background: transparent;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-validation-fail {
border: 1px solid #dd0000;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator .tabulator-row .tabulator-cell.tabulator-validation-fail select {
border: 1px;
background: transparent;
color: #dd0000;
}
.tabulator .tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev {
display: none;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-row-handle {
display: -ms-inline-flexbox;
display: inline-flex;
-ms-flex-align: center;
align-items: center;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {
width: 80%;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {
width: 100%;
height: 3px;
margin: 2px 10% 0 10%;
background: #666;
}
.tabulator .tabulator-row.tabulator-group {
box-sizing: border-box;
border-bottom: 1px solid #999;
border-right: 1px solid #ddd;
border-top: 1px solid #999;
padding: 5px;
padding-left: 10px;
background: #fafafa;
font-weight: bold;
min-width: 100%;
}
.tabulator .tabulator-row.tabulator-group:hover {
cursor: pointer;
background-color: rgba(0, 0, 0, 0.1);
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {
margin-right: 10px;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-top: 6px solid #666;
border-bottom: 0;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow {
margin-left: 20px;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow {
margin-left: 40px;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow {
margin-left: 60px;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow {
margin-left: 80px;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow {
margin-left: 1000px;
}
.tabulator .tabulator-row.tabulator-group .tabulator-arrow {
display: inline-block;
width: 0;
height: 0;
margin-right: 16px;
border-top: 6px solid transparent;
border-bottom: 6px solid transparent;
border-right: 0;
border-left: 6px solid #666;
vertical-align: middle;
}
.tabulator .tabulator-row.tabulator-group span {
margin-left: 10px;
color: #666;
}
.tabulator .tabulator-col-resize-handle {
position: absolute;
right: 0;
top: 0;
bottom: 0;
width: 5px;
}
.tabulator .tabulator-col-resize-handle.prev {
left: 0;
right: auto;
}
.tabulator .tabulator-col-resize-handle:hover {
cursor: ew-resize;
}
.tabulator .tabulator-footer {
padding: 5px 10px;
border-top: 2px solid #ddd;
text-align: right;
font-weight: bold;
white-space: nowrap;
-ms-user-select: none;
user-select: none;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
}
.tabulator .tabulator-footer .tabulator-calcs-holder {
box-sizing: border-box;
width: calc("100% + 20px");
margin: -5px -10px 5px -10px;
text-align: left;
background: white !important;
border-bottom: 1px solid #ddd;
border-top: 1px solid #ddd;
overflow: hidden;
}
.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {
background: white !important;
}
.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
display: none;
}
.tabulator .tabulator-footer .tabulator-calcs-holder:only-child {
margin-bottom: -5px;
border-bottom: none;
}
.tabulator .tabulator-footer .tabulator-pages {
margin: 0 7px;
}
.tabulator .tabulator-footer .tabulator-page {
display: inline-block;
margin: 0 2px;
border: 1px solid #ddd;
border-radius: 3px;
padding: 2px 5px;
background: rgba(255, 255, 255, 0.2);
font-family: inherit;
font-weight: inherit;
font-size: inherit;
}
.tabulator .tabulator-footer .tabulator-page.active {
color: #d00;
}
.tabulator .tabulator-footer .tabulator-page:disabled {
opacity: .5;
}
.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover {
cursor: pointer;
background: rgba(0, 0, 0, 0.2);
color: #fff;
}
.tabulator .tablulator-loader {
position: absolute;
display: -ms-flexbox;
display: flex;
-ms-flex-align: center;
align-items: center;
top: 0;
left: 0;
z-index: 100;
height: 100%;
width: 100%;
background: rgba(0, 0, 0, 0.4);
text-align: center;
}
.tabulator .tablulator-loader .tabulator-loader-msg {
display: inline-block;
margin: 0 auto;
padding: 10px 20px;
border-radius: 10px;
background: #fff;
font-weight: bold;
font-size: 16px;
}
.tabulator .tablulator-loader .tabulator-loader-msg.tabulator-loading {
border: 4px solid #333;
color: #000;
}
.tabulator .tablulator-loader .tabulator-loader-msg.tabulator-error {
border: 4px solid #D00;
color: #590000;
}
.tabulator.table-striped .tabulator-row:nth-child(even) {
background-color: #f9f9f9;
}
.tabulator.table-bordered {
border: 1px solid #ddd;
}
.tabulator.table-bordered .tabulator-header .tabulator-col {
border-right: 1px solid #ddd;
}
.tabulator.table-bordered .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell {
border-right: 1px solid #ddd;
}
.tabulator.table-condensed .tabulator-header .tabulator-col .tabulator-col-content {
padding: 5px;
}
.tabulator.table-condensed .tabulator-tableHolder .tabulator-table .tabulator-row {
min-height: 24px;
}
.tabulator.table-condensed .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell {
padding: 5px;
}
.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.active {
background: #f5f5f5 !important;
}
.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.success {
background: #dff0d8 !important;
}
.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.info {
background: #d9edf7 !important;
}
.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.warning {
background: #fcf8e3 !important;
}
.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.danger {
background: #f2dede !important;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,535 +0,0 @@
/* Tabulator v3.3.1 (c) Oliver Folkerd */
.tabulator {
position: relative;
border: 1px solid #999;
background-color: #888;
font-size: 14px;
text-align: left;
overflow: hidden;
-ms-transform: translatez(0);
transform: translatez(0);
}
.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableHolder .tabulator-table {
min-width: 100%;
}
.tabulator.tabulator-block-select {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.tabulator .tabulator-header {
position: relative;
box-sizing: border-box;
width: 100%;
border-bottom: 1px solid #999;
background-color: #e6e6e6;
color: #555;
font-weight: bold;
white-space: nowrap;
overflow: hidden;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
}
.tabulator .tabulator-header .tabulator-col {
display: inline-block;
position: relative;
box-sizing: border-box;
border-right: 1px solid #aaa;
background: #e6e6e6;
text-align: left;
vertical-align: bottom;
overflow: hidden;
}
.tabulator .tabulator-header .tabulator-col.tabulator-moving {
position: absolute;
border: 1px solid #999;
background: #cdcdcd;
pointer-events: none;
}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content {
position: relative;
padding: 4px;
}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {
box-sizing: border-box;
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
vertical-align: bottom;
}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {
box-sizing: border-box;
width: 100%;
border: 1px solid #999;
padding: 1px;
background: #fff;
}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {
display: inline-block;
position: absolute;
top: 9px;
right: 8px;
width: 0;
height: 0;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 6px solid #bbb;
}
.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {
position: relative;
display: -ms-flexbox;
display: flex;
border-top: 1px solid #aaa;
overflow: hidden;
}
.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child {
margin-right: -1px;
}
.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev {
display: none;
}
.tabulator .tabulator-header .tabulator-col.ui-sortable-helper {
position: absolute;
background-color: #e6e6e6 !important;
border: 1px solid #aaa;
}
.tabulator .tabulator-header .tabulator-col .tabulator-header-filter {
position: relative;
box-sizing: border-box;
margin-top: 2px;
width: 100%;
text-align: center;
}
.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {
height: auto !important;
}
.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {
margin-top: 3px;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {
padding-right: 25px;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover {
cursor: pointer;
background-color: #cdcdcd;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-arrow {
border-top: none;
border-bottom: 6px solid #bbb;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-arrow {
border-top: none;
border-bottom: 6px solid #666;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-arrow {
border-top: 6px solid #666;
border-bottom: none;
}
.tabulator .tabulator-header .tabulator-frozen {
display: inline-block;
position: absolute;
z-index: 10;
}
.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {
border-right: 2px solid #aaa;
}
.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {
border-left: 2px solid #aaa;
}
.tabulator .tabulator-header .tabulator-calcs-holder {
box-sizing: border-box;
min-width: 200%;
background: #f3f3f3 !important;
border-top: 1px solid #aaa;
border-bottom: 1px solid #aaa;
overflow: hidden;
}
.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {
background: #f3f3f3 !important;
}
.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
display: none;
}
.tabulator .tabulator-tableHolder {
position: relative;
width: 100%;
white-space: nowrap;
overflow: auto;
-webkit-overflow-scrolling: touch;
}
.tabulator .tabulator-tableHolder:focus {
outline: none;
}
.tabulator .tabulator-tableHolder .tabulator-placeholder {
position: absolute;
box-sizing: border-box;
display: -ms-flexbox;
display: flex;
-ms-flex-align: center;
align-items: center;
top: 0;
left: 0;
height: 100%;
width: 100%;
}
.tabulator .tabulator-tableHolder .tabulator-placeholder span {
display: inline-block;
margin: 0 auto;
padding: 10px;
color: #ccc;
font-weight: bold;
font-size: 20px;
}
.tabulator .tabulator-tableHolder .tabulator-table {
position: relative;
display: inline-block;
background-color: #fff;
white-space: nowrap;
overflow: visible;
color: #333;
}
.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs {
font-weight: bold;
background: #e2e2e2 !important;
}
.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {
border-bottom: 2px solid #aaa;
}
.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {
border-top: 2px solid #aaa;
}
.tabulator .tabulator-row {
position: relative;
box-sizing: border-box;
min-height: 22px;
background-color: #fff;
}
.tabulator .tabulator-row.tabulator-row-even {
background-color: #EFEFEF;
}
.tabulator .tabulator-row.tabulator-selectable:hover {
background-color: #bbb;
cursor: pointer;
}
.tabulator .tabulator-row.tabulator-selected {
background-color: #9ABCEA;
}
.tabulator .tabulator-row.tabulator-selected:hover {
background-color: #769BCC;
cursor: pointer;
}
.tabulator .tabulator-row.tabulator-row-moving {
border: 1px solid #000;
background: #fff;
}
.tabulator .tabulator-row.tabulator-moving {
position: absolute;
border-top: 1px solid #aaa;
border-bottom: 1px solid #aaa;
pointer-events: none;
z-index: 15;
}
.tabulator .tabulator-row .tabulator-frozen {
display: inline-block;
position: absolute;
background-color: inherit;
z-index: 10;
}
.tabulator .tabulator-row .tabulator-frozen.tabulator-frozen-left {
border-right: 2px solid #aaa;
}
.tabulator .tabulator-row .tabulator-frozen.tabulator-frozen-right {
border-left: 2px solid #aaa;
}
.tabulator .tabulator-row .tabulator-cell {
display: inline-block;
position: relative;
box-sizing: border-box;
padding: 4px;
border-right: 1px solid #aaa;
vertical-align: middle;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-editing {
border: 1px solid #1D68CD;
padding: 0;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator .tabulator-row .tabulator-cell.tabulator-editing select {
border: 1px;
background: transparent;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-validation-fail {
border: 1px solid #dd0000;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator .tabulator-row .tabulator-cell.tabulator-validation-fail select {
border: 1px;
background: transparent;
color: #dd0000;
}
.tabulator .tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev {
display: none;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-row-handle {
display: -ms-inline-flexbox;
display: inline-flex;
-ms-flex-align: center;
align-items: center;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {
width: 80%;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {
width: 100%;
height: 3px;
margin: 2px 10% 0 10%;
background: #666;
}
.tabulator .tabulator-row.tabulator-group {
box-sizing: border-box;
border-bottom: 1px solid #999;
border-right: 1px solid #aaa;
border-top: 1px solid #999;
padding: 5px;
padding-left: 10px;
background: #ccc;
font-weight: bold;
min-width: 100%;
}
.tabulator .tabulator-row.tabulator-group:hover {
cursor: pointer;
background-color: rgba(0, 0, 0, 0.1);
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {
margin-right: 10px;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-top: 6px solid #666;
border-bottom: 0;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow {
margin-left: 20px;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow {
margin-left: 40px;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow {
margin-left: 60px;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow {
margin-left: 80px;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow {
margin-left: 1000px;
}
.tabulator .tabulator-row.tabulator-group .tabulator-arrow {
display: inline-block;
width: 0;
height: 0;
margin-right: 16px;
border-top: 6px solid transparent;
border-bottom: 6px solid transparent;
border-right: 0;
border-left: 6px solid #666;
vertical-align: middle;
}
.tabulator .tabulator-row.tabulator-group span {
margin-left: 10px;
color: #d00;
}
.tabulator .tabulator-footer {
padding: 5px 10px;
border-top: 1px solid #999;
background-color: #e6e6e6;
text-align: right;
color: #555;
font-weight: bold;
white-space: nowrap;
-ms-user-select: none;
user-select: none;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
}
.tabulator .tabulator-footer .tabulator-calcs-holder {
box-sizing: border-box;
width: calc("100% + 20px");
margin: -5px -10px 5px -10px;
text-align: left;
background: #f3f3f3 !important;
border-bottom: 1px solid #aaa;
border-top: 1px solid #aaa;
overflow: hidden;
}
.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {
background: #f3f3f3 !important;
}
.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
display: none;
}
.tabulator .tabulator-footer .tabulator-calcs-holder:only-child {
margin-bottom: -5px;
border-bottom: none;
}
.tabulator .tabulator-footer .tabulator-pages {
margin: 0 7px;
}
.tabulator .tabulator-footer .tabulator-page {
display: inline-block;
margin: 0 2px;
padding: 2px 5px;
border: 1px solid #aaa;
border-radius: 3px;
background: rgba(255, 255, 255, 0.2);
color: #555;
font-family: inherit;
font-weight: inherit;
font-size: inherit;
}
.tabulator .tabulator-footer .tabulator-page.active {
color: #d00;
}
.tabulator .tabulator-footer .tabulator-page:disabled {
opacity: .5;
}
.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover {
cursor: pointer;
background: rgba(0, 0, 0, 0.2);
color: #fff;
}
.tabulator .tabulator-col-resize-handle {
position: absolute;
right: 0;
top: 0;
bottom: 0;
width: 5px;
}
.tabulator .tabulator-col-resize-handle.prev {
left: 0;
right: auto;
}
.tabulator .tabulator-col-resize-handle:hover {
cursor: ew-resize;
}
.tabulator .tablulator-loader {
position: absolute;
display: -ms-flexbox;
display: flex;
-ms-flex-align: center;
align-items: center;
top: 0;
left: 0;
z-index: 100;
height: 100%;
width: 100%;
background: rgba(0, 0, 0, 0.4);
text-align: center;
}
.tabulator .tablulator-loader .tabulator-loader-msg {
display: inline-block;
margin: 0 auto;
padding: 10px 20px;
border-radius: 10px;
background: #fff;
font-weight: bold;
font-size: 16px;
}
.tabulator .tablulator-loader .tabulator-loader-msg.tabulator-loading {
border: 4px solid #333;
color: #000;
}
.tabulator .tablulator-loader .tabulator-loader-msg.tabulator-error {
border: 4px solid #D00;
color: #590000;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,539 +0,0 @@
/* Tabulator v3.3.1 (c) Oliver Folkerd */
.tabulator {
position: relative;
border: 1px solid #333;
background-color: #222;
overflow: hidden;
font-size: 14px;
text-align: left;
-ms-transform: translatez(0);
transform: translatez(0);
}
.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableHolder .tabulator-table {
min-width: 100%;
}
.tabulator.tabulator-block-select {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.tabulator .tabulator-header {
position: relative;
box-sizing: border-box;
width: 100%;
border-bottom: 1px solid #999;
background-color: #333;
color: #fff;
font-weight: bold;
white-space: nowrap;
overflow: hidden;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
}
.tabulator .tabulator-header .tabulator-col {
display: inline-block;
position: relative;
box-sizing: border-box;
border-right: 1px solid #aaa;
background-color: #333;
text-align: left;
vertical-align: bottom;
overflow: hidden;
}
.tabulator .tabulator-header .tabulator-col.tabulator-moving {
position: absolute;
border: 1px solid #999;
background: #1a1a1a;
pointer-events: none;
}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content {
position: relative;
padding: 4px;
}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {
box-sizing: border-box;
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
vertical-align: bottom;
}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {
box-sizing: border-box;
width: 100%;
border: 1px solid #999;
padding: 1px;
background: #444;
color: #fff;
}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {
display: inline-block;
position: absolute;
top: 9px;
right: 8px;
width: 0;
height: 0;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 6px solid #bbb;
}
.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {
position: relative;
display: -ms-flexbox;
display: flex;
border-top: 1px solid #aaa;
overflow: hidden;
}
.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child {
margin-right: -1px;
}
.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev {
display: none;
}
.tabulator .tabulator-header .tabulator-col.ui-sortable-helper {
position: absolute;
background-color: #1a1a1a !important;
border: 1px solid #aaa;
}
.tabulator .tabulator-header .tabulator-col .tabulator-header-filter {
position: relative;
box-sizing: border-box;
margin-top: 2px;
width: 100%;
text-align: center;
}
.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {
height: auto !important;
}
.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {
margin-top: 3px;
}
.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input, .tabulator .tabulator-header .tabulator-col .tabulator-header-filter select {
border: 1px solid #999;
background: #444;
color: #fff;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {
padding-right: 25px;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover {
cursor: pointer;
background-color: #1a1a1a;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-arrow {
border-top: none;
border-bottom: 6px solid #bbb;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-arrow {
border-top: none;
border-bottom: 6px solid #666;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-arrow {
border-top: 6px solid #666;
border-bottom: none;
}
.tabulator .tabulator-header .tabulator-frozen {
display: inline-block;
position: absolute;
z-index: 10;
}
.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {
border-right: 2px solid #888;
}
.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {
border-left: 2px solid #888;
}
.tabulator .tabulator-header .tabulator-calcs-holder {
box-sizing: border-box;
min-width: 200%;
background: #1a1a1a !important;
border-top: 1px solid #888;
border-bottom: 1px solid #aaa;
overflow: hidden;
}
.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {
background: #1a1a1a !important;
}
.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
display: none;
}
.tabulator .tabulator-tableHolder {
position: relative;
width: 100%;
white-space: nowrap;
overflow: auto;
-webkit-overflow-scrolling: touch;
}
.tabulator .tabulator-tableHolder:focus {
outline: none;
}
.tabulator .tabulator-tableHolder .tabulator-placeholder {
position: absolute;
box-sizing: border-box;
display: -ms-flexbox;
display: flex;
-ms-flex-align: center;
align-items: center;
top: 0;
left: 0;
height: 100%;
width: 100%;
}
.tabulator .tabulator-tableHolder .tabulator-placeholder span {
display: inline-block;
margin: 0 auto;
padding: 10px;
color: #eee;
font-weight: bold;
font-size: 20px;
}
.tabulator .tabulator-tableHolder .tabulator-table {
position: relative;
display: inline-block;
background-color: #666;
white-space: nowrap;
overflow: visible;
color: #fff;
}
.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs {
font-weight: bold;
background: #373737 !important;
}
.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {
border-bottom: 2px solid #888;
}
.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {
border-top: 2px solid #888;
}
.tabulator .tabulator-row {
position: relative;
box-sizing: border-box;
min-height: 22px;
background-color: #666;
}
.tabulator .tabulator-row:nth-child(even) {
background-color: #444;
}
.tabulator .tabulator-row.tabulator-selectable:hover {
background-color: #999;
cursor: pointer;
}
.tabulator .tabulator-row.tabulator-selected {
background-color: #000;
}
.tabulator .tabulator-row.tabulator-selected:hover {
background-color: #888;
cursor: pointer;
}
.tabulator .tabulator-row.tabulator-moving {
position: absolute;
border-top: 1px solid #888;
border-bottom: 1px solid #888;
pointer-events: none !important;
z-index: 15;
}
.tabulator .tabulator-row .tabulator-frozen {
display: inline-block;
position: absolute;
background-color: inherit;
z-index: 10;
}
.tabulator .tabulator-row .tabulator-frozen.tabulator-frozen-left {
border-right: 2px solid #888;
}
.tabulator .tabulator-row .tabulator-frozen.tabulator-frozen-right {
border-left: 2px solid #888;
}
.tabulator .tabulator-row .tabulator-cell {
display: inline-block;
position: relative;
box-sizing: border-box;
padding: 4px;
border-right: 1px solid #888;
vertical-align: middle;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-editing {
border: 1px solid #999;
padding: 0;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator .tabulator-row .tabulator-cell.tabulator-editing select {
border: 1px;
background: transparent;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-validation-fail {
border: 1px solid #dd0000;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator .tabulator-row .tabulator-cell.tabulator-validation-fail select {
border: 1px;
background: transparent;
color: #dd0000;
}
.tabulator .tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev {
display: none;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-row-handle {
display: -ms-inline-flexbox;
display: inline-flex;
-ms-flex-align: center;
align-items: center;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {
width: 80%;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {
width: 100%;
height: 3px;
margin: 2px 10% 0 10%;
background: #666;
}
.tabulator .tabulator-row.tabulator-group {
box-sizing: border-box;
border-bottom: 1px solid #999;
border-right: 1px solid #888;
border-top: 1px solid #999;
padding: 5px;
padding-left: 10px;
background: #ccc;
font-weight: bold;
color: #333;
min-width: 100%;
}
.tabulator .tabulator-row.tabulator-group:hover {
cursor: pointer;
background-color: rgba(0, 0, 0, 0.1);
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {
margin-right: 10px;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-top: 6px solid #666;
border-bottom: 0;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow {
margin-left: 20px;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow {
margin-left: 40px;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow {
margin-left: 60px;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow {
margin-left: 80px;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow {
margin-left: 1000px;
}
.tabulator .tabulator-row.tabulator-group .tabulator-arrow {
display: inline-block;
width: 0;
height: 0;
margin-right: 16px;
border-top: 6px solid transparent;
border-bottom: 6px solid transparent;
border-right: 0;
border-left: 6px solid #666;
vertical-align: middle;
}
.tabulator .tabulator-row.tabulator-group span {
margin-left: 10px;
color: #666;
}
.tabulator .tabulator-col-resize-handle {
position: absolute;
right: 0;
top: 0;
bottom: 0;
width: 5px;
}
.tabulator .tabulator-col-resize-handle.prev {
left: 0;
right: auto;
}
.tabulator .tabulator-col-resize-handle:hover {
cursor: ew-resize;
}
.tabulator .tabulator-footer {
padding: 5px 10px;
border-top: 1px solid #999;
background-color: #333;
text-align: right;
color: #333;
font-weight: bold;
white-space: nowrap;
-ms-user-select: none;
user-select: none;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
}
.tabulator .tabulator-footer .tabulator-calcs-holder {
box-sizing: border-box;
width: calc("100% + 20px");
margin: -5px -10px 5px -10px;
text-align: left;
background: #262626 !important;
border-bottom: 1px solid #888;
border-top: 1px solid #888;
overflow: hidden;
}
.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {
background: #262626 !important;
color: #fff;
}
.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
display: none;
}
.tabulator .tabulator-footer .tabulator-calcs-holder:only-child {
margin-bottom: -5px;
border-bottom: none;
}
.tabulator .tabulator-footer .tabulator-pages {
margin: 0 7px;
}
.tabulator .tabulator-footer .tabulator-page {
display: inline-block;
margin: 0 2px;
border: 1px solid #aaa;
border-radius: 3px;
padding: 2px 5px;
background: rgba(255, 255, 255, 0.2);
color: #333;
font-family: inherit;
font-weight: inherit;
font-size: inherit;
}
.tabulator .tabulator-footer .tabulator-page.active {
color: #fff;
}
.tabulator .tabulator-footer .tabulator-page:disabled {
opacity: .5;
}
.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover {
cursor: pointer;
background: rgba(0, 0, 0, 0.2);
color: #fff;
}
.tabulator .tablulator-loader {
position: absolute;
display: -ms-flexbox;
display: flex;
-ms-flex-align: center;
align-items: center;
top: 0;
left: 0;
z-index: 100;
height: 100%;
width: 100%;
background: rgba(0, 0, 0, 0.4);
text-align: center;
}
.tabulator .tablulator-loader .tabulator-loader-msg {
display: inline-block;
margin: 0 auto;
padding: 10px 20px;
border-radius: 10px;
background: #fff;
font-weight: bold;
font-size: 16px;
}
.tabulator .tablulator-loader .tabulator-loader-msg.tabulator-loading {
border: 4px solid #333;
color: #000;
}
.tabulator .tablulator-loader .tabulator-loader-msg.tabulator-error {
border: 4px solid #D00;
color: #590000;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,562 +0,0 @@
/* Tabulator v3.3.1 (c) Oliver Folkerd */
.tabulator {
position: relative;
border: 1px solid #fff;
background-color: #fff;
overflow: hidden;
font-size: 16px;
text-align: left;
-ms-transform: translatez(0);
transform: translatez(0);
}
.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableHolder .tabulator-table {
min-width: 100%;
}
.tabulator.tabulator-block-select {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.tabulator .tabulator-header {
position: relative;
box-sizing: border-box;
width: 100%;
border-bottom: 3px solid #3759D7;
margin-bottom: 4px;
background-color: #fff;
color: #3759D7;
font-weight: bold;
white-space: nowrap;
overflow: hidden;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
padding-left: 10px;
font-size: 1.1em;
}
.tabulator .tabulator-header .tabulator-col {
display: inline-block;
position: relative;
box-sizing: border-box;
border-right: 2px solid #fff;
background-color: #fff;
text-align: left;
vertical-align: bottom;
overflow: hidden;
}
.tabulator .tabulator-header .tabulator-col.tabulator-moving {
position: absolute;
border: 1px solid #3759D7;
background: #e6e6e6;
pointer-events: none;
}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content {
position: relative;
padding: 4px;
}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {
box-sizing: border-box;
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
vertical-align: bottom;
}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {
box-sizing: border-box;
width: 100%;
border: 1px solid #3759D7;
padding: 1px;
background: #fff;
font-size: 1em;
color: #3759D7;
}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {
display: inline-block;
position: absolute;
top: 9px;
right: 8px;
width: 0;
height: 0;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 6px solid #b7c3f1;
}
.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {
position: relative;
display: -ms-flexbox;
display: flex;
border-top: 2px solid #3759D7;
overflow: hidden;
}
.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child {
margin-right: -1px;
}
.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev {
display: none;
}
.tabulator .tabulator-header .tabulator-col.ui-sortable-helper {
position: absolute;
background-color: #e6e6e6 !important;
border: 1px solid #fff;
}
.tabulator .tabulator-header .tabulator-col .tabulator-header-filter {
position: relative;
box-sizing: border-box;
margin-top: 2px;
width: 100%;
text-align: center;
}
.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {
height: auto !important;
}
.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {
margin-top: 3px;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {
padding-right: 25px;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover {
cursor: pointer;
background-color: #e6e6e6;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-arrow {
border-top: none;
border-bottom: 6px solid #b7c3f1;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-arrow {
border-top: none;
border-bottom: 6px solid #3759D7;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-arrow {
border-top: 6px solid #3759D7;
border-bottom: none;
}
.tabulator .tabulator-header .tabulator-frozen {
display: inline-block;
position: absolute;
z-index: 10;
}
.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {
padding-left: 10px;
border-right: 2px solid #fff;
}
.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {
border-left: 2px solid #fff;
}
.tabulator .tabulator-header .tabulator-calcs-holder {
box-sizing: border-box;
min-width: 200%;
border-top: 2px solid #3759D7 !important;
background: white !important;
border-top: 1px solid #fff;
border-bottom: 1px solid #fff;
overflow: hidden;
}
.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {
padding-left: 0 !important;
background: white !important;
}
.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
display: none;
}
.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-cell {
background: none;
}
.tabulator .tabulator-tableHolder {
position: relative;
width: 100%;
white-space: nowrap;
overflow: auto;
-webkit-overflow-scrolling: touch;
}
.tabulator .tabulator-tableHolder:focus {
outline: none;
}
.tabulator .tabulator-tableHolder .tabulator-placeholder {
position: absolute;
box-sizing: border-box;
display: -ms-flexbox;
display: flex;
-ms-flex-align: center;
align-items: center;
top: 0;
left: 0;
height: 100%;
width: 100%;
}
.tabulator .tabulator-tableHolder .tabulator-placeholder span {
display: inline-block;
margin: 0 auto;
padding: 10px;
color: #3759D7;
font-weight: bold;
font-size: 20px;
}
.tabulator .tabulator-tableHolder .tabulator-table {
position: relative;
display: inline-block;
background-color: #f3f3f3;
white-space: nowrap;
overflow: visible;
color: #333;
}
.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs {
font-weight: bold;
background: #f2f2f2 !important;
}
.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {
border-bottom: 2px solid #3759D7;
}
.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {
border-top: 2px solid #3759D7;
}
.tabulator .tabulator-row {
position: relative;
box-sizing: border-box;
box-sizing: border-box;
min-height: 24px;
background-color: #3759D7;
padding-left: 10px !important;
margin-bottom: 2px;
}
.tabulator .tabulator-row:nth-child(even) {
background-color: #627ce0;
}
.tabulator .tabulator-row:nth-child(even) .tabulator-cell {
background-color: #fff;
}
.tabulator .tabulator-row.tabulator-selectable:hover {
cursor: pointer;
}
.tabulator .tabulator-row.tabulator-selectable:hover .tabulator-cell {
background-color: #bbb;
}
.tabulator .tabulator-row.tabulator-selected .tabulator-cell {
background-color: #9ABCEA;
}
.tabulator .tabulator-row.tabulator-selected:hover .tabulator-cell {
background-color: #769BCC;
cursor: pointer;
}
.tabulator .tabulator-row.tabulator-moving {
position: absolute;
border-top: 1px solid #fff;
border-bottom: 1px solid #fff;
pointer-events: none !important;
z-index: 15;
}
.tabulator .tabulator-row .tabulator-frozen {
display: inline-block;
position: absolute;
background-color: inherit;
z-index: 10;
}
.tabulator .tabulator-row .tabulator-frozen.tabulator-frozen-left {
padding-left: 10px;
border-right: 2px solid #fff;
}
.tabulator .tabulator-row .tabulator-frozen.tabulator-frozen-right {
border-left: 2px solid #fff;
}
.tabulator .tabulator-row .tabulator-cell {
display: inline-block;
position: relative;
box-sizing: border-box;
padding: 6px 4px;
border-right: 2px solid #fff;
vertical-align: middle;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
background-color: #f3f3f3;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-editing {
border: 1px solid #1D68CD;
padding: 0;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator .tabulator-row .tabulator-cell.tabulator-editing select {
border: 1px;
background: transparent;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-validation-fail {
border: 1px solid #dd0000;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator .tabulator-row .tabulator-cell.tabulator-validation-fail select {
border: 1px;
background: transparent;
color: #dd0000;
}
.tabulator .tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev {
display: none;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-row-handle {
display: -ms-inline-flexbox;
display: inline-flex;
-ms-flex-align: center;
align-items: center;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {
width: 80%;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {
width: 100%;
height: 3px;
margin: 2px 10% 0 10%;
background: #666;
}
.tabulator .tabulator-row.tabulator-group {
box-sizing: border-box;
border-bottom: 2px solid #3759D7;
border-top: 2px solid #3759D7;
padding: 5px;
padding-left: 10px;
background: #8ca0e8;
font-weight: bold;
color: fff;
margin-bottom: 2px;
min-width: 100%;
}
.tabulator .tabulator-row.tabulator-group:hover {
cursor: pointer;
background-color: rgba(0, 0, 0, 0.1);
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {
margin-right: 10px;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-top: 6px solid #3759D7;
border-bottom: 0;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow {
margin-left: 20px;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow {
margin-left: 40px;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow {
margin-left: 60px;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow {
margin-left: 80px;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow {
margin-left: 1000px;
}
.tabulator .tabulator-row.tabulator-group .tabulator-arrow {
display: inline-block;
width: 0;
height: 0;
margin-right: 16px;
border-top: 6px solid transparent;
border-bottom: 6px solid transparent;
border-right: 0;
border-left: 6px solid #3759D7;
vertical-align: middle;
}
.tabulator .tabulator-row.tabulator-group span {
margin-left: 10px;
color: #3759D7;
}
.tabulator .tabulator-col-resize-handle {
position: absolute;
right: 0;
top: 0;
bottom: 0;
width: 5px;
}
.tabulator .tabulator-col-resize-handle.prev {
left: 0;
right: auto;
}
.tabulator .tabulator-col-resize-handle:hover {
cursor: ew-resize;
}
.tabulator .tabulator-footer {
padding: 5px 10px;
border-top: 1px solid #999;
background-color: #fff;
text-align: right;
color: #3759D7;
font-weight: bold;
white-space: nowrap;
-ms-user-select: none;
user-select: none;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
}
.tabulator .tabulator-footer .tabulator-calcs-holder {
box-sizing: border-box;
width: calc("100% + 20px");
margin: -5px -10px 5px -10px;
text-align: left;
background: white !important;
border-top: 3px solid #3759D7 !important;
border-bottom: 2px solid #3759D7 !important;
border-bottom: 1px solid #fff;
border-top: 1px solid #fff;
overflow: hidden;
}
.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {
background: white !important;
}
.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
display: none;
}
.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-cell {
background: none;
}
.tabulator .tabulator-footer .tabulator-calcs-holder:only-child {
margin-bottom: -5px;
border-bottom: none;
border-bottom: none !important;
}
.tabulator .tabulator-footer .tabulator-pages {
margin: 0 7px;
}
.tabulator .tabulator-footer .tabulator-page {
display: inline-block;
margin: 0 2px;
border: 1px solid #aaa;
border-radius: 3px;
padding: 2px 5px;
background: rgba(255, 255, 255, 0.2);
color: #3759D7;
font-family: inherit;
font-weight: inherit;
font-size: inherit;
}
.tabulator .tabulator-footer .tabulator-page.active {
color: #3759D7;
}
.tabulator .tabulator-footer .tabulator-page:disabled {
opacity: .5;
}
.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover {
cursor: pointer;
background: rgba(0, 0, 0, 0.2);
color: #fff;
}
.tabulator .tablulator-loader {
position: absolute;
display: -ms-flexbox;
display: flex;
-ms-flex-align: center;
align-items: center;
top: 0;
left: 0;
z-index: 100;
height: 100%;
width: 100%;
background: rgba(0, 0, 0, 0.4);
text-align: center;
}
.tabulator .tablulator-loader .tabulator-loader-msg {
display: inline-block;
margin: 0 auto;
padding: 10px 20px;
border-radius: 10px;
background: #fff;
font-weight: bold;
font-size: 16px;
}
.tabulator .tablulator-loader .tabulator-loader-msg.tabulator-loading {
border: 4px solid #333;
color: #000;
}
.tabulator .tablulator-loader .tabulator-loader-msg.tabulator-error {
border: 4px solid #D00;
color: #590000;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,534 +0,0 @@
/* Tabulator v3.3.1 (c) Oliver Folkerd */
.tabulator {
position: relative;
background-color: #fff;
overflow: hidden;
font-size: 14px;
text-align: left;
-ms-transform: translatez(0);
transform: translatez(0);
}
.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableHolder .tabulator-table {
min-width: 100%;
}
.tabulator.tabulator-block-select {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.tabulator .tabulator-header {
position: relative;
box-sizing: border-box;
width: 100%;
border-bottom: 1px solid #999;
background-color: #fff;
color: #555;
font-weight: bold;
white-space: nowrap;
overflow: hidden;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
}
.tabulator .tabulator-header .tabulator-col {
display: inline-block;
position: relative;
box-sizing: border-box;
border-right: 1px solid #ddd;
background-color: #fff;
text-align: left;
vertical-align: bottom;
overflow: hidden;
}
.tabulator .tabulator-header .tabulator-col.tabulator-moving {
position: absolute;
border: 1px solid #999;
background: #e6e6e6;
pointer-events: none;
}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content {
position: relative;
padding: 4px;
}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {
box-sizing: border-box;
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
vertical-align: bottom;
}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {
box-sizing: border-box;
width: 100%;
border: 1px solid #999;
padding: 1px;
background: #fff;
}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {
display: inline-block;
position: absolute;
top: 9px;
right: 8px;
width: 0;
height: 0;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 6px solid #bbb;
}
.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {
position: relative;
display: -ms-flexbox;
display: flex;
border-top: 1px solid #ddd;
overflow: hidden;
}
.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child {
margin-right: -1px;
}
.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev {
display: none;
}
.tabulator .tabulator-header .tabulator-col.ui-sortable-helper {
position: absolute;
background-color: #e6e6e6 !important;
border: 1px solid #ddd;
}
.tabulator .tabulator-header .tabulator-col .tabulator-header-filter {
position: relative;
box-sizing: border-box;
margin-top: 2px;
width: 100%;
text-align: center;
}
.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {
height: auto !important;
}
.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {
margin-top: 3px;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {
padding-right: 25px;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover {
cursor: pointer;
background-color: #e6e6e6;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-arrow {
border-top: none;
border-bottom: 6px solid #bbb;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-arrow {
border-top: none;
border-bottom: 6px solid #666;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-arrow {
border-top: 6px solid #666;
border-bottom: none;
}
.tabulator .tabulator-header .tabulator-frozen {
display: inline-block;
position: absolute;
z-index: 10;
}
.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {
border-right: 2px solid #ddd;
}
.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {
border-left: 2px solid #ddd;
}
.tabulator .tabulator-header .tabulator-calcs-holder {
box-sizing: border-box;
min-width: 200%;
background: #f2f2f2 !important;
border-top: 1px solid #ddd;
border-bottom: 1px solid #999;
overflow: hidden;
}
.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {
background: #f2f2f2 !important;
}
.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
display: none;
}
.tabulator .tabulator-tableHolder {
position: relative;
width: 100%;
white-space: nowrap;
overflow: auto;
-webkit-overflow-scrolling: touch;
}
.tabulator .tabulator-tableHolder:focus {
outline: none;
}
.tabulator .tabulator-tableHolder .tabulator-placeholder {
position: absolute;
box-sizing: border-box;
display: -ms-flexbox;
display: flex;
-ms-flex-align: center;
align-items: center;
top: 0;
left: 0;
height: 100%;
width: 100%;
}
.tabulator .tabulator-tableHolder .tabulator-placeholder span {
display: inline-block;
margin: 0 auto;
padding: 10px;
color: #000;
font-weight: bold;
font-size: 20px;
}
.tabulator .tabulator-tableHolder .tabulator-table {
position: relative;
display: inline-block;
background-color: #fff;
white-space: nowrap;
overflow: visible;
color: #333;
}
.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs {
font-weight: bold;
background: #f2f2f2 !important;
}
.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {
border-bottom: 2px solid #ddd;
}
.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {
border-top: 2px solid #ddd;
}
.tabulator .tabulator-row {
position: relative;
box-sizing: border-box;
min-height: 22px;
background-color: #fff;
border-bottom: 1px solid #ddd;
}
.tabulator .tabulator-row:nth-child(even) {
background-color: #fff;
}
.tabulator .tabulator-row.tabulator-selectable:hover {
background-color: #bbb;
cursor: pointer;
}
.tabulator .tabulator-row.tabulator-selected {
background-color: #9ABCEA;
}
.tabulator .tabulator-row.tabulator-selected:hover {
background-color: #769BCC;
cursor: pointer;
}
.tabulator .tabulator-row.tabulator-moving {
position: absolute;
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
pointer-events: none !important;
z-index: 15;
}
.tabulator .tabulator-row .tabulator-frozen {
display: inline-block;
position: absolute;
background-color: inherit;
z-index: 10;
}
.tabulator .tabulator-row .tabulator-frozen.tabulator-frozen-left {
border-right: 2px solid #ddd;
}
.tabulator .tabulator-row .tabulator-frozen.tabulator-frozen-right {
border-left: 2px solid #ddd;
}
.tabulator .tabulator-row .tabulator-cell {
display: inline-block;
position: relative;
box-sizing: border-box;
padding: 4px;
border-right: 1px solid #ddd;
vertical-align: middle;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.tabulator .tabulator-row .tabulator-cell:last-of-type {
border-right: none;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-editing {
border: 1px solid #1D68CD;
padding: 0;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator .tabulator-row .tabulator-cell.tabulator-editing select {
border: 1px;
background: transparent;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-validation-fail {
border: 1px solid #dd0000;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator .tabulator-row .tabulator-cell.tabulator-validation-fail select {
border: 1px;
background: transparent;
color: #dd0000;
}
.tabulator .tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev {
display: none;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-row-handle {
display: -ms-inline-flexbox;
display: inline-flex;
-ms-flex-align: center;
align-items: center;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {
width: 80%;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {
width: 100%;
height: 3px;
margin: 2px 10% 0 10%;
background: #666;
}
.tabulator .tabulator-row.tabulator-group {
box-sizing: border-box;
border-bottom: 1px solid #999;
border-right: 1px solid #ddd;
border-top: 1px solid #999;
padding: 5px;
padding-left: 10px;
background: #fafafa;
font-weight: bold;
min-width: 100%;
}
.tabulator .tabulator-row.tabulator-group:hover {
cursor: pointer;
background-color: rgba(0, 0, 0, 0.1);
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {
margin-right: 10px;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-top: 6px solid #666;
border-bottom: 0;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow {
margin-left: 20px;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow {
margin-left: 40px;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow {
margin-left: 60px;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow {
margin-left: 80px;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow {
margin-left: 1000px;
}
.tabulator .tabulator-row.tabulator-group .tabulator-arrow {
display: inline-block;
width: 0;
height: 0;
margin-right: 16px;
border-top: 6px solid transparent;
border-bottom: 6px solid transparent;
border-right: 0;
border-left: 6px solid #666;
vertical-align: middle;
}
.tabulator .tabulator-row.tabulator-group span {
margin-left: 10px;
color: #666;
}
.tabulator .tabulator-col-resize-handle {
position: absolute;
right: 0;
top: 0;
bottom: 0;
width: 5px;
}
.tabulator .tabulator-col-resize-handle.prev {
left: 0;
right: auto;
}
.tabulator .tabulator-col-resize-handle:hover {
cursor: ew-resize;
}
.tabulator .tabulator-footer {
padding: 5px 10px;
border-top: 1px solid #999;
background-color: #fff;
text-align: right;
color: #555;
font-weight: bold;
white-space: nowrap;
-ms-user-select: none;
user-select: none;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
}
.tabulator .tabulator-footer .tabulator-calcs-holder {
box-sizing: border-box;
width: calc("100% + 20px");
margin: -5px -10px 5px -10px;
text-align: left;
background: #f2f2f2 !important;
border-bottom: 1px solid #fff;
border-top: 1px solid #ddd;
overflow: hidden;
}
.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {
background: #f2f2f2 !important;
}
.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
display: none;
}
.tabulator .tabulator-footer .tabulator-calcs-holder:only-child {
margin-bottom: -5px;
border-bottom: none;
}
.tabulator .tabulator-footer .tabulator-pages {
margin: 0 7px;
}
.tabulator .tabulator-footer .tabulator-page {
display: inline-block;
margin: 0 2px;
border: 1px solid #aaa;
border-radius: 3px;
padding: 2px 5px;
background: rgba(255, 255, 255, 0.2);
color: #555;
font-family: inherit;
font-weight: inherit;
font-size: inherit;
}
.tabulator .tabulator-footer .tabulator-page.active {
color: #d00;
}
.tabulator .tabulator-footer .tabulator-page:disabled {
opacity: .5;
}
.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover {
cursor: pointer;
background: rgba(0, 0, 0, 0.2);
color: #fff;
}
.tabulator .tablulator-loader {
position: absolute;
display: -ms-flexbox;
display: flex;
-ms-flex-align: center;
align-items: center;
top: 0;
left: 0;
z-index: 100;
height: 100%;
width: 100%;
background: rgba(0, 0, 0, 0.4);
text-align: center;
}
.tabulator .tablulator-loader .tabulator-loader-msg {
display: inline-block;
margin: 0 auto;
padding: 10px 20px;
border-radius: 10px;
background: #fff;
font-weight: bold;
font-size: 16px;
}
.tabulator .tablulator-loader .tabulator-loader-msg.tabulator-loading {
border: 4px solid #333;
color: #000;
}
.tabulator .tablulator-loader .tabulator-loader-msg.tabulator-error {
border: 4px solid #D00;
color: #590000;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,533 +0,0 @@
/* Tabulator v3.3.1 (c) Oliver Folkerd */
.tabulator {
position: relative;
border-bottom: 5px solid #222;
background-color: #fff;
font-size: 14px;
text-align: left;
overflow: hidden;
-ms-transform: translatez(0);
transform: translatez(0);
}
.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableHolder .tabulator-table {
min-width: 100%;
}
.tabulator[tabulator-layout="fitColumns"] .tabulator-row .tabulator-cell:last-of-type {
border-right: none;
}
.tabulator.tabulator-block-select {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.tabulator .tabulator-header {
position: relative;
box-sizing: border-box;
width: 100%;
border-bottom: 3px solid #3FB449;
background-color: #222;
color: #fff;
font-weight: bold;
white-space: nowrap;
overflow: hidden;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
}
.tabulator .tabulator-header .tabulator-col {
display: inline-block;
position: relative;
box-sizing: border-box;
border-right: 1px solid #aaa;
background-color: #222;
text-align: left;
vertical-align: bottom;
overflow: hidden;
}
.tabulator .tabulator-header .tabulator-col.tabulator-moving {
position: absolute;
border: 1px solid #3FB449;
background: #090909;
pointer-events: none;
}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content {
position: relative;
padding: 8px;
}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {
box-sizing: border-box;
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
vertical-align: bottom;
}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {
box-sizing: border-box;
width: 100%;
border: 1px solid #999;
padding: 1px;
background: #fff;
}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {
display: inline-block;
position: absolute;
top: 14px;
right: 8px;
width: 0;
height: 0;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 6px solid #bbb;
}
.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {
position: relative;
display: -ms-flexbox;
display: flex;
border-top: 1px solid #aaa;
overflow: hidden;
}
.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child {
margin-right: -1px;
}
.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev {
display: none;
}
.tabulator .tabulator-header .tabulator-col.ui-sortable-helper {
position: absolute;
background-color: #222 !important;
border: 1px solid #aaa;
}
.tabulator .tabulator-header .tabulator-col .tabulator-header-filter {
position: relative;
box-sizing: border-box;
margin-top: 2px;
width: 100%;
text-align: center;
}
.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {
height: auto !important;
}
.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {
margin-top: 3px;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {
padding-right: 25px;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover {
cursor: pointer;
background-color: #090909;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-arrow {
border-top: none;
border-bottom: 6px solid #bbb;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-arrow {
border-top: none;
border-bottom: 6px solid #3FB449;
}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-arrow {
border-top: 6px solid #3FB449;
border-bottom: none;
}
.tabulator .tabulator-header .tabulator-frozen {
display: inline-block;
position: absolute;
z-index: 10;
}
.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {
border-right: 2px solid #aaa;
}
.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {
border-left: 2px solid #aaa;
}
.tabulator .tabulator-header .tabulator-calcs-holder {
box-sizing: border-box;
min-width: 200%;
background: #3c3c3c !important;
border-top: 1px solid #aaa;
overflow: hidden;
}
.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {
background: #3c3c3c !important;
}
.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
display: none;
}
.tabulator .tabulator-tableHolder {
position: relative;
width: 100%;
white-space: nowrap;
overflow: auto;
-webkit-overflow-scrolling: touch;
}
.tabulator .tabulator-tableHolder:focus {
outline: none;
}
.tabulator .tabulator-tableHolder .tabulator-placeholder {
position: absolute;
box-sizing: border-box;
display: -ms-flexbox;
display: flex;
-ms-flex-align: center;
align-items: center;
top: 0;
left: 0;
height: 100%;
width: 100%;
}
.tabulator .tabulator-tableHolder .tabulator-placeholder span {
display: inline-block;
margin: 0 auto;
padding: 10px;
color: #3FB449;
font-weight: bold;
font-size: 20px;
}
.tabulator .tabulator-tableHolder .tabulator-table {
position: relative;
display: inline-block;
background-color: #fff;
white-space: nowrap;
overflow: visible;
color: #333;
}
.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs {
font-weight: bold;
background: #484848 !important;
color: #fff;
}
.tabulator .tabulator-row {
position: relative;
box-sizing: border-box;
min-height: 22px;
background-color: #fff;
}
.tabulator .tabulator-row.tabulator-row-even {
background-color: #EFEFEF;
}
.tabulator .tabulator-row.tabulator-selectable:hover {
background-color: #bbb;
cursor: pointer;
}
.tabulator .tabulator-row.tabulator-selected {
background-color: #9ABCEA;
}
.tabulator .tabulator-row.tabulator-selected:hover {
background-color: #769BCC;
cursor: pointer;
}
.tabulator .tabulator-row.tabulator-row-moving {
border: 1px solid #000;
background: #fff;
}
.tabulator .tabulator-row.tabulator-moving {
position: absolute;
border-top: 1px solid #aaa;
border-bottom: 1px solid #aaa;
pointer-events: none !important;
z-index: 15;
}
.tabulator .tabulator-row .tabulator-frozen {
display: inline-block;
position: absolute;
background-color: inherit;
z-index: 10;
}
.tabulator .tabulator-row .tabulator-frozen.tabulator-frozen-left {
border-right: 2px solid #aaa;
}
.tabulator .tabulator-row .tabulator-frozen.tabulator-frozen-right {
border-left: 2px solid #aaa;
}
.tabulator .tabulator-row .tabulator-cell {
display: inline-block;
position: relative;
box-sizing: border-box;
padding: 6px;
border-right: 1px solid #aaa;
vertical-align: middle;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-editing {
border: 1px solid #1D68CD;
padding: 0;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator .tabulator-row .tabulator-cell.tabulator-editing select {
border: 1px;
background: transparent;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-validation-fail {
border: 1px solid #dd0000;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator .tabulator-row .tabulator-cell.tabulator-validation-fail select {
border: 1px;
background: transparent;
color: #dd0000;
}
.tabulator .tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev {
display: none;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-row-handle {
display: -ms-inline-flexbox;
display: inline-flex;
-ms-flex-align: center;
align-items: center;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {
width: 80%;
}
.tabulator .tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {
width: 100%;
height: 3px;
margin: 2px 10% 0 10%;
background: #666;
}
.tabulator .tabulator-row.tabulator-group {
box-sizing: border-box;
border-right: 1px solid #aaa;
border-top: 1px solid #000;
border-bottom: 2px solid #3FB449;
padding: 5px;
padding-left: 10px;
background: #222;
color: #fff;
font-weight: bold;
min-width: 100%;
}
.tabulator .tabulator-row.tabulator-group:hover {
cursor: pointer;
background-color: #090909;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {
margin-right: 10px;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-top: 6px solid #3FB449;
border-bottom: 0;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow {
margin-left: 20px;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow {
margin-left: 40px;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow {
margin-left: 60px;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow {
margin-left: 80px;
}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow {
margin-left: 1000px;
}
.tabulator .tabulator-row.tabulator-group .tabulator-arrow {
display: inline-block;
width: 0;
height: 0;
margin-right: 16px;
border-top: 6px solid transparent;
border-bottom: 6px solid transparent;
border-right: 0;
border-left: 6px solid #3FB449;
vertical-align: middle;
}
.tabulator .tabulator-row.tabulator-group span {
margin-left: 10px;
color: #3FB449;
}
.tabulator .tabulator-footer {
padding: 5px 10px;
padding-top: 8px;
border-top: 3px solid #3FB449;
background-color: #222;
text-align: right;
color: #222;
font-weight: bold;
white-space: nowrap;
-ms-user-select: none;
user-select: none;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
}
.tabulator .tabulator-footer .tabulator-calcs-holder {
box-sizing: border-box;
width: calc("100% + 20px");
margin: -8px -10px 8px -10px;
text-align: left;
background: #3c3c3c !important;
border-bottom: 1px solid #aaa;
overflow: hidden;
}
.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {
background: #3c3c3c !important;
color: #fff !important;
}
.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {
display: none;
}
.tabulator .tabulator-footer .tabulator-calcs-holder:only-child {
margin-bottom: -5px;
border-bottom: none;
}
.tabulator .tabulator-footer .tabulator-pages {
margin: 0 7px;
}
.tabulator .tabulator-footer .tabulator-page {
display: inline-block;
margin: 0 2px;
padding: 2px 5px;
border: 1px solid #aaa;
border-radius: 3px;
background: #fff;
color: #222;
font-family: inherit;
font-weight: inherit;
font-size: inherit;
}
.tabulator .tabulator-footer .tabulator-page.active {
color: #3FB449;
}
.tabulator .tabulator-footer .tabulator-page:disabled {
opacity: .5;
}
.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover {
cursor: pointer;
background: rgba(0, 0, 0, 0.2);
color: #fff;
}
.tabulator .tabulator-col-resize-handle {
position: absolute;
right: 0;
top: 0;
bottom: 0;
width: 5px;
}
.tabulator .tabulator-col-resize-handle.prev {
left: 0;
right: auto;
}
.tabulator .tabulator-col-resize-handle:hover {
cursor: ew-resize;
}
.tabulator .tablulator-loader {
position: absolute;
display: -ms-flexbox;
display: flex;
-ms-flex-align: center;
align-items: center;
top: 0;
left: 0;
z-index: 100;
height: 100%;
width: 100%;
background: rgba(0, 0, 0, 0.4);
text-align: center;
}
.tabulator .tablulator-loader .tabulator-loader-msg {
display: inline-block;
margin: 0 auto;
padding: 10px 20px;
border-radius: 10px;
background: #fff;
font-weight: bold;
font-size: 16px;
}
.tabulator .tablulator-loader .tabulator-loader-msg.tabulator-loading {
border: 4px solid #333;
color: #000;
}
.tabulator .tablulator-loader .tabulator-loader-msg.tabulator-error {
border: 4px solid #D00;
color: #590000;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -84,65 +84,4 @@ input[value=Save]:focus, input[value=Close]:focus {
#payment_error, #payment_type_error,
#quantity_error, #anonymous_error {
color: red;
}
/* for shop_log */
#shop_log td {
padding: 0px 10px 0px 10px;
}
/* for memberships */
#expired_membership {
color: orchid;
margin-left: 10px;
}
#paid_member {
color: blue;
margin-left: 10px;
}
/* for volunteers */
#volunteer_hours {
color: blueviolet;
margin-left: 10px;
}
/* for stand time */
#stand_time_total {
color: green;
margin-left: 10px;
}
/* spinner for volunteer hour redemption */
#redeemable_hours {
display: none;
margin-left: 10px;
font-size: .9em;
width: 82px;
height: 23px;
}
.ui-spinner {
display: none;
margin-left: 10px;
width: 85px;
height: 26px;
}
}
.ui-widget input {
font-size: .9em;
}
#original_price, #membership_discount, #membership_discount_price, #volunteer_hours_to_membership_discount {
display: none;
color: blueviolet;
}
//.css({color: "#1b691e", textDecoration: "none", cursor: "crosshair"});
.shop_id a {
background-color: #1b691e;
cursor: crosshair;
text-decoration: none;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

713
css/ui/jquery-ui.css vendored
View File

@ -1,713 +0,0 @@
/*! jQuery UI - v1.12.1 - 2017-07-27
* http://jqueryui.com
* Includes: core.css, button.css, controlgroup.css, checkboxradio.css, spinner.css, theme.css
* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=base&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cc0000&fcError=5f3f3f&borderColorError=f1a899&bgTextureError=flat&bgColorError=fddfdf&iconColorHighlight=777620&fcHighlight=777620&borderColorHighlight=dad55e&bgTextureHighlight=flat&bgColorHighlight=fffa90&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=003eff&bgTextureActive=flat&bgColorActive=007fff&iconColorHover=555555&fcHover=2b2b2b&borderColorHover=cccccc&bgTextureHover=flat&bgColorHover=ededed&iconColorDefault=777777&fcDefault=454545&borderColorDefault=c5c5c5&bgTextureDefault=flat&bgColorDefault=f6f6f6&iconColorContent=444444&fcContent=333333&borderColorContent=dddddd&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=444444&fcHeader=333333&borderColorHeader=dddddd&bgTextureHeader=flat&bgColorHeader=e9e9e9&cornerRadius=3px&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif
* Copyright jQuery Foundation and other contributors; Licensed MIT */
/* Layout helpers
----------------------------------*/
.ui-helper-hidden {
display: none;
}
.ui-helper-hidden-accessible {
border: 0;
clip: rect(0 0 0 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
}
.ui-helper-reset {
margin: 0;
padding: 0;
border: 0;
outline: 0;
line-height: 1.3;
text-decoration: none;
font-size: 100%;
list-style: none;
}
.ui-helper-clearfix:before,
.ui-helper-clearfix:after {
content: "";
display: table;
border-collapse: collapse;
}
.ui-helper-clearfix:after {
clear: both;
}
.ui-helper-zfix {
width: 100%;
height: 100%;
top: 0;
left: 0;
position: absolute;
opacity: 0;
filter:Alpha(Opacity=0); /* support: IE8 */
}
.ui-front {
z-index: 100;
}
/* Interaction Cues
----------------------------------*/
.ui-state-disabled {
cursor: default !important;
pointer-events: none;
}
/* Icons
----------------------------------*/
.ui-icon {
display: inline-block;
vertical-align: middle;
margin-top: -.25em;
position: relative;
text-indent: -99999px;
overflow: hidden;
background-repeat: no-repeat;
}
.ui-widget-icon-block {
left: 50%;
margin-left: -8px;
display: block;
}
/* Misc visuals
----------------------------------*/
/* Overlays */
.ui-widget-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.ui-button {
padding: .4em 1em;
display: inline-block;
position: relative;
line-height: normal;
margin-right: .1em;
cursor: pointer;
vertical-align: middle;
text-align: center;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
/* Support: IE <= 11 */
overflow: visible;
}
.ui-button,
.ui-button:link,
.ui-button:visited,
.ui-button:hover,
.ui-button:active {
text-decoration: none;
}
/* to make room for the icon, a width needs to be set here */
.ui-button-icon-only {
width: 2em;
box-sizing: border-box;
text-indent: -9999px;
white-space: nowrap;
}
/* no icon support for input elements */
input.ui-button.ui-button-icon-only {
text-indent: 0;
}
/* button icon element(s) */
.ui-button-icon-only .ui-icon {
position: absolute;
top: 50%;
left: 50%;
margin-top: -8px;
margin-left: -8px;
}
.ui-button.ui-icon-notext .ui-icon {
padding: 0;
width: 2.1em;
height: 2.1em;
text-indent: -9999px;
white-space: nowrap;
}
input.ui-button.ui-icon-notext .ui-icon {
width: auto;
height: auto;
text-indent: 0;
white-space: normal;
padding: .4em 1em;
}
/* workarounds */
/* Support: Firefox 5 - 40 */
input.ui-button::-moz-focus-inner,
button.ui-button::-moz-focus-inner {
border: 0;
padding: 0;
}
.ui-controlgroup {
vertical-align: middle;
display: inline-block;
}
.ui-controlgroup > .ui-controlgroup-item {
float: left;
margin-left: 0;
margin-right: 0;
}
.ui-controlgroup > .ui-controlgroup-item:focus,
.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {
z-index: 9999;
}
.ui-controlgroup-vertical > .ui-controlgroup-item {
display: block;
float: none;
width: 100%;
margin-top: 0;
margin-bottom: 0;
text-align: left;
}
.ui-controlgroup-vertical .ui-controlgroup-item {
box-sizing: border-box;
}
.ui-controlgroup .ui-controlgroup-label {
padding: .4em 1em;
}
.ui-controlgroup .ui-controlgroup-label span {
font-size: 80%;
}
.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {
border-left: none;
}
.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {
border-top: none;
}
.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {
border-right: none;
}
.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {
border-bottom: none;
}
/* Spinner specific style fixes */
.ui-controlgroup-vertical .ui-spinner-input {
/* Support: IE8 only, Android < 4.4 only */
width: 75%;
width: calc( 100% - 2.4em );
}
.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {
border-top-style: solid;
}
.ui-checkboxradio-label .ui-icon-background {
box-shadow: inset 1px 1px 1px #ccc;
border-radius: .12em;
border: none;
}
.ui-checkboxradio-radio-label .ui-icon-background {
width: 16px;
height: 16px;
border-radius: 1em;
overflow: visible;
border: none;
}
.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,
.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {
background-image: none;
width: 8px;
height: 8px;
border-width: 4px;
border-style: solid;
}
.ui-checkboxradio-disabled {
pointer-events: none;
}
.ui-spinner {
position: relative;
display: inline-block;
overflow: hidden;
padding: 0;
vertical-align: middle;
}
.ui-spinner-input {
border: none;
background: none;
color: inherit;
padding: .222em 0;
margin: .2em 0;
vertical-align: middle;
margin-left: .4em;
margin-right: 2em;
}
.ui-spinner-button {
width: 1.6em;
height: 50%;
font-size: .5em;
padding: 0;
margin: 0;
text-align: center;
position: absolute;
cursor: default;
display: block;
overflow: hidden;
right: 0;
}
/* more specificity required here to override default borders */
.ui-spinner a.ui-spinner-button {
border-top-style: none;
border-bottom-style: none;
border-right-style: none;
}
.ui-spinner-up {
top: 0;
}
.ui-spinner-down {
bottom: 0;
}
/* Component containers
----------------------------------*/
.ui-widget {
font-family: Arial,Helvetica,sans-serif;
font-size: 1em;
}
.ui-widget .ui-widget {
font-size: 1em;
}
.ui-widget input,
.ui-widget select,
.ui-widget textarea,
.ui-widget button {
font-family: Arial,Helvetica,sans-serif;
font-size: 1em;
}
.ui-widget.ui-widget-content {
border: 1px solid #c5c5c5;
}
.ui-widget-content {
border: 1px solid #dddddd;
background: #ffffff;
color: #333333;
}
.ui-widget-content a {
color: #333333;
}
.ui-widget-header {
border: 1px solid #dddddd;
background: #e9e9e9;
color: #333333;
font-weight: bold;
}
.ui-widget-header a {
color: #333333;
}
/* Interaction states
----------------------------------*/
.ui-state-default,
.ui-widget-content .ui-state-default,
.ui-widget-header .ui-state-default,
.ui-button,
/* We use html here because we need a greater specificity to make sure disabled
works properly when clicked or hovered */
html .ui-button.ui-state-disabled:hover,
html .ui-button.ui-state-disabled:active {
border: 1px solid #c5c5c5;
background: #f6f6f6;
font-weight: normal;
color: #454545;
}
.ui-state-default a,
.ui-state-default a:link,
.ui-state-default a:visited,
a.ui-button,
a:link.ui-button,
a:visited.ui-button,
.ui-button {
color: #454545;
text-decoration: none;
}
.ui-state-hover,
.ui-widget-content .ui-state-hover,
.ui-widget-header .ui-state-hover,
.ui-state-focus,
.ui-widget-content .ui-state-focus,
.ui-widget-header .ui-state-focus,
.ui-button:hover,
.ui-button:focus {
border: 1px solid #cccccc;
background: #ededed;
font-weight: normal;
color: #2b2b2b;
}
.ui-state-hover a,
.ui-state-hover a:hover,
.ui-state-hover a:link,
.ui-state-hover a:visited,
.ui-state-focus a,
.ui-state-focus a:hover,
.ui-state-focus a:link,
.ui-state-focus a:visited,
a.ui-button:hover,
a.ui-button:focus {
color: #2b2b2b;
text-decoration: none;
}
.ui-visual-focus {
box-shadow: 0 0 3px 1px rgb(94, 158, 214);
}
.ui-state-active,
.ui-widget-content .ui-state-active,
.ui-widget-header .ui-state-active,
a.ui-button:active,
.ui-button:active,
.ui-button.ui-state-active:hover {
border: 1px solid #003eff;
background: #007fff;
font-weight: normal;
color: #ffffff;
}
.ui-icon-background,
.ui-state-active .ui-icon-background {
border: #003eff;
background-color: #ffffff;
}
.ui-state-active a,
.ui-state-active a:link,
.ui-state-active a:visited {
color: #ffffff;
text-decoration: none;
}
/* Interaction Cues
----------------------------------*/
.ui-state-highlight,
.ui-widget-content .ui-state-highlight,
.ui-widget-header .ui-state-highlight {
border: 1px solid #dad55e;
background: #fffa90;
color: #777620;
}
.ui-state-checked {
border: 1px solid #dad55e;
background: #fffa90;
}
.ui-state-highlight a,
.ui-widget-content .ui-state-highlight a,
.ui-widget-header .ui-state-highlight a {
color: #777620;
}
.ui-state-error,
.ui-widget-content .ui-state-error,
.ui-widget-header .ui-state-error {
border: 1px solid #f1a899;
background: #fddfdf;
color: #5f3f3f;
}
.ui-state-error a,
.ui-widget-content .ui-state-error a,
.ui-widget-header .ui-state-error a {
color: #5f3f3f;
}
.ui-state-error-text,
.ui-widget-content .ui-state-error-text,
.ui-widget-header .ui-state-error-text {
color: #5f3f3f;
}
.ui-priority-primary,
.ui-widget-content .ui-priority-primary,
.ui-widget-header .ui-priority-primary {
font-weight: bold;
}
.ui-priority-secondary,
.ui-widget-content .ui-priority-secondary,
.ui-widget-header .ui-priority-secondary {
opacity: .7;
filter:Alpha(Opacity=70); /* support: IE8 */
font-weight: normal;
}
.ui-state-disabled,
.ui-widget-content .ui-state-disabled,
.ui-widget-header .ui-state-disabled {
opacity: .35;
filter:Alpha(Opacity=35); /* support: IE8 */
background-image: none;
}
.ui-state-disabled .ui-icon {
filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
}
/* Icons
----------------------------------*/
/* states and images */
.ui-icon {
width: 16px;
height: 16px;
}
.ui-icon,
.ui-widget-content .ui-icon {
background-image: url("images/ui-icons_444444_256x240.png");
}
.ui-widget-header .ui-icon {
background-image: url("images/ui-icons_444444_256x240.png");
}
.ui-state-hover .ui-icon,
.ui-state-focus .ui-icon,
.ui-button:hover .ui-icon,
.ui-button:focus .ui-icon {
background-image: url("images/ui-icons_555555_256x240.png");
}
.ui-state-active .ui-icon,
.ui-button:active .ui-icon {
background-image: url("images/ui-icons_ffffff_256x240.png");
}
.ui-state-highlight .ui-icon,
.ui-button .ui-state-highlight.ui-icon {
background-image: url("images/ui-icons_777620_256x240.png");
}
.ui-state-error .ui-icon,
.ui-state-error-text .ui-icon {
background-image: url("images/ui-icons_cc0000_256x240.png");
}
.ui-button .ui-icon {
background-image: url("images/ui-icons_777777_256x240.png");
}
/* positioning */
.ui-icon-blank { background-position: 16px 16px; }
.ui-icon-caret-1-n { background-position: 0 0; }
.ui-icon-caret-1-ne { background-position: -16px 0; }
.ui-icon-caret-1-e { background-position: -32px 0; }
.ui-icon-caret-1-se { background-position: -48px 0; }
.ui-icon-caret-1-s { background-position: -65px 0; }
.ui-icon-caret-1-sw { background-position: -80px 0; }
.ui-icon-caret-1-w { background-position: -96px 0; }
.ui-icon-caret-1-nw { background-position: -112px 0; }
.ui-icon-caret-2-n-s { background-position: -128px 0; }
.ui-icon-caret-2-e-w { background-position: -144px 0; }
.ui-icon-triangle-1-n { background-position: 0 -16px; }
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
.ui-icon-triangle-1-e { background-position: -32px -16px; }
.ui-icon-triangle-1-se { background-position: -48px -16px; }
.ui-icon-triangle-1-s { background-position: -65px -16px; }
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
.ui-icon-triangle-1-w { background-position: -96px -16px; }
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
.ui-icon-arrow-1-n { background-position: 0 -32px; }
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
.ui-icon-arrow-1-e { background-position: -32px -32px; }
.ui-icon-arrow-1-se { background-position: -48px -32px; }
.ui-icon-arrow-1-s { background-position: -65px -32px; }
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
.ui-icon-arrow-1-w { background-position: -96px -32px; }
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
.ui-icon-arrowthick-1-n { background-position: 1px -48px; }
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
.ui-icon-arrow-4 { background-position: 0 -80px; }
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
.ui-icon-extlink { background-position: -32px -80px; }
.ui-icon-newwin { background-position: -48px -80px; }
.ui-icon-refresh { background-position: -64px -80px; }
.ui-icon-shuffle { background-position: -80px -80px; }
.ui-icon-transfer-e-w { background-position: -96px -80px; }
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
.ui-icon-folder-collapsed { background-position: 0 -96px; }
.ui-icon-folder-open { background-position: -16px -96px; }
.ui-icon-document { background-position: -32px -96px; }
.ui-icon-document-b { background-position: -48px -96px; }
.ui-icon-note { background-position: -64px -96px; }
.ui-icon-mail-closed { background-position: -80px -96px; }
.ui-icon-mail-open { background-position: -96px -96px; }
.ui-icon-suitcase { background-position: -112px -96px; }
.ui-icon-comment { background-position: -128px -96px; }
.ui-icon-person { background-position: -144px -96px; }
.ui-icon-print { background-position: -160px -96px; }
.ui-icon-trash { background-position: -176px -96px; }
.ui-icon-locked { background-position: -192px -96px; }
.ui-icon-unlocked { background-position: -208px -96px; }
.ui-icon-bookmark { background-position: -224px -96px; }
.ui-icon-tag { background-position: -240px -96px; }
.ui-icon-home { background-position: 0 -112px; }
.ui-icon-flag { background-position: -16px -112px; }
.ui-icon-calendar { background-position: -32px -112px; }
.ui-icon-cart { background-position: -48px -112px; }
.ui-icon-pencil { background-position: -64px -112px; }
.ui-icon-clock { background-position: -80px -112px; }
.ui-icon-disk { background-position: -96px -112px; }
.ui-icon-calculator { background-position: -112px -112px; }
.ui-icon-zoomin { background-position: -128px -112px; }
.ui-icon-zoomout { background-position: -144px -112px; }
.ui-icon-search { background-position: -160px -112px; }
.ui-icon-wrench { background-position: -176px -112px; }
.ui-icon-gear { background-position: -192px -112px; }
.ui-icon-heart { background-position: -208px -112px; }
.ui-icon-star { background-position: -224px -112px; }
.ui-icon-link { background-position: -240px -112px; }
.ui-icon-cancel { background-position: 0 -128px; }
.ui-icon-plus { background-position: -16px -128px; }
.ui-icon-plusthick { background-position: -32px -128px; }
.ui-icon-minus { background-position: -48px -128px; }
.ui-icon-minusthick { background-position: -64px -128px; }
.ui-icon-close { background-position: -80px -128px; }
.ui-icon-closethick { background-position: -96px -128px; }
.ui-icon-key { background-position: -112px -128px; }
.ui-icon-lightbulb { background-position: -128px -128px; }
.ui-icon-scissors { background-position: -144px -128px; }
.ui-icon-clipboard { background-position: -160px -128px; }
.ui-icon-copy { background-position: -176px -128px; }
.ui-icon-contact { background-position: -192px -128px; }
.ui-icon-image { background-position: -208px -128px; }
.ui-icon-video { background-position: -224px -128px; }
.ui-icon-script { background-position: -240px -128px; }
.ui-icon-alert { background-position: 0 -144px; }
.ui-icon-info { background-position: -16px -144px; }
.ui-icon-notice { background-position: -32px -144px; }
.ui-icon-help { background-position: -48px -144px; }
.ui-icon-check { background-position: -64px -144px; }
.ui-icon-bullet { background-position: -80px -144px; }
.ui-icon-radio-on { background-position: -96px -144px; }
.ui-icon-radio-off { background-position: -112px -144px; }
.ui-icon-pin-w { background-position: -128px -144px; }
.ui-icon-pin-s { background-position: -144px -144px; }
.ui-icon-play { background-position: 0 -160px; }
.ui-icon-pause { background-position: -16px -160px; }
.ui-icon-seek-next { background-position: -32px -160px; }
.ui-icon-seek-prev { background-position: -48px -160px; }
.ui-icon-seek-end { background-position: -64px -160px; }
.ui-icon-seek-start { background-position: -80px -160px; }
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
.ui-icon-seek-first { background-position: -80px -160px; }
.ui-icon-stop { background-position: -96px -160px; }
.ui-icon-eject { background-position: -112px -160px; }
.ui-icon-volume-off { background-position: -128px -160px; }
.ui-icon-volume-on { background-position: -144px -160px; }
.ui-icon-power { background-position: 0 -176px; }
.ui-icon-signal-diag { background-position: -16px -176px; }
.ui-icon-signal { background-position: -32px -176px; }
.ui-icon-battery-0 { background-position: -48px -176px; }
.ui-icon-battery-1 { background-position: -64px -176px; }
.ui-icon-battery-2 { background-position: -80px -176px; }
.ui-icon-battery-3 { background-position: -96px -176px; }
.ui-icon-circle-plus { background-position: 0 -192px; }
.ui-icon-circle-minus { background-position: -16px -192px; }
.ui-icon-circle-close { background-position: -32px -192px; }
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
.ui-icon-circle-zoomin { background-position: -176px -192px; }
.ui-icon-circle-zoomout { background-position: -192px -192px; }
.ui-icon-circle-check { background-position: -208px -192px; }
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
.ui-icon-circlesmall-close { background-position: -32px -208px; }
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
.ui-icon-squaresmall-close { background-position: -80px -208px; }
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
/* Misc visuals
----------------------------------*/
/* Corner radius */
.ui-corner-all,
.ui-corner-top,
.ui-corner-left,
.ui-corner-tl {
border-top-left-radius: 3px;
}
.ui-corner-all,
.ui-corner-top,
.ui-corner-right,
.ui-corner-tr {
border-top-right-radius: 3px;
}
.ui-corner-all,
.ui-corner-bottom,
.ui-corner-left,
.ui-corner-bl {
border-bottom-left-radius: 3px;
}
.ui-corner-all,
.ui-corner-bottom,
.ui-corner-right,
.ui-corner-br {
border-bottom-right-radius: 3px;
}
/* Overlays */
.ui-widget-overlay {
background: #aaaaaa;
opacity: .3;
filter: Alpha(Opacity=30); /* support: IE8 */
}
.ui-widget-shadow {
-webkit-box-shadow: 0px 0px 5px #666666;
box-shadow: 0px 0px 5px #666666;
}

File diff suppressed because one or more lines are too long

View File

@ -1,287 +0,0 @@
/*!
* jQuery UI CSS Framework 1.12.1
* http://jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license.
* http://jquery.org/license
*
* http://api.jqueryui.com/category/theming/
*/
/* Layout helpers
----------------------------------*/
.ui-helper-hidden {
display: none;
}
.ui-helper-hidden-accessible {
border: 0;
clip: rect(0 0 0 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
}
.ui-helper-reset {
margin: 0;
padding: 0;
border: 0;
outline: 0;
line-height: 1.3;
text-decoration: none;
font-size: 100%;
list-style: none;
}
.ui-helper-clearfix:before,
.ui-helper-clearfix:after {
content: "";
display: table;
border-collapse: collapse;
}
.ui-helper-clearfix:after {
clear: both;
}
.ui-helper-zfix {
width: 100%;
height: 100%;
top: 0;
left: 0;
position: absolute;
opacity: 0;
filter:Alpha(Opacity=0); /* support: IE8 */
}
.ui-front {
z-index: 100;
}
/* Interaction Cues
----------------------------------*/
.ui-state-disabled {
cursor: default !important;
pointer-events: none;
}
/* Icons
----------------------------------*/
.ui-icon {
display: inline-block;
vertical-align: middle;
margin-top: -.25em;
position: relative;
text-indent: -99999px;
overflow: hidden;
background-repeat: no-repeat;
}
.ui-widget-icon-block {
left: 50%;
margin-left: -8px;
display: block;
}
/* Misc visuals
----------------------------------*/
/* Overlays */
.ui-widget-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.ui-button {
padding: .4em 1em;
display: inline-block;
position: relative;
line-height: normal;
margin-right: .1em;
cursor: pointer;
vertical-align: middle;
text-align: center;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
/* Support: IE <= 11 */
overflow: visible;
}
.ui-button,
.ui-button:link,
.ui-button:visited,
.ui-button:hover,
.ui-button:active {
text-decoration: none;
}
/* to make room for the icon, a width needs to be set here */
.ui-button-icon-only {
width: 2em;
box-sizing: border-box;
text-indent: -9999px;
white-space: nowrap;
}
/* no icon support for input elements */
input.ui-button.ui-button-icon-only {
text-indent: 0;
}
/* button icon element(s) */
.ui-button-icon-only .ui-icon {
position: absolute;
top: 50%;
left: 50%;
margin-top: -8px;
margin-left: -8px;
}
.ui-button.ui-icon-notext .ui-icon {
padding: 0;
width: 2.1em;
height: 2.1em;
text-indent: -9999px;
white-space: nowrap;
}
input.ui-button.ui-icon-notext .ui-icon {
width: auto;
height: auto;
text-indent: 0;
white-space: normal;
padding: .4em 1em;
}
/* workarounds */
/* Support: Firefox 5 - 40 */
input.ui-button::-moz-focus-inner,
button.ui-button::-moz-focus-inner {
border: 0;
padding: 0;
}
.ui-controlgroup {
vertical-align: middle;
display: inline-block;
}
.ui-controlgroup > .ui-controlgroup-item {
float: left;
margin-left: 0;
margin-right: 0;
}
.ui-controlgroup > .ui-controlgroup-item:focus,
.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {
z-index: 9999;
}
.ui-controlgroup-vertical > .ui-controlgroup-item {
display: block;
float: none;
width: 100%;
margin-top: 0;
margin-bottom: 0;
text-align: left;
}
.ui-controlgroup-vertical .ui-controlgroup-item {
box-sizing: border-box;
}
.ui-controlgroup .ui-controlgroup-label {
padding: .4em 1em;
}
.ui-controlgroup .ui-controlgroup-label span {
font-size: 80%;
}
.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {
border-left: none;
}
.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {
border-top: none;
}
.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {
border-right: none;
}
.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {
border-bottom: none;
}
/* Spinner specific style fixes */
.ui-controlgroup-vertical .ui-spinner-input {
/* Support: IE8 only, Android < 4.4 only */
width: 75%;
width: calc( 100% - 2.4em );
}
.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {
border-top-style: solid;
}
.ui-checkboxradio-label .ui-icon-background {
box-shadow: inset 1px 1px 1px #ccc;
border-radius: .12em;
border: none;
}
.ui-checkboxradio-radio-label .ui-icon-background {
width: 16px;
height: 16px;
border-radius: 1em;
overflow: visible;
border: none;
}
.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,
.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {
background-image: none;
width: 8px;
height: 8px;
border-width: 4px;
border-style: solid;
}
.ui-checkboxradio-disabled {
pointer-events: none;
}
.ui-spinner {
position: relative;
display: inline-block;
overflow: hidden;
padding: 0;
vertical-align: middle;
}
.ui-spinner-input {
border: none;
background: none;
color: inherit;
padding: .222em 0;
margin: .2em 0;
vertical-align: middle;
margin-left: .4em;
margin-right: 2em;
}
.ui-spinner-button {
width: 1.6em;
height: 50%;
font-size: .5em;
padding: 0;
margin: 0;
text-align: center;
position: absolute;
cursor: default;
display: block;
overflow: hidden;
right: 0;
}
/* more specificity required here to override default borders */
.ui-spinner a.ui-spinner-button {
border-top-style: none;
border-bottom-style: none;
border-right-style: none;
}
.ui-spinner-up {
top: 0;
}
.ui-spinner-down {
bottom: 0;
}

View File

@ -1,5 +0,0 @@
/*! jQuery UI - v1.12.1 - 2017-07-27
* http://jqueryui.com
* Copyright jQuery Foundation and other contributors; Licensed MIT */
.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-button{padding:.4em 1em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2em;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup > .ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup > .ui-controlgroup-item:focus,.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus{z-index:9999}.ui-controlgroup-vertical > .ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:75%;width:calc( 100% - 2.4em )}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:none}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:none}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:.222em 0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:2em}.ui-spinner-button{width:1.6em;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top-style:none;border-bottom-style:none;border-right-style:none}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}

View File

@ -1,443 +0,0 @@
/*!
* jQuery UI CSS Framework 1.12.1
* http://jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license.
* http://jquery.org/license
*
* http://api.jqueryui.com/category/theming/
*
* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=base&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cc0000&fcError=5f3f3f&borderColorError=f1a899&bgTextureError=flat&bgColorError=fddfdf&iconColorHighlight=777620&fcHighlight=777620&borderColorHighlight=dad55e&bgTextureHighlight=flat&bgColorHighlight=fffa90&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=003eff&bgTextureActive=flat&bgColorActive=007fff&iconColorHover=555555&fcHover=2b2b2b&borderColorHover=cccccc&bgTextureHover=flat&bgColorHover=ededed&iconColorDefault=777777&fcDefault=454545&borderColorDefault=c5c5c5&bgTextureDefault=flat&bgColorDefault=f6f6f6&iconColorContent=444444&fcContent=333333&borderColorContent=dddddd&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=444444&fcHeader=333333&borderColorHeader=dddddd&bgTextureHeader=flat&bgColorHeader=e9e9e9&cornerRadius=3px&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif
*/
/* Component containers
----------------------------------*/
.ui-widget {
font-family: Arial,Helvetica,sans-serif;
font-size: 1em;
}
.ui-widget .ui-widget {
font-size: 1em;
}
.ui-widget input,
.ui-widget select,
.ui-widget textarea,
.ui-widget button {
font-family: Arial,Helvetica,sans-serif;
font-size: 1em;
}
.ui-widget.ui-widget-content {
border: 1px solid #c5c5c5;
}
.ui-widget-content {
border: 1px solid #dddddd;
background: #ffffff;
color: #333333;
}
.ui-widget-content a {
color: #333333;
}
.ui-widget-header {
border: 1px solid #dddddd;
background: #e9e9e9;
color: #333333;
font-weight: bold;
}
.ui-widget-header a {
color: #333333;
}
/* Interaction states
----------------------------------*/
.ui-state-default,
.ui-widget-content .ui-state-default,
.ui-widget-header .ui-state-default,
.ui-button,
/* We use html here because we need a greater specificity to make sure disabled
works properly when clicked or hovered */
html .ui-button.ui-state-disabled:hover,
html .ui-button.ui-state-disabled:active {
border: 1px solid #c5c5c5;
background: #f6f6f6;
font-weight: normal;
color: #454545;
}
.ui-state-default a,
.ui-state-default a:link,
.ui-state-default a:visited,
a.ui-button,
a:link.ui-button,
a:visited.ui-button,
.ui-button {
color: #454545;
text-decoration: none;
}
.ui-state-hover,
.ui-widget-content .ui-state-hover,
.ui-widget-header .ui-state-hover,
.ui-state-focus,
.ui-widget-content .ui-state-focus,
.ui-widget-header .ui-state-focus,
.ui-button:hover,
.ui-button:focus {
border: 1px solid #cccccc;
background: #ededed;
font-weight: normal;
color: #2b2b2b;
}
.ui-state-hover a,
.ui-state-hover a:hover,
.ui-state-hover a:link,
.ui-state-hover a:visited,
.ui-state-focus a,
.ui-state-focus a:hover,
.ui-state-focus a:link,
.ui-state-focus a:visited,
a.ui-button:hover,
a.ui-button:focus {
color: #2b2b2b;
text-decoration: none;
}
.ui-visual-focus {
box-shadow: 0 0 3px 1px rgb(94, 158, 214);
}
.ui-state-active,
.ui-widget-content .ui-state-active,
.ui-widget-header .ui-state-active,
a.ui-button:active,
.ui-button:active,
.ui-button.ui-state-active:hover {
border: 1px solid #003eff;
background: #007fff;
font-weight: normal;
color: #ffffff;
}
.ui-icon-background,
.ui-state-active .ui-icon-background {
border: #003eff;
background-color: #ffffff;
}
.ui-state-active a,
.ui-state-active a:link,
.ui-state-active a:visited {
color: #ffffff;
text-decoration: none;
}
/* Interaction Cues
----------------------------------*/
.ui-state-highlight,
.ui-widget-content .ui-state-highlight,
.ui-widget-header .ui-state-highlight {
border: 1px solid #dad55e;
background: #fffa90;
color: #777620;
}
.ui-state-checked {
border: 1px solid #dad55e;
background: #fffa90;
}
.ui-state-highlight a,
.ui-widget-content .ui-state-highlight a,
.ui-widget-header .ui-state-highlight a {
color: #777620;
}
.ui-state-error,
.ui-widget-content .ui-state-error,
.ui-widget-header .ui-state-error {
border: 1px solid #f1a899;
background: #fddfdf;
color: #5f3f3f;
}
.ui-state-error a,
.ui-widget-content .ui-state-error a,
.ui-widget-header .ui-state-error a {
color: #5f3f3f;
}
.ui-state-error-text,
.ui-widget-content .ui-state-error-text,
.ui-widget-header .ui-state-error-text {
color: #5f3f3f;
}
.ui-priority-primary,
.ui-widget-content .ui-priority-primary,
.ui-widget-header .ui-priority-primary {
font-weight: bold;
}
.ui-priority-secondary,
.ui-widget-content .ui-priority-secondary,
.ui-widget-header .ui-priority-secondary {
opacity: .7;
filter:Alpha(Opacity=70); /* support: IE8 */
font-weight: normal;
}
.ui-state-disabled,
.ui-widget-content .ui-state-disabled,
.ui-widget-header .ui-state-disabled {
opacity: .35;
filter:Alpha(Opacity=35); /* support: IE8 */
background-image: none;
}
.ui-state-disabled .ui-icon {
filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
}
/* Icons
----------------------------------*/
/* states and images */
.ui-icon {
width: 16px;
height: 16px;
}
.ui-icon,
.ui-widget-content .ui-icon {
background-image: url("images/ui-icons_444444_256x240.png");
}
.ui-widget-header .ui-icon {
background-image: url("images/ui-icons_444444_256x240.png");
}
.ui-state-hover .ui-icon,
.ui-state-focus .ui-icon,
.ui-button:hover .ui-icon,
.ui-button:focus .ui-icon {
background-image: url("images/ui-icons_555555_256x240.png");
}
.ui-state-active .ui-icon,
.ui-button:active .ui-icon {
background-image: url("images/ui-icons_ffffff_256x240.png");
}
.ui-state-highlight .ui-icon,
.ui-button .ui-state-highlight.ui-icon {
background-image: url("images/ui-icons_777620_256x240.png");
}
.ui-state-error .ui-icon,
.ui-state-error-text .ui-icon {
background-image: url("images/ui-icons_cc0000_256x240.png");
}
.ui-button .ui-icon {
background-image: url("images/ui-icons_777777_256x240.png");
}
/* positioning */
.ui-icon-blank { background-position: 16px 16px; }
.ui-icon-caret-1-n { background-position: 0 0; }
.ui-icon-caret-1-ne { background-position: -16px 0; }
.ui-icon-caret-1-e { background-position: -32px 0; }
.ui-icon-caret-1-se { background-position: -48px 0; }
.ui-icon-caret-1-s { background-position: -65px 0; }
.ui-icon-caret-1-sw { background-position: -80px 0; }
.ui-icon-caret-1-w { background-position: -96px 0; }
.ui-icon-caret-1-nw { background-position: -112px 0; }
.ui-icon-caret-2-n-s { background-position: -128px 0; }
.ui-icon-caret-2-e-w { background-position: -144px 0; }
.ui-icon-triangle-1-n { background-position: 0 -16px; }
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
.ui-icon-triangle-1-e { background-position: -32px -16px; }
.ui-icon-triangle-1-se { background-position: -48px -16px; }
.ui-icon-triangle-1-s { background-position: -65px -16px; }
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
.ui-icon-triangle-1-w { background-position: -96px -16px; }
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
.ui-icon-arrow-1-n { background-position: 0 -32px; }
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
.ui-icon-arrow-1-e { background-position: -32px -32px; }
.ui-icon-arrow-1-se { background-position: -48px -32px; }
.ui-icon-arrow-1-s { background-position: -65px -32px; }
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
.ui-icon-arrow-1-w { background-position: -96px -32px; }
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
.ui-icon-arrowthick-1-n { background-position: 1px -48px; }
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
.ui-icon-arrow-4 { background-position: 0 -80px; }
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
.ui-icon-extlink { background-position: -32px -80px; }
.ui-icon-newwin { background-position: -48px -80px; }
.ui-icon-refresh { background-position: -64px -80px; }
.ui-icon-shuffle { background-position: -80px -80px; }
.ui-icon-transfer-e-w { background-position: -96px -80px; }
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
.ui-icon-folder-collapsed { background-position: 0 -96px; }
.ui-icon-folder-open { background-position: -16px -96px; }
.ui-icon-document { background-position: -32px -96px; }
.ui-icon-document-b { background-position: -48px -96px; }
.ui-icon-note { background-position: -64px -96px; }
.ui-icon-mail-closed { background-position: -80px -96px; }
.ui-icon-mail-open { background-position: -96px -96px; }
.ui-icon-suitcase { background-position: -112px -96px; }
.ui-icon-comment { background-position: -128px -96px; }
.ui-icon-person { background-position: -144px -96px; }
.ui-icon-print { background-position: -160px -96px; }
.ui-icon-trash { background-position: -176px -96px; }
.ui-icon-locked { background-position: -192px -96px; }
.ui-icon-unlocked { background-position: -208px -96px; }
.ui-icon-bookmark { background-position: -224px -96px; }
.ui-icon-tag { background-position: -240px -96px; }
.ui-icon-home { background-position: 0 -112px; }
.ui-icon-flag { background-position: -16px -112px; }
.ui-icon-calendar { background-position: -32px -112px; }
.ui-icon-cart { background-position: -48px -112px; }
.ui-icon-pencil { background-position: -64px -112px; }
.ui-icon-clock { background-position: -80px -112px; }
.ui-icon-disk { background-position: -96px -112px; }
.ui-icon-calculator { background-position: -112px -112px; }
.ui-icon-zoomin { background-position: -128px -112px; }
.ui-icon-zoomout { background-position: -144px -112px; }
.ui-icon-search { background-position: -160px -112px; }
.ui-icon-wrench { background-position: -176px -112px; }
.ui-icon-gear { background-position: -192px -112px; }
.ui-icon-heart { background-position: -208px -112px; }
.ui-icon-star { background-position: -224px -112px; }
.ui-icon-link { background-position: -240px -112px; }
.ui-icon-cancel { background-position: 0 -128px; }
.ui-icon-plus { background-position: -16px -128px; }
.ui-icon-plusthick { background-position: -32px -128px; }
.ui-icon-minus { background-position: -48px -128px; }
.ui-icon-minusthick { background-position: -64px -128px; }
.ui-icon-close { background-position: -80px -128px; }
.ui-icon-closethick { background-position: -96px -128px; }
.ui-icon-key { background-position: -112px -128px; }
.ui-icon-lightbulb { background-position: -128px -128px; }
.ui-icon-scissors { background-position: -144px -128px; }
.ui-icon-clipboard { background-position: -160px -128px; }
.ui-icon-copy { background-position: -176px -128px; }
.ui-icon-contact { background-position: -192px -128px; }
.ui-icon-image { background-position: -208px -128px; }
.ui-icon-video { background-position: -224px -128px; }
.ui-icon-script { background-position: -240px -128px; }
.ui-icon-alert { background-position: 0 -144px; }
.ui-icon-info { background-position: -16px -144px; }
.ui-icon-notice { background-position: -32px -144px; }
.ui-icon-help { background-position: -48px -144px; }
.ui-icon-check { background-position: -64px -144px; }
.ui-icon-bullet { background-position: -80px -144px; }
.ui-icon-radio-on { background-position: -96px -144px; }
.ui-icon-radio-off { background-position: -112px -144px; }
.ui-icon-pin-w { background-position: -128px -144px; }
.ui-icon-pin-s { background-position: -144px -144px; }
.ui-icon-play { background-position: 0 -160px; }
.ui-icon-pause { background-position: -16px -160px; }
.ui-icon-seek-next { background-position: -32px -160px; }
.ui-icon-seek-prev { background-position: -48px -160px; }
.ui-icon-seek-end { background-position: -64px -160px; }
.ui-icon-seek-start { background-position: -80px -160px; }
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
.ui-icon-seek-first { background-position: -80px -160px; }
.ui-icon-stop { background-position: -96px -160px; }
.ui-icon-eject { background-position: -112px -160px; }
.ui-icon-volume-off { background-position: -128px -160px; }
.ui-icon-volume-on { background-position: -144px -160px; }
.ui-icon-power { background-position: 0 -176px; }
.ui-icon-signal-diag { background-position: -16px -176px; }
.ui-icon-signal { background-position: -32px -176px; }
.ui-icon-battery-0 { background-position: -48px -176px; }
.ui-icon-battery-1 { background-position: -64px -176px; }
.ui-icon-battery-2 { background-position: -80px -176px; }
.ui-icon-battery-3 { background-position: -96px -176px; }
.ui-icon-circle-plus { background-position: 0 -192px; }
.ui-icon-circle-minus { background-position: -16px -192px; }
.ui-icon-circle-close { background-position: -32px -192px; }
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
.ui-icon-circle-zoomin { background-position: -176px -192px; }
.ui-icon-circle-zoomout { background-position: -192px -192px; }
.ui-icon-circle-check { background-position: -208px -192px; }
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
.ui-icon-circlesmall-close { background-position: -32px -208px; }
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
.ui-icon-squaresmall-close { background-position: -80px -208px; }
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
/* Misc visuals
----------------------------------*/
/* Corner radius */
.ui-corner-all,
.ui-corner-top,
.ui-corner-left,
.ui-corner-tl {
border-top-left-radius: 3px;
}
.ui-corner-all,
.ui-corner-top,
.ui-corner-right,
.ui-corner-tr {
border-top-right-radius: 3px;
}
.ui-corner-all,
.ui-corner-bottom,
.ui-corner-left,
.ui-corner-bl {
border-bottom-left-radius: 3px;
}
.ui-corner-all,
.ui-corner-bottom,
.ui-corner-right,
.ui-corner-br {
border-bottom-right-radius: 3px;
}
/* Overlays */
.ui-widget-overlay {
background: #aaaaaa;
opacity: .3;
filter: Alpha(Opacity=30); /* support: IE8 */
}
.ui-widget-shadow {
-webkit-box-shadow: 0px 0px 5px #666666;
box-shadow: 0px 0px 5px #666666;
}

File diff suppressed because one or more lines are too long

View File

@ -1,121 +0,0 @@
# Just a document to keep track about what all the included header files do, and why there are so many.
include_header.html is in:
contact_add_edit_select.php
individual_history_log.php
individual_hours_log.php
location_add_edit.php
location_add_edit.php
location_add_edit_select.php
shop_welcome.php
stats.php
transaction_log.php
[Identical to include_header_shop with the exception of jquery-ui .. no big advantage]
<link href="css/transactions.css" rel="stylesheet" type="text/css" />
<link href="css/contacts.css" rel="stylesheet" type="text/css" />
<link href="css/css_yb_standard.css" rel="stylesheet" type="text/css" />
<link href="css/jquery.nouislider.css" rel="stylesheet" type="text/css" />
<link href="css/chosen.css" rel="stylesheet" type="text/css" />
<link href="css/ui/jquery-ui.css" rel="stylesheet" type="text/css" />
<script src="js/jquery-2.1.1.js"></script>
<script src="js/transaction.js"></script>
<script src="js/contact.js"></script>
<script src="js/shop.js"></script>
<script src="js/jquery.mask.js"></script>
<script src="js/jquery.jeditable.js"></script>
<script src="js/jquery.nouislider.js"></script>
<script src="js/chosen.jquery.js"></script>
<script src="js/jquery.liblink.js"></script>
<script src="js/wNumb.js"></script>
<script src="js/ui/jquery-ui.js"></script>
include_header_shop.html is in:
shop_log.php
start_shop.php
[Because it has different body layout, namely the inclusion of About/Help]
<link href="css/transactions.css" rel="stylesheet" type="text/css" />
<link href="css/contacts.css" rel="stylesheet" type="text/css" />
<link href="css/css_yb_standard.css" rel="stylesheet" type="text/css" />
<link href="css/jquery.nouislider.css" rel="stylesheet" type="text/css" />
<link href="css/chosen.css" rel="stylesheet" type="text/css" />
<script src="js/jquery-2.1.1.js"></script>
<script src="js/transaction.js"></script>
<script src="js/contact.js"></script>
<script src="js/shop.js"></script>
<script src="js/jquery.mask.js"></script>
<script src="js/jquery.jeditable.js"></script>
<script src="js/jquery.nouislider.js"></script>
<script src="js/chosen.jquery.js"></script>
<script src="js/jquery.liblink.js"></script>
<script src="js/wNumb.js"></script>
include_header_contacts.html is in:
contact_add_edit.php
[Identical to include_header_shop with the exception of transactions.css, transactions.js and shop.js,
if these files are included the slider gets slightly messed up in appearance.]
<link href="css/contacts.css" rel="stylesheet" type="text/css" />
<link href="css/css_yb_standard.css" rel="stylesheet" type="text/css" />
<link href="css/jquery.nouislider.contacts.css" rel="stylesheet" type="text/css" />
<link href="css/chosen.css" rel="stylesheet" type="text/css" />
<script src="js/jquery-2.1.1.js"></script>
<script src="js/contact.js"></script>
<script src="js/jquery.mask.js"></script>
<script src="js/jquery.jeditable.js"></script>
<script src="js/jquery.nouislider.js"></script>
<script src="js/chosen.jquery.js"></script>
<script src="js/jquery.liblink.js"></script>
<script src="js/wNumb.js"></script>
include_header_stats.html is in:
stats/*
[important because it defines correct path]
<link href="../css/css_yb_standard.css" rel="stylesheet" type="text/css" />
<link href="../css/pickmeup.css" rel="stylesheet" type="text/css" />
<link href="../css/stats.css" rel="stylesheet" type="text/css" />
<script src="../js/jquery-2.1.1.js"></script>
<script src="../js/jquery.pickmeup.js"></script>
<script src="../js/stats.js"></script>
REMOVED:
include_header_start_shop.html is in:
start_shop.php
[identical to include_header_shop.html]
<link href="css/transactions.css" rel="stylesheet" type="text/css" />
<link href="css/contacts.css" rel="stylesheet" type="text/css" />
<link href="css/css_yb_standard.css" rel="stylesheet" type="text/css" />
<link href="css/jquery.nouislider.css" rel="stylesheet" type="text/css" />
<link href="css/chosen.css" rel="stylesheet" type="text/css" />
<script src="js/jquery-2.1.1.js"></script>
<script src="js/transaction.js"></script>
<script src="js/contact.js"></script>
<script src="js/shop.js"></script>
<script src="js/jquery.mask.js"></script>
<script src="js/jquery.jeditable.js"></script>
<script src="js/jquery.nouislider.js"></script>
<script src="js/chosen.jquery.js"></script>
<script src="js/jquery.liblink.js"></script>
<script src="js/wNumb.js"></script>

View File

@ -8,97 +8,28 @@ B. htpasswd -Bc -C 10 htpasswd test (note that bcrypt is used)
C. chown www-data:www-data /var/htpasswd; chmod 0400 /var/htpasswd; \
D. In associated virtual host file, e.g. default-ssl.conf:
<Directory /var/www/html>
D. <Directory /var/www/html>
Authtype Basic
Authname "Amazing Community Bike Shop Login"
Require user someuser
AuthUserFile /var/htpasswd
</Directory>
SSL (do not settle for anything less)
- SELF-SIGNED
Under Debian (updated for Chrome 58 or greater):
I.
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 36500 -out rootCA.pem
create this file - v3.ext:
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = %%DOMAIN%%
Run this script in same directory as v3.ext file:
if [ -z "$1" ]
then
echo "Please supply a domain to create a certificate for";
echo "e.g. mysite.com"
exit;
fi
# Create a new private key if one doesnt exist, or use the existing one if it does
if [ -f device.key ]; then
KEY_OPT="-key"
else
KEY_OPT="-keyout"
fi
DOMAIN=$1
COMMON_NAME=${2:-*.$1}
SUBJECT="/C=CA/ST=None/L=NB/O=None/CN=$COMMON_NAME"
NUM_OF_DAYS=36500
openssl req -new -newkey rsa:2048 -sha256 -nodes $KEY_OPT device.key -subj "$SUBJECT" -out device.csr
cat v3.ext | sed s/%%DOMAIN%%/$COMMON_NAME/g > /tmp/__v3.ext
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days $NUM_OF_DAYS -sha256 -extfile /tmp/__v3.ext
# move output files to final filenames
mv device.csr $DOMAIN.csr
cp device.crt $DOMAIN.crt
# remove temp file
rm -f device.crt;
echo
echo "###########################################################################"
echo Done!
echo "###########################################################################"
echo "To use these files on your server, simply copy both $DOMAIN.csr and"
echo "device.key to your webserver, and use like so (if Apache, for example)"
echo
echo " SSLCertificateFile /path_to_your_files/$DOMAIN.crt"
echo " SSLCertificateKeyFile /path_to_your_files/device.key"
II. cp device.key /etc/ssl/private/ssl-cert-snakeoil.key
cp mysite.com.csr /etc/ssl/certs/ssl-cert-snakeoil.pem
III. a2enmod ssl;
a2ensite default-ssl.conf; (standard on debian-based distributions)
add certs to the SSLCertificateFile and SSLCertificateKeyFile directives in default-ssl.conf
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
a2dissite 000-default.conf;
service apache2 restart
In the Chromium broswer: chrome://settings/certificates
Choose IMPORT in AUTHORITIES
Upload the public certificate you created, e.g. rootCA.key
check "Trust this certificate for identifying websites"
- LETSENCRYPT
A preferable alternative would be to use letsencrypt. If you are using a reverse proxy, usually nginx-proxy,
make certain that HTTP_X_FORWARDED_FOR is used for identifying the originating IP address,
because YBDB shops keep track of their unique ip.
Under Debian:
A. openssl req -new -x509 -nodes -out ssl-cert-snakeoil.pem -days 36500 -keyout ssl-cert-snakeoil.key (100 year certificate)
B. cp ssl-cert-snakeoil.key /etc/ssl/private/
cp ssl-cert-snakeoil.pem /etc/ssl/certs/
C. a2enmod ssl;
a2ensite default-ssl.conf; (standard on debian-based distributions .. add <Directory> stanza above)
a2dissite 000-default.conf;
TERMINAL AUTOMATION AND SECURITY
Firefox (IceWeasel); note that Chrome below, provides the most recent instructions:
Firefox (IceWeasel):
1. Download KeePass v2 zip - http://keepass.info/download.html
2. Unzip in ~/KeePass
3. sudo chown root:root ~/KeePass; sudo chmod 0755 ~/KeePass;
@ -106,8 +37,9 @@ Firefox (IceWeasel); note that Chrome below, provides the most recent instructio
5. run .. mono KeePass.exe, create database and a key file in ~/KeePass
6. mv KeePass.config.xml KeePass.config.enforced.xml
7. sudo chown root:root KeePass.config.enforced.xml (and database/key file)
8. sudo chmod 0400 KeePass.config.enforced.xml
9. See Chrome for KeePass.config.enforced.xml policy changes.
8. sudo chmod 0444 KeePass.config.enforced.xml
9. Most importantly in KeePass.config.enforced.xml between <Security> change true to
<Policy><UnhidePasswords>false</UnhidePasswords></Policy> so that passwords cannot be seen.
10. In Debian/Ubuntu: apt-get install mono-runtime mono-devel
11. Install KeeFox extension from https://addons.mozilla.org/en-us/firefox/addon/keefox/
12. KeeFox will tell you where to copy KeePassRPC.plgx from into the plugins directory
@ -118,218 +50,50 @@ Firefox (IceWeasel); note that Chrome below, provides the most recent instructio
the whole process can be completely automated in KeeFox options.
16. In Firefox (IceWeasel) Preferences -> General use "When IceWeasel starts: Show my windows and tabs from the last time"
17. Afterwards, you can sudo chown -R root:root ~/KeePass/*
sudo chmod 0400 ~/KeePass/*
You may need to make adjustments for plugins.
Then run with sudo, see "Chrome (visudo)" to learn how to do this.
Chrome:
1. Install keepass2: sudo apt-get install keepass2
1. Download KeePass zip - http://keepass.info/download.html
2. Unzip in ~/KeePass
3. sudo chown root:root ~/KeePass; sudo chmod 0755 ~/KeePass;
4. run .. mono KeePass.exe, create database and a key file in ~/KeePass
5. mv KeePass.config.xml KeePass.config.enforced.xml
6. sudo chown root:root KeePass.config.enforced.xml (and database/key file)
7. sudo chmod 0444 KeePass.config.enforced.xml
8. Most importantly in KeePass.config.enforced.xml between <Security> change true to
<Policy><UnhidePasswords>false</UnhidePasswords></Policy> so that passwords cannot be seen.
9. When setting up password database for KeePass use only a key file.
10. Add the url along with username and password in the database.
11. In Debian/Ubuntu: apt-get install mono-runtime mono-devel
12. Install extension chromeIPass
13. Install keepasshttp as explained at https://github.com/pfn/keepasshttp/ (put KeePassHttp.plgx in ~/KeePass)
14. Follow the directions chromeIPass gives you, creating an identifier
15. Good idea to restart chrome.
16. In Chrome Settings "On Startup Continue where you left off"
17. Afterwards, you can sudo chown -R root:root ~/KeePass/*
You may need to make adjustments for plugins.
2. Optional: Install libsecret-tools: sudo apt-get install libsecret-tools
secret-tool store --label="PositiveSpin" keepass pos (remember password)
(Depending on your distribution) Open Menu -> Control Menu -> Security -> Password and Keys
Right-click on the "login" keyring
Select "Change password"
Enter your old password and leave the new password blank
Press ok
You may want to remove Password and Keys from the menu,
E.g. see https://wiki.lxde.org/en/Main_Menu if using lxde:
- sudo mv seahorse.desktop /root; lxpanelctl restart
3. run keepass2;
create new password database in ~/keepass
assign password created with secret-tool to Master password
create key file in ~/keepass, or even better, in a secret place
In the password datatase, add the url for YBDB, username and password (created with htpasswd)
close keepass2
sudo chown -R root:root ~/keepass
sudo chmod -R 0400 ~/keepass (change to 0600 if you want to change password, then back to 0400 when done)
4. SECURITY - The easiest ways to learn about the name of policies which can be disabled are simply
to unclick them in Tools -> Options -> Policy, and then look at the additions to <Security></Security> in
/usr/lib/keepass2/KeePass.config.xml after exiting the program; security changes don't apply
until restarting the program. Caveat, make sure that the xml is properly formed.
These policies can be added between <Policy> in KeePass.config.enforced.xml. Independently of
using KeePass.config.enforced.xml, the key database could be looked at, however,
the owner (root), 0400 permissions, and KeePass.config.enforced.xml prevent the database
from being copied anywhere, and the key file would be required as well to gain access.
Secret tools only provides a low-level layer of security with a master password passed by stdin,
and is optional (and may be a liability on a public computer). Keepass has auditing capability
via triggers, see https://keepass.info/help/kb/trigger_examples.html#audit, if your want to monitor events.
It should be noted that keepassxc does not provide the rich set of policies that keepass does,
which rules out this newer program.
cd /usr/lib/keepass2; \
sudo touch KeePass.config.enforced.xml
edit file and add between <Configuration></Configuration>
<?xml version="1.0" encoding="utf-8"?>
<Configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Meta>
<PreferUserConfiguration>false</PreferUserConfiguration>
</Meta>
<Security>
<Policy>
<UnhidePasswords>false</UnhidePasswords>
<NewFile>false</NewFile>
<SaveFile>false</SaveFile>
<Export>false</Export>
<Import>false</Import>
<Copy>false</Copy>
<Print>false</Print>
<ChangeMasterKey>false</ChangeMasterKey>
<Delete>false</Delete>
</Policy>
<WorkspaceLocking>
<AlwaysExitInsteadOfLocking>true</AlwaysExitInsteadOfLocking>
</WorkspaceLocking>
</Security>
</Configuration>
sudo chmod 0400 KeePass.config.enforced.xml
[doc: https://keepass.info/help/base/configuration.htm]
5. Install keepasshttp from https://github.com/pfn/keepasshttp/ by putting KeePassHttp.plgx in /usr/lib/keepass2;
sudo chmod 0644 /usr/lib/keepass2/KeePassHttp.plgx
sudo apt-get install libmono-system-xml-linq4.0-cil libmono-system-data-datasetextensions4.0-cil \
libmono-system-runtime-serialization4.0-cil mono-mcs
6. Install chrome extension chromeIPass
You may have to uncheck:
Activate password generator.
Automatically fill-in single credentials entry.
Activate autocomplete for username fields
7. Follow the directions chromeIPass gives you, creating an identifier
https://github.com/pfn/passifox/blob/master/documentation/chromeIPass.md goes into more detail
8. sudo su; visudo
after: %sudo ALL=(ALL:ALL) ALL
add: pos ALL=(ALL) NOPASSWD: /usr/bin/keepass2 (note pos is an example user account being used for X11)
9. In Chrome Settings "On Startup Continue where you left off" or
"Open a specific page or set of pages" and add the YBDB POS url as one of those specific pages
10. Add to desktop startup (see below). Test changes by logging out, and logging back into the WM.
DESKTOP STARTUP
1. LXDE - put a file with this format in ~/.config/autostart with name of *desktop, e.g. keepass.desktop:
1. LXDE - put a file with this format in ~/.config/auto with name of *desktop, e.g. keepass.desktop:
[Desktop Entry]
Type=Application
Exec=bash -c "secret-tool lookup keepass pos | sudo keepass2 /home/pos/keepass/PositiveSpin.kdbx -pw-stdin -keyfile:/home/pos/keepass/PositiveSpin.key"
Where keepass2 is a file in /usr/bin (0755 perms)
#!/bin/sh
# e.g. in this case KeePass.exe was intalled in users home, rather than /usr/lib/keepass2
exec /usr/bin/cli /home/pos/KeePass/KeePass.exe "$@"
Exec=/usr/bin/mono /home/ps/KeePass/KeePass.exe
2. Gnome based Window manager, e.g. Mate - open gnome-session-properties from commandline,
and add startup application.
SPECIAL NOTES
With the combination of keepass2 and httpasswd, it is possible to fine tune access. For instance, there could be a
sign-in computer allowing access only to shop_log.php, shop_welcome.php, contact_add_edit_select.php, and
contact_add_edit.php, and another computer for volunteer staff allowing access to almost everything,
including transaction_log.php, perhaps with the exclusion of certain reports that should only be available
to the volunteer coordinator.
https://wiki.apache.org/httpd/BypassAuthenticationOrAuthorizationRequirements provides good details how this is done:
E.g., we want paid_members.php to be accessible via a completely different password under Apache for our paid members team:
<FilesMatch "\.(php|paid_members\.php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /var/www/html/js>
Order allow,deny
Allow from all
Satisfy any
</Directory>
<Directory /var/www/html/css>
Order allow,deny
Allow from all
Satisfy any
</Directory>
<Directory /var/www/html>
Authtype Basic
Authname "Amazing Community Bike Shop Login"
Require user someuser
AuthUserFile /var/htpasswd
</Directory>
<Files "paid_members.php">
Authtype Basic
Authname "Paid Members Login"
Require user paid_members_team
AuthUserFile /var/htpasswd
</Files>
How to get that working with keepass2 should be obvious.
SUSPENDING COMPUTER
Example commands that bring up the gui setting tool:
1. xfce4-power-manager-settings (eg., used by wattos for LXDE)
2. mate-power-manager-settings or mate-power-preferences
BIOS / UEFI (recommended)
Turn off booting of external devices; disable unnecessary external ports; password protect BIOS setup.
Remember the password. There are some ways to reset passwords, if forgotten, but depending on the hardware,
it is not always straight-forward, e.g., resetting the CMOS.
GRUB2 PASSWORD PROTECT (mandatory)
In order to prevent individuals from casually booting into single mode or a shell,
password protecting GRUB with an encrypted password is mandatory.
https://help.ubuntu.com/community/Grub2/Passwords gives good instructions
1. In /etc/grub.d/10_linux change
CLASS="--class gnu-linux --class gnu --class os"
to
CLASS="--class gnu-linux --class gnu --class os --unrestricted"
2. Create an encrypted password with grub-mkpasswd-pbkdf2, producing something like
grub.pbkdf2.sha512.10000.80E702585F80C8D70D4BC75
3. In /etc/grub.d/40_custom add:
set superusers="MyUserName"
password_pbkdf2 MyUserName grub.pbkdf2.sha512.10000.80E702585F80C8D70D4BC75
# if you are using GRUB 2 1.99 the next line needs to be uncommented
# export superusers
4. sudo chmod 0700 40_custom
5. update-grub2
SSD or HD ENCRYPTION (optional)
If a sign-in computers unencrypted drive goes missing (or is stolen), it should (in most cases)
be pretty obvious, and you would want to change YBDB's htpasswd and root password for the computer. However, if you
want to "help" prevent a detached drive from being accessed, utilitizing an encrypted partition or file container,
for the keepass2 system discussed above, would be one way to go, although, even that can be accessed with a few steps,
and some forensics (https://dfir.science/2014/08/how-to-brute-forcing-password-cracking.html). While most modern
distributions provide an option to encrypt the whole installation, some good reasons for not wanting to do this
include a performance hit, and a more complex recovery. When deciding to go the encryption route, you need to weigh
in the advantages and disadvantages for encrypting while factoring into the equation the nature of the environment
the computer will be located within.
SUMMARY
There are other things that can be done within the terminal to prevent tampering, e.g., kiosk or read-only environment,
There are other things that can be done within the terminal to prevent tampering, e.g., read-only environment,
an expect or curl script, etc. rather than KeePass, but what is above protects the password from hacking, eavesdropping,
and from regular users in the shop, basically, only the sysadmin and bookkeeper should have remote access via the password.
So while YBDB is on the internet, it will only be available to the terminal(s) you allow it to be on, and
@ -337,3 +101,9 @@ the Point of Sale will be at the proper location which is usually the front of t
walk-in/walk-out.
Word of wisdom: It is always good practice to occasionally change the password.

View File

@ -1,11 +1,3 @@
<div class="footer">
Send feedback about YBDB
<span class="footer-line">
<a href="https://github.com/fspc/Yellow-Bike-Database/issues" target="_blank">Bugs</a> |
<a href="https://github.com/fspc/Yellow-Bike-Database/wiki" target="_blank">Wiki</a> |
<a href="https://github.com/fspc/Yellow-Bike-Database/wiki/Development" target="_blank">Contribute</a>
</span>
</div>
</td>
</tr>
</table>

View File

@ -23,72 +23,27 @@ function resetTimer()
<title>YBDB</title>
<link href="css/transactions.css" rel="stylesheet" type="text/css" />
<link href="css/contacts.css" rel="stylesheet" type="text/css" />
<link href="css/stats.css" rel="stylesheet" type="text/css" />
<link href="css/css_yb_standard.css" rel="stylesheet" type="text/css" />
<link href="css/jquery.nouislider.css" rel="stylesheet" type="text/css" />
<link href="css/chosen.css" rel="stylesheet" type="text/css" />
<link href="css/ui/jquery-ui.css" rel="stylesheet" type="text/css" />
<link href="css/tabulator/tabulator_site.min.css" rel="stylesheet" type="text/css" />
<script src="js/jquery-2.1.1.js"></script>
<script src="js/transaction.js"></script>
<script src="js/contact.js"></script>
<script src="js/shop.js"></script>
<script src="js/reports.js"></script>
<script src="js/jquery.mask.js"></script>
<script src="js/jquery.jeditable.js"></script>
<script src="js/jquery.nouislider.js"></script>
<script src="js/chosen.jquery.js"></script>
<script src="js/jquery.liblink.js"></script>
<script src="js/wNumb.js"></script>
<script src="js/ui/jquery-ui.js"></script>
<script src="js/moment/moment.js"></script>
<script src="js/tabulator/dist/js/tabulator.min.js"></script>
<script src="js/etherpad.js"></script>
<script src="js/jquery.ns-autogrow/dist/jquery.ns-autogrow.js"></script>
<script>
$(function() {
// prevent a double etherpad if shop_log_iframe is clicked on after a shop closes
$("#shop_log_link").on("click keypress", function(e) {
$.post("json/transaction.php", {shop_exist: 1}, function(data) {
if (data === "no_shop") {
window.top.location.href = "./start_shop.php";
}
});
});
if ( document.location.pathname.match(/shop_welcome\.php$/) ) {
$("#shop_log_link").attr("href","/shop_log_iframe.php");
} else {
$("#shop_log_link").attr("href","/shop_log.php");
}
});
</script>
</head>
<body class="yb_standard">
<table align="center" width="1000" border="0" cellpadding="1" cellspacing="0">
<tr valign="top">
<td height="40" align="right"><a id="shop_log_link" href="/shop_log.php">Current Shop</a> | <a href="/start_shop.php" target="_parent"> All Shops</a> | <a href="/contact_add_edit_select.php" target="_parent">Add/Edit Contact</a> | <a href="/stats.php" target="_parent">Reports</a> | <a href="/transaction_log.php" target="_parent">Transaction Log</a> | <a href="http://www.positivespin.org" target="_blank">PS Home</a></td>
<td height="40" align="right"><a href="/shop_log.php">Current Shop</a> | <a href="/start_shop.php"> All Shops</a> | <a href="/contact_add_edit_select.php">Add/Edit Contact</a> | <a href="/stats.php">Statistics</a> | <a href="/transaction_log.php">Transaction Log</a> | <a href="http://www.positivespin.org/home2/" target="_blank">PS Home</a></td>
</tr>
<tr>
<td>
<!--
<div style="float: left; width: 12.5%; height: 40px; display: inline-block;"></div>
<div style="float: left; align-content: center; width: 75%; height: 40px; display: inline-block;">
<div align="right"><a id="shop_log_link" href="/shop_log.php">Current Shop</a> |
<a href="/start_shop.php" target="_parent"> All Shops</a> |
<a href="/contact_add_edit_select.php" target="_parent">Add/Edit Contact</a> |
<a href="/stats.php" target="_parent">Reports</a> |
<a href="/transaction_log.php" target="_parent">Transaction Log</a> |
<a href="http://www.positivespin.org" target="_blank">PS Home</a></div>
</div>
<div style="float: left; width: 12.5%; height: 40px; display: inline-block;"></div>
<div style="float: left; width: 12.5%; height: 100%; display: inline-block;"></div>
<table style="float: left; width: 75%; display: inline-block;" align="center" border="0" cellpadding="1" cellspacing="0"><tr><td>
-->

View File

@ -40,7 +40,7 @@ function resetTimer()
<body class="yb_standard">
<table align="center" width="1000" border="0" cellpadding="1" cellspacing="0">
<tr valign="top">
<td height="40" align="right"><a href="/shop_log.php">Current Shop</a> | <a href="/start_shop.php"> All Shops</a> | <a href="/contact_add_edit_select.php">Add/Edit Contact</a> | <a href="/stats.php">Reports</a> | <a href="/transaction_log.php">Transaction Log</a> | <a href="http://www.positivespin.org" target="_blank">PS Home</a></td>
<td height="40" align="right"><a href="/shop_log.php">Current Shop</a> | <a href="/start_shop.php"> All Shops</a> | <a href="/contact_add_edit_select.php">Add/Edit Contact</a> | <a href="/stats.php">Statistics</a> | <a href="/transaction_log.php">Transaction Log</a> | <a href="http://www.positivespin.org/home2/" target="_blank">PS Home</a></td>
</tr>
<tr>
<td>

View File

@ -19,7 +19,7 @@ function resetTimer()
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>YBDB</title>
<link href="css/transactions.css" rel="stylesheet" type="text/css" />
<link href="css/contacts.css" rel="stylesheet" type="text/css" />
@ -37,103 +37,14 @@ function resetTimer()
<script src="js/chosen.jquery.js"></script>
<script src="js/jquery.liblink.js"></script>
<script src="js/wNumb.js"></script>
<script>
$(function() {
// prevent a double etherpad if shop_log_iframe is clicked on after a shop closes
$("#shop_log_link").on("click keypress", function(e) {
if (window.location.pathname === '/shop_log_iframe.php') {
e.preventDefault(); // hack to prevent open shop from reopening in same page
}
$.post("json/transaction.php", {shop_exist: 1}, function(data) {
if (data === "no_shop") {
window.top.location.href = "./start_shop.php";
}
});
});
// scroll back to same location when up, down, or updated are selected
$(".down").on("click keypress", function(e) {
var hash = document.body.scrollTop + 25;
var query = window.location.search;
query = query.split("&");
var visit_id = query[1].split("=")[1] - 1;
var new_query = query[0] + "&visit_id=" + visit_id;
var new_url = window.location.origin + window.location.pathname + new_query + "&#" + hash;
window.location = new_url;
});
$(".up").on("click keypress", function(e) {
var hash = document.body.scrollTop - 25;
var query = window.location.search;
query = query.split("&");
var visit_id = parseInt(query[1].split("=")[1]) + 1;
var new_query = query[0] + "&visit_id=" + visit_id;
var new_url = window.location.origin + window.location.pathname + new_query + "&#" + hash;
window.location = new_url;
});
$(".close").on("click keypress", function(e) {
var hash = document.body.scrollTop;
var query = window.location.search;
query = query.split("&");
var new_query = query[0];
var new_url = window.location.origin + window.location.pathname + new_query + "&#" + hash;
window.location = new_url;
});
// have to do this a little differently because it is a submit, not a button
$(".update_changes").on("click keypress", function(e) {
var hash = parseInt(document.body.scrollTop);
var query = window.location.search;
query = query.split("&");
var visit_id = parseInt(query[1].split("=")[1]);
var add_hash = "&#" + hash;
var action = $("[name=FormUpdate_" + visit_id).attr("action");
$("[name=FormUpdate_" + visit_id).attr("action", action + add_hash);
});
// end scroll back to same location when up, down, updated are selected
});
$( window ).on( "load", function() {
if(window.location.hash != "") {
document.body.scrollTop = window.location.hash.replace("#", "") * 1;
}
});
</script>
</head>
<body class="yb_standard">
<div style="float: left; width: 12.5%; height: 40px;"></div>
<div style="align-content: center; height: 40px; float: left; width: 75%">
<div style="float: left; width: auto;"><a href="/shop_welcome.php">About/Help</a></div>
<div style="float: right; width: auto;"><a id="shop_log_link" href="/shop_log.php">Sign In/Sign Out</a> |
<a href="/start_shop.php" target="_parent"> All Shops</a> |
<a href="/contact_add_edit_select.php" target="_parent">Add/Edit Contact</a> |
<a href="/stats.php" target="_parent">Reports</a> |
<a href="/transaction_log.php" target="_parent">Transaction Log</a> |
<a href="http://www.positivespin.org" target="_blank">PS Home</a></div>
</div>
<div style="float: left; width: 12.5%; height: 40px;"></div>
<table align="center" width="1000" border="0" cellpadding="1" cellspacing="0">
<tr valign="top">
<td height="40" align="left"><a href="/shop_welcome.php">About/Help</a></td>
<td height="40" align="right"><a href="/shop_log.php">Sign In/Sign Out</a> | <a href="/start_shop.php"> All Shops</a> | <a href="/contact_add_edit_select.php">Add/Edit Contact</a> | <a href="/stats.php">Statistics</a> | <a href="/transaction_log.php">Transaction Log</a> | <a href="http://www.positivespin.org/home2/" target="_blank">PS Home</a></td>
</tr>
</table>

View File

@ -0,0 +1,50 @@
<script type="text/javascript">
var t;
window.onload=resetTimer;
document.onmousedown=resetTimer;
document.onkeypress=resetTimer;
function logout()
{
location.href='shop_welcome.php'
}
function resetTimer()
{
clearTimeout(t);
t=setTimeout(logout,1000*240) //Shop welcome after 240 seconds of inactivity
}
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>YBDB</title>
<link href="css/transactions.css" rel="stylesheet" type="text/css" />
<link href="css/contacts.css" rel="stylesheet" type="text/css" />
<link href="css/css_yb_standard.css" rel="stylesheet" type="text/css" />
<link href="css/jquery.nouislider.css" rel="stylesheet" type="text/css" />
<link href="css/chosen.css" rel="stylesheet" type="text/css" />
<script src="js/jquery-2.1.1.js"></script>
<script src="js/transaction.js"></script>
<script src="js/contact.js"></script>
<script src="js/shop.js"></script>
<script src="js/jquery.mask.js"></script>
<script src="js/jquery.jeditable.js"></script>
<script src="js/jquery.nouislider.js"></script>
<script src="js/chosen.jquery.js"></script>
<script src="js/jquery.liblink.js"></script>
<script src="js/wNumb.js"></script>
</head>
<body class="yb_standard">
<table align="center" width="1000" border="0" cellpadding="1" cellspacing="0">
<tr valign="top">
<td height="40" align="left"><a href="/shop_welcome.php">About/Help</a></td>
<td height="40" align="right"><a href="/shop_log.php">Current Shop</a> | <a href="/start_shop.php"> All Shops</a> | <a href="/contact_add_edit_select.php">Add/Edit Contact</a> | <a href="/stats.php">Statistics</a> | <a href="/transaction_log.php">Transaction Log</a> | <a href="http://www.positivespin.org/home2/" target="_blank">PS Home</a></td>
</tr>
</table>

View File

@ -1,47 +0,0 @@
<script type="text/javascript">
var t;
window.onload=resetTimer;
document.onmousedown=resetTimer;
document.onkeypress=resetTimer;
function logout()
{
location.href='shop_welcome.php'
}
function resetTimer()
{
clearTimeout(t);
//t=setTimeout(logout,1000*240) //Shop welcome after 240 seconds of inactivity
}
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>YBDB</title>
<link href="../css/css_yb_standard.css" rel="stylesheet" type="text/css" />
<link href="../css/pickmeup.css" rel="stylesheet" type="text/css" />
<link href="../css/stats.css" rel="stylesheet" type="text/css" />
<link href="../css/ui/jquery-ui.css" rel="stylesheet" type="text/css" />
<link href="../css/tabulator/tabulator_site.min.css" rel="stylesheet" type="text/css" />
<script src="../js/jquery-2.1.1.js"></script>
<script src="../js/reports.js"></script>
<script src="../js/jquery.pickmeup.js"></script>
<script src="../js/stats.js"></script>
<script src="../js/ui/jquery-ui.js"></script>
<script src="../js/moment/moment.js"></script>
<script src="../js/tabulator/dist/js/tabulator.min.js"></script>
</head>
<body class="yb_standard">
<table align="center" width="1000" border="0" cellpadding="1" cellspacing="0">
<tr valign="top">
<td height="40" align="right"><a href="/shop_log.php">Current Shop</a> | <a href="/start_shop.php"> All Shops</a> | <a href="/contact_add_edit_select.php">Add/Edit Contact</a> | <a href="/stats.php">Reports</a> | <a href="/transaction_log.php">Transaction Log</a> | <a href="http://www.positivespin.org" target="_blank">PS Home</a></td>
</tr>
<tr>
<td>

View File

@ -1,10 +1,23 @@
<?php
// new logic
require_once('Connections/YBDB.php');
require_once('Connections/database_functions.php');
$page_edit_contact = PAGE_EDIT_CONTACT;
$page_shop_log = PAGE_SHOP_LOG;
$individual_shop_id = 90;
mysql_select_db($database_YBDB, $YBDB);
if($_GET['visit_id']>0){
$visit_id = $_GET['visit_id'];
} else {
$visit_id =-1;}
if($_GET['new_user_id']>0){
$new_user_id = $_GET['new_user_id'];
} else {
$new_user_id = -1;
}
if($_GET['contact_id']>0){
$contact_id = $_GET['contact_id'];
@ -12,19 +25,233 @@ if($_GET['contact_id']>0){
$contact_id = -1;
}
include("include_header.html");
//shop_date
if(ISSET($_GET['shop_date'])){
$shop_date_filter = $_GET['shop_date'];
} else {
$shop_date_filter = current_date();}
//dayname
if($_GET['shop_dayname']=='alldays'){
$shop_dayname = '';
} elseif(isset($_GET['shop_dayname'])) {
$shop_dayname = "AND DAYNAME(DATE(time_in)) = '" . $_GET['shop_dayname'] . "'";
} else {
$shop_dayname = '';
}
//record_count
if($_GET['record_count']>0){
$record_count = $_GET['record_count'];
} else {
$record_count = 40;}
$query_Recordset1 = "SELECT shop_id, shop_hours.shop_visit_id, shop_hours.contact_id, shop_hours.shop_user_role,
shop_hours.project_id, DATE(shop_hours.time_in)
AS date, DAYNAME(shop_hours.time_in)
AS dayname, shop_hours.time_in, shop_hours.time_out,
TIME_FORMAT(TIMEDIFF(time_out, time_in),'%k:%i')
AS et, shop_hours.comment,
CONCAT(contacts.last_name, ', ', contacts.first_name, ' ',contacts.middle_initial)
AS full_name, contacts.first_name
FROM shop_hours
LEFT JOIN shop_user_roles ON shop_hours.shop_user_role=shop_user_roles.shop_user_role_id
LEFT JOIN contacts ON shop_hours.contact_id=contacts.contact_id
WHERE shop_hours.contact_id = {$contact_id}
AND DATE(shop_hours.time_in) <= '{$shop_date_filter}' {$shop_dayname}
ORDER BY time_in DESC LIMIT 0, {$record_count};";
$Recordset1 = mysql_query($query_Recordset1, $YBDB) or die(mysql_error());
//$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
mysql_select_db($database_YBDB, $YBDB);
$query_Recordset2 = "SELECT * FROM shops WHERE shop_id = $individual_shop_id;";
$Recordset2 = mysql_query($query_Recordset2, $YBDB) or die(mysql_error());
$row_Recordset2 = mysql_fetch_assoc($Recordset2);
$totalRows_Recordset2 = mysql_num_rows($Recordset2);
$shop_date = $row_Recordset2['date'];
$shop_location = $row_Recordset2['shop_location'];
$shop_type = $row_Recordset2['shop_type'];
//sets the default time for users to sign in
$shop_start_time = current_datetime();
$current_date = current_date();
//Action on form update
//shop_log2.php?shop_id=2&amp;visit_id=4
$editFormAction = $_SERVER['PHP_SELF'] . "?contact_id=$contact_id&visit_id=$visit_id";
$editFormAction_novisit = $_SERVER['PHP_SELF'] . "?contact_id=$contact_id";
//if (isset($_SERVER['QUERY_STRING'])) {
// $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
//}
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form_new") && ($_POST["contact_id"] == "no_selection")){
//if no contact is selected
$error_message = '<span class="yb_heading3red">Please Select a User</span><br />';
} elseif ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form_new")) {
$insertSQL = sprintf("INSERT INTO shop_hours (contact_id, shop_id, shop_user_role, time_in, comment, project_id)
VALUES (%s, %s, %s, %s, %s, %s)",
GetSQLValueString($_POST['contact_id'], "int"),
GetSQLValueString($individual_shop_id, "int"),
GetSQLValueString($_POST['user_role'], "text"),
GetSQLValueString(dateandtimein($_POST['date'], $_POST['time_in']), "date"),
GetSQLValueString($_POST['comment'], "text"),
GetSQLValueString($_POST['project'], "text"));
mysql_select_db($database_YBDB, $YBDB);
$Result1 = mysql_query($insertSQL, $YBDB) or die(mysql_error());
$insertGoTo = "shop_log2.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $editFormAction_novisit));
}
//$_POST["MM_insert"] is in the form: FormUpdate_$VisitID OR FormUpdate_142. This line seperates the visit id from the
//list($is_UpdateForm, $visit_id) = split('[_]', $_POST["MM_insert"]);
//Update Record isset($_POST["MM_update"])
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "FormUpdate")) {
$updateSQL = sprintf("UPDATE shop_hours SET time_out=%s WHERE shop_visit_id=%s",
GetSQLValueString($_POST['time_out'], "date"),
GetSQLValueString($_POST['shop_visit_id'], "int"));
//"2006-10-12 18:15:00"
mysql_select_db($database_YBDB, $YBDB);
$Result1 = mysql_query($updateSQL, $YBDB) or die(mysql_error());
$gotopage = "index.html";
header(sprintf("Location: %s",$editFormAction )); //$editFormAction
}
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "FormEdit")) {
$updateSQL = sprintf("UPDATE shop_hours SET contact_id=%s, shop_user_role=%s, project_id=%s, time_in=%s, time_out=%s, comment=%s WHERE shop_visit_id=%s",
GetSQLValueString($_POST['contact_id'], "int"),
GetSQLValueString($_POST['user_role'], "text"),
GetSQLValueString($_POST['project'], "text"),
GetSQLValueString(dateandtimein($_POST['date'], $_POST['time_in']), "date"),
GetSQLValueString($_POST['time_out'], "date"),
GetSQLValueString($_POST['comment'], "text"),
GetSQLValueString($_POST['shop_visit_id'], "int"));
//"2006-10-12 18:15:00"
mysql_select_db($database_YBDB, $YBDB);
$Result1 = mysql_query($updateSQL, $YBDB) or die(mysql_error());
header(sprintf("Location: %s",$editFormAction_novisit )); //$editFormAction
}
//Change Date isset($_POST["MM_update"])
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "ChangeDate")) {
$editFormAction = $_SERVER['PHP_SELF'] . "?contact_id=$contact_id&shop_date={$_POST['shop_date']}&shop_dayname={$_POST['dayname']}&record_count={$_POST['record_count']}";
header(sprintf("Location: %s",$editFormAction )); //$editFormAction
}
?>
<div id="contact_id" style="display:none;"><?php echo $contact_id; ?></div>
<div style="text-align:center;"><div id="name" style="align-content:center; font-size:2em;"></div><div id="membership_status"></div></div>
<div id="individual_history"></div>
<div class="stats-clear nextprev" style="text-align:center; display:block; margin-top:9px;">
<a class="stats-left stats-btn" href="#">&#10094; Previous</a>
<a class="stats-right stats-btn" href="#">Next &#10095;</a>
</div>
<?php include("include_header.html"); ?>
<?php include("include_footer.html"); ?>
<div id="individual_history_pad"></div>
<table border="0" cellpadding="1" cellspacing="0">
<tr>
<td align="left" valign="bottom"><?php echo $error_message;?>
</td>
</tr>
<tr>
<td>
<table border="1" cellpadding="1" cellspacing="0" bordercolor="#CCCCCC">
<tr bordercolor="#CCCCCC" bgcolor="#99CC33" class="yb_heading3">
<td height="35">Shop User </td>
<td>Date</td>
<td>ShopID</td>
<td height="35">Status</td>
<td height="35">Time In </td>
<td height="35" bgcolor="#99CC33">Time Out </td>
<td height="35">Edit Data </td>
</tr>
<form method="post" name="form_new" action="<?php echo $editFormAction; ?>">
<input type="hidden" name="MM_insert" value="form_new">
</form>
<?php while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)) { //do {
if($visit_id == $row_Recordset1['shop_visit_id']) {?>
<form method="post" name="FormUpdate_<?php echo $row_Recordset1['shop_visit_id']; ?>" action="<?php echo $editFormAction; ?>">
<tr valign="bottom" bordercolor="#CCCCCC" bgcolor="#CCCC33">
<td>Edit Record: <br>
<?php list_contacts('contact_id', $row_Recordset1['contact_id']); ?></td>
<td><input name="date" type="text" value="<?php echo $row_Recordset1['date']; ?>" size="10" maxlength="10" /></td>
<td>&nbsp;</td>
<td><?php list_shop_user_roles('user_role', $row_Recordset1['shop_user_role']); ?></td>
<td><?php list_time("{$current_date} 08:00:00",'0000-00-00 00:00:00','time_in',-60,0,$row_Recordset1['time_in'],16); ?></td>
<td><?php
if ($row_Recordset1['time_out'] <> '0000-00-00 00:00:00'){
list_time($row_Recordset1['time_in'],$row_Recordset1['time_out'],'time_out',0,1,$row_Recordset1['time_out']);
} ?></td>
<td><input type="submit" name="Submit" value="Update Changes" /></td>
</tr>
<tr bordercolor="#CCCCCC" bgcolor="#CCCC33">
<td colspan="7"><table border="0" cellspacing="0" cellpadding="1">
<tr>
<td width="125"><div align="right">Project:</div></td>
<td><?php list_projects_collective('project', $row_Recordset1['project_id']); ?></td>
</tr>
<tr>
<td><div align="right">Comment:</div></td>
<td><input name="comment" type="text" value="<?php echo $row_Recordset1['comment']; ?>" size="90" /></td>
</tr>
<tr>
<td><div align="right">Delete:</div></td>
<td>Click to Delete this Shop User's Visit: <a href="<?php echo PAGE_SHOP_LOG_DELETE_VISIT . "?visit_id={$visit_id}&shop_id={$individual_shop_id}";?>">Delete</a> </td>
</tr>
</table> </td>
</tr>
<input type="hidden" name="MM_insert" value="FormEdit">
<input type="hidden" name="shop_visit_id" value="<?php echo $row_Recordset1['shop_visit_id']; ?>">
</form>
<?php } else { //This section executes if it is not the visit_id selected NOT FOR EDIT ?>
<form method="post" name="FormUpdate_<?php echo $row_Recordset1['shop_visit_id']; ?>" action="<?php echo $editFormAction; ?>">
<tr bordercolor="#CCCCCC">
<td><?php echo $row_Recordset1['full_name']; ?></td>
<td><?php echo $row_Recordset1['date'] . " (" . $row_Recordset1['dayname'] . ")"; ?></td>
<td><?php echo "<a href=\"{$page_shop_log}?shop_id={$row_Recordset1['shop_id']}\">{$row_Recordset1['shop_id']}</a>";?></td>
<td><?php echo $row_Recordset1['shop_user_role']; ?></td>
<td><?php echo date_to_time($row_Recordset1['time_in']); ?></td>
<td><?php echo list_time($row_Recordset1['time_in'],$row_Recordset1['time_out'],'time_out',0,1,'none', 8,$row_Recordset1['et']); ?></td>
<td><?php echo "<a href=\"{$_SERVER['PHP_SELF']}?contact_id={$contact_id}&visit_id={$row_Recordset1['shop_visit_id']}\">edit</a>"; ?></td>
</tr>
<input type="hidden" name="MM_insert" value="FormUpdate">
<input type="hidden" name="shop_visit_id" value="<?php echo $row_Recordset1['shop_visit_id']; ?>">
</form>
<?php } // if
} //while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); // while Recordset1 ?>
</table> </tr>
</table>
<form id="form1" name="form1" method="post" action="">
<br />
Show
<input name="record_count" type="text" value="10" size="3" maxlength="3" />
shops on or before:
<input name="shop_date" type="text" id="shop_date" value="<?php echo current_date(); ?>" size="10" maxlength="10" />
Day of week:
<select name="dayname">
<option value="alldays" selected="selected">All Days</option>
<option value="Monday">Monday</option>
<option value="Tuesday">Tuesday</option>
<option value="Wednesday">Wednesday</option>
<option value="Thursday">Thursday</option>
<option value="Friday">Friday</option>
<option value="Saturday">Saturday</option>
<option value="Sunday">Sunday</option>
</select>
<input type="submit" name="Submit" value="Submit" />
(date format YYYY-MM-DD)
<input type="hidden" name="MM_insert" value="ChangeDate" />
</form>
<p>&nbsp;</p>
<?php include("../include_footer.html"); ?>
<?php
mysql_free_result($Recordset1);
?>

Binary file not shown.

View File

@ -8,7 +8,6 @@ $(function(){
var birth_date = $("#birth_date");
var waiver_checkbox = $("#waiver_checkbox"), waiver_error = $("#waiver_error");
var first_name = $("#first_name"), first_name_error = $("#first_name_error");
var middle_initial = $("#middle_initial"), middle_initial_error = $("#middle_name_error");
var last_name = $("#last_name"), last_name_error = $("#last_name_error");
var phone = $("#phone"), phone_error = $("#phone_error");
var email = $("#email"), email_error = $("#email_error");
@ -59,7 +58,7 @@ $(function(){
// check for errors
//error_handler(input,error_span,error,error_text,event);
var err0 = 0, err1 = 0, err2 = 0, err3 = 0, err4 = 0, err5 = 0, err6 = 0;
var err0 = 0, err1 = 0, err2 = 0, err3 = 0, err4 = 0, err5 = 0;
// if it is showing
$("#email_list_error").hide();
@ -67,18 +66,6 @@ $(function(){
// first name & last name input
err0 = error_handler(first_name.val(), first_name_error, "","*Required",e);
err1 = error_handler(last_name.val(), last_name_error, "","*Required",e);
// test whether patron's name already exists
// and if name matches a different contact_i
$.post("json/contact.php", {first_name: first_name.val(), middle_initial: middle_initial.val(),
last_name: last_name.val(), contact_id: contact_id, test_name: 1 }, function(data) {
if(data === "1") {
err6 = error_handler(0, last_name_error, "","*Your name already exists, please choose a different middle initial.",e);
}
} );
// email and phone input
if (email.val() === "" && phone.val() === "") {
@ -119,7 +106,7 @@ $(function(){
// waiver checkbox
err5 = error_handler(waiver_checkbox.prop("checked"),waiver_error,false,"*Required",e);
if ((err0 + err1 + err2 + err3 + err4 + err5 + err6) > 0 ) {
if ((err0 + err1 + err2 + err3 + err4 + err5) > 0 ) {
} else {
//e.preventDefault();

View File

@ -1,113 +0,0 @@
(function( $ ){
$.fn.pad = function( options ) {
var settings = {
'host' : 'http://beta.etherpad.org',
'baseUrl' : '/p/',
'showControls' : false,
'showChat' : false,
'showLineNumbers' : false,
'userName' : 'unnamed',
'lang' : '',
'useMonospaceFont' : false,
'noColors' : false,
'userColor' : false,
'hideQRCode' : false,
'alwaysShowChat' : false,
'width' : 100,
'height' : 100,
'border' : 0,
'borderStyle' : 'solid',
'toggleTextOn' : 'Disable Rich-text',
'toggleTextOff' : 'Enable Rich-text',
'plugins' : {},
'rtl' : false
};
var $self = this;
if (!$self.length) return;
if (!$self.attr('id')) throw new Error('No "id" attribute');
var useValue = $self[0].tagName.toLowerCase() == 'textarea';
var selfId = $self.attr('id');
var epframeId = 'epframe'+ selfId;
// This writes a new frame if required
if ( !options.getContents ) {
if ( options ) {
$.extend( settings, options );
}
var pluginParams = '';
for(var option in settings.plugins) {
pluginParams += '&' + option + '=' + settings.plugins[option]
}
var iFrameLink = '<iframe id="'+epframeId;
iFrameLink = iFrameLink +'" name="' + epframeId;
iFrameLink = iFrameLink +'" src="' + settings.host+settings.baseUrl+settings.padId;
iFrameLink = iFrameLink + '?showControls=' + settings.showControls;
iFrameLink = iFrameLink + '&showChat=' + settings.showChat;
iFrameLink = iFrameLink + '&showLineNumbers=' + settings.showLineNumbers;
iFrameLink = iFrameLink + '&useMonospaceFont=' + settings.useMonospaceFont;
iFrameLink = iFrameLink + '&userName=' + settings.userName;
if (settings.lang) {
iFrameLink = iFrameLink + '&lang=' + settings.lang;
}
iFrameLink = iFrameLink + '&noColors=' + settings.noColors;
iFrameLink = iFrameLink + '&userColor=' + settings.userColor;
iFrameLink = iFrameLink + '&hideQRCode=' + settings.hideQRCode;
iFrameLink = iFrameLink + '&alwaysShowChat=' + settings.alwaysShowChat;
iFrameLink = iFrameLink + '&rtl=' + settings.rtl;
iFrameLink = iFrameLink + pluginParams;
iFrameLink = iFrameLink +'" style="border:' + settings.border;
iFrameLink = iFrameLink +'; border-style:' + settings.borderStyle;
iFrameLink = iFrameLink +';" width="' + '100%';//settings.width;
iFrameLink = iFrameLink +'" height="' + settings.height;
iFrameLink = iFrameLink +'"></iframe>';
var $iFrameLink = $(iFrameLink);
if (useValue) {
var $toggleLink = $('<a href="#'+ selfId +'">'+ settings.toggleTextOn +'</a>').click(function(){
var $this = $(this);
$this.toggleClass('active');
if ($this.hasClass('active')) $this.text(settings.toggleTextOff);
$self.pad({getContents: true});
return false;
});
$self
.hide()
.after($toggleLink)
.after($iFrameLink)
;
}
else {
$self.html(iFrameLink);
}
}
// This reads the etherpad contents if required
else {
var frameUrl = $('#'+ epframeId).attr('src').split('?')[0];
var contentsUrl = frameUrl + "/export/html";
var target = $('#'+ options.getContents);
// perform an ajax call on contentsUrl and write it to the parent
$.get(contentsUrl, function(data) {
if (target.is(':input')) {
target.val(data).show();
}
else {
target.html(data);
}
$('#'+ epframeId).remove();
});
}
return $self;
};
})( jQuery );

View File

@ -1 +0,0 @@
node_modules

View File

@ -1,7 +0,0 @@
bower_components/
bower.json
node_modules/
npm-debug.log
gulpfile.cofee
src/
.github

View File

@ -1,89 +0,0 @@
### Automatically adjust textarea width/height based on user input.
#### Non-sucking version, still works great and used by a lot of people with no issues!
The only reason I wrote this jQuery plugin is that other plugins suck. They are wide-spread, but outdated and buggy.
Advantages of jquery.ns-autogrow:
* Grows vertically, horizontally or both
* Correctly handles 2 or more spaces
* Copies more css and font styles to shadow div
* Correctly handles long words on one line
* Flickering can be disabled on Enter
* Doesn't add more than one handler to textarea
* Handles textarea scrollbar if any
* Improved support of special characters
## Download
Run one of these commands in your bash according to your needs.
`git clone https://github.com/ro31337/jquery.ns-autogrow.git`
`bower install jquery.ns-autogrow`
`npm install jquery.ns-autogrow`
Or download the latest version from the [releases](https://github.com/ro31337/jquery.ns-autogrow/releases) page.
### Options
You can provide multiple options to autogrow like:
```
$('.example2 textarea').autogrow({vertical: true, horizontal: false});
```
List of options:
Option | Description
-------|------------
vertical | (true/false) - Enable/Disable vertical autogrow (true by default)
horizontal | (true/false) - Enable/Disable horizontal autogrow (true by default)
postGrowCallback | Post grow callback. Executes after dimensions of textarea have been adjusted.
flickering | (true/false) - Enable/Disable flickering. If flickering is disabled, extra line will be added to textarea. Flickering is _enabled_ by default.
There are few more options reserved for debugging purposes. All debugging options start with `debug` prefix:
Option | Description
-------|------------
debugx | X position of shadow element (-10000 by default)
debugy | Y position of shadow element (-10000 by default)
debugcolor | Color of shadow element (yellow by default)
### Demo
[Click here](http://htmlpreview.github.io/?https://raw.githubusercontent.com/ro31337/jquery.ns-autogrow/master/demo/index.html)
### Plans:
* Test and support arabic languages
### :heart: Like it? :heart:
:star: Star it! :star:
### The MIT License (MIT)
The MIT License (MIT)
Copyright (c) 2015 Roman Pushkin
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@ -1,29 +0,0 @@
{
"name": "jquery.ns-autogrow",
"description": "Automatically adjust textarea height based on user input. Non-sucking version.",
"main": "dist/jquery.ns-autogrow.js",
"keywords": [
"autogrow",
"textarea",
"form",
"autosize",
"ui",
"jquery-plugin",
"ecosystem:jquery"
],
"author": "Roman Pushkin <roman.pushkin@gmail.com>",
"homepage": "https://github.com/ro31337/jquery.ns-autogrow",
"license": "MIT",
"ignore": [
"**/.*",
"bower_components",
"node_modules",
"npm-debug.log",
"gulpfile.coffee",
"package.json",
"src"
],
"dependencies": {
"jquery": "1"
}
}

View File

@ -1,31 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<script data-require="jquery@2.1.4" data-semver="2.1.4" src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
<script src="../dist/jquery.ns-autogrow.min.js"></script>
<link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css" />
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body>
<div class="example1">
<textarea placeholder="horizontal and vertical"></textarea>
</div>
<div class="example2">
<textarea placeholder="vertical only"></textarea>
</div>
<div class="example3">
<textarea placeholder="horizontal only"></textarea>
</div>
<div class="example4">
<textarea placeholder="horizontal and vertical, no flickering"></textarea>
</div>
</body>
</html>

View File

@ -1,6 +0,0 @@
$(function(){
$('.example1 textarea').autogrow();
$('.example2 textarea').autogrow({vertical: true, horizontal: false});
$('.example3 textarea').autogrow({vertical: false, horizontal: true});
$('.example4 textarea').autogrow({flickering: false});
});

View File

@ -1,3 +0,0 @@
body { padding: 20px; }
textarea { min-width: 240px; font-size: 18px; }
.example3 textarea { min-height: 50px; }

View File

@ -1,139 +0,0 @@
/*!
Non-Sucking Autogrow 1.1.6
license: MIT
author: Roman Pushkin
https://github.com/ro31337/jquery.ns-autogrow
*/
(function() {
var getVerticalScrollbarWidth;
(function($, window) {
return $.fn.autogrow = function(options) {
if (options == null) {
options = {};
}
if (options.horizontal == null) {
options.horizontal = true;
}
if (options.vertical == null) {
options.vertical = true;
}
if (options.debugx == null) {
options.debugx = -10000;
}
if (options.debugy == null) {
options.debugy = -10000;
}
if (options.debugcolor == null) {
options.debugcolor = 'yellow';
}
if (options.flickering == null) {
options.flickering = true;
}
if (options.postGrowCallback == null) {
options.postGrowCallback = function() {};
}
if (options.verticalScrollbarWidth == null) {
options.verticalScrollbarWidth = getVerticalScrollbarWidth();
}
if (options.horizontal === false && options.vertical === false) {
return;
}
return this.filter('textarea').each(function() {
var $e, $shadow, fontSize, heightPadding, minHeight, minWidth, update;
$e = $(this);
if ($e.data('autogrow-enabled')) {
return;
}
$e.data('autogrow-enabled');
minHeight = $e.height();
minWidth = $e.width();
heightPadding = $e.css('lineHeight') * 1 || 0;
$e.hasVerticalScrollBar = function() {
return $e[0].clientHeight < $e[0].scrollHeight;
};
$shadow = $('<div class="autogrow-shadow"></div>').css({
position: 'absolute',
display: 'inline-block',
'background-color': options.debugcolor,
top: options.debugy,
left: options.debugx,
'max-width': $e.css('max-width'),
'padding': $e.css('padding'),
fontSize: $e.css('fontSize'),
fontFamily: $e.css('fontFamily'),
fontWeight: $e.css('fontWeight'),
lineHeight: $e.css('lineHeight'),
resize: 'none',
'word-wrap': 'break-word'
}).appendTo(document.body);
if (options.horizontal === false) {
$shadow.css({
'width': $e.width()
});
} else {
fontSize = $e.css('font-size');
$shadow.css('padding-right', '+=' + fontSize);
$shadow.normalPaddingRight = $shadow.css('padding-right');
}
update = (function(_this) {
return function(event) {
var height, val, width;
val = _this.value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\n /g, '<br/>&nbsp;').replace(/"/g, '&quot;').replace(/'/g, '&#39;').replace(/\n$/, '<br/>&nbsp;').replace(/\n/g, '<br/>').replace(/ {2,}/g, function(space) {
return Array(space.length - 1).join('&nbsp;') + ' ';
});
if (/(\n|\r)/.test(_this.value)) {
val += '<br />';
if (options.flickering === false) {
val += '<br />';
}
}
$shadow.html(val);
if (options.vertical === true) {
height = Math.max($shadow.height() + heightPadding, minHeight);
$e.height(height);
}
if (options.horizontal === true) {
$shadow.css('padding-right', $shadow.normalPaddingRight);
if (options.vertical === false && $e.hasVerticalScrollBar()) {
$shadow.css('padding-right', "+=" + options.verticalScrollbarWidth + "px");
}
width = Math.max($shadow.outerWidth(), minWidth);
$e.width(width);
}
return options.postGrowCallback($e);
};
})(this);
$e.change(update).keyup(update).keydown(update);
$(window).resize(update);
return update();
});
};
})(window.jQuery, window);
getVerticalScrollbarWidth = function() {
var inner, outer, w1, w2;
inner = document.createElement('p');
inner.style.width = "100%";
inner.style.height = "200px";
outer = document.createElement('div');
outer.style.position = "absolute";
outer.style.top = "0px";
outer.style.left = "0px";
outer.style.visibility = "hidden";
outer.style.width = "200px";
outer.style.height = "150px";
outer.style.overflow = "hidden";
outer.appendChild(inner);
document.body.appendChild(outer);
w1 = inner.offsetWidth;
outer.style.overflow = 'scroll';
w2 = inner.offsetWidth;
if (w1 === w2) {
w2 = outer.clientWidth;
}
document.body.removeChild(outer);
return w1 - w2;
};
}).call(this);

View File

@ -1,7 +0,0 @@
/*!
Non-Sucking Autogrow 1.1.6
license: MIT
author: Roman Pushkin
https://github.com/ro31337/jquery.ns-autogrow
*/
(function(){var e;!function(t,l){return t.fn.autogrow=function(i){if(null==i&&(i={}),null==i.horizontal&&(i.horizontal=!0),null==i.vertical&&(i.vertical=!0),null==i.debugx&&(i.debugx=-1e4),null==i.debugy&&(i.debugy=-1e4),null==i.debugcolor&&(i.debugcolor="yellow"),null==i.flickering&&(i.flickering=!0),null==i.postGrowCallback&&(i.postGrowCallback=function(){}),null==i.verticalScrollbarWidth&&(i.verticalScrollbarWidth=e()),i.horizontal!==!1||i.vertical!==!1)return this.filter("textarea").each(function(){var e,n,r,o,a,c,d;if(e=t(this),!e.data("autogrow-enabled"))return e.data("autogrow-enabled"),a=e.height(),c=e.width(),o=1*e.css("lineHeight")||0,e.hasVerticalScrollBar=function(){return e[0].clientHeight<e[0].scrollHeight},n=t('<div class="autogrow-shadow"></div>').css({position:"absolute",display:"inline-block","background-color":i.debugcolor,top:i.debugy,left:i.debugx,"max-width":e.css("max-width"),padding:e.css("padding"),fontSize:e.css("fontSize"),fontFamily:e.css("fontFamily"),fontWeight:e.css("fontWeight"),lineHeight:e.css("lineHeight"),resize:"none","word-wrap":"break-word"}).appendTo(document.body),i.horizontal===!1?n.css({width:e.width()}):(r=e.css("font-size"),n.css("padding-right","+="+r),n.normalPaddingRight=n.css("padding-right")),d=function(t){return function(l){var r,d,s;return d=t.value.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\n /g,"<br/>&nbsp;").replace(/"/g,"&quot;").replace(/'/g,"&#39;").replace(/\n$/,"<br/>&nbsp;").replace(/\n/g,"<br/>").replace(/ {2,}/g,function(e){return Array(e.length-1).join("&nbsp;")+" "}),/(\n|\r)/.test(t.value)&&(d+="<br />",i.flickering===!1&&(d+="<br />")),n.html(d),i.vertical===!0&&(r=Math.max(n.height()+o,a),e.height(r)),i.horizontal===!0&&(n.css("padding-right",n.normalPaddingRight),i.vertical===!1&&e.hasVerticalScrollBar()&&n.css("padding-right","+="+i.verticalScrollbarWidth+"px"),s=Math.max(n.outerWidth(),c),e.width(s)),i.postGrowCallback(e)}}(this),e.change(d).keyup(d).keydown(d),t(l).resize(d),d()})}}(window.jQuery,window),e=function(){var e,t,l,i;return e=document.createElement("p"),e.style.width="100%",e.style.height="200px",t=document.createElement("div"),t.style.position="absolute",t.style.top="0px",t.style.left="0px",t.style.visibility="hidden",t.style.width="200px",t.style.height="150px",t.style.overflow="hidden",t.appendChild(e),document.body.appendChild(t),l=e.offsetWidth,t.style.overflow="scroll",i=e.offsetWidth,l===i&&(i=t.clientWidth),document.body.removeChild(t),l-i}}).call(this);

View File

@ -1,54 +0,0 @@
gulp = require 'gulp'
del = require 'del'
coffee = require 'gulp-coffee'
coffeelint = require 'gulp-coffeelint'
header = require 'gulp-header'
uglify = require 'gulp-uglify'
rename = require 'gulp-rename'
pjson = require './package.json'
copyright = """
/*!
Non-Sucking Autogrow #{pjson.version}
license: #{pjson.license}
author: Roman Pushkin
#{pjson.homepage}
*/
"""
dest = 'dist/'
source = 'src/'
code =
in: "#{source}*.coffee"
out: "#{dest}"
gulp.task 'clean', ->
del [dest + '*']
gulp.task 'build', ->
gulp
.src code.in
.pipe coffeelint()
.pipe coffeelint.reporter() # Show coffeelint errors
.pipe coffeelint.reporter('fail') # Make sure it fails in case of error
.pipe coffee()
.pipe header copyright
.pipe gulp.dest(code.out)
gulp
.src code.in
.pipe coffeelint()
.pipe coffeelint.reporter() # Show coffeelint errors
.pipe coffeelint.reporter('fail') # Make sure it fails in case of error
.pipe coffee()
.pipe uglify()
.pipe rename({ suffix: '.min' })
.pipe header copyright
.pipe gulp.dest(code.out)
gulp.task 'watch', ->
gulp
.watch code.in, ['build']
gulp.task 'default', ['clean', 'build', 'watch'], ->

View File

@ -1,45 +0,0 @@
{
"name": "jquery.ns-autogrow",
"version": "1.1.6",
"description": "Automatically adjust textarea height based on user input. Non-sucking version.",
"main": "dist/jquery.ns-autogrow.js",
"keywords": [
"autogrow",
"textarea",
"form",
"autosize",
"ui",
"jquery-plugin",
"ecosystem:jquery"
],
"author": "Roman Pushkin <roman.pushkin@gmail.com>",
"homepage": "https://github.com/ro31337/jquery.ns-autogrow",
"license": "MIT",
"repository": {
"type": "git",
"url": "https://github.com/ro31337/jquery.ns-autogrow.git"
},
"files": [
"demo",
"dist"
],
"directories": {
"example": "demo"
},
"bugs": {
"url": "https://github.com/ro31337/jquery.ns-autogrow/issues"
},
"dependencies": {
"jquery": "^1.12.4"
},
"devDependencies": {
"coffee-script": "^1.10.0",
"del": "^2.0.2",
"gulp": "^3.9.0",
"gulp-coffee": "^2.3.1",
"gulp-coffeelint": "^0.5.0",
"gulp-header": "^1.7.1",
"gulp-rename": "^1.2.2",
"gulp-uglify": "^1.4.1"
}
}

View File

@ -1,131 +0,0 @@
(($, window) ->
$.fn.autogrow = (options) ->
options ?= {}
options.horizontal ?= true
options.vertical ?= true
options.debugx ?= -10000
options.debugy ?= -10000
options.debugcolor ?= 'yellow'
options.flickering ?= true
options.postGrowCallback ?= ->
options.verticalScrollbarWidth ?= getVerticalScrollbarWidth()
if options.horizontal is false and options.vertical is false
return
@.filter('textarea').each ->
$e = $(@)
return if $e.data 'autogrow-enabled'
$e.data 'autogrow-enabled'
minHeight = $e.height()
minWidth = $e.width()
heightPadding = $e.css('lineHeight') * 1 || 0
$e.hasVerticalScrollBar = ->
$e[0].clientHeight < $e[0].scrollHeight
$shadow = $('<div class="autogrow-shadow"></div>')
.css (
position: 'absolute'
display: 'inline-block'
'background-color': options.debugcolor
top: options.debugy
left: options.debugx
'max-width': $e.css 'max-width'
'padding': $e.css 'padding'
fontSize: $e.css 'fontSize'
fontFamily: $e.css 'fontFamily'
fontWeight: $e.css 'fontWeight'
lineHeight: $e.css 'lineHeight'
resize: 'none'
'word-wrap': 'break-word' )
.appendTo document.body
if options.horizontal is false
# fix width of shadow div, so it will remain unchanged
$shadow.css({'width': $e.width()})
else
# make sure we have right padding to avoid flickering
fontSize = $e.css 'font-size' # => 20px
$shadow.css('padding-right', '+=' + fontSize)
$shadow.normalPaddingRight = $shadow.css 'padding-right'
update = (event) =>
val = @
.value
.replace /&/g, '&amp;'
.replace /</g, '&lt;'
.replace />/g, '&gt;'
.replace /\n /g, '<br/>&nbsp;'
.replace /"/g, '&quot;'
.replace /'/g, '&#39;'
.replace /\n$/, '<br/>&nbsp;'
.replace /\n/g, '<br/>'
.replace(
/ {2,}/g
(space) -> Array(space.length - 1).join('&nbsp;') + ' '
)
if /(\n|\r)/.test @.value
val += '<br />'
# no flickering, but one extra line will be added
if options.flickering is false
val += '<br />'
$shadow.html val
if options.vertical is true
height = Math.max($shadow.height() + heightPadding, minHeight)
$e.height height
if options.horizontal is true
$shadow.css 'padding-right', $shadow.normalPaddingRight
# if it should not grow vertically and if we have scrollbar,
# add additional padding to shadow div to emulate the scrollbar
if options.vertical is false and $e.hasVerticalScrollBar()
$shadow.css 'padding-right', "+=#{options.verticalScrollbarWidth}px"
# outerWidth is width with padding
width = Math.max $shadow.outerWidth(), minWidth
$e.width width
options.postGrowCallback $e
$e.change update
.keyup update
.keydown update
$(window).resize update
update()
) window.jQuery, window
getVerticalScrollbarWidth = ->
inner = document.createElement('p')
inner.style.width = "100%"
inner.style.height = "200px"
outer = document.createElement('div')
outer.style.position = "absolute"
outer.style.top = "0px"
outer.style.left = "0px"
outer.style.visibility = "hidden"
outer.style.width = "200px"
outer.style.height = "150px"
outer.style.overflow = "hidden"
outer.appendChild (inner)
document.body.appendChild (outer)
w1 = inner.offsetWidth
outer.style.overflow = 'scroll'
w2 = inner.offsetWidth
if w1 is w2
w2 = outer.clientWidth
document.body.removeChild (outer)
w1 - w2

File diff suppressed because it is too large Load Diff

View File

@ -1,17 +0,0 @@
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
[*.{js,json}]
indent_size = 4
[*.{yml}]
indent_size = 2
[*.md]
trim_trailing_whitespace = false

View File

@ -1,4 +0,0 @@
# we don't have non-text files, don't take chances with git's text=auto
* text
# this file is read by nuget (Windows) tooling, lets keep it happy
Moment.js.nuspec eol=crlf

15
js/moment/.gitignore vendored
View File

@ -1,15 +0,0 @@
node_modules/
.DS_Store
min/moment+customlangs.js
min/moment+customlangs.min.js
sauce_connect.log
.sauce-labs.creds
npm-debug.log
.build*
build
coverage
nyc_output
.nyc_output
.coveralls.yml
.vscode/
.idea

View File

@ -1,65 +0,0 @@
{
"requireCurlyBraces": [
"if",
"else",
"for",
"while",
"do",
"try",
"catch"
],
"requireSpaceAfterKeywords": [
"if",
"else",
"for",
"while",
"do",
"switch",
"return",
"try",
"catch"
],
"requireSpaceBeforeBlockStatements": true,
"requireParenthesesAroundIIFE": true,
"requireSpacesInConditionalExpression": true,
"requireSpacesInAnonymousFunctionExpression": {
"beforeOpeningRoundBrace": true,
"beforeOpeningCurlyBrace": true
},
"requireSpacesInNamedFunctionExpression": {
"beforeOpeningCurlyBrace": true
},
"disallowSpacesInNamedFunctionExpression": {
"beforeOpeningRoundBrace": true
},
"requireBlocksOnNewline": true,
"disallowPaddingNewlinesInBlocks": true,
"disallowEmptyBlocks": true,
"disallowSpacesInsideObjectBrackets": true,
"disallowSpacesInsideArrayBrackets": true,
"disallowSpacesInsideParentheses": true,
"requireCommaBeforeLineBreak": true,
"disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"],
"disallowSpaceBeforePostfixUnaryOperators": ["++", "--"],
"requireSpaceBeforeBinaryOperators": [
"=", "+=", "-=", "*=", "/=", "%=", "<<=", ">>=", ">>>=",
"&=", "|=", "^=",
"+", "-", "*", "/", "%", "<<", ">>", ">>>", "&",
"|", "^", "&&", "||", "===", "==", ">=",
"<=", "<", ">", "!=", "!=="
],
"requireSpaceAfterBinaryOperators": true,
"requireCamelCaseOrUpperCaseIdentifiers": "ignoreProperties",
"disallowKeywords": ["with"],
"disallowMultipleLineStrings": true,
"validateIndentation": 4,
"disallowTrailingWhitespace": true,
"disallowTrailingComma": true,
"requireLineFeedAtFileEnd": true,
"requireCapitalizedConstructors": true,
"validateQuoteMarks": {
"mark": "'",
"escape": true
}
}

View File

@ -1,31 +0,0 @@
{
"node" : true,
"browser" : true,
"boss" : false,
"curly" : true,
"debug" : false,
"devel" : false,
"eqeqeq" : true,
"eqnull" : true,
"esnext" : true,
"evil" : false,
"forin" : false,
"immed" : false,
"laxbreak" : false,
"newcap" : true,
"noarg" : true,
"noempty" : false,
"nonew" : false,
"onevar" : true,
"plusplus" : false,
"regexp" : false,
"undef" : true,
"sub" : true,
"strict" : false,
"white" : true,
"es3" : false,
"camelcase" : true,
"globals": {
"define": false
}
}

View File

@ -1,3 +0,0 @@
test
min/tests.js
.npmignore

View File

@ -1,8 +0,0 @@
benchmarks
bower_components
meteor
min
node_modules
scripts
tasks
test

View File

@ -1,25 +0,0 @@
language: node_js
node_js:
- "node"
- "7"
- "6"
- "5"
- "4"
sudo: false
env:
global:
- secure: "M4STT2TOZxjzv3cZOgSVi0J4j6enrGjgE+p5YTNUw+S6Dg6FS5pTIPeafu1kGhfm7F0uk7xPVwGKYb+3uWNO9IhkKXz8jySMMQ2iKISHwECGNNuFNjSMD1vIjbIkLwV8TyPO/PurQg2s+WtYz+DoAZsDFKpdaRUtif64OjdQ3vQ="
- secure: "V+i7kHoGe7VXWGplPNqJz+aDtgDF9Dh9/guoaf2BPyXLvkFW6VgMjJyoNUW7JVsakrWzAz2ubb734vAPDt7BCcFQ2BqfatOmabdFogviCaXC6IqVaEkYS2eSP7MIUPIeWJgnTrDGzkFMDk4K7y5SiVJ8UmYwZxe+tJV7kbb0Yig="
install:
- npm install
- npm install -g grunt-cli
script: grunt build:travis
git:
depth: 10
# TODO: Fix problem with coveralls.io not displaying autogenerated files
# after_success: npm run coveralls

View File

@ -1,799 +0,0 @@
Changelog
=========
### 2.19.1
* Release Oct 11, 2017
Make react native and webpack both work
* #4225 #4226 #4232
### 2.19.0 [See full changelog](https://gist.github.com/ichernev/5f3f4eb02761b4f765a0cccf02cec603)
* Release Oct 10, 2017
## Fix React Native 0.49+ crash
* [#4213](https://github.com/moment/moment/pull/4213) [critical] Rename dynamic
require to avoid React Native crash
* [#4214](https://github.com/moment/moment/pull/4214) [fixup] Move require
rename inside try/catch, fixes
[#4213](https://github.com/moment/moment/issues/4213)
## Features
* [#3735](https://github.com/moment/moment/pull/3735) [feature] Ignore NaN values in setters
* [#4106](https://github.com/moment/moment/pull/4106) [fixup] Drop isNumeric utility fn, fixes [#3735](https://github.com/moment/moment/issues/3735)
* [#4080](https://github.com/moment/moment/pull/4080) [feature] Implement a clone method for durations, fixes [#4078](https://github.com/moment/moment/issues/4078)
* [#4215](https://github.com/moment/moment/pull/4215) [misc] TS: Add duration.clone(), for [#4080](https://github.com/moment/moment/issues/4080)
## Packaging
* [#4003](https://github.com/moment/moment/pull/4003) [pkg] bower: Remove tests from package
* [#3904](https://github.com/moment/moment/pull/3904) [pkg] jsnext:main -> module in package.json
* [#4060](https://github.com/moment/moment/pull/4060) [pkg] Account for new rollup interface
Bugfixes, new locales, locale fixes etc...
### 2.18.1
* Release Mar 22, 2017
* [#3853](https://github.com/moment/moment/pull/3853) [misc] Fix invalid whitespace character causing inability to parse
moment.js
### 2.18.0 [See full changelog](https://gist.github.com/ichernev/78920c5a1e419fb28c6e4546d1b7235c)
* Release Mar 18, 2017
## Features
* [#3708](https://github.com/moment/moment/pull/3708) [feature] RFC2822 parsing
* [#3611](https://github.com/moment/moment/pull/3611) [feature] Durations gain validity
* [#3738](https://github.com/moment/moment/pull/3738) [feature] Enable relative time for multiple seconds, request [#2558](https://github.com/moment/moment/issues/2558)
* [#3766](https://github.com/moment/moment/pull/3766) [feature] Add support for k and kk format parsing
## Bugfixes
* [#3643](https://github.com/moment/moment/pull/3643) [bugfix] Fixes [#3520](https://github.com/moment/moment/issues/3520), parseZone incorrectly handled minutes under 16
* [#3710](https://github.com/moment/moment/pull/3710) [bugfix] Fixes [#3632](https://github.com/moment/moment/issues/3632), toISOString returns null for invalid date
* [#3787](https://github.com/moment/moment/pull/3787) [bugfix] Fixes [#3717](https://github.com/moment/moment/issues/3717), ensure day-of-year is non-zero
* [#3780](https://github.com/moment/moment/pull/3780) [bugfix] Fixes [#3765](https://github.com/moment/moment/issues/3765): Ensure year 0 is formatted with YYYY
* [#3806](https://github.com/moment/moment/pull/3806) [bugfix] Fixes [#3805](https://github.com/moment/moment/issues/3805), fix locale month getters for standalone/format cases
7 new locales, many locale improvements and some misc changes
### 2.17.1 [Also available here](https://gist.github.com/ichernev/f38280b2b29c4932914a6d3a4e50bfb2)
* Release Dec 03, 2016
* [#3638](https://github.com/moment/moment/pull/3638) [misc] TS: Make typescript definitions work with 1.x
* [#3628](https://github.com/moment/moment/pull/3628) [misc] Adds "sign CLA" link to `CONTRIBUTING.md`
* [#3640](https://github.com/moment/moment/pull/3640) [misc] Fix locale issues
### 2.17.0 [Also available here](https://gist.github.com/ichernev/ed58f76fb95205eeac653d719972b90c)
* Release Nov 22, 2016
* [#3435](https://github.com/moment/moment/pull/3435) [new locale] yo: Yoruba (Nigeria) locale
* [#3595](https://github.com/moment/moment/pull/3595) [bugfix] Fix accidental reference to global "value" variable
* [#3506](https://github.com/moment/moment/pull/3506) [bugfix] Fix invalid moments returning valid dates to method calls
* [#3563](https://github.com/moment/moment/pull/3563) [locale] ca: Change future relative time
* [#3504](https://github.com/moment/moment/pull/3504) [tests] Fixes [#3463](https://github.com/moment/moment/issues/3463), parseZone not handling Z correctly (tests only)
* [#3591](https://github.com/moment/moment/pull/3591) [misc] typescript: update typescript to 2.0.8, add strictNullChecks=true
* [#3597](https://github.com/moment/moment/pull/3597) [misc] Fixed capitalization in nuget spec
### 2.16.0 [See full changelog](https://gist.github.com/ichernev/17bffc1005a032cb1a8ac4c1558b4994)
* Release Nov 9, 2016
## Features
* [#3530](https://github.com/moment/moment/pull/3530) [feature] Check whether input is date before checking if format is array
* [#3515](https://github.com/moment/moment/pull/3515) [feature] Fix [#2300](https://github.com/moment/moment/issues/2300): Default to current week.
## Bugfixes
* [#3546](https://github.com/moment/moment/pull/3546) [bugfix] Implement lazy-loading of child locales with missing prents
* [#3523](https://github.com/moment/moment/pull/3523) [bugfix] parseZone should handle UTC
* [#3502](https://github.com/moment/moment/pull/3502) [bugfix] Fix [#3500](https://github.com/moment/moment/issues/3500): ISO 8601 parsing should match the full string, not the beginning of the string.
* [#3581](https://github.com/moment/moment/pull/3581) [bugfix] Fix parseZone, redo [#3504](https://github.com/moment/moment/issues/3504), fix [#3463](https://github.com/moment/moment/issues/3463)
## New Locales
* [#3416](https://github.com/moment/moment/pull/3416) [new locale] nl-be: Dutch (Belgium) locale
* [#3393](https://github.com/moment/moment/pull/3393) [new locale] ar-dz: Arabic (Algeria) locale
* [#3342](https://github.com/moment/moment/pull/3342) [new locale] tet: Tetun Dili (East Timor) locale
And more locale, build and typescript improvements
### 2.15.2
* Release Oct 23, 2016
* [#3525](https://github.com/moment/moment/pull/3525) Speedup month standalone/format regexes **(IMPORTANT)**
* [#3466](https://github.com/moment/moment/pull/3466) Fix typo of Javanese
### 2.15.1
* Release Sept 20, 2016
* [#3438](https://github.com/moment/moment/pull/3438) Fix locale autoload, revert [#3344](https://github.com/moment/moment/pull/3344)
### 2.15.0 [See full changelog](https://gist.github.com/ichernev/10e1c5bf647545c72ca30e9628a09ed3)
- Release Sept 12, 2016
## New Locales
* [#3255](https://github.com/moment/moment/pull/3255) [new locale] mi: Maori language
* [#3267](https://github.com/moment/moment/pull/3267) [new locale] ar-ly: Arabic (Libya) locale
* [#3333](https://github.com/moment/moment/pull/3333) [new locale] zh-hk: Chinese (Hong Kong) locale
## Bugfixes
* [#3276](https://github.com/moment/moment/pull/3276) [bugfix] duration: parser: Support ms durations in .NET syntax
* [#3312](https://github.com/moment/moment/pull/3312) [bugfix] locales: Enable locale-data getters without moment (fixes [#3284](https://github.com/moment/moment/issues/3284))
* [#3381](https://github.com/moment/moment/pull/3381) [bugfix] parsing: Fix parseZone without timezone in string, fixes [#3083](https://github.com/moment/moment/issues/3083)
* [#3383](https://github.com/moment/moment/pull/3383) [bugfix] toJSON: Fix isValid so that toJSON works after a moment is frozen
* [#3427](https://github.com/moment/moment/pull/3427) [bugfix] ie8: Fix IE8 (regression in 2.14.x)
## Packaging
* [#3299](https://github.com/moment/moment/pull/3299) [pkg] npm: Do not include .npmignore in npm package
* [#3273](https://github.com/moment/moment/pull/3273) [pkg] jspm: Include moment.d.ts file in package
* [#3344](https://github.com/moment/moment/pull/3344) [pkg] exports: use module.require for nodejs
Also some locale and typescript improvements
### 2.14.1
- Release July 20, 2016
* [#3280](https://github.com/moment/moment/pull/3280) Fix typescript definitions
### 2.14.0 [See full changelog](https://gist.github.com/ichernev/812e79ac36a7829a22598fe964bfc18a)
- Release July 20, 2016
## New Features
* [#3233](https://github.com/moment/moment/pull/3233) Introduce month.isFormat for format/standalone discovery
* [#2848](https://github.com/moment/moment/pull/2848) Allow user to get/set the rounding method used when calculating relative time
* [#3112](https://github.com/moment/moment/pull/3112) optimize configFromStringAndFormat
* [#3147](https://github.com/moment/moment/pull/3147) Call calendar format function with moment context
* [#3160](https://github.com/moment/moment/pull/3160) deprecate isDSTShifted
* [#3175](https://github.com/moment/moment/pull/3175) make moment calendar extensible with ad-hoc options
* [#3191](https://github.com/moment/moment/pull/3191) toDate returns a copy of the internal date object
* [#3192](https://github.com/moment/moment/pull/3192) Adding support for rollup import.
* [#3238](https://github.com/moment/moment/pull/3238) Handle empty object and empty array for creation as now
* [#3082](https://github.com/moment/moment/pull/3082) Use relative AMD moment dependency
## Bugfixes
* [#3241](https://github.com/moment/moment/pull/3241) Escape all 24 mixed pieces, not only first 12 in computeMonthsParse
* [#3008](https://github.com/moment/moment/pull/3008) Object setter orders sets based on size of unit
* [#3177](https://github.com/moment/moment/pull/3177) Bug Fix [#2704](https://github.com/moment/moment/pull/2704) - isoWeekday(String) inconsistent with isoWeekday(Number)
* [#3230](https://github.com/moment/moment/pull/3230) fix passing date with format string to ignore format string
* [#3232](https://github.com/moment/moment/pull/3232) Fix negative 0 in certain diff cases
* [#3235](https://github.com/moment/moment/pull/3235) Use proper locale inheritance for the base locale, fixes [#3137](https://github.com/moment/moment/pull/3137)
Plus es-do locale and locale bugfixes
### 2.13.0 [See full changelog](https://gist.github.com/ichernev/0132fcf5b61f7fc140b0bb0090480d49)
- Release April 18, 2016
## Enhancements:
* [#2982](https://github.com/moment/moment/pull/2982) Add 'date' as alias to 'day' for startOf() and endOf().
* [#2955](https://github.com/moment/moment/pull/2955) Add parsing negative components in durations when ISO 8601
* [#2991](https://github.com/moment/moment/pull/2991) isBetween support for both open and closed intervals
* [#3105](https://github.com/moment/moment/pull/3105) Add localeSorted argument to weekday listers
* [#3102](https://github.com/moment/moment/pull/3102) Add k and kk formatting tokens
## Bugfixes
* [#3109](https://github.com/moment/moment/pull/3109) Fix [#1756](https://github.com/moment/moment/issues/1756) Resolved thread-safe issue on server side.
* [#3078](https://github.com/moment/moment/pull/3078) Fix parsing for months/weekdays with weird characters
* [#3098](https://github.com/moment/moment/pull/3098) Use Z suffix when in UTC mode ([#3020](https://github.com/moment/moment/issues/3020))
* [#2995](https://github.com/moment/moment/pull/2995) Fix floating point rounding errors in durations
* [#3059](https://github.com/moment/moment/pull/3059) fix bug where diff returns -0 in month-related diffs
* [#3045](https://github.com/moment/moment/pull/3045) Fix mistaking any input for 'a' token
* [#2877](https://github.com/moment/moment/pull/2877) Use explicit .valueOf() calls instead of coercion
* [#3036](https://github.com/moment/moment/pull/3036) Year setter should keep time when DST changes
Plus 3 new locales and locale fixes.
### 2.12.0 [See full changelog](https://gist.github.com/ichernev/6e5bfdf8d6522fc4ac73)
- Release March 7, 2016
## Enhancements:
* [#2932](https://github.com/moment/moment/pull/2932) List loaded locales
* [#2818](https://github.com/moment/moment/pull/2818) Parse ISO-8061 duration containing both day and week values
* [#2774](https://github.com/moment/moment/pull/2774) Implement locale inheritance and locale updating
## Bugfixes:
* [#2970](https://github.com/moment/moment/pull/2970) change add subtract to handle decimal values by rounding
* [#2887](https://github.com/moment/moment/pull/2887) Fix toJSON casting of invalid moment
* [#2897](https://github.com/moment/moment/pull/2897) parse string arguments for month() correctly, closes #2884
* [#2946](https://github.com/moment/moment/pull/2946) Fix usage suggestions for min and max
## New locales:
* [#2917](https://github.com/moment/moment/pull/2917) Locale Punjabi(Gurmukhi) India format conversion
And more
### 2.11.2 (Fix ReDoS attack vector)
- Release February 7, 2016
* [#2939](https://github.com/moment/moment/pull/2939) use full-string match to speed up aspnet regex match
### 2.11.1 [See full changelog](https://gist.github.com/ichernev/8ec3ee25b749b4cff3c2)
- Release January 9, 2016
## Bugfixes:
* [#2881](https://github.com/moment/moment/pull/2881) Revert "Merge pull request #2746 from mbad0la:develop" Sep->Sept
* [#2868](https://github.com/moment/moment/pull/2868) Add format and parse token Y, so it actually works
* [#2865](https://github.com/moment/moment/pull/2865) Use typeof checks for undefined for global variables
* [#2858](https://github.com/moment/moment/pull/2858) Fix Date mocking regression introduced in 2.11.0
* [#2864](https://github.com/moment/moment/pull/2864) Include changelog in npm release
* [#2830](https://github.com/moment/moment/pull/2830) dep: add grunt-cli
* [#2869](https://github.com/moment/moment/pull/2869) Fix months parsing for some locales
### 2.11.0 [See full changelog](https://gist.github.com/ichernev/6594bc29719dde6b2f66)
- Release January 4, 2016
* [#2624](https://github.com/moment/moment/pull/2624) Proper handling of invalid moments
* [#2634](https://github.com/moment/moment/pull/2634) Fix strict month parsing issue in cs,ru,sk
* [#2735](https://github.com/moment/moment/pull/2735) Reset the locale back to 'en' after defining all locales in min/locales.js
* [#2702](https://github.com/moment/moment/pull/2702) Week rework
* [#2746](https://github.com/moment/moment/pull/2746) Changed September Abbreviation to "Sept" in locale-specific english
files and default locale file
* [#2646](https://github.com/moment/moment/pull/2646) Fix [#2645](https://github.com/moment/moment/pull/2645) - invalid dates pre-1970
* [#2641](https://github.com/moment/moment/pull/2641) Implement basic format and comma as ms separator in ISO 8601
* [#2665](https://github.com/moment/moment/pull/2665) Implement stricter weekday parsing
* [#2700](https://github.com/moment/moment/pull/2700) Add [Hh]mm and [Hh]mmss formatting tokens, so you can parse 123 with
hmm for example
* [#2565](https://github.com/moment/moment/pull/2565) [#2835](https://github.com/moment/moment/pull/2835) Expose arguments used for moment creation with creationData
(fix [#2443](https://github.com/moment/moment/pull/2443))
* [#2648](https://github.com/moment/moment/pull/2648) fix issue [#2640](https://github.com/moment/moment/pull/2640): support instanceof operator
* [#2709](https://github.com/moment/moment/pull/2709) Add isSameOrAfter and isSameOrBefore comparison methods
* [#2721](https://github.com/moment/moment/pull/2721) Fix moment creation from object with strings values
* [#2740](https://github.com/moment/moment/pull/2740) Enable 'd hh:mm:ss.sss' format for durations
* [#2766](https://github.com/moment/moment/pull/2766) [#2833](https://github.com/moment/moment/pull/2833) Alternate Clock Source Support
### 2.10.6
- Release July 28, 2015
[#2515](https://github.com/moment/moment/pull/2515) Fix regression introduced
in `2.10.5` related to `moment.ISO_8601` parsing.
### 2.10.5 [See full changelog](https://gist.github.com/ichernev/6ec13ac7efc396da44b2)
- Release July 26, 2015
Important changes:
* [#2357](https://github.com/moment/moment/pull/2357) Improve unit bubbling for ISO dates
this fixes day to year conversions to work around end-of-year (~365 days). As
a side effect 365 days is 11 months and 30 days, and 366 days is one year.
* [#2438](https://github.com/moment/moment/pull/2438) Fix inconsistent moment.min and moment.max results
Return invalid result if any of the inputs is invalid
* [#2494](https://github.com/moment/moment/pull/2494) Fix two digit year parsing with YYYY format
This brings the benefits of YY to YYYY
* [#2368](https://github.com/moment/moment/pull/2368) perf: use faster form of copying dates, across the board improvement
### 2.10.3 [See full changelog](https://gist.github.com/ichernev/f264b9bed5b00f8b1b7f)
- Release May 13, 2015
* add `moment.fn.to` and `moment.fn.toNow` (similar to `from` and `fromNow`)
* new locales (Sinhalese (si), Montenegrin (me), Javanese (ja))
* performance improvements
### 2.10.2
- Release April 9, 2015
* fixed moment-with-locales in browser env caused by esperanto change
### 2.10.1
* regression: Add moment.duration.fn back
### 2.10.0
Ported code to es6 modules.
### 2.9.0 [See full changelog](https://gist.github.com/ichernev/0c9a9b49951111a27ce7)
- Release January 8, 2015
languages:
* [2104](https://github.com/moment/moment/issues/2104) Frisian (fy) language file with unit test
* [2097](https://github.com/moment/moment/issues/2097) add ar-tn locale
deprecations:
* [2074](https://github.com/moment/moment/issues/2074) Implement `moment.fn.utcOffset`, deprecate `moment.fn.zone`
features:
* [2088](https://github.com/moment/moment/issues/2088) add moment.fn.isBetween
* [2054](https://github.com/moment/moment/issues/2054) Call updateOffset when creating moment (needed for default timezone in
moment-timezone)
* [1893](https://github.com/moment/moment/issues/1893) Add moment.isDate method
* [1825](https://github.com/moment/moment/issues/1825) Implement toJSON function on Duration
* [1809](https://github.com/moment/moment/issues/1809) Allowing moment.set() to accept a hash of units
* [2128](https://github.com/moment/moment/issues/2128) Add firstDayOfWeek, firstDayOfYear locale getters
* [2131](https://github.com/moment/moment/issues/2131) Add quarter diff support
Some bugfixes and language improvements -- [full changelog](https://gist.github.com/ichernev/0c9a9b49951111a27ce7)
### 2.8.4 [See full changelog](https://gist.github.com/ichernev/a4fcb0a46d74e4b9b996)
- Release November 19, 2014
Features:
* [#2000](https://github.com/moment/moment/issues/2000) Add LTS localised format that includes seconds
* [#1960](https://github.com/moment/moment/issues/1960) added formatToken 'x' for unix offset in milliseconds #1938
* [#1965](https://github.com/moment/moment/issues/1965) Support 24:00:00.000 to mean next day, at midnight.
* [#2002](https://github.com/moment/moment/issues/2002) Accept 'date' key when creating moment with object
* [#2009](https://github.com/moment/moment/issues/2009) Use native toISOString when we can
Some bugfixes and language improvements -- [full changelog](https://gist.github.com/ichernev/a4fcb0a46d74e4b9b996)
### 2.8.3
- Release September 5, 2014
Bugfixes:
* [#1801](https://github.com/moment/moment/issues/1801) proper pluralization for Arabic
* [#1833](https://github.com/moment/moment/issues/1833) improve spm integration
* [#1871](https://github.com/moment/moment/issues/1871) fix zone bug caused by Firefox 24
* [#1882](https://github.com/moment/moment/issues/1882) Use hh:mm in Czech
* [#1883](https://github.com/moment/moment/issues/1883) Fix 2.8.0 regression in duration as conversions
* [#1890](https://github.com/moment/moment/issues/1890) Faster travis builds
* [#1892](https://github.com/moment/moment/issues/1892) Faster isBefore/After/Same
* [#1848](https://github.com/moment/moment/issues/1848) Fix flaky month diffs
* [#1895](https://github.com/moment/moment/issues/1895) Fix 2.8.0 regression in moment.utc with format array
* [#1896](https://github.com/moment/moment/issues/1896) Support setting invalid instance locale (noop)
* [#1897](https://github.com/moment/moment/issues/1897) Support moment([str]) in addition to moment([int])
### 2.8.2
- Release August 22, 2014
Minor bugfixes:
* [#1874](https://github.com/moment/moment/issues/1874) use `Object.prototype.hasOwnProperty`
instead of `obj.hasOwnProperty` (ie8 bug)
* [#1873](https://github.com/moment/moment/issues/1873) add `duration#toString()`
* [#1859](https://github.com/moment/moment/issues/1859) better month/weekday names in norwegian
* [#1812](https://github.com/moment/moment/issues/1812) meridiem parsing for greek
* [#1804](https://github.com/moment/moment/issues/1804) spanish del -> de
* [#1800](https://github.com/moment/moment/issues/1800) korean LT improvement
### 2.8.1
- Release August 1, 2014
* bugfix [#1813](https://github.com/moment/moment/issues/1813): fix moment().lang([key]) incompatibility
### 2.8.0 [See changelog](https://gist.github.com/ichernev/ac3899324a5fa6c8c9b4)
- Release July 31, 2014
* incompatible changes
* [#1761](https://github.com/moment/moment/issues/1761): moments created without a language are no longer following the global language, in case it changes. Only newly created moments take the global language by default. In case you're affected by this, wait, comment on [#1797](https://github.com/moment/moment/issues/1797) and wait for a proper reimplementation
* [#1642](https://github.com/moment/moment/issues/1642): 45 days is no longer "a month" according to humanize, cutoffs for month, and year have changed. Hopefully your code does not depend on a particular answer from humanize (which it shouldn't anyway)
* [#1784](https://github.com/moment/moment/issues/1784): if you use the human readable English datetime format in a weird way (like storing them in a database) that would break when the format changes you're at risk.
* deprecations (old behavior will be dropped in 3.0)
* [#1761](https://github.com/moment/moment/issues/1761) `lang` is renamed to `locale`, `langData` -> `localeData`. Also there is now `defineLocale` that should be used when creating new locales
* [#1763](https://github.com/moment/moment/issues/1763) `add(unit, value)` and `subtract(unit, value)` are now deprecated. Use `add(value, unit)` and `subtract(value, unit)` instead.
* [#1759](https://github.com/moment/moment/issues/1759) rename `duration.toIsoString` to `duration.toISOString`. The js standard library and moment's `toISOString` follow that convention.
* new locales
* [#1789](https://github.com/moment/moment/issues/1789) Tibetan (bo)
* [#1786](https://github.com/moment/moment/issues/1786) Africaans (af)
* [#1778](https://github.com/moment/moment/issues/1778) Burmese (my)
* [#1727](https://github.com/moment/moment/issues/1727) Belarusian (be)
* bugfixes, locale bugfixes, performance improvements, features
### 2.7.0 [See changelog](https://gist.github.com/ichernev/b0a3d456d5a84c9901d7)
- Release June 12, 2014
* new languages
* [#1678](https://github.com/moment/moment/issues/1678) Bengali (bn)
* [#1628](https://github.com/moment/moment/issues/1628) Azerbaijani (az)
* [#1633](https://github.com/moment/moment/issues/1633) Arabic, Saudi Arabia (ar-sa)
* [#1648](https://github.com/moment/moment/issues/1648) Austrian German (de-at)
* features
* [#1663](https://github.com/moment/moment/issues/1663) configurable relative time thresholds
* [#1554](https://github.com/moment/moment/issues/1554) support anchor time in moment.calendar
* [#1693](https://github.com/moment/moment/issues/1693) support moment.ISO_8601 as parsing format
* [#1637](https://github.com/moment/moment/issues/1637) add moment.min and moment.max and deprecate min/max instance methods
* [#1704](https://github.com/moment/moment/issues/1704) support string value in add/subtract
* [#1647](https://github.com/moment/moment/issues/1647) add spm support (package manager)
* bugfixes
### 2.6.0 [See changelog](https://gist.github.com/ichernev/10544682)
- Release April 12 , 2014
* languages
* [#1529](https://github.com/moment/moment/issues/1529) Serbian-Cyrillic (sr-cyr)
* [#1544](https://github.com/moment/moment/issues/1544), [#1546](https://github.com/moment/moment/issues/1546) Khmer Cambodia (km)
* features
* [#1419](https://github.com/moment/moment/issues/1419), [#1468](https://github.com/moment/moment/issues/1468), [#1467](https://github.com/moment/moment/issues/1467), [#1546](https://github.com/moment/moment/issues/1546) better handling of timezone-d moments around DST
* [#1462](https://github.com/moment/moment/issues/1462) add weeksInYear and isoWeeksInYear
* [#1475](https://github.com/moment/moment/issues/1475) support ordinal parsing
* [#1499](https://github.com/moment/moment/issues/1499) composer support
* [#1577](https://github.com/moment/moment/issues/1577), [#1604](https://github.com/moment/moment/issues/1604) put Date parsing in moment.createFromInputFallback so it can be properly deprecated and controlled in the future
* [#1545](https://github.com/moment/moment/issues/1545) extract two-digit year parsing in moment.parseTwoDigitYear, so it can be overwritten
* [#1590](https://github.com/moment/moment/issues/1590) (see [#1574](https://github.com/moment/moment/issues/1574)) set AMD global before module definition to better support non AMD module dependencies used in AMD environment
* [#1589](https://github.com/moment/moment/issues/1589) remove global in Node.JS environment (was not working before, nobody complained, was scheduled for removal anyway)
* [#1586](https://github.com/moment/moment/issues/1586) support quarter setting and parsing
* 18 bugs fixed
### 2.5.1
- Release January 22, 2014
* languages
* [#1392](https://github.com/moment/moment/issues/1392) Armenian (hy-am)
* bugfixes
* [#1429](https://github.com/moment/moment/issues/1429) fixes [#1423](https://github.com/moment/moment/issues/1423) weird chrome-32 bug with js object creation
* [#1421](https://github.com/moment/moment/issues/1421) remove html entities from Welsh
* [#1418](https://github.com/moment/moment/issues/1418) fixes [#1401](https://github.com/moment/moment/issues/1401) improved non-padded tokens in strict matching
* [#1417](https://github.com/moment/moment/issues/1417) fixes [#1404](https://github.com/moment/moment/issues/1404) handle buggy moment object created by property cloning
* [#1398](https://github.com/moment/moment/issues/1398) fixes [#1397](https://github.com/moment/moment/issues/1397) fix Arabic-like week number parsing
* [#1396](https://github.com/moment/moment/issues/1396) add leftZeroFill(4) to GGGG and gggg formats
* [#1373](https://github.com/moment/moment/issues/1373) use lowercase for months and days in Catalan
* testing
* [#1374](https://github.com/moment/moment/issues/1374) run tests on multiple browser/os combos via SauceLabs and Travis
### 2.5.0 [See changelog](https://gist.github.com/ichernev/8104451)
- Release Dec 24, 2013
* New languages
* Luxemburish (lb) [1247](https://github.com/moment/moment/issues/1247)
* Serbian (rs) [1319](https://github.com/moment/moment/issues/1319)
* Tamil (ta) [1324](https://github.com/moment/moment/issues/1324)
* Macedonian (mk) [1337](https://github.com/moment/moment/issues/1337)
* Features
* [1311](https://github.com/moment/moment/issues/1311) Add quarter getter and format token `Q`
* [1303](https://github.com/moment/moment/issues/1303) strict parsing now respects number of digits per token (fix [1196](https://github.com/moment/moment/issues/1196))
* 0d30bb7 add jspm support
* [1347](https://github.com/moment/moment/issues/1347) improve zone parsing
* [1362](https://github.com/moment/moment/issues/1362) support merideam parsing in Korean
* 22 bugfixes
### 2.4.0
- Release Oct 27, 2013
* **Deprecate** globally exported moment, will be removed in next major
* New languages
* Farose (fo) [#1206](https://github.com/moment/moment/issues/1206)
* Tagalog/Filipino (tl-ph) [#1197](https://github.com/moment/moment/issues/1197)
* Welsh (cy) [#1215](https://github.com/moment/moment/issues/1215)
* Bugfixes
* properly handle Z at the end of iso RegExp [#1187](https://github.com/moment/moment/issues/1187)
* chinese meridian time improvements [#1076](https://github.com/moment/moment/issues/1076)
* fix language tests [#1177](https://github.com/moment/moment/issues/1177)
* remove some failing tests (that should have never existed :))
[#1185](https://github.com/moment/moment/issues/1185)
[#1183](https://github.com/moment/moment/issues/1183)
* handle russian noun cases in weird cases [#1195](https://github.com/moment/moment/issues/1195)
### 2.3.1
- Release Oct 9, 2013
Removed a trailing comma [1169] and fixed a bug with `months`, `weekdays` getters [#1171](https://github.com/moment/moment/issues/1171).
### 2.3.0 [See changelog](https://gist.github.com/ichernev/6864354)
- Release Oct 7, 2013
Changed isValid, added strict parsing.
Week tokens parsing.
### 2.2.1
- Release Sep 12, 2013
Fixed bug in string prototype test.
Updated authors and contributors.
### 2.2.0 [See changelog](https://gist.github.com/ichernev/00f837a9baf46a3565e4)
- Release Sep 11, 2013
Added bower support.
Language files now use UMD.
Creating moment defaults to current date/month/year.
Added a bundle of moment and all language files.
### 2.1.0 [See changelog](https://gist.github.com/timrwood/b8c2d90d528eddb53ab5)
- Release Jul 8, 2013
Added better week support.
Added ability to set offset with `moment#zone`.
Added ability to set month or weekday from a string.
Added `moment#min` and `moment#max`
### 2.0.0 [See changelog](https://gist.github.com/timrwood/e72f2eef320ed9e37c51)
- Release Feb 9, 2013
Added short form localized tokens.
Added ability to define language a string should be parsed in.
Added support for reversed add/subtract arguments.
Added support for `endOf('week')` and `startOf('week')`.
Fixed the logic for `moment#diff(Moment, 'months')` and `moment#diff(Moment, 'years')`
`moment#diff` now floors instead of rounds.
Normalized `moment#toString`.
Added `isSame`, `isAfter`, and `isBefore` methods.
Added better week support.
Added `moment#toJSON`
Bugfix: Fixed parsing of first century dates
Bugfix: Parsing 10Sep2001 should work as expected
Bugfix: Fixed weirdness with `moment.utc()` parsing.
Changed language ordinal method to return the number + ordinal instead of just the ordinal.
Changed two digit year parsing cutoff to match strptime.
Removed `moment#sod` and `moment#eod` in favor of `moment#startOf` and `moment#endOf`.
Removed `moment.humanizeDuration()` in favor of `moment.duration().humanize()`.
Removed the lang data objects from the top level namespace.
Duplicate `Date` passed to `moment()` instead of referencing it.
### 1.7.2 [See discussion](https://github.com/timrwood/moment/issues/456)
- Release Oct 2, 2012
Bugfixes
### 1.7.1 [See discussion](https://github.com/timrwood/moment/issues/384)
- Release Oct 1, 2012
Bugfixes
### 1.7.0 [See discussion](https://github.com/timrwood/moment/issues/288)
- Release Jul 26, 2012
Added `moment.fn.endOf()` and `moment.fn.startOf()`.
Added validation via `moment.fn.isValid()`.
Made formatting method 3x faster. http://jsperf.com/momentjs-cached-format-functions
Add support for month/weekday callbacks in `moment.fn.format()`
Added instance specific languages.
Added two letter weekday abbreviations with the formatting token `dd`.
Various language updates.
Various bugfixes.
### 1.6.0 [See discussion](https://github.com/timrwood/moment/pull/268)
- Release Apr 26, 2012
Added Durations.
Revamped parser to support parsing non-separated strings (YYYYMMDD vs YYYY-MM-DD).
Added support for millisecond parsing and formatting tokens (S SS SSS)
Added a getter for `moment.lang()`
Various bugfixes.
There are a few things deprecated in the 1.6.0 release.
1. The format tokens `z` and `zz` (timezone abbreviations like EST CST MST etc) will no longer be supported. Due to inconsistent browser support, we are unable to consistently produce this value. See [this issue](https://github.com/timrwood/moment/issues/162) for more background.
2. The method `moment.fn.native` is deprecated in favor of `moment.fn.toDate`. There continue to be issues with Google Closure Compiler throwing errors when using `native`, even in valid instances.
3. The way to customize am/pm strings is being changed. This would only affect you if you created a custom language file. For more information, see [this issue](https://github.com/timrwood/moment/pull/222).
### 1.5.0 [See milestone](https://github.com/timrwood/moment/issues?milestone=10&page=1&state=closed)
- Release Mar 20, 2012
Added UTC mode.
Added automatic ISO8601 parsing.
Various bugfixes.
### 1.4.0 [See milestone](https://github.com/timrwood/moment/issues?milestone=8&state=closed)
- Release Feb 4, 2012
Added `moment.fn.toDate` as a replacement for `moment.fn.native`.
Added `moment.fn.sod` and `moment.fn.eod` to get the start and end of day.
Various bugfixes.
### 1.3.0 [See milestone](https://github.com/timrwood/moment/issues?milestone=7&state=closed)
- Release Jan 5, 2012
Added support for parsing month names in the current language.
Added escape blocks for parsing tokens.
Added `moment.fn.calendar` to format strings like 'Today 2:30 PM', 'Tomorrow 1:25 AM', and 'Last Sunday 4:30 AM'.
Added `moment.fn.day` as a setter.
Various bugfixes
### 1.2.0 [See milestone](https://github.com/timrwood/moment/issues?milestone=4&state=closed)
- Release Dec 7, 2011
Added timezones to parser and formatter.
Added `moment.fn.isDST`.
Added `moment.fn.zone` to get the timezone offset in minutes.
### 1.1.2 [See milestone](https://github.com/timrwood/moment/issues?milestone=6&state=closed)
- Release Nov 18, 2011
Various bugfixes
### 1.1.1 [See milestone](https://github.com/timrwood/moment/issues?milestone=5&state=closed)
- Release Nov 12, 2011
Added time specific diffs (months, days, hours, etc)
### 1.1.0
- Release Oct 28, 2011
Added `moment.fn.format` localized masks. 'L LL LLL LLLL' [issue 29](https://github.com/timrwood/moment/pull/29)
Fixed [issue 31](https://github.com/timrwood/moment/pull/31).
### 1.0.1
- Release Oct 18, 2011
Added `moment.version` to get the current version.
Removed `window !== undefined` when checking if module exists to support browserify. [issue 25](https://github.com/timrwood/moment/pull/25)
### 1.0.0
- Release
Added convenience methods for getting and setting date parts.
Added better support for `moment.add()`.
Added better lang support in NodeJS.
Renamed library from underscore.date to Moment.js
### 0.6.1
- Release Oct 12, 2011
Added Portuguese, Italian, and French language support
### 0.6.0
- Release Sep 21, 2011
Added _date.lang() support.
Added support for passing multiple formats to try to parse a date. _date("07-10-1986", ["MM-DD-YYYY", "YYYY-MM-DD"]);
Made parse from string and single format 25% faster.
### 0.5.2
- Release Jul 11, 2011
Bugfix for [issue 8](https://github.com/timrwood/underscore.date/pull/8) and [issue 9](https://github.com/timrwood/underscore.date/pull/9).
### 0.5.1
- Release Jun 17, 2011
Bugfix for [issue 5](https://github.com/timrwood/underscore.date/pull/5).
### 0.5.0
- Release Jun 13, 2011
Dropped the redundant `_date.date()` in favor of `_date()`.
Removed `_date.now()`, as it is a duplicate of `_date()` with no parameters.
Removed `_date.isLeapYear(yearNumber)`. Use `_date([yearNumber]).isLeapYear()` instead.
Exposed customization options through the `_date.relativeTime`, `_date.weekdays`, `_date.weekdaysShort`, `_date.months`, `_date.monthsShort`, and `_date.ordinal` variables instead of the `_date.customize()` function.
### 0.4.1
- Release May 9, 2011
Added date input formats for input strings.
### 0.4.0
- Release May 9, 2011
Added underscore.date to npm. Removed dependencies on underscore.
### 0.3.2
- Release Apr 9, 2011
Added `'z'` and `'zz'` to `_.date().format()`. Cleaned up some redundant code to trim off some bytes.
### 0.3.1
- Release Mar 25, 2011
Cleaned up the namespace. Moved all date manipulation and display functions to the _.date() object.
### 0.3.0
- Release Mar 25, 2011
Switched to the Underscore methodology of not mucking with the native objects' prototypes.
Made chaining possible.
### 0.2.1
- Release
Changed date names to be a more pseudo standardized 'dddd, MMMM Do YYYY, h:mm:ss a'.
Added `Date.prototype` functions `add`, `subtract`, `isdst`, and `isleapyear`.
### 0.2.0
- Release
Changed function names to be more concise.
Changed date format from php date format to custom format.
### 0.1.0
- Release
Initial release

View File

@ -1,100 +0,0 @@
Submitting Issues
=================
If you are submitting a bug, please create a [jsfiddle](http://jsfiddle.net/) demonstrating the issue.
Read before submitting Pull Requests
====================================
* **Pull requests to the `master` branch will be closed.** Please submit all pull requests to the `develop` branch.
* **You will be required to sign a JS Foundation CLA before your pull request can be merged.** [Sign it right now](https://cla.js.foundation/moment/moment).
* **Locale translations will not be merged without unit tests.** See [the British English unit tests](https://github.com/moment/moment/blob/develop/src/test/locale/en-gb.js) for an example.
* **Do not include the minified files in your pull request.** These are
`moment.js`, `locale/*.js`, `min/*.js`. Don't worry, we'll build them when
we cut a release.
Code organization
=================
Starting from version 2.10.0 the code is placed under `src/`.
`moment.js`, `locale/*.js`, `min/*.js` are generated only on release.
**DO NOT** submit changes to the generated files. Instead only change
`src/**/*.js` and run the tests.
* `src/lib/**/*.js` moment core files
* `src/locale/*.js` locale files
* `src/test/moment/*.js` moment core tests
* `src/test/locale/*.js` locale tests
We're using ES6 module system, but nothing else ES6, because of performance
considerations (added code by the transpiler, less than optimal translation to
ES5). So please do not use that fancy new ES6 feature in your patch, it won't
be accepted.
Setting up development environment
==================================
To contribute, fork the library and install grunt and dependencies. You need
[git](http://git-scm.com/) and
[node](http://nodejs.org/); you might use
[nvm](https://github.com/creationix/nvm) or
[nenv](https://github.com/ryuone/nenv) to install node.
```bash
git clone https://github.com/moment/moment.git
cd moment
npm install -g grunt-cli
npm install
git checkout develop # all patches against develop branch, please!
grunt # this runs tests and jshint
```
Changing locale files
=====================
If you have any changes to existing locale files, `@mention` the original
author in the pull request (check the top of the language file), and ask if
he/she approves of your changes. Because I don't know any languages I can't
judge your locale changes, only the original author can :)
In order for your pull request to get merged it must have approval of original
author, or at least one other native speaker has to approve of the change
(happens rarely).
Grunt tasks
===========
We use Grunt for managing the build. Here are some useful Grunt tasks:
* `grunt` The default task lints the code and runs the tests. You should make sure you do this before submitting a PR.
* `grunt test` run the tests.
* `grunt release` Build everything, including minified files (do not include
those in Pull Requests)
* `grunt transpile:fr,ru` Build custom locale bundles `moment-with-locales.custom.js` and `locales.custom.js` inside `build/umd/min` containing just French and Russian.
* `grunt size` Print size statistics.
Becoming a moment team member
=============================
Moment's team members have extra powers and responsibilities. If you want to
become one -- be active in our repositories by answering issues, reviewing PRs,
discussing changes, submitting PRs for open bugs. Any help on
[moment/moment](https://github.com/moment/moment),
[moment/momentjs.com](https://github.com/moment/momentjs.com),
[moment/moment-timezone](https://github.com/moment/moment-timezone) will be
noticed.
Once you've proven to be trustworthy, submit your request to the
[gitter chat](https://gitter.im/moment/moment), and it will be reviewed by the
existing team.
Once you become a member:
* you can tell your friends
* you can close issues submitted by others
But also:
* be active in the repositories
* pick up work nobody else wants to
* attend a monthly meeting
* participate in the internal slack group

View File

@ -1,212 +0,0 @@
module.exports = function (grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
env : {
sauceLabs : (grunt.file.exists('.sauce-labs.creds') ?
grunt.file.readJSON('.sauce-labs.creds') : {})
},
karma : {
options: {
browserNoActivityTimeout: 60000,
browserDisconnectTimeout: 10000,
browserDisconnectTolerance: 2,
frameworks: ['qunit'],
files: [
'min/moment-with-locales.js',
'min/tests.js'
],
sauceLabs: {
startConnect: true,
testName: 'MomentJS'
},
customLaunchers: {
slChromeWinXp: {
base: 'SauceLabs',
browserName: 'chrome',
platform: 'Windows XP'
},
slIe10Win7: {
base: 'SauceLabs',
browserName: 'internet explorer',
platform: 'Windows 7',
version: '10'
},
slIe9Win7: {
base: 'SauceLabs',
browserName: 'internet explorer',
platform: 'Windows 7',
version: '9'
},
slIe8Win7: {
base: 'SauceLabs',
browserName: 'internet explorer',
platform: 'Windows 7',
version: '8'
},
slIe11Win10: {
base: 'SauceLabs',
browserName: 'internet explorer',
platform: 'Windows 10',
version: '11'
},
slME25Win10: {
base: 'SauceLabs',
browserName: 'MicrosoftEdge',
platform: 'Windows 10',
version: '20.10240'
},
slFfLinux: {
base: 'SauceLabs',
browserName: 'firefox',
platform: 'Linux'
},
slSafariOsx: {
base: 'SauceLabs',
browserName: 'safari',
platform: 'OS X 10.8'
},
slSafariOsx11: {
base: 'SauceLabs',
browserName: 'safari',
platform: 'OS X 10.11'
}
}
},
server: {
browsers: []
},
chrome: {
singleRun: true,
browsers: ['Chrome']
},
firefox: {
singleRun: true,
browsers: ['Firefox']
},
sauce: {
options: {
reporters: ['dots']
},
singleRun: true,
browsers: [
'slChromeWinXp',
'slIe10Win7',
'slIe9Win7',
'slIe8Win7',
'slIe11Win10',
'slME25Win10',
'slFfLinux',
'slSafariOsx'
]
}
},
uglify : {
main: {
files: {
'min/moment-with-locales.min.js' : 'min/moment-with-locales.js',
'min/locales.min.js' : 'min/locales.js',
'min/moment.min.js' : 'moment.js'
}
},
options: {
mangle: true,
compress: {
dead_code: false // jshint ignore:line
},
output: {
ascii_only: true // jshint ignore:line
},
report: 'min',
preserveComments: /^!|@preserve|@license|@cc_on/i
}
},
jshint: {
all: [
'Gruntfile.js',
'tasks/**.js',
'src/**/*.js'
],
options: {
jshintrc: true
}
},
jscs: {
all: [
'Gruntfile.js',
'tasks/**.js',
'src/**/*.js'
],
options: {
config: '.jscs.json'
}
},
watch : {
test : {
files : [
'src/**/*.js'
],
tasks: ['test']
},
jshint : {
files : '<%= jshint.all %>',
tasks: ['jshint']
}
},
benchmark: {
all: {
src: ['benchmarks/*.js']
}
},
exec: {
'meteor-init': {
// Make sure Meteor is installed, per https://meteor.com/install.
// The curl'ed script is safe; takes 2 minutes to read source & check.
command: 'type meteor >/dev/null 2>&1 || { curl https://install.meteor.com/ | sh; }'
},
'meteor-test': {
command: 'spacejam --mongo-url mongodb:// test-packages ./meteor'
},
'meteor-publish': {
command: 'cd meteor && meteor publish'
},
'typescript-test': {
command: 'npm run typescript-test'
}
}
});
grunt.loadTasks('tasks');
// These plugins provide necessary tasks.
require('load-grunt-tasks')(grunt);
// Default task.
grunt.registerTask('default', ['lint', 'test']);
// linting
grunt.registerTask('lint', ['jshint', 'jscs']);
// test tasks
grunt.registerTask('test', ['test:node', 'test:typescript']);
grunt.registerTask('test:node', ['transpile', 'qtest']);
grunt.registerTask('test:typescript', ['exec:typescript-test']);
// TODO: For some weird reason karma doesn't like the files in
// build/umd/min/* but works with min/*, so update-index, then git checkout
grunt.registerTask('test:server', ['transpile', 'update-index', 'karma:server']);
grunt.registerTask('test:browser', ['transpile', 'update-index', 'karma:chrome', 'karma:firefox']);
grunt.registerTask('test:sauce-browser', ['transpile', 'update-index', 'env:sauceLabs', 'karma:sauce']);
grunt.registerTask('test:meteor', ['exec:meteor-init', 'exec:meteor-test', 'exec:meteor-cleanup']);
// travis build task
grunt.registerTask('build:travis', ['default']);
grunt.registerTask('meteor-publish', ['exec:meteor-init', 'exec:meteor-publish', 'exec:meteor-cleanup']);
// Task to be run when releasing a new version
grunt.registerTask('release', [
'default',
'update-index',
'component',
'uglify:main'
]);
};

View File

@ -1,25 +0,0 @@
**Description of the Issue and Steps to Reproduce:**
*Please include the values of all variables used.*
**Environment:**
*Examples: Chrome 49 on OSX, Internet Explorer 10 on Windows 7, Node.JS 4.4.4 on Ubuntu 16.0.4*
*Both the browser and the OS are important to us, particularly if you have an unsual environment like an IOT application.*
**Other information that may be helpful:**
* The time zone setting of the machine the code is running on
* The time and date at which the code was run
* Other libraries in use (TypeScript, Immutable.js, etc)
If you are reporting an issue, please run the following code in the environment you are using and include the output:
```js
console.log( (new Date()).toString())
console.log((new Date()).toLocaleString())
console.log( (new Date()).getTimezoneOffset())
console.log( navigator.userAgent)
console.log(moment.version)
```
*Ensure your issue is isolated to moment. Issues involving third party tools will be closed unless submitted by the tool's author/maintainer.*

View File

@ -1,22 +0,0 @@
Copyright (c) JS Foundation and other contributors
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

View File

@ -1,26 +0,0 @@
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>Moment.js</id>
<version>2.19.1</version>
<authors>Tim Wood, Iskren Chernev, Moment.js contributors</authors>
<owners>Cory Deppen, Iskren Chernev</owners>
<description>A lightweight JavaScript date library for parsing, manipulating, and formatting dates.</description>
<releaseNotes>
* Release Oct 11, 2017
Make react native and webpack both work
* #4225 #4226 #4232
</releaseNotes>
<projectUrl>http://momentjs.com/</projectUrl>
<iconUrl>http://pbs.twimg.com/profile_images/482670411402858496/Xrtdc94q_normal.png</iconUrl>
<licenseUrl>https://raw.github.com/timrwood/moment/master/LICENSE</licenseUrl>
<tags>JavaScript date time browser node.js</tags>
</metadata>
<files>
<file src="moment.js" target="Content\Scripts" />
<file src="min/moment.min.js" target="Content\Scripts" />
<file src="min/moment-with-locales.js" target="Content\Scripts" />
<file src="min/moment-with-locales.min.js" target="Content\Scripts" />
</files>
</package>

View File

@ -1,61 +0,0 @@
[![Join the chat at https://gitter.im/moment/moment](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/moment/moment?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![NPM version][npm-version-image]][npm-url] [![NPM downloads][npm-downloads-image]][npm-url] [![MIT License][license-image]][license-url] [![Build Status][travis-image]][travis-url]
[![Coverage Status](https://coveralls.io/repos/moment/moment/badge.svg?branch=develop)](https://coveralls.io/r/moment/moment?branch=develop)
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmoment%2Fmoment.svg?type=shield)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmoment%2Fmoment?ref=badge_shield)
A lightweight JavaScript date library for parsing, validating, manipulating, and formatting dates.
**[Documentation](http://momentjs.com/docs/)**
## Port to ECMAScript 6 (version 2.10.0)
Moment 2.10.0 does not bring any new features, but the code is now written in
ECMAScript 6 modules and placed inside `src/`. Previously `moment.js`, `locale/*.js` and
`test/moment/*.js`, `test/locale/*.js` contained the source of the project. Now
the source is in `src/`, temporary build (ECMAScript 5) files are placed under
`build/umd/` (for running tests during development), and the `moment.js` and
`locale/*.js` files are updated only on release.
If you want to use a particular revision of the code, make sure to run
`grunt transpile update-index`, so `moment.js` and `locales/*.js` are synced
with `src/*`. We might place that in a commit hook in the future.
## Upgrading to 2.0.0
There are a number of small backwards incompatible changes with version 2.0.0. [See the full descriptions here](https://gist.github.com/timrwood/e72f2eef320ed9e37c51#backwards-incompatible-changes)
* Changed language ordinal method to return the number + ordinal instead of just the ordinal.
* Changed two digit year parsing cutoff to match strptime.
* Removed `moment#sod` and `moment#eod` in favor of `moment#startOf` and `moment#endOf`.
* Removed `moment.humanizeDuration()` in favor of `moment.duration().humanize()`.
* Removed the lang data objects from the top level namespace.
* Duplicate `Date` passed to `moment()` instead of referencing it.
## [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
## [Contributing](https://github.com/moment/moment/blob/develop/CONTRIBUTING.md)
We're looking for co-maintainers! If you want to become a master of time please
write to [ichernev](https://github.com/ichernev).
## License
Moment.js is freely distributable under the terms of the [MIT license](https://github.com/moment/moment/blob/develop/LICENSE).
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmoment%2Fmoment.svg?type=large)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmoment%2Fmoment?ref=badge_large)
[license-image]: http://img.shields.io/badge/license-MIT-blue.svg?style=flat
[license-url]: LICENSE
[npm-url]: https://npmjs.org/package/moment
[npm-version-image]: http://img.shields.io/npm/v/moment.svg?style=flat
[npm-downloads-image]: http://img.shields.io/npm/dm/moment.svg?style=flat
[travis-url]: http://travis-ci.org/moment/moment
[travis-image]: http://img.shields.io/travis/moment/moment/develop.svg?style=flat

View File

@ -1,22 +0,0 @@
var Benchmark = require('benchmark'),
moment = require("./../moment.js"),
base = moment('2013-05-25');
var unitsUnderTest = ["milliseconds", "seconds", "minutes", "hours", "days", "weeks", "months", "quarters", "years"];
var tests = unitsUnderTest.reduce(function (testsSoFar, unit) {
testsSoFar["add " + unit] = generateTestForUnit(unit);
return testsSoFar;
}, {});
function generateTestForUnit(unit) {
return {
setup: function(){var base = base; var unit = unit;},
fn: function(){base.add(8, unit);},
async: true
};
}
module.exports = {
name: 'add',
tests: tests
};

View File

@ -1,10 +0,0 @@
var Benchmark = require('benchmark'),
moment = require("./../moment.js"),
base = moment('2013-05-25');
module.exports = {
name: 'clone',
onComplete: function(){},
fn: function(){base.clone();},
async: true
};

View File

@ -1,22 +0,0 @@
var Benchmark = require('benchmark'),
moment = require("./../moment.js"),
base = moment('2013-05-25');
var unitsUnderTest = ["second", "minute", "hour", "date", "day", "isoWeek", "week", "month", "quarter", "year"];
var tests = unitsUnderTest.reduce(function (testsSoFar, unit) {
testsSoFar["endOf " + unit] = generateTestForUnit(unit);
return testsSoFar;
}, {});
function generateTestForUnit(unit) {
return {
setup: function(){var base = base; var unit = unit;},
fn: function(){base.endOf(unit);},
async: true
};
}
module.exports = {
name: 'endOf',
tests: tests
};

View File

@ -1,12 +0,0 @@
var Benchmark = require('benchmark'),
moment = require('./../moment.js'),
base = new Date();
module.exports = {
name: 'fromDate',
onComplete: function(){},
fn: function(){
moment(base);
},
async: true
};

View File

@ -1,12 +0,0 @@
var Benchmark = require('benchmark'),
moment = require('./../moment.js'),
base = new Date();
module.exports = {
name: 'fromDateUtc',
onComplete: function(){},
fn: function(){
moment.utc(base);
},
async: true
};

View File

@ -1,67 +0,0 @@
var Benchmark = require('benchmark'),
moment = require("./../moment.js");
var isObjectEmpty_getOwnPropertyNames = function(obj) {
if (Object.getOwnPropertyNames) {
return (Object.getOwnPropertyNames(obj).length === 0);
} else {
var k;
for (k in obj) {
if (obj.hasOwnProperty(k)) {
return false;
}
}
return true;
}
};
var isObjectEmpty_keys = function(obj) {
if (Object.keys) {
return (Object.keys(obj).length === 0);
} else {
var k;
for (k in obj) {
if (obj.hasOwnProperty(k)) {
return false;
}
}
return true;
}
};
var isObjectEmpty_forIn = function(obj) {
var k;
for (k in obj) {
if (obj.hasOwnProperty(k)) {
return false;
}
}
return true;
};
module.exports = {
name: 'isObjectEmpty',
tests: {
"isObjectEmpty -> for..in": {
onComplete: function(){},
fn: function(){
isObjectEmpty_forIn(moment());
},
async: false
},
"isObjectEmpty -> Object.keys": {
onComplete: function(){},
fn: function(){
isObjectEmpty_keys(moment());
},
async: false
},
"isObjectEmpty -> Object.getOwnPropertyNames": {
onComplete: function(){},
fn: function(){
isObjectEmpty_getOwnPropertyNames(moment());
},
async: false
}
}
};

View File

@ -1,11 +0,0 @@
var Benchmark = require('benchmark'),
moment = require('./../moment.js');
module.exports = {
name: 'makeDuration',
onComplete: function(){},
fn: function(){
moment.duration(5, 'years');
},
async: true
};

View File

@ -1,40 +0,0 @@
var Benchmark = require('benchmark'),
moment = require("./../moment.js"),
base = moment('2013-05-25');
module.exports = {
name: 'clone',
tests: {
isBefore_true: {
onComplete: function(){},
fn: function(){base.isBefore('2013-06-25');},
async: true
},
isBefore_self: {
onComplete: function(){},
fn: function(){base.isBefore('2013-05-25');},
async: true
},
isBefore_false: {
onComplete: function(){},
fn: function(){base.isBefore('2013-04-25');},
async: true
},
isAfter_true: {
onComplete: function(){},
fn: function(){base.isAfter('2013-04-25');},
async: true
},
isAfter_self: {
onComplete: function(){},
fn: function(){base.isAfter('2013-05-25');},
async: true
},
isAfter_false: {
onComplete: function(){},
fn: function(){base.isAfter('2013-06-25');},
async: true
}
}
};

View File

@ -1,22 +0,0 @@
var Benchmark = require('benchmark'),
moment = require("./../moment.js"),
base = moment('2013-05-25');
var unitsUnderTest = ["second", "minute", "hour", "date", "day", "isoWeek", "week", "month", "quarter", "year"];
var tests = unitsUnderTest.reduce(function (testsSoFar, unit) {
testsSoFar["startOf " + unit] = generateTestForUnit(unit);
return testsSoFar;
}, {});
function generateTestForUnit(unit) {
return {
setup: function(){var base = base; var unit = unit;},
fn: function(){base.startOf(unit);},
async: true
};
}
module.exports = {
name: 'startOf',
tests: tests
};

View File

@ -1,22 +0,0 @@
var Benchmark = require('benchmark'),
moment = require("./../moment.js"),
base = moment('2013-05-25');
var unitsUnderTest = ["milliseconds", "seconds", "minutes", "hours", "days", "weeks", "months", "quarters", "years"];
var tests = unitsUnderTest.reduce(function (testsSoFar, unit) {
testsSoFar["subtract " + unit] = generateTestForUnit(unit);
return testsSoFar;
}, {});
function generateTestForUnit(unit) {
return {
setup: function(){var base = base; var unit = unit;},
fn: function(){base.subtract(8, unit);},
async: true
};
}
module.exports = {
name: 'subtract',
tests: tests
};

View File

@ -1,43 +0,0 @@
var Benchmark = require('benchmark');
module.exports = {
name: 'zeroFill',
tests: {
zeroFillMath: {
setup: function() {
var zeroFillMath = function(number, targetLength, forceSign) {
var absNumber = '' + Math.abs(number),
zerosToFill = targetLength - absNumber.length,
sign = number >= 0;
return (sign ? (forceSign ? '+' : '') : '-') +
Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;
}
},
fn: function() {
zeroFillMath(Math.random() * 1e5 | 0, 5);
zeroFillMath(Math.random() * 1e5 | 0, 10);
zeroFillMath(Math.random() * 1e10 | 0, 20);
},
async: true
},
zeroFillWhile: {
setup: function() {
var zeroFillWhile = function(number, targetLength, forceSign) {
var output = '' + Math.abs(number),
sign = number >= 0;
while (output.length < targetLength) {
output = '0' + output;
}
return (sign ? (forceSign ? '+' : '') : '-') + output;
}
},
fn: function() {
zeroFillWhile(Math.random() * 1e5 | 0, 5);
zeroFillWhile(Math.random() * 1e5 | 0, 10);
zeroFillWhile(Math.random() * 1e10 | 0, 20);
},
async: true
}
}
};

View File

@ -1,26 +0,0 @@
{
"name": "moment",
"license": "MIT",
"main": "moment.js",
"ignore": [
"**/.*",
"benchmarks",
"bower_components",
"meteor",
"node_modules",
"scripts",
"tasks",
"test",
"component.json",
"composer.json",
"CONTRIBUTING.md",
"ender.js",
"Gruntfile.js",
"Moment.js.nuspec",
"package.js",
"package.json",
"ISSUE_TEMPLATE.md",
"typing-tests",
"min/tests.js"
]
}

View File

@ -1,130 +0,0 @@
{
"name": "moment",
"version": "2.19.1",
"main": "moment.js",
"description": "Parse, validate, manipulate, and display dates in JavaScript.",
"files": [
"moment.js",
"locale/af.js",
"locale/ar-dz.js",
"locale/ar-kw.js",
"locale/ar-ly.js",
"locale/ar-ma.js",
"locale/ar-sa.js",
"locale/ar-tn.js",
"locale/ar.js",
"locale/az.js",
"locale/be.js",
"locale/bg.js",
"locale/bm.js",
"locale/bn.js",
"locale/bo.js",
"locale/br.js",
"locale/bs.js",
"locale/ca.js",
"locale/cs.js",
"locale/cv.js",
"locale/cy.js",
"locale/da.js",
"locale/de-at.js",
"locale/de-ch.js",
"locale/de.js",
"locale/dv.js",
"locale/el.js",
"locale/en-au.js",
"locale/en-ca.js",
"locale/en-gb.js",
"locale/en-ie.js",
"locale/en-nz.js",
"locale/eo.js",
"locale/es-do.js",
"locale/es-us.js",
"locale/es.js",
"locale/et.js",
"locale/eu.js",
"locale/fa.js",
"locale/fi.js",
"locale/fo.js",
"locale/fr-ca.js",
"locale/fr-ch.js",
"locale/fr.js",
"locale/fy.js",
"locale/gd.js",
"locale/gl.js",
"locale/gom-latn.js",
"locale/gu.js",
"locale/he.js",
"locale/hi.js",
"locale/hr.js",
"locale/hu.js",
"locale/hy-am.js",
"locale/id.js",
"locale/is.js",
"locale/it.js",
"locale/ja.js",
"locale/jv.js",
"locale/ka.js",
"locale/kk.js",
"locale/km.js",
"locale/kn.js",
"locale/ko.js",
"locale/ky.js",
"locale/lb.js",
"locale/lo.js",
"locale/lt.js",
"locale/lv.js",
"locale/me.js",
"locale/mi.js",
"locale/mk.js",
"locale/ml.js",
"locale/mr.js",
"locale/ms-my.js",
"locale/ms.js",
"locale/my.js",
"locale/nb.js",
"locale/ne.js",
"locale/nl-be.js",
"locale/nl.js",
"locale/nn.js",
"locale/pa-in.js",
"locale/pl.js",
"locale/pt-br.js",
"locale/pt.js",
"locale/ro.js",
"locale/ru.js",
"locale/sd.js",
"locale/se.js",
"locale/si.js",
"locale/sk.js",
"locale/sl.js",
"locale/sq.js",
"locale/sr-cyrl.js",
"locale/sr.js",
"locale/ss.js",
"locale/sv.js",
"locale/sw.js",
"locale/ta.js",
"locale/te.js",
"locale/tet.js",
"locale/th.js",
"locale/tl-ph.js",
"locale/tlh.js",
"locale/tr.js",
"locale/tzl.js",
"locale/tzm-latn.js",
"locale/tzm.js",
"locale/uk.js",
"locale/ur.js",
"locale/uz-latn.js",
"locale/uz.js",
"locale/vi.js",
"locale/x-pseudo.js",
"locale/yo.js",
"locale/zh-cn.js",
"locale/zh-hk.js",
"locale/zh-tw.js"
],
"scripts": [
"moment.js"
]
}

View File

@ -1,33 +0,0 @@
{
"name": "moment/moment",
"description": "Parse, validate, manipulate, and display dates in JavaScript.",
"keywords": [
"moment",
"date",
"time",
"parse",
"format",
"validate",
"i18n",
"l10n",
"ender"
],
"homepage": "https://github.com/moment/moment",
"authors": [{"name": "Tim Wood", "email": "washwithcare@gmail.com"}],
"license": "MIT",
"type": "component",
"require": {
"robloach/component-installer": "*"
},
"extra": {
"component": {
"scripts": [
"moment.js"
],
"files": [
"min/*.js",
"locale/*.js"
]
}
}
}

View File

@ -1 +0,0 @@
$.ender({ moment: require('moment') })

Some files were not shown because too many files have changed in this diff Show More