Skip to content

Commit

Permalink
Implement content-exists function
Browse files Browse the repository at this point in the history
  • Loading branch information
xzyfer committed Apr 22, 2017
1 parent dcb2e3f commit ae2b909
Show file tree
Hide file tree
Showing 5 changed files with 16 additions and 2 deletions.
1 change: 1 addition & 0 deletions src/context.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -831,6 +831,7 @@ namespace Sass {
register_function(ctx, mixin_exists_sig, mixin_exists, env);
register_function(ctx, feature_exists_sig, feature_exists, env);
register_function(ctx, call_sig, call, env);
register_function(ctx, content_exists_sig, content_exists, env);
// Boolean Functions
register_function(ctx, not_sig, sass_not, env);
register_function(ctx, if_sig, sass_if, env);
Expand Down
4 changes: 2 additions & 2 deletions src/expand.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -679,7 +679,6 @@ namespace Sass {

Statement_Ptr Expand::operator()(Mixin_Call_Ptr c)
{

if (recursions > maxRecursion) {
throw Exception::StackError(*c);
}
Expand Down Expand Up @@ -730,13 +729,14 @@ namespace Sass {
Block_Obj trace_block = SASS_MEMORY_NEW(Block, c->pstate());
Trace_Obj trace = SASS_MEMORY_NEW(Trace, c->pstate(), c->name(), trace_block);


env->set_global("is_in_mixin", bool_true);
block_stack.push_back(trace_block);
for (auto bb : body->elements()) {
Statement_Obj ith = bb->perform(this);
if (ith) trace->block()->append(ith);
}
block_stack.pop_back();
env->del_global("is_in_mixin");

env_stack.pop_back();
backtrace_stack.pop_back();
Expand Down
2 changes: 2 additions & 0 deletions src/expand.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ namespace Sass {
std::vector<Media_Block_Ptr> media_block_stack;
std::vector<Backtrace*> backtrace_stack;

Boolean_Obj bool_true;

Statement_Ptr fallback_impl(AST_Node_Ptr n);

private:
Expand Down
9 changes: 9 additions & 0 deletions src/functions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2000,5 +2000,14 @@ namespace Sass {
List_Obj list = Cast<List>(value);
return SASS_MEMORY_NEW(Boolean, pstate, list && list->is_bracketed());
}

Signature content_exists_sig = "content-exists()";
BUILT_IN(content_exists)
{
if (!d_env.has_global("is_in_mixin")) {
error("Cannot call content-exists() except within a mixin.", pstate, backtrace);
}
return SASS_MEMORY_NEW(Boolean, pstate, d_env.has_lexical("@content[m]"));
}
}
}
2 changes: 2 additions & 0 deletions src/functions.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ namespace Sass {
extern Signature simple_selectors_sig;
extern Signature selector_parse_sig;
extern Signature is_bracketed_sig;
extern Signature content_exists_sig;

BUILT_IN(rgb);
BUILT_IN(rgba_4);
Expand Down Expand Up @@ -188,6 +189,7 @@ namespace Sass {
BUILT_IN(simple_selectors);
BUILT_IN(selector_parse);
BUILT_IN(is_bracketed);
BUILT_IN(content_exists);
}
}

Expand Down

0 comments on commit ae2b909

Please sign in to comment.