From 368387cb71eed645ddba67a9fc7eeb0c5b406d42 Mon Sep 17 00:00:00 2001 From: Bas Lijnse Date: Mon, 21 Apr 2008 10:57:48 +0000 Subject: [PATCH] Did a full cleanup of the communication parts of the iData library. It still needs some tweaking, but is ready to be alpha tested during iTask development. Changes include: - Removal of dirty low level parsing in the EncodeDecode library - Removal of embedded javascript fragments scattered across the clean code - Centralization of all javascript functionality into one javascript library that is alway available - Addition of a method for serving shared static resources (images, javascript, css etc.) from a central location. (Libraries/iData/Resources/) - Moving of flag macros that have to be set during different compile runs to a separate module (iDataCompileOptions). - Change to the type of doHtmlClient to allow for switching between client and server compilation without changing any sources. And many small tweaks and cleanups everywhere in the codebase git-svn-id: https://svn.cs.ru.nl/repos/iTask-system/trunk@143 63da3aa8-80fd-4f01-9db8-e6ea747a3da2 --- iData/EncodeDecode.dcl | 14 +- iData/EncodeDecode.icl | 195 +++------- iData/PrintUtil.dcl | 3 + iData/PrintUtil.icl | 25 ++ iData/Resources/css/clean.css | 46 +++ iData/Resources/img/clean-background.jpg | Bin 0 -> 10480 bytes iData/Resources/img/clean-logo.jpg | Bin 0 -> 2649 bytes iData/Resources/jar/jme.jar | Bin 0 -> 54935 bytes iData/Resources/js/clean.js | 448 +++++++++++++++++++++++ iData/iDataButtons.dcl | 22 +- iData/iDataButtons.icl | 89 +++-- iData/iDataCompileOptions.dcl | 3 + iData/iDataCompileOptions.icl | 1 + iData/iDataCompileOptions_client.dcl | 3 + iData/iDataCompileOptions_server.dcl | 3 + iData/iDataFormData.dcl | 2 +- iData/iDataFormlib.icl | 12 +- iData/iDataHandler.dcl | 18 +- iData/iDataHandler.icl | 336 ++++++++--------- iData/iDataHtmlDef.dcl | 4 +- iData/iDataHtmlDef.icl | 12 +- iData/iDataSettings.dcl | 22 +- iData/iDataSettings.icl | 1 + iData/iDataState.dcl | 4 +- iData/iDataState.icl | 16 +- iData/iDataStylelib.dcl | 2 +- iData/iDataTrivial.dcl | 1 - iData/iDataTrivial.icl | 11 - 28 files changed, 850 insertions(+), 443 deletions(-) create mode 100644 iData/Resources/css/clean.css create mode 100644 iData/Resources/img/clean-background.jpg create mode 100644 iData/Resources/img/clean-logo.jpg create mode 100644 iData/Resources/jar/jme.jar create mode 100644 iData/Resources/js/clean.js create mode 100644 iData/iDataCompileOptions.dcl create mode 100644 iData/iDataCompileOptions.icl create mode 100644 iData/iDataCompileOptions_client.dcl create mode 100644 iData/iDataCompileOptions_server.dcl diff --git a/iData/EncodeDecode.dcl b/iData/EncodeDecode.dcl index 0a2639d52..5096691a5 100644 --- a/iData/EncodeDecode.dcl +++ b/iData/EncodeDecode.dcl @@ -25,22 +25,20 @@ import iDataFormData | UpdS String // new piece of text encodeTriplet :: !Triplet -> String // encoding of triplets +encodeInputId :: !Triplet -> String encodeString :: !String -> String // encoding of string decodeString :: !String -> *String urlEncode :: !String -> String urlDecode :: !String -> *String // Form submission handling - callClean :: !(Script -> ElementEvents) !Mode !String !Lifespan !Bool -> [ElementEvents] -submitscript :: BodyTag -initscript :: BodyTag -globalstateform :: !Value !Value -> BodyTag + // serializing, de-serializing of iData states to strings stored in the html page EncodeHtmlStates :: ![HtmlState] -> String -DecodeHtmlStatesAndUpdate :: (Maybe [(String, String)]) -> (![HtmlState],!Triplets,!String) // hidden state stored in Client + triplets +DecodeHtmlStatesAndUpdate :: [(String, String)] -> (![HtmlState],!Triplets,!String) // hidden state stored in Client + triplets // serializing, de-serializing of iData state stored in files @@ -50,12 +48,10 @@ deleteStateFile :: !String !*NWorld -> *NWorld // constants that maybe useful -traceHtmlInput :: !(Maybe [(String, String)]) -> BodyTag // for debugging showing the information received from browser -trace_to_file :: !String !*World -> *World // for storing debug information to file +traceHtmlInput :: [(String, String)] -> BodyTag // for debugging showing the information received from browser +trace_to_file :: !String !*World -> *World // for storing debug information to file -globalFormName :== "CleanForm" // name of hidden Html form in which iData state information is stored -updateInpName :== "UD" // marks update information globalInpName :== "GS" // marks global state information selectorInpName :== "CS_" // marks constructor update focusInpName :== "FS" // marks the focus of the cursor at the time the form was sent diff --git a/iData/EncodeDecode.icl b/iData/EncodeDecode.icl index 099cd12da..382bded81 100644 --- a/iData/EncodeDecode.icl +++ b/iData/EncodeDecode.icl @@ -8,6 +8,7 @@ import iDataTrivial, iDataFormData, StdBimap import GenPrint, GenParse import dynamic_string import EstherBackend +import HttpTextUtil //import sapldebug derive gParse UpdValue, (,,), (,) @@ -19,102 +20,18 @@ derive gPrint UpdValue, (,,), (,) // script for transmitting name and value of changed input callClean :: !(Script -> ElementEvents) !Mode !String !Lifespan !Bool -> [ElementEvents] -callClean onSomething Edit _ lsp submit = [onSomething (SScript ("toclean(this," <+++ isOnClient lsp <+++ "," <+++ (doSubmit submit) <+++ ")"))] -callClean onSomething Submit myid lsp submit = [onSomething (SScript ("toclean2(" <+++ myid <+++ "," <+++ isOnClient lsp <+++ ",true)"))] -callClean onSomething _ _ _ _ = [] - -onSomething True = OnClick -onSomething False = OnChange - -isOnClient Client = "true" -isOnClient _ = "false" - -doSubmit True = "true" -doSubmit False = "false" - - -// Initializes a page with javascript after it has been loaded -// It is currently just used to set the focus back to the place it was before a submit was done -initscript :: BodyTag -initscript -= BodyTag - [ Script [] (SScript - ( "var cleanUpdated = false; " +++ - "function cleanInit() { " +++ - " resetFocus();" +++ - " attachFocusHandler(\"input\"); " +++ - " attachFocusHandler(\"select\"); " +++ - " attachFocusHandler(\"textarea\"); " +++ - "} " +++ - - "function sendToClean() {" +++ - " if(cleanUpdated) {" +++ - " document." +++ globalFormName +++ "." +++ focusInpName +++ ".value=this.name;" +++ - " document." +++ globalFormName +++ ".submit();" +++ - " }" +++ - "} " +++ - - "function resetFocus() {" +++ - " if(document.getElementById('" +++ focusInpName +++ "').value != '') {" +++ - " var inp = document.getElementById(document.getElementById('"+++ focusInpName +++ "').value); " +++ - " if (inp != undefined) { inp.focus(); } " +++ - " }" +++ - "} " +++ - - "function attachFocusHandler(tagname) {" +++ - " elems = document.getElementsByTagName(tagname);" +++ - " for(var i = 0; i < elems.length; i++) {" +++ - " elems[i].onfocus = sendToClean;" +++ - " }" +++ - "}" - ))] - -submitscript :: BodyTag -submitscript -= BodyTag - [ Script [] (SScript - ( " function toclean(inp,onclient,submit) {" +++ - " document." +++ globalFormName +++ "." +++ updateInpName +++ ".value=inp.name+\"=\"+inp.value; " +++ - " document." +++ globalFormName +++ "." +++ focusInpName +++ ".value=inp.name;\n;" +++ - " if(submit) {" +++ - " document." +++ globalFormName +++ ".submit();" +++ - " } else {" +++ - " cleanUpdated = true;" +++ - " }" +++ - " }" - )) - , Script [] (SScript - ( " function toclean2(form,onclient,submit)" +++ - " { " +++ - "form.hidden.value=" +++ "document." +++ globalFormName +++ "." +++ globalInpName +++ ".value;" +++ - "form.submit();" +++ - "}" - )) - - ] - -// form that contains global state and empty input form for storing updated input - -globalstateform :: !Value !Value -> BodyTag -globalstateform globalstate focus -= Form [ Frm_Name globalFormName - , Frm_Method Post - , Frm_Enctype "multipart/form-data" // what to do to enable large data ?? - ] - [ Input [ Inp_Name updateInpName - , Inp_Type Inp_Hidden - ] "" - , Input [ Inp_Name globalInpName - , Inp_Type Inp_Hidden - , Inp_Value globalstate - ] "" - , Input [ Inp_Name focusInpName - , Inp_Type Inp_Hidden - , Inp_Value focus - , `Inp_Std [Std_Id focusInpName] - ] "" - ] +callClean event mode elemid lsp action +| isMember mode [Edit, Submit] = [event (SScript ("toClean(this,'" +++ elemid +++ "'," +++ isAction action +++ "," +++ isSubmit mode +++ "," +++ isOnClient lsp +++ ")"))] +| otherwise = [] +where + isAction True = "true" + isAction False = "false" + isSubmit Submit = "true" + isSubmit _ = "false" + + isOnClient Client = "true" + isOnClient _ = "false" isSelector name = name%(0,size selectorInpName - 1) == selectorInpName getSelector name = decodeString (name%(size selectorInpName,size name - 1)) @@ -188,54 +105,26 @@ where // reconstruct HtmlState out of the information obtained from browser -DecodeHtmlStatesAndUpdate :: (Maybe [(String, String)]) -> (![HtmlState],!Triplets, !String) +DecodeHtmlStatesAndUpdate :: [(String, String)] -> (![HtmlState],!Triplets,!String) DecodeHtmlStatesAndUpdate args # (_,triplets,state,focus) = DecodeArguments args = ([states \\states=:(id,_,_,nstate) <- DecodeHtmlStates state | id <> "" || nstate <> ""],triplets, focus) // to be sure that no rubbish is passed on -// Parse and decode low level information obtained from server -// In case of using a php script and external server: - -DecodeArguments :: (Maybe [(String, String)]) -> (!String,!Triplets,!String, !String) -DecodeArguments (Just args) -# nargs = length args -| nargs == 0 = ("clean",[],"","") -| nargs == 1 = DecodeCleanServerArguments (foldl (+++) "" [name +++ "=" +++ value +++ ";" \\ (name,value) <- args]) -//TODO: Get focus from form when CleanServer is not used -# tripargs = reverse args // state hidden in last field, rest are triplets -# (state,tripargs) = (urlDecode (snd (hd tripargs)),tl tripargs) // decode state, get triplets highest positions first - - -# alltriplets = ordertriplets [(triplet,string) \\ (mbtriplet,string) <- map decodeNameValue tripargs, Just triplet <- [parseString mbtriplet]] [] -= ("clean",determineChanged alltriplets ,state,"") // order is important, first the structure than the values ... +// Decode posted form information obtained from http layer +DecodeArguments :: [(String, String)] -> (!String,!Triplets,!String,!String) +DecodeArguments args + # state = http_getValue "GS" args "" + # focus = http_getValue "FS" args "" + # tripargs = [decodeNameValue (n,v) \\ (n,v) <- args | not (isMember n ["GS","FS"])] + # triplets = ordertriplets [(triplet,value) \\ (mbtriplet,value) <- tripargs, Just triplet <- [decodeTriplet mbtriplet]] [] // order is important, first the structure than the values ... + # triplets = determineChanged triplets + = ("clean", triplets, state, focus) where - DecodeCleanServerArguments :: !String -> (!String,!Triplets,!String, !String) // executable, id + update , new , state, focus - DecodeCleanServerArguments args - # input = [c \\ c <-: args | not (isControl c) ] // get rid of communication noise - # (thisexe,input) = mscan '\"' input // get rid of garbage - # input = skipping ['UD\"'] input - # (triplet, input) = mscan '=' input // should give triplet - # (found,index) = FindSubstr ['--'] input - # (new, input) = splitAt index input // should give triplet value - # (_,input) = mscan '=' input - # input = skipping ['\"GS\"'] input - # (found,index) = FindSubstr ['---'] input - # (state, input) = splitAt index input - # state = if found (take index state) [''] - # (_,input) = mscan '=' input - # input = skipping ['\"FS\"'] input - # (found,index) = FindSubstr ['--'] input - # focus = if found (take index input) [''] - # striplet = toString triplet - = if (striplet == "") - ("clean", [], toString state, toString focus) - (if (isSelector striplet) - ("clean", [(fromJust` (decodeChars new) (parseString (decodeChars new)), "")], toString state, toString focus) - ("clean", [(fromJust` (decodeChars triplet) (parseString (decodeChars triplet)) , toString new)], toString state, toString focus)) - - fromJust` _ (Just value) = value - fromJust` string Nothing = ("",0,UpdI 0) - + + fromJustTriplet :: (Maybe Triplet) -> Triplet + fromJustTriplet Nothing = ("",0,UpdI 0) + fromJustTriplet (Just triplet) = triplet + ordertriplets [] accu = accu ordertriplets [x=:((id,_,_),_):xs] accu # (thisgroup,other) = ([x:filter (\((tid,_,_),_) -> tid == id) xs],filter (\((tid,_,_),_) -> tid <> id) xs) @@ -246,29 +135,25 @@ where ++ [x] ++ qsort [y \\ y=:((_,posy,_),_) <- xs | posy < posx] + determineChanged :: [TripletUpdate] -> [TripletUpdate] determineChanged triplets = filter updated triplets where - updated ((_,_,UpdC c1),c2) = c1 <> c2 - updated ((_,_,UpdI i),s) = i <> toInt s - updated ((_,_,UpdR r),s) = r <> toReal s + updated ((_,_,UpdC c1),c2) = c1 <> c2 + updated ((_,_,UpdI i),s) = i <> toInt s + updated ((_,_,UpdR r),s) = r <> toReal s updated ((_,_,UpdB True),"False") = True updated ((_,_,UpdB False),"True") = True updated ((_,_,UpdB b1),b2) = False - updated ((_,_,UpdS s1),s2) = s1 <> s2 + updated ((_,_,UpdS s1),s2) = s1 <> s2 decodeNameValue :: !(!String,!String) -> (!String,!String) -decodeNameValue (encname,encvalue) -= decodeNameValue` (urlDecode encname,urlDecode encvalue) -where - decodeNameValue` (name,value) - | name == "hidden" = (name,value) - | isSelector name = (decodeString value, getSelector name) - | otherwise = (decodeString name, value) +decodeNameValue (name,value) + | isSelector name = (value, getSelector name) + | otherwise = (name, value) // traceHtmlInput utility used to see what kind of rubbish is received from client - -traceHtmlInput :: !(Maybe [(String, String)]) -> BodyTag -traceHtmlInput args=:(Just input) +traceHtmlInput :: [(String, String)] -> BodyTag +traceHtmlInput args = BodyTag [ Br, B [] "State values received from client when application started:", Br, STable [] [ [B [] "Triplets:",Br] , showTriplet triplets @@ -279,7 +164,7 @@ traceHtmlInput args=:(Just input) ] , Br , B [] "Undecoded information from client received:", Br, Br - , BodyTag (foldl (++) [] [[B [] "name = ", Txt (fst (decodeNameValue (name,value))),Br,B [] "value = ", Txt (snd (decodeNameValue (name,value))),Br] \\ (name,value) <- input]) + , BodyTag (foldl (++) [] [[B [] "name = ", Txt (fst (decodeNameValue (name,value))),Br,B [] "value = ", Txt (snd (decodeNameValue (name,value))),Br] \\ (name,value) <- args]) ] where @@ -364,6 +249,10 @@ encodeTriplet triplet = encodeInfo triplet decodeTriplet :: !String -> Maybe Triplet // decoding of triplets decodeTriplet triplet = decodeInfo triplet +// encodes only the formid and counter to use as identifier in html pages +encodeInputId :: !Triplet -> String +encodeInputId (formid, cntr, updval) = encodeInfo (formid, cntr) + // utility functions based on low level encoding - decoding encodeInfo :: !a -> String | gPrint{|*|} a diff --git a/iData/PrintUtil.dcl b/iData/PrintUtil.dcl index 1f66dc9eb..cbad59969 100644 --- a/iData/PrintUtil.dcl +++ b/iData/PrintUtil.dcl @@ -37,6 +37,9 @@ derive gHpr Int, Real, Bool, String, Char, [] print_to_stdout :: !a !*HtmlStream -> *HtmlStream | gHpr{|*|} a +// instance of toString for an html stream. +instance toString [# String !] + // handy utility print routines print :: !String -> FoF diff --git a/iData/PrintUtil.icl b/iData/PrintUtil.icl index 948123916..39fcf45ac 100644 --- a/iData/PrintUtil.icl +++ b/iData/PrintUtil.icl @@ -44,6 +44,31 @@ where myfold file [x:xs] = myfold (gHlist file x) xs myfold file [] = file + +// instance of toString for an html stream. +instance toString [# String !] +where + toString stream + # n_chars = count_chars stream 0 + = copy_strings stream n_chars (createArray n_chars '\0') + where + count_chars [|] n = n + count_chars [|s:l] n = count_chars l (n+size s) + + copy_strings [|e:l] i s + # size_e = size e + # i = i-size_e + = copy_strings l i (copy_chars e 0 i size_e s) + copy_strings [|] 0 s + = s + + copy_chars :: !{#Char} !Int !Int !Int !*{#Char} -> *{#Char} + copy_chars s_s s_i d_i n d_s + | s_i FoF diff --git a/iData/Resources/css/clean.css b/iData/Resources/css/clean.css new file mode 100644 index 000000000..75e9aafbb --- /dev/null +++ b/iData/Resources/css/clean.css @@ -0,0 +1,46 @@ +body { + background-image: url('../img/clean-background.jpg'); + font-family: Arial, Helvetica, sans-serif; + font-style: normal; + font-weight: normal; + font-size: 14pt; + color: white; +} +form { + display: inline; +} +h1 { + text-align: center; + border-bottom: 1px solid; +} +.EditBox { + font-family: Arial, Helvetica, sans-serif; + font-size: 12pt; +} +.DisplayBox { + font-family: Arial, Helvetica, sans-serif; + font-style: normal; + font-weight: normal; + font-size: 12pt; + color: white; + background-color: #32729D; +} +.Label { + color: yellow; + font-weight: bold; +} +.MainLabel { + color: red; + font-weight: bold; +} +.HighLight { + color: aqua; + font-weight: bold; +} +.LowLight { + color: aqua; +} +.Trace { + color: silver; + font-weight: bold; +} diff --git a/iData/Resources/img/clean-background.jpg b/iData/Resources/img/clean-background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ad031d62a41fc7f672aee613e746440f520964ef GIT binary patch literal 10480 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 J%3;)Z{|2kdu{Zz# literal 0 HcmV?d00001 diff --git a/iData/Resources/img/clean-logo.jpg b/iData/Resources/img/clean-logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..be6fc61ae4d1a03be973bb550369587bd9b2331e GIT binary patch literal 2649 zcmbW1c|6qn8pnS#gE0sb6Ve!Kp%O;6n6b_nqU_-^jO>T9ix_kwTXU@8P#9y06hcxd z%ao-Mk~x-aSyI`v&fMvod(Z3sdGCFm*Y|n7zOT=-yuW{ZAJ#|KCqU2?N5BCfw!5+& zU@-yId1HMeNgEG$?|>`6T=DYp2$m!SxGPE8sVFI{0IWZNUjY~wlpD$g?A!^d6X*VCV`D-9RtKmA06?6eKMnYofxr+BPBtHmhZh7u{?gd-FZDk} zK>!SbK)@UjPEHOEcAIFn25`VR4@;@&a|v0xL8SwQRpZi&xn&G$Um>gpR%Fqnpm-S1 z5fM?bqjJYj$SWwSomJP+)Y3LIGREOe2&UFHws!WH930&*dw6&=A3TS>_onOWI6cXIRcOQ@x^vhs?``*rn?8ycIQG(T-?@93nze$&MMb`auMj0YL z(steqo!PGeLzP3;_J&o2!7z6gQ0VO`2PjDL%L7|Q1`?VF-oQpz5oD1OD-2+=`1FE6 z$ekj+nAV#RAaX{HJ7JM#WDQu$JR;^^wzKt|5~unK4-?kvdPXNY1@feBK`2w$nM;EY zv|5k|<&8!94-dbH;<_BO^7iH)bk95Jwq0iNk+IU=siXp{RI4**cPALd^3YHz6K1IJ zr|%K|pPe0(Y8-#xfwy}^X@9%bfg?X9(~GASjYp{_Q$7tLqmqMX1unII&t$5-sK>k^ z+mw&TzTbpXHnBgtSin(CJyvp;hFLbGEkPb;vViONR;gdm%Qu!n_8uMeEHZhOvO;7& zM>*t1TipwTm< zQ>uG0l^0q-WxnFIdo}mQf0lWo*z;2k@+vkZELlM8zlUY*)q$&TroS9}CiH!xMe@6F zAI1k~E=|ubZs2w8=AO`$uI(iAExcj@f(tQ{@5-2r_p;pS2C$cqQ`}ywIMe%m2><;BkY;zuR9y*6$1(Yt%`b8~ZLBkmAiQl{yr!%}C~PjbT)Vc0;L7j90XW(J*Qq z-XZrFHw{HSlq3U+x_x2Bbmq}q9ZG4InB5cIuc|e(*tclh)}G(R9axK-78pCmuL>Q3 zu9wWz@-eRZoF2zm!nO1?1LHAQTwbq~OwSG76_-!XeQa6SOOV6wEXEnrvy+%_0Tz&> z!U86xf9n$)iFFRQhlG-uCshz&y@B^HKI-Y$0}XF z#Diq8G^|_0#B@ZVa}IqXrOIh(D=9EQES%r=Y2`+BITYIcw(_lo&YS+qQ>*4=rXl0b z^P$$nUcV9A${EAg$5vykdqV!L`9S#VWwk!WC zL-MxWvTj~JYFFuZ-zmx8(;g|xU$mFJE(g)d^!{Vk7gH5GrA$l9aaK_w z$^oQw|LXEtoV}ad$9Zh`{X;LjAACDMeMgqokdm{PBi{2s*8`uXj0!X3ThpUQln&2{ zzTHnKq$*ewRd2RSsegz6mT}FCM9{I_8>>4{3C~xOYq4=qYEW&L#VZ^f@;b8BrrRs?^E_r=2}}8yf7SdZ58s>7A0?3s;YOX2_lwDy$7bS@oHfp7Bd}3Z zn;JUED(6K(t$ZiayUxa@D*+|VUa+_0WntEZ+JSQ^cyks2D`hqk^VkdYp1V?St3Urj zRn)X4S)%9Wqd+E^K^--#7imlkG4`o3_ANDP)Cv$FG8HN8)EEY`e|4IBKPSZ_VXzA| zJFx6An#j&n|HCVDm!!`Qh5zo?>=a97RP?&cpt2!I&~2@79n()g|D+v4 zUSX+8TY)5ZNTMQou;ZJ~tv3AP?O=;EC3BZ4m!`*IPJ;31z6*{Y=RtkMbtbtjj<>5% zw1~v#wJ#3}+~@=gxWJh#EK7=(*R^A!25%&&A~fd0gCEZ5#W8@02ZO5 O+G2%97{8)fqyGd!!^D^X literal 0 HcmV?d00001 diff --git a/iData/Resources/jar/jme.jar b/iData/Resources/jar/jme.jar new file mode 100644 index 0000000000000000000000000000000000000000..0e6562cb4ed41093a1b450a984b64400828a99e2 GIT binary patch literal 54935 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 0) { + msg += "&"; + } + msg += values[i][0] + "=" + values[i][1]; + } + return msg; +} + +//Retrieves the values stored in a form as name, value pairs. +function getFormValues(form) { + var values = Array(); + + //Add all tag values + var inputs = form.getElementsByTagName('input'); + for(var i = 0; i < inputs.length; i++) { + if(inputs[i].disabled) { + continue; + } + //Buttons + if(inputs[i].type == "button" || inputs[i].type == "submit") { + continue; + } + //Checkboxes + if(inputs[i].type == "checkbox") { + if(inputs[i].checked) { + values[values.length] = [inputs[i].name, inputs[i].value]; + } else { + values[values.length] = [inputs[i].name, ""]; + } + continue; + } + //Radio inputs + if(inputs[i].type == "radio") { + if(inputs[i].checked) { + values[values.length] = [inputs[i].name, inputs[i].value]; + } + continue; + } + //Other inputs + values[values.length] = [inputs[i].name, inputs[i].value]; + } + //Add all