Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
data-mart-koperasi-itdel
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
kelompok-5-dwbi
data-mart-koperasi-itdel
Commits
4413a3a6
Commit
4413a3a6
authored
Jun 05, 2020
by
evi fanny dear
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Upload New File
parent
856f4a8d
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
588 additions
and
0 deletions
+588
-0
util.js
HTML_05/assets/js/util.js
+588
-0
No files found.
HTML_05/assets/js/util.js
0 → 100644
View file @
4413a3a6
(
function
(
$
)
{
/**
* Generate an indented list of links from a nav. Meant for use with panel().
* @return {jQuery} jQuery object.
*/
$
.
fn
.
navList
=
function
()
{
var
$this
=
$
(
this
);
$a
=
$this
.
find
(
'a'
),
b
=
[];
$a
.
each
(
function
()
{
var
$this
=
$
(
this
),
indent
=
Math
.
max
(
0
,
$this
.
parents
(
'li'
).
length
-
1
),
href
=
$this
.
attr
(
'href'
),
target
=
$this
.
attr
(
'target'
);
b
.
push
(
'<a '
+
'class="link depth-'
+
indent
+
'"'
+
(
(
typeof
target
!==
'undefined'
&&
target
!=
''
)
?
' target="'
+
target
+
'"'
:
''
)
+
(
(
typeof
href
!==
'undefined'
&&
href
!=
''
)
?
' href="'
+
href
+
'"'
:
''
)
+
'>'
+
'<span class="indent-'
+
indent
+
'"></span>'
+
$this
.
text
()
+
'</a>'
);
});
return
b
.
join
(
''
);
};
/**
* Panel-ify an element.
* @param {object} userConfig User config.
* @return {jQuery} jQuery object.
*/
$
.
fn
.
panel
=
function
(
userConfig
)
{
// No elements?
if
(
this
.
length
==
0
)
return
$this
;
// Multiple elements?
if
(
this
.
length
>
1
)
{
for
(
var
i
=
0
;
i
<
this
.
length
;
i
++
)
$
(
this
[
i
]).
panel
(
userConfig
);
return
$this
;
}
// Vars.
var
$this
=
$
(
this
),
$body
=
$
(
'body'
),
$window
=
$
(
window
),
id
=
$this
.
attr
(
'id'
),
config
;
// Config.
config
=
$
.
extend
({
// Delay.
delay
:
0
,
// Hide panel on link click.
hideOnClick
:
false
,
// Hide panel on escape keypress.
hideOnEscape
:
false
,
// Hide panel on swipe.
hideOnSwipe
:
false
,
// Reset scroll position on hide.
resetScroll
:
false
,
// Reset forms on hide.
resetForms
:
false
,
// Side of viewport the panel will appear.
side
:
null
,
// Target element for "class".
target
:
$this
,
// Class to toggle.
visibleClass
:
'visible'
},
userConfig
);
// Expand "target" if it's not a jQuery object already.
if
(
typeof
config
.
target
!=
'jQuery'
)
config
.
target
=
$
(
config
.
target
);
// Panel.
// Methods.
$this
.
_hide
=
function
(
event
)
{
// Already hidden? Bail.
if
(
!
config
.
target
.
hasClass
(
config
.
visibleClass
))
return
;
// If an event was provided, cancel it.
if
(
event
)
{
event
.
preventDefault
();
event
.
stopPropagation
();
}
// Hide.
config
.
target
.
removeClass
(
config
.
visibleClass
);
// Post-hide stuff.
window
.
setTimeout
(
function
()
{
// Reset scroll position.
if
(
config
.
resetScroll
)
$this
.
scrollTop
(
0
);
// Reset forms.
if
(
config
.
resetForms
)
$this
.
find
(
'form'
).
each
(
function
()
{
this
.
reset
();
});
},
config
.
delay
);
};
// Vendor fixes.
$this
.
css
(
'-ms-overflow-style'
,
'-ms-autohiding-scrollbar'
)
.
css
(
'-webkit-overflow-scrolling'
,
'touch'
);
// Hide on click.
if
(
config
.
hideOnClick
)
{
$this
.
find
(
'a'
)
.
css
(
'-webkit-tap-highlight-color'
,
'rgba(0,0,0,0)'
);
$this
.
on
(
'click'
,
'a'
,
function
(
event
)
{
var
$a
=
$
(
this
),
href
=
$a
.
attr
(
'href'
),
target
=
$a
.
attr
(
'target'
);
if
(
!
href
||
href
==
'#'
||
href
==
''
||
href
==
'#'
+
id
)
return
;
// Cancel original event.
event
.
preventDefault
();
event
.
stopPropagation
();
// Hide panel.
$this
.
_hide
();
// Redirect to href.
window
.
setTimeout
(
function
()
{
if
(
target
==
'_blank'
)
window
.
open
(
href
);
else
window
.
location
.
href
=
href
;
},
config
.
delay
+
10
);
});
}
// Event: Touch stuff.
$this
.
on
(
'touchstart'
,
function
(
event
)
{
$this
.
touchPosX
=
event
.
originalEvent
.
touches
[
0
].
pageX
;
$this
.
touchPosY
=
event
.
originalEvent
.
touches
[
0
].
pageY
;
})
$this
.
on
(
'touchmove'
,
function
(
event
)
{
if
(
$this
.
touchPosX
===
null
||
$this
.
touchPosY
===
null
)
return
;
var
diffX
=
$this
.
touchPosX
-
event
.
originalEvent
.
touches
[
0
].
pageX
,
diffY
=
$this
.
touchPosY
-
event
.
originalEvent
.
touches
[
0
].
pageY
,
th
=
$this
.
outerHeight
(),
ts
=
(
$this
.
get
(
0
).
scrollHeight
-
$this
.
scrollTop
());
// Hide on swipe?
if
(
config
.
hideOnSwipe
)
{
var
result
=
false
,
boundary
=
20
,
delta
=
50
;
switch
(
config
.
side
)
{
case
'left'
:
result
=
(
diffY
<
boundary
&&
diffY
>
(
-
1
*
boundary
))
&&
(
diffX
>
delta
);
break
;
case
'right'
:
result
=
(
diffY
<
boundary
&&
diffY
>
(
-
1
*
boundary
))
&&
(
diffX
<
(
-
1
*
delta
));
break
;
case
'top'
:
result
=
(
diffX
<
boundary
&&
diffX
>
(
-
1
*
boundary
))
&&
(
diffY
>
delta
);
break
;
case
'bottom'
:
result
=
(
diffX
<
boundary
&&
diffX
>
(
-
1
*
boundary
))
&&
(
diffY
<
(
-
1
*
delta
));
break
;
default
:
break
;
}
if
(
result
)
{
$this
.
touchPosX
=
null
;
$this
.
touchPosY
=
null
;
$this
.
_hide
();
return
false
;
}
}
// Prevent vertical scrolling past the top or bottom.
if
((
$this
.
scrollTop
()
<
0
&&
diffY
<
0
)
||
(
ts
>
(
th
-
2
)
&&
ts
<
(
th
+
2
)
&&
diffY
>
0
))
{
event
.
preventDefault
();
event
.
stopPropagation
();
}
});
// Event: Prevent certain events inside the panel from bubbling.
$this
.
on
(
'click touchend touchstart touchmove'
,
function
(
event
)
{
event
.
stopPropagation
();
});
// Event: Hide panel if a child anchor tag pointing to its ID is clicked.
$this
.
on
(
'click'
,
'a[href="#'
+
id
+
'"]'
,
function
(
event
)
{
event
.
preventDefault
();
event
.
stopPropagation
();
config
.
target
.
removeClass
(
config
.
visibleClass
);
});
// Body.
// Event: Hide panel on body click/tap.
$body
.
on
(
'click touchend'
,
function
(
event
)
{
$this
.
_hide
(
event
);
});
// Event: Toggle.
$body
.
on
(
'click'
,
'a[href="#'
+
id
+
'"]'
,
function
(
event
)
{
event
.
preventDefault
();
event
.
stopPropagation
();
config
.
target
.
toggleClass
(
config
.
visibleClass
);
});
// Window.
// Event: Hide on ESC.
if
(
config
.
hideOnEscape
)
$window
.
on
(
'keydown'
,
function
(
event
)
{
if
(
event
.
keyCode
==
27
)
$this
.
_hide
(
event
);
});
return
$this
;
};
/**
* Apply "placeholder" attribute polyfill to one or more forms.
* @return {jQuery} jQuery object.
*/
$
.
fn
.
placeholder
=
function
()
{
// Browser natively supports placeholders? Bail.
if
(
typeof
(
document
.
createElement
(
'input'
)).
placeholder
!=
'undefined'
)
return
$
(
this
);
// No elements?
if
(
this
.
length
==
0
)
return
$this
;
// Multiple elements?
if
(
this
.
length
>
1
)
{
for
(
var
i
=
0
;
i
<
this
.
length
;
i
++
)
$
(
this
[
i
]).
placeholder
();
return
$this
;
}
// Vars.
var
$this
=
$
(
this
);
// Text, TextArea.
$this
.
find
(
'input[type=text],textarea'
)
.
each
(
function
()
{
var
i
=
$
(
this
);
if
(
i
.
val
()
==
''
||
i
.
val
()
==
i
.
attr
(
'placeholder'
))
i
.
addClass
(
'polyfill-placeholder'
)
.
val
(
i
.
attr
(
'placeholder'
));
})
.
on
(
'blur'
,
function
()
{
var
i
=
$
(
this
);
if
(
i
.
attr
(
'name'
).
match
(
/-polyfill-field$/
))
return
;
if
(
i
.
val
()
==
''
)
i
.
addClass
(
'polyfill-placeholder'
)
.
val
(
i
.
attr
(
'placeholder'
));
})
.
on
(
'focus'
,
function
()
{
var
i
=
$
(
this
);
if
(
i
.
attr
(
'name'
).
match
(
/-polyfill-field$/
))
return
;
if
(
i
.
val
()
==
i
.
attr
(
'placeholder'
))
i
.
removeClass
(
'polyfill-placeholder'
)
.
val
(
''
);
});
// Password.
$this
.
find
(
'input[type=password]'
)
.
each
(
function
()
{
var
i
=
$
(
this
);
var
x
=
$
(
$
(
'<div>'
)
.
append
(
i
.
clone
())
.
remove
()
.
html
()
.
replace
(
/type="password"/i
,
'type="text"'
)
.
replace
(
/type=password/i
,
'type=text'
)
);
if
(
i
.
attr
(
'id'
)
!=
''
)
x
.
attr
(
'id'
,
i
.
attr
(
'id'
)
+
'-polyfill-field'
);
if
(
i
.
attr
(
'name'
)
!=
''
)
x
.
attr
(
'name'
,
i
.
attr
(
'name'
)
+
'-polyfill-field'
);
x
.
addClass
(
'polyfill-placeholder'
)
.
val
(
x
.
attr
(
'placeholder'
)).
insertAfter
(
i
);
if
(
i
.
val
()
==
''
)
i
.
hide
();
else
x
.
hide
();
i
.
on
(
'blur'
,
function
(
event
)
{
event
.
preventDefault
();
var
x
=
i
.
parent
().
find
(
'input[name='
+
i
.
attr
(
'name'
)
+
'-polyfill-field]'
);
if
(
i
.
val
()
==
''
)
{
i
.
hide
();
x
.
show
();
}
});
x
.
on
(
'focus'
,
function
(
event
)
{
event
.
preventDefault
();
var
i
=
x
.
parent
().
find
(
'input[name='
+
x
.
attr
(
'name'
).
replace
(
'-polyfill-field'
,
''
)
+
']'
);
x
.
hide
();
i
.
show
()
.
focus
();
})
.
on
(
'keypress'
,
function
(
event
)
{
event
.
preventDefault
();
x
.
val
(
''
);
});
});
// Events.
$this
.
on
(
'submit'
,
function
()
{
$this
.
find
(
'input[type=text],input[type=password],textarea'
)
.
each
(
function
(
event
)
{
var
i
=
$
(
this
);
if
(
i
.
attr
(
'name'
).
match
(
/-polyfill-field$/
))
i
.
attr
(
'name'
,
''
);
if
(
i
.
val
()
==
i
.
attr
(
'placeholder'
))
{
i
.
removeClass
(
'polyfill-placeholder'
);
i
.
val
(
''
);
}
});
})
.
on
(
'reset'
,
function
(
event
)
{
event
.
preventDefault
();
$this
.
find
(
'select'
)
.
val
(
$
(
'option:first'
).
val
());
$this
.
find
(
'input,textarea'
)
.
each
(
function
()
{
var
i
=
$
(
this
),
x
;
i
.
removeClass
(
'polyfill-placeholder'
);
switch
(
this
.
type
)
{
case
'submit'
:
case
'reset'
:
break
;
case
'password'
:
i
.
val
(
i
.
attr
(
'defaultValue'
));
x
=
i
.
parent
().
find
(
'input[name='
+
i
.
attr
(
'name'
)
+
'-polyfill-field]'
);
if
(
i
.
val
()
==
''
)
{
i
.
hide
();
x
.
show
();
}
else
{
i
.
show
();
x
.
hide
();
}
break
;
case
'checkbox'
:
case
'radio'
:
i
.
attr
(
'checked'
,
i
.
attr
(
'defaultValue'
));
break
;
case
'text'
:
case
'textarea'
:
i
.
val
(
i
.
attr
(
'defaultValue'
));
if
(
i
.
val
()
==
''
)
{
i
.
addClass
(
'polyfill-placeholder'
);
i
.
val
(
i
.
attr
(
'placeholder'
));
}
break
;
default
:
i
.
val
(
i
.
attr
(
'defaultValue'
));
break
;
}
});
});
return
$this
;
};
/**
* Moves elements to/from the first positions of their respective parents.
* @param {jQuery} $elements Elements (or selector) to move.
* @param {bool} condition If true, moves elements to the top. Otherwise, moves elements back to their original locations.
*/
$
.
prioritize
=
function
(
$elements
,
condition
)
{
var
key
=
'__prioritize'
;
// Expand $elements if it's not already a jQuery object.
if
(
typeof
$elements
!=
'jQuery'
)
$elements
=
$
(
$elements
);
// Step through elements.
$elements
.
each
(
function
()
{
var
$e
=
$
(
this
),
$p
,
$parent
=
$e
.
parent
();
// No parent? Bail.
if
(
$parent
.
length
==
0
)
return
;
// Not moved? Move it.
if
(
!
$e
.
data
(
key
))
{
// Condition is false? Bail.
if
(
!
condition
)
return
;
// Get placeholder (which will serve as our point of reference for when this element needs to move back).
$p
=
$e
.
prev
();
// Couldn't find anything? Means this element's already at the top, so bail.
if
(
$p
.
length
==
0
)
return
;
// Move element to top of parent.
$e
.
prependTo
(
$parent
);
// Mark element as moved.
$e
.
data
(
key
,
$p
);
}
// Moved already?
else
{
// Condition is true? Bail.
if
(
condition
)
return
;
$p
=
$e
.
data
(
key
);
// Move element back to its original location (using our placeholder).
$e
.
insertAfter
(
$p
);
// Unmark element as moved.
$e
.
removeData
(
key
);
}
});
};
})(
jQuery
);
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment